RISC-V instruction listings

{{Short description|List of RISC-V microprocessor instructions}}

{{refimprove|date=February 2025}}

The RISC-V instruction set refers to the set of instructions that RISC-V compatible microprocessors support. The instructions are usually part of an executable program, often stored as a computer file and executed on the processor.

RISC-V Integer Instructions

The table below contains a list of the RV Integer Instructions.{{cite web |title=The RISC-V Instruction Set Manual Volume I |url=https://drive.google.com/file/d/1uviu1nH-tScFfgrovvFCrj7Omv8tFtkp/view |publisher=RISC-V |access-date=4 February 2025 |format=PDF |date=11 April 2024}} The integer instruction set is divided in the base I part of the ISA that comes in a 32 bit RV32 and 64 bit RV64 version and M, B and Zicond extensions. There is also an A extension for atomic instructions and F and D instructions for floating point operations.

class="wikitable"

|+ RV Integer (pseudo) Instructions

InstructionNameFormatExtensionRV64
{{Mono|lb}}Load Byterd, imm12(rs)I
{{Mono|lh}}Load Halfrd, imm12(rs)I
{{Mono|lw}}Load Wordrd, imm12(rs)I
{{Mono|ld}}Load Doublerd, imm12(rs)Ix
{{Mono|lbu}}Load Byte (U)rd, imm12(rs)I
{{Mono|lhu}}Load Half (U)rd, imm12(rs)I
{{Mono|lwu}}Load Word (U)rd, imm12(rs)Ix
colspan="5" |
{{Mono|sb}}Store Byters1, imm12(rs2)I
{{Mono|sh}}Store Halfrs1, imm12(rs2)I
{{Mono|sw}}Store Wordrs1, imm12(rs2)I
{{Mono|sd}}Store Doublers1, imm12(rs2)Ix
colspan="5" |
{{Mono|li}}Load Immediaterd, immIAssembler macro, for immediates needing less than 12 bit expands to addi rd zero imm
{{Mono|lui}}Load Upper Immediaterd, imm20I
{{Mono|auipc}}Add Upper Immediate to Program Counterrd, imm20I
colspan="5" |
{{Mono|mv}}MoVerd, rsIPseudo Instruction. Expands to single instruction.
{{Mono|sext.b}}move Sign EXTended least significant Byterd, rsB
{{Mono|sext.h}}move Sign Extended least significant Halfrd, rsB
{{Mono|sext.w}}move Sign EXTended least significant Wordrd, rsIx
{{Mono|zext.b}}move Zero EXTended least significant Byterd, rsI
{{Mono|zext.h}}move Zero EXTended least significant Halfrd, rsB
{{Mono|zext.w}}move Zero EXTended least significant Wordrd, rsBx
{{Mono|rev8}}move with REVersed byte orderrd, rsB
{{Mono|czero.eqz}}move Conditional on EQual to Zero or ZEROrd, rs1, rs2Zicond
{{Mono|czero.nez}}move Conditional on Not Equal to Zero or ZEROrd, rs1, rs2Zicond
colspan="5" |
{{Mono|addi}}ADD Immediaterd, rs, imm12I
{{Mono|add}}ADDrd, rs1, rs2I
{{Mono|sh1add}}SHift1 ADDrd, rs1, rs2B
{{Mono|sh2add}}SHift2 ADDrd, rs1, rs2B
{{Mono|sh3add}}SHift3 ADDrd, rs1, rs2B
{{Mono|add.wu}}ADD Word(U to double)rd, rs1, rs2Bx
{{Mono|sh1add.wu}}SHift1 Word(U in double) Add to doublerd, rs1, rs2Bx
{{Mono|sh2add.wu}}SHift2 Word(U in double) Add to doublerd, rs1, rs2Bx
{{Mono|sh3add.wu}}SHift3 Word(U in double) Add to doublerd, rs1, rs2Bx
{{Mono|addiw}}ADD Word to Word Immediaterd, rs, imm12Ix
{{Mono|addw}}ADD Wordrd, rs1, rs2Ix
{{Mono|sub}}SUBtractrd, rs1, rs2I
{{Mono|subw}}SUBtract Wordrd, rs1, rs2Ix
{{mono|neg}}NEGative.rd, rsI
{{mono|negw}}Negative Wordrd, rsIx
colspan="5" |
{{Mono|mul}}MULtiplyrd, rs1, rs2M
{{Mono|mulw}}MULtiply Wordrd, rs1, rs2Mx
{{Mono|mulh}}MULtiply High partrd, rs1, rs2M
{{Mono|mulhu}}MULtiply High Part Unsignedrd, rs1, rs2M
{{Mono|mulhsu}}MULtiply High Part Unsigned Signedrd, rs1, rs2M
{{Mono|div}}DIViderd, rs1, rs2M
{{Mono|divu}}DIVide (U)rd, rs1, rs2M
{{Mono|rem}}REMainderrd, rs1, rs2M
{{Mono|remu}}REMainder (U)rd, rs1, rs2M
colspan="5" |
{{Mono|min}}MINimumrd, rs1, rs2B
{{Mono|max}}MAXimumrd, rs1, rs2B
{{Mono|minu}}MINimum (U)rd, rs1, rs2B
{{Mono|maxu}}MAXimum (U)rd, rs1, rs2B
colspan="5" |
{{Mono|seqz}}Set EQual to Zerord, rsI
{{Mono|snez}}Set Not Equal to Zerord, rsI
{{Mono|slti}}Set Less Than Immediaterd, rs, imm12I
{{Mono|slt}}Set Less Thanrd, rs1, rs2I
{{Mono|sltiu}}Set Less Than Immediate (U)rd, rs, imm12I
{{Mono|sltu}}Set Less Than (U)rd, rs1, rs2I
{{Mono |bexti}}Bit Extract Immediaterd, rs, imm5/6B
{{Mono|bext}}Bit Extractrd, rs1, rs2B
colspan="5" |
{{Mono|andi}}AND Immediaterd, rs, imm12I
{{Mono|and}}ANDrd, rs1, rs2I
{{Mono|andn}}AND Notrd, rs1, rs2B
{{Mono|bclri}}Bit CLeaR Immediaterd, rs, imm5/6B
{{Mono|bclr}}Bit CLeaRrd, rs1, rs2B
{{Mono|ori}}OR Immediaterd, rs, imm12I
{{Mono|or}}ORrd, rs1, rs2I
{{Mono|orn}}OR Notrd, rs1, rs2B
{{Mono|bseti}}Bit SET Immediaterd, rs, imm5/6B
{{Mono|bset}}Bit SETrd, rs1, rs2B
{{Mono|xori}}eXclusive OR Immediaterd, rs, imm12I
{{Mono|xor}}eXclusive ORrd, rs1, rs2I
{{Mono|xnor}}Not XORrd, rs1, rs2B
{{Mono |binvi}}Bit INVert Immediaterd, rs, imm5/6B
{{Mono |binv}}Bit INVertrd, rs1, rs2B
{{Mono|not}}NOTrd, rsI
{{Mono|orc.b}}OR Combine within Bytesrd, rsB
colspan="5" |
{{Mono|slli}}Shift Left Logical Immediaterd, rs, imm5/6I
{{Mono|sll}}Shift Left Logicalrd, rs1, rs2I
{{Mono|slliw}}Shift Left Logical Word Immediaterd, rs, imm5Ix
{{Mono|sllw}}Shift Left Logical Wordrd, rs1, rs2Ix
{{Mono|slli.wu}}Shift Left Logical Word (U in double) Immediaterd, rs, imm5/6Ix
{{Mono|srli}}Shift Right Logical Immediaterd, rs, imm5/6I
{{Mono|srl}}Shift Right Logicalrd, rs1, rs2I
{{Mono|srliw}}Shift Right Logical Word Immediaterd, rs, imm5Ix
{{Mono|srlw}}Shift Right Logical Wordrd, rs1, rs2Ix
{{Mono|srai}}Shift Left Arith Immediaterd, rs, imm5/6I
{{Mono|sra}}Shift Right Arithmeticrd, rs1, rs2I
{{Mono|sraiw}}Shift Left Arith Word Immediaterd, rs, imm5Ix
{{Mono|sraw}}Shift Right Arithmetic Wordrd, rs1, rs2Ix
{{Mono|rori}}ROtate Right Immediaterd, rs, imm5/6B
{{Mono|ror}}ROtate Rightrd, rs1, rs2B
{{Mono|rol}}ROtate Leftrd, rs1, rs2B
{{Mono|roriw}}ROtate Right Immediate Wordrd, rs, imm5Bx
{{Mono|rorw}}ROtate Right Wordrd, rs1, rs2Bx
{{Mono|rolw}}ROtate Left Wordrd, rs1, rs2Bx
colspan="5" |
{{Mono|clz}}Count Leading Zerosrd, rsB
{{Mono|clzw}}Count Leading Zeros in Wordrd, rsBx
{{Mono|ctz}}Count Trailing Zerosrd, rsB
{{Mono|ctzw}}Count Trailing Zeros in Wordrd, rsBx
{{Mono|cpop}}Count POPulation of 1srd, rsB
{{Mono|cpopw}}Count POPulation of 1s in Wordrd, rsBx
colspan="5" |
{{Mono|j}}JumplabelI
{{Mono|jal}}Jump And Linkrd, imm20I
{{Mono|jr}}Jump Registerrs [, imm12]I
{{Mono|jalr}}Jump And Link Registerrd rs [, imm12]I
{{Mono|call}}CALLsymbolIAssembler macro clobbering ra. Interacts with the loader symbol relocation. Expands to jal ra, imm or auipc ra, imm; jalr ra, ra imm combination
{{Mono|tail}}TAIL callsymbolIAssembler macro, may clobber t1. Interacts with the loader symbol relocation. Expands to jal zero imm or auipc t1, imm; jalr zero t1, imm combination
{{Mono|ret}}RETurn-IPseudo instruction clobbering ra. Expands to jal zero, ra, 0|
colspan="5" |
{{Mono|beq}}Branch ==rs1, rs2, labelI
{{Mono|bne}}Branch !=rs1, rs2, labelI
{{Mono|blt}}Branch <rs1, rs2, labelI
{{Mono|bgt}}Branch >rs1, rs2, labelI
{{Mono|bge}}Branch >=rs1, rs2, labelI
{{Mono|ble}}Branch <=rs1, rs2, labelI
{{Mono|bltu}}Branch < (U)rs1, rs2, labelI
{{Mono|bgtu}}Branch > (U)rs1, rs2, labelI
{{Mono|bgeu}}Branch >= (U)rs1, rs2, labelI
{{Mono|bleu}}Branch <= (U)rs1, rs2, labelI
colspan="5" |
{{Mono|nop}}NoOPeration-I
{{Mono|ecall}}Environment CALL-I
{{Mono|ebreak}}Environment BREAK-I

Remarks

{{reflist|group=note}}

See also

{{Portal|Computer programming}}

References