in3, in3_isvec)
log ("get_pdecode_idx_in FRS in3", name, in3_sel, In3Sel.FRS.value,
in3, in3_isvec)
+ log ("get_pdecode_idx_in FRB in2", name, in2_sel, In2Sel.FRB.value,
+ in2, in2_isvec)
log ("get_pdecode_idx_in FRC in3", name, in3_sel, In3Sel.FRC.value,
in3, in3_isvec)
# identify which regnames map to in1/2/3
# using pre-arranged schedule. all of this is awful but it is a
# start. next job will be to put the proper activation in place
yield self.dec2.remap_active.eq(1 if self.last_op_svshape else 0)
- if self.last_op_svshape:
+ if self.is_svp64_mode and self.last_op_svshape:
# get four SVSHAPEs. here we are hard-coding
# SVSHAPE0 to FRT, SVSHAPE1 to FRA, SVSHAPE2 to FRC and
# SVSHAPE3 to FRB, assuming "fmadd FRT, FRA, FRC, FRB."
SVSHAPE1 = self.spr['SVSHAPE1']
SVSHAPE2 = self.spr['SVSHAPE2']
SVSHAPE3 = self.spr['SVSHAPE3']
- print ("svshape0", bin(SVSHAPE0.value))
- print (" xdim", SVSHAPE0.xdimsz)
- print (" ydim", SVSHAPE0.ydimsz)
- print (" zdim", SVSHAPE0.zdimsz)
+ for i in range(4):
+ sname = 'SVSHAPE%d' % i
+ shape = self.spr[sname]
+ print (sname, bin(shape.value))
+ print (" lims", shape.lims)
+ print (" mode", shape.mode)
+ print (" skip", shape.skip)
+
remaps = [SVSHAPE0.get_iterator(),
SVSHAPE1.get_iterator(),
SVSHAPE2.get_iterator(),
elif i == 1:
yield self.dec2.in1_step.eq(remap_idx)
elif i == 2:
- yield self.dec2.in2_step.eq(remap_idx)
- elif i == 3:
yield self.dec2.in3_step.eq(remap_idx)
+ elif i == 3:
+ yield self.dec2.in2_step.eq(remap_idx)
rremaps.append((i, idx, remap_idx))
for x in rremaps:
print ("shape remap", x)
fields = list(map(int, fields))
insn |= (fields[0]-1) << (31-10) # SVxd , bits 6-10
insn |= (fields[1]-1) << (31-15) # SVyd , bits 11-15
- insn |= (fields[2]-1) << (31-16) # SVzd , bits 16-20
- insn |= (fields[3]) << (31-21) # SVRM , bits 21-25
+ insn |= (fields[2]-1) << (31-20) # SVzd , bits 16-20
+ insn |= (fields[3]) << (31-25) # SVRM , bits 21-25
insn |= 0b00001 << (31-30) # XO , bits 26..30
log ("svremap", bin(insn))
yield ".long 0x%x" % insn