| # MACRO: system_call |
| # Make a libgloss/Linux system call |
| .macro system_call nr:req |
| addi r12, r0, \nr; |
| brki r14, 8; |
| .endm |
| |
| # MACRO: exit |
| .macro exit nr:req |
| addi r3, r0, \nr; |
| bri 0; |
| .endm |
| |
| # MACRO: pass |
| # Write 'pass' to stdout and quit |
| .macro pass |
| write 1, 1f, 5 |
| exit 0 |
| .data |
| 1: .asciz "pass\n" |
| .endm |
| |
| # MACRO: fail |
| # Write 'fail' to stdout and quit |
| .macro fail |
| write 1, 1f, 5 |
| exit 1 |
| .data |
| 1: .asciz "fail\n" |
| .endm |
| |
| # MACRO: start |
| # All assembler tests should start with a call to "start" |
| .macro start |
| .text |
| .global _start |
| _start: |
| .endm |
| |
| # MACRO: write |
| # Just like the write() C function; uses system calls |
| .macro write fd:req, buf:req, count:req |
| addi r5, r0, \fd; |
| addi r6, r0, \buf; |
| addi r7, r0, \count; |
| system_call 5 |
| .endm |