| # 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 | |