sysy-data/functional_c/asm/64_calculator.s

840 lines
11 KiB
ArmAsm

.file "64_calculator.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 isdigit
.type isdigit, @function
isdigit:
addiw a0,a0,-48
sltiu a0,a0,10
ret
.size isdigit, .-isdigit
.align 1
.globl power
.type power, @function
power:
mv a5,a0
li a0,1
beq a1,zero,.L6
.L5:
addiw a1,a1,-1
mulw a0,a5,a0
bne a1,zero,.L5
ret
.L6:
ret
.size power, .-power
.align 1
.globl getstr
.type getstr, @function
getstr:
addi sp,sp,-48
sd s0,32(sp)
sd ra,40(sp)
sd s1,24(sp)
sd s2,16(sp)
sd s3,8(sp)
mv s0,a0
call getch@plt
li a5,13
beq a0,a5,.L11
li a5,10
li s1,0
beq a0,a5,.L9
li s2,13
li s3,10
j .L10
.L15:
addi s0,s0,4
beq a0,s3,.L9
.L10:
sw a0,0(s0)
call getch@plt
addiw s1,s1,1
bne a0,s2,.L15
.L9:
ld ra,40(sp)
ld s0,32(sp)
ld s2,16(sp)
ld s3,8(sp)
mv a0,s1
ld s1,24(sp)
addi sp,sp,48
jr ra
.L11:
li s1,0
j .L9
.size getstr, .-getstr
.align 1
.globl intpush
.type intpush, @function
intpush:
lla a2,.LANCHOR0
lw a5,0(a2)
lla a4,ints
addiw a3,a5,1
mv a5,a3
slli a3,a3,2
add a4,a4,a3
sw a5,0(a2)
sw a0,0(a4)
ret
.size intpush, .-intpush
.align 1
.globl chapush
.type chapush, @function
chapush:
lla a2,.LANCHOR0
lw a5,4(a2)
lla a4,chas
addiw a3,a5,1
mv a5,a3
slli a3,a3,2
add a4,a4,a3
sw a5,4(a2)
sw a0,0(a4)
ret
.size chapush, .-chapush
.align 1
.globl intpop
.type intpop, @function
intpop:
lla a3,.LANCHOR0
lw a5,0(a3)
lla a4,ints
slli a2,a5,2
add a4,a4,a2
addiw a5,a5,-1
lw a0,0(a4)
sw a5,0(a3)
ret
.size intpop, .-intpop
.align 1
.globl chapop
.type chapop, @function
chapop:
lla a3,.LANCHOR0
lw a5,4(a3)
lla a4,chas
slli a2,a5,2
add a4,a4,a2
addiw a5,a5,-1
lw a0,0(a4)
sw a5,4(a3)
ret
.size chapop, .-chapop
.align 1
.globl intadd
.type intadd, @function
intadd:
lw a5,.LANCHOR0
slli a5,a5,2
lla a4,ints
add a4,a4,a5
lw a3,0(a4)
slliw a5,a3,2
addw a5,a5,a3
slliw a5,a5,1
addw a5,a5,a0
sw a5,0(a4)
ret
.size intadd, .-intadd
.align 1
.globl find
.type find, @function
find:
lla a2,.LANCHOR0
lw a4,4(a2)
lla a7,.LANCHOR1
lw a5,0(a7)
slli a1,a4,2
lla a3,chas
add a3,a3,a1
lw t1,0(a3)
slli a6,a5,2
lla a3,get2
addiw a1,a5,1
add a6,a3,a6
slli a1,a1,2
li t3,32
addiw a0,a4,-1
sw t3,0(a6)
add a3,a3,a1
addiw a5,a5,2
sw a0,4(a2)
sw t1,8(a2)
sw t1,0(a3)
sw a5,0(a7)
snez a0,a0
ret
.size find, .-find
.section .text.startup,"ax",@progbits
.align 1
.globl main
.type main, @function
main:
addi sp,sp,-128
lla a0,get
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)
sd s7,56(sp)
sd s8,48(sp)
sd s9,40(sp)
sd s10,32(sp)
sd s11,24(sp)
lla s0,.LANCHOR0
sw zero,.LANCHOR0,a5
sw zero,.LANCHOR0+4,a5
call getstr
lw a2,12(s0)
li ra,0
li t4,0
lla t6,.LANCHOR1
lla a7,get2
ble a0,a2,.L24
subw t0,a0,a2
slli t0,t0,32
srli t0,t0,32
add t0,t0,a2
lla a1,get
lla t6,.LANCHOR1
slli a2,a2,2
slli t0,t0,2
add a2,a2,a1
add t0,t0,a1
lw a4,0(t6)
lw a3,4(s0)
li a5,0
li a1,0
li t3,0
lla a7,get2
li s1,9
li s2,40
li s3,32
li s4,94
lla s11,chas
j .L57
.L129:
slli t1,a4,2
add t1,a7,t1
sw a6,0(t1)
addi a2,a2,4
addiw a4,a4,1
beq a2,t0,.L128
.L57:
lw a6,0(a2)
addiw t1,a6,-48
bleu t1,s1,.L129
beq a6,s2,.L130
bne a6,s4,.L29
addiw a3,a3,1
slli a6,a3,2
add a6,s11,a6
sw s4,0(a6)
li t3,1
.L28:
slli a6,a4,2
add a6,a7,a6
sw s3,0(a6)
addi a2,a2,4
addiw a4,a4,1
bne a2,t0,.L57
.L128:
sw a4,0(t6)
sw a0,12(s0)
beq a1,zero,.L58
sw a5,8(s0)
.L58:
beq t3,zero,.L24
sw a3,4(s0)
.L24:
lw a4,4(s0)
lw a1,0(t6)
ble a4,zero,.L86
addiw a6,a4,-1
slli a5,a6,32
srli a2,a5,31
lla a3,chas
add a2,a2,a1
slli a4,a4,2
slli a5,a1,2
slli a2,a2,2
add a4,a4,a3
lla a3,get2+8
add a5,a7,a5
add a2,a2,a3
li a0,32
.L61:
lw a3,0(a4)
sw a0,0(a5)
addi a5,a5,8
sw a3,-4(a5)
addi a4,a4,-4
bne a2,a5,.L61
slliw a5,a6,1
addw a6,a5,a1
addiw a2,a1,1
addw a2,a2,a5
slli a6,a6,2
addiw a1,a1,2
add a6,a7,a6
slli a2,a2,2
addw a5,a1,a5
sw a0,0(a6)
add a2,a7,a2
sw zero,.LANCHOR0+4,a1
sw a3,0(a2)
sw a5,0(t6)
.L60:
slli a5,a5,2
add a5,a7,a5
li a4,64
sw a4,0(a5)
lw a2,4(a7)
li a5,1
sw a5,12(s0)
lla t3,ints
beq a2,a4,.L63
lw a0,0(s0)
li s7,0
li s6,0
li t1,1
ld t2,.LC0
lla t3,ints
li t5,62
li a6,32
li t0,1
li s1,64
li s2,43
li s3,45
li s4,42
.L77:
addiw a3,t1,1
slli a4,a3,2
add a4,a7,a4
addiw a5,a2,-32
lw a1,0(a4)
mv s5,a3
bgtu a5,t5,.L64
sll a5,t0,a5
and a4,a5,t2
bne a4,zero,.L65
andi a5,a5,1
bne a5,zero,.L66
.L64:
addiw a0,a0,1
slli ra,a0,2
addiw a2,a2,-48
add a5,t3,ra
sw a2,0(a5)
beq a1,a6,.L88
addi a3,t1,2
slli a3,a3,2
add a3,a7,a3
li s5,2
.L75:
slliw a5,a2,2
addiw a4,a1,-48
addw a5,a5,a2
lw a1,0(a3)
slliw a5,a5,1
addw a2,a4,a5
mv a5,a2
mv a4,s5
addi a3,a3,4
addi s5,s5,1
bne a1,a6,.L75
add a2,t3,ra
addw a3,a4,t1
sext.w ra,a4
sw a5,0(a2)
li s7,1
li s6,1
.L74:
mv a2,a1
mv t1,a3
j .L77
.L130:
addiw a3,a3,1
slli a6,a3,2
add a6,s11,a6
sw s2,0(a6)
li t3,1
j .L28
.L29:
li t1,41
beq a6,t1,.L131
li t1,43
beq a6,t1,.L132
li t1,45
beq a6,t1,.L133
li t1,42
bne a6,t1,.L43
li s5,1
slli t3,a3,2
lla s6,chas
slli a6,a4,2
slli s5,s5,57
mv t5,a3
add t3,s6,t3
add a6,a7,a6
sext.w t2,a3
li s7,42
li s10,57
addi s5,s5,1025
li s8,32
sd a2,8(sp)
.L44:
mv s9,a5
lw a5,0(t3)
mv a2,t2
addiw t1,a5,-37
srl a3,s5,t1
andi a3,a3,1
beq a5,s7,.L46
bgtu t1,s10,.L47
bne a3,zero,.L46
.L47:
ld a2,8(sp)
addiw a3,t2,1
mv a5,s9
.L45:
slli a6,a3,2
add a6,s6,a6
li t1,42
sw t1,0(a6)
li t3,1
j .L28
.L46:
addi t5,t5,-1
sw s8,0(a6)
sw a5,4(a6)
sext.w t2,t5
addiw a4,a4,2
addi t3,t3,-4
addi a6,a6,8
li a1,1
bne t2,zero,.L44
mv a3,a2
ld a2,8(sp)
j .L45
.L65:
addiw t1,a0,-1
slli a4,t1,2
slli a0,a0,2
add a0,t3,a0
add s7,t3,a4
lw a5,0(a0)
lw a0,0(s7)
beq a2,s2,.L134
beq a2,s3,.L135
beq a2,s4,.L136
li s7,47
bne a2,s7,.L71
divw t4,a0,a5
.L68:
add a4,t3,a4
sw t4,0(a4)
mv a0,t1
li s7,1
.L66:
bne a1,s1,.L74
sw s5,12(s0)
beq s7,zero,.L78
sw a0,0(s0)
.L78:
beq s6,zero,.L63
sw ra,0(t6)
.L63:
lw a0,4(t3)
call putint@plt
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)
ld s7,56(sp)
ld s8,48(sp)
ld s9,40(sp)
ld s10,32(sp)
ld s11,24(sp)
li a0,0
addi sp,sp,128
jr ra
.L134:
addw t4,a0,a5
j .L68
.L131:
slli t1,a3,2
lla t3,chas
add a5,t3,t1
lw a5,0(a5)
addiw a3,a3,-1
beq a5,s2,.L80
slli a1,a4,2
addi t1,t1,-4
addiw a4,a4,2
add a1,a7,a1
add t1,t1,t3
li t2,32
li t5,40
.L31:
sw a5,4(a1)
lw a5,0(t1)
sw t2,0(a1)
sext.w t3,a4
addiw a3,a3,-1
addiw a4,a4,2
addi a1,a1,8
addi t1,t1,-4
bne a5,t5,.L31
sext.w a4,t3
li a1,1
li t3,1
.L48:
li t1,37
bne a6,t1,.L28
li s5,1
slli t3,a3,2
lla s6,chas
slli a6,a4,2
slli s5,s5,57
mv t5,a3
add t3,s6,t3
add a6,a7,a6
sext.w t2,a3
li s7,42
li s10,57
addi s5,s5,1025
li s8,32
.L53:
mv s9,a5
lw a5,0(t3)
sd t2,8(sp)
addiw t1,a5,-37
srl a3,s5,t1
andi a3,a3,1
beq a5,s7,.L55
bgtu t1,s10,.L56
bne a3,zero,.L55
.L56:
addiw a3,t2,1
mv a5,s9
.L54:
slli a6,a3,2
add s6,s6,a6
li a6,37
sw a6,0(s6)
li t3,1
j .L28
.L55:
addi t5,t5,-1
sw s8,0(a6)
sw a5,4(a6)
sext.w t2,t5
addiw a4,a4,2
addi t3,t3,-4
addi a6,a6,8
li a1,1
bne t2,zero,.L53
ld a3,8(sp)
j .L54
.L135:
subw t4,a0,a5
j .L68
.L132:
li s5,1
slli t3,a3,2
lla s6,chas
slli a6,a4,2
slli s5,s5,57
mv t5,a3
add t3,s6,t3
add a6,a7,a6
sext.w t2,a3
li s7,43
li s10,57
addi s5,s5,1313
li s9,32
sd a2,8(sp)
.L34:
mv s8,a5
lw a5,0(t3)
mv a2,t2
addiw t1,a5,-37
srl a3,s5,t1
andi a3,a3,1
beq a5,s7,.L36
bgtu t1,s10,.L37
bne a3,zero,.L36
.L37:
ld a2,8(sp)
addiw a3,t2,1
mv a5,s8
.L35:
slli a6,a3,2
add a6,s6,a6
li t1,43
sw t1,0(a6)
li t3,1
j .L28
.L36:
addi t5,t5,-1
sw s9,0(a6)
sw a5,4(a6)
sext.w t2,t5
addiw a4,a4,2
addi t3,t3,-4
addi a6,a6,8
li a1,1
bne t2,zero,.L34
mv a3,a2
ld a2,8(sp)
j .L35
.L136:
mulw t4,a0,a5
j .L68
.L133:
li s5,1
slli t3,a3,2
lla s6,chas
slli a6,a4,2
slli s5,s5,57
mv t5,a3
add t3,s6,t3
add a6,a7,a6
sext.w t2,a3
li s7,43
li s10,57
addi s5,s5,1313
li s9,32
sd a2,8(sp)
.L39:
mv s8,a5
lw a5,0(t3)
mv a2,t2
addiw t1,a5,-37
srl a3,s5,t1
andi a3,a3,1
beq a5,s7,.L41
bgtu t1,s10,.L42
bne a3,zero,.L41
.L42:
ld a2,8(sp)
addiw a3,t2,1
mv a5,s8
.L40:
slli a6,a3,2
add a6,s6,a6
li t1,45
sw t1,0(a6)
li t3,1
j .L28
.L41:
addi t5,t5,-1
sw s9,0(a6)
sw a5,4(a6)
sext.w t2,t5
addiw a4,a4,2
addi t3,t3,-4
addi a6,a6,8
li a1,1
bne t2,zero,.L39
mv a3,a2
ld a2,8(sp)
j .L40
.L88:
li s7,1
li s6,1
li ra,1
j .L74
.L86:
mv a5,a1
j .L60
.L80:
li a1,1
li t3,1
j .L28
.L71:
li s7,37
bne a2,s7,.L72
remw t4,a0,a5
j .L68
.L72:
li s7,94
bne a2,s7,.L68
li t4,1
beq a5,zero,.L68
.L73:
addiw a5,a5,-1
mulw t4,a0,t4
bne a5,zero,.L73
j .L68
.L43:
li t1,47
bne a6,t1,.L48
li s5,1
slli t3,a3,2
lla s6,chas
slli a6,a4,2
slli s5,s5,57
mv t2,a3
add t3,s6,t3
add a6,a7,a6
sext.w t5,a3
li s8,42
li s10,57
addi s5,s5,1025
li s9,32
sd a2,8(sp)
.L49:
mv s7,a5
lw a5,0(t3)
mv a2,t5
addiw t1,a5,-37
srl a3,s5,t1
andi a3,a3,1
beq a5,s8,.L51
bgtu t1,s10,.L52
bne a3,zero,.L51
.L52:
ld a2,8(sp)
addiw a3,t5,1
mv a5,s7
.L50:
slli a6,a3,2
add a6,s6,a6
li t1,47
sw t1,0(a6)
li t3,1
j .L28
.L51:
addi t2,t2,-1
sw s9,0(a6)
sw a5,4(a6)
sext.w t5,t2
addiw a4,a4,2
addi t3,t3,-4
addi a6,a6,8
li a1,1
bne t5,zero,.L49
mv a3,a2
ld a2,8(sp)
j .L50
.size main, .-main
.globl get2
.globl get
.globl c
.globl ii
.globl i
.globl chat
.globl chas
.globl intt
.globl ints
.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
.section .rodata.cst8,"aM",@progbits,8
.align 3
.LC0:
.dword 4611686018427431968
.data
.align 2
.set .LANCHOR1,. + 0
.type ii, @object
.size ii, 4
ii:
.word 1
.bss
.align 3
.set .LANCHOR0,. + 0
.type intt, @object
.size intt, 4
intt:
.zero 4
.type chat, @object
.size chat, 4
chat:
.zero 4
.type c, @object
.size c, 4
c:
.zero 4
.type i, @object
.size i, 4
i:
.zero 4
.type get2, @object
.size get2, 40000
get2:
.zero 40000
.type get, @object
.size get, 40000
get:
.zero 40000
.type chas, @object
.size chas, 40000
chas:
.zero 40000
.type ints, @object
.size ints, 40000
ints:
.zero 40000
.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