sysy-data/functional_c/asm/73_int_io.s

364 lines
5.0 KiB
ArmAsm
Raw Normal View History

2024-06-14 13:10:27 +08:00
.file "73_int_io.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 my_getint
.type my_getint, @function
my_getint:
addi sp,sp,-32
sd s1,8(sp)
sd ra,24(sp)
sd s0,16(sp)
li s1,9
.L2:
call getch@plt
addiw s0,a0,-48
bgtu s0,s1,.L2
li s1,9
j .L4
.L8:
addw s0,a5,a4
.L4:
call getch@plt
slliw a5,s0,2
addw a5,a5,s0
addiw a4,a0,-48
slliw a5,a5,1
bleu a4,s1,.L8
ld ra,24(sp)
mv a0,s0
ld s0,16(sp)
ld s1,8(sp)
addi sp,sp,32
jr ra
.size my_getint, .-my_getint
.align 1
.globl my_putint
.type my_putint, @function
my_putint:
ble a0,zero,.L24
li a4,10
remw a5,a0,a4
addi sp,sp,-96
sd ra,88(sp)
sd s0,80(sp)
sd s1,72(sp)
li a3,9
addiw a5,a5,48
sw a5,0(sp)
divw a5,a0,a4
ble a0,a3,.L13
li a2,99
remw a3,a5,a4
addiw a3,a3,48
sw a3,4(sp)
divw a5,a5,a4
ble a0,a2,.L14
li a2,999
remw a3,a5,a4
addiw a3,a3,48
sw a3,8(sp)
divw a5,a5,a4
ble a0,a2,.L15
li a3,8192
addi a3,a3,1807
remw a2,a5,a4
addiw a2,a2,48
sw a2,12(sp)
divw a5,a5,a4
ble a0,a3,.L16
li a3,98304
addi a3,a3,1695
remw a2,a5,a4
addiw a2,a2,48
sw a2,16(sp)
divw a5,a5,a4
ble a0,a3,.L17
li a3,999424
addi a3,a3,575
remw a2,a5,a4
addiw a2,a2,48
sw a2,20(sp)
divw a5,a5,a4
ble a0,a3,.L18
li a3,9998336
addi a3,a3,1663
remw a2,a5,a4
addiw a2,a2,48
sw a2,24(sp)
divw a5,a5,a4
ble a0,a3,.L19
li a3,99999744
addi a3,a3,255
remw a2,a5,a4
addiw a2,a2,48
sw a2,28(sp)
divw a5,a5,a4
ble a0,a3,.L20
li a3,1000001536
addi a3,a3,-1537
remw a2,a5,a4
addiw a2,a2,48
sw a2,32(sp)
divw a5,a5,a4
ble a0,a3,.L21
addiw a5,a5,48
sw a5,36(sp)
li a5,10
.L11:
slli a4,a5,2
addi s1,sp,-8
addiw a5,a5,-1
addi a3,a4,64
add s1,s1,a4
slli a4,a5,32
add s0,a3,sp
srli a5,a4,30
addi s0,s0,-68
sub s1,s1,a5
.L12:
lw a0,0(s0)
addi s0,s0,-4
call putch@plt
bne s1,s0,.L12
ld ra,88(sp)
ld s0,80(sp)
ld s1,72(sp)
addi sp,sp,96
jr ra
.L17:
li a5,5
j .L11
.L24:
ret
.L13:
li a5,1
j .L11
.L14:
li a5,2
j .L11
.L15:
li a5,3
j .L11
.L16:
li a5,4
j .L11
.L18:
li a5,6
j .L11
.L19:
li a5,7
j .L11
.L20:
li a5,8
j .L11
.L21:
li a5,9
j .L11
.size my_putint, .-my_putint
.section .text.startup,"ax",@progbits
.align 1
.globl main
.type main, @function
main:
addi sp,sp,-128
sd ra,120(sp)
sd s0,112(sp)
sd s1,104(sp)
sd s2,96(sp)
sd s3,88(sp)
sd s4,80(sp)
sd s5,72(sp)
sd s6,64(sp)
call my_getint
ble a0,zero,.L28
mv s3,a0
li s1,9
li s2,10
mv s5,sp
addi s4,sp,-8
.L29:
call getch@plt
addiw s0,a0,-48
bleu s0,s1,.L33
j .L29
.L30:
addw s0,a4,a5
.L33:
call getch@plt
slliw a5,s0,2
addw a5,a5,s0
addiw a4,a0,-48
slliw a5,a5,1
bleu a4,s1,.L30
beq s0,zero,.L32
remw a5,s0,s2
divw s0,s0,s2
addiw a5,a5,48
sw a5,0(sp)
sext.w a5,s0
beq a5,zero,.L37
remw a5,s0,s2
divw s0,s0,s2
addiw a5,a5,48
sw a5,4(sp)
sext.w a5,s0
beq a5,zero,.L38
remw a5,s0,s2
divw s0,s0,s2
addiw a5,a5,48
sw a5,8(sp)
sext.w a5,s0
beq a5,zero,.L39
remw a5,s0,s2
divw s0,s0,s2
addiw a5,a5,48
sw a5,12(sp)
sext.w a5,s0
beq a5,zero,.L40
remw a5,s0,s2
divw s0,s0,s2
addiw a5,a5,48
sw a5,16(sp)
sext.w a5,s0
beq a5,zero,.L41
remw a5,s0,s2
divw s0,s0,s2
addiw a5,a5,48
sw a5,20(sp)
sext.w a5,s0
beq a5,zero,.L42
remw a5,s0,s2
divw s0,s0,s2
addiw a5,a5,48
sw a5,24(sp)
sext.w a5,s0
beq a5,zero,.L43
remw a5,s0,s2
divw s0,s0,s2
addiw a5,a5,48
sw a5,28(sp)
sext.w a5,s0
beq a5,zero,.L44
remw a5,s0,s2
divw s0,s0,s2
addiw a5,a5,48
sw a5,32(sp)
sext.w a5,s0
beq a5,zero,.L45
addiw s0,s0,48
sw s0,36(sp)
li a5,10
.L34:
slli s6,a5,2
addiw a5,a5,-1
slli a4,a5,32
addi s0,s6,-4
srli a5,a4,30
add s6,s4,s6
add s0,s5,s0
sub s6,s6,a5
.L36:
lw a0,0(s0)
addi s0,s0,-4
call putch@plt
bne s0,s6,.L36
.L32:
addiw s3,s3,-1
li a0,10
call putch@plt
bne s3,zero,.L29
.L28:
ld ra,120(sp)
ld s0,112(sp)
ld s1,104(sp)
ld s2,96(sp)
ld s3,88(sp)
ld s4,80(sp)
ld s5,72(sp)
ld s6,64(sp)
li a0,0
addi sp,sp,128
jr ra
.L37:
li a5,1
j .L34
.L38:
li a5,2
j .L34
.L39:
li a5,3
j .L34
.L40:
li a5,4
j .L34
.L41:
li a5,5
j .L34
.L42:
li a5,6
j .L34
.L43:
li a5,7
j .L34
.L44:
li a5,8
j .L34
.L45:
li a5,9
j .L34
.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