diff options
Diffstat (limited to 'doc/docs/backend/registers.md')
-rw-r--r-- | doc/docs/backend/registers.md | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/doc/docs/backend/registers.md b/doc/docs/backend/registers.md new file mode 100644 index 0000000..60a9f20 --- /dev/null +++ b/doc/docs/backend/registers.md @@ -0,0 +1,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. | | |