summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2011-07-19 19:13:28 +0000
committerJim Grosbach <grosbach@apple.com>2011-07-19 19:13:28 +0000
commitffa3225e26cc1977d20f0d9649fcd6f38a3c4815 (patch)
tree7b83654a0b53c5d927f8cac24d17cfb4882b79bf /test
parent0ec2aa21d0286339961a5c331ca289751ab1396c (diff)
downloadllvm-ffa3225e26cc1977d20f0d9649fcd6f38a3c4815.tar.gz
llvm-ffa3225e26cc1977d20f0d9649fcd6f38a3c4815.tar.bz2
llvm-ffa3225e26cc1977d20f0d9649fcd6f38a3c4815.tar.xz
ARM assembly parsing for MOV (immediate).
Add range checking for the immediate operand and handle the "mov" mnemonic choosing between encodings based on the value of the immediate. Add tests for fixups, encoding choice and values, and diagnostic for out of range values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135500 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/MC/ARM/arm_fixups.s20
-rw-r--r--test/MC/ARM/basic-arm-instructions.s15
-rw-r--r--test/MC/ARM/diagnostics.s5
3 files changed, 35 insertions, 5 deletions
diff --git a/test/MC/ARM/arm_fixups.s b/test/MC/ARM/arm_fixups.s
index 2b7878224d..aba0cd824d 100644
--- a/test/MC/ARM/arm_fixups.s
+++ b/test/MC/ARM/arm_fixups.s
@@ -1,7 +1,17 @@
-// RUN: llvm-mc -triple arm-unknown-unknown %s --show-encoding > %t
-// RUN: FileCheck < %t %s
+@ RUN: llvm-mc -triple armv7-unknown-unknown %s --show-encoding > %t
+@ RUN: FileCheck < %t %s
-// CHECK: bl _printf @ encoding: [A,A,A,0xeb]
-// CHECK: @ fixup A - offset: 0, value: _printf, kind: fixup_arm_uncondbranch
-bl _printf
+ bl _printf
+@ CHECK: bl _printf @ encoding: [A,A,A,0xeb]
+@ CHECK: @ fixup A - offset: 0, value: _printf, kind: fixup_arm_uncondbranch
+ mov r9, :lower16:(_foo)
+ movw r9, :lower16:(_foo)
+ movt r9, :upper16:(_foo)
+
+@ CHECK: movw r9, :lower16:_foo @ encoding: [A,0x90'A',0b0000AAAA,0xe3]
+@ CHECK: @ fixup A - offset: 0, value: _foo, kind: fixup_arm_movw_lo16
+@ CHECK: movw r9, :lower16:_foo @ encoding: [A,0x90'A',0b0000AAAA,0xe3]
+@ CHECK: @ fixup A - offset: 0, value: _foo, kind: fixup_arm_movw_lo16
+@ CHECK: movt r9, :upper16:_foo @ encoding: [A,0x90'A',0b0100AAAA,0xe3]
+@ CHECK: @ fixup A - offset: 0, value: _foo, kind: fixup_arm_movt_hi16
diff --git a/test/MC/ARM/basic-arm-instructions.s b/test/MC/ARM/basic-arm-instructions.s
index 0b728bc2c1..f54723a4f5 100644
--- a/test/MC/ARM/basic-arm-instructions.s
+++ b/test/MC/ARM/basic-arm-instructions.s
@@ -671,6 +671,21 @@ _func:
@ CHECK: mlsne r2, r5, r6, r3 @ encoding: [0x95,0x36,0x62,0x10]
@------------------------------------------------------------------------------
+@ MOV (immediate)
+@------------------------------------------------------------------------------
+ mov r3, #7
+ mov r4, #0xff0
+ mov r5, #0xff0000
+ mov r6, #0xffff
+ movw r9, #0xffff
+
+@ CHECK: mov r3, #7 @ encoding: [0x07,0x30,0xa0,0xe3]
+@ CHECK: mov r4, #4080 @ encoding: [0xff,0x4e,0xa0,0xe3]
+@ CHECK: mov r5, #16711680 @ encoding: [0xff,0x58,0xa0,0xe3]
+@ CHECK: movw r6, #65535 @ encoding: [0xff,0x6f,0x0f,0xe3]
+@ CHECK: movw r9, #65535 @ encoding: [0xff,0x9f,0x0f,0xe3]
+
+@------------------------------------------------------------------------------
@ STM*
@------------------------------------------------------------------------------
stm r2, {r1,r3-r6,sp}
diff --git a/test/MC/ARM/diagnostics.s b/test/MC/ARM/diagnostics.s
index 4537a0ff6d..1ae41ebb6c 100644
--- a/test/MC/ARM/diagnostics.s
+++ b/test/MC/ARM/diagnostics.s
@@ -88,3 +88,8 @@
@ CHECK-ERRORS: error: invalid operand for instruction
@ CHECK-ERRORS: error: invalid operand for instruction
@ CHECK-ERRORS: error: invalid operand for instruction
+
+
+ @ Out of range immediate for MOV
+ movw r9, 0x10000
+@ CHECK-ERRORS: error: invalid operand for instruction