Applicability of this chapter to configurations:
Configuration |
Implementation |
---|---|
CV32A60AX |
Implemented extension |
CV32A60X |
Implemented extension |
CV64A6_MMU |
Implemented extension |
RVZbs: Single-bit instructions
The single-bit instructions provide a mechanism to set, clear, invert, or extract a single bit in a register. The bit is specified by its index.
The following instructions (and pseudoinstructions) comprise the Zbs extension:
RV32 |
RV64 |
Mnemonic |
---|---|---|
✔ |
✔ |
bclr rd, rs1, rs2 |
✔ |
✔ |
bclri rd, rs1, imm |
✔ |
✔ |
bext rd, rs1, rs2 |
✔ |
✔ |
bexti rd, rs1, imm |
✔ |
✔ |
binv rd, rs1, rs2 |
✔ |
✔ |
binvi rd, rs1, imm |
✔ |
✔ |
bset rd, rs1, rs2 |
✔ |
✔ |
bseti rd, rs1, imm |
RV32 and RV64 Instructions
BCLR: Single-Bit Clear (Register)
Format: bclr rd, rs1, rs2
Description: This instruction returns rs1 with a single bit cleared at the index specified in rs2. The index is read from the lower log2(XLEN) bits of rs2.
Pseudocode: X(rd) = X(rs1) & ~(1 << (X(rs2) & (XLEN - 1)))
Invalid values: NONE
Exception raised: NONE
BCLRI: Single-Bit Clear (Immediate)
Format: bclri rd, rs1, shamt
Description: This instruction returns rs1 with a single bit cleared at the index specified in shamt. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
Pseudocode: X(rd) = X(rs1) & ~(1 << (shamt & (XLEN - 1)))
Invalid values: NONE
Exception raised: NONE
BEXT: Single-Bit Extract (Register)
Format: bext rd, rs1, rs2
Description: This instruction returns a single bit extracted from rs1 at the index specified in rs2. The index is read from the lower log2(XLEN) bits of rs2.
Pseudocode: X(rd) = (X(rs1) >> (X(rs2) & (XLEN - 1))) & 1
Invalid values: NONE
Exception raised: NONE
BEXTI: Single-Bit Extract (Immediate)
Format: bexti rd, rs1, shamt
Description: This instruction returns a single bit extracted from rs1 at the index specified in rs2. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
Pseudocode: X(rd) = (X(rs1) >> (shamt & (XLEN - 1))) & 1
Invalid values: NONE
Exception raised: NONE
BINV: Single-Bit Invert (Register)
Format: binv rd, rs1, rs2
Description: This instruction returns rs1 with a single bit inverted at the index specified in rs2. The index is read from the lower log2(XLEN) bits of rs2.
Pseudocode: X(rd) = X(rs1) ^ (1 << (X(rs2) & (XLEN - 1)))
Invalid values: NONE
Exception raised: NONE
BINVI: Single-Bit Invert (Immediate)
Format: binvi rd, rs1, shamt
Description: This instruction returns rs1 with a single bit inverted at the index specified in shamt. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
Pseudocode: X(rd) = X(rs1) ^ (1 << (shamt & (XLEN - 1)))
Invalid values: NONE
Exception raised: NONE
BSET: Single-Bit Set (Register)
Format: bset rd, rs1, rs2
Description: This instruction returns rs1 with a single bit set at the index specified in rs2. The index is read from the lower log2(XLEN) bits of rs2.
Pseudocode: X(rd) = X(rs1) | (1 << (X(rs2) & (XLEN - 1)))
Invalid values: NONE
Exception raised: NONE
BSETI: Single-Bit Set (Immediate)
Format: bseti rd, rs1, shamt
Description: This instruction returns rs1 with a single bit set at the index specified in shamt. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
Pseudocode: X(rd) = X(rs1) | (1 << (shamt & (XLEN - 1)))
Invalid values: NONE
Exception raised: NONE