sysy-data/functional_c/asm/95_float.s

366 lines
5.5 KiB
ArmAsm

.file "95_float.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 float_abs
.type float_abs, @function
float_abs:
fmv.w.x fa5,zero
flt.s a5,fa0,fa5
bne a5,zero,.L6
ret
.L6:
fneg.s fa0,fa0
ret
.size float_abs, .-float_abs
.align 1
.globl circle_area
.type circle_area, @function
circle_area:
mulw a5,a0,a0
fcvt.s.w fa5,a0
flw fa3,.LC0,a4
flw fa0,.LC1,a4
fmul.s fa2,fa5,fa3
fcvt.s.w fa4,a5
fmul.s fa4,fa4,fa3
fmadd.s fa5,fa5,fa2,fa4
fmul.s fa0,fa5,fa0
ret
.size circle_area, .-circle_area
.align 1
.globl float_eq
.type float_eq, @function
float_eq:
fsub.s fa0,fa0,fa1
fmv.w.x fa5,zero
flt.s a5,fa0,fa5
bne a5,zero,.L12
flw fa5,.LC2,a5
flt.s a0,fa0,fa5
ret
.L12:
fneg.s fa0,fa0
flw fa5,.LC2,a5
flt.s a0,fa0,fa5
ret
.size float_eq, .-float_eq
.align 1
.globl error
.type error, @function
error:
addi sp,sp,-16
li a0,101
sd ra,8(sp)
call putch@plt
li a0,114
call putch@plt
li a0,114
call putch@plt
li a0,111
call putch@plt
li a0,114
call putch@plt
ld ra,8(sp)
li a0,10
addi sp,sp,16
tail putch@plt
.size error, .-error
.align 1
.globl ok
.type ok, @function
ok:
addi sp,sp,-16
li a0,111
sd ra,8(sp)
call putch@plt
li a0,107
call putch@plt
ld ra,8(sp)
li a0,10
addi sp,sp,16
tail putch@plt
.size ok, .-ok
.align 1
.globl assert
.type assert, @function
assert:
addi sp,sp,-16
sd ra,8(sp)
bne a0,zero,.L18
li a0,101
call putch@plt
li a0,114
call putch@plt
li a0,114
call putch@plt
li a0,111
call putch@plt
li a0,114
call putch@plt
ld ra,8(sp)
li a0,10
addi sp,sp,16
tail putch@plt
.L18:
li a0,111
call putch@plt
li a0,107
call putch@plt
ld ra,8(sp)
li a0,10
addi sp,sp,16
tail putch@plt
.size assert, .-assert
.align 1
.globl assert_not
.type assert_not, @function
assert_not:
addi sp,sp,-16
sd ra,8(sp)
beq a0,zero,.L22
li a0,101
call putch@plt
li a0,114
call putch@plt
li a0,114
call putch@plt
li a0,111
call putch@plt
li a0,114
call putch@plt
ld ra,8(sp)
li a0,10
addi sp,sp,16
tail putch@plt
.L22:
li a0,111
call putch@plt
li a0,107
call putch@plt
ld ra,8(sp)
li a0,10
addi sp,sp,16
tail putch@plt
.size assert_not, .-assert_not
.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)
fsd fs1,64(sp)
fsd fs2,56(sp)
addi s2,sp,8
fsd fs0,72(sp)
call ok
call ok
call ok
call ok
call ok
call ok
call ok
call ok
ld a5,.LC3
mv a0,s2
sd a5,8(sp)
sd zero,16(sp)
sd zero,24(sp)
sd zero,32(sp)
sd zero,40(sp)
call getfarray@plt
mv s3,a0
mv s0,s2
addi s1,sp,44
flw fs1,.LC0,a5
flw fs2,.LC1,a5
.L26:
call getfloat@plt
fcvt.w.s a5,fa0,rtz
flw fa4,0(s0)
fmul.s fa3,fa0,fs1
mulw a4,a5,a5
fadd.s fa4,fa4,fa0
fcvt.s.w fa5,a5
addi s0,s0,4
fmul.s fa0,fa3,fa0
fmul.s fa3,fa5,fs1
fsw fa4,-4(s0)
fcvt.s.w fa4,a4
fmul.s fa4,fa4,fs1
fmadd.s fa5,fa5,fa3,fa4
fmul.s fs0,fa5,fs2
call putfloat@plt
li a0,32
call putch@plt
fcvt.w.s a0,fs0,rtz
sext.w a0,a0
call putint@plt
li a0,10
call putch@plt
bne s0,s1,.L26
mv a0,s3
mv a1,s2
call putfarray@plt
ld ra,120(sp)
ld s0,112(sp)
ld s1,104(sp)
ld s2,96(sp)
ld s3,88(sp)
fld fs0,72(sp)
fld fs1,64(sp)
fld fs2,56(sp)
li a0,0
addi sp,sp,128
jr ra
.size main, .-main
.globl FIVE
.globl THREE
.globl TWO
.globl MAX
.globl CONV2
.globl CONV1
.globl EVAL3
.globl EVAL2
.globl EVAL1
.globl FACT
.globl HEX2
.globl PI_HEX
.globl EPS
.globl PI
.globl RADIUS
.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.cst4,"aM",@progbits,4
.align 2
.LC0:
.word 1078530011
.align 2
.LC1:
.word 1056964608
.align 2
.LC2:
.word 897988541
.section .rodata.cst8,"aM",@progbits,8
.align 3
.LC3:
.dword 4611686019492741120
.section .rodata
.align 2
.type FIVE, @object
.size FIVE, 4
FIVE:
.word 5
.type THREE, @object
.size THREE, 4
THREE:
.word 3
.type TWO, @object
.size TWO, 4
TWO:
.word 2
.type MAX, @object
.size MAX, 4
MAX:
.word 1000000000
.type CONV2, @object
.size CONV2, 4
CONV2:
.word 1166012416
.type CONV1, @object
.size CONV1, 4
CONV1:
.word 1130954752
.type EVAL3, @object
.size EVAL3, 4
EVAL3:
.word 1107966695
.type EVAL2, @object
.size EVAL2, 4
EVAL2:
.word 1107966695
.type EVAL1, @object
.size EVAL1, 4
EVAL1:
.word 1119752446
.type FACT, @object
.size FACT, 4
FACT:
.word -956241920
.type HEX2, @object
.size HEX2, 4
HEX2:
.word 1033895936
.type PI_HEX, @object
.size PI_HEX, 4
PI_HEX:
.word 1078530011
.type EPS, @object
.size EPS, 4
EPS:
.word 897988541
.type PI, @object
.size PI, 4
PI:
.word 1078530011
.type RADIUS, @object
.size RADIUS, 4
RADIUS:
.word 1085276160
.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