70 lines
977 B
PHP
70 lines
977 B
PHP
# MACRO: exit
|
|
# Terminates execution.
|
|
.macro exit nr
|
|
|
|
stp x29, x30, [sp,#-32]!
|
|
mov x4, #0x26
|
|
mov x7, #\nr
|
|
mov x29, sp
|
|
movk x4, #0x2, lsl #16
|
|
add x1, x29, #0x10
|
|
str x4, [x29,#16]
|
|
str x7, [x29,#24]
|
|
mov w0, #0x18
|
|
hlt #0xf000
|
|
|
|
.endm
|
|
|
|
# MACRO: swiwrite
|
|
# Writes the string in X1 to stdout
|
|
.macro swiwrite len
|
|
|
|
stp x29, x30, [sp,#-48]!
|
|
mov x0, #1
|
|
mov x2, #\len
|
|
mov x29, sp
|
|
str x0, [x29,#24]
|
|
str x1, [x29,#32]
|
|
str x2, [x29,#40]
|
|
mov w0, #0x5
|
|
add x1, x29, #0x18
|
|
hlt #0xf000
|
|
ldp x29, x30, [sp],#48
|
|
ret
|
|
|
|
.endm
|
|
|
|
# MACRO: pass
|
|
# Write 'pass' to stdout and quit
|
|
.macro pass
|
|
|
|
adrp x1, .Lpass
|
|
add x1, x1, :lo12:.Lpass
|
|
|
|
swiwrite 5
|
|
exit 0
|
|
.endm
|
|
|
|
# MACRO: fail
|
|
# Write 'fail' to stdout and quit
|
|
.macro fail
|
|
|
|
adrp x1, .Lfail
|
|
add x1, x1, :lo12:.Lfail
|
|
swiwrite 5
|
|
exit 1
|
|
.endm
|
|
|
|
# MACRO: start
|
|
# All assembler tests should start with a call to "start"
|
|
.macro start
|
|
.data
|
|
.Lpass:
|
|
.asciz "pass\n"
|
|
.Lfail:
|
|
.asciz "fail\n"
|
|
|
|
.text
|
|
.global _start
|
|
_start:
|
|
.endm
|