summaryrefslogtreecommitdiff
path: root/sim/testsuite/sim/arm/xscale/testutils.inc
diff options
context:
space:
mode:
Diffstat (limited to 'sim/testsuite/sim/arm/xscale/testutils.inc')
-rw-r--r--sim/testsuite/sim/arm/xscale/testutils.inc118
1 files changed, 118 insertions, 0 deletions
diff --git a/sim/testsuite/sim/arm/xscale/testutils.inc b/sim/testsuite/sim/arm/xscale/testutils.inc
new file mode 100644
index 00000000000..ae49db8820a
--- /dev/null
+++ b/sim/testsuite/sim/arm/xscale/testutils.inc
@@ -0,0 +1,118 @@
+# r0-r3 are used as tmps, consider them call clobbered by these macros.
+# This uses the angel rom monitor calls.
+# ??? How do we use the \@ facility of .macros ???
+# @ is the comment char!
+
+ .macro mvi_h_gr reg, val
+ ldr \reg,[pc]
+ b . + 8
+ .word \val
+ .endm
+
+ .macro mvaddr_h_gr reg, addr
+ ldr \reg,[pc]
+ b . + 8
+ .word \addr
+ .endm
+
+ .macro start
+ .data
+failmsg:
+ .asciz "fail\n"
+passmsg:
+ .asciz "pass\n"
+ .text
+
+do_pass:
+ ldr r1, passmsg_addr
+ mov r0, #4
+ swi #0x123456
+ exit 0
+passmsg_addr:
+ .word passmsg
+
+do_fail:
+ ldr r1, failmsg_addr
+ mov r0, #4
+ swi #0x123456
+ exit 1
+failmsg_addr:
+ .word failmsg
+
+ .global _start
+_start:
+ .endm
+
+# *** Other macros know pass/fail are 4 bytes in size! Yuck.
+
+ .macro pass
+ b do_pass
+ .endm
+
+ .macro fail
+ b do_fail
+ .endm
+
+ .macro exit rc
+ # ??? This works with the ARMulator but maybe not others.
+ #mov r0, #\rc
+ #swi #1
+ # This seems to be portable (though it ignores rc).
+ mov r0,#0x18
+ mvi_h_gr r1, 0x20026
+ swi #0x123456
+ # If that returns, punt with a sigill.
+ stc 0,cr0,[r0]
+ .endm
+
+# Other macros know this only clobbers r0.
+# WARNING: It also clobbers the condition codes (FIXME).
+ .macro test_h_gr reg, val
+ mvaddr_h_gr r0, \val
+ cmp \reg, r0
+ beq . + 8
+ fail
+ .endm
+
+ .macro mvi_h_cnvz c, n, v, z
+ mov r0, #0
+ .if \c
+ orr r0, r0, #0x20000000
+ .endif
+ .if \n
+ orr r0, r0, #0x80000000
+ .endif
+ .if \v
+ orr r0, r0, #0x10000000
+ .endif
+ .if \z
+ orr r0, r0, #0x40000000
+ .endif
+ mrs r1, cpsr
+ bic r1, r1, #0xf0000000
+ orr r1, r1, r0
+ msr cpsr, r1
+ # ??? nops needed
+ .endm
+
+# ??? Preserve condition codes?
+ .macro test_h_cnvz c, n, v, z
+ mov r0, #0
+ .if \c
+ orr r0, r0, #0x20000000
+ .endif
+ .if \n
+ orr r0, r0, #0x80000000
+ .endif
+ .if \v
+ orr r0, r0, #0x10000000
+ .endif
+ .if \z
+ orr r0, r0, #0x40000000
+ .endif
+ mrs r1, cpsr
+ and r1, r1, #0xf0000000
+ cmp r0, r1
+ beq . + 8
+ fail
+ .endm