diff options
Diffstat (limited to 'test/MC/ARM/thumb-diagnostics.s')
-rw-r--r-- | test/MC/ARM/thumb-diagnostics.s | 67 |
1 files changed, 62 insertions, 5 deletions
diff --git a/test/MC/ARM/thumb-diagnostics.s b/test/MC/ARM/thumb-diagnostics.s index a194ab4..19d17c2 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,10 +40,25 @@ 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} ldm r2!, {r2, r3, r4} + ldm r2!, {r2, r3, r4, r10} + ldmdb r2!, {r2, r3, r4} @ CHECK-ERRORS: error: registers must be in range r0-r7 @ CHECK-ERRORS: ldm r2!, {r5, r8} @ CHECK-ERRORS: ^ @@ -51,7 +68,12 @@ error: invalid operand for instruction @ CHECK-ERRORS: error: writeback operator '!' not allowed when base register in register list @ CHECK-ERRORS: ldm r2!, {r2, r3, r4} @ CHECK-ERRORS: ^ - +@ CHECK-ERRORS-V8: error: writeback operator '!' not allowed when base register in register list +@ CHECK-ERRORS-V8: ldm r2!, {r2, r3, r4, r10} +@ CHECK-ERRORS-V8: ^ +@ CHECK-ERRORS-V8: error: writeback register not allowed in register list +@ CHECK-ERRORS-V8: ldmdb r2!, {r2, r3, r4} +@ CHECK-ERRORS-V8: ^ @ Invalid writeback and register lists for PUSH/POP pop {r1, r2, r10} @@ -67,12 +89,20 @@ error: invalid operand for instruction @ Invalid writeback and register lists for STM stm r1, {r2, r6} stm r1!, {r2, r9} + stm r2!, {r2, r9} + stmdb r2!, {r0, r2} @ CHECK-ERRORS: error: instruction requires: thumb2 @ CHECK-ERRORS: stm r1, {r2, r6} @ CHECK-ERRORS: ^ @ CHECK-ERRORS: error: registers must be in range r0-r7 @ CHECK-ERRORS: stm r1!, {r2, r9} @ CHECK-ERRORS: ^ +@ CHECK-ERRORS-V8: error: writeback operator '!' not allowed when base register in register list +@ CHECK-ERRORS-V8: stm r2!, {r2, r9} +@ CHECK-ERRORS-V8: ^ +@ CHECK-ERRORS-V8: error: writeback register not allowed in register list +@ CHECK-ERRORS-V8: stmdb r2!, {r0, r2} +@ CHECK-ERRORS-V8: ^ @ Out of range immediates for LSL instruction. lsls r4, r5, #-1 @@ -138,7 +168,26 @@ error: invalid operand for instruction @ CHECK-ERRORS: error: source register must be the same as destination @ CHECK-ERRORS: add r2, sp, ip @ CHECK-ERRORS: ^ - + + +@------------------------------------------------------------------------------ +@ B/Bcc - out of range immediates for Thumb1 branches +@------------------------------------------------------------------------------ + + beq #-258 + bne #256 + bgt #13 + b #-1048578 + b #1048576 + b #10323 + +@ CHECK-ERRORS: error: branch target out of range +@ CHECK-ERRORS: error: branch target out of range +@ CHECK-ERRORS: error: branch target out of range +@ CHECK-ERRORS: error: branch target out of range +@ CHECK-ERRORS: error: branch target out of range +@ CHECK-ERRORS: error: branch target out of range + @------------------------------------------------------------------------------ @ WFE/WFI/YIELD - are not supported pre v6T2 @------------------------------------------------------------------------------ @@ -146,13 +195,13 @@ error: invalid operand for instruction wfi yield -@ CHECK-ERRORS: error: instruction requires: thumb2 +@ CHECK-ERRORS: error: instruction requires: armv6m or armv6t2 @ CHECK-ERRORS: wfe @ CHECK-ERRORS: ^ -@ CHECK-ERRORS: error: instruction requires: thumb2 +@ CHECK-ERRORS: error: instruction requires: armv6m or armv6t2 @ CHECK-ERRORS: wfi @ CHECK-ERRORS: ^ -@ CHECK-ERRORS: error: instruction requires: thumb2 +@ CHECK-ERRORS: error: instruction requires: armv6m or armv6t2 @ CHECK-ERRORS: yield @ CHECK-ERRORS: ^ @@ -161,3 +210,11 @@ error: invalid operand for instruction @------------------------------------------------------------------------------ pldw [r0, #4] @ CHECK-ERRORS: error: instruction requires: mp-extensions + +@------------------------------------------------------------------------------ +@ LDR(lit) - invalid offsets +@------------------------------------------------------------------------------ + + ldr r4, [pc, #-12] +@ CHECK-ERRORS: error: instruction requires: thumb2 + |