FREE SEEMS TO WORK POG
This commit is contained in:
139
src/test/heap.s
139
src/test/heap.s
@@ -27,10 +27,14 @@ hexstr:
|
||||
|
||||
.global heap_test
|
||||
heap_test:
|
||||
addi sp, sp, -(3*8)
|
||||
addi sp, sp, -(7*8)
|
||||
sd ra, 0(sp)
|
||||
sd s0, 8(sp)
|
||||
sd s1, 16(sp)
|
||||
sd s2, 24(sp)
|
||||
sd s3, 32(sp)
|
||||
sd s4, 40(sp)
|
||||
sd s5, 48(sp)
|
||||
|
||||
# empty heap
|
||||
|
||||
@@ -41,7 +45,10 @@ heap_test:
|
||||
|
||||
li a0, 8*9
|
||||
jal heap_alloc
|
||||
move s2, a0
|
||||
|
||||
jal print_heap
|
||||
jal printnl
|
||||
|
||||
li a0, 8*4
|
||||
jal heap_alloc
|
||||
@@ -49,8 +56,11 @@ heap_test:
|
||||
sd t0, (a0)
|
||||
sd t0, 8(a0)
|
||||
sd t0, 24(a0)
|
||||
move s3, a0
|
||||
|
||||
li s0, 0x0f
|
||||
# put array of stuff on heap
|
||||
|
||||
li s0, 0x0a
|
||||
0:
|
||||
bltz s0, 0f
|
||||
|
||||
@@ -69,56 +79,54 @@ heap_test:
|
||||
jal heap_alloc
|
||||
li t0, 0xffff
|
||||
sd t0, 6*8(a0)
|
||||
move s5, a0
|
||||
|
||||
li a0, 8*3
|
||||
jal heap_alloc
|
||||
move s4, a0
|
||||
|
||||
jal print_heap
|
||||
jal printnl
|
||||
|
||||
# free stuff
|
||||
|
||||
move a0, s2
|
||||
jal heap_free
|
||||
move a0, s3
|
||||
jal heap_free
|
||||
move a0, s4
|
||||
jal heap_free
|
||||
move a0, s5
|
||||
jal heap_free
|
||||
|
||||
jal print_heap
|
||||
|
||||
ld ra, 0(sp)
|
||||
ld s0, 8(sp)
|
||||
ld s1, 16(sp)
|
||||
addi sp, sp, +(3*8)
|
||||
sd s2, 24(sp)
|
||||
sd s3, 32(sp)
|
||||
sd s4, 40(sp)
|
||||
sd s5, 48(sp)
|
||||
addi sp, sp, +(7*8)
|
||||
ret
|
||||
|
||||
print_heap:
|
||||
addi sp, sp, -(4*8)
|
||||
addi sp, sp, -8
|
||||
sd ra, 0(sp)
|
||||
|
||||
jal print_heap_info
|
||||
jal print_heap_blocks
|
||||
|
||||
ld ra, 0(sp)
|
||||
addi sp, sp, +8
|
||||
ret
|
||||
|
||||
print_heap_blocks:
|
||||
addi sp, sp, -(3*8)
|
||||
sd ra, 0(sp)
|
||||
sd s0, 8(sp)
|
||||
sd s1, 16(sp)
|
||||
sd s2, 24(sp)
|
||||
|
||||
# info
|
||||
|
||||
la a0, hinfo_msg
|
||||
lw a1, -4(a0)
|
||||
jal print
|
||||
jal print_space
|
||||
|
||||
la a0, hexstr
|
||||
lw a1, -4(a0)
|
||||
jal print
|
||||
|
||||
la s0, heap_info
|
||||
move a0, s0
|
||||
jal print_hex
|
||||
jal printnl
|
||||
|
||||
li s1, 0
|
||||
li s2, 4
|
||||
0:
|
||||
beq s1, s2, 0f
|
||||
jal print_space
|
||||
jal print_space
|
||||
li t1, 8
|
||||
mul t0, s1, t1
|
||||
add t0, s0, t0
|
||||
ld a0, 0(t0)
|
||||
jal print_hex
|
||||
jal printnl
|
||||
addi s1, s1, 1
|
||||
j 0b
|
||||
0:
|
||||
|
||||
# blocks
|
||||
|
||||
@@ -127,8 +135,8 @@ print_heap:
|
||||
jal println
|
||||
|
||||
la t0, heap_info
|
||||
ld s0, 16(t0)
|
||||
ld s1, 24(t0)
|
||||
ld s0, 24(t0)
|
||||
ld s1, 32(t0)
|
||||
0:
|
||||
jal print_space
|
||||
jal print_space
|
||||
@@ -144,10 +152,20 @@ print_heap:
|
||||
jal print_hex
|
||||
jal print_space
|
||||
|
||||
jal printnl
|
||||
jal print_space
|
||||
jal print_space
|
||||
jal print_space
|
||||
jal print_space
|
||||
|
||||
ld a0, 8(s0)
|
||||
jal print_hex
|
||||
jal print_space
|
||||
|
||||
ld a0, 16(s0)
|
||||
jal print_hex
|
||||
jal print_space
|
||||
|
||||
la a0, dots
|
||||
lw a1, -4(a0)
|
||||
jal print
|
||||
@@ -165,6 +183,49 @@ print_heap:
|
||||
j 0b
|
||||
0:
|
||||
|
||||
ld ra, 0(sp)
|
||||
ld s0, 8(sp)
|
||||
ld s1, 16(sp)
|
||||
addi sp, sp, +(3*8)
|
||||
ret
|
||||
|
||||
print_heap_info:
|
||||
addi sp, sp, -(4*8)
|
||||
sd ra, 0(sp)
|
||||
sd s0, 8(sp)
|
||||
sd s1, 16(sp)
|
||||
sd s2, 24(sp)
|
||||
|
||||
la a0, hinfo_msg
|
||||
lw a1, -4(a0)
|
||||
jal print
|
||||
jal print_space
|
||||
|
||||
la a0, hexstr
|
||||
lw a1, -4(a0)
|
||||
jal print
|
||||
|
||||
la s0, heap_info
|
||||
move a0, s0
|
||||
jal print_hex
|
||||
jal printnl
|
||||
|
||||
li s1, 0
|
||||
li s2, 5
|
||||
0:
|
||||
beq s1, s2, 0f
|
||||
jal print_space
|
||||
jal print_space
|
||||
li t1, 8
|
||||
mul t0, s1, t1
|
||||
add t0, s0, t0
|
||||
ld a0, 0(t0)
|
||||
jal print_hex
|
||||
jal printnl
|
||||
addi s1, s1, 1
|
||||
j 0b
|
||||
0:
|
||||
|
||||
ld ra, 0(sp)
|
||||
ld s0, 8(sp)
|
||||
ld s1, 16(sp)
|
||||
|
||||
Reference in New Issue
Block a user