| # output(): Hello, world.\n |
| # mach(): all |
| |
| # This is a test for movw & movt instructions. |
| # It emits hello world if movw & movt works appropriately. |
| |
| .macro invalid |
| # This is "undefined" but it's not properly decoded yet. |
| .word 0x07ffffff |
| # This is stc which isn't recognized yet. |
| stc 0,cr0,[r0] |
| .endm |
| |
| .global _start |
| _start: |
| # Run some simple insns to confirm the engine is at least working. |
| nop |
| |
| # Skip over output text. |
| |
| bl skip_output |
| |
| hello_text: |
| .asciz "Hello, world.\n" |
| |
| .p2align 2 |
| skip_output: |
| movw r4, #:lower16:hello_text |
| movt r4, #:upper16:hello_text |
| |
| output_next: |
| # Output a character |
| mov r0,#3 |
| mov r1,r4 |
| swi #0x123456 |
| |
| # Load next character, see if done. |
| add r4,r4,#1 |
| sub r3,r3,r3 |
| ldrb r5,[r4,r3] |
| teq r5,#0 |
| bne output_next |
| |
| done: |
| mov r0,#0x18 |
| ldr r1,exit_code |
| swi #0x123456 |
| |
| # If that fails, try to die with an invalid insn. |
| invalid |
| |
| exit_code: |
| .word 0x20026 |