bitmanip: sync shadd/shadduw pseudocode
authorDmitry Selyutin <ghostmansd@gmail.com>
Thu, 27 Oct 2022 16:49:00 +0000 (19:49 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Tue, 28 Mar 2023 09:20:32 +0000 (12:20 +0300)
openpower/sv/bitmanip.mdwn

index 5ad241f3f25b01488dd178b3cbf53ac74239f352..dae0121a550398fa6ed4021a3fb809d31aa7b278 100644 (file)
@@ -264,16 +264,15 @@ Replaces a pair of explicit instructions in hot-loops.
 
 Pseudo-code (shadd):
 
-    shift <- shift + 1                 # Shift is between 1-4
-    sum[0:63] <- ((RB) << shift) + (RA) # Shift RB, add RA
-    RT <- sum                          # Result stored in RT
+    n <- (RB)
+    m <- sm + 1
+    RT <- (n[m:XLEN-1] || [0]*m) + (RA)
 
 Pseudo-code (shadduw):
 
-    shift <- shift + 1                 # Shift is between 1-4
-    n <- (RB)[XLEN/2:XLEN-1]           # Limit RB to upper word (32-bits)
-    sum[0:63] <- (n << shift) + (RA)    # Shift n, add RA
-    RT <- sum                          # Result stored in RT
+    n <- ([0]*(XLEN/2)) || (RB)[XLEN/2:XLEN-1]
+    m <- sm + 1
+    RT <- (n[m:XLEN-1] || [0]*m) + (RA)
 
 ```
 uint_xlen_t shadd(uint_xlen_t RA, uint_xlen_t RB, uint8_t sm) {