sysy-data/functional_c/asm/72_hanoi.s

839 lines
11 KiB
ArmAsm
Raw Normal View History

2024-06-14 13:10:27 +08:00
.file "72_hanoi.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 move
.type move, @function
move:
addi sp,sp,-16
sd ra,8(sp)
sd s0,0(sp)
mv s0,a1
call putint@plt
li a0,32
call putch@plt
mv a0,s0
call putint@plt
li a0,44
call putch@plt
ld s0,0(sp)
ld ra,8(sp)
li a0,32
addi sp,sp,16
tail putch@plt
.size move, .-move
.align 1
.globl hanoi
.type hanoi, @function
hanoi:
addi sp,sp,-288
sd s3,248(sp)
sd s5,232(sp)
sd ra,280(sp)
sd s0,272(sp)
sd s1,264(sp)
sd s2,256(sp)
sd s4,240(sp)
sd s6,224(sp)
sd s7,216(sp)
sd s8,208(sp)
sd s9,200(sp)
sd s10,192(sp)
sd s11,184(sp)
li a4,1
mv s3,a1
mv s5,a3
beq a0,a4,.L17
li a4,2
mv s8,a2
beq a0,a4,.L6
addiw s6,a0,-2
mv s8,a1
li s11,1
mv s2,a2
.L18:
beq s6,s11,.L25
addiw s3,s6,-1
sd s6,40(sp)
mv a5,s3
sw s3,88(sp)
mv s1,s8
mv s9,s8
mv s7,s5
mv s8,s5
beq a5,s11,.L26
.L45:
addiw s6,a5,-1
sd a5,48(sp)
mv a2,s6
sd s1,8(sp)
sd s2,56(sp)
mv s10,s9
mv s9,s8
mv s8,s6
beq a2,s11,.L27
.L44:
ld s4,8(sp)
addiw a4,a2,-1
sd s1,64(sp)
sd a2,72(sp)
sd s7,80(sp)
sd s4,16(sp)
sw a4,92(sp)
mv s1,s2
mv s2,s7
beq a4,s11,.L28
.L43:
addiw s7,a4,-1
mv s6,s7
sd a4,96(sp)
sd s1,104(sp)
sw s8,144(sp)
mv s7,s10
ld s5,16(sp)
mv s10,s9
mv s0,s1
mv s9,s6
beq s6,s11,.L29
.L41:
addiw s8,s6,-1
mv s4,s8
mv s3,s8
mv s1,s2
mv s8,s6
sd s5,0(sp)
sd s5,24(sp)
mv s6,s2
sw s4,36(sp)
.L23:
beq s3,s11,.L30
addiw a2,s3,-1
mv s4,a2
sd s8,112(sp)
sd s3,120(sp)
sd s0,128(sp)
sd s6,136(sp)
sw a2,148(sp)
ld s5,0(sp)
mv s2,s0
sext.w s8,s4
beq s4,s11,.L31
.L42:
mv s3,s1
sd s1,160(sp)
mv s6,s4
sd s5,152(sp)
mv s1,s5
.L14:
sext.w a4,s4
mv s0,s2
mv s5,s1
.L16:
addiw a4,a4,-1
mv a0,a4
mv a3,s0
mv a1,s5
mv a2,s3
sd a4,168(sp)
call hanoi
mv a0,s5
call putint@plt
li a0,32
call putch@plt
mv a0,s3
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
ld a4,168(sp)
mv a5,s5
beq a4,s11,.L15
mv s5,s0
mv s0,a5
j .L16
.L33:
mv s3,s2
.L6:
mv a0,s3
call putint@plt
li a0,32
call putch@plt
mv a0,s8
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s3
call putint@plt
li a0,32
call putch@plt
mv a0,s5
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv s3,s8
.L17:
mv a0,s3
call putint@plt
li a0,32
call putch@plt
mv a0,s5
call putint@plt
li a0,44
call putch@plt
ld s0,272(sp)
ld ra,280(sp)
ld s1,264(sp)
ld s2,256(sp)
ld s3,248(sp)
ld s4,240(sp)
ld s5,232(sp)
ld s6,224(sp)
ld s7,216(sp)
ld s8,208(sp)
ld s9,200(sp)
ld s10,192(sp)
ld s11,184(sp)
li a0,32
addi sp,sp,288
tail putch@plt
.L30:
ld s2,0(sp)
mv s5,s0
addiw s4,s3,-1
.L12:
mv a0,s2
call putint@plt
li a0,32
call putch@plt
mv a0,s5
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,32
call putch@plt
mv a0,s1
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s5
call putint@plt
li a0,32
call putch@plt
mv a0,s1
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
ld s2,0(sp)
mv a0,s2
call putint@plt
li a0,32
call putch@plt
mv a0,s0
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
sext.w a5,s4
beq s3,s11,.L38
sd s1,0(sp)
mv s3,a5
mv s1,s2
j .L23
.L38:
ld s5,24(sp)
lw s4,36(sp)
mv s2,s6
mv s6,s8
.L11:
mv a0,s1
call putint@plt
li a0,32
call putch@plt
ld s3,0(sp)
sext.w s4,s4
mv a0,s3
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s1
call putint@plt
li a0,32
call putch@plt
mv a0,s0
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s3
call putint@plt
li a0,32
call putch@plt
mv a0,s0
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s5
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
beq s6,s11,.L37
mv a5,s5
mv s6,s4
mv s5,s0
mv s0,a5
bne s6,s11,.L41
.L29:
sd s2,0(sp)
mv s1,s5
addiw s4,s6,-1
j .L11
.L15:
mv a0,s0
call putint@plt
li a0,32
call putch@plt
mv a0,s3
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s1
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
addiw s4,s4,-1
li a0,32
call putch@plt
beq s4,s11,.L32
mv a4,s1
mv s1,s3
mv s3,a4
j .L14
.L32:
mv s0,s1
ld s5,152(sp)
ld s1,160(sp)
mv s4,s6
.L13:
mv a0,s3
call putint@plt
li a0,32
call putch@plt
mv a0,s0
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s3
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s0
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s5
call putint@plt
li a0,32
call putch@plt
mv a0,s1
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
addiw s4,s4,-1
beq s8,s11,.L39
mv a5,s5
sext.w s8,s4
mv s5,s2
mv s2,a5
bne s4,s11,.L42
.L31:
mv s0,s1
mv s3,s5
j .L13
.L37:
ld a4,96(sp)
ld s1,104(sp)
lw s8,144(sp)
sext.w s6,s9
mv s9,s10
mv s10,s7
.L10:
mv a0,s0
sd a4,0(sp)
call putint@plt
li a0,32
call putch@plt
mv a0,s5
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s0
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s5
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
ld s0,16(sp)
mv a0,s0
call putint@plt
li a0,32
call putch@plt
mv a0,s1
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
ld a4,0(sp)
beq a4,s11,.L36
sd s2,16(sp)
mv a4,s6
mv s2,s0
bne a4,s11,.L43
.L28:
ld s0,16(sp)
mv s5,s1
addiw s6,a4,-1
j .L10
.L39:
ld s8,112(sp)
ld s3,120(sp)
ld s0,128(sp)
ld s6,136(sp)
lw s4,148(sp)
j .L12
.L36:
mv s3,s2
ld a2,72(sp)
mv s2,s1
ld s7,80(sp)
ld s1,64(sp)
ld s4,16(sp)
lw a5,92(sp)
.L9:
mv a0,s3
sd a2,16(sp)
sw a5,0(sp)
call putint@plt
li a0,32
call putch@plt
mv a0,s4
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s3
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s4
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
ld s0,8(sp)
mv a0,s0
call putint@plt
li a0,32
call putch@plt
mv a0,s7
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
lw a5,0(sp)
ld a2,16(sp)
sext.w a5,a5
beq a2,s11,.L35
sd s2,8(sp)
mv a2,a5
mv s2,s0
bne a2,s11,.L44
.L27:
ld s3,8(sp)
mv s4,s7
addiw a5,a2,-1
j .L9
.L35:
mv s5,s2
ld a5,48(sp)
ld s0,8(sp)
ld s2,56(sp)
sext.w s3,s8
mv s8,s9
mv s9,s10
.L8:
mv a0,s5
sd a5,0(sp)
call putint@plt
li a0,32
call putch@plt
mv a0,s0
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s5
call putint@plt
li a0,32
call putch@plt
mv a0,s7
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s0
call putint@plt
li a0,32
call putch@plt
mv a0,s7
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s1
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
ld a5,0(sp)
beq a5,s11,.L34
mv a4,s1
mv a5,s3
mv s1,s7
mv s7,a4
bne a5,s11,.L45
.L26:
mv s0,s2
mv s5,s1
addiw s3,a5,-1
j .L8
.L25:
mv s4,s5
mv s7,s8
addiw s0,s6,-1
.L7:
mv a0,s7
call putint@plt
li a0,32
call putch@plt
mv a0,s4
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s7
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s4
call putint@plt
li a0,32
call putch@plt
mv a0,s2
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s8
call putint@plt
li a0,32
call putch@plt
mv a0,s5
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
sext.w s0,s0
beq s6,s11,.L33
mv a5,s8
mv s6,s0
mv s8,s2
mv s2,a5
j .L18
.L34:
mv s5,s8
ld s6,40(sp)
lw s0,88(sp)
mv s4,s1
mv s8,s9
j .L7
.size hanoi, .-hanoi
.section .text.startup,"ax",@progbits
.align 1
.globl main
.type main, @function
main:
addi sp,sp,-80
sd ra,72(sp)
sd s0,64(sp)
sd s1,56(sp)
sd s2,48(sp)
sd s3,40(sp)
sd s4,32(sp)
sd s5,24(sp)
sd s6,16(sp)
sd s7,8(sp)
call getint@plt
ble a0,zero,.L57
mv s7,a0
li s5,1
.L49:
call getint@plt
mv s4,a0
beq a0,s5,.L55
addiw s3,a0,-1
li s4,2
beq s3,s5,.L50
mv s6,s3
li s4,1
li s3,2
.L52:
sext.w s0,s6
mv s1,s4
li s2,3
.L54:
addiw s0,s0,-1
mv a3,s2
mv a1,s1
mv a2,s3
mv a0,s0
call hanoi
mv a0,s1
call putint@plt
li a0,32
call putch@plt
mv a0,s3
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a5,s1
beq s0,s5,.L53
mv s1,s2
mv s2,a5
j .L54
.L53:
mv a0,s2
call putint@plt
li a0,32
call putch@plt
mv a0,s3
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s4
call putint@plt
li a0,32
call putch@plt
li a0,3
call putint@plt
li a0,44
call putch@plt
addiw s6,s6,-1
li a0,32
call putch@plt
beq s6,s5,.L50
mv a5,s4
mv s4,s3
mv s3,a5
j .L52
.L50:
mv a0,s3
call putint@plt
li a0,32
call putch@plt
mv a0,s4
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
mv a0,s3
call putint@plt
li a0,32
call putch@plt
li a0,3
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
.L55:
mv a0,s4
call putint@plt
li a0,32
call putch@plt
li a0,3
call putint@plt
li a0,44
call putch@plt
li a0,32
call putch@plt
addiw s7,s7,-1
li a0,10
call putch@plt
bne s7,zero,.L49
.L57:
ld ra,72(sp)
ld s0,64(sp)
ld s1,56(sp)
ld s2,48(sp)
ld s3,40(sp)
ld s4,32(sp)
ld s5,24(sp)
ld s6,16(sp)
ld s7,8(sp)
li a0,0
addi sp,sp,80
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