Pseudo-code:
- RA <- (RS) & ([0]*48 || UI)
+ RA <- (RS) & EXTZ(UI)
Special Registers Altered:
Pseudo-code:
- RA <- (RS) | ([0]*48 || UI)
+ RA <- (RS) | EXTZ(UI)
Special Registers Altered:
Pseudo-code:
- RA <- (RS) & ([0]*32 || UI || [0]*16)
+ RA <- (RS) & EXTZ(UI || [0]*16)
Special Registers Altered:
Pseudo-code:
- RA <- (RS) | ([0]*32 || UI || [0]*16)
+ RA <- (RS) | EXTZ(UI || [0]*16)
Special Registers Altered:
Pseudo-code:
- RA <- (RS) ^ ([0]*32 || UI || [0]*16)
+ RA <- (RS) ^ EXTZ(UI || [0]*16)
Special Registers Altered:
Pseudo-code:
- RA <- (RS) ^ ([0]*48 || UI)
+ RA <- (RS) ^ EXTZ(UI)
Special Registers Altered:
Pseudo-code:
- s <- (RS)[56]
- RA[56:63] <- (RS)[56:63]
- RA[0:55] <- [s]*56
+ RA <- EXTSXL(RS, XLEN/8)
Special Registers Altered:
Pseudo-code:
- s <- (RS)[48]
- RA[48:63] <- (RS)[48:63]
- RA[0:47] <- [s]*48
+ RA <- EXTSXL(RS, XLEN/4)
Special Registers Altered:
Pseudo-code:
- n <- 32
- do while n < 64
+ n <- (XLEN/2)
+ do while n < XLEN
if (RS)[n] = 1 then
leave
n <- n + 1
- RA <- n - 32
+ RA <- n - (XLEN/2)
Special Registers Altered:
Pseudo-code:
n <- 0
- do while n < 32
- if (RS)[63-n] = 0b1 then
+ do while n < XLEN/2
+ if (RS)[XLEN-1-n] = 0b1 then
leave
n <- n + 1
- RA <- EXTZ64(n)
+ RA <- EXTZ(n)
Special Registers Altered:
Pseudo-code:
- do n = 0 to 7
+ do n = 0 to ((XLEN/8)-1)
if RS[8*n:8* n+7] = (RB)[8*n:8*n+7] then
RA[8*n:8* n+7] <- [1]*8
else
X-Form
-* popcntb RA, RS
+* popcntb RA,RS
Pseudo-code:
- do i = 0 to 7
+ do i = 0 to ((XLEN/8)-1)
n <- 0
do j = 0 to 7
if (RS)[(i*8)+j] = 1 then
X-Form
-* popcntw RA, RS
+* popcntw RA,RS
Pseudo-code:
+ e <- (XLEN/2)-1
do i = 0 to 1
+ s <- i*XLEN/2
n <- 0
- do j = 0 to 31
- if (RS)[(i*32)+j] = 1 then
+ do j = 0 to e
+ if (RS)[s+j] = 1 then
n <- n+1
- RA[(i*32):(i*32)+31] <- n
+ RA[s:s+e] <- n
Special Registers Altered:
Pseudo-code:
s <- 0
- do i = 0 to 7
+ do i = 0 to ((XLEN/8)-1)
s <- s ^ (RS)[i*8+7]
- RA <- [0] * 63 || s
+ RA <- [0] * (XLEN-1) || s
Special Registers Altered:
s <- 0
t <- 0
- do i = 0 to 3
+ do i = 0 to ((XLEN/8/2)-1)
s <- s ^ (RS)[i*8+7]
- do i = 4 to 7
+ do i = 4 to ((XLEN/8)-1)
t <- t ^ (RS)[i*8+7]
- RA[0:31] <- [0]*31 || s
- RA[32:63] <- [0]*31 || t
+ RA[0:(XLEN/2)-1] <- [0]*((XLEN/2)-1) || s
+ RA[XLEN/2:XLEN-1] <- [0]*((XLEN/2)-1) || t
Special Registers Altered:
Pseudo-code:
- s <- (RS)[32]
- RA[32:63] <- (RS)[32:63]
- RA[0:31] <- [s]*32
+ RA <- EXTSXL(RS, XLEN/2)
Special Registers Altered:
X-Form
-* popcntd RA, RS
+* popcntd RA,RS
Pseudo-code:
n <- 0
- do i = 0 to 63
+ do i = 0 to (XLEN-1)
if (RS)[i] = 1 then
n <- n+1
RA <- n
Pseudo-code:
n <- 0
- do while n < 64
+ do while n < XLEN
if (RS)[n] = 1 then
leave
n <- n + 1
Pseudo-code:
n <- 0
- do while n < 64
- if (RS)[63-n] = 0b1 then
+ do while n < XLEN
+ if (RS)[XLEN-1-n] = 0b1 then
leave
n <- n + 1
- RA <- EXTZ64(n)
+ RA <- EXTZ(n)
Special Registers Altered:
CR0 (if Rc=1)
+# Count Leading Zeros Doubleword under bit Mask
+
+X-Form
+
+* cntlzdm RA,RS,RB
+
+Pseudo-code:
+
+ count <- 0
+ do i = 0 to 63
+ if (RB)[i] = 1 then
+ if (RS)[i] = 1 then leave
+ count <- count + 1
+ RA <- EXTZ64(count)
+
+Special Registers Altered:
+
+ None
+
+# Count Trailing Zeros Doubleword under bit Mask
+
+X-Form
+
+* cnttzdm RA,RS,RB
+
+Pseudo-code:
+
+ count <- 0
+ do i = 0 to 63
+ if (RB)[63-i] = 1 then
+ if (RS)[63-i] = 1 then leave
+ count <- count + 1
+ RA <- EXTZ64(count)
+
+Special Registers Altered:
+
+ None
+
# Bit Permute Doubleword
X-Form
-* bpermd RA,RS,RB]
+* bpermd RA,RS,RB
Pseudo-code:
- perm <- [0] * 8
- for i = 0 to 7
+ perm <- [0] * (XLEN/8)
+ for i = 0 to ((XLEN/8)-1)
index <- (RS)[8*i:8*i+7]
- if index < 64 then
+ if index <u XLEN then
perm[i] <- (RB)[index]
else
perm[i] <- 0
- RA <- [0]*56 || perm[0:7]
+ RA <- [0]*(XLEN*7/8) || perm
+
+Special Registers Altered:
+
+ None
+
+# Centrifuge Doubleword
+
+X-Form
+
+* cfuged RA,RS,RB
+
+Pseudo-code:
+
+ ptr0 <- 0
+ ptr1 <- 0
+ result[0:63] <- 0
+ do i = 0 to 63
+ if (RB)[i] = 0 then
+ result[ptr0] <- (RS)[i]
+ ptr0 <- ptr0 + 1
+ if (RB)[63-i] = 1 then
+ result[63-ptr1] <- (RS)[63-i]
+ ptr1 <- ptr1 + 1
+ RA <- result
Special Registers Altered:
None
-<!-- Checked March 2021 -->
+# Parallel Bits Extract Doubleword
+
+X-Form
+
+* pextd RA,RS,RB
+
+Pseudo-code:
+
+ result[0:63] <- 0
+ mask <- (RB)
+ m <- 0
+ k <- 0
+ do while m < 64
+ if (RB)[63-m] = 1 then
+ result[63-k] <- (RS)[63-m]
+ k <- k + 1
+ m <- m + 1
+ RA <- result
+
+Special Registers Altered:
+
+ None
+
+# Parallel Bits Deposit Doubleword
+
+X-Form
+
+* pdepd RA,RS,RB
+
+Pseudo-code:
+
+ result[0:63] <- 0
+ mask <- (RB)
+ m <- 0
+ k <- 0
+ do while m < 64
+ if (RB)[63-m] = 1 then
+ result[63-m] <- (RS)[63-k]
+ k <- k + 1
+ m <- m + 1
+ RA <- result
+
+Special Registers Altered:
+
+ None