37/lui | */rd | */imm20 | |||
17/auipc | */rd | */off20 | |||
6f/jal | */rd | */off21 | |||
67/jalr | */rd | 0/subop | */rs | */off12 | |
63/branch | */subop | */rs1 | */rs2 | */off13 | |
13/opi | */rd | */subop | */rs | */imm12 | |
13/opi | */rd | */subop */mode | */rs | */imm7 | |
33/opr | */rd | */subop */mode | */rs1 | */rs2 | |
03/load | */rd | */width */rs | */off12 | ||
23/store | */width | */rd */off12 | */rs | ||
73/system | */rd | */subop | */rs | */csr | |
73/system | */rd | */subop | */csr | */imm5 | |
73/system | 0/subop/priv | 0/funct12/ecall | |||
73/system | 0/subop/priv | 1/funct12/ebreak |
x0 | zero | hard-wired zero | — |
x1 | ra | return address | caller |
x2 | sp | stack pointer | callee |
x3 | gp | global pointer | — |
x4 | tp | thread pointer | — |
x5-7 | t0-2 | temporaries | caller |
x8 | s0, fp | saved register, frame pointer | callee |
x9 | s1 | saved register | callee |
x10-11 | a0-1 | function arguments, return values | caller |
x12-17 | a2-7 | function arguments | caller |
x18-27 | s2-11 | saved registers | callee |
x28-31 | t3-6 | temporaries | caller |
la rd, sym | auipc rd, sym[31:12] addi rd, rd, sym[11:0] |
load address |
l[bhwd] rd, sym | auipc rd, sym[31:12] add[bhwd] rd, sym[11:0](rd) |
load load global |
s[bhwd] rd, sym, rt | auipc rt, sym[31:12] s[bhwd] rd, sym[11:0](rt) |
store global |
fl[wd] | auipc rd, sym[31:12] fl[wd] rd, sym[11:0](rt) |
floating-point load global |
fs[wd] | auipc rd, sym[31:12] fs[wd] rd, sym[11:0](rt) |
floating-point store global |
nop | addi x0, x0, 0 | no operation |
li rd, imm | myriad sequences | load immediate |
mv rd, rs | addi rd, rs, 0 | copy register |
not rd, rs | xori rd, rs, -1 | one's complement |
neg rd, rs | sub rd, x0, rs | two's complement |
negw | sub rd, x0, rs | two's complement word |
sext.w | addiw rd, rs, 0 | sign extend word |
seqz rd, rs | sltiu rd, rs, 1 | set if zero |
snez rd, rs | sltu rd, x0, rs | set if not zero |
sltz rd, rs | slt rd, rs, x0 | set if less than zero |
sgtz rd, rs | sltiu rd, x0, rs | set if greater than zero |
fmv.s rd, rs | fsgnj.s rd, rs, rs | copy single-precision register |
fabs.s rd, rs | fsgnjx.s rd, rs, rs | single-precision absolute value |
fneg.s rd, rs | fsgnjn.s rd, rs, rs | single-precision negate |
fmv.d rd, rs | fsgnj.d rd, rs, rs | copy double-precision register |
fabs.d rd, rs | fsgnjx.d rd, rs, rs | double-precision absolute value |
fneg.d rd, rs | fsgnjn.d rd, rs, rs | double-precision negate |
beqz rs, off | beq rs, x0, off | branch if zero |
bnez rs, off | bne rs, x0, off | branch if not zero |
blez rs, off | bge x0, rs, off | branch if less than equal zero |
bgez rs, off | bge rs, x0, off | branch if greater than equal zero |
bltz rs, off | blt rs, x0, off | branch if less than zero |
bgtz rs, off | blt x0, rs, off | branch if greater than zero |
bgt rs, rt, off | blt rt, rs, off | branch if greater than |
ble rs, rt, off | bge rt, rs, off | branch if less than equal |
bgtu rs, rt, off | bltu rt, rs, off | branch if greater than, unsigned |
bleu rs, rt, off | bgeu rt, rs, off | branch if less than equal, unsigned |
j off | jal x0, off | jump |
jal off | jal x1, off | jump and link |
jr rs | jalr x0, rs, 0 | jump register |
jalr rs | jalr x1, rs, 0 | jump and link register |
ret | jalr x0, x1, 0 | return from subroutine |
call off | auipc x6, off[31:12] jalr x1, x6, off[11:0] |
call far-away subroutine |
tail off | auipc x6, off[31:13] jalr x0, x6, off[11:0] |
tail call far-away subroutine |
fence | fence iorw, iorw | fence on all memory and IO |