~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/MC/Disassembler/ARM/invalid-thumbv7.txt

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# RUN: not llvm-mc -disassemble %s -mcpu cortex-a8 -triple thumbv7 2>&1 | FileCheck %s
 
2
 
 
3
# This file is checking Thumbv7 encodings which are globally invalid, usually due
 
4
# to the constraints of the instructions not being met. For example invalid
 
5
# combinations of registers.
 
6
 
 
7
#------------------------------------------------------------------------------
 
8
# Undefined encoding for b.cc
 
9
#------------------------------------------------------------------------------
 
10
 
 
11
# Opcode=1894 Name=t2Bcc Format=ARM_FORMAT_THUMBFRM(25)
 
12
#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 
13
# -------------------------------------------------------------------------------------------------
 
14
# | 1: 1: 1: 1| 0: 1: 1: 1| 1: 0: 1: 0| 1: 1: 1: 1| 1: 0: 0: 0| 1: 0: 1: 1| 0: 1: 0: 0| 0: 1: 0: 0|
 
15
# -------------------------------------------------------------------------------------------------
 
16
#
 
17
# A8.6.16 B
 
18
# if cond<3:1> == '111' then SEE "Related Encodings"
 
19
 
 
20
[0xaf 0xf7 0x44 0x8b]
 
21
# CHECK: warning: invalid instruction encoding
 
22
# CHECK-NEXT: [0xaf 0xf7 0x44 0x8b]
 
23
 
 
24
#------------------------------------------------------------------------------
 
25
# Undefined encoding for it
 
26
#------------------------------------------------------------------------------
 
27
 
 
28
[0xff 0xbf 0x6b 0x80 0x00 0x75]
 
29
# CHECK: potentially undefined instruction encoding
 
30
# CHECK-NEXT: [0xff 0xbf 0x6b 0x80 0x00 0x75]
 
31
 
 
32
[0x50 0xbf] # hint #5; legal as the third instruction for the iteee above
 
33
 
 
34
# Two warnings from this block since there are two instructions in there
 
35
[0xdb 0xbf 0x42 0xbb]
 
36
# CHECK: potentially undefined instruction encoding
 
37
# CHECK-NEXT: [0xdb 0xbf 0x42 0xbb]
 
38
# CHECK: potentially undefined instruction encoding
 
39
# CHECK-NEXT: [0xdb 0xbf 0x42 0xbb]
 
40
 
 
41
#------------------------------------------------------------------------------
 
42
# Undefined encoding for ldm
 
43
#------------------------------------------------------------------------------
 
44
 
 
45
# Writeback is not allowed is Rn is in the target register list.
 
46
[0xb4 0xe8 0x34 0x04]
 
47
# CHECK: potentially undefined instruction encoding
 
48
# CHECK-NEXT: [0xb4 0xe8 0x34 0x04]
 
49
 
 
50
 
 
51
#------------------------------------------------------------------------------
 
52
# Undefined encoding for ldrd
 
53
#------------------------------------------------------------------------------
 
54
 
 
55
# Opcode=1930 Name=t2LDRD_PRE Format=ARM_FORMAT_THUMBFRM(25)
 
56
#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0 
 
57
# -------------------------------------------------------------------------------------------------
 
58
# | 1: 1: 1: 0| 1: 0: 0: 1| 1: 1: 1: 1| 1: 1: 1: 1| 1: 1: 1: 0| 1: 0: 1: 1| 0: 0: 0: 0| 0: 0: 0: 0|
 
59
# -------------------------------------------------------------------------------------------------
 
60
#
 
61
# A8.6.66 LDRD (immediate)
 
62
# if Rn = '1111' then SEE LDRD (literal)
 
63
# A8.6.67 LDRD (literal)
 
64
# Inst{21} = 0
 
65
 
 
66
[0xff 0xe9 0x0 0xeb]
 
67
# CHECK: potentially undefined
 
68
# CHECK-NEXT: [0xff 0xe9 0x0 0xeb]
 
69
 
 
70
 
 
71
#------------------------------------------------------------------------------
 
72
# Undefined encodings for ldrbt
 
73
#------------------------------------------------------------------------------
 
74
 
 
75
# Opcode=1922 Name=t2LDRBT Format=ARM_FORMAT_THUMBFRM(25)
 
76
#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 
77
# -------------------------------------------------------------------------------------------------
 
78
# | 1: 1: 1: 1| 1: 0: 0: 0| 0: 0: 0: 1| 0: 0: 0: 0| 1: 1: 1: 1| 1: 1: 1: 0| 0: 0: 0: 0| 0: 0: 1: 1|
 
79
# -------------------------------------------------------------------------------------------------
 
80
#
 
81
# The unpriviledged Load/Store cannot have SP or PC as Rt.
 
82
[0x10 0xf8 0x3 0xfe]
 
83
# CHECK: potentially undefined instruction encoding
 
84
# CHECK-NEXT: [0x10 0xf8 0x3 0xfe]
 
85
 
 
86
 
 
87
#------------------------------------------------------------------------------
 
88
# Undefined encodings for ldrsh
 
89
#------------------------------------------------------------------------------
 
90
 
 
91
# invalid LDRSHs Rt=PC
 
92
[0x30 0xf9 0x00 0xf0]
 
93
# CHECK: invalid instruction encoding
 
94
# CHECK-NEXT: [0x30 0xf9 0x00 0xf0]
 
95
 
 
96
# invalid LDRSHi8 Rt=PC
 
97
[0x30 0xf9 0x00 0xfc]
 
98
# CHECK: invalid instruction encoding
 
99
# CHECK-NEXT: [0x30 0xf9 0x00 0xfc]
 
100
 
 
101
# invalid LDRSHi12 Rt=PC
 
102
[0xb0 0xf9 0x00 0xf0]
 
103
# CHECK: invalid instruction encoding
 
104
# CHECK-NEXT: [0xb0 0xf9 0x00 0xf0]
 
105
 
 
106
# Opcode=1954 Name=t2LDRSHi8 Format=ARM_FORMAT_THUMBFRM(25)
 
107
#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 
108
# -------------------------------------------------------------------------------------------------
 
109
# | 1: 1: 1: 1| 1: 0: 0: 1| 0: 0: 1: 1| 0: 1: 0: 1| 1: 1: 1: 1| 1: 1: 0: 0| 0: 0: 0: 0| 0: 0: 0: 0|
 
110
# -------------------------------------------------------------------------------------------------
 
111
#
 
112
# if Rt == '1111' and PUW == '100' then SEE "Unallocated memory hints"
 
113
[0x35 0xf9 0x00 0xfc]
 
114
# CHECK: invalid instruction encoding
 
115
# CHECK-NEXT: [0x35 0xf9 0x00 0xfc]
 
116
 
 
117
# Opcode=1953 Name=t2LDRSHi12 Format=ARM_FORMAT_THUMBFRM(25)
 
118
#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 
119
# -------------------------------------------------------------------------------------------------
 
120
# | 1: 1: 1: 1| 1: 0: 0: 1| 1: 0: 1: 1| 0: 0: 1: 1| 1: 1: 1: 1| 1: 0: 0: 0| 1: 1: 0: 1| 1: 1: 1: 1|
 
121
# -------------------------------------------------------------------------------------------------
 
122
#
 
123
# if Rt = '1111' then SEE "Unallocated memory hints"
 
124
[0xb3 0xf9 0xdf 0xf8]
 
125
# CHECK: invalid instruction encoding
 
126
# CHECK-NEXT: [0xb3 0xf9 0xdf 0xf8]
 
127
 
 
128
 
 
129
#------------------------------------------------------------------------------
 
130
# Undefined encoding for push
 
131
#------------------------------------------------------------------------------
 
132
 
 
133
# SP and PC are not allowed in the register list on STM instructions in Thumb2.
 
134
[0x2d 0xe9 0xf7 0xb6]
 
135
# CHECK: invalid instruction encoding
 
136
# CHECK-NEXT: [0x2d 0xe9 0xf7 0xb6]
 
137
 
 
138
 
 
139
#------------------------------------------------------------------------------
 
140
# Undefined encoding for stmia
 
141
#------------------------------------------------------------------------------
 
142
 
 
143
# Opcode=2313 Name=tSTMIA_UPD Format=ARM_FORMAT_THUMBFRM(25)
 
144
#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 
145
# -------------------------------------------------------------------------------------------------
 
146
# | 0: 0: 0: 0| 0: 0: 0: 0| 0: 0: 0: 0| 0: 0: 0: 0| 1: 1: 0: 0| 0: 1: 1: 1| 0: 0: 0: 0| 0: 0: 0: 0|
 
147
# -------------------------------------------------------------------------------------------------
 
148
#
 
149
# if BitCount(registers) < 1 then UNPREDICTABLE
 
150
[0x00 0xc7]
 
151
# CHECK: invalid instruction encoding
 
152
# CHECK-NEXT: [0x00 0xc7]
 
153
 
 
154
 
 
155
#------------------------------------------------------------------------------
 
156
# Undefined encodings for str
 
157
#------------------------------------------------------------------------------
 
158
 
 
159
# invalid STRi12   Rn=PC
 
160
[0xcf 0xf8 0x00 0x00]
 
161
# CHECK: invalid instruction encoding
 
162
# CHECK-NEXT: [0xcf 0xf8 0x00 0x00]
 
163
 
 
164
# invalid STRi8    Rn=PC
 
165
[0x4f 0xf8 0x00 0x0c]
 
166
# CHECK: invalid instruction encoding
 
167
# CHECK-NEXT: [0x4f 0xf8 0x00 0x0c]
 
168
 
 
169
# invalid STRs     Rn=PC
 
170
[0x4f 0xf8 0x00 0x00]
 
171
# CHECK: invalid instruction encoding
 
172
# CHECK-NEXT: [0x4f 0xf8 0x00 0x00]
 
173
 
 
174
# invalid STRBi12  Rn=PC
 
175
[0x0f 0xf8 0x00 0x00]
 
176
# CHECK: invalid instruction encoding
 
177
# CHECK-NEXT: [0x0f 0xf8 0x00 0x00]
 
178
 
 
179
# invalid STRBi8   Rn=PC
 
180
[0x0f 0xf8 0x00 0x0c]
 
181
# CHECK: invalid instruction encoding
 
182
# CHECK-NEXT: [0x0f 0xf8 0x00 0x0c]
 
183
 
 
184
# invalid STRBs    Rn=PC
 
185
[0x0f 0xf8 0x00 0x00]
 
186
# CHECK: invalid instruction encoding
 
187
# CHECK-NEXT: [0x0f 0xf8 0x00 0x00]
 
188
 
 
189
# invalid STRHi12  Rn=PC
 
190
[0xaf 0xf8 0x00 0x00]
 
191
# CHECK: invalid instruction encoding
 
192
# CHECK-NEXT: [0xaf 0xf8 0x00 0x00]
 
193
 
 
194
# invalid STRHi8   Rn=PC
 
195
[0x2f 0xf8 0x00 0x0c]
 
196
# CHECK: invalid instruction encoding
 
197
# CHECK-NEXT: [0x2f 0xf8 0x00 0x0c]
 
198
 
 
199
# invalid STRHs    Rn=PC
 
200
[0x2f 0xf8 0x00 0x00]
 
201
# CHECK: invalid instruction encoding
 
202
# CHECK-NEXT: [0x2f 0xf8 0x00 0x00]
 
203
 
 
204
# invalid STRBT    Rn=PC
 
205
[0x0f 0xf8 0x00 0x0e]
 
206
# CHECK: invalid instruction encoding
 
207
# CHECK-NEXT: [0x0f 0xf8 0x00 0x0e]
 
208
 
 
209
# invalid STRHT    Rn=PC
 
210
[0x2f 0xf8 0x00 0x0e]
 
211
# CHECK: invalid instruction encoding
 
212
# CHECK-NEXT: [0x2f 0xf8 0x00 0x0e]
 
213
 
 
214
# invalid STRT     Rn=PC
 
215
[0x4f 0xf8 0x00 0x0e]
 
216
# CHECK: invalid instruction encoding
 
217
# CHECK-NEXT: [0x4f 0xf8 0x00 0x0e]
 
218
 
 
219
# Opcode=2137 Name=t2STR_POST Format=ARM_FORMAT_THUMBFRM(25)
 
220
#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 
221
# -------------------------------------------------------------------------------------------------
 
222
# | 1: 1: 1: 1| 1: 0: 0: 0| 0: 1: 0: 0| 1: 1: 1: 1| 1: 1: 1: 0| 1: 0: 1: 1| 1: 1: 1: 1| 1: 1: 1: 1|
 
223
# -------------------------------------------------------------------------------------------------
 
224
#
 
225
# if Rn == '1111' then UNDEFINED
 
226
 
 
227
[0x4f 0xf8 0xff 0xeb]
 
228
# CHECK: invalid instruction encoding
 
229
# CHECK-NEXT: [0x4f 0xf8 0xff 0xeb]
 
230
 
 
231
#------------------------------------------------------------------------------
 
232
# Undefined encodings for strd
 
233
#------------------------------------------------------------------------------
 
234
 
 
235
# Rt == Rn is UNPREDICTABLE
 
236
[0xe4 0xe9 0x02 0x46]
 
237
# CHECK: warning: potentially undefined instruction encoding
 
238
# CHECK-NEXT: [0xe4 0xe9 0x02 0x46]
 
239
 
 
240
#------------------------------------------------------------------------------
 
241
# Undefined encodings for NEON vld instructions
 
242
#------------------------------------------------------------------------------
 
243
 
 
244
# size = '00' and index_align == '0001' so UNDEFINED
 
245
[0xa0 0xf9 0x10 0x08]
 
246
# CHECK: invalid instruction encoding
 
247
# CHECK-NEXT: [0xa0 0xf9 0x10 0x08]
 
248
 
 
249
 
 
250
# vld3
 
251
 
 
252
# Opcode=871 Name=VLD3DUPd32_UPD Format=ARM_FORMAT_NLdSt(30)
 
253
#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 
254
# -------------------------------------------------------------------------------------------------
 
255
# | 1: 1: 1: 1| 0: 1: 0: 0| 1: 0: 1: 0| 0: 0: 1: 0| 0: 0: 1: 0| 1: 1: 1: 0| 1: 0: 0: 1| 0: 0: 1: 0|
 
256
# -------------------------------------------------------------------------------------------------
 
257
#
 
258
# A8.6.315 VLD3 (single 3-element structure to all lanes)
 
259
# The a bit must be encoded as 0.
 
260
 
 
261
[0xa2 0xf9 0x92 0x2e]
 
262
# CHECK: invalid instruction encoding
 
263
# CHECK-NEXT: [0xa2 0xf9 0x92 0x2e]
 
264
 
 
265
 
 
266
# Some vld4 ones
 
267
# size == '11' and a == '0' so UNDEFINED
 
268
[0xa0 0xf9 0xc0 0x0f]
 
269
# CHECK: invalid instruction encoding
 
270
# CHECK-NEXT: [0xa0 0xf9 0xc0 0x0f]
 
271
 
 
272
[0xa0 0xf9 0x30 0x0b]
 
273
# CHECK: invalid instruction encoding
 
274
# CHECK-NEXT: [0xa0 0xf9 0x30 0x0b]
 
275
 
 
276
 
 
277
# VLD1 multi-element, type=0b1010 align=0b11
 
278
[0x24 0xf9 0xbf 0x8a]
 
279
# CHECK: invalid instruction encoding
 
280
# CHECK-NEXT: [0x24 0xf9 0xbf 0x8a]
 
281
 
 
282
# VLD1 multi-element type=0b0111 align=0b1x
 
283
[0x24 0xf9 0xbf 0x87]
 
284
# CHECK: invalid instruction encoding
 
285
# CHECK-NEXT: [0x24 0xf9 0xbf 0x87]
 
286
 
 
287
# VLD1 multi-element type=0b0010 align=0b1x
 
288
[0x24 0xf9 0xbf 0x86]
 
289
# CHECK: invalid instruction encoding
 
290
# CHECK-NEXT: [0x24 0xf9 0xbf 0x86]
 
291
 
 
292
# VLD2 multi-element size=0b11
 
293
[0x60 0xf9 0xcf 0x08]
 
294
# CHECK: invalid instruction encoding
 
295
# CHECK-NEXT: [0x60 0xf9 0xcf 0x08]
 
296
 
 
297
# VLD2 multi-element type=0b1111 align=0b11
 
298
[0x60 0xf9 0xbf 0x08]
 
299
# CHECK: invalid instruction encoding
 
300
# CHECK-NEXT: [0x60 0xf9 0xbf 0x08]
 
301
 
 
302
# VLD2 multi-element type=0b1001 align=0b11
 
303
[0x60 0xf9 0xbf 0x09]
 
304
# CHECK: invalid instruction encoding
 
305
# CHECK-NEXT: [0x60 0xf9 0xbf 0x09]
 
306
 
 
307
# VLD3 multi-element size=0b11
 
308
[0x60 0xf9 0x7f 0x04]
 
309
# CHECK: invalid instruction encoding
 
310
# CHECK-NEXT: [0x60 0xf9 0x7f 0x04]
 
311
 
 
312
# VLD3 multi-element align=0b1x
 
313
[0x60 0xf9 0xcf 0x04]
 
314
# CHECK: invalid instruction encoding
 
315
# CHECK-NEXT: [0x60 0xf9 0xcf 0x04]
 
316
 
 
317
# VLD4 multi-element size=0b11
 
318
[0x60 0xf9 0xcd 0x11]
 
319
# CHECK: invalid instruction encoding
 
320
# CHECK-NEXT: [0x60 0xf9 0xcd 0x11]
 
321
 
 
322
 
 
323
#------------------------------------------------------------------------------
 
324
# Undefined encodings for NEON vst1
 
325
#------------------------------------------------------------------------------
 
326
 
 
327
# size == '10' and index_align == '0001' so UNDEFINED
 
328
[0x80 0xf9 0x10 0x08]
 
329
# CHECK: invalid instruction encoding
 
330
# CHECK-NEXT: [0x80 0xf9 0x10 0x08]
 
331
 
 
332
# Opcode=1839 Name=VST1d8Twb_register Format=ARM_FORMAT_NLdSt(30)
 
333
#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 
334
# -------------------------------------------------------------------------------------------------
 
335
# | 1: 1: 1: 1| 1: 0: 0: 1| 0: 0: 0: 0| 0: 0: 0: 0| 0: 0: 0: 0| 0: 1: 1: 0| 0: 0: 1: 0| 1: 1: 1: 1|
 
336
# -------------------------------------------------------------------------------------------------
 
337
#
 
338
# A8.6.391 VST1 (multiple single elements)
 
339
# This encoding looks like: vst1.8 {d0,d1,d2}, [r0:128]
 
340
# But bits 5-4 for the alignment of 128 encoded as align = 0b10, is available only if <list>
 
341
# contains two or four registers.  rdar://11220250
 
342
[0x00 0xf9 0x2f 0x06]
 
343
# CHECK: invalid instruction encoding
 
344
# CHECK-NEXT: [0x00 0xf9 0x2f 0x06]
 
345
 
 
346
#------------------------------------------------------------------------------
 
347
# Undefined encodings for NEON vst4
 
348
#------------------------------------------------------------------------------
 
349
 
 
350
[0x80 0xf9 0x30 0x0b]
 
351
# CHECK: invalid instruction encoding
 
352
# CHECK-NEXT: [0x80 0xf9 0x30 0x0b]
 
353
 
 
354
 
 
355
#------------------------------------------------------------------------------
 
356
# Unpredictable STMs
 
357
#------------------------------------------------------------------------------
 
358
 
 
359
# 32-bit Thumb STM instructions cannot have a writeback register which appears
 
360
# in the list.
 
361
 
 
362
[0xa1,0xe8,0x07,0x04]
 
363
# CHECK: warning: potentially undefined instruction encoding
 
364
# CHECK-NEXT: [0xa1,0xe8,0x07,0x04]
 
365
 
 
366
[0x21,0xe9,0x07,0x04]
 
367
# CHECK: warning: potentially undefined instruction encoding
 
368
# CHECK-NEXT: [0x21,0xe9,0x07,0x04]