Home | History | Annotate | Download | only in ARM
      1 //RUN: not llvm-mc -triple thumb-none-linux-gnu -mattr=+v8.1a -mattr=neon -show-encoding < %s 2>%t | FileCheck %s --check-prefix=CHECK-V81aTHUMB
      2 //RUN: FileCheck --check-prefix=CHECK-ERROR <%t %s
      3 //RUN: not llvm-mc -triple arm-none-linux-gnu -mattr=+v8.1a -mattr=neon -show-encoding < %s 2>%t | FileCheck %s --check-prefix=CHECK-V81aARM
      4 //RUN: FileCheck --check-prefix=CHECK-ERROR <%t %s
      5 
      6 //RUN: not llvm-mc -triple thumb-none-linux-gnu -mattr=+v8 -mattr=neon -show-encoding < %s 2>&1 | FileCheck %s --check-prefix=CHECK-V8
      7 //RUN: not llvm-mc -triple arm-none-linux-gnu -mattr=+v8 -mattr=neon -show-encoding < %s 2>&1 | FileCheck %s --check-prefix=CHECK-V8
      8 
      9 
     10   .text
     11 //CHECK-V8THUMB: .text
     12 
     13   vqrdmlah.i8   q0, q1, q2
     14   vqrdmlah.u16  d0, d1, d2
     15   vqrdmlsh.f32  q3, q4, q5
     16   vqrdmlsh.f64  d3, d5, d5
     17 
     18 //CHECK-ERROR: error: invalid operand for instruction
     19 //CHECK-ERROR:   vqrdmlah.i8   q0, q1, q2
     20 //CHECK-ERROR:           ^
     21 //CHECK-ERROR: error: invalid operand for instruction
     22 //CHECK-ERROR:   vqrdmlah.u16  d0, d1, d2
     23 //CHECK-ERROR:           ^
     24 //CHECK-ERROR: error: invalid operand for instruction
     25 //CHECK-ERROR:   vqrdmlsh.f32  q3, q4, q5
     26 //CHECK-ERROR:           ^
     27 //CHECK-ERROR: error: invalid operand for instruction
     28 //CHECK-ERROR:   vqrdmlsh.f64  d3, d5, d5
     29 //CHECK-ERROR:           ^
     30 //CHECK-V8: error: invalid operand for instruction
     31 //CHECK-V8:   vqrdmlah.i8   q0, q1, q2
     32 //CHECK-V8:           ^
     33 //CHECK-V8: error: invalid operand for instruction
     34 //CHECK-V8:   vqrdmlah.u16  d0, d1, d2
     35 //CHECK-V8:           ^
     36 //CHECK-V8: error: invalid operand for instruction
     37 //CHECK-V8:   vqrdmlsh.f32  q3, q4, q5
     38 //CHECK-V8:           ^
     39 //CHECK-V8: error: invalid operand for instruction
     40 //CHECK-V8:  vqrdmlsh.f64  d3, d5, d5
     41 //CHECK-V8:           ^
     42 
     43   vqrdmlah.s16    d0, d1, d2
     44 //CHECK-V81aARM:   vqrdmlah.s16  d0, d1, d2      @ encoding: [0x12,0x0b,0x11,0xf3]
     45 //CHECK-V81aTHUMB: vqrdmlah.s16  d0, d1, d2      @ encoding: [0x11,0xff,0x12,0x0b]
     46 //CHECK-V8: error: instruction requires: armv8.1a
     47 //CHECK-V8:  vqrdmlah.s16    d0, d1, d2
     48 //CHECK-V8:  ^
     49 
     50   vqrdmlah.s32  d0, d1, d2
     51 //CHECK-V81aARM:   vqrdmlah.s32  d0, d1, d2      @ encoding: [0x12,0x0b,0x21,0xf3]
     52 //CHECK-V81aTHUMB: vqrdmlah.s32  d0, d1, d2      @ encoding: [0x21,0xff,0x12,0x0b]
     53 //CHECK-V8: error: instruction requires: armv8.1a
     54 //CHECK-V8:  vqrdmlah.s32  d0, d1, d2
     55 //CHECK-V8:  ^
     56 
     57   vqrdmlah.s16  q0, q1, q2
     58 //CHECK-V81aARM:   vqrdmlah.s16  q0, q1, q2      @ encoding: [0x54,0x0b,0x12,0xf3]
     59 //CHECK-V81aTHUMB: vqrdmlah.s16  q0, q1, q2      @ encoding: [0x12,0xff,0x54,0x0b]
     60 //CHECK-V8: error: instruction requires: armv8.1a
     61 //CHECK-V8:  vqrdmlah.s16  q0, q1, q2
     62 //CHECK-V8:  ^
     63 
     64   vqrdmlah.s32  q2, q3, q0
     65 //CHECK-V81aARM:   vqrdmlah.s32  q2, q3, q0      @ encoding: [0x50,0x4b,0x26,0xf3]
     66 //CHECK-V81aTHUMB: vqrdmlah.s32  q2, q3, q0      @ encoding: [0x26,0xff,0x50,0x4b]
     67 //CHECK-V8: error: instruction requires: armv8.1a
     68 //CHECK-V8:  vqrdmlah.s32  q2, q3, q0
     69 //CHECK-V8:  ^
     70 
     71 
     72   vqrdmlsh.s16  d7, d6, d5
     73 //CHECK-V81aARM:   vqrdmlsh.s16  d7, d6, d5      @ encoding: [0x15,0x7c,0x16,0xf3]
     74 //CHECK-V81aTHUMB: vqrdmlsh.s16  d7, d6, d5      @ encoding: [0x16,0xff,0x15,0x7c]
     75 //CHECK-V8: error: instruction requires: armv8.1a
     76 //CHECK-V8:  vqrdmlsh.s16  d7, d6, d5
     77 //CHECK-V8:  ^
     78 
     79   vqrdmlsh.s32  d0, d1, d2
     80 //CHECK-V81aARM:   vqrdmlsh.s32  d0, d1, d2      @ encoding: [0x12,0x0c,0x21,0xf3]
     81 //CHECK-V81aTHUMB: vqrdmlsh.s32  d0, d1, d2      @ encoding: [0x21,0xff,0x12,0x0c]
     82 //CHECK-V8: error: instruction requires: armv8.1a
     83 //CHECK-V8:  vqrdmlsh.s32  d0, d1, d2
     84 //CHECK-V8:  ^
     85 
     86   vqrdmlsh.s16  q0, q1, q2
     87 //CHECK-V81aARM:   vqrdmlsh.s16  q0, q1, q2      @ encoding: [0x54,0x0c,0x12,0xf3]
     88 //CHECK-V81aTHUMB: vqrdmlsh.s16  q0, q1, q2      @ encoding: [0x12,0xff,0x54,0x0c]
     89 //CHECK-V8: error: instruction requires: armv8.1a
     90 //CHECK-V8:  vqrdmlsh.s16  q0, q1, q2
     91 //CHECK-V8:  ^
     92 
     93   vqrdmlsh.s32    q3, q4, q5
     94 //CHECK-V81aARM:   vqrdmlsh.s32  q3, q4, q5      @ encoding: [0x5a,0x6c,0x28,0xf3]
     95 //CHECK-V81aTHUMB: vqrdmlsh.s32  q3, q4, q5      @ encoding: [0x28,0xff,0x5a,0x6c]
     96 //CHECK-V8: error: instruction requires: armv8.1a
     97 //CHECK-V8:  vqrdmlsh.s32  q3, q4, q5
     98 //CHECK-V8:  ^
     99 
    100 
    101   vqrdmlah.i8   q0, q1, d9[7]
    102   vqrdmlah.u16  d0, d1, d2[3]
    103   vqrdmlsh.f32  q3, q4, d5[1]
    104   vqrdmlsh.f64  d3, d5, d5[0]
    105 
    106 //CHECK-ERROR: error: invalid operand for instruction
    107 //CHECK-ERROR:   vqrdmlah.i8   q0, q1, d9[7]
    108 //CHECK-ERROR:           ^
    109 //CHECK-ERROR: error: invalid operand for instruction
    110 //CHECK-ERROR:   vqrdmlah.u16  d0, d1, d2[3]
    111 //CHECK-ERROR:           ^
    112 //CHECK-ERROR: error: invalid operand for instruction
    113 //CHECK-ERROR:   vqrdmlsh.f32  q3, q4, d5[1]
    114 //CHECK-ERROR:           ^
    115 //CHECK-ERROR: error: invalid operand for instruction
    116 //CHECK-ERROR:   vqrdmlsh.f64  d3, d5, d5[0]
    117 //CHECK-ERROR:           ^
    118 
    119   vqrdmlah.s16  d0, d1, d2[0]
    120 //CHECK-V81aARM:   vqrdmlah.s16 d0, d1, d2[0]    @ encoding: [0x42,0x0e,0x91,0xf2]
    121 //CHECK-V81aTHUMB: vqrdmlah.s16  d0, d1, d2[0]   @ encoding: [0x91,0xef,0x42,0x0e]
    122 //CHECK-V8: error: instruction requires: armv8.1a
    123 //CHECK-V8:  vqrdmlah.s16  d0, d1, d2[0]
    124 //CHECK-V8:  ^
    125 
    126   vqrdmlah.s32  d0, d1, d2[0]
    127 //CHECK-V81aARM:   vqrdmlah.s32 d0, d1, d2[0]    @ encoding: [0x42,0x0e,0xa1,0xf2]
    128 //CHECK-V81aTHUMB: vqrdmlah.s32  d0, d1, d2[0]   @ encoding: [0xa1,0xef,0x42,0x0e]
    129 //CHECK-V8: error: instruction requires: armv8.1a
    130 //CHECK-V8:  vqrdmlah.s32  d0, d1, d2[0]
    131 //CHECK-V8:  ^
    132 
    133   vqrdmlah.s16  q0, q1, d2[0]
    134 //CHECK-V81aARM:   vqrdmlah.s16  q0, q1, d2[0]   @ encoding: [0x42,0x0e,0x92,0xf3]
    135 //CHECK-V81aTHUMB: vqrdmlah.s16  q0, q1, d2[0]   @ encoding: [0x92,0xff,0x42,0x0e]
    136 //CHECK-V8: error: instruction requires: armv8.1a
    137 //CHECK-V8:  vqrdmlah.s16  q0, q1, d2[0]
    138 //CHECK-V8:  ^
    139 
    140   vqrdmlah.s32  q0, q1, d2[0]
    141 //CHECK-V81aARM:   vqrdmlah.s32  q0, q1, d2[0]   @ encoding: [0x42,0x0e,0xa2,0xf3]
    142 //CHECK-V81aTHUMB: vqrdmlah.s32  q0, q1, d2[0]   @ encoding: [0xa2,0xff,0x42,0x0e]
    143 //CHECK-V8: error: instruction requires: armv8.1a
    144 //CHECK-V8:  vqrdmlah.s32  q0, q1, d2[0]
    145 //CHECK-V8:  ^
    146 
    147 
    148   vqrdmlsh.s16  d0, d1, d2[0]
    149 //CHECK-V81aARM:   vqrdmlsh.s16 d0, d1, d2[0]    @ encoding: [0x42,0x0f,0x91,0xf2]
    150 //CHECK-V81aTHUMB: vqrdmlsh.s16  d0, d1, d2[0]   @ encoding: [0x91,0xef,0x42,0x0f]
    151 //CHECK-V8: error: instruction requires: armv8.1a
    152 //CHECK-V8:  vqrdmlsh.s16  d0, d1, d2[0]
    153 //CHECK-V8:  ^
    154 
    155   vqrdmlsh.s32  d0, d1, d2[0]
    156 //CHECK-V81aARM:   vqrdmlsh.s32 d0, d1, d2[0]    @ encoding: [0x42,0x0f,0xa1,0xf2]
    157 //CHECK-V81aTHUMB: vqrdmlsh.s32  d0, d1, d2[0]   @ encoding: [0xa1,0xef,0x42,0x0f]
    158 //CHECK-V8: error: instruction requires: armv8.1a
    159 //CHECK-V8:  vqrdmlsh.s32  d0, d1, d2[0]
    160 //CHECK-V8:  ^
    161 
    162   vqrdmlsh.s16  q0, q1, d2[0]
    163 //CHECK-V81aARM:   vqrdmlsh.s16 q0, q1, d2[0]    @ encoding: [0x42,0x0f,0x92,0xf3]
    164 //CHECK-V81aTHUMB: vqrdmlsh.s16  q0, q1, d2[0]   @ encoding: [0x92,0xff,0x42,0x0f]
    165 //CHECK-V8: error: instruction requires: armv8.1a
    166 //CHECK-V8:  vqrdmlsh.s16  q0, q1, d2[0]
    167 //CHECK-V8:  ^
    168 
    169   vqrdmlsh.s32  q0, q1, d2[0]
    170 //CHECK-V81aARM:   vqrdmlsh.s32 q0, q1, d2[0]    @ encoding: [0x42,0x0f,0xa2,0xf3]
    171 //CHECK-V81aTHUMB: vqrdmlsh.s32  q0, q1, d2[0]   @ encoding: [0xa2,0xff,0x42,0x0f]
    172 //CHECK-V8: error: instruction requires: armv8.1a
    173 //CHECK-V8:  vqrdmlsh.s32  q0, q1, d2[0]
    174 //CHECK-V8:  ^
    175 
    176   setpan  #0
    177 //CHECK-V81aTHUMB:  setpan  #0                @       encoding: [0x10,0xb6]
    178 //CHECK-V81aARM:    setpan  #0                @       encoding: [0x00,0x00,0x10,0xf1]
    179 //CHECK-V8: error: instruction requires: armv8.1a
    180 //CHECK-V8:  setpan  #0
    181 //CHECK-V8:  ^
    182 
    183   setpan  #1
    184 //CHECK-V81aTHUMB:  setpan  #1                @       encoding: [0x18,0xb6]
    185 //CHECK-V81aARM:    setpan  #1                @       encoding: [0x00,0x02,0x10,0xf1]
    186 //CHECK-V8: error: instruction requires: armv8.1a
    187 //CHECK-V8:  setpan  #1
    188 //CHECK-V8:  ^
    189   setpan
    190   setpan #-1
    191   setpan #2
    192 //CHECK-ERROR: error: too few operands for instruction
    193 //CHECK-ERROR:  setpan
    194 //CHECK-ERROR:  ^
    195 //CHECK-ERROR: error: invalid operand for instruction
    196 //CHECK-ERROR:  setpan #-1
    197 //CHECK-ERROR:         ^
    198 //CHECK-ERROR: error: invalid operand for instruction
    199 //CHECK-ERROR:  setpan #2
    200 //CHECK-ERROR:         ^
    201 
    202   it eq
    203   setpaneq #0
    204 //CHECK-THUMB-ERROR: error: instruction 'setpan' is not predicable, but condition code specified
    205 //CHECK-THUMB-ERROR:  setpaneq #0
    206 //CHECK-THUMB-ERROR:  ^
    207