# r0-r3 are used as tmps, consider them call clobbered by these macros. .macro start .data failmsg: .ascii "fail\n" passmsg: .ascii "pass\n" .text .global _start _start: .endm .macro exit rc ldi8 r1, \rc ldi8 r0, #1 trap #0 .endm .macro pass ldi8 r3, 5 ld24 r2, passmsg ldi8 r1, 1 ldi8 r0, 5 trap #0 exit 0 .endm .macro fail ldi8 r3, 5 ld24 r2, failmsg ldi8 r1, 1 ldi8 r0, 5 trap #0 exit 1 .endm .macro mvi_h_gr reg, val .if (\val >= -128) && (\val <= 127) ldi8 \reg, \val .else seth \reg, high(\val) or3 \reg, \reg, low(\val) .endif .endm .macro mvaddr_h_gr reg, addr seth \reg, high(\addr) or3 \reg, \reg, low(\addr) .endm # Other macros know this only clobbers r0. .macro test_h_gr reg, val mvaddr_h_gr r0, \val beq \reg, r0, test_gr\@ fail test_gr\@: .endm .macro mvi_h_condbit val ldi8 r0, 0 ldi8 r1, 1 .if \val cmp r0, r1 .else cmp r1, r0 .endif .endm .macro test_h_condbit val .if \val bc test_c1\@ fail test_c1\@: .else bnc test_c0\@ fail test_c0\@: .endif .endm .macro mvi_h_accum0 hi, lo mvi_h_gr r0, \hi mvtachi r0 mvi_h_gr r0, \lo mvtaclo r0 .endm .macro test_h_accum0 hi, lo mvfachi r1 test_h_gr r1, \hi mvfaclo r1 test_h_gr r1, \lo .endm