.file "task10_heap4_demo.c" .option nopic .attribute arch, "rv32i2p1_zicsr2p0_zifencei2p0" .attribute unaligned_access, 0 .attribute stack_align, 16 .text .align 2 .type heap_malloc_model, @function heap_malloc_model: beq a0,zero,.L1 addi a4,a0,8 andi a0,a0,7 beq a0,zero,.L3 andi a4,a4,-8 addi a4,a4,8 .L3: lw a0,start lw a3,end_marker beq a0,a3,.L10 lla a2,start j .L8 .L11: mv a0,a5 .L8: lw a5,4(a0) bgeu a5,a4,.L12 lw a5,0(a0) mv a2,a0 bne a5,a3,.L11 li a0,0 ret .L12: sub a3,a5,a4 li a1,16 bleu a3,a1,.L5 add a5,a0,a4 sw a3,4(a5) lw a3,0(a0) sw a3,0(a5) sw a5,0(a2) sw a4,4(a0) .L6: sw zero,0(a0) lw a5,4(a0) li a3,-2147483648 or a5,a5,a3 sw a5,4(a0) lla a3,free_bytes_remaining lw a5,0(a3) sub a5,a5,a4 sw a5,0(a3) lw a4,minimum_ever_free bgeu a5,a4,.L7 sw a5,minimum_ever_free,a4 .L7: addi a0,a0,8 ret .L5: lw a4,0(a0) sw a4,0(a2) mv a4,a5 j .L6 .L10: li a0,0 .L1: ret .size heap_malloc_model, .-heap_malloc_model .align 2 .type heap_free_model, @function heap_free_model: beq a0,zero,.L13 lw a5,-4(a0) blt a5,zero,.L19 .L13: ret .L19: addi a3,a0,-8 slli a5,a5,1 srli a2,a5,1 sw a2,-4(a0) lla a4,free_bytes_remaining lw a5,0(a4) add a5,a5,a2 sw a5,0(a4) lla a5,start .L15: mv a4,a5 lw a5,0(a5) bgtu a3,a5,.L15 add a1,a3,a2 beq a5,a1,.L20 .L16: sw a5,-8(a0) lla a5,start beq a4,a5,.L17 lw a2,4(a4) slli a5,a2,1 srli a5,a5,1 add a5,a4,a5 beq a3,a5,.L21 .L17: sw a3,0(a4) ret .L20: lw a5,4(a5) add a5,a5,a2 sw a5,-4(a0) lw a5,0(a4) lw a5,0(a5) j .L16 .L21: lw a5,-4(a0) add a5,a5,a2 sw a5,4(a4) lw a5,-8(a0) sw a5,0(a4) ret .size heap_free_model, .-heap_free_model .align 2 .globl main .type main, @function main: addi sp,sp,-32 sw ra,28(sp) sw s0,24(sp) sw s1,20(sp) sw s2,16(sp) sw s3,12(sp) sw s4,8(sp) lla a4,.LANCHOR0 andi a3,a4,7 mv a5,a4 beq a3,zero,.L23 andi a4,a4,-8 addi a5,a4,8 .L23: lla s0,.LANCHOR0+256 sub s0,s0,a5 andi s0,s0,-8 addi a4,a5,-8 add s0,s0,a4 sw s0,end_marker,a4 sw zero,0(s0) sw zero,4(s0) sw s0,0(a5) sub a4,s0,a5 sw a4,4(a5) lla s4,start sw a5,0(s4) sw zero,4(s4) sw a4,free_bytes_remaining,a5 sw a4,minimum_ever_free,a5 li a0,24 call heap_malloc_model mv s2,a0 li a0,40 call heap_malloc_model mv s3,a0 mv a0,s2 call heap_free_model li a0,16 call heap_malloc_model mv s1,a0 mv a0,s3 call heap_free_model mv a0,s1 call heap_free_model snez s2,s2 snez s3,s3 and s2,s2,s3 snez s1,s1 and s1,s1,s2 sw s1,g_allocations_ok,a5 lw a5,0(s4) beq s0,a5,.L24 mv a4,a5 li a3,0 .L25: addi a3,a3,1 lw a4,0(a4) bne s0,a4,.L25 sw a3,g_final_free_nodes,a2 li a3,0 .L26: lw a2,4(a5) add a3,a3,a2 lw a5,0(a5) bne a5,a4,.L26 .L27: sw a3,g_final_free_total,a5 lw a5,minimum_ever_free sw a5,g_minimum_ever_free,a4 li a0,0 lw ra,28(sp) lw s0,24(sp) lw s1,20(sp) lw s2,16(sp) lw s3,12(sp) lw s4,8(sp) addi sp,sp,32 jr ra .L24: sw zero,g_final_free_nodes,a5 li a3,0 j .L27 .size main, .-main .globl g_minimum_ever_free .globl g_final_free_total .globl g_final_free_nodes .globl g_allocations_ok .bss .align 2 .set .LANCHOR0,. + 0 .type heap_area, @object .size heap_area, 264 heap_area: .zero 264 .section .sbss,"aw",@nobits .align 2 .type minimum_ever_free, @object .size minimum_ever_free, 4 minimum_ever_free: .zero 4 .type free_bytes_remaining, @object .size free_bytes_remaining, 4 free_bytes_remaining: .zero 4 .type g_minimum_ever_free, @object .size g_minimum_ever_free, 4 g_minimum_ever_free: .zero 4 .type g_final_free_total, @object .size g_final_free_total, 4 g_final_free_total: .zero 4 .type g_final_free_nodes, @object .size g_final_free_nodes, 4 g_final_free_nodes: .zero 4 .type g_allocations_ok, @object .size g_allocations_ok, 4 g_allocations_ok: .zero 4 .type end_marker, @object .size end_marker, 4 end_marker: .zero 4 .type start, @object .size start, 8 start: .zero 8 .ident "GCC: (15.2.0-23) 15.2.0" .section .note.GNU-stack,"",@progbits