Home | History | Annotate | Download | only in AArch64
      1 ; RUN: not llvm-mc -triple arm64-apple-darwin -mattr=neon -show-encoding -output-asm-variant=1 < %s 2>%t | FileCheck %s
      2 ; RUN: FileCheck %s < %t --check-prefix=NO-FP16
      3 ; RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon,v8.2a,fullfp16 -show-encoding -output-asm-variant=1 < %s | FileCheck %s --check-prefix=CHECK --check-prefix=FP16
      4 
      5 foo:
      6 ;-----------------------------------------------------------------------------
      7 ; Floating-point arithmetic
      8 ;-----------------------------------------------------------------------------
      9 
     10   fabs h1, h2
     11   fabs s1, s2
     12   fabs d1, d2
     13 
     14 ; FP16:  fabs h1, h2                 ; encoding: [0x41,0xc0,0xe0,0x1e]
     15 ; NO-FP16: error: instruction requires:
     16 ; NO-FP16-NEXT:  fabs h1, h2
     17 ; CHECK: fabs s1, s2                 ; encoding: [0x41,0xc0,0x20,0x1e]
     18 ; CHECK: fabs d1, d2                 ; encoding: [0x41,0xc0,0x60,0x1e]
     19 
     20   fadd h1, h2, h3
     21   fadd s1, s2, s3
     22   fadd d1, d2, d3
     23 
     24 ; FP16:  fadd h1, h2, h3             ; encoding: [0x41,0x28,0xe3,0x1e]
     25 ; NO-FP16: error: instruction requires:
     26 ; NO-FP16-NEXT:  fadd h1, h2, h3
     27 ; CHECK: fadd s1, s2, s3             ; encoding: [0x41,0x28,0x23,0x1e]
     28 ; CHECK: fadd d1, d2, d3             ; encoding: [0x41,0x28,0x63,0x1e]
     29 
     30   fdiv h1, h2, h3
     31   fdiv s1, s2, s3
     32   fdiv d1, d2, d3
     33 
     34 ; FP16:  fdiv h1, h2, h3             ; encoding: [0x41,0x18,0xe3,0x1e]
     35 ; NO-FP16: error: instruction requires:
     36 ; NO-FP16-NEXT:  fdiv h1, h2, h3
     37 ; CHECK: fdiv s1, s2, s3             ; encoding: [0x41,0x18,0x23,0x1e]
     38 ; CHECK: fdiv d1, d2, d3             ; encoding: [0x41,0x18,0x63,0x1e]
     39 
     40   fmadd h1, h2, h3, h4
     41   fmadd s1, s2, s3, s4
     42   fmadd d1, d2, d3, d4
     43 
     44 ; FP16:  fmadd h1, h2, h3, h4        ; encoding: [0x41,0x10,0xc3,0x1f]
     45 ; NO-FP16: error: instruction requires:
     46 ; NO-FP16-NEXT:  fmadd h1, h2, h3, h4
     47 ; CHECK: fmadd s1, s2, s3, s4        ; encoding: [0x41,0x10,0x03,0x1f]
     48 ; CHECK: fmadd d1, d2, d3, d4        ; encoding: [0x41,0x10,0x43,0x1f]
     49 
     50   fmax   h1, h2, h3
     51   fmax   s1, s2, s3
     52   fmax   d1, d2, d3
     53   fmaxnm h1, h2, h3
     54   fmaxnm s1, s2, s3
     55   fmaxnm d1, d2, d3
     56 
     57 ; FP16:  fmax   h1, h2, h3           ; encoding: [0x41,0x48,0xe3,0x1e]
     58 ; NO-FP16: error: instruction requires:
     59 ; NO-FP16-NEXT: fmax   h1, h2, h3
     60 ; CHECK: fmax   s1, s2, s3           ; encoding: [0x41,0x48,0x23,0x1e]
     61 ; CHECK: fmax   d1, d2, d3           ; encoding: [0x41,0x48,0x63,0x1e]
     62 ; FP16:  fmaxnm h1, h2, h3           ; encoding: [0x41,0x68,0xe3,0x1e]
     63 ; NO-FP16: error: instruction requires:
     64 ; NO-FP16-NEXT: fmaxnm h1, h2, h3
     65 ; CHECK: fmaxnm s1, s2, s3           ; encoding: [0x41,0x68,0x23,0x1e]
     66 ; CHECK: fmaxnm d1, d2, d3           ; encoding: [0x41,0x68,0x63,0x1e]
     67 
     68   fmin   h1, h2, h3
     69   fmin   s1, s2, s3
     70   fmin   d1, d2, d3
     71   fminnm h1, h2, h3
     72   fminnm s1, s2, s3
     73   fminnm d1, d2, d3
     74 
     75 ; FP16:  fmin   h1, h2, h3           ; encoding: [0x41,0x58,0xe3,0x1e]
     76 ; NO-FP16: error: instruction requires:
     77 ; NO-FP16-NEXT: fmin   h1, h2, h3
     78 ; CHECK: fmin   s1, s2, s3           ; encoding: [0x41,0x58,0x23,0x1e]
     79 ; CHECK: fmin   d1, d2, d3           ; encoding: [0x41,0x58,0x63,0x1e]
     80 ; FP16:  fminnm h1, h2, h3           ; encoding: [0x41,0x78,0xe3,0x1e]
     81 ; NO-FP16: error: instruction requires:
     82 ; NO-FP16-NEXT: fminnm h1, h2, h3
     83 ; CHECK: fminnm s1, s2, s3           ; encoding: [0x41,0x78,0x23,0x1e]
     84 ; CHECK: fminnm d1, d2, d3           ; encoding: [0x41,0x78,0x63,0x1e]
     85 
     86   fmsub h1, h2, h3, h4
     87   fmsub s1, s2, s3, s4
     88   fmsub d1, d2, d3, d4
     89 
     90 ; FP16:  fmsub h1, h2, h3, h4        ; encoding: [0x41,0x90,0xc3,0x1f]
     91 ; NO-FP16: error: instruction requires:
     92 ; NO-FP16-NEXT: fmsub h1, h2, h3, h4
     93 ; CHECK: fmsub s1, s2, s3, s4        ; encoding: [0x41,0x90,0x03,0x1f]
     94 ; CHECK: fmsub d1, d2, d3, d4        ; encoding: [0x41,0x90,0x43,0x1f]
     95 
     96   fmul h1, h2, h3
     97   fmul s1, s2, s3
     98   fmul d1, d2, d3
     99 
    100 ; FP16:  fmul h1, h2, h3             ; encoding: [0x41,0x08,0xe3,0x1e]
    101 ; NO-FP16: error: instruction requires:
    102 ; NO-FP16-NEXT: fmul h1, h2, h3
    103 ; CHECK: fmul s1, s2, s3             ; encoding: [0x41,0x08,0x23,0x1e]
    104 ; CHECK: fmul d1, d2, d3             ; encoding: [0x41,0x08,0x63,0x1e]
    105 
    106   fneg h1, h2
    107   fneg s1, s2
    108   fneg d1, d2
    109 
    110 ; FP16:  fneg h1, h2                 ; encoding: [0x41,0x40,0xe1,0x1e]
    111 ; NO-FP16: error: instruction requires:
    112 ; NO-FP16-NEXT: fneg h1, h2
    113 ; CHECK: fneg s1, s2                 ; encoding: [0x41,0x40,0x21,0x1e]
    114 ; CHECK: fneg d1, d2                 ; encoding: [0x41,0x40,0x61,0x1e]
    115 
    116   fnmadd h1, h2, h3, h4
    117   fnmadd s1, s2, s3, s4
    118   fnmadd d1, d2, d3, d4
    119 
    120 ; FP16:  fnmadd h1, h2, h3, h4       ; encoding: [0x41,0x10,0xe3,0x1f]
    121 ; NO-FP16: error: instruction requires:
    122 ; NO-FP16-NEXT: fnmadd h1, h2, h3, h4
    123 ; CHECK: fnmadd s1, s2, s3, s4       ; encoding: [0x41,0x10,0x23,0x1f]
    124 ; CHECK: fnmadd d1, d2, d3, d4       ; encoding: [0x41,0x10,0x63,0x1f]
    125 
    126   fnmsub h1, h2, h3, h4
    127   fnmsub s1, s2, s3, s4
    128   fnmsub d1, d2, d3, d4
    129 
    130 ; FP16:  fnmsub h1, h2, h3, h4       ; encoding: [0x41,0x90,0xe3,0x1f]
    131 ; NO-FP16: error: instruction requires:
    132 ; NO-FP16-NEXT: fnmsub h1, h2, h3, h4
    133 ; CHECK: fnmsub s1, s2, s3, s4       ; encoding: [0x41,0x90,0x23,0x1f]
    134 ; CHECK: fnmsub d1, d2, d3, d4       ; encoding: [0x41,0x90,0x63,0x1f]
    135 
    136   fnmul h1, h2, h3
    137   fnmul s1, s2, s3
    138   fnmul d1, d2, d3
    139 
    140 ; FP16:  fnmul h1, h2, h3            ; encoding: [0x41,0x88,0xe3,0x1e]
    141 ; NO-FP16: error: instruction requires:
    142 ; NO-FP16-NEXT: fnmul h1, h2, h3
    143 ; CHECK: fnmul s1, s2, s3            ; encoding: [0x41,0x88,0x23,0x1e]
    144 ; CHECK: fnmul d1, d2, d3            ; encoding: [0x41,0x88,0x63,0x1e]
    145 
    146   fsqrt h1, h2
    147   fsqrt s1, s2
    148   fsqrt d1, d2
    149 
    150 ; FP16:  fsqrt h1, h2                ; encoding: [0x41,0xc0,0xe1,0x1e]
    151 ; NO-FP16: error: instruction requires:
    152 ; NO-FP16-NEXT: fsqrt h1, h2
    153 ; CHECK: fsqrt s1, s2                ; encoding: [0x41,0xc0,0x21,0x1e]
    154 ; CHECK: fsqrt d1, d2                ; encoding: [0x41,0xc0,0x61,0x1e]
    155 
    156   fsub h1, h2, h3
    157   fsub s1, s2, s3
    158   fsub d1, d2, d3
    159 
    160 ; FP16:  fsub h1, h2, h3             ; encoding: [0x41,0x38,0xe3,0x1e]
    161 ; NO-FP16: error: instruction requires:
    162 ; NO-FP16-NEXT: fsub h1, h2, h3
    163 ; CHECK: fsub s1, s2, s3             ; encoding: [0x41,0x38,0x23,0x1e]
    164 ; CHECK: fsub d1, d2, d3             ; encoding: [0x41,0x38,0x63,0x1e]
    165 
    166 ;-----------------------------------------------------------------------------
    167 ; Floating-point comparison
    168 ;-----------------------------------------------------------------------------
    169 
    170   fccmp  h1, h2, #0, eq
    171   fccmp  s1, s2, #0, eq
    172   fccmp  d1, d2, #0, eq
    173   fccmpe h1, h2, #0, eq
    174   fccmpe s1, s2, #0, eq
    175   fccmpe d1, d2, #0, eq
    176 
    177 ; FP16:  fccmp  h1, h2, #0, eq       ; encoding: [0x20,0x04,0xe2,0x1e]
    178 ; NO-FP16: error: instruction requires:
    179 ; NO-FP16-NEXT: fccmp  h1, h2, #0, eq
    180 ; CHECK: fccmp  s1, s2, #0, eq       ; encoding: [0x20,0x04,0x22,0x1e]
    181 ; CHECK: fccmp  d1, d2, #0, eq       ; encoding: [0x20,0x04,0x62,0x1e]
    182 ; FP16:  fccmpe h1, h2, #0, eq       ; encoding: [0x30,0x04,0xe2,0x1e]
    183 ; NO-FP16: error: instruction requires:
    184 ; NO-FP16-NEXT: fccmpe h1, h2, #0, eq
    185 ; CHECK: fccmpe s1, s2, #0, eq       ; encoding: [0x30,0x04,0x22,0x1e]
    186 ; CHECK: fccmpe d1, d2, #0, eq       ; encoding: [0x30,0x04,0x62,0x1e]
    187 
    188   fcmp  h1, h2
    189   fcmp  s1, s2
    190   fcmp  d1, d2
    191   fcmp  h1, #0.0
    192   fcmp  s1, #0.0
    193   fcmp  d1, #0.0
    194   fcmpe h1, h2
    195   fcmpe s1, s2
    196   fcmpe d1, d2
    197   fcmpe h1, #0.0
    198   fcmpe s1, #0.0
    199   fcmpe d1, #0.0
    200 
    201 ; FP16:  fcmp  h1, h2                ; encoding: [0x20,0x20,0xe2,0x1e]
    202 ; NO-FP16: error: instruction requires:
    203 ; NO-FP16-NEXT: fcmp  h1, h2
    204 ; CHECK: fcmp  s1, s2                ; encoding: [0x20,0x20,0x22,0x1e]
    205 ; CHECK: fcmp  d1, d2                ; encoding: [0x20,0x20,0x62,0x1e]
    206 ; FP16:  fcmp  h1, #0.0              ; encoding: [0x28,0x20,0xe0,0x1e]
    207 ; NO-FP16: error: instruction requires:
    208 ; NO-FP16-NEXT: fcmp  h1, #0.0
    209 ; CHECK: fcmp  s1, #0.0              ; encoding: [0x28,0x20,0x20,0x1e]
    210 ; CHECK: fcmp  d1, #0.0              ; encoding: [0x28,0x20,0x60,0x1e]
    211 ; FP16:  fcmpe h1, h2                ; encoding: [0x30,0x20,0xe2,0x1e]
    212 ; NO-FP16: error: instruction requires:
    213 ; NO-FP16-NEXT: fcmpe h1, h2
    214 ; CHECK: fcmpe s1, s2                ; encoding: [0x30,0x20,0x22,0x1e]
    215 ; CHECK: fcmpe d1, d2                ; encoding: [0x30,0x20,0x62,0x1e]
    216 ; FP16:  fcmpe h1, #0.0              ; encoding: [0x38,0x20,0xe0,0x1e]
    217 ; NO-FP16: error: instruction requires:
    218 ; NO-FP16-NEXT: fcmpe h1, #0.0
    219 ; CHECK: fcmpe s1, #0.0              ; encoding: [0x38,0x20,0x20,0x1e]
    220 ; CHECK: fcmpe d1, #0.0              ; encoding: [0x38,0x20,0x60,0x1e]
    221 
    222 ;-----------------------------------------------------------------------------
    223 ; Floating-point conditional select
    224 ;-----------------------------------------------------------------------------
    225 
    226   fcsel h1, h2, h3, eq
    227   fcsel s1, s2, s3, eq
    228   fcsel d1, d2, d3, eq
    229 
    230 ; FP16:  fcsel h1, h2, h3, eq        ; encoding: [0x41,0x0c,0xe3,0x1e]
    231 ; NO-FP16: error: instruction requires:
    232 ; NO-FP16-NEXT: fcsel h1, h2, h3, eq
    233 ; CHECK: fcsel s1, s2, s3, eq        ; encoding: [0x41,0x0c,0x23,0x1e]
    234 ; CHECK: fcsel d1, d2, d3, eq        ; encoding: [0x41,0x0c,0x63,0x1e]
    235 
    236 ;-----------------------------------------------------------------------------
    237 ; Floating-point convert
    238 ;-----------------------------------------------------------------------------
    239 
    240   fcvt h1, d2
    241   fcvt s1, d2
    242   fcvt d1, h2
    243   fcvt s1, h2
    244   fcvt d1, s2
    245   fcvt h1, s2
    246 
    247 ; CHECK: fcvt h1, d2                 ; encoding: [0x41,0xc0,0x63,0x1e]
    248 ; CHECK: fcvt s1, d2                 ; encoding: [0x41,0x40,0x62,0x1e]
    249 ; CHECK: fcvt d1, h2                 ; encoding: [0x41,0xc0,0xe2,0x1e]
    250 ; CHECK: fcvt s1, h2                 ; encoding: [0x41,0x40,0xe2,0x1e]
    251 ; CHECK: fcvt d1, s2                 ; encoding: [0x41,0xc0,0x22,0x1e]
    252 ; CHECK: fcvt h1, s2                 ; encoding: [0x41,0xc0,0x23,0x1e]
    253 
    254   fcvtas w1, d2
    255   fcvtas x1, d2
    256   fcvtas w1, s2
    257   fcvtas x1, s2
    258   fcvtas w1, h2
    259   fcvtas x1, h2
    260 
    261 ; CHECK: fcvtas w1, d2                  ; encoding: [0x41,0x00,0x64,0x1e]
    262 ; CHECK: fcvtas x1, d2                  ; encoding: [0x41,0x00,0x64,0x9e]
    263 ; CHECK: fcvtas w1, s2                  ; encoding: [0x41,0x00,0x24,0x1e]
    264 ; CHECK: fcvtas x1, s2                  ; encoding: [0x41,0x00,0x24,0x9e]
    265 ; FP16:  fcvtas w1, h2                  ; encoding: [0x41,0x00,0xe4,0x1e]
    266 ; NO-FP16: error: instruction requires:
    267 ; NO-FP16-NEXT: fcvtas  w1, h2
    268 ; FP16:  fcvtas x1, h2                  ; encoding: [0x41,0x00,0xe4,0x9e]
    269 ; NO-FP16: error: instruction requires:
    270 ; NO-FP16-NEXT: fcvtas  x1, h2
    271 
    272   fcvtau w1, h2
    273   fcvtau w1, s2
    274   fcvtau w1, d2
    275   fcvtau x1, h2
    276   fcvtau x1, s2
    277   fcvtau x1, d2
    278 
    279 ; FP16:  fcvtau w1, h2                  ; encoding: [0x41,0x00,0xe5,0x1e]
    280 ; NO-FP16: error: instruction requires:
    281 ; NO-FP16-NEXT: fcvtau  w1, h2
    282 ; CHECK: fcvtau w1, s2                  ; encoding: [0x41,0x00,0x25,0x1e]
    283 ; CHECK: fcvtau w1, d2                  ; encoding: [0x41,0x00,0x65,0x1e]
    284 ; FP16:  fcvtau x1, h2                  ; encoding: [0x41,0x00,0xe5,0x9e]
    285 ; NO-FP16: error: instruction requires:
    286 ; NO-FP16-NEXT: fcvtau  x1, h2
    287 ; CHECK: fcvtau x1, s2                  ; encoding: [0x41,0x00,0x25,0x9e]
    288 ; CHECK: fcvtau x1, d2                  ; encoding: [0x41,0x00,0x65,0x9e]
    289 
    290   fcvtms w1, h2
    291   fcvtms w1, s2
    292   fcvtms w1, d2
    293   fcvtms x1, h2
    294   fcvtms x1, s2
    295   fcvtms x1, d2
    296 
    297 ; FP16:  fcvtms w1, h2                  ; encoding: [0x41,0x00,0xf0,0x1e]
    298 ; NO-FP16: error: instruction requires:
    299 ; NO-FP16-NEXT: fcvtms  w1, h2
    300 ; CHECK: fcvtms w1, s2                  ; encoding: [0x41,0x00,0x30,0x1e]
    301 ; CHECK: fcvtms w1, d2                  ; encoding: [0x41,0x00,0x70,0x1e]
    302 ; FP16:  fcvtms x1, h2                  ; encoding: [0x41,0x00,0xf0,0x9e]
    303 ; NO-FP16: error: instruction requires:
    304 ; NO-FP16-NEXT: fcvtms  x1, h2
    305 ; CHECK: fcvtms x1, s2                  ; encoding: [0x41,0x00,0x30,0x9e]
    306 ; CHECK: fcvtms x1, d2                  ; encoding: [0x41,0x00,0x70,0x9e]
    307 
    308   fcvtmu w1, h2
    309   fcvtmu w1, s2
    310   fcvtmu w1, d2
    311   fcvtmu x1, h2
    312   fcvtmu x1, s2
    313   fcvtmu x1, d2
    314 
    315 ; FP16:  fcvtmu w1, h2                  ; encoding: [0x41,0x00,0xf1,0x1e]
    316 ; NO-FP16: error: instruction requires:
    317 ; NO-FP16-NEXT: fcvtmu  w1, h2
    318 ; CHECK: fcvtmu w1, s2                  ; encoding: [0x41,0x00,0x31,0x1e]
    319 ; CHECK: fcvtmu w1, d2                  ; encoding: [0x41,0x00,0x71,0x1e]
    320 ; FP16:  fcvtmu x1, h2                  ; encoding: [0x41,0x00,0xf1,0x9e]
    321 ; NO-FP16: error: instruction requires:
    322 ; NO-FP16-NEXT: fcvtmu  x1, h2
    323 ; CHECK: fcvtmu x1, s2                  ; encoding: [0x41,0x00,0x31,0x9e]
    324 ; CHECK: fcvtmu x1, d2                  ; encoding: [0x41,0x00,0x71,0x9e]
    325 
    326   fcvtns w1, h2
    327   fcvtns w1, s2
    328   fcvtns w1, d2
    329   fcvtns x1, h2
    330   fcvtns x1, s2
    331   fcvtns x1, d2
    332 
    333 ; FP16:  fcvtns w1, h2                  ; encoding: [0x41,0x00,0xe0,0x1e]
    334 ; NO-FP16: error: instruction requires:
    335 ; NO-FP16-NEXT: fcvtns  w1, h2
    336 ; CHECK: fcvtns w1, s2                  ; encoding: [0x41,0x00,0x20,0x1e]
    337 ; CHECK: fcvtns w1, d2                  ; encoding: [0x41,0x00,0x60,0x1e]
    338 ; FP16:  fcvtns x1, h2                  ; encoding: [0x41,0x00,0xe0,0x9e]
    339 ; NO-FP16: error: instruction requires:
    340 ; NO-FP16-NEXT: fcvtns  x1, h2
    341 ; CHECK: fcvtns x1, s2                  ; encoding: [0x41,0x00,0x20,0x9e]
    342 ; CHECK: fcvtns x1, d2                  ; encoding: [0x41,0x00,0x60,0x9e]
    343 
    344   fcvtnu w1, h2
    345   fcvtnu w1, s2
    346   fcvtnu w1, d2
    347   fcvtnu x1, h2
    348   fcvtnu x1, s2
    349   fcvtnu x1, d2
    350 
    351 ; FP16:  fcvtnu w1, h2                  ; encoding: [0x41,0x00,0xe1,0x1e]
    352 ; NO-FP16: error: instruction requires:
    353 ; NO-FP16-NEXT: fcvtnu  w1, h2
    354 ; CHECK: fcvtnu w1, s2                  ; encoding: [0x41,0x00,0x21,0x1e]
    355 ; CHECK: fcvtnu w1, d2                  ; encoding: [0x41,0x00,0x61,0x1e]
    356 ; FP16:  fcvtnu x1, h2                  ; encoding: [0x41,0x00,0xe1,0x9e]
    357 ; NO-FP16: error: instruction requires:
    358 ; NO-FP16-NEXT: fcvtnu  x1, h2
    359 ; CHECK: fcvtnu x1, s2                  ; encoding: [0x41,0x00,0x21,0x9e]
    360 ; CHECK: fcvtnu x1, d2                  ; encoding: [0x41,0x00,0x61,0x9e]
    361 
    362   fcvtps w1, h2
    363   fcvtps w1, s2
    364   fcvtps w1, d2
    365   fcvtps x1, h2
    366   fcvtps x1, s2
    367   fcvtps x1, d2
    368 
    369 ; FP16:  fcvtps w1, h2                  ; encoding: [0x41,0x00,0xe8,0x1e]
    370 ; NO-FP16: error: instruction requires:
    371 ; NO-FP16-NEXT: fcvtps  w1, h2
    372 ; CHECK: fcvtps w1, s2                  ; encoding: [0x41,0x00,0x28,0x1e]
    373 ; CHECK: fcvtps w1, d2                  ; encoding: [0x41,0x00,0x68,0x1e]
    374 ; FP16:  fcvtps x1, h2                  ; encoding: [0x41,0x00,0xe8,0x9e]
    375 ; NO-FP16: error: instruction requires:
    376 ; NO-FP16-NEXT: fcvtps  x1, h2
    377 ; CHECK: fcvtps x1, s2                  ; encoding: [0x41,0x00,0x28,0x9e]
    378 ; CHECK: fcvtps x1, d2                  ; encoding: [0x41,0x00,0x68,0x9e]
    379 
    380   fcvtpu w1, h2
    381   fcvtpu w1, s2
    382   fcvtpu w1, d2
    383   fcvtpu x1, h2
    384   fcvtpu x1, s2
    385   fcvtpu x1, d2
    386 
    387 ; FP16:  fcvtpu w1, h2                  ; encoding: [0x41,0x00,0xe9,0x1e]
    388 ; NO-FP16: error: instruction requires:
    389 ; NO-FP16-NEXT: fcvtpu  w1, h2
    390 ; CHECK: fcvtpu w1, s2                  ; encoding: [0x41,0x00,0x29,0x1e]
    391 ; CHECK: fcvtpu w1, d2                  ; encoding: [0x41,0x00,0x69,0x1e]
    392 ; FP16:  fcvtpu x1, h2                  ; encoding: [0x41,0x00,0xe9,0x9e]
    393 ; NO-FP16: error: instruction requires:
    394 ; NO-FP16-NEXT: fcvtpu  x1, h2
    395 ; CHECK: fcvtpu x1, s2                  ; encoding: [0x41,0x00,0x29,0x9e]
    396 ; CHECK: fcvtpu x1, d2                  ; encoding: [0x41,0x00,0x69,0x9e]
    397 
    398   fcvtzs w1, h2
    399   fcvtzs w1, h2, #1
    400   fcvtzs w1, s2
    401   fcvtzs w1, s2, #1
    402   fcvtzs w1, d2
    403   fcvtzs w1, d2, #1
    404   fcvtzs x1, h2
    405   fcvtzs x1, h2, #1
    406   fcvtzs x1, s2
    407   fcvtzs x1, s2, #1
    408   fcvtzs x1, d2
    409   fcvtzs x1, d2, #1
    410 
    411 ; FP16:  fcvtzs w1, h2                  ; encoding: [0x41,0x00,0xf8,0x1e]
    412 ; NO-FP16: error: instruction requires:
    413 ; NO-FP16-NEXT: fcvtzs  w1, h2
    414 ; FP16:  fcvtzs w1, h2, #1              ; encoding: [0x41,0xfc,0xd8,0x1e]
    415 ; NO-FP16: error: instruction requires:
    416 ; NO-FP16-NEXT: fcvtzs  w1, h2, #1
    417 ; CHECK: fcvtzs w1, s2                  ; encoding: [0x41,0x00,0x38,0x1e]
    418 ; CHECK: fcvtzs w1, s2, #1              ; encoding: [0x41,0xfc,0x18,0x1e]
    419 ; CHECK: fcvtzs w1, d2                  ; encoding: [0x41,0x00,0x78,0x1e]
    420 ; CHECK: fcvtzs w1, d2, #1              ; encoding: [0x41,0xfc,0x58,0x1e]
    421 ; FP16:  fcvtzs x1, h2                  ; encoding: [0x41,0x00,0xf8,0x9e]
    422 ; NO-FP16: error: instruction requires:
    423 ; NO-FP16-NEXT: fcvtzs  x1, h2
    424 ; FP16:  fcvtzs x1, h2, #1              ; encoding: [0x41,0xfc,0xd8,0x9e]
    425 ; NO-FP16: error: instruction requires:
    426 ; NO-FP16-NEXT: fcvtzs  x1, h2, #1
    427 ; CHECK: fcvtzs x1, s2                  ; encoding: [0x41,0x00,0x38,0x9e]
    428 ; CHECK: fcvtzs x1, s2, #1              ; encoding: [0x41,0xfc,0x18,0x9e]
    429 ; CHECK: fcvtzs x1, d2                  ; encoding: [0x41,0x00,0x78,0x9e]
    430 ; CHECK: fcvtzs x1, d2, #1              ; encoding: [0x41,0xfc,0x58,0x9e]
    431 
    432   fcvtzu w1, h2
    433   fcvtzu w1, h2, #1
    434   fcvtzu w1, s2
    435   fcvtzu w1, s2, #1
    436   fcvtzu w1, d2
    437   fcvtzu w1, d2, #1
    438   fcvtzu x1, h2
    439   fcvtzu x1, h2, #1
    440   fcvtzu x1, s2
    441   fcvtzu x1, s2, #1
    442   fcvtzu x1, d2
    443   fcvtzu x1, d2, #1
    444 
    445 ; FP16:  fcvtzu w1, h2                  ; encoding: [0x41,0x00,0xf9,0x1e]
    446 ; NO-FP16: error: instruction requires:
    447 ; NO-FP16-NEXT: fcvtzu  w1, h2
    448 ; FP16:  fcvtzu w1, h2, #1              ; encoding: [0x41,0xfc,0xd9,0x1e]
    449 ; NO-FP16: error: instruction requires:
    450 ; NO-FP16-NEXT: fcvtzu  w1, h2, #1
    451 ; CHECK: fcvtzu w1, s2                  ; encoding: [0x41,0x00,0x39,0x1e]
    452 ; CHECK: fcvtzu w1, s2, #1              ; encoding: [0x41,0xfc,0x19,0x1e]
    453 ; CHECK: fcvtzu w1, d2                  ; encoding: [0x41,0x00,0x79,0x1e]
    454 ; CHECK: fcvtzu w1, d2, #1              ; encoding: [0x41,0xfc,0x59,0x1e]
    455 ; FP16:  fcvtzu x1, h2                  ; encoding: [0x41,0x00,0xf9,0x9e]
    456 ; NO-FP16: error: instruction requires:
    457 ; NO-FP16-NEXT: fcvtzu  x1, h2
    458 ; FP16:  fcvtzu x1, h2, #1              ; encoding: [0x41,0xfc,0xd9,0x9e]
    459 ; NO-FP16: error: instruction requires:
    460 ; NO-FP16-NEXT: fcvtzu  x1, h2, #1
    461 ; CHECK: fcvtzu x1, s2                  ; encoding: [0x41,0x00,0x39,0x9e]
    462 ; CHECK: fcvtzu x1, s2, #1              ; encoding: [0x41,0xfc,0x19,0x9e]
    463 ; CHECK: fcvtzu x1, d2                  ; encoding: [0x41,0x00,0x79,0x9e]
    464 ; CHECK: fcvtzu x1, d2, #1              ; encoding: [0x41,0xfc,0x59,0x9e]
    465 
    466   scvtf h1, w2
    467   scvtf h1, w2, #1
    468   scvtf s1, w2
    469   scvtf s1, w2, #1
    470   scvtf d1, w2
    471   scvtf d1, w2, #1
    472   scvtf h1, x2
    473   scvtf h1, x2, #1
    474   scvtf s1, x2
    475   scvtf s1, x2, #1
    476   scvtf d1, x2
    477   scvtf d1, x2, #1
    478 
    479 ; FP16:  scvtf  h1, w2                  ; encoding: [0x41,0x00,0xe2,0x1e]
    480 ; NO-FP16: error: instruction requires:
    481 ; NO-FP16-NEXT: scvtf h1, w2
    482 ; FP16:  scvtf  h1, w2, #1              ; encoding: [0x41,0xfc,0xc2,0x1e]
    483 ; NO-FP16: error: instruction requires:
    484 ; NO-FP16-NEXT: scvtf h1, w2, #1
    485 ; CHECK: scvtf  s1, w2                  ; encoding: [0x41,0x00,0x22,0x1e]
    486 ; CHECK: scvtf  s1, w2, #1              ; encoding: [0x41,0xfc,0x02,0x1e]
    487 ; CHECK: scvtf  d1, w2                  ; encoding: [0x41,0x00,0x62,0x1e]
    488 ; CHECK: scvtf  d1, w2, #1              ; encoding: [0x41,0xfc,0x42,0x1e]
    489 ; FP16:  scvtf  h1, x2                  ; encoding: [0x41,0x00,0xe2,0x9e]
    490 ; NO-FP16: error: instruction requires:
    491 ; NO-FP16-NEXT: scvtf h1, x2
    492 ; FP16:  scvtf  h1, x2, #1              ; encoding: [0x41,0xfc,0xc2,0x9e]
    493 ; NO-FP16: error: instruction requires:
    494 ; NO-FP16-NEXT: scvtf h1, x2, #1
    495 ; CHECK: scvtf  s1, x2                  ; encoding: [0x41,0x00,0x22,0x9e]
    496 ; CHECK: scvtf  s1, x2, #1              ; encoding: [0x41,0xfc,0x02,0x9e]
    497 ; CHECK: scvtf  d1, x2                  ; encoding: [0x41,0x00,0x62,0x9e]
    498 ; CHECK: scvtf  d1, x2, #1              ; encoding: [0x41,0xfc,0x42,0x9e]
    499 
    500   ucvtf h1, w2
    501   ucvtf h1, w2, #1
    502   ucvtf s1, w2
    503   ucvtf s1, w2, #1
    504   ucvtf d1, w2
    505   ucvtf d1, w2, #1
    506   ucvtf h1, x2
    507   ucvtf h1, x2, #1
    508   ucvtf s1, x2
    509   ucvtf s1, x2, #1
    510   ucvtf d1, x2
    511   ucvtf d1, x2, #1
    512 
    513 ; FP16:  ucvtf  h1, w2                  ; encoding: [0x41,0x00,0xe3,0x1e]
    514 ; NO-FP16: error: instruction requires:
    515 ; NO-FP16-NEXT: ucvtf h1, w2
    516 ; FP16:  ucvtf  h1, w2, #1              ; encoding: [0x41,0xfc,0xc3,0x1e]
    517 ; NO-FP16: error: instruction requires:
    518 ; NO-FP16-NEXT: ucvtf h1, w2, #1
    519 ; CHECK: ucvtf  s1, w2                  ; encoding: [0x41,0x00,0x23,0x1e]
    520 ; CHECK: ucvtf  s1, w2, #1              ; encoding: [0x41,0xfc,0x03,0x1e]
    521 ; CHECK: ucvtf  d1, w2                  ; encoding: [0x41,0x00,0x63,0x1e]
    522 ; CHECK: ucvtf  d1, w2, #1              ; encoding: [0x41,0xfc,0x43,0x1e]
    523 ; FP16:  ucvtf  h1, x2                  ; encoding: [0x41,0x00,0xe3,0x9e]
    524 ; NO-FP16: error: instruction requires:
    525 ; NO-FP16-NEXT: ucvtf h1, x2
    526 ; FP16:  ucvtf  h1, x2, #1              ; encoding: [0x41,0xfc,0xc3,0x9e]
    527 ; NO-FP16: error: instruction requires:
    528 ; NO-FP16-NEXT: ucvtf h1, x2, #1
    529 ; CHECK: ucvtf  s1, x2                  ; encoding: [0x41,0x00,0x23,0x9e]
    530 ; CHECK: ucvtf  s1, x2, #1              ; encoding: [0x41,0xfc,0x03,0x9e]
    531 ; CHECK: ucvtf  d1, x2                  ; encoding: [0x41,0x00,0x63,0x9e]
    532 ; CHECK: ucvtf  d1, x2, #1              ; encoding: [0x41,0xfc,0x43,0x9e]
    533 
    534 ;-----------------------------------------------------------------------------
    535 ; Floating-point move
    536 ;-----------------------------------------------------------------------------
    537 
    538   fmov h1, w2
    539   fmov w1, h2
    540   fmov h1, x2
    541   fmov x1, h2
    542   fmov s1, w2
    543   fmov w1, s2
    544   fmov d1, x2
    545   fmov x1, d2
    546 
    547 ; FP16:  fmov h1, w2                 ; encoding: [0x41,0x00,0xe7,0x1e]
    548 ; NO-FP16: error: instruction requires:
    549 ; NO-FP16-NEXT: fmov h1, w2
    550 ; FP16:  fmov w1, h2                 ; encoding: [0x41,0x00,0xe6,0x1e]
    551 ; NO-FP16: error: instruction requires:
    552 ; NO-FP16-NEXT: fmov w1, h2
    553 ; FP16:  fmov h1, x2                 ; encoding: [0x41,0x00,0xe7,0x9e]
    554 ; NO-FP16: error: instruction requires:
    555 ; NO-FP16-NEXT: fmov h1, x2
    556 ; FP16:  fmov x1, h2                 ; encoding: [0x41,0x00,0xe6,0x9e]
    557 ; NO-FP16: error: instruction requires:
    558 ; NO-FP16-NEXT: fmov x1, h2
    559 ; CHECK: fmov s1, w2                 ; encoding: [0x41,0x00,0x27,0x1e]
    560 ; CHECK: fmov w1, s2                 ; encoding: [0x41,0x00,0x26,0x1e]
    561 ; CHECK: fmov d1, x2                 ; encoding: [0x41,0x00,0x67,0x9e]
    562 ; CHECK: fmov x1, d2                 ; encoding: [0x41,0x00,0x66,0x9e]
    563 
    564   fmov h1, #0.125
    565   fmov h1, #0x40
    566   fmov s1, #0.125
    567   fmov s1, #0x40
    568   fmov d1, #0.125
    569   fmov d1, #0x40
    570   fmov d1, #-4.843750e-01
    571   fmov d1, #4.843750e-01
    572   fmov d3, #3
    573   fmov h2, #0.0
    574   fmov s2, #0.0
    575   fmov d2, #0.0
    576 
    577 ; FP16:  fmov h1, #0.12500000      ; encoding: [0x01,0x10,0xe8,0x1e]
    578 ; NO-FP16: error: instruction requires:
    579 ; NO-FP16-NEXT: fmov h1, #0.125
    580 ; FP16:  fmov h1, #0.12500000      ; encoding: [0x01,0x10,0xe8,0x1e]
    581 ; NO-FP16: error: instruction requires:
    582 ; NO-FP16-NEXT: fmov h1, #0x40
    583 ; CHECK: fmov s1, #0.12500000      ; encoding: [0x01,0x10,0x28,0x1e]
    584 ; CHECK: fmov s1, #0.12500000      ; encoding: [0x01,0x10,0x28,0x1e]
    585 ; CHECK: fmov d1, #0.12500000      ; encoding: [0x01,0x10,0x68,0x1e]
    586 ; CHECK: fmov d1, #0.12500000      ; encoding: [0x01,0x10,0x68,0x1e]
    587 ; CHECK: fmov d1, #-0.48437500     ; encoding: [0x01,0xf0,0x7b,0x1e]
    588 ; CHECK: fmov d1, #0.48437500      ; encoding: [0x01,0xf0,0x6b,0x1e]
    589 ; CHECK: fmov d3, #3.00000000      ; encoding: [0x03,0x10,0x61,0x1e]
    590 ; FP16:  fmov h2, wzr                ; encoding: [0xe2,0x03,0xe7,0x1e]
    591 ; NO-FP16: error: instruction requires:
    592 ; NO-FP16-NEXT: fmov h2, #0.0
    593 ; CHECK: fmov s2, wzr                ; encoding: [0xe2,0x03,0x27,0x1e]
    594 ; CHECK: fmov d2, xzr                ; encoding: [0xe2,0x03,0x67,0x9e]
    595 
    596   fmov h1, h2
    597   fmov s1, s2
    598   fmov d1, d2
    599 
    600 ; FP16:  fmov h1, h2                 ; encoding: [0x41,0x40,0xe0,0x1e]
    601 ; NO-FP16: error: instruction requires:
    602 ; NO-FP16-NEXT: fmov h1, h2
    603 ; CHECK: fmov s1, s2                 ; encoding: [0x41,0x40,0x20,0x1e]
    604 ; CHECK: fmov d1, d2                 ; encoding: [0x41,0x40,0x60,0x1e]
    605 
    606 
    607   fmov x2, v5.d[1]
    608   fmov.d x9, v7[1]
    609   fmov v1.d[1], x1
    610   fmov.d v8[1], x6
    611 
    612 ; CHECK: fmov.d x2, v5[1]               ; encoding: [0xa2,0x00,0xae,0x9e]
    613 ; CHECK: fmov.d x9, v7[1]               ; encoding: [0xe9,0x00,0xae,0x9e]
    614 ; CHECK: fmov.d v1[1], x1               ; encoding: [0x21,0x00,0xaf,0x9e]
    615 ; CHECK: fmov.d v8[1], x6               ; encoding: [0xc8,0x00,0xaf,0x9e]
    616 
    617 
    618 ;-----------------------------------------------------------------------------
    619 ; Floating-point round to integral
    620 ;-----------------------------------------------------------------------------
    621 
    622   frinta h1, h2
    623   frinta s1, s2
    624   frinta d1, d2
    625 
    626 ; FP16:  frinta h1, h2               ; encoding: [0x41,0x40,0xe6,0x1e]
    627 ; NO-FP16: error: instruction requires:
    628 ; NO-FP16-NEXT: frinta h1, h2
    629 ; CHECK: frinta s1, s2               ; encoding: [0x41,0x40,0x26,0x1e]
    630 ; CHECK: frinta d1, d2               ; encoding: [0x41,0x40,0x66,0x1e]
    631 
    632   frinti h1, h2
    633   frinti s1, s2
    634   frinti d1, d2
    635 
    636 ; FP16:  frinti h1, h2               ; encoding: [0x41,0xc0,0xe7,0x1e]
    637 ; NO-FP16: error: instruction requires:
    638 ; NO-FP16-NEXT: frinti h1, h2
    639 ; CHECK: frinti s1, s2               ; encoding: [0x41,0xc0,0x27,0x1e]
    640 ; CHECK: frinti d1, d2               ; encoding: [0x41,0xc0,0x67,0x1e]
    641 
    642   frintm h1, h2
    643   frintm s1, s2
    644   frintm d1, d2
    645 
    646 ; FP16:  frintm h1, h2               ; encoding: [0x41,0x40,0xe5,0x1e]
    647 ; NO-FP16: error: instruction requires:
    648 ; NO-FP16-NEXT: frintm h1, h2
    649 ; CHECK: frintm s1, s2               ; encoding: [0x41,0x40,0x25,0x1e]
    650 ; CHECK: frintm d1, d2               ; encoding: [0x41,0x40,0x65,0x1e]
    651 
    652   frintn h1, h2
    653   frintn s1, s2
    654   frintn d1, d2
    655 
    656 ; FP16:  frintn h1, h2               ; encoding: [0x41,0x40,0xe4,0x1e]
    657 ; NO-FP16: error: instruction requires:
    658 ; NO-FP16-NEXT: frintn h1, h2
    659 ; CHECK: frintn s1, s2               ; encoding: [0x41,0x40,0x24,0x1e]
    660 ; CHECK: frintn d1, d2               ; encoding: [0x41,0x40,0x64,0x1e]
    661 
    662   frintp h1, h2
    663   frintp s1, s2
    664   frintp d1, d2
    665 
    666 ; FP16:  frintp h1, h2               ; encoding: [0x41,0xc0,0xe4,0x1e]
    667 ; NO-FP16: error: instruction requires:
    668 ; NO-FP16-NEXT: frintp h1, h2
    669 ; CHECK: frintp s1, s2               ; encoding: [0x41,0xc0,0x24,0x1e]
    670 ; CHECK: frintp d1, d2               ; encoding: [0x41,0xc0,0x64,0x1e]
    671 
    672   frintx h1, h2
    673   frintx s1, s2
    674   frintx d1, d2
    675 
    676 ; FP16:  frintx h1, h2               ; encoding: [0x41,0x40,0xe7,0x1e]
    677 ; NO-FP16: error: instruction requires:
    678 ; NO-FP16-NEXT: frintx h1, h2
    679 ; CHECK: frintx s1, s2               ; encoding: [0x41,0x40,0x27,0x1e]
    680 ; CHECK: frintx d1, d2               ; encoding: [0x41,0x40,0x67,0x1e]
    681 
    682   frintz h1, h2
    683   frintz s1, s2
    684   frintz d1, d2
    685 
    686 ; FP16:  frintz h1, h2               ; encoding: [0x41,0xc0,0xe5,0x1e]
    687 ; NO-FP16: error: instruction requires:
    688 ; NO-FP16-NEXT: frintz h1, h2
    689 ; CHECK: frintz s1, s2               ; encoding: [0x41,0xc0,0x25,0x1e]
    690 ; CHECK: frintz d1, d2               ; encoding: [0x41,0xc0,0x65,0x1e]
    691 
    692   cmhs d0, d0, d0
    693   cmtst d0, d0, d0
    694 
    695 ; CHECK: cmhs d0, d0, d0              ; encoding: [0x00,0x3c,0xe0,0x7e]
    696 ; CHECK: cmtst  d0, d0, d0              ; encoding: [0x00,0x8c,0xe0,0x5e]
    697 
    698 
    699 
    700 ;-----------------------------------------------------------------------------
    701 ; Floating-point extract and narrow
    702 ;-----------------------------------------------------------------------------
    703   sqxtn b4, h2
    704   sqxtn h2, s3
    705   sqxtn s9, d2
    706 
    707 ; CHECK: sqxtn b4, h2                  ; encoding: [0x44,0x48,0x21,0x5e]
    708 ; CHECK: sqxtn h2, s3                  ; encoding: [0x62,0x48,0x61,0x5e]
    709 ; CHECK: sqxtn s9, d2                  ; encoding: [0x49,0x48,0xa1,0x5e]
    710 
    711   sqxtun b4, h2
    712   sqxtun h2, s3
    713   sqxtun s9, d2
    714 
    715 ; CHECK: sqxtun b4, h2                  ; encoding: [0x44,0x28,0x21,0x7e]
    716 ; CHECK: sqxtun h2, s3                  ; encoding: [0x62,0x28,0x61,0x7e]
    717 ; CHECK: sqxtun s9, d2                  ; encoding: [0x49,0x28,0xa1,0x7e]
    718 
    719   uqxtn b4, h2
    720   uqxtn h2, s3
    721   uqxtn s9, d2
    722 
    723 ; CHECK: uqxtn b4, h2                  ; encoding: [0x44,0x48,0x21,0x7e]
    724 ; CHECK: uqxtn h2, s3                  ; encoding: [0x62,0x48,0x61,0x7e]
    725 ; CHECK: uqxtn s9, d2                  ; encoding: [0x49,0x48,0xa1,0x7e]
    726