sysy-data/functional_c/asm/66_exgcd.s

157 lines
2.3 KiB
ArmAsm

.file "66_exgcd.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 exgcd
.type exgcd, @function
exgcd:
addi sp,sp,-64
sd s0,48(sp)
sd s1,40(sp)
sd s2,32(sp)
sd s3,24(sp)
sd ra,56(sp)
sd s4,16(sp)
sd s5,8(sp)
mv s0,a1
mv s1,a0
mv s2,a2
mv s3,a3
li a5,1
bne a1,zero,.L14
.L2:
sw a5,0(s2)
sw s0,0(s3)
ld ra,56(sp)
ld s0,48(sp)
ld s2,32(sp)
ld s3,24(sp)
ld s4,16(sp)
ld s5,8(sp)
mv a0,s1
ld s1,40(sp)
addi sp,sp,64
jr ra
.L14:
remw a4,a0,a1
li a5,0
li a0,1
mv s4,a4
bne a4,zero,.L15
.L3:
sw a0,0(s2)
sw a5,0(s3)
lw a3,0(s2)
mv s1,s0
subw s0,a3,a4
j .L2
.L15:
remw a0,a1,a4
li a1,1
mv s5,a0
bne a0,zero,.L16
.L4:
divw s1,s1,s0
sw a1,0(s2)
sw a0,0(s3)
lw a3,0(s2)
mv s0,a4
subw a5,a3,a5
mulw a4,s1,a5
j .L3
.L16:
remw a1,a4,a0
call exgcd
divw s5,s4,s5
lw a1,0(s3)
lw a5,0(s2)
mv a4,a0
divw s4,s0,s4
mulw s5,s5,a1
subw a0,a5,s5
mulw a5,s4,a0
j .L4
.size exgcd, .-exgcd
.section .text.startup,"ax",@progbits
.align 1
.globl main
.type main, @function
main:
addi sp,sp,-32
li a5,1
addi a3,sp,8
mv a2,sp
li a1,7
li a0,15
sd ra,24(sp)
sw a5,0(sp)
sw a5,8(sp)
call exgcd
lw a5,8(sp)
li a4,15
lw a3,0(sp)
remw a5,a5,a4
sw a3,8(sp)
addiw a5,a5,15
remw a0,a5,a4
sw a0,0(sp)
call putint@plt
ld ra,24(sp)
li a0,0
addi sp,sp,32
jr ra
.size main, .-main
.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 _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