[Libre-soc-bugs] [Bug 730] adapt ALU test cases to include expected results
bugzilla-daemon at libre-soc.org
bugzilla-daemon at libre-soc.org
Sat Oct 23 15:00:28 BST 2021
https://bugs.libre-soc.org/show_bug.cgi?id=730
--- Comment #10 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
(In reply to klehman9 from comment #7)
> You would think, and call it a quirk, R0 is usually handled differently.
> That's why in a lot of tests you see registers 3,2,1.
>
> If you look at the psuedo code in PowerISA manual, you'll see
> if RA = 0 then RT <-EXTS(SI || 16 0)
> else RT <- (RA) + EXTS(SI || 16 0)
>
> So basically when RA is 0 its value is ignored and the result is only
> shifted.
from section 1.3.2 page 4 of Power ISA 3.0 Book I:
(RA|0) means the contents of register RA if the RA
field has the value 1-31, or the value 0 if the RA
field is 0.
so, from the pseudocode at this line:
https://git.libre-soc.org/?p=openpower-isa.git;a=blob;f=openpower/isa/fixedarith.mdwn;h=46f635294a0ecda189782a11ae985d443a674578;hb=4495f61303afca9790a9e2c3bab4cf8977c7de11#l27
19 # Add Immediate Shifted
20
21 D-Form
22
23 * addis RT,RA,SI
24
25 Pseudo-code:
26
27 RT <- (RA|0) + EXTS(SI || [0]*16)
that "(RA|0)" is equivalent to what kyle wrote.
sometimes, bizarrely, you see this:
if RA = 0 then
b <- 0
else
b <- (RA)
which i have no idea why the pseudocode writers did not just use
b <- (RA|0)
perhaps one day we will be able to contact them and find out
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the libre-soc-bugs
mailing list