.file "16_k_smallest.sy" .option pic .attribute arch, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0" .attribute unaligned_access, 0 .attribute stack_align, 16 .text .align 1 .globl swap .type swap, @function swap: lla a5,array slli a1,a1,2 add a1,a5,a1 slli a0,a0,2 lw a3,0(a1) add a5,a5,a0 lw a4,0(a5) sw a3,0(a5) sw a4,0(a1) ret .size swap, .-swap .align 1 .globl findPivot .type findPivot, @function findPivot: lla a6,array slli t1,a1,2 add a5,a6,t1 lw a7,0(a5) ble a1,a0,.L4 subw a3,a1,a0 slli a3,a3,32 srli a3,a3,32 add a3,a3,a0 slli a5,a0,2 slli a3,a3,2 add a5,a6,a5 add a3,a6,a3 .L6: lw a2,0(a5) slli a4,a0,2 add a4,a6,a4 bgt a2,a7,.L5 lw a1,0(a4) addiw a0,a0,1 sw a1,0(a5) sw a2,0(a4) .L5: addi a5,a5,4 bne a5,a3,.L6 add a5,a6,t1 lw a7,0(a5) .L4: slli a5,a0,2 add a5,a6,a5 lw a4,0(a5) add a6,a6,t1 sw a7,0(a5) sw a4,0(a6) ret .size findPivot, .-findPivot .align 1 .globl findSmallest .type findSmallest, @function findSmallest: beq a0,a1,.L23 addi sp,sp,-32 sd ra,24(sp) sd s0,16(sp) sd s1,8(sp) lla t1,array .L26: slli t5,a1,2 add a5,t1,t5 lw t3,0(a5) ble a1,a0,.L19 .L29: subw a7,a1,a0 slli a7,a7,32 srli a7,a7,32 add a7,a7,a0 slli a5,a0,2 slli a7,a7,2 add a5,a5,t1 add a7,a7,t1 mv a3,a0 .L14: lw a6,0(a5) slli a4,a3,2 add a4,t1,a4 blt t3,a6,.L13 lw t4,0(a4) addiw a3,a3,1 sw t4,0(a5) sw a6,0(a4) .L13: addi a5,a5,4 bne a5,a7,.L14 add a5,t1,t5 slli s0,a3,2 lw t3,0(a5) add s0,t1,s0 lw a4,0(s0) add a5,t1,t5 sw t3,0(s0) sw a4,0(a5) beq a2,a3,.L28 .L15: bge a2,a3,.L17 addiw a1,a3,-1 bne a1,a0,.L26 .L9: ld ra,24(sp) ld s0,16(sp) ld s1,8(sp) addi sp,sp,32 jr ra .L17: addiw a0,a3,1 beq a0,a1,.L9 add a5,t1,t5 lw t3,0(a5) bgt a1,a0,.L29 .L19: mv a3,a0 slli s0,a3,2 add s0,t1,s0 lw a4,0(s0) add a5,t1,t5 sw t3,0(s0) sw a4,0(a5) bne a2,a3,.L15 .L28: ble a2,zero,.L9 lla s1,array .L16: lw a0,0(s1) addi s1,s1,4 call putint@plt li a0,32 call putch@plt bne s0,s1,.L16 ld ra,24(sp) ld s0,16(sp) ld s1,8(sp) addi sp,sp,32 jr ra .L23: ret .size findSmallest, .-findSmallest .section .text.startup,"ax",@progbits .align 1 .globl main .type main, @function main: addi sp,sp,-48 sd ra,40(sp) sd s2,16(sp) sd s3,8(sp) sd s0,32(sp) sd s1,24(sp) call getint@plt mv s2,a0 call getint@plt mv s3,a0 ble s2,zero,.L31 lla s0,array slli s1,s2,2 add s1,s1,s0 .L32: call getint@plt sw a0,0(s0) addi s0,s0,4 bne s0,s1,.L32 .L31: li a0,0 mv a3,s2 mv a2,s3 addiw a1,s2,-1 call findSmallest ld ra,40(sp) ld s0,32(sp) ld s1,24(sp) ld s2,16(sp) ld s3,8(sp) li a0,0 addi sp,sp,48 jr ra .size main, .-main .globl array .globl _sysy_idx .globl _sysy_us .globl _sysy_s .globl _sysy_m .globl _sysy_h .globl _sysy_l2 .globl _sysy_l1 .globl _sysy_end .globl _sysy_start .bss .align 3 .type array, @object .size array, 4000 array: .zero 4000 .type _sysy_idx, @object .size _sysy_idx, 4 _sysy_idx: .zero 4 .zero 4 .type _sysy_us, @object .size _sysy_us, 4096 _sysy_us: .zero 4096 .type _sysy_s, @object .size _sysy_s, 4096 _sysy_s: .zero 4096 .type _sysy_m, @object .size _sysy_m, 4096 _sysy_m: .zero 4096 .type _sysy_h, @object .size _sysy_h, 4096 _sysy_h: .zero 4096 .type _sysy_l2, @object .size _sysy_l2, 4096 _sysy_l2: .zero 4096 .type _sysy_l1, @object .size _sysy_l1, 4096 _sysy_l1: .zero 4096 .type _sysy_end, @object .size _sysy_end, 16 _sysy_end: .zero 16 .type _sysy_start, @object .size _sysy_start, 16 _sysy_start: .zero 16 .ident "GCC: (Debian 12.2.0-13) 12.2.0" .section .note.GNU-stack,"",@progbits