summaryrefslogtreecommitdiff
path: root/sim/testsuite/sim/arm/movw-movt.ms
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2013-05-15 17:49:43 +0000
committerMike Frysinger <vapier@gentoo.org>2013-05-15 17:49:43 +0000
commitb01b13936c8ef44b9eb3bc1f6a85edc4c6610888 (patch)
treeacced169c6f09b3e083caa57c46c331e36c7001e /sim/testsuite/sim/arm/movw-movt.ms
parente6e0cb74ef4c2fad6b021adbf9cfb28e1b90372a (diff)
downloadgdb-b01b13936c8ef44b9eb3bc1f6a85edc4c6610888.tar.gz
sim: arm: add support for MOVW and MOVT instructions
From: Jayant R. Sonar <Jayant.Sonar@kpitcummins.com> This patch adds simulator support for handling the armv7 instructions 'movw (immediate)' and 'movt'. Compiler frequently use these instructions to load the 32bit addresses of global variables, string pointers etc. into the general registers. In absence of support of these instructions: 1. GDB run simulator fails to print even simple "hello world" string on console. 2. Loading of global variable addresses into the registers fail causing arithmetic operation failures. Patch has been regression tested for arm-none-eabi (-march=armv7-a).
Diffstat (limited to 'sim/testsuite/sim/arm/movw-movt.ms')
-rw-r--r--sim/testsuite/sim/arm/movw-movt.ms53
1 files changed, 53 insertions, 0 deletions
diff --git a/sim/testsuite/sim/arm/movw-movt.ms b/sim/testsuite/sim/arm/movw-movt.ms
new file mode 100644
index 00000000000..1be815dc45f
--- /dev/null
+++ b/sim/testsuite/sim/arm/movw-movt.ms
@@ -0,0 +1,53 @@
+# 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