1# r0-r3 are used as tmps, consider them call clobbered by these macros. 2# This uses the angel rom monitor calls. 3# ??? How do we use the \@ facility of .macros ??? 4# @ is the comment char! 5 6 .macro mvi_h_gr reg, val 7 ldr \reg,[pc] 8 b . + 8 9 .word \val 10 .endm 11 12 .macro mvaddr_h_gr reg, addr 13 ldr \reg,[pc] 14 b . + 8 15 .word \addr 16 .endm 17 18 .macro start 19 .data 20failmsg: 21 .asciz "fail\n" 22passmsg: 23 .asciz "pass\n" 24 .text 25 26do_pass: 27 ldr r1, passmsg_addr 28 mov r0, #4 29 swi #0x123456 30 exit 0 31passmsg_addr: 32 .word passmsg 33 34do_fail: 35 ldr r1, failmsg_addr 36 mov r0, #4 37 swi #0x123456 38 exit 1 39failmsg_addr: 40 .word failmsg 41 42 .global _start 43_start: 44 .endm 45 46# *** Other macros know pass/fail are 4 bytes in size! Yuck. 47 48 .macro pass 49 b do_pass 50 .endm 51 52 .macro fail 53 b do_fail 54 .endm 55 56 .macro exit rc 57 # ??? This works with the ARMulator but maybe not others. 58 #mov r0, #\rc 59 #swi #1 60 # This seems to be portable (though it ignores rc). 61 mov r0,#0x18 62 mvi_h_gr r1, 0x20026 63 swi #0x123456 64 # If that returns, punt with a sigill. 65 stc 0,cr0,[r0] 66 .endm 67 68# Other macros know this only clobbers r0. 69# WARNING: It also clobbers the condition codes (FIXME). 70 .macro test_h_gr reg, val 71 mvaddr_h_gr r0, \val 72 cmp \reg, r0 73 beq . + 8 74 fail 75 .endm 76 77 .macro mvi_h_cnvz c, n, v, z 78 mov r0, #0 79 .if \c 80 orr r0, r0, #0x20000000 81 .endif 82 .if \n 83 orr r0, r0, #0x80000000 84 .endif 85 .if \v 86 orr r0, r0, #0x10000000 87 .endif 88 .if \z 89 orr r0, r0, #0x40000000 90 .endif 91 mrs r1, cpsr 92 bic r1, r1, #0xf0000000 93 orr r1, r1, r0 94 msr cpsr, r1 95 # ??? nops needed 96 .endm 97 98# ??? Preserve condition codes? 99 .macro test_h_cnvz c, n, v, z 100 mov r0, #0 101 .if \c 102 orr r0, r0, #0x20000000 103 .endif 104 .if \n 105 orr r0, r0, #0x80000000 106 .endif 107 .if \v 108 orr r0, r0, #0x10000000 109 .endif 110 .if \z 111 orr r0, r0, #0x40000000 112 .endif 113 mrs r1, cpsr 114 and r1, r1, #0xf0000000 115 cmp r0, r1 116 beq . + 8 117 fail 118 .endm 119