1# r0-r3 are used as tmps, consider them call clobbered by these macros. 2 3 .macro start 4 .data 5failmsg: 6 .ascii "fail\n" 7passmsg: 8 .ascii "pass\n" 9 .text 10 .global _start 11_start: 12 .endm 13 14 .macro exit rc 15 ldi8 r1, \rc 16 ldi8 r0, #1 17 trap #0 18 .endm 19 20 .macro pass 21 ldi8 r3, 5 22 ld24 r2, passmsg 23 ldi8 r1, 1 24 ldi8 r0, 5 25 trap #0 26 exit 0 27 .endm 28 29 .macro fail 30 ldi8 r3, 5 31 ld24 r2, failmsg 32 ldi8 r1, 1 33 ldi8 r0, 5 34 trap #0 35 exit 1 36 .endm 37 38 .macro mvi_h_gr reg, val 39 .if (\val >= -128) && (\val <= 127) 40 ldi8 \reg, \val 41 .else 42 seth \reg, high(\val) 43 or3 \reg, \reg, low(\val) 44 .endif 45 .endm 46 47 .macro mvaddr_h_gr reg, addr 48 seth \reg, high(\addr) 49 or3 \reg, \reg, low(\addr) 50 .endm 51 52# Other macros know this only clobbers r0. 53 .macro test_h_gr reg, val 54 mvaddr_h_gr r0, \val 55 beq \reg, r0, test_gr\@ 56 fail 57test_gr\@: 58 .endm 59 60 .macro mvi_h_condbit val 61 ldi8 r0, 0 62 ldi8 r1, 1 63 .if \val 64 cmp r0, r1 65 .else 66 cmp r1, r0 67 .endif 68 .endm 69 70 .macro test_h_condbit val 71 .if \val 72 bc test_c1\@ 73 fail 74test_c1\@: 75 .else 76 bnc test_c0\@ 77 fail 78test_c0\@: 79 .endif 80 .endm 81 82 .macro mvi_h_accum0 hi, lo 83 mvi_h_gr r0, \hi 84 mvtachi r0 85 mvi_h_gr r0, \lo 86 mvtaclo r0 87 .endm 88 89 .macro test_h_accum0 hi, lo 90 mvfachi r1 91 test_h_gr r1, \hi 92 mvfaclo r1 93 test_h_gr r1, \lo 94 .endm 95 96