sysy-data/hidden_functional_c/asm/16_k_smallest.s

245 lines
3.5 KiB
ArmAsm
Raw Normal View History

2024-06-14 13:10:27 +08:00
.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