RISC-V Pseudo-Instruction Lookup Table


Assembler Pseudo-instructions
The assembler implements a number of convenience psuedo-instructions that are formed from instructions in the base ISA, but have implicit arguments or in some case reversed arguments, that result in distinct semantics.
The following table lists RISC-V assembler pseudo instructions:
Pesudo-instruction | Expansion | Description |
---|---|---|
nop | addi zero,zero,0 | No operation |
li rd, expression | (several expansions) | Load immediate |
la rd, symbol | (several expansions) | Load address |
mv rd, rs1 | addi rd, rs, 0 | Copy register |
not rd, rs1 | xori rd, rs, -1 | One’s complement |
neg rd, rs1 | sub rd, x0, rs | Two’s complement |
negw rd, rs1 | subw rd, x0, rs | Two’s complement Word |
sext.w rd, rs1 | addiw rd, rs, 0 | Sign extend Word |
seqz rd, rs1 | sltiu rd, rs, 1 | Set if = zero |
snez rd, rs1 | sltu rd, x0, rs | Set if ≠ zero |
sltz rd, rs1 | slt rd, rs, x0 | Set if < zero |
sgtz rd, rs1 | slt rd, x0, rs | Set if > zero |
fmv.s frd, frs1 | fsgnj.s frd, frs, frs | Single-precision move |
fabs.s frd, frs1 | fsgnjx.s frd, frs, frs | Single-precision absolute value |
fneg.s frd, frs1 | fsgnjn.s frd, frs, frs | Single-precision negate |
fmv.d frd, frs1 | fsgnj.d frd, frs, frs | Double-precision move |
fabs.d frd, frs1 | fsgnjx.d frd, frs, frs | Double-precision absolute value |
fneg.d frd, frs1 | fsgnjn.d frd, frs, frs | Double-precision negate |
beqz rs1, offset | beq rs, x0, offset | Branch if = zero |
bnez rs1, offset | bne rs, x0, offset | Branch if ≠ zero |
blez rs1, offset | bge x0, rs, offset | Branch if ≤ zero |
bgez rs1, offset | bge rs, x0, offset | Branch if ≥ zero |
bltz rs1, offset | blt rs, x0, offset | Branch if < zero |
bgtz rs1, offset | blt x0, rs, offset | Branch if > zero |
bgt rs, rt, offset | blt rt, rs, offset | Branch if > |
ble rs, rt, offset | bge rt, rs, offset | Branch if ≤ |
bgtu rs, rt, offset | bltu rt, rs, offset | Branch if >, unsigned |
bleu rs, rt, offset | bltu rt, rs, offset | Branch if ≤, unsigned |
j offset | jal x0, offset | Jump |
jr offset | jal x1, offset | Jump register |
ret | jalr x0, x1, 0 | Return from subroutine |