diff options
author | Richard Barton <richard.barton@arm.com> | 2013-09-05 14:14:19 +0000 |
---|---|---|
committer | Richard Barton <richard.barton@arm.com> | 2013-09-05 14:14:19 +0000 |
commit | b5523ce1bb50e86942ad5273e3a89872c4d26b73 (patch) | |
tree | 4be4ea725d7c13d57c90ad89d1d9ba1abebcd9e2 /test | |
parent | 8f3d54d057007552d0abc37c87a50ef34a7ab9ef (diff) | |
download | llvm-b5523ce1bb50e86942ad5273e3a89872c4d26b73.tar.gz llvm-b5523ce1bb50e86942ad5273e3a89872c4d26b73.tar.bz2 llvm-b5523ce1bb50e86942ad5273e3a89872c4d26b73.tar.xz |
Add AArch32 DCPS{1,2,3} and HLT instructions.
These were pretty straightforward instructions, with some assembly support
required for HLT.
The ARM assembler is keen to split the instruction mnemonic into a
(non-existent) 'H' instruction with the LT condition code. An exception for
HLT is needed.
HLT follows the same rules as BKPT when in IT blocks, so the special BKPT
hadling code has been adapted to handle HLT also.
Regression tests added including diagnostic tests for out of range immediates
and illegal condition codes, as well as negative tests for pre-ARMv8.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190053 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/MC/ARM/basic-arm-instructions-v8.s | 17 | ||||
-rw-r--r-- | test/MC/ARM/basic-thumb2-instructions-v8.s | 36 | ||||
-rw-r--r-- | test/MC/ARM/diagnostics.s | 22 | ||||
-rw-r--r-- | test/MC/ARM/thumb-diagnostics.s | 15 | ||||
-rw-r--r-- | test/MC/Disassembler/ARM/basic-arm-instructions-v8.txt | 11 | ||||
-rw-r--r-- | test/MC/Disassembler/ARM/thumb-v8.txt | 18 |
6 files changed, 119 insertions, 0 deletions
diff --git a/test/MC/ARM/basic-arm-instructions-v8.s b/test/MC/ARM/basic-arm-instructions-v8.s new file mode 100644 index 0000000000..130a4c5282 --- /dev/null +++ b/test/MC/ARM/basic-arm-instructions-v8.s @@ -0,0 +1,17 @@ +@ New ARMv8 A32 encodings + +@ RUN: llvm-mc -triple armv8 -show-encoding < %s | FileCheck %s --check-prefix=CHECK-V8 +@ RUN: not llvm-mc -triple armv7 -show-encoding < %s 2>&1 | FileCheck %s --check-prefix=CHECK-V7 + +@ HLT + hlt #0 + hlt #65535 +@ CHECK-V8: hlt #0 @ encoding: [0x70,0x00,0x00,0xe1] +@ CHECK-V8: hlt #65535 @ encoding: [0x7f,0xff,0x0f,0xe1] +@ CHECK-V7: error: instruction requires: armv8 +@ CHECK-V7: error: instruction requires: armv8 + +@ AL condition code allowable + hltal #0 +@ CHECK-V8: hlt #0 @ encoding: [0x70,0x00,0x00,0xe1] +@ CHECK-V7: error: instruction requires: armv8 diff --git a/test/MC/ARM/basic-thumb2-instructions-v8.s b/test/MC/ARM/basic-thumb2-instructions-v8.s new file mode 100644 index 0000000000..09edaf752e --- /dev/null +++ b/test/MC/ARM/basic-thumb2-instructions-v8.s @@ -0,0 +1,36 @@ +@ New ARMv8 T32 encodings + +@ RUN: llvm-mc -triple thumbv8 -show-encoding < %s | FileCheck %s --check-prefix=CHECK-V8 +@ RUN: not llvm-mc -triple thumbv7 -show-encoding < %s 2>&1 | FileCheck %s --check-prefix=CHECK-V7 + +@ HLT + hlt #0 + hlt #63 +@ CHECK-V8: hlt #0 @ encoding: [0x80,0xba] +@ CHECK-V8: hlt #63 @ encoding: [0xbf,0xba] +@ CHECK-V7: error: instruction requires: armv8 +@ CHECK-V7: error: instruction requires: armv8 + +@ In IT block + it pl + hlt #24 + +@ CHECK-V8: it pl @ encoding: [0x58,0xbf] +@ CHECK-V8: hlt #24 @ encoding: [0x98,0xba] +@ CHECK-V7: error: instruction requires: armv8 + +@ Can accept AL condition code + hltal #24 +@ CHECK-V8: hlt #24 @ encoding: [0x98,0xba] +@ CHECK-V7: error: instruction requires: armv8 + +@ DCPS{1,2,3} + dcps1 + dcps2 + dcps3 +@ CHECK-V8: dcps1 @ encoding: [0x8f,0xf7,0x01,0x80] +@ CHECK-V8: dcps2 @ encoding: [0x8f,0xf7,0x02,0x80] +@ CHECK-V8: dcps3 @ encoding: [0x8f,0xf7,0x03,0x80] +@ CHECK-V7: error: instruction requires: armv8 +@ CHECK-V7: error: instruction requires: armv8 +@ CHECK-V7: error: instruction requires: armv8 diff --git a/test/MC/ARM/diagnostics.s b/test/MC/ARM/diagnostics.s index 1aea1174af..55bb1dd37c 100644 --- a/test/MC/ARM/diagnostics.s +++ b/test/MC/ARM/diagnostics.s @@ -1,5 +1,7 @@ @ RUN: not llvm-mc -triple=armv7-apple-darwin < %s 2> %t @ RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s +@ RUN: not llvm-mc -triple=armv8 < %s 2> %t +@ RUN: FileCheck --check-prefix=CHECK-ERRORS-V8 < %t %s @ Check for various assembly diagnostic messages on invalid input. @@ -93,6 +95,26 @@ @ CHECK-ERRORS: error: invalid operand for instruction + @ Out of range immediates for v8 HLT instruction. + hlt #65536 + hlt #-1 +@CHECK-ERRORS-V8: error: invalid operand for instruction +@CHECK-ERRORS-V8: hlt #65536 +@CHECK-ERRORS-V8: ^ +@CHECK-ERRORS-V8: error: invalid operand for instruction +@CHECK-ERRORS-V8: hlt #-1 +@CHECK-ERRORS-V8: ^ + + @ Illegal condition code for v8 HLT instruction. + hlteq #2 + hltlt #23 +@CHECK-ERRORS-V8: error: instruction 'hlt' is not predicable, but condition code specified +@CHECK-ERRORS-V8: hlteq #2 +@CHECK-ERRORS-V8: ^ +@CHECK-ERRORS-V8: error: instruction 'hlt' is not predicable, but condition code specified +@CHECK-ERRORS-V8: hltlt #23 +@CHECK-ERRORS-V8: ^ + @ Out of range 4 and 3 bit immediates on CDP[2] @ Out of range immediates for CDP/CDP2 diff --git a/test/MC/ARM/thumb-diagnostics.s b/test/MC/ARM/thumb-diagnostics.s index d16f547e72..c29960902e 100644 --- a/test/MC/ARM/thumb-diagnostics.s +++ b/test/MC/ARM/thumb-diagnostics.s @@ -2,6 +2,8 @@ @ RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s @ RUN: not llvm-mc -triple=thumbv5-apple-darwin < %s 2> %t @ RUN: FileCheck --check-prefix=CHECK-ERRORS-V5 < %t %s +@ RUN: not llvm-mc -triple=thumbv8 < %s 2> %t +@ RUN: FileCheck --check-prefix=CHECK-ERRORS-V8 < %t %s @ Check for various assembly diagnostic messages on invalid input. @@ -38,6 +40,19 @@ error: invalid operand for instruction bkpt #-1 ^ +@ Out of range immediates for v8 HLT instruction. + hlt #64 + hlt #-1 +@CHECK-ERRORS: error: instruction requires: armv8 arm-mode +@CHECK-ERRORS: hlt #64 +@CHECK-ERRORS: ^ +@CHECK-ERRORS-V8: error: instruction requires: arm-mode +@CHECK-ERRORS-V8: hlt #64 +@CHECK-ERRORS-V8: ^ +@CHECK-ERRORS: error: invalid operand for instruction +@CHECK-ERRORS: hlt #-1 +@CHECK-ERRORS: ^ + @ Invalid writeback and register lists for LDM ldm r2!, {r5, r8} ldm r2, {r5, r7} diff --git a/test/MC/Disassembler/ARM/basic-arm-instructions-v8.txt b/test/MC/Disassembler/ARM/basic-arm-instructions-v8.txt new file mode 100644 index 0000000000..8d4debf93a --- /dev/null +++ b/test/MC/Disassembler/ARM/basic-arm-instructions-v8.txt @@ -0,0 +1,11 @@ +# RUN: llvm-mc -disassemble -triple armv8 -show-encoding < %s | FileCheck %s + +# New v8 ARM instructions + +# HLT + +0x70 0x00 0x00 0xe1 +# CHECK: hlt #0 + +0x7f 0xff 0x0f 0xe1 +# CHECK: hlt #65535 diff --git a/test/MC/Disassembler/ARM/thumb-v8.txt b/test/MC/Disassembler/ARM/thumb-v8.txt new file mode 100644 index 0000000000..075b17c9a2 --- /dev/null +++ b/test/MC/Disassembler/ARM/thumb-v8.txt @@ -0,0 +1,18 @@ +# RUN: llvm-mc -disassemble -triple thumbv8 -show-encoding < %s | FileCheck %s + +0x80 0xba +# CHECK: hlt #0 + +0xbf 0xba +# CHECK: hlt #63 + +# DCPS{1,2,3} + +0x8f 0xf7 0x01 0x80 +# CHECK: dcps1 + +0x8f 0xf7 0x02 0x80 +# CHECK: dcps2 + +0x8f 0xf7 0x03 0x80 +# CHECK: dcps3 |