aboutsummaryrefslogtreecommitdiff
path: root/doc/docs/backend/registers.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/docs/backend/registers.md')
-rw-r--r--doc/docs/backend/registers.md29
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. | |