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