[Libre-soc-dev] bug in microwatt stfsu and stfdu
Luke Kenneth Casson Leighton
lkcl at lkcl.net
Wed May 19 11:19:24 BST 2021
(blegh, sorry, having difficulty cut/pasting into HTML-formatted message,
to get alignment here)
-- unit fac internal in1 in2 in3 out CR CR inv inv cry cry ldst BR sgn upd
rsrv 32b sgn rc lk sgl rpt
52 => (LDST, FPU, OP_STORE, RA_OR_ZERO, CONST_SI, FRS, NONE, '0', '0', '0',
'0', ZERO, '0', is4B, '0', '0', '0', '0', '1', '0', NONE, '0', '0', NONE),
-- stfs
53 => (LDST, FPU, OP_STORE, RA_OR_ZERO, CONST_SI, FRS, RA, '0', '0', '0',
'0', ZERO, '0', is4B, '0', '0', '1', '0', '1', '0', NONE, '0', '0', NONE),
-- stfsu
v3.0B book I chapter 4 page 145 section 4.6.3 states:
stfs FRS,D(RA)
if RA = 0 then b <- 0
else b <- (RA)
EA <- + EXTS(D)
but stfsu states simply:
EA <- (RA) + EXTS(D)
thus we conclude that Major 53 is *wrong*, in1 should simply be RA *not*
RA_OR_ZERO.
now that i'm looking at it, stfdu is also wrong.
stfsx is *correct*. stfs is correct. stfd is correct. stfdux is
*wrong*. stfdx is correct.
basically needs a full review. in the above *i'm assuming the spec is
correct*.
l.
More information about the Libre-soc-dev
mailing list