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