• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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]
369