Nios II Macros

The filename is nios_macros.m.

GEQU symbolMacro to define a global symbol
GFUNC symbolMacro to define a global function
MOVI32 reg, imm32Macro to move a 32-bit immediate into a register.
MOVIA reg, addressMacro to move a 32-bit address into a register.
MOVIK32 reg,valuefor constants only, no linker action
uses only one instruction if possible


.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 6 April 2007