[Libre-soc-isa] [Bug 937] instructions for bigint shift and prefix-code encode
    bugzilla-daemon at libre-soc.org 
    bugzilla-daemon at libre-soc.org
       
    Thu Oct 27 23:41:15 BST 2022
    
    
  
https://bugs.libre-soc.org/show_bug.cgi?id=937
--- Comment #19 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
(In reply to Jacob Lifshay from comment #18)
> imho it's not quite right yet, since we have the carrying version, the
> bigint tests need to be:
> sv.dsld *16, *16, 3, 4  # just like sv.maddedu, but shifting
> sv.dsrd/mrr *16, *16, 3, 4  # just like sv.divmod2du, but shifting
with even-numbered RB, yes
> also try signed right shift, where r4 is initialized to repl(msb, 64):
> sradi 4, 18, 63
> sv.dsrd/mrr *16, *16, 3, 4
> 
> afaict RS needs to be the lsb bits and RT the msb bits for dsrd, because if
> you think about it, RS is the carry -- the bits shifted out of the result,
> those bits are shifted right so are at the lsb end.
yep. i'd cut/paste 64-n instead of 128-n which had the effect of
unintentionally swapping RS and RT as the carry-part and result-part...
sort-of.
--- a/openpower/isa/svfixedarith.mdwn
+++ b/openpower/isa/svfixedarith.mdwn
@@ -75,7 +75,7 @@ VA2-Form
 Pseudo-code:
     n <- (RB)[58:63]
-    v <- ROTL128((RA) || [0]*64, 64-n)
+    v <- ROTL128((RA) || [0]*64, 128-n)
     mask <- ¬MASK(n, 63)
     RT <- v[0:63] | ((RC) & mask)
     RS <- v[64:127]
> afaict RS needs to be the lsb bits and RT the msb bits for dsrd,
likely fixed by above, can you confirm?
-- 
You are receiving this mail because:
You are on the CC list for the bug.
    
    
More information about the Libre-SOC-ISA
mailing list