Commit message (Collapse) | Author | Age | |
---|---|---|---|
* | use saved rregisters when needed | Mathias Magnusson | 2025-07-31 |
| | | | | & store and restore saved registers on the stack | ||
* | implement `==` | Mathias Magnusson | 2025-07-30 |
| | |||
* | store parameter on the stack | Mathias Magnusson | 2025-07-30 |
| | |||
* | store local variables on the stack | Mathias Magnusson | 2025-07-29 |
| | |||
* | make parameters usable | Mathias Magnusson | 2025-07-29 |
| | |||
* | continue continuing procedure calls | Mathias Magnusson | 2025-07-29 |
| | |||
* | continue implementing procedure calls | Mathias Magnusson | 2025-07-24 |
| | | | | | | multiple procedures can now exist, but you cannot call them, the first one is the "main" procedure since it happens to be placed first in the binary, and all procedures end with an exit system call | ||
* | begin implementing procedure calls | Mathias Magnusson | 2025-07-22 |
| | | | | | | | the register allocator does not consider the fact that called procedures probably clobber t-registers. also, the way i refer to the built in functions is cursed. it barely works now and won't when you can define procedures | ||
* | implement comparisons | Mathias Magnusson | 2025-07-03 |
| | |||
* | make in-memory instruction a little nicer to work with | Mathias Magnusson | 2025-07-01 |
| | |||
* | make local variables work separately from temporary values | Mathias Magnusson | 2025-06-17 |
| | |||
* | begin implementing if expressions | Mathias Magnusson | 2025-06-04 |
| | | | | | | registers are used over block boundaries though, which doesn't work very well so i turned off register freeing to make it look like it works (unless you create more than 12 values total) | ||
* | make print procedure no longer set its input to 0 | Mathias Magnusson | 2025-06-04 |
| | |||
* | add { blocks } with scoped local variables | Mathias Magnusson | 2025-06-03 |
| | |||
* | remove the need for explicit discard instructions | Mathias Magnusson | 2025-06-02 |
| | | | | | | | by also considering an instruction's destination register(s) to be uses and when cleaning up registers, also cleaning up those from previous instructions (specifically this is the output of the last instruction if it is not used anywhere) | ||
* | add read_int built in procedure | Mathias Magnusson | 2025-06-02 |
| | |||
* | codegen: use s registers instead of t | Mathias Magnusson | 2025-06-02 |
| | | | | | | | doesn't make any difference yet and I don't know exactly when to use what when it starts to matter. but binary ninja thought that syscalls could override t registers (which is not the case) so this makes decompilations slightly nicer | ||
* | make print return integer length | Mathias Magnusson | 2025-06-02 |
| | |||
* | dont set quotient in every loop iteration in integer print procedure | Mathias Magnusson | 2025-06-02 |
| | |||
* | add identifiers, procedure calls and a built in print procedure | Mathias Magnusson | 2025-06-01 |
| | |||
* | codegen: fix some small bugs | Mathias Magnusson | 2025-06-01 |
| | |||
* | codegen: add RV64M extension | Mathias Magnusson | 2025-06-01 |
| | |||
* | add subtraction | Mathias Magnusson | 2025-06-01 |
| | |||
* | codegen: make register allocation fail with error rather than returning null | Mathias Magnusson | 2025-06-01 |
| | |||
* | codegen integer literals correctly | Mathias Magnusson | 2025-05-31 |
| | | | | This was not as easy as one would expect ☠️ | ||
* | Refactor codegen a bit | Mathias Magnusson | 2025-05-31 |
| | |||
* | actually codegen the provided code | Mathias Magnusson | 2025-05-31 |
| | | | | | | ... well, since all we can do is to add integer literals, we produce code for the calculations and then perform the exit syscall with the result | ||
* | write a riscy little elf | Mathias Magnusson | 2025-05-30 |
| | |||
* | create initial simple elf file | Mathias Magnusson | 2025-05-29 |