blob: 60a9f20aa32756d0a1cef3fe788bee8879928d1f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
---
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. | |
|