mirror of
https://github.com/pkivolowitz/asm_book.git
synced 2026-06-21 05:36:48 +08:00
103 lines
2.3 KiB
ArmAsm
103 lines
2.3 KiB
ArmAsm
#include "apple-linux-convergence.S"
|
|
|
|
GLABEL main
|
|
.text
|
|
.align 2
|
|
|
|
dless .req d20
|
|
dmore .req d21
|
|
ndless .req d22
|
|
ndmore .req d23
|
|
|
|
Emit:
|
|
START_PROC
|
|
PUSH_P x29, x30
|
|
mov x29, sp
|
|
#if defined(__APPLE__)
|
|
PUSH_P x1, x2
|
|
CRT printf
|
|
add sp, sp, 16
|
|
#else
|
|
CRT printf
|
|
#endif
|
|
POP_P x29, x30
|
|
ret
|
|
END_PROC
|
|
|
|
MAIN
|
|
START_PROC
|
|
PUSH_P x29, x30
|
|
stp dless, dmore, [sp, -16]!
|
|
stp ndless, ndmore, [sp, -16]!
|
|
mov x29, sp
|
|
|
|
LLD_ADDR x0, leg
|
|
CRT printf
|
|
|
|
LLD_ADDR x0, vless
|
|
ldr dless, [x0]
|
|
ldr dmore, [x0, 8]
|
|
ldr ndless, [x0, 16]
|
|
ldr ndmore, [x0, 24]
|
|
|
|
//-fcvtps- Floating-point Convert to Signed integer, rounding toward Plus infinity
|
|
fcvtps x1, dless
|
|
fcvtps x2, dmore
|
|
LLD_ADDR x0, fmt1
|
|
bl Emit
|
|
|
|
fcvtps x1, ndless
|
|
fcvtps x2, ndmore
|
|
LLD_ADDR x0, fmt1
|
|
bl Emit
|
|
//-fcvtns- Floating-point Convert to Signed integer, rounding to nearest with ties to even (scalar).
|
|
fcvtns x1, dless
|
|
fcvtns x2, dmore
|
|
LLD_ADDR x0, fmt2
|
|
bl Emit
|
|
|
|
fcvtns x1, ndless
|
|
fcvtns x2, ndmore
|
|
LLD_ADDR x0, fmt2
|
|
bl Emit
|
|
//-fcvtzs- Floating-point Convert to Signed integer, rounding toward Zero (scalar).
|
|
fcvtzs x1, dless
|
|
fcvtzs x2, dmore
|
|
LLD_ADDR x0, fmt4
|
|
bl Emit
|
|
|
|
fcvtzs x1, ndless
|
|
fcvtzs x2, ndmore
|
|
LLD_ADDR x0, fmt4
|
|
bl Emit
|
|
//-fcvtas- Floating-point Convert to Signed integer, rounding to nearest with ties to Away (scalar).
|
|
fcvtas x1, dless
|
|
fcvtas x2, dmore
|
|
LLD_ADDR x0, fmt3
|
|
bl Emit
|
|
|
|
fcvtas x1, ndless
|
|
fcvtas x2, ndmore
|
|
LLD_ADDR x0, fmt3
|
|
bl Emit
|
|
//------------------------------
|
|
|
|
ldp ndless, ndmore, [sp], 16
|
|
ldp dless, dmore, [sp], 16
|
|
POP_P x29, x30
|
|
mov w0, wzr
|
|
ret
|
|
END_PROC
|
|
|
|
.data
|
|
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 "fcvtns less: %d more: %d\n"
|
|
fmt3: .asciz "fcvtta less: %d more: %d\n"
|
|
fmt4: .asciz "fcvtzs less: %d more: %d\n"
|
|
leg: .asciz "less values are +/- 5.49. more values are +/- 5.51.\n"
|
|
|
|
.end
|