asm_book/section_1/float/asm_rounding.s
2022-07-21 11:09:45 -05:00

83 lines
1.5 KiB
ArmAsm

.global main
.text
.align 2
dless .req d20
dmore .req d21
ndless .req d22
ndmore .req d23
Emit: str x30, [sp, -16]!
bl printf
ldr x30, [sp], 16
ret
main: str x30, [sp, -16]!
stp dless, dmore, [sp, -16]!
stp ndless, ndmore, [sp, -16]!
ldr x0, =vless
ldr dless, [x0]
ldr dmore, [x0, 8]
ldr ndless, [x0, 16]
ldr ndmore, [x0, 24]
//-fcvtps----------------------
fcvtps x1, dless
fcvtps x2, dmore
ldr x0, =fmt1
bl Emit
fcvtps x1, ndless
fcvtps x2, ndmore
ldr x0, =fmt1
bl Emit
//-fcvtms-----------------------
fcvtms x1, dless
fcvtms x2, dmore
ldr x0, =fmt2
bl Emit
fcvtms x1, ndless
fcvtms x2, ndmore
ldr x0, =fmt2
bl Emit
//-fcvtzs-----------------------
fcvtzs x1, dless
fcvtzs x2, dmore
ldr x0, =fmt4
bl Emit
fcvtzs x1, ndless
fcvtzs x2, ndmore
ldr x0, =fmt4
bl Emit
//-fcvtas-----------------------
fcvtas x1, dless
fcvtas x2, dmore
ldr x0, =fmt3
bl Emit
fcvtas x1, ndless
fcvtas x2, ndmore
ldr x0, =fmt3
bl Emit
//------------------------------
ldp ndless, ndmore, [sp], 16
ldp dless, dmore, [sp], 16
ldr x30, [sp], 16
mov w0, wzr
ret
.section .rodata
vless: .double 5.49
vmore: .double 5.51
nvless: .double -5.49
nvmore: .double -5.51
fmt1: .asciz "fcvtps less: %d more: %d\n"
fmt2: .asciz "fcvtms less: %d more: %d\n"
fmt3: .asciz "fcvtta less: %d more: %d\n"
fmt4: .asciz "fcvtzs less: %d more: %d\n"
.end