mirror of
https://github.com/pkivolowitz/asm_book.git
synced 2026-06-21 03:46:48 +08:00
116 lines
2.3 KiB
ArmAsm
116 lines
2.3 KiB
ArmAsm
/* Macros to permit the "same" assembly language to build on ARM64
|
|
Linux systems as well as Apple Silicon systems.
|
|
|
|
See the fuller documentation at:
|
|
https://github.com/pkivolowitz/asm_book/blob/main/macros/README.md
|
|
|
|
Perry Kivolowitz
|
|
A Gentle Introduction to Assembly Language
|
|
*/
|
|
|
|
.macro GLD_PTR xreg, label
|
|
#if defined(__APPLE__)
|
|
adrp \xreg, _\label@GOTPAGE
|
|
ldr \xreg, [\xreg, _\label@GOTPAGEOFF]
|
|
#else
|
|
ldr \xreg, =\label
|
|
ldr \xreg, [\xreg]
|
|
#endif
|
|
.endm
|
|
|
|
.macro GLD_ADDR xreg, label // Get a global address
|
|
#if defined(__APPLE__)
|
|
adrp \xreg, _\label@GOTPAGE
|
|
add \xreg, \xreg, _\label@GOTPAGEOFF
|
|
#else
|
|
ldr \xreg, =\label
|
|
#endif
|
|
.endm
|
|
|
|
.macro LLD_ADDR xreg, label
|
|
#if defined(__APPLE__)
|
|
adrp \xreg, \label@PAGE
|
|
add \xreg, \xreg, \label@PAGEOFF
|
|
#else
|
|
ldr \xreg, =\label
|
|
#endif
|
|
.endm
|
|
|
|
.macro LLD_DBL xreg, dreg, label
|
|
#if defined(__APPLE__)
|
|
adrp \xreg, \label@PAGE
|
|
add \xreg, \xreg, \label@PAGEOFF
|
|
ldur \dreg, [\xreg]
|
|
// fmov \dreg, \xreg
|
|
#else
|
|
ldr \xreg, =\label
|
|
ldur \dreg, [\xreg]
|
|
#endif
|
|
.endm
|
|
|
|
.macro LLD_FLT xreg, sreg, label
|
|
#if defined(__APPLE__)
|
|
adrp \xreg, \label@PAGE
|
|
add \xreg, \xreg, \label@PAGEOFF
|
|
ldur \sreg, [\xreg]
|
|
#else
|
|
ldr \xreg, =\label
|
|
ldur \sreg, [\xreg]
|
|
#endif
|
|
.endm
|
|
|
|
.macro GLABEL label
|
|
#if defined(__APPLE__)
|
|
.global _\label
|
|
#else
|
|
.global \label
|
|
#endif
|
|
.endm
|
|
|
|
.macro MAIN
|
|
#if defined(__APPLE__)
|
|
_main:
|
|
#else
|
|
main:
|
|
#endif
|
|
.endm
|
|
|
|
.macro CRT label
|
|
#if defined(__APPLE__)
|
|
bl _\label
|
|
#else
|
|
bl \label
|
|
#endif
|
|
.endm
|
|
|
|
.macro START_PROC // after starting label
|
|
.cfi_startproc
|
|
.endm
|
|
|
|
.macro END_PROC // after the return
|
|
.cfi_endproc
|
|
.endm
|
|
|
|
.macro PUSH_P a, b
|
|
stp \a, \b, [sp, -16]!
|
|
.endm
|
|
|
|
.macro PUSH_R a
|
|
str \a, [sp, -16]!
|
|
.endm
|
|
|
|
.macro POP_P a, b
|
|
ldp \a, \b, [sp], 16
|
|
.endm
|
|
|
|
.macro POP_R a
|
|
ldr \a, [sp], 16
|
|
.endm
|
|
|
|
.macro MIN src_a, src_b, dest
|
|
csel \dest, \src_a, \src_b, GT
|
|
.endm
|
|
|
|
.macro MAX src_a, src_b, dest
|
|
csel \dest, \src_a, \src_b, LT
|
|
.endm
|