forked from TCShenanigans/symphony_stdlib
Merge pull request 'Add basic meta documentation' (#11) from meta-documentation into main
Documentation efforts are ongoing but this should be good enough for now
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
# Contributing
|
||||
|
||||
## Code of Conduct
|
||||
Be nice, we are all just doing this to have fun
|
||||
|
||||
## General rules
|
||||
- All text (names, comments, etc.) has to be in English
|
||||
- You are responsible for ensuring that you have the rights for us to use the code you contribute to the project
|
||||
- follow the guidelines, for code, documentation, etc.
|
||||
- all code has to work with the standard symphony ISA
|
||||
|
||||
## Documenting Functions
|
||||
All functions in the standard library should follow the following outline:
|
||||
```
|
||||
; <description>
|
||||
; Arguments: <which register contains what argument>
|
||||
; Result: <what is the result, and where is it stored>
|
||||
; Clobbers: <list of registers that are clobbered>
|
||||
fn_label: <;SHOULD BE INLINED>
|
||||
CODE
|
||||
|
||||
```
|
||||
|
||||
Functions should be in the appropriate asm file, if you are unsure where functionality fits make a seperate file and ask in the pull request
|
||||
Functions that are provided for convenience/reference but should be inlined in production code should be marked with `;SHOULD BE INLINED` after their label
|
||||
@@ -1,3 +1,46 @@
|
||||
# symphony_stdlib
|
||||
# Symphony Stdlib
|
||||
|
||||
standard library for symphony
|
||||
This is a standard library for symphony.
|
||||
It is both intended as a practical toolkit to develop more complex software as well as a teaching resource.
|
||||
|
||||
If you just want to use the standard library [[stdlib.asm]] is your main header, include it after your code.
|
||||
|
||||
If you are using it as a learning resource have a look at the [teaching folder](teaching).
|
||||
|
||||
If you are intersted in contributing have a look at [[CONTRIBUTING.md]]
|
||||
|
||||
---
|
||||
|
||||
## ABI
|
||||
|
||||
### Calling Convention
|
||||
| class | registers |
|
||||
| ----- | --------- |
|
||||
| n.a. | zr |
|
||||
| preserved | sp, r8 - r12 |
|
||||
| scratch | flags, r1 - r7 |
|
||||
| arguments | r1 - r7 |
|
||||
| result | r1-r7 |
|
||||
| return address | r13 |
|
||||
|
||||
Arguments not fitting into the 7 registers should be passed on the top of the stack, meaning they should be the last values pushed before the function call.
|
||||
Arguments are passed in reverse order with the stack so:
|
||||
lowest address = 1st stack arg
|
||||
highest address = last stack arg
|
||||
|
||||
Should a function return more values than fit into the 7 registers, the caller has to allocate space on the stack for them, and pass the pointer to that space in the next free argument register.
|
||||
This reduces the amount of argument registers to 6 and all arguments above that shall go on the stack, the pointer to the result stack shall **always** be passed in an argument register.
|
||||
This register points at the highest available address for results, with the 8th result being stored there, the 9th below it and so on.
|
||||
|
||||
### Stack
|
||||
Grows downwards from 0xXXFE_0000 (so top of memory -0x1_0000).
|
||||
|
||||
### Types
|
||||
|
||||
#### String
|
||||
Strings are stored in memory as null terminated sequences of bytes encoding ascii characters.
|
||||
They should be passed by reference.
|
||||
|
||||
#### Array
|
||||
Arrays are stored in memory with a reference to them being the tuple (pointer, length) stored in a register pair.
|
||||
Array elements may only have a size of 8/16/32 bits
|
||||
|
||||
-23
@@ -1,25 +1,2 @@
|
||||
; ===== INTRODUCTION =====
|
||||
; This is supposed to provide some standard library functionality for stock symphony.
|
||||
; In particular its supposed to work with an unmodified ISA, that means some choices are not
|
||||
; optimal (RA being stored in flags for example)
|
||||
|
||||
; ===== ABI =====
|
||||
|
||||
; ----- CALLING CONVENTION -----
|
||||
; n.a. zr
|
||||
; preserved: sp, r8 - r12
|
||||
; scratch: flags, r1 - r7
|
||||
; arguments: r1 - r7 (r1 = 1st argument, r6 = 6th arg/stack args, r7 = 7th arg/stack res)
|
||||
; result: r1, r2 (r1 = low word, r2 = high word)
|
||||
; return address: r13
|
||||
|
||||
; ----- STACK -----
|
||||
; grows downwards from top of memory
|
||||
; arguments are passed in reverse order with the stack so:
|
||||
; lowest address = 1st stack arg
|
||||
; highest address = last stack arg
|
||||
|
||||
; ===== TYPES =====
|
||||
|
||||
pub include bit
|
||||
pub include imath
|
||||
@@ -0,0 +1,5 @@
|
||||
# Teaching
|
||||
|
||||
This is a collection of teaching advice regarding the stdlib.
|
||||
|
||||
**WIP**
|
||||
Reference in New Issue
Block a user