60 lines
901 B
Text
60 lines
901 B
Text
# Test LDR instructions with offsets misaligned by 2 bytes.
|
|
# mach(): all
|
|
|
|
.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 do_test
|
|
|
|
pass:
|
|
.asciz "pass\n"
|
|
.p2align 2
|
|
|
|
do_test:
|
|
mov r4, r14
|
|
bl continue
|
|
word1:
|
|
.word 0x5555
|
|
continue:
|
|
ldr r6, [r14, #2]
|
|
ldr r7, word2
|
|
cmp r6, r7
|
|
# Failed.
|
|
bne done
|
|
|
|
output_next:
|
|
# Output a character (in arm mode).
|
|
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
|
|
|
|
word2:
|
|
.word 0x55550000
|