whoops one extra bit on the overflow test in mullw/mulld
[libreriscv.git] / openpower / isa / fixedlogical.mdwn
index b3e620ea9be2ec5284ca90d965ea6f3c227bb98e..13fdf8d396634aae240b5ba2a40bba636ff08b61 100644 (file)
@@ -4,6 +4,8 @@ D-Form
 
 * andi.  RA,RS,UI
 
+Pseudo-code:
+
     RA <- (RS) & ([0]*48 || UI)
 
 Special Registers Altered:
@@ -16,6 +18,8 @@ D-Form
 
 * ori RA,RS,UI
 
+Pseudo-code:
+
     RA <- (RS) | ([0]*48 || UI)
 
 Special Registers Altered:
@@ -28,6 +32,8 @@ D-Form
 
 * andis.  RA,RS,UI
 
+Pseudo-code:
+
     RA <- (RS) & ([0]*32 || UI || [0]*16)
 
 Special Registers Altered:
@@ -40,6 +46,8 @@ D-Form
 
 * oris      RA,RS,UI
 
+Pseudo-code:
+
     RA <- (RS) | ([0]*32 || UI || [0]*16)
 
 Special Registers Altered:
@@ -52,6 +60,8 @@ D-Form
 
 * xoris RA,RS,UI
 
+Pseudo-code:
+
     RA <- (RS) ^ ([0]*32 || UI || [0]*16)
 
 Special Registers Altered:
@@ -64,6 +74,8 @@ D-Form
 
 * xori RA,RS,UI
 
+Pseudo-code:
+
     RA <- (RS) ^ ([0]*48 || UI)
 
 Special Registers Altered:
@@ -77,6 +89,8 @@ X-Form
 * and RA,RS,RB (Rc=0)
 * and.  RA,RS,RB (Rc=1)
 
+Pseudo-code:
+
     RA <- (RS) & (RB)
 
 Special Registers Altered:
@@ -90,6 +104,8 @@ X-Form
 * or RA,RS,RB (Rc=0)
 * or.  RA,RS,RB (Rc=1)
 
+Pseudo-code:
+
     RA <- (RS) | (RB)
 
 Special Registers Altered:
@@ -103,6 +119,8 @@ X-Form
 * xor RA,RS,RB (Rc=0)
 * xor.  RA,RS,RB (Rc=1)
 
+Pseudo-code:
+
     RA <- (RS) ^ (RB)
 
 Special Registers Altered:
@@ -116,6 +134,8 @@ X-Form
 * nand RA,RS,RB (Rc=0)
 * nand.  RA,RS,RB (Rc=1)
 
+Pseudo-code:
+
     RA <- ¬((RS) & (RB))
 
 Special Registers Altered:
@@ -129,6 +149,8 @@ X-Form
 * nor RA,RS,RB (Rc=0)
 * nor.  RA,RS,RB (Rc=1)
 
+Pseudo-code:
+
     RA <- ¬((RS) | (RB))
 
 Special Registers Altered:
@@ -142,6 +164,8 @@ X-Form
 * eqv RA,RS,RB (Rc=0)
 * eqv.  RA,RS,RB (Rc=1)
 
+Pseudo-code:
+
     RA <- ¬((RS) ^ (RB))
 
 Special Registers Altered:
@@ -155,6 +179,8 @@ X-Form
 * andc RA,RS,RB (Rc=0)
 * andc.  RA,RS,RB (Rc=1)
 
+Pseudo-code:
+
     RA <- (RS) &  ¬(RB)
 
 Special Registers Altered:
@@ -168,6 +194,8 @@ X-Form
 * orc RA,RS,RB (Rc=0)
 * orc.  RA,RS,RB (Rc=1)
 
+Pseudo-code:
+
     RA <- (RS) |  ¬(RB)
 
 Special Registers Altered:
@@ -181,6 +209,8 @@ X-Form
 * extsb RA,RS (Rc=0)
 * extsb.  RA,RS (Rc=1)
 
+Pseudo-code:
+
     s <- (RS)[56]
     RA[56:63] <- (RS)[56:63]
     RA[0:55] <- [s]*56
@@ -196,6 +226,8 @@ X-Form
 * extsh RA,RS (Rc=0)
 * extsh.  RA,RS (Rc=1)
 
+Pseudo-code:
+
     s <- (RS)[48]
     RA[48:63] <-  (RS)[48:63]
     RA[0:47] <- [s]*48
@@ -211,6 +243,8 @@ X-Form
 * cntlzw RA,RS (Rc=0)
 * cntlzw.  RA,RS (Rc=1)
 
+Pseudo-code:
+
     n <- 32
     do while n < 64
        if (RS)[n] = 1 then
@@ -229,9 +263,11 @@ X-Form
 * cnttzw RA,RS (Rc=0)
 * cnttzw.  RA,RS (Rc=1)
 
+Pseudo-code:
+
     n <- 0
     do while n < 32
-       if (RS)[63-n=] = 0b1 then
+       if (RS)[63-n] = 0b1 then
             leave
        n  <- n + 1
     RA <- EXTZ64(n)
@@ -246,6 +282,8 @@ X-Form
 
 * cmpb RA,RS,RB
 
+Pseudo-code:
+
     do n = 0 to 7
         if RS[8*n:8* n+7] = (RB)[8*n:8*n+7] then
            RA[8*n:8* n+7] <- [1]*8
@@ -262,6 +300,8 @@ X-Form
 
 * popcntb RA, RS
 
+Pseudo-code:
+
     do i = 0 to 7
        n <-  0
        do j = 0 to 7
@@ -279,6 +319,8 @@ X-Form
 
 * popcntw RA, RS
 
+Pseudo-code:
+
     do i = 0 to 1
        n <-  0
        do j = 0 to 31
@@ -296,9 +338,11 @@ X-Form
 
 * prtyd RA,RS
 
+Pseudo-code:
+
     s <- 0
     do i = 0 to 7
-        s <- s / (RS)[i%8+7]
+        s <- s ^ (RS)[i*8+7]
     RA <- [0] * 63 || s
 
 Special Registers Altered:
@@ -311,12 +355,14 @@ X-Form
 
 * prtyw RA,RS
 
+Pseudo-code:
+
     s <- 0
     t <- 0
     do i = 0 to 3
-        s <-  s / (RS)i%8+7
+        s <-  s ^ (RS)[i*8+7]
     do i = 4 to 7
-        t <-  t / (RS)i%8+7
+        t <-  t ^ (RS)[i*8+7]
     RA[0:31] <- [0]*31 || s
     RA[32:63] <- [0]*31 || t
 
@@ -331,6 +377,8 @@ X-Form
 * extsw RA,RS (Rc=0)
 * extsw.  RA,RS (Rc=1)
 
+Pseudo-code:
+
     s <- (RS)[32]
     RA[32:63] <- (RS)[32:63]
     RA[0:31] <- [s]*32
@@ -345,6 +393,8 @@ X-Form
 
 * popcntd RA, RS
 
+Pseudo-code:
+
     n <- 0
     do i = 0 to 63
        if (RS)[i] = 1 then
@@ -362,6 +412,8 @@ X-Form
 * cntlzd RA,RS (Rc=0)
 * cntlzd.  RA,RS (Rc=1)
 
+Pseudo-code:
+
     n <- 0
     do while n < 64
       if (RS)[n]  = 1 then
@@ -380,6 +432,8 @@ X-Form
 * cnttzd RA,RS (Rc=0)
 * cnttzd.  RA,RS (Rc=1)
 
+Pseudo-code:
+
     n  <- 0
     do while n < 64
        if (RS)[63-n] = 0b1 then
@@ -397,8 +451,10 @@ X-Form
 
 * bpermd RA,RS,RB]
 
+Pseudo-code:
+
     perm <- [0] * 8
-    For i = 0 to 7
+    for i = 0 to 7
        index <- (RS)[8*i:8*i+7]
        if index < 64 then
             perm[i] <- (RB)[index]