diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..82a0201 --- /dev/null +++ b/CONTRIBUTING.md @@ -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: +``` +; +; Arguments: +; Result: +; Clobbers: +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 diff --git a/README.md b/README.md index 44ed975..1a3d693 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,46 @@ -# symphony_stdlib +# Symphony Stdlib -standard library for symphony \ No newline at end of file +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 diff --git a/stdlib.asm b/stdlib.asm index 5852f04..1b352f1 100644 --- a/stdlib.asm +++ b/stdlib.asm @@ -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 \ No newline at end of file +pub include imath diff --git a/teaching/README.md b/teaching/README.md new file mode 100644 index 0000000..67ae43d --- /dev/null +++ b/teaching/README.md @@ -0,0 +1,5 @@ +# Teaching + +This is a collection of teaching advice regarding the stdlib. + +**WIP**