typstuff/misc/riscv/main.typ

39 lines
884 B
Typst
Raw Normal View History

2024-12-13 23:04:02 +01:00
#import "riscv.typ"
#set page(width: auto, height: auto, margin: 1cm)
#riscv.explain-instruction-encoding("lui x0, 0x12")
#riscv.explain-instruction-encoding("add sp, a0, a1")
#pagebreak()
#riscv.riscv-to-bin(```
0x00000300 main: jal ra, simple # call
0x00000304 add s0, s1, s1
0x0000051c simple: jalr x0, ra, 0 # return
```)
#pagebreak()
#riscv.riscv-to-bin(```
f1:
addi sp, sp, -20 # make space on stack for 5 words
sw a0, 16(sp)
sw a1, 12(sp)
sw ra, 8(sp) # save ra on stack
sw s4, 4(sp)
sw s5, 0(sp)
jal ra, f2
lw ra, 8(sp) # restore ra (and other regs) from stack
addi sp, sp, 20 # deallocate stack space
jalr zero, ra, 0
# f2 (leaf-function) only uses s4 and calls no functions
f2:
addi sp, sp, -4 # make space on stack for 1 word
sw s4, 0(sp)
lw s4, 0(sp)
addi sp, sp, 4 # deallocate stack space
jalr zero, ra, 0
```)