Skip to content

Commit

Permalink
Add randomness to register allocation
Browse files Browse the repository at this point in the history
  • Loading branch information
ksco committed May 16, 2024
1 parent d74d3b5 commit ad2a69a
Show file tree
Hide file tree
Showing 39 changed files with 109 additions and 88 deletions.
5 changes: 2 additions & 3 deletions generator/insn_fdvs2.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ func (i *Insn) genCodeFdVs2(pos int) []string {
builder := strings.Builder{}
builder.WriteString(c.initialize())

vd := int(c.LMUL1)
vs2 := int(c.LMUL1) * 2
vd, vs2, _ := getVRegs(c.LMUL1, true, i.Name)

for r := 0; r < i.Option.Repeat; r += 1 {
builder.WriteString(i.gWriteRandomData(LMUL(1)))
Expand All @@ -31,7 +30,7 @@ func (i *Insn) genCodeFdVs2(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL1))
}

res = append(res, builder.String())
Expand Down
4 changes: 3 additions & 1 deletion generator/insn_g.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ func (i *Insn) gMoveScalarToVector(scalar string, vector int, sew SEW) string {
return builder.String()
}

func (i *Insn) gMagicInsn(group int) string {
func (i *Insn) gMagicInsn(group int, lmul1 LMUL) string {

// opcode
insn := 0b0001011
Expand All @@ -163,6 +163,8 @@ func (i *Insn) gMagicInsn(group int) string {
if i.Vxsat {
insn += 1 << 20
}
// rs2[4:1] for EMUL
insn += int(lmul1) << 21

return fmt.Sprintf(".word 0x%x\n", insn)
}
Expand Down
6 changes: 3 additions & 3 deletions generator/insn_rdvs2.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ func (i *Insn) genCodeRdVs2(pos int) []string {
builder := strings.Builder{}
builder.WriteString(c.initialize())

vd := int(c.LMUL1)
vs2 := int(c.LMUL1) * 2
vd, vs2, _ := getVRegs(c.LMUL1, true, i.Name)

builder.WriteString(i.gWriteRandomData(LMUL(1)))
builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, c.LMUL1, SEW(8)))

Expand All @@ -30,7 +30,7 @@ func (i *Insn) genCodeRdVs2(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL1))

res = append(res, builder.String())
}
Expand Down
6 changes: 3 additions & 3 deletions generator/insn_rdvs2vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ func (i *Insn) genCodeRdVs2Vm(pos int) []string {
builder := strings.Builder{}
builder.WriteString(c.initialize())

vd := int(c.LMUL1)
vs2 := int(c.LMUL1) * 2
vd, vs2, _ := getVRegs(c.LMUL1, false, i.Name)

builder.WriteString(i.gWriteRandomData(LMUL(3)))
builder.WriteString(i.gLoadDataIntoRegisterGroup(0, c.LMUL1, SEW(8)))

Expand All @@ -36,7 +36,7 @@ func (i *Insn) genCodeRdVs2Vm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL1, SEW(i.Option.XLEN)))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL1))

res = append(res, builder.String())
}
Expand Down
28 changes: 28 additions & 0 deletions generator/insn_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package generator

import (
"fmt"
"hash/fnv"
"log"
"math/rand"
"regexp"
"strconv"
)
Expand Down Expand Up @@ -152,3 +154,29 @@ func ma(mask bool) string {
}
return "mu"
}


func hash(s string) uint32 {
h := fnv.New32a()
h.Write([]byte(s))
return h.Sum32()
}

func getVRegs(lmul1 LMUL, v0 bool, seed string) (int, int, int) {
if lmul1 < LMUL(1) {
log.Fatalln("unreachable")
}

availableOptions := make([]int, 0)
for i := iff(v0, 0, int(lmul1)); i < 32; i += int(lmul1) {
availableOptions = append(availableOptions, i)
}

rand.Seed(int64(len(availableOptions)) + int64(hash(seed)))

rand.Shuffle(len(availableOptions), func(i, j int) {
availableOptions[i], availableOptions[j] = availableOptions[j], availableOptions[i]
})

return availableOptions[0], availableOptions[1], availableOptions[2]
}
5 changes: 3 additions & 2 deletions generator/insn_vdfs1.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ func (i *Insn) genCodeVdFs1(pos int) []string {
builder := strings.Builder{}
builder.WriteString(c.initialize())

vd := int(c.LMUL1)
vd, _, _ := getVRegs(c.LMUL1, true, i.Name)

builder.WriteString(i.gWriteRandomData(c.LMUL1))
builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, c.LMUL1, SEW(8)))

Expand All @@ -35,7 +36,7 @@ func (i *Insn) genCodeVdFs1(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL1))

res = append(res, builder.String())
}
Expand Down
5 changes: 2 additions & 3 deletions generator/insn_vdfs1vs2vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ func (i *Insn) genCodeVdFs1Vs2Vm(pos int) []string {
continue
}

vd := int(vdEMUL1)
vs2 := vd * 2
vd, vs2, _ := getVRegs(vdEMUL1, false, i.Name)

for r := 0; r < i.Option.Repeat; r += 1 {
builder.WriteString(i.gWriteTestData(true, !i.NoTestfloat3, r != 0, vdEMUL1, vdEEW, 0, 2))
Expand All @@ -61,7 +60,7 @@ func (i *Insn) genCodeVdFs1Vs2Vm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, vdEMUL1, vdEEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, vdEMUL1))
}
}

Expand Down
4 changes: 2 additions & 2 deletions generator/insn_vdimm.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ func (i *Insn) genCodeVdImm(pos int) []string {
builder := strings.Builder{}
builder.WriteString(c.initialize())

vd := int(c.LMUL1)
vd, _, _ := getVRegs(c.LMUL1, true, i.Name)
builder.WriteString(i.gWriteRandomData(c.LMUL1))
builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, c.LMUL1, c.SEW))

Expand All @@ -39,7 +39,7 @@ func (i *Insn) genCodeVdImm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL1))
}

res = append(res, builder.String())
Expand Down
5 changes: 3 additions & 2 deletions generator/insn_vdrs1.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ func (i *Insn) genCodeVdRs1(pos int) []string {
builder := strings.Builder{}
builder.WriteString(c.initialize())

vd := int(c.LMUL1)
vd, _, _ := getVRegs(c.LMUL1, true, i.Name)

builder.WriteString(i.gWriteRandomData(c.LMUL1))
builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, c.LMUL1, SEW(8)))

Expand All @@ -34,7 +35,7 @@ func (i *Insn) genCodeVdRs1(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL1))

res = append(res, builder.String())
}
Expand Down
5 changes: 3 additions & 2 deletions generator/insn_vdrs1m.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ func (i *Insn) genCodeVdRs1m(pos int) []string {
builder := strings.Builder{}
builder.WriteString(c.initialize())

vd := int(c.LMUL1)
vd, _, _ := getVRegs(c.LMUL1, true, i.Name)

builder.WriteString(i.gWriteRandomData(c.LMUL1))
builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, c.LMUL1, c.SEW))
builder.WriteString(i.gWriteIntegerTestData(c.LMUL1, c.SEW, 0))
Expand All @@ -39,7 +40,7 @@ func (i *Insn) genCodeVdRs1m(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL1))

res = append(res, builder.String())
}
Expand Down
8 changes: 4 additions & 4 deletions generator/insn_vdrs1mrs2vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ func (i *Insn) genCodeVdRs1mRs2Vm(pos int) []string {
builder.WriteString(i.gWriteRandomData(LMUL(1)))
builder.WriteString(i.gLoadDataIntoRegisterGroup(0, LMUL(1), SEW(32)))

lmul1 := LMUL(math.Max(float64(c.LMUL)*float64(nfields), 1))
vd := int(lmul1)
lmul1 := LMUL(math.Max(float64(c.LMUL1)*float64(nfields), 1))
vd, _, _ := getVRegs(lmul1, false, i.Name)
builder.WriteString(i.gWriteRandomData(lmul1))
builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, lmul1, c.SEW))
builder.WriteString(i.gWriteIntegerTestData(lmul1, c.SEW, 0))
Expand All @@ -36,7 +36,7 @@ func (i *Insn) genCodeVdRs1mRs2Vm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, lmul1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, lmul1))

for _, stride := range []int{minStride, 0, 1, maxStride} {
stride = stride * int(c.SEW) / 8
Expand All @@ -55,7 +55,7 @@ func (i *Insn) genCodeVdRs1mRs2Vm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, lmul1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, lmul1))
}
res = append(res, builder.String())
}
Expand Down
6 changes: 3 additions & 3 deletions generator/insn_vdrs1mvm.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ func (i *Insn) genCodeVdRs1mVm(pos int) []string {
builder.WriteString(i.gWriteRandomData(LMUL(1)))
builder.WriteString(i.gLoadDataIntoRegisterGroup(0, LMUL(1), SEW(32)))

lmul1 := LMUL(math.Max(float64(c.LMUL)*float64(nfields), 1))
vd := int(lmul1)
lmul1 := LMUL(math.Max(float64(c.LMUL1)*float64(nfields), 1))
vd, _, _ := getVRegs(lmul1, false, i.Name)
builder.WriteString(i.gWriteRandomData(lmul1))
builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, lmul1, c.SEW))
builder.WriteString(i.gWriteIntegerTestData(lmul1, c.SEW, 0))
Expand All @@ -36,7 +36,7 @@ func (i *Insn) genCodeVdRs1mVm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, lmul1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, lmul1))

res = append(res, builder.String())
}
Expand Down
2 changes: 1 addition & 1 deletion generator/insn_vdrs1mvs2vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ func (i *Insn) genCodeVdRs1mVs2Vm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, lmul1, sew))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, lmul1))
}
res = append(res, builder.String())
}
Expand Down
5 changes: 2 additions & 3 deletions generator/insn_vdrs1vs2vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ func (i *Insn) genCodeVdRs1Vs2Vm(pos int) []string {
continue
}

vd := int(vdEMUL1)
vs2 := vd * 2
vd, vs2, _ := getVRegs(vdEMUL1, false, i.Name)
builder.WriteString(i.gWriteIntegerTestData(vdEMUL1, vdEEW, 0))
builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, vdEMUL1, vdEEW))

Expand All @@ -61,7 +60,7 @@ func (i *Insn) genCodeVdRs1Vs2Vm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, vdEMUL1, vdEEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, vdEMUL1))
}

res = append(res, builder.String())
Expand Down
4 changes: 2 additions & 2 deletions generator/insn_vdvm.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func (i *Insn) genCodeVdVm(pos int) []string {
builder.WriteString(i.gWriteRandomData(LMUL(1)))
builder.WriteString(i.gLoadDataIntoRegisterGroup(0, LMUL(1), SEW(32)))

vd := int(c.LMUL1)
vd, _, _ := getVRegs(c.LMUL1, false, i.Name)
builder.WriteString(i.gWriteRandomData(c.LMUL1))
builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, c.LMUL1, SEW(8)))

Expand All @@ -29,7 +29,7 @@ func (i *Insn) genCodeVdVm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL1))

res = append(res, builder.String())
}
Expand Down
5 changes: 2 additions & 3 deletions generator/insn_vdvs1.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ func (i *Insn) genCodeVdVs1(pos int) []string {
builder := strings.Builder{}
builder.WriteString(c.initialize())

vd := int(c.LMUL1)
vs1 := 2 * int(c.LMUL1)
vd, vs1, _ := getVRegs(c.LMUL1, true, i.Name)
builder.WriteString(i.gWriteRandomData(c.LMUL1))
builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, c.LMUL1, c.SEW))

Expand All @@ -29,7 +28,7 @@ func (i *Insn) genCodeVdVs1(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL1))

res = append(res, builder.String())
}
Expand Down
2 changes: 1 addition & 1 deletion generator/insn_vdvs1vs2vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func (i *Insn) genCodeVdVs1Vs2Vm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, vdEMUL1, vdEEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, vdEMUL1))
}

res = append(res, builder.String())
Expand Down
5 changes: 2 additions & 3 deletions generator/insn_vdvs2.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ func (i *Insn) genCodeVdVs2(pos int) []string {
builder := strings.Builder{}
builder.WriteString(c.initialize())

vd := int(c.LMUL)
vs2 := 2 * int(c.LMUL)
vd, vs2, _ := getVRegs(c.LMUL, true, i.Name)
builder.WriteString(i.gWriteRandomData(c.LMUL * 2))

builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, c.LMUL, c.SEW))
Expand All @@ -39,7 +38,7 @@ func (i *Insn) genCodeVdVs2(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL))

res = append(res, builder.String())

Expand Down
5 changes: 2 additions & 3 deletions generator/insn_vdvs2fs1v0.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ func (i *Insn) genCodeVdVs2Fs1V0(pos int) []string {
builder.WriteString(i.gWriteRandomData(LMUL(1)))
builder.WriteString(i.gLoadDataIntoRegisterGroup(0, LMUL(1), SEW(32)))

vd := int(c.LMUL1)
vs2 := 2 * int(c.LMUL1)
vd, vs2, _ := getVRegs(c.LMUL1, false, i.Name)

for r := 0; r < i.Option.Repeat; r += 1 {
builder.WriteString(i.gWriteRandomData(c.LMUL1))
Expand All @@ -43,7 +42,7 @@ func (i *Insn) genCodeVdVs2Fs1V0(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, c.LMUL1, c.SEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, c.LMUL1))
}
}

Expand Down
5 changes: 2 additions & 3 deletions generator/insn_vdvs2fs1vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ func (i *Insn) genCodeVdVs2Fs1Vm(pos int) []string {
continue
}

vd := int(vdEMUL1)
vs2 := vd * 2
vd, vs2, _ := getVRegs(vdEMUL1, false, i.Name)

for r := 0; r < i.Option.Repeat; r += 1 {
builder.WriteString(i.gWriteRandomData(vdEMUL1))
Expand All @@ -65,7 +64,7 @@ func (i *Insn) genCodeVdVs2Fs1Vm(pos int) []string {

builder.WriteString(i.gResultDataAddr())
builder.WriteString(i.gStoreRegisterGroupIntoResultData(vd, vdEMUL1, vdEEW))
builder.WriteString(i.gMagicInsn(vd))
builder.WriteString(i.gMagicInsn(vd, vdEMUL1))
}
}

Expand Down
Loading

0 comments on commit ad2a69a

Please sign in to comment.