Fix failing cases, all tests pass now
authorKonstantinos Margaritis <konstantinos.margaritis@vectorcamp.gr>
Thu, 20 Jul 2023 15:51:39 +0000 (15:51 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 22 Dec 2023 19:26:19 +0000 (19:26 +0000)
openpower/isa/butterfly.mdwn

index a1825ad8bffda1542c62a6ad3037ef398e19f880..93a6c4bca8c0912beca8c1f84616f51f782df6c0 100644 (file)
@@ -16,18 +16,18 @@ Pseudo-code:
     prod1 <- MULS(RB, sum)
     prod2 <- MULS(RB, diff)
     if n = 0 then
-        prod1_lo <- prod1[XLEN:(XLEN*2)-1]
-        prod2_lo <- prod2[XLEN:(XLEN*2)-1]
+        prod1_lo <- prod1[XLEN:(XLEN*2) - 1]
+        prod2_lo <- prod2[XLEN:(XLEN*2) - 1]
         RT <- prod1_lo
         RS <- prod2_lo
     else
         round <- [0]*(XLEN*2)
-        round[XLEN*2 -n] <- 1
+        round[XLEN*2 - n] <- 1
         prod1 <- prod1 + round
         prod2 <- prod2 + round
-        m <- MASK(XLEN-n, XLEN-1)
-        res1 <- prod1[XLEN-n:XLEN*2 -n -1]
-        res2 <- prod2[XLEN-n:XLEN*2 -n -1]
+        m <- MASK(XLEN - n - 2, XLEN - 1)
+        res1 <- prod1[XLEN - n:XLEN*2 - n - 1]
+        res2 <- prod2[XLEN - n:XLEN*2 - n - 1]
         signbit1 <- prod1[0]
         signbit2 <- prod2[0]
         smask1 <- ([signbit1]*XLEN) & ¬m
@@ -50,21 +50,21 @@ Pseudo-code:
     n <- SH
     prod <- MULS(RB, RA)
     if n = 0 then
-        prod_lo <- prod[XLEN:(XLEN*2)-1]
+        prod_lo <- prod[XLEN:(XLEN*2) - 1]
         RT <- (RT) + prod_lo
         RS <- (RS) - prod_lo
     else
-        res1 <- (RT) + prod
-        res2 <- (RS) - prod
+        res1[0:XLEN*2-1] <- (EXTSXL((RT)[0], 1) || (RT)) + prod
+        res2[0:XLEN*2-1] <- (EXTSXL((RS)[0], 1) || (RS)) - prod
         round <- [0]*XLEN*2
-        round[XLEN*2 -n] <- 1
+        round[XLEN*2 - n] <- 1
         res1 <- res1 + round
         res2 <- res2 + round
         signbit1 <- res1[0]
         signbit2 <- res2[0]
-        m <- MASK(XLEN-n, (XLEN-1))
-        res1 <- prod1[XLEN-n:XLEN*2 -n -1]
-        res2 <- prod2[XLEN-n:XLEN*2 -n -1]
+        m <- MASK(XLEN -n - 2, XLEN - 1)
+        res1 <- res1[XLEN - n:XLEN*2 - n -1]
+        res2 <- res2[XLEN - n:XLEN*2 - n -1]
         smask1 <- ([signbit1]*XLEN) & ¬m
         smask2 <- ([signbit2]*XLEN) & ¬m
         RT <- (res1 | smask1)