--- vim: noexpandtab tabstop=2 shiftwidth=2 --- # Registers The following registers have a special use in the Snug run time system: | # | Name | Standard use | Snug use | |---:|-------|--------------|----------| | 0 | `$0` | Always zero. | | | 1 | `$at` | Reserved for the assembler. | | | 2-3 | `$v0`-`$v1` | Function result, callee-saved(?). | | | 4-7 | `$a0`-`$a3` | Integer argument, caller-saved. | | | 8-15 | `$t0`-`$t7` | Caller-saved GPR. | | | 16 | `$s0` | Callee-saved GPR.| [Back pointer](rts.md#evaluation) for printing. | | 17 | `$s1` | id. | [Front pointer](rts.md#evaluation) for printing. | | 18 | `$s2` | id. | [Back pointer](rts.md#evaluation) for evaluation. | | 19 | `$s3` | id. | [Front pointer](rts.md#evaluation) for evaluation. | | 20 | `$s4` | id. | | | 21 | `$s5` | id. | | | 22 | `$s6` | id. | | | 23 | `$s7` | id. | [Data/text region boundary](rts.md#node-layout). | | 24-25 | `$t8`-`$t9` | Caller-saved GPR. | | | 26-27 | `$k0`-`$k1` | Reserved for kernel use. | | | 28 | `$gp` | Global pointer. | Heap pointer. | | 29 | `$sp` | Stack pointer. | | | 30 | `$fp` | Frame pointer / callee-saved GPR. | | | 31 | `$ra` | Return address / caller-saved GPR. | |