Home | History | Annotate | Download | only in ARM
      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