MIPS Architecture - Compiler Register Usage

Compiler Register Usage

The hardware architecture specifies that:

  • General purpose register $0 always returns a value of 0.
  • General purpose register $31 is used as the link register for jump and link instructions.
  • HI and LO are used to access the multiplier/divider results, accessed by the mfhi (move from high) and mflo commands.

These are the only hardware restrictions on the usage of the general purpose registers.

The various MIPS tool-chains implement specific calling conventions that further restrict how the registers are used. These calling conventions are totally maintained by the tool-chain software and are not required by the hardware.

Registers for O32 Calling Convention
Name Number Use Callee must preserve?
$zero $0 constant 0
$at $1 assembler temporary No
$v0–$v1 $2–$3 values for function returns and expression evaluation No
$a0–$a3 $4–$7 function arguments No
$t0–$t7 $8–$15 temporaries No
$s0–$s7 $16–$23 saved temporaries Yes
$t8–$t9 $24–$25 temporaries No
$k0–$k1 $26–$27 reserved for OS kernel
$gp $28 global pointer Yes
$sp $29 stack pointer Yes
$fp $30 frame pointer Yes
$ra $31 return address
Registers for N32 and N64 Calling Conventions
Name Number Use Callee must preserve?
$zero $0 constant 0
$at $1 assembler temporary No
$v0–$v1 $2–$3 values for function returns and expression evaluation No
$a0–$a7 $4–$11 function arguments No
$t4–$t7 $12–$15 temporaries No
$s0–$s7 $16–$23 saved temporaries Yes
$t8–$t9 $24–$25 temporaries No
$k0–$k1 $26–$27 reserved for OS kernel
$gp $28 global pointer Yes
$sp $29 stack pointer Yes
$s8 $30 frame pointer Yes
$ra $31 return address

Registers that are preserved across a call are registers that (by convention) will not be changed by a system call or procedure (function) call. For example, $s-registers must be saved to the stack by a procedure that needs to use them, and $sp and $fp are always incremented by constants, and decremented back after the procedure is done with them (and the memory they point to). By contrast, $ra is changed automatically by any normal function call (ones that use jal), and $t-registers must be saved by the program before any procedure call (if the program needs the values inside them after the call).

Read more about this topic:  MIPS Architecture

Famous quotes containing the words register and/or usage:

    Genius ... is the capacity to see ten things where the ordinary man sees one, and where the man of talent sees two or three, plus the ability to register that multiple perception in the material of his art.
    Ezra Pound (1885–1972)

    Pythagoras, Locke, Socrates—but pages
    Might be filled up, as vainly as before,
    With the sad usage of all sorts of sages,
    Who in his life-time, each was deemed a bore!
    The loftiest minds outrun their tardy ages.
    George Gordon Noel Byron (1788–1824)