# 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