diff --git a/c-abi.md b/c-abi.md new file mode 100644 index 0000000..4a830e0 --- /dev/null +++ b/c-abi.md @@ -0,0 +1,29 @@ +# C ABI (proposal) + +## C datatypes +| C Type | Description | Size (B) | +|:------------|:-------------------------|-------------:| +| char | Character / byte | 8 | +| short | Short integer | 16 | +| int | Integer | 32 | +| long | Long integer | 64 | +| long long | Long long integer | 64 | +| T* | Pointer | 64 | +| float | Single-precision float | 32 | +| double | Double-precision float | 64 | +| long double | Extended-precision float | **Bikeshed** | + +## Registers +| Register | ABI Name | Description | Saver | +|:---------|:---------|:---------------|:-------| +| `r0` | — | Zero register | N/A | +| `r1` | `ra` | Return address | Caller | +| `r2` | `sp` | Stack pointer | Callee | +| `r3` | `tp` | Thread pointer | N/A | + +**TODO:** Parameters + +**TODO:** Saved + +**TODO:** Temp +