Files
riscy-rust/test/binary_search.s
2023-07-14 00:23:12 +01:00

237 lines
3.2 KiB
ArmAsm

.file "binary_search.c"
.option nopic
.text
.align 2
.globl binary_search
.type binary_search, @function
binary_search:
addi sp,sp,-48
sw ra,44(sp)
sw s0,40(sp)
addi s0,sp,48
sw a0,-36(s0)
sw a1,-40(s0)
sw a2,-44(s0)
sw a3,-48(s0)
lw a4,-48(s0)
lw a5,-44(s0)
sub a5,a4,a5
srli a4,a5,31
add a5,a4,a5
srai a5,a5,1
mv a4,a5
lw a5,-44(s0)
add a5,a5,a4
sw a5,-20(s0)
lw a4,-44(s0)
lw a5,-48(s0)
ble a4,a5,.L2
li a5,-1
j .L3
.L2:
lw a5,-20(s0)
slli a5,a5,2
lw a4,-36(s0)
add a5,a4,a5
lw a5,0(a5)
lw a4,-40(s0)
bne a4,a5,.L4
lw a5,-20(s0)
j .L3
.L4:
lw a5,-20(s0)
slli a5,a5,2
lw a4,-36(s0)
add a5,a4,a5
lw a5,0(a5)
lw a4,-40(s0)
bge a4,a5,.L5
lw a5,-20(s0)
addi a5,a5,-1
mv a3,a5
lw a2,-44(s0)
lw a1,-40(s0)
lw a0,-36(s0)
call binary_search
mv a5,a0
j .L3
.L5:
lw a5,-20(s0)
addi a5,a5,1
lw a3,-48(s0)
mv a2,a5
lw a1,-40(s0)
lw a0,-36(s0)
call binary_search
mv a5,a0
.L3:
mv a0,a5
lw ra,44(sp)
lw s0,40(sp)
addi sp,sp,48
jr ra
.size binary_search, .-binary_search
.align 2
.globl search
.type search, @function
search:
addi sp,sp,-32
sw ra,28(sp)
sw s0,24(sp)
addi s0,sp,32
sw a0,-20(s0)
sw a1,-24(s0)
sw a2,-28(s0)
lw a5,-28(s0)
addi a5,a5,-1
mv a3,a5
li a2,0
lw a1,-24(s0)
lw a0,-20(s0)
call binary_search
mv a5,a0
mv a0,a5
lw ra,28(sp)
lw s0,24(sp)
addi sp,sp,32
jr ra
.size search, .-search
.align 2
.globl sort
.type sort, @function
sort:
addi sp,sp,-48
sw s0,44(sp)
addi s0,sp,48
sw a0,-36(s0)
sw a1,-40(s0)
sw zero,-20(s0)
j .L9
.L13:
sw zero,-24(s0)
j .L10
.L12:
lw a5,-24(s0)
addi a5,a5,1
slli a5,a5,2
lw a4,-36(s0)
add a5,a4,a5
lw a4,0(a5)
lw a5,-24(s0)
slli a5,a5,2
lw a3,-36(s0)
add a5,a3,a5
lw a5,0(a5)
bge a4,a5,.L11
lw a5,-24(s0)
slli a5,a5,2
lw a4,-36(s0)
add a5,a4,a5
lw a5,0(a5)
sw a5,-28(s0)
lw a5,-24(s0)
addi a5,a5,1
slli a5,a5,2
lw a4,-36(s0)
add a4,a4,a5
lw a5,-24(s0)
slli a5,a5,2
lw a3,-36(s0)
add a5,a3,a5
lw a4,0(a4)
sw a4,0(a5)
lw a5,-24(s0)
addi a5,a5,1
slli a5,a5,2
lw a4,-36(s0)
add a5,a4,a5
lw a4,-28(s0)
sw a4,0(a5)
.L11:
lw a5,-24(s0)
addi a5,a5,1
sw a5,-24(s0)
.L10:
lw a4,-40(s0)
lw a5,-20(s0)
sub a5,a4,a5
addi a5,a5,-1
lw a4,-24(s0)
blt a4,a5,.L12
lw a5,-20(s0)
addi a5,a5,1
sw a5,-20(s0)
.L9:
lw a5,-40(s0)
addi a5,a5,-1
lw a4,-20(s0)
blt a4,a5,.L13
nop
mv a0,a5
lw s0,44(sp)
addi sp,sp,48
jr ra
.size sort, .-sort
.section .rodata
.align 2
.LC0:
.word 0
.word 6
.word 8
.word 4
.word 3
.word 9
.word 7
.word 5
.text
.align 2
.globl main
.type main, @function
main:
addi sp,sp,-64
sw ra,60(sp)
sw s0,56(sp)
addi s0,sp,64
lui a5,%hi(.LC0)
lw a7,%lo(.LC0)(a5)
addi a4,a5,%lo(.LC0)
lw a6,4(a4)
addi a4,a5,%lo(.LC0)
lw a0,8(a4)
addi a4,a5,%lo(.LC0)
lw a1,12(a4)
addi a4,a5,%lo(.LC0)
lw a2,16(a4)
addi a4,a5,%lo(.LC0)
lw a3,20(a4)
addi a4,a5,%lo(.LC0)
lw a4,24(a4)
addi a5,a5,%lo(.LC0)
lw a5,28(a5)
sw a7,-52(s0)
sw a6,-48(s0)
sw a0,-44(s0)
sw a1,-40(s0)
sw a2,-36(s0)
sw a3,-32(s0)
sw a4,-28(s0)
sw a5,-24(s0)
addi a5,s0,-52
li a1,8
mv a0,a5
call sort
addi a5,s0,-52
li a2,8
li a1,9
mv a0,a5
call search
sw a0,-20(s0)
lw a5,-20(s0)
mv a0,a5
lw ra,60(sp)
lw s0,56(sp)
addi sp,sp,64
jr ra
.size main, .-main
.ident "GCC: (GNU) 7.2.0"