initial commit
This commit is contained in:
39
misc/riscv/main.typ
Normal file
39
misc/riscv/main.typ
Normal file
@@ -0,0 +1,39 @@
|
||||
#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
|
||||
```)
|
Reference in New Issue
Block a user