| # FIXME: wip, copied from ../testutils.inc | |
| # r0-r3 are used as tmps, consider them call clobbered by these macros. | |
| # This uses the angel rom monitor calls. | |
| # ??? How do we use the \@ facility of .macros ??? | |
| # @ is the comment char! | |
| .macro a_mvi_h_gr reg, val | |
| ldr \reg,[pc] | |
| b . + 8 | |
| .word \val | |
| .endm | |
| .macro mvaddr_h_gr reg, addr | |
| ldr \reg,[pc] | |
| b . + 8 | |
| .word \val | |
| .endm | |
| .macro start | |
| .data | |
| failmsg: | |
| .asciz "fail\n" | |
| passmsg: | |
| .asciz "pass\n" | |
| .text | |
| do_pass: | |
| ldr r1, passmsg_addr | |
| mov r0, #4 | |
| swi #0x123456 | |
| exit 0 | |
| passmsg_addr: | |
| .word passmsg | |
| do_fail: | |
| ldr r1, failmsg_addr | |
| mov r0, #4 | |
| swi #0x123456 | |
| exit 1 | |
| failmsg_addr: | |
| .word failmsg | |
| .global _start | |
| _start: | |
| .endm | |
| # *** Other macros know pass/fail are 4 bytes in size! Yuck. | |
| .macro pass | |
| b do_pass | |
| .endm | |
| .macro fail | |
| b do_fail | |
| .endm | |
| .macro exit rc | |
| mov r1, #\rc | |
| mov r0, #0x2a @ decimal 42 | |
| swi #1 | |
| # If that returns, punt with a sigill. | |
| stc 0,cr0,[r0] | |
| .endm | |
| # Other macros know this only clobbers r0. | |
| .macro test_h_gr reg, val | |
| mvaddr_h_gr r0, \val | |
| cmp \reg, r0 | |
| beq . + 8 | |
| fail | |
| .endm | |
| .macro mvi_h_cc c, n, v, z | |
| ldi8 r0, 0 | |
| ldi8 r1, 1 | |
| .if xxx | |
| cmp r0, r1 | |
| .else | |
| cmp r1, r0 | |
| .endif | |
| .endm | |
| .macro test_h_cc c, n, v, z | |
| .if xxx | |
| bc . + 8 | |
| fail | |
| .else | |
| bnc . + 8 | |
| fail | |
| .endif | |
| .endm |