Gather instruction
X-Form
- gbbd RT,RA
Pseudo-code:
result <- [0] * 64
do j = 0 to 7
do k = 0 to 7
b <- (RA)[k*8+j]
result[j*8+k] <- b
RT <- result
Special Registers Altered:
CR0 (if Rc=1)
Ternary Bitwise Logic Immediate
TLI-Form
- ternlogi RT,RA,RB,TLI (Rc=0)
- ternlogi. RT,RA,RB,TLI (Rc=1)
Pseudo-code:
result <- [0] * XLEN
do i = 0 to XLEN - 1
idx <- (RT)[i] || (RA)[i] || (RB)[i]
result[i] <- TLI[idx]
RT <- result
Special Registers Altered:
CR0 (if Rc=1)
GPR Dynamic Binary Logic
BM2-Form
- binlog RT,RA,RB,RC,nh
Pseudo-code:
if nh = 1 then lut <- (RC)[56:59]
else lut <- (RC)[60:63]
result <- [0] * 64
do i = 0 to 63
idx <- (RA)[i] || (RB)[i]
result[i] <- lut[idx]
RT <- result
Description:
If nh contains a 0, let lut be the four LSBs of RC
(bits 60 to 63). Otherwise let lut be the next
four LSBs of RC (bits 56 to 59).
Let j be the value of the concatenation of the
contents of bit i of RT with bit i of RB.
The value of bit j of lut is placed into bit i of RT.
Special registers altered:
None
Condition Register Ternary Bitwise Logic Immediate
CRB-Form
- crfternlogi BF,BFA,BFB,TLI,msk
Pseudo-code:
bf <- CR[4*BF+32:4*BF+35]
bfa <- CR[4*BFA+32:4*BFA+35]
bfb <- CR[4*BFB+32:4*BFB+35]
result <- [0] * 4
do i = 0 to 3
idx <- bf[i] || bfa[i] || bfb[i]
result[i] <- TLI[idx]
do i = 0 to 3
if msk[i] = 1 then
CR[4*BF+32+i] <- result[i]
Special Registers Altered:
CR field BF
Condition Register Field Ternary Bitwise Logic Immediate
TLI-Form
- crternlogi BT,BA,BB,TLI
Pseudo-code:
idx <- CR[BT+32] || CR[BA+32] || CR[BB+32]
CR[BT+32] <- TLI[idx]
Special Registers Altered:
CR field BF
Condition Register Field Dynamic Binary Logic
CRB-Form
- crfbinlog BF,BFA,BFB,msk
Pseudo-code:
a <- CR[4*BF+32:4*BFA+35]
b <- CR[4*BFA+32:4*BFA+35]
lut <- CR[4*BFB+32:4*BFB+35]
result <- [0] * 4
do i = 0 to 3
idx <- a[i] || b[i]
result[i] <- lut[idx]
do i = 0 to 3
if msk[i] = 1 then
CR[4*BF+32+i] <- result[i]
Description:
For each integer value i, 0 to 3, do the following.
Let j be the value of the concatenation of the
contents of bit i of CR Field BF with bit i of CR Field BFA.
If bit i of msk is set to 1 then the value of bit j of
CR Field BFB is placed into bit i of CR Field BF.
Otherwise, if bit i of msk is a zero then bit i of
CR Field BF is unchanged.
If `msk` is zero an Illegal Instruction trap is raised.
Special registers altered:
CR field BF
Condition Register Dynamic Binary Logic
X-Form
- crbinlog BT,BA,BFB
Pseudo-code:
lut <- CR[4*BFB+32:4*BFB+35]
idx <- CR[BT+32] || CR[BA+32]
CR[BT+32] <- lut[idx]
Special registers altered:
CR[BT+32]
Add With Shift By Immediate
Z23-Form
- sadd RT,RA,RB,SH (Rc=0)
- sadd. RT,RA,RB,SH (Rc=1)
Pseudo-code:
n <- (RB)
m <- ((0b0 || SH) + 1)
RT <- (n[m:XLEN-1] || [0]*m) + (RA)
Special Registers Altered:
CR0 (if Rc=1)
Add With Shift By Immediate Word
Z23-Form
- saddw RT,RA,RB,SH (Rc=0)
- saddw. RT,RA,RB,SH (Rc=1)
Pseudo-code:
n <- ([0]*(XLEN/2)) || (RB)[XLEN/2:XLEN-1]
if (RB)[XLEN/2] = 1 then
n[0:XLEN/2-1] <- [1]*(XLEN/2)
m <- ((0b0 || SH) + 1)
RT <- (n[m:XLEN-1] || [0]*m) + (RA)
Special Registers Altered:
CR0 (if Rc=1)
Add With Shift By Immediate Unsigned Word
Z23-Form
- sadduw RT,RA,RB,SH (Rc=0)
- sadduw. RT,RA,RB,SH (Rc=1)
Pseudo-code:
n <- ([0]*(XLEN/2)) || (RB)[XLEN/2:XLEN-1]
m <- ((0b0 || SH) + 1)
RT <- (n[m:XLEN-1] || [0]*m) + (RA)
Special Registers Altered:
CR0 (if Rc=1)