REMAP fmadds FRT, FRA, FRC, FRB
"""
lst = SVP64Asm(["svremap 2, 2, 3, 0",
- "sv.fmadds 0.v, 8.v, 16.v, 0.v"
- #"fmadds 0, 0, 0, 4"
+ "sv.fmadds 0.v, 16.v, 32.v, 0.v"
])
lst = list(lst)
res = []
# store FPs
for i, (x, y) in enumerate(zip(xf, yf)):
- fprs[i+8] = fp64toselectable(float(x)) # X matrix
- fprs[i+16] = fp64toselectable(float(y)) # Y matrix
+ fprs[i+16] = fp64toselectable(float(x)) # X matrix
+ fprs[i+32] = fp64toselectable(float(y)) # Y matrix
continue
#t = DOUBLE2SINGLE(fp64toselectable(t)) # convert to Power single
#u = DOUBLE2SINGLE(fp64toselectable(u)) # from double
# if bit-reverse mode requested
bitrev = rm_dec.ldstmode == SVP64LDSTmode.BITREVERSE
comb += self.use_svp64_ldst_dec.eq(bitrev)
- # if SVP64 FFT mode enabled
- comb += self.use_svp64_fft.eq(self.is_svp64_mode)
+ # detect if SVP64 FFT mode enabled (really bad hack)
+ xo = Signal(2) # 2 bits from Major 59 XO field == 0b00XXX
+ comb += xo.eq(self.dec.opcode_in[4:6])
+ comb += self.use_svp64_fft.eq((major == 59) & (xo == 0b00))
# decoded/selected instruction flags
comb += self.do_copy("data_len", self.op_get("ldst_len"))
'sv.ffmadds 6.v, 2.v, 4.v, 6.v',
'svremap 2, 2, 3, 0',
]
+ lst = [
+ 'sv.fmadds 0.v, 8.v, 16.v, 4.v',
+ ]
isa = SVP64Asm(lst, macros=macros)
print ("list", list(isa))
csvs = SVP64RM()