5376c32406910d60d097ea626005a8f9a7fc6570
[oota-llvm.git] / test / MC / ARM / thumb2-diagnostics.s
1 @ RUN: not llvm-mc -triple=thumbv7-apple-darwin < %s 2> %t
2 @ RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
3
4 @ Ill-formed IT block instructions.
5         itet eq
6         addle r0, r1, r2
7         nop
8         it le
9         iteeee gt
10         ittfe le
11         nopeq
12         ite eq
13         ldmiaeq sp!, {r4, pc}
14         movne r0, #0
15
16 @ CHECK-ERRORS: error: incorrect condition in IT block; got 'le', but expected 'eq'
17 @ CHECK-ERRORS:         addle r0, r1, r2
18 @ CHECK-ERRORS:            ^
19 @ CHECK-ERRORS: error: incorrect condition in IT block; got 'al', but expected 'ne'
20 @ CHECK-ERRORS:         nop
21 @ CHECK-ERRORS:            ^
22 @ CHECK-ERRORS: error: instructions in IT block must be predicable
23 @ CHECK-ERRORS:         it le
24 @ CHECK-ERRORS:         ^
25 @ CHECK-ERRORS: error: too many conditions on IT instruction
26 @ CHECK-ERRORS:         iteeee gt
27 @ CHECK-ERRORS:           ^
28 @ CHECK-ERRORS: error: illegal IT block condition mask 'tfe'
29 @ CHECK-ERRORS:         ittfe le
30 @ CHECK-ERRORS:           ^
31 @ CHECK-ERRORS: error: predicated instructions must be in IT block
32 @ CHECK-ERRORS:         nopeq
33 @ CHECK-ERRORS:         ^
34 @ CHECK-ERRORS: error: Instruction should be outside an IT block or last in IT block, when PC is in the register list
35 @ CHECK-ERRORS:         ldmiaeq sp!, {r4, pc}
36 @ CHECK-ERRORS:                      ^
37
38         @ Out of range immediates for MRC/MRC2/MRRC/MRRC2
39         mrc  p14, #8, r1, c1, c2, #4
40         mrc  p14, #1, r1, c1, c2, #8
41         mrc2  p14, #8, r1, c1, c2, #4
42         mrc2  p14, #0, r1, c1, c2, #9
43         mrrc  p7, #16, r5, r4, c1
44         mrrc2  p7, #17, r5, r4, c1
45 @ CHECK-ERRORS: error: invalid operand for instruction
46 @ CHECK-ERRORS: error: invalid operand for instruction
47 @ CHECK-ERRORS: error: invalid operand for instruction
48 @ CHECK-ERRORS: error: invalid operand for instruction
49 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
50 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
51
52         isb  #-1
53         isb  #16
54 @ CHECK-ERRORS: error: immediate value out of range
55 @ CHECK-ERRORS: error: immediate value out of range
56
57         itt eq
58         bkpteq #1
59 @ CHECK-ERRORS: error: instruction 'bkpt' is not predicable, but condition code specified
60
61         nopeq
62         nopeq
63
64 @ out of range operands for Thumb2 targets
65
66         beq.w  #-1048578
67         bne.w  #1048576
68         blt.w  #1013411
69         b.w    #-16777218
70         b.w    #16777216
71         b.w    #1592313
72
73 @ CHECK-ERRORS: error: branch target out of range
74 @ CHECK-ERRORS: error: branch target out of range
75 @ CHECK-ERRORS: error: branch target out of range
76 @ CHECK-ERRORS: error: branch target out of range
77 @ CHECK-ERRORS: error: branch target out of range
78 @ CHECK-ERRORS: error: branch target out of range
79
80 foo2:
81         mov r0, foo2
82         movw r0, foo2
83         movt r0, foo2
84 @ CHECK-ERRORS: error: immediate expression for mov requires :lower16: or :upper16
85 @ CHECK-ERRORS:                 ^
86 @ CHECK-ERRORS: error: immediate expression for mov requires :lower16: or :upper16
87 @ CHECK-ERRORS:                  ^
88 @ CHECK-ERRORS: error: immediate expression for mov requires :lower16: or :upper16
89 @ CHECK-ERRORS:                  ^
90
91         and sp, r1, #80008000
92         and pc, r1, #80008000
93 @ CHECK-ERRORS: error: invalid operand for instruction
94 @ CHECK-ERRORS: error: invalid operand for instruction
95
96