handle negatives correctly by adding sign bit to final result
authorKonstantinos Margaritis <konstantinos.margaritis@vectorcamp.gr>
Fri, 28 Apr 2023 16:41:22 +0000 (16:41 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 2 Jun 2023 18:51:17 +0000 (19:51 +0100)
openpower/isa/butterfly.mdwn
src/openpower/test/alu/maddsubrs_cases.py

index 277305a890b88b0fca581ab0b3f5168cc175e5a9..555e8abd120bc1252c52c2610a5afabe888136f3 100644 (file)
@@ -18,12 +18,14 @@ Pseudo-code:
     res1 <- ROTL64(prod1, XLEN-n)
     res2 <- ROTL64(prod2, XLEN-n)
     m <- MASK(n, (XLEN-1))
-    s1 <- res1[0]
-    s2 <- res2[0]
-    smask1 <- ([s1]*XLEN) & ¬m
-    smask2 <- ([s2]*XLEN) & ¬m
-    RT <- res1 & m | smask1
-    RS <- res2 & m | smask2
+    signbit1 <- res1[0]
+    signbit2 <- res2[0]
+    smask1 <- ([signbit1]*XLEN) & ¬m
+    smask2 <- ([signbit2]*XLEN) & ¬m
+    s64_1 <- [0]*(XLEN-1) || signbit1
+    s64_2 <- [0]*(XLEN-1) || signbit2
+    RT <- (res1 & m | smask1) + s64_1
+    RS <- (res2 & m | smask2) + s64_2
 
 Special Registers Altered:
 
index 9dd48c9721aef2549f123f958b31fdc819f2447b..feace48dfaba8b624de1bd9349d6d851856d36ce 100644 (file)
@@ -24,5 +24,6 @@ class MADDSUBRSTestCase(TestAccumulatorBase):
         e = ExpectedState(pc=4)
         e.intregs[1] = 0x0000aa85
         e.intregs[2] = 0xffffffffffff643e
+        e.intregs[3] = 0x00002d41
         self.add_case(Program(lst, bigendian), initial_regs, expected=e)