Applicability of this chapter to configurations:
Configuration | Implementation |
---|---|
CV32A60AX | Implemented extension |
CV32A60X | Implemented extension |
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 |
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