| # 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 |