Pseudoinstruction | Equivalent Instruction | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
bgt rA, rB, label blt rB, rA, label
| bgtu rA, rB, label | bltu rB, rA, label
| ble rA, rB, label | bge rB, rA, label
| bleu rA, rB, label | bgeu rB, rA, label
| cmpgt rC, rA, rB | cmplt rC, rB, rA
| cmpgti rB, rA, IMMED | cmpgei rB, rA, (IMMED+1)
| cmpgtu rC, rA, rB | cmpltu rC, rB, rA
| cmpgtui rB, rA, IMMED | cmpgeui rB, rA, (IMMED+1)
| cmple rC, rA, rB | cmpge rC, rB, rA
| cmplei rB, rA, IMMED | cmplti rB, rA, (IMMED+1)
| cmpleu rC, rA, rB | cmpgeu rC, rB, rA
| cmpleui rB, rA, IMMED | cmpltui rB, rA, (IMMED+1)
| mov rC, rA | add rC, rA, r0
| movhi rB, IMMED | orhi rB, r0, IMMED
| movi rB, IMMED | addi rB, r0, IMMED
| movia rB, label | orhi rB, r0, %hiadj(label) | addi rB, r0, %lo(label) movui rB, IMMED | ori rB, r0, IMMED
| nop | add r0, r0, r0
| subi, rB, rA, IMMED | addi rB, rA, IMMED
| |
macro | Description | Operation | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
%lo(immed32) Extract bits [15..0] of immed32 | immed32 & 0xffff
| %hi(immed32) | Extract bits [31..16] of immed32 | (immed32 >> 16) & 0xffff
| %hiadj(immed32) | Extract bits [31..16] and adds bit 15
of immed32 | (immed32 >> 16) + 0xffff + | ((immed32 >> 15) & 0x1) %gprel(immed32) | Replace the immed32 address
with an offset | from the global pointer (1)
immed32 – _gp
| |
.ifndef _nios2_macros_ .equ _nios2_macros_,1 #-------------------- # GEQU symbol, value # # Macro to define a global symbol .macro GEQU sym,val .global \sym .equ \sym,\val .endm #-------------------- # GFUNC symbol # # Macro to define a global function .macro GFUNC sym .global \sym .type \sym, @function \sym: .endm #-------------------- # MOVI32 $reg, imm32 # # Macro to move a 32-bit immediate into a register. .macro MOVI32 reg, val movhi \reg, %hi(\val) ori \reg, \reg, %lo(\val) .endm #-------------------- # MOVIA $reg, address # # Macro to move a 32-bit address into a register. .macro MOVIA reg, addr movhi \reg, %hi(\addr) ori \reg, \reg, %lo(\addr) .endm # +---------------------------- # | MOVIK32 reg,value # | # | for constants only, no linker action # | uses only one instruction if possible # | .macro MOVIK32 _dst,_val .if (\_val & 0xffff0000) == 0 MOVUI \_dst,%lo(\_val) .elseif (\_val & 0x0000ffff) == 0 MOVHI \_dst,%hi(\_val) .else MOVHI \_dst,%hi(\_val) ORI \_dst,\_dst,%lo(\_val) .endif .endm .endif # _nios2_macros_ # end of file
Maintained by John Loomis, last updated 1 Sept 2008