Home | History | Annotate | Download | only in AArch64
      1 // RUN: llvm-mc -triple=arm64 -mattr=+neon -show-encoding < %s | FileCheck %s
      2 
      3 // Check that the assembler can handle the documented syntax for AArch64
      4 
      5 //------------------------------------------------------------------------------
      6 // Instructions with 2 vectors and an element
      7 //------------------------------------------------------------------------------
      8 
      9         mla v0.2s, v1.2s, v2.s[2]
     10         mla v0.2s, v1.2s, v22.s[2]
     11         mla v3.4s, v8.4s, v2.s[1]
     12         mla v3.4s, v8.4s, v22.s[3]
     13 
     14 // CHECK: mla	v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x08,0x82,0x2f]
     15 // CHECK: mla	v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x08,0x96,0x2f]
     16 // CHECK: mla	v3.4s, v8.4s, v2.s[1]   // encoding: [0x03,0x01,0xa2,0x6f]
     17 // CHECK: mla	v3.4s, v8.4s, v22.s[3]  // encoding: [0x03,0x09,0xb6,0x6f]
     18 
     19         mla v0.4h, v1.4h, v2.h[2]
     20         mla v0.4h, v1.4h, v15.h[2]
     21         mla v0.8h, v1.8h, v2.h[7]
     22         mla v0.8h, v1.8h, v14.h[6]
     23 
     24 // CHECK: mla	v0.4h, v1.4h, v2.h[2]   // encoding: [0x20,0x00,0x62,0x2f]
     25 // CHECK: mla	v0.4h, v1.4h, v15.h[2]  // encoding: [0x20,0x00,0x6f,0x2f]
     26 // CHECK: mla	v0.8h, v1.8h, v2.h[7]   // encoding: [0x20,0x08,0x72,0x6f]
     27 // CHECK: mla	v0.8h, v1.8h, v14.h[6]  // encoding: [0x20,0x08,0x6e,0x6f]
     28 
     29         mls v0.2s, v1.2s, v2.s[2]
     30         mls v0.2s, v1.2s, v22.s[2]
     31         mls v3.4s, v8.4s, v2.s[1]
     32         mls v3.4s, v8.4s, v22.s[3]
     33 
     34 // CHECK: mls	v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x48,0x82,0x2f]
     35 // CHECK: mls	v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x48,0x96,0x2f]
     36 // CHECK: mls	v3.4s, v8.4s, v2.s[1]   // encoding: [0x03,0x41,0xa2,0x6f]
     37 // CHECK: mls	v3.4s, v8.4s, v22.s[3]  // encoding: [0x03,0x49,0xb6,0x6f]
     38 
     39         mls v0.4h, v1.4h, v2.h[2]
     40         mls v0.4h, v1.4h, v15.h[2]
     41         mls v0.8h, v1.8h, v2.h[7]
     42         mls v0.8h, v1.8h, v14.h[6]
     43 
     44 // CHECK: mls	v0.4h, v1.4h, v2.h[2]   // encoding: [0x20,0x40,0x62,0x2f]
     45 // CHECK: mls	v0.4h, v1.4h, v15.h[2]  // encoding: [0x20,0x40,0x6f,0x2f]
     46 // CHECK: mls	v0.8h, v1.8h, v2.h[7]   // encoding: [0x20,0x48,0x72,0x6f]
     47 // CHECK: mls	v0.8h, v1.8h, v14.h[6]  // encoding: [0x20,0x48,0x6e,0x6f]
     48 
     49         fmla v0.2s, v1.2s, v2.s[2]
     50         fmla v0.2s, v1.2s, v22.s[2]
     51         fmla v3.4s, v8.4s, v2.s[1]
     52         fmla v3.4s, v8.4s, v22.s[3]
     53         fmla v0.2d, v1.2d, v2.d[1]
     54         fmla v0.2d, v1.2d, v22.d[1]
     55 
     56 // CHECK: fmla	v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x18,0x82,0x0f]
     57 // CHECK: fmla	v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x18,0x96,0x0f]
     58 // CHECK: fmla	v3.4s, v8.4s, v2.s[1]   // encoding: [0x03,0x11,0xa2,0x4f]
     59 // CHECK: fmla	v3.4s, v8.4s, v22.s[3]  // encoding: [0x03,0x19,0xb6,0x4f]
     60 // CHECK: fmla	v0.2d, v1.2d, v2.d[1]   // encoding: [0x20,0x18,0xc2,0x4f]
     61 // CHECK: fmla	v0.2d, v1.2d, v22.d[1]  // encoding: [0x20,0x18,0xd6,0x4f]
     62 
     63         fmls v0.2s, v1.2s, v2.s[2]
     64         fmls v0.2s, v1.2s, v22.s[2]
     65         fmls v3.4s, v8.4s, v2.s[1]
     66         fmls v3.4s, v8.4s, v22.s[3]
     67         fmls v0.2d, v1.2d, v2.d[1]
     68         fmls v0.2d, v1.2d, v22.d[1]
     69 
     70 // CHECK: fmls	v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x58,0x82,0x0f]
     71 // CHECK: fmls	v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x58,0x96,0x0f]
     72 // CHECK: fmls	v3.4s, v8.4s, v2.s[1]   // encoding: [0x03,0x51,0xa2,0x4f]
     73 // CHECK: fmls	v3.4s, v8.4s, v22.s[3]  // encoding: [0x03,0x59,0xb6,0x4f]
     74 // CHECK: fmls	v0.2d, v1.2d, v2.d[1]   // encoding: [0x20,0x58,0xc2,0x4f]
     75 // CHECK: fmls	v0.2d, v1.2d, v22.d[1]  // encoding: [0x20,0x58,0xd6,0x4f]
     76 
     77         smlal v0.4s, v1.4h, v2.h[2]
     78         smlal v0.2d, v1.2s, v2.s[2]
     79         smlal v0.2d, v1.2s, v22.s[2]
     80         smlal2 v0.4s, v1.8h, v1.h[2]
     81         smlal2 v0.2d, v1.4s, v1.s[2]
     82         smlal2 v0.2d, v1.4s, v22.s[2]
     83 
     84 // CHECK: smlal	v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x20,0x62,0x0f]
     85 // CHECK: smlal	v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x28,0x82,0x0f]
     86 // CHECK: smlal	v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x28,0x96,0x0f]
     87 // CHECK: smlal2	v0.4s, v1.8h, v1.h[2]   // encoding: [0x20,0x20,0x61,0x4f]
     88 // CHECK: smlal2	v0.2d, v1.4s, v1.s[2]   // encoding: [0x20,0x28,0x81,0x4f]
     89 // CHECK: smlal2	v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0x28,0x96,0x4f]
     90 
     91         smlsl v0.4s, v1.4h, v2.h[2]
     92         smlsl v0.2d, v1.2s, v2.s[2]
     93         smlsl v0.2d, v1.2s, v22.s[2]
     94         smlsl2 v0.4s, v1.8h, v1.h[2]
     95         smlsl2 v0.2d, v1.4s, v1.s[2]
     96         smlsl2 v0.2d, v1.4s, v22.s[2]
     97 
     98 // CHECK: smlsl	v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x60,0x62,0x0f]
     99 // CHECK: smlsl	v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x68,0x82,0x0f]
    100 // CHECK: smlsl	v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x68,0x96,0x0f]
    101 // CHECK: smlsl2	v0.4s, v1.8h, v1.h[2]   // encoding: [0x20,0x60,0x61,0x4f]
    102 // CHECK: smlsl2	v0.2d, v1.4s, v1.s[2]   // encoding: [0x20,0x68,0x81,0x4f]
    103 // CHECK: smlsl2	v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0x68,0x96,0x4f]
    104 
    105         sqdmlal v0.4s, v1.4h, v2.h[2]
    106         sqdmlal v0.2d, v1.2s, v2.s[2]
    107         sqdmlal v0.2d, v1.2s, v22.s[2]
    108         sqdmlal2 v0.4s, v1.8h, v1.h[2]
    109         sqdmlal2 v0.2d, v1.4s, v1.s[2]
    110         sqdmlal2 v0.2d, v1.4s, v22.s[2]
    111 
    112 // CHECK: sqdmlal	v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x30,0x62,0x0f]
    113 // CHECK: sqdmlal	v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x38,0x82,0x0f]
    114 // CHECK: sqdmlal	v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x38,0x96,0x0f]
    115 // CHECK: sqdmlal2	v0.4s, v1.8h, v1.h[2] // encoding: [0x20,0x30,0x61,0x4f]
    116 // CHECK: sqdmlal2	v0.2d, v1.4s, v1.s[2] // encoding: [0x20,0x38,0x81,0x4f]
    117 // CHECK: sqdmlal2	v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0x38,0x96,0x4f]
    118 
    119         umlal v0.4s, v1.4h, v2.h[2]
    120         umlal v0.2d, v1.2s, v2.s[2]
    121         umlal v0.2d, v1.2s, v22.s[2]
    122         umlal2 v0.4s, v1.8h, v1.h[2]
    123         umlal2 v0.2d, v1.4s, v1.s[2]
    124         umlal2 v0.2d, v1.4s, v22.s[2]
    125 
    126 // CHECK: umlal	v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x20,0x62,0x2f]
    127 // CHECK: umlal	v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x28,0x82,0x2f]
    128 // CHECK: umlal	v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x28,0x96,0x2f]
    129 // CHECK: umlal2	v0.4s, v1.8h, v1.h[2]   // encoding: [0x20,0x20,0x61,0x6f]
    130 // CHECK: umlal2	v0.2d, v1.4s, v1.s[2]   // encoding: [0x20,0x28,0x81,0x6f]
    131 // CHECK: umlal2	v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0x28,0x96,0x6f]
    132 
    133         umlsl v0.4s, v1.4h, v2.h[2]
    134         umlsl v0.2d, v1.2s, v2.s[2]
    135         umlsl v0.2d, v1.2s, v22.s[2]
    136         umlsl2 v0.4s, v1.8h, v1.h[2]
    137         umlsl2 v0.2d, v1.4s, v1.s[2]
    138         umlsl2 v0.2d, v1.4s, v22.s[2]
    139 
    140 // CHECK: umlsl	v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x60,0x62,0x2f]
    141 // CHECK: umlsl	v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x68,0x82,0x2f]
    142 // CHECK: umlsl	v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x68,0x96,0x2f]
    143 // CHECK: umlsl2	v0.4s, v1.8h, v1.h[2]   // encoding: [0x20,0x60,0x61,0x6f]
    144 // CHECK: umlsl2	v0.2d, v1.4s, v1.s[2]   // encoding: [0x20,0x68,0x81,0x6f]
    145 // CHECK: umlsl2	v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0x68,0x96,0x6f]
    146 
    147         sqdmlsl v0.4s, v1.4h, v2.h[2]
    148         sqdmlsl v0.2d, v1.2s, v2.s[2]
    149         sqdmlsl v0.2d, v1.2s, v22.s[2]
    150         sqdmlsl2 v0.4s, v1.8h, v1.h[2]
    151         sqdmlsl2 v0.2d, v1.4s, v1.s[2]
    152         sqdmlsl2 v0.2d, v1.4s, v22.s[2]
    153 
    154 // CHECK: sqdmlsl	v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x70,0x62,0x0f]
    155 // CHECK: sqdmlsl	v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x78,0x82,0x0f]
    156 // CHECK: sqdmlsl	v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x78,0x96,0x0f]
    157 // CHECK: sqdmlsl2	v0.4s, v1.8h, v1.h[2] // encoding: [0x20,0x70,0x61,0x4f]
    158 // CHECK: sqdmlsl2	v0.2d, v1.4s, v1.s[2] // encoding: [0x20,0x78,0x81,0x4f]
    159 // CHECK: sqdmlsl2	v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0x78,0x96,0x4f]
    160 
    161         mul v0.4h, v1.4h, v2.h[2]
    162         mul v0.8h, v1.8h, v2.h[2]
    163         mul v0.2s, v1.2s, v2.s[2]
    164         mul v0.2s, v1.2s, v22.s[2]
    165         mul v0.4s, v1.4s, v2.s[2]
    166         mul v0.4s, v1.4s, v22.s[2]
    167 
    168 // CHECK: mul	v0.4h, v1.4h, v2.h[2]   // encoding: [0x20,0x80,0x62,0x0f]
    169 // CHECK: mul	v0.8h, v1.8h, v2.h[2]   // encoding: [0x20,0x80,0x62,0x4f]
    170 // CHECK: mul	v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x88,0x82,0x0f]
    171 // CHECK: mul	v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x88,0x96,0x0f]
    172 // CHECK: mul	v0.4s, v1.4s, v2.s[2]   // encoding: [0x20,0x88,0x82,0x4f]
    173 // CHECK: mul	v0.4s, v1.4s, v22.s[2]  // encoding: [0x20,0x88,0x96,0x4f]
    174 
    175         fmul v0.2s, v1.2s, v2.s[2]
    176         fmul v0.2s, v1.2s, v22.s[2]
    177         fmul v0.4s, v1.4s, v2.s[2]
    178         fmul v0.4s, v1.4s, v22.s[2]
    179         fmul v0.2d, v1.2d, v2.d[1]
    180         fmul v0.2d, v1.2d, v22.d[1]
    181 
    182 // CHECK: fmul	v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x98,0x82,0x0f]
    183 // CHECK: fmul	v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x98,0x96,0x0f]
    184 // CHECK: fmul	v0.4s, v1.4s, v2.s[2]   // encoding: [0x20,0x98,0x82,0x4f]
    185 // CHECK: fmul	v0.4s, v1.4s, v22.s[2]  // encoding: [0x20,0x98,0x96,0x4f]
    186 // CHECK: fmul	v0.2d, v1.2d, v2.d[1]   // encoding: [0x20,0x98,0xc2,0x4f]
    187 // CHECK: fmul	v0.2d, v1.2d, v22.d[1]  // encoding: [0x20,0x98,0xd6,0x4f]
    188 
    189         fmulx v0.2s, v1.2s, v2.s[2]
    190         fmulx v0.2s, v1.2s, v22.s[2]
    191         fmulx v0.4s, v1.4s, v2.s[2]
    192         fmulx v0.4s, v1.4s, v22.s[2]
    193         fmulx v0.2d, v1.2d, v2.d[1]
    194         fmulx v0.2d, v1.2d, v22.d[1]
    195 
    196 // CHECK: fmulx	v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x98,0x82,0x2f]
    197 // CHECK: fmulx	v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x98,0x96,0x2f]
    198 // CHECK: fmulx	v0.4s, v1.4s, v2.s[2]   // encoding: [0x20,0x98,0x82,0x6f]
    199 // CHECK: fmulx	v0.4s, v1.4s, v22.s[2]  // encoding: [0x20,0x98,0x96,0x6f]
    200 // CHECK: fmulx	v0.2d, v1.2d, v2.d[1]   // encoding: [0x20,0x98,0xc2,0x6f]
    201 // CHECK: fmulx	v0.2d, v1.2d, v22.d[1]  // encoding: [0x20,0x98,0xd6,0x6f]
    202 
    203         smull v0.4s, v1.4h, v2.h[2]
    204         smull v0.2d, v1.2s, v2.s[2]
    205         smull v0.2d, v1.2s, v22.s[2]
    206         smull2 v0.4s, v1.8h, v2.h[2]
    207         smull2 v0.2d, v1.4s, v2.s[2]
    208         smull2 v0.2d, v1.4s, v22.s[2]
    209 
    210 // CHECK: smull	v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0xa0,0x62,0x0f]
    211 // CHECK: smull	v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0xa8,0x82,0x0f]
    212 // CHECK: smull	v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0xa8,0x96,0x0f]
    213 // CHECK: smull2	v0.4s, v1.8h, v2.h[2]   // encoding: [0x20,0xa0,0x62,0x4f]
    214 // CHECK: smull2	v0.2d, v1.4s, v2.s[2]   // encoding: [0x20,0xa8,0x82,0x4f]
    215 // CHECK: smull2	v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0xa8,0x96,0x4f]
    216 
    217         umull v0.4s, v1.4h, v2.h[2]
    218         umull v0.2d, v1.2s, v2.s[2]
    219         umull v0.2d, v1.2s, v22.s[2]
    220         umull2 v0.4s, v1.8h, v2.h[2]
    221         umull2 v0.2d, v1.4s, v2.s[2]
    222         umull2 v0.2d, v1.4s, v22.s[2]
    223 
    224 // CHECK: umull	v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0xa0,0x62,0x2f]
    225 // CHECK: umull	v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0xa8,0x82,0x2f]
    226 // CHECK: umull	v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0xa8,0x96,0x2f]
    227 // CHECK: umull2	v0.4s, v1.8h, v2.h[2]   // encoding: [0x20,0xa0,0x62,0x6f]
    228 // CHECK: umull2	v0.2d, v1.4s, v2.s[2]   // encoding: [0x20,0xa8,0x82,0x6f]
    229 // CHECK: umull2	v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0xa8,0x96,0x6f]
    230 
    231         sqdmull v0.4s, v1.4h, v2.h[2]
    232         sqdmull v0.2d, v1.2s, v2.s[2]
    233         sqdmull v0.2d, v1.2s, v22.s[2]
    234         sqdmull2 v0.4s, v1.8h, v2.h[2]
    235         sqdmull2 v0.2d, v1.4s, v2.s[2]
    236         sqdmull2 v0.2d, v1.4s, v22.s[2]
    237 
    238 // CHECK: sqdmull	v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0xb0,0x62,0x0f]
    239 // CHECK: sqdmull	v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0xb8,0x82,0x0f]
    240 // CHECK: sqdmull	v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0xb8,0x96,0x0f]
    241 // CHECK: sqdmull2	v0.4s, v1.8h, v2.h[2] // encoding: [0x20,0xb0,0x62,0x4f]
    242 // CHECK: sqdmull2	v0.2d, v1.4s, v2.s[2] // encoding: [0x20,0xb8,0x82,0x4f]
    243 // CHECK: sqdmull2	v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0xb8,0x96,0x4f]
    244 
    245         sqdmulh v0.4h, v1.4h, v2.h[2]
    246         sqdmulh v0.8h, v1.8h, v2.h[2]
    247         sqdmulh v0.2s, v1.2s, v2.s[2]
    248         sqdmulh v0.2s, v1.2s, v22.s[2]
    249         sqdmulh v0.4s, v1.4s, v2.s[2]
    250         sqdmulh v0.4s, v1.4s, v22.s[2]
    251 
    252 // CHECK: sqdmulh	v0.4h, v1.4h, v2.h[2]   // encoding: [0x20,0xc0,0x62,0x0f]
    253 // CHECK: sqdmulh	v0.8h, v1.8h, v2.h[2]   // encoding: [0x20,0xc0,0x62,0x4f]
    254 // CHECK: sqdmulh	v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0xc8,0x82,0x0f]
    255 // CHECK: sqdmulh	v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0xc8,0x96,0x0f]
    256 // CHECK: sqdmulh	v0.4s, v1.4s, v2.s[2]   // encoding: [0x20,0xc8,0x82,0x4f]
    257 // CHECK: sqdmulh	v0.4s, v1.4s, v22.s[2]  // encoding: [0x20,0xc8,0x96,0x4f]
    258 
    259         sqrdmulh v0.4h, v1.4h, v2.h[2]
    260         sqrdmulh v0.8h, v1.8h, v2.h[2]
    261         sqrdmulh v0.2s, v1.2s, v2.s[2]
    262         sqrdmulh v0.2s, v1.2s, v22.s[2]
    263         sqrdmulh v0.4s, v1.4s, v2.s[2]
    264         sqrdmulh v0.4s, v1.4s, v22.s[2]
    265 
    266 // CHECK: sqrdmulh	v0.4h, v1.4h, v2.h[2] // encoding: [0x20,0xd0,0x62,0x0f]
    267 // CHECK: sqrdmulh	v0.8h, v1.8h, v2.h[2] // encoding: [0x20,0xd0,0x62,0x4f]
    268 // CHECK: sqrdmulh	v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0xd8,0x82,0x0f]
    269 // CHECK: sqrdmulh	v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0xd8,0x96,0x0f]
    270 // CHECK: sqrdmulh	v0.4s, v1.4s, v2.s[2] // encoding: [0x20,0xd8,0x82,0x4f]
    271 // CHECK: sqrdmulh	v0.4s, v1.4s, v22.s[2] // encoding: [0x20,0xd8,0x96,0x4f]
    272