Skip to main content

A RV32/64G Instruction Set Listings

One goal of the RISC-V project is that it be used as a stable software development target. For this purpose, we define a combination of a base ISA (RV32I or RV64I) plus selected standard extensions (IMAFD, Zicsr, Zifencei) as a "general-purpose" ISA, and we use the abbreviation G for the IMAFDZicsr_Zifencei combination of instruction-set extensions. This chapter presents opcode maps and instruction-set listings for RV32G and RV64G.

inst[4:2]000001010011100101110111 (>32b)
inst[6:5]
00LOADLOAD-FPcustom-0MISC-MEMOP-IMMAUIPCOP-IMM-32reserved
01STORESTORE-FPcustom-1AMOOPLUIOP-32reserved
10MADDMSUBNMSUBNMADDOP-FPOP-Vcustom-2reserved
11BRANCHJALRreservedJALSYSTEMOP-VEcustom-3reserved

opcodemap shows a map of the major opcodes for RVG. Opcodes marked as reserved should be avoided for custom instruction-set extensions as they might be used by future standard extensions. Major opcodes marked as custom-0 through custom-3 will be avoided by future standard extensions and are recommended for use by custom instruction-set extensions within the base 32-bit instruction format.

We believe RV32G and RV64G provide simple but complete instruction sets for a broad range of general-purpose computing. The optional compressed instruction set described in compressed can be added (forming RV32GC and RV64GC) to improve performance, code size, and energy efficiency, though with some additional hardware complexity.

As we move beyond IMAFDC into further instruction-set extensions, the added instructions tend to be more domain-specific and only provide benefits to a restricted class of applications, e.g., for multimedia or security. Unlike most commercial ISAs, the RISC-V ISA design clearly separates the base ISA and broadly applicable standard extensions from these more specialized additions.

3127262524201915141211760
funct7rs2rs1funct3rdopcodeR-type
imm[11:0]rs1funct3rdopcodeI-type
imm[11:5]rs2rs1funct3imm[4:0]opcodeS-type
imm[12|10:5]rs2rs1funct3imm[4:1|11]opcodeB-type
imm[31:12]rdopcodeU-type
imm[20|10:1|11|19:12]rdopcodeJ-type
RV32I Base Instruction Set
imm[31:12]rd0110111LUI
imm[31:12]rd0010111AUIPC
imm[2010:1|1119:12]rd1101111JAL
imm[11:0]rs1000rd1100111JALR
imm[1210:5]rs2rs1000imm[4:1|11]1100011BEQ
imm[1210:5]rs2rs1001imm[4:1|11]1100011BNE
imm[1210:5]rs2rs1100imm[4:1|11]1100011BLT
imm[1210:5]rs2rs1101imm[4:1|11]1100011BGE
imm[1210:5]rs2rs1110imm[4:1|11]1100011BLTU
imm[1210:5]rs2rs1111imm[4:1|11]1100011BGEU
imm[11:0]rs1000rd0000011LB
imm[11:0]rs1001rd0000011LH
imm[11:0]rs1010rd0000011LW
imm[11:0]rs1100rd0000011LBU
imm[11:0]rs1101rd0000011LHU
imm[11:5]rs2rs1000imm[4:0]0100011SB
imm[11:5]rs2rs1001imm[4:0]0100011SH
imm[11:5]rs2rs1010imm[4:0]0100011SW
imm[11:0]rs1000rd0010011ADDI
imm[11:0]rs1010rd0010011SLTI
imm[11:0]rs1011rd0010011SLTIU
imm[11:0]rs1100rd0010011XORI
imm[11:0]rs1110rd0010011ORI
imm[11:0]rs1111rd0010011ANDI
0000000shamtrs1001rd0010011SLLI
0000000shamtrs1101rd0010011SRLI
0100000shamtrs1101rd0010011SRAI
0000000rs2rs1000rd0110011ADD
0100000rs2rs1000rd0110011SUB
0000000rs2rs1001rd0110011SLL
0000000rs2rs1010rd0110011SLT
0000000rs2rs1011rd0110011SLTU
0000000rs2rs1100rd0110011XOR
0000000rs2rs1101rd0110011SRL
0100000rs2rs1101rd0110011SRA
0000000rs2rs1110rd0110011OR
0000000rs2rs1111rd0110011AND
fmpredsuccrs1000rd0001111FENCE
10000011001100000000000000001111FENCE.TSO
00000001000000000000000000001111PAUSE
00000000000000000000000001110011ECALL
00000000000100000000000001110011EBREAK
3127262524201915141211760
funct7rs2rs1funct3rdopcodeR-type
imm[11:0]rs1funct3rdopcodeI-type
imm[11:5]rs2rs1funct3imm[4:0]opcodeS-type
RV64I Base Instruction Set (in addition to RV32I)
imm[11:0]rs1110rd0000011LWU
imm[11:0]rs1011rd0000011LD
imm[11:5]rs2rs1011imm[4:0]0100011SD
000000shamtrs1001rd0010011SLLI
000000shamtrs1101rd0010011SRLI
010000shamtrs1101rd0010011SRAI
imm[11:0]rs1000rd0011011ADDIW
0000000shamtrs1001rd0011011SLLIW
0000000shamtrs1101rd0011011SRLIW
0100000shamtrs1101rd0011011SRAIW
0000000rs2rs1000rd0111011ADDW
0100000rs2rs1000rd0111011SUBW
0000000rs2rs1001rd0111011SLLW
0000000rs2rs1101rd0111011SRLW
0100000rs2rs1101rd0111011SRAW
RV32/RV64 Zifencei Standard Extension
imm[11:0]rs1001rd0001111FENCE.I
RV32/RV64 Zicsr Standard Extension
csrrs1001rd1110011CSRRW
csrrs1010rd1110011CSRRS
csrrs1011rd1110011CSRRC
csruimm101rd1110011CSRRWI
csruimm110rd1110011CSRRSI
csruimm111rd1110011CSRRCI
RV32M Standard Extension
0000001rs2rs1000rd0110011MUL
0000001rs2rs1001rd0110011MULH
0000001rs2rs1010rd0110011MULHSU
0000001rs2rs1011rd0110011MULHU
0000001rs2rs1100rd0110011DIV
0000001rs2rs1101rd0110011DIVU
0000001rs2rs1110rd0110011REM
0000001rs2rs1111rd0110011REMU
RV64M Standard Extension (in addition to RV32M)
0000001rs2rs1000rd0111011MULW
0000001rs2rs1100rd0111011DIVW
0000001rs2rs1101rd0111011DIVUW
0000001rs2rs1110rd0111011REMW
0000001rs2rs1111rd0111011REMUW
3127262524201915141211760
funct7rs2rs1funct3rdopcodeR-type
RV32A Standard Extension
00010aqrl00000rs1010rd0101111LR.W
00011aqrlrs2rs1010rd0101111SC.W
00001aqrlrs2rs1010rd0101111AMOSWAP.W
00000aqrlrs2rs1010rd0101111AMOADD.W
00100aqrlrs2rs1010rd0101111AMOXOR.W
01100aqrlrs2rs1010rd0101111AMOAND.W
01000aqrlrs2rs1010rd0101111AMOOR.W
10000aqrlrs2rs1010rd0101111AMOMIN.W
10100aqrlrs2rs1010rd0101111AMOMAX.W
11000aqrlrs2rs1010rd0101111AMOMINU.W
11100aqrlrs2rs1010rd0101111AMOMAXU.W
RV64A Standard Extension (in addition to RV32A)
00010aqrl00000rs1011rd0101111LR.D
00011aqrlrs2rs1011rd0101111SC.D
00001aqrlrs2rs1011rd0101111AMOSWAP.D
00000aqrlrs2rs1011rd0101111AMOADD.D
00100aqrlrs2rs1011rd0101111AMOXOR.D
01100aqrlrs2rs1011rd0101111AMOAND.D
01000aqrlrs2rs1011rd0101111AMOOR.D
10000aqrlrs2rs1011rd0101111AMOMIN.D
10100aqrlrs2rs1011rd0101111AMOMAX.D
11000aqrlrs2rs1011rd0101111AMOMINU.D
11100aqrlrs2rs1011rd0101111AMOMAXU.D
3127262524201915141211760
funct7rs2rs1funct3rdopcodeR-type
rs3funct2rs2rs1funct3rdopcodeR4-type
imm[11:0]rs1funct3rdopcodeI-type
imm[11:5]rs2rs1funct3imm[4:0]opcodeS-type
RV32F Standard Extension
imm[11:0]rs1010rd0000111FLW
imm[11:5]rs2rs1010imm[4:0]0100111FSW
rs300rs2rs1rmrd1000011FMADD.S
rs300rs2rs1rmrd1000111FMSUB.S
rs300rs2rs1rmrd1001011FNMSUB.S
rs300rs2rs1rmrd1001111FNMADD.S
0000000rs2rs1rmrd1010011FADD.S
0000100rs2rs1rmrd1010011FSUB.S
0001000rs2rs1rmrd1010011FMUL.S
0001100rs2rs1rmrd1010011FDIV.S
010110000000rs1rmrd1010011FSQRT.S
0010000rs2rs1000rd1010011FSGNJ.S
0010000rs2rs1001rd1010011FSGNJN.S
0010000rs2rs1010rd1010011FSGNJX.S
0010100rs2rs1000rd1010011FMIN.S
0010100rs2rs1001rd1010011FMAX.S
110000000000rs1rmrd1010011FCVT.W.S
110000000001rs1rmrd1010011FCVT.WU.S
111000000000rs1000rd1010011FMV.X.W
1010000rs2rs1010rd1010011FEQ.S
1010000rs2rs1001rd1010011FLT.S
1010000rs2rs1000rd1010011FLE.S
111000000000rs1001rd1010011FCLASS.S
110100000000rs1rmrd1010011FCVT.S.W
110100000001rs1rmrd1010011FCVT.S.WU
111100000000rs1000rd1010011FMV.W.X
RV64F Standard Extension (in addition to RV32F)
110000000010rs1rmrd1010011FCVT.L.S
110000000011rs1rmrd1010011FCVT.LU.S
110100000010rs1rmrd1010011FCVT.S.L
110100000011rs1rmrd1010011FCVT.S.LU
3127262524201915141211760
funct7rs2rs1funct3rdopcodeR-type
rs3funct2rs2rs1funct3rdopcodeR4-type
imm[11:0]rs1funct3rdopcodeI-type
imm[11:5]rs2rs1funct3imm[4:0]opcodeS-type
RV32D Standard Extension
imm[11:0]rs1011rd0000111FLD
imm[11:5]rs2rs1011imm[4:0]0100111FSD
rs301rs2rs1rmrd1000011FMADD.D
rs301rs2rs1rmrd1000111FMSUB.D
rs301rs2rs1rmrd1001011FNMSUB.D
rs301rs2rs1rmrd1001111FNMADD.D
0000001rs2rs1rmrd1010011FADD.D
0000101rs2rs1rmrd1010011FSUB.D
0001001rs2rs1rmrd1010011FMUL.D
0001101rs2rs1rmrd1010011FDIV.D
010110100000rs1rmrd1010011FSQRT.D
0010001rs2rs1000rd1010011FSGNJ.D
0010001rs2rs1001rd1010011FSGNJN.D
0010001rs2rs1010rd1010011FSGNJX.D
0010101rs2rs1000rd1010011FMIN.D
0010101rs2rs1001rd1010011FMAX.D
010000000001rs1rmrd1010011FCVT.S.D
010000100000rs1rmrd1010011FCVT.D.S
1010001rs2rs1010rd1010011FEQ.D
1010001rs2rs1001rd1010011FLT.D
1010001rs2rs1000rd1010011FLE.D
111000100000rs1001rd1010011FCLASS.D
110000100000rs1rmrd1010011FCVT.W.D
110000100001rs1rmrd1010011FCVT.WU.D
110100100000rs1rmrd1010011FCVT.D.W
110100100001rs1rmrd1010011FCVT.D.WU
RV64D Standard Extension (in addition to RV32D)
110000100010rs1rmrd1010011FCVT.L.D
110000100011rs1rmrd1010011FCVT.LU.D
111000100000rs1000rd1010011FMV.X.D
110100100010rs1rmrd1010011FCVT.D.L
110100100011rs1rmrd1010011FCVT.D.LU
111100100000rs1000rd1010011FMV.D.X
3127262524201915141211760
funct7rs2rs1funct3rdopcodeR-type
rs3funct2rs2rs1funct3rdopcodeR4-type
imm[11:0]rs1funct3rdopcodeI-type
imm[11:5]rs2rs1funct3imm[4:0]opcodeS-type
RV32Q Standard Extension
imm[11:0]rs1100rd0000111FLQ
imm[11:5]rs2rs1100imm[4:0]0100111FSQ
rs311rs2rs1rmrd1000011FMADD.Q
rs311rs2rs1rmrd1000111FMSUB.Q
rs311rs2rs1rmrd1001011FNMSUB.Q
rs311rs2rs1rmrd1001111FNMADD.Q
0000011rs2rs1rmrd1010011FADD.Q
0000111rs2rs1rmrd1010011FSUB.Q
0001011rs2rs1rmrd1010011FMUL.Q
0001111rs2rs1rmrd1010011FDIV.Q
010111100000rs1rmrd1010011FSQRT.Q
0010011rs2rs1000rd1010011FSGNJ.Q
0010011rs2rs1001rd1010011FSGNJN.Q
0010011rs2rs1010rd1010011FSGNJX.Q
0010111rs2rs1000rd1010011FMIN.Q
0010111rs2rs1001rd1010011FMAX.Q
010000000011rs1rmrd1010011FCVT.S.Q
010001100000rs1rmrd1010011FCVT.Q.S
010000100011rs1rmrd1010011FCVT.D.Q
010001100001rs1rmrd1010011FCVT.Q.D
1010011rs2rs1010rd1010011FEQ.Q
1010011rs2rs1001rd1010011FLT.Q
1010011rs2rs1000rd1010011FLE.Q
111001100000rs1001rd1010011FCLASS.Q
110001100000rs1rmrd1010011FCVT.W.Q
110001100001rs1rmrd1010011FCVT.WU.Q
110101100000rs1rmrd1010011FCVT.Q.W
110101100001rs1rmrd1010011FCVT.Q.WU
RV64Q Standard Extension (in addition to RV32Q)
110001100010rs1rmrd1010011FCVT.L.Q
110001100011rs1rmrd1010011FCVT.LU.Q
110101100010rs1rmrd1010011FCVT.Q.L
110101100011rs1rmrd1010011FCVT.Q.LU
3127262524201915141211760
funct7rs2rs1funct3rdopcodeR-type
rs3funct2rs2rs1funct3rdopcodeR4-type
imm[11:0]rs1funct3rdopcodeI-type
imm[11:5]rs2rs1funct3imm[4:0]opcodeS-type
RV32Zfh Standard Extension
imm[11:0]rs1001rd0000111FLH
imm[11:5]rs2rs1001imm[4:0]0100111FSH
rs310rs2rs1rmrd1000011FMADD.H
rs310rs2rs1rmrd1000111FMSUB.H
rs310rs2rs1rmrd1001011FNMSUB.H
rs310rs2rs1rmrd1001111FNMADD.H
0000010rs2rs1rmrd1010011FADD.H
0000110rs2rs1rmrd1010011FSUB.H
0001010rs2rs1rmrd1010011FMUL.H
0001110rs2rs1rmrd1010011FDIV.H
010111000000rs1rmrd1010011FSQRT.H
0010010rs2rs1000rd1010011FSGNJ.H
0010010rs2rs1001rd1010011FSGNJN.H
0010010rs2rs1010rd1010011FSGNJX.H
0010110rs2rs1000rd1010011FMIN.H
0010110rs2rs1001rd1010011FMAX.H
010000000010rs1rmrd1010011FCVT.S.H
010001000000rs1rmrd1010011FCVT.H.S
010000100010rs1rmrd1010011FCVT.D.H
010001000001rs1rmrd1010011FCVT.H.D
010001100010rs1rmrd1010011FCVT.Q.H
010001000011rs1rmrd1010011FCVT.H.Q
1010010rs2rs1010rd1010011FEQ.H
1010010rs2rs1001rd1010011FLT.H
1010010rs2rs1000rd1010011FLE.H
111001000000rs1001rd1010011FCLASS.H
110001000000rs1rmrd1010011FCVT.W.H
110001000001rs1rmrd1010011FCVT.WU.H
111001000000rs1000rd1010011FMV.X.H
110101000000rs1rmrd1010011FCVT.H.W
110101000001rs1rmrd1010011FCVT.H.WU
111101000000rs1000rd1010011FMV.H.X
RV64Zfh Standard Extension (in addition to RV32Zfh)
110001000010rs1rmrd1010011FCVT.L.H
110001000011rs1rmrd1010011FCVT.LU.H
110101000010rs1rmrd1010011FCVT.H.L
110101000011rs1rmrd1010011FCVT.H.LU
Zawrs Standard Extension
00000000110100000000000001110011WRS.NTO
00000001110100000000000001110011WRS.STO

rvgcsrnames lists the CSRs that have currently been allocated CSR addresses. The timers, counters, and floating-point CSRs are the only CSRs defined in this specification.

NumberPrivilegeNameDescription
Floating-Point Control and Status Registers
0x001Read writefflagsFloating-Point Accrued Exceptions.
0x002Read writefrmFloating-Point Dynamic Rounding Mode.
0x003Read writefcsrFloating-Point Control and Status Register (frm + fflags).
Counters and Timers
0xC00Read-onlycycleCycle counter for RDCYCLE instruction.
0xC01Read-onlytimeTimer for RDTIME instruction.
0xC02Read-onlyinstretInstructions-retired counter for RDINSTRET instruction.
0xC80Read-onlycyclehUpper 32 bits of cycle, RV32I only.
0xC81Read-onlytimehUpper 32 bits of time, RV32I only.
0xC82Read-onlyinstrethUpper 32 bits of instret, RV32I only.