1 ;; Arm M-profile Vector Extension Machine Description 2 ;; Copyright (C) 2019-2022 Free Software Foundation, Inc. 3 ;; 4 ;; This file is part of GCC. 5 ;; 6 ;; GCC is free software; you can redistribute it and/or modify it 7 ;; under the terms of the GNU General Public License as published by 8 ;; the Free Software Foundation; either version 3, or (at your option) 9 ;; any later version. 10 ;; 11 ;; GCC is distributed in the hope that it will be useful, but 12 ;; WITHOUT ANY WARRANTY; without even the implied warranty of 13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 ;; General Public License for more details. 15 ;; 16 ;; You should have received a copy of the GNU General Public License 17 ;; along with GCC; see the file COPYING3. If not see 18 ;; <http://www.gnu.org/licenses/>. 19 20 (define_insn "*mve_mov<mode>" 21 [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w,w,r,w,Ux,w") 22 (match_operand:MVE_types 1 "general_operand" "w,r,w,Dn,UxUi,r,Dm,w,Ul"))] 23 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT" 24 { 25 if (which_alternative == 3 || which_alternative == 6) 26 { 27 int width, is_valid; 28 static char templ[40]; 29 30 is_valid = simd_immediate_valid_for_move (operands[1], <MODE>mode, 31 &operands[1], &width); 32 33 gcc_assert (is_valid != 0); 34 35 if (width == 0) 36 return "vmov.f32\t%q0, %1 @ <mode>"; 37 else 38 sprintf (templ, "vmov.i%d\t%%q0, %%x1 @ <mode>", width); 39 return templ; 40 } 41 42 if (which_alternative == 4 || which_alternative == 7) 43 { 44 if (<MODE>mode == V2DFmode || <MODE>mode == V2DImode || <MODE>mode == TImode) 45 { 46 if (which_alternative == 7) 47 output_asm_insn ("vstrw.32\t%q1, %E0", operands); 48 else 49 output_asm_insn ("vldrw.u32\t%q0, %E1",operands); 50 } 51 else 52 { 53 if (which_alternative == 7) 54 output_asm_insn ("vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0", operands); 55 else 56 output_asm_insn ("vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1", operands); 57 } 58 return ""; 59 } 60 switch (which_alternative) 61 { 62 case 0: 63 return "vmov\t%q0, %q1"; 64 case 1: 65 return "vmov\t%e0, %Q1, %R1 @ <mode>\;vmov\t%f0, %J1, %K1"; 66 case 2: 67 return "vmov\t%Q0, %R0, %e1 @ <mode>\;vmov\t%J0, %K0, %f1"; 68 case 5: 69 return output_move_quad (operands); 70 case 8: 71 return output_move_neon (operands); 72 default: 73 gcc_unreachable (); 74 return ""; 75 } 76 } 77 [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_move,mve_store,mve_load") 78 (set_attr "length" "4,8,8,4,8,8,4,4,4") 79 (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*,*") 80 (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*,*")]) 81 82 (define_insn "*mve_vdup<mode>" 83 [(set (match_operand:MVE_vecs 0 "s_register_operand" "=w") 84 (vec_duplicate:MVE_vecs 85 (match_operand:<V_elem> 1 "s_register_operand" "r")))] 86 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT" 87 "vdup.<V_sz_elem>\t%q0, %1" 88 [(set_attr "length" "4") 89 (set_attr "type" "mve_move")]) 90 91 ;; 92 ;; [vst4q]) 93 ;; 94 (define_insn "mve_vst4q<mode>" 95 [(set (match_operand:XI 0 "mve_struct_operand" "=Ug") 96 (unspec:XI [(match_operand:XI 1 "s_register_operand" "w") 97 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 98 VST4Q)) 99 ] 100 "TARGET_HAVE_MVE" 101 { 102 rtx ops[6]; 103 int regno = REGNO (operands[1]); 104 ops[0] = gen_rtx_REG (TImode, regno); 105 ops[1] = gen_rtx_REG (TImode, regno+4); 106 ops[2] = gen_rtx_REG (TImode, regno+8); 107 ops[3] = gen_rtx_REG (TImode, regno+12); 108 rtx reg = operands[0]; 109 while (reg && !REG_P (reg)) 110 reg = XEXP (reg, 0); 111 gcc_assert (REG_P (reg)); 112 ops[4] = reg; 113 ops[5] = operands[0]; 114 /* Here in first three instructions data is stored to ops[4]'s location but 115 in the fourth instruction data is stored to operands[0], this is to 116 support the writeback. */ 117 output_asm_insn ("vst40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 118 "vst41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 119 "vst42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 120 "vst43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops); 121 return ""; 122 } 123 [(set_attr "length" "16")]) 124 125 ;; 126 ;; [vrndq_m_f]) 127 ;; 128 (define_insn "mve_vrndq_m_f<mode>" 129 [ 130 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 131 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 132 (match_operand:MVE_0 2 "s_register_operand" "w") 133 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 134 VRNDQ_M_F)) 135 ] 136 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 137 "vpst\;vrintzt.f%#<V_sz_elem>\t%q0, %q2" 138 [(set_attr "type" "mve_move") 139 (set_attr "length""8")]) 140 141 ;; 142 ;; [vrndxq_f]) 143 ;; 144 (define_insn "mve_vrndxq_f<mode>" 145 [ 146 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 147 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 148 VRNDXQ_F)) 149 ] 150 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 151 "vrintx.f%#<V_sz_elem> %q0, %q1" 152 [(set_attr "type" "mve_move") 153 ]) 154 155 ;; 156 ;; [vrndq_f]) 157 ;; 158 (define_insn "mve_vrndq_f<mode>" 159 [ 160 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 161 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 162 VRNDQ_F)) 163 ] 164 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 165 "vrintz.f%#<V_sz_elem> %q0, %q1" 166 [(set_attr "type" "mve_move") 167 ]) 168 169 ;; 170 ;; [vrndpq_f]) 171 ;; 172 (define_insn "mve_vrndpq_f<mode>" 173 [ 174 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 175 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 176 VRNDPQ_F)) 177 ] 178 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 179 "vrintp.f%#<V_sz_elem> %q0, %q1" 180 [(set_attr "type" "mve_move") 181 ]) 182 183 ;; 184 ;; [vrndnq_f]) 185 ;; 186 (define_insn "mve_vrndnq_f<mode>" 187 [ 188 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 189 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 190 VRNDNQ_F)) 191 ] 192 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 193 "vrintn.f%#<V_sz_elem> %q0, %q1" 194 [(set_attr "type" "mve_move") 195 ]) 196 197 ;; 198 ;; [vrndmq_f]) 199 ;; 200 (define_insn "mve_vrndmq_f<mode>" 201 [ 202 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 203 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 204 VRNDMQ_F)) 205 ] 206 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 207 "vrintm.f%#<V_sz_elem> %q0, %q1" 208 [(set_attr "type" "mve_move") 209 ]) 210 211 ;; 212 ;; [vrndaq_f]) 213 ;; 214 (define_insn "mve_vrndaq_f<mode>" 215 [ 216 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 217 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 218 VRNDAQ_F)) 219 ] 220 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 221 "vrinta.f%#<V_sz_elem> %q0, %q1" 222 [(set_attr "type" "mve_move") 223 ]) 224 225 ;; 226 ;; [vrev64q_f]) 227 ;; 228 (define_insn "mve_vrev64q_f<mode>" 229 [ 230 (set (match_operand:MVE_0 0 "s_register_operand" "=&w") 231 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 232 VREV64Q_F)) 233 ] 234 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 235 "vrev64.%#<V_sz_elem>\t%q0, %q1" 236 [(set_attr "type" "mve_move") 237 ]) 238 239 ;; 240 ;; [vnegq_f]) 241 ;; 242 (define_insn "mve_vnegq_f<mode>" 243 [ 244 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 245 (neg:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))) 246 ] 247 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 248 "vneg.f%#<V_sz_elem>\t%q0, %q1" 249 [(set_attr "type" "mve_move") 250 ]) 251 252 ;; 253 ;; [vdupq_n_f]) 254 ;; 255 (define_insn "mve_vdupq_n_f<mode>" 256 [ 257 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 258 (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")] 259 VDUPQ_N_F)) 260 ] 261 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 262 "vdup.%#<V_sz_elem>\t%q0, %1" 263 [(set_attr "type" "mve_move") 264 ]) 265 266 ;; 267 ;; [vabsq_f]) 268 ;; 269 (define_insn "mve_vabsq_f<mode>" 270 [ 271 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 272 (abs:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))) 273 ] 274 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 275 "vabs.f%#<V_sz_elem>\t%q0, %q1" 276 [(set_attr "type" "mve_move") 277 ]) 278 279 ;; 280 ;; [vrev32q_f]) 281 ;; 282 (define_insn "mve_vrev32q_fv8hf" 283 [ 284 (set (match_operand:V8HF 0 "s_register_operand" "=w") 285 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")] 286 VREV32Q_F)) 287 ] 288 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 289 "vrev32.16\t%q0, %q1" 290 [(set_attr "type" "mve_move") 291 ]) 292 ;; 293 ;; [vcvttq_f32_f16]) 294 ;; 295 (define_insn "mve_vcvttq_f32_f16v4sf" 296 [ 297 (set (match_operand:V4SF 0 "s_register_operand" "=w") 298 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")] 299 VCVTTQ_F32_F16)) 300 ] 301 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 302 "vcvtt.f32.f16\t%q0, %q1" 303 [(set_attr "type" "mve_move") 304 ]) 305 306 ;; 307 ;; [vcvtbq_f32_f16]) 308 ;; 309 (define_insn "mve_vcvtbq_f32_f16v4sf" 310 [ 311 (set (match_operand:V4SF 0 "s_register_operand" "=w") 312 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")] 313 VCVTBQ_F32_F16)) 314 ] 315 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 316 "vcvtb.f32.f16\t%q0, %q1" 317 [(set_attr "type" "mve_move") 318 ]) 319 320 ;; 321 ;; [vcvtq_to_f_s, vcvtq_to_f_u]) 322 ;; 323 (define_insn "mve_vcvtq_to_f_<supf><mode>" 324 [ 325 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 326 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 327 VCVTQ_TO_F)) 328 ] 329 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 330 "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q1" 331 [(set_attr "type" "mve_move") 332 ]) 333 334 ;; 335 ;; [vrev64q_u, vrev64q_s]) 336 ;; 337 (define_insn "mve_vrev64q_<supf><mode>" 338 [ 339 (set (match_operand:MVE_2 0 "s_register_operand" "=&w") 340 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")] 341 VREV64Q)) 342 ] 343 "TARGET_HAVE_MVE" 344 "vrev64.%#<V_sz_elem>\t%q0, %q1" 345 [(set_attr "type" "mve_move") 346 ]) 347 348 ;; 349 ;; [vcvtq_from_f_s, vcvtq_from_f_u]) 350 ;; 351 (define_insn "mve_vcvtq_from_f_<supf><mode>" 352 [ 353 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 354 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 355 VCVTQ_FROM_F)) 356 ] 357 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 358 "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q1" 359 [(set_attr "type" "mve_move") 360 ]) 361 ;; [vqnegq_s]) 362 ;; 363 (define_insn "mve_vqnegq_s<mode>" 364 [ 365 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 366 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")] 367 VQNEGQ_S)) 368 ] 369 "TARGET_HAVE_MVE" 370 "vqneg.s%#<V_sz_elem>\t%q0, %q1" 371 [(set_attr "type" "mve_move") 372 ]) 373 374 ;; 375 ;; [vqabsq_s]) 376 ;; 377 (define_insn "mve_vqabsq_s<mode>" 378 [ 379 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 380 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")] 381 VQABSQ_S)) 382 ] 383 "TARGET_HAVE_MVE" 384 "vqabs.s%#<V_sz_elem>\t%q0, %q1" 385 [(set_attr "type" "mve_move") 386 ]) 387 388 ;; 389 ;; [vnegq_s]) 390 ;; 391 (define_insn "mve_vnegq_s<mode>" 392 [ 393 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 394 (neg:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) 395 ] 396 "TARGET_HAVE_MVE" 397 "vneg.s%#<V_sz_elem>\t%q0, %q1" 398 [(set_attr "type" "mve_move") 399 ]) 400 401 ;; 402 ;; [vmvnq_u, vmvnq_s]) 403 ;; 404 (define_insn "mve_vmvnq_u<mode>" 405 [ 406 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 407 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) 408 ] 409 "TARGET_HAVE_MVE" 410 "vmvn\t%q0, %q1" 411 [(set_attr "type" "mve_move") 412 ]) 413 (define_expand "mve_vmvnq_s<mode>" 414 [ 415 (set (match_operand:MVE_2 0 "s_register_operand") 416 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand"))) 417 ] 418 "TARGET_HAVE_MVE" 419 ) 420 421 ;; 422 ;; [vdupq_n_u, vdupq_n_s]) 423 ;; 424 (define_insn "mve_vdupq_n_<supf><mode>" 425 [ 426 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 427 (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")] 428 VDUPQ_N)) 429 ] 430 "TARGET_HAVE_MVE" 431 "vdup.%#<V_sz_elem>\t%q0, %1" 432 [(set_attr "type" "mve_move") 433 ]) 434 435 ;; 436 ;; [vclzq_u, vclzq_s]) 437 ;; 438 (define_insn "@mve_vclzq_s<mode>" 439 [ 440 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 441 (clz:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) 442 ] 443 "TARGET_HAVE_MVE" 444 "vclz.i%#<V_sz_elem>\t%q0, %q1" 445 [(set_attr "type" "mve_move") 446 ]) 447 (define_expand "mve_vclzq_u<mode>" 448 [ 449 (set (match_operand:MVE_2 0 "s_register_operand") 450 (clz:MVE_2 (match_operand:MVE_2 1 "s_register_operand"))) 451 ] 452 "TARGET_HAVE_MVE" 453 ) 454 455 ;; 456 ;; [vclsq_s]) 457 ;; 458 (define_insn "mve_vclsq_s<mode>" 459 [ 460 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 461 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")] 462 VCLSQ_S)) 463 ] 464 "TARGET_HAVE_MVE" 465 "vcls.s%#<V_sz_elem>\t%q0, %q1" 466 [(set_attr "type" "mve_move") 467 ]) 468 469 ;; 470 ;; [vaddvq_s, vaddvq_u]) 471 ;; 472 (define_insn "@mve_vaddvq_<supf><mode>" 473 [ 474 (set (match_operand:SI 0 "s_register_operand" "=Te") 475 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")] 476 VADDVQ)) 477 ] 478 "TARGET_HAVE_MVE" 479 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1" 480 [(set_attr "type" "mve_move") 481 ]) 482 483 ;; 484 ;; [vabsq_s]) 485 ;; 486 (define_insn "mve_vabsq_s<mode>" 487 [ 488 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 489 (abs:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) 490 ] 491 "TARGET_HAVE_MVE" 492 "vabs.s%#<V_sz_elem>\t%q0, %q1" 493 [(set_attr "type" "mve_move") 494 ]) 495 496 ;; 497 ;; [vrev32q_u, vrev32q_s]) 498 ;; 499 (define_insn "mve_vrev32q_<supf><mode>" 500 [ 501 (set (match_operand:MVE_3 0 "s_register_operand" "=w") 502 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")] 503 VREV32Q)) 504 ] 505 "TARGET_HAVE_MVE" 506 "vrev32.%#<V_sz_elem>\t%q0, %q1" 507 [(set_attr "type" "mve_move") 508 ]) 509 510 ;; 511 ;; [vmovltq_u, vmovltq_s]) 512 ;; 513 (define_insn "mve_vmovltq_<supf><mode>" 514 [ 515 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 516 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")] 517 VMOVLTQ)) 518 ] 519 "TARGET_HAVE_MVE" 520 "vmovlt.<supf>%#<V_sz_elem>\t%q0, %q1" 521 [(set_attr "type" "mve_move") 522 ]) 523 524 ;; 525 ;; [vmovlbq_s, vmovlbq_u]) 526 ;; 527 (define_insn "mve_vmovlbq_<supf><mode>" 528 [ 529 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 530 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")] 531 VMOVLBQ)) 532 ] 533 "TARGET_HAVE_MVE" 534 "vmovlb.<supf>%#<V_sz_elem>\t%q0, %q1" 535 [(set_attr "type" "mve_move") 536 ]) 537 538 ;; 539 ;; [vcvtpq_s, vcvtpq_u]) 540 ;; 541 (define_insn "mve_vcvtpq_<supf><mode>" 542 [ 543 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 544 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 545 VCVTPQ)) 546 ] 547 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 548 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q1" 549 [(set_attr "type" "mve_move") 550 ]) 551 552 ;; 553 ;; [vcvtnq_s, vcvtnq_u]) 554 ;; 555 (define_insn "mve_vcvtnq_<supf><mode>" 556 [ 557 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 558 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 559 VCVTNQ)) 560 ] 561 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 562 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q1" 563 [(set_attr "type" "mve_move") 564 ]) 565 566 ;; 567 ;; [vcvtmq_s, vcvtmq_u]) 568 ;; 569 (define_insn "mve_vcvtmq_<supf><mode>" 570 [ 571 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 572 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 573 VCVTMQ)) 574 ] 575 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 576 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q1" 577 [(set_attr "type" "mve_move") 578 ]) 579 580 ;; 581 ;; [vcvtaq_u, vcvtaq_s]) 582 ;; 583 (define_insn "mve_vcvtaq_<supf><mode>" 584 [ 585 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 586 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 587 VCVTAQ)) 588 ] 589 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 590 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q1" 591 [(set_attr "type" "mve_move") 592 ]) 593 594 ;; 595 ;; [vmvnq_n_u, vmvnq_n_s]) 596 ;; 597 (define_insn "mve_vmvnq_n_<supf><mode>" 598 [ 599 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 600 (unspec:MVE_5 [(match_operand:<V_elem> 1 "immediate_operand" "i")] 601 VMVNQ_N)) 602 ] 603 "TARGET_HAVE_MVE" 604 "vmvn.i%#<V_sz_elem>\t%q0, %1" 605 [(set_attr "type" "mve_move") 606 ]) 607 608 ;; 609 ;; [vrev16q_u, vrev16q_s]) 610 ;; 611 (define_insn "mve_vrev16q_<supf>v16qi" 612 [ 613 (set (match_operand:V16QI 0 "s_register_operand" "=w") 614 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")] 615 VREV16Q)) 616 ] 617 "TARGET_HAVE_MVE" 618 "vrev16.8\t%q0, %q1" 619 [(set_attr "type" "mve_move") 620 ]) 621 622 ;; 623 ;; [vaddlvq_s vaddlvq_u]) 624 ;; 625 (define_insn "mve_vaddlvq_<supf>v4si" 626 [ 627 (set (match_operand:DI 0 "s_register_operand" "=r") 628 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")] 629 VADDLVQ)) 630 ] 631 "TARGET_HAVE_MVE" 632 "vaddlv.<supf>32\t%Q0, %R0, %q1" 633 [(set_attr "type" "mve_move") 634 ]) 635 636 ;; 637 ;; [vctp8q vctp16q vctp32q vctp64q]) 638 ;; 639 (define_insn "mve_vctp<mode1>qhi" 640 [ 641 (set (match_operand:HI 0 "vpr_register_operand" "=Up") 642 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")] 643 VCTPQ)) 644 ] 645 "TARGET_HAVE_MVE" 646 "vctp.<mode1>\t%1" 647 [(set_attr "type" "mve_move") 648 ]) 649 650 ;; 651 ;; [vpnot]) 652 ;; 653 (define_insn "mve_vpnothi" 654 [ 655 (set (match_operand:HI 0 "vpr_register_operand" "=Up") 656 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")] 657 VPNOT)) 658 ] 659 "TARGET_HAVE_MVE" 660 "vpnot" 661 [(set_attr "type" "mve_move") 662 ]) 663 664 ;; 665 ;; [vsubq_n_f]) 666 ;; 667 (define_insn "mve_vsubq_n_f<mode>" 668 [ 669 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 670 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 671 (match_operand:<V_elem> 2 "s_register_operand" "r")] 672 VSUBQ_N_F)) 673 ] 674 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 675 "vsub.f<V_sz_elem>\t%q0, %q1, %2" 676 [(set_attr "type" "mve_move") 677 ]) 678 679 ;; 680 ;; [vbrsrq_n_f]) 681 ;; 682 (define_insn "mve_vbrsrq_n_f<mode>" 683 [ 684 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 685 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 686 (match_operand:SI 2 "s_register_operand" "r")] 687 VBRSRQ_N_F)) 688 ] 689 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 690 "vbrsr.<V_sz_elem>\t%q0, %q1, %2" 691 [(set_attr "type" "mve_move") 692 ]) 693 694 ;; 695 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u]) 696 ;; 697 (define_insn "mve_vcvtq_n_to_f_<supf><mode>" 698 [ 699 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 700 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w") 701 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")] 702 VCVTQ_N_TO_F)) 703 ] 704 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 705 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2" 706 [(set_attr "type" "mve_move") 707 ]) 708 709 ;; [vcreateq_f]) 710 ;; 711 (define_insn "mve_vcreateq_f<mode>" 712 [ 713 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 714 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r") 715 (match_operand:DI 2 "s_register_operand" "r")] 716 VCREATEQ_F)) 717 ] 718 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 719 "vmov %q0[2], %q0[0], %Q1, %Q2\;vmov %q0[3], %q0[1], %R1, %R2" 720 [(set_attr "type" "mve_move") 721 (set_attr "length""8")]) 722 723 ;; 724 ;; [vcreateq_u, vcreateq_s]) 725 ;; 726 (define_insn "mve_vcreateq_<supf><mode>" 727 [ 728 (set (match_operand:MVE_1 0 "s_register_operand" "=w") 729 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r") 730 (match_operand:DI 2 "s_register_operand" "r")] 731 VCREATEQ)) 732 ] 733 "TARGET_HAVE_MVE" 734 "vmov %q0[2], %q0[0], %Q1, %Q2\;vmov %q0[3], %q0[1], %R1, %R2" 735 [(set_attr "type" "mve_move") 736 (set_attr "length""8")]) 737 738 ;; 739 ;; [vshrq_n_s, vshrq_n_u]) 740 ;; 741 ;; Version that takes an immediate as operand 2. 742 (define_insn "mve_vshrq_n_<supf><mode>" 743 [ 744 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 745 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 746 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")] 747 VSHRQ_N)) 748 ] 749 "TARGET_HAVE_MVE" 750 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2" 751 [(set_attr "type" "mve_move") 752 ]) 753 754 ;; Versions that take constant vectors as operand 2 (with all elements 755 ;; equal). 756 (define_insn "mve_vshrq_n_s<mode>_imm" 757 [ 758 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 759 (ashiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 760 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i"))) 761 ] 762 "TARGET_HAVE_MVE" 763 { 764 return neon_output_shift_immediate ("vshr", 's', &operands[2], 765 <MODE>mode, 766 VALID_NEON_QREG_MODE (<MODE>mode), 767 true); 768 } 769 [(set_attr "type" "mve_move") 770 ]) 771 (define_insn "mve_vshrq_n_u<mode>_imm" 772 [ 773 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 774 (lshiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 775 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i"))) 776 ] 777 "TARGET_HAVE_MVE" 778 { 779 return neon_output_shift_immediate ("vshr", 'u', &operands[2], 780 <MODE>mode, 781 VALID_NEON_QREG_MODE (<MODE>mode), 782 true); 783 } 784 [(set_attr "type" "mve_move") 785 ]) 786 787 ;; 788 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u]) 789 ;; 790 (define_insn "mve_vcvtq_n_from_f_<supf><mode>" 791 [ 792 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 793 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w") 794 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")] 795 VCVTQ_N_FROM_F)) 796 ] 797 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 798 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2" 799 [(set_attr "type" "mve_move") 800 ]) 801 802 ;; 803 ;; [vaddlvq_p_s]) 804 ;; 805 (define_insn "mve_vaddlvq_p_<supf>v4si" 806 [ 807 (set (match_operand:DI 0 "s_register_operand" "=r") 808 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 809 (match_operand:V4BI 2 "vpr_register_operand" "Up")] 810 VADDLVQ_P)) 811 ] 812 "TARGET_HAVE_MVE" 813 "vpst\;vaddlvt.<supf>32\t%Q0, %R0, %q1" 814 [(set_attr "type" "mve_move") 815 (set_attr "length""8")]) 816 817 ;; 818 ;; [vcmpneq_, vcmpcsq_, vcmpeqq_, vcmpgeq_, vcmpgtq_, vcmphiq_, vcmpleq_, vcmpltq_]) 819 ;; 820 (define_insn "@mve_vcmp<mve_cmp_op>q_<mode>" 821 [ 822 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 823 (MVE_COMPARISONS:<MVE_VPRED> (match_operand:MVE_2 1 "s_register_operand" "w") 824 (match_operand:MVE_2 2 "s_register_operand" "w"))) 825 ] 826 "TARGET_HAVE_MVE" 827 "vcmp.<mve_cmp_type>%#<V_sz_elem>\t<mve_cmp_op>, %q1, %q2" 828 [(set_attr "type" "mve_move") 829 ]) 830 831 ;; 832 ;; [vcmpcsq_n_, vcmpeqq_n_, vcmpgeq_n_, vcmpgtq_n_, vcmphiq_n_, vcmpleq_n_, vcmpltq_n_, vcmpneq_n_]) 833 ;; 834 (define_insn "mve_vcmp<mve_cmp_op>q_n_<mode>" 835 [ 836 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 837 (MVE_COMPARISONS:<MVE_VPRED> 838 (match_operand:MVE_2 1 "s_register_operand" "w") 839 (vec_duplicate:MVE_2 (match_operand:<V_elem> 2 "s_register_operand" "r")))) 840 ] 841 "TARGET_HAVE_MVE" 842 "vcmp.<mve_cmp_type>%#<V_sz_elem> <mve_cmp_op>, %q1, %2" 843 [(set_attr "type" "mve_move") 844 ]) 845 846 ;; 847 ;; [vshlq_s, vshlq_u]) 848 ;; See vec-common.md 849 850 ;; 851 ;; [vabdq_s, vabdq_u]) 852 ;; 853 (define_insn "mve_vabdq_<supf><mode>" 854 [ 855 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 856 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 857 (match_operand:MVE_2 2 "s_register_operand" "w")] 858 VABDQ)) 859 ] 860 "TARGET_HAVE_MVE" 861 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2" 862 [(set_attr "type" "mve_move") 863 ]) 864 865 ;; 866 ;; [vaddq_n_s, vaddq_n_u]) 867 ;; 868 (define_insn "mve_vaddq_n_<supf><mode>" 869 [ 870 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 871 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 872 (match_operand:<V_elem> 2 "s_register_operand" "r")] 873 VADDQ_N)) 874 ] 875 "TARGET_HAVE_MVE" 876 "vadd.i%#<V_sz_elem>\t%q0, %q1, %2" 877 [(set_attr "type" "mve_move") 878 ]) 879 880 ;; 881 ;; [vaddvaq_s, vaddvaq_u]) 882 ;; 883 (define_insn "mve_vaddvaq_<supf><mode>" 884 [ 885 (set (match_operand:SI 0 "s_register_operand" "=Te") 886 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 887 (match_operand:MVE_2 2 "s_register_operand" "w")] 888 VADDVAQ)) 889 ] 890 "TARGET_HAVE_MVE" 891 "vaddva.<supf>%#<V_sz_elem>\t%0, %q2" 892 [(set_attr "type" "mve_move") 893 ]) 894 895 ;; 896 ;; [vaddvq_p_u, vaddvq_p_s]) 897 ;; 898 (define_insn "mve_vaddvq_p_<supf><mode>" 899 [ 900 (set (match_operand:SI 0 "s_register_operand" "=Te") 901 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 902 (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up")] 903 VADDVQ_P)) 904 ] 905 "TARGET_HAVE_MVE" 906 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1" 907 [(set_attr "type" "mve_move") 908 (set_attr "length""8")]) 909 910 ;; 911 ;; [vandq_u, vandq_s]) 912 ;; 913 ;; signed and unsigned versions are the same: define the unsigned 914 ;; insn, and use an expander for the signed one as we still reference 915 ;; both names from arm_mve.h. 916 ;; We use the same code as in neon.md (TODO: avoid this duplication). 917 (define_insn "mve_vandq_u<mode>" 918 [ 919 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w") 920 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0") 921 (match_operand:MVE_2 2 "neon_inv_logic_op2" "w,DL"))) 922 ] 923 "TARGET_HAVE_MVE" 924 "@ 925 vand\t%q0, %q1, %q2 926 * return neon_output_logic_immediate (\"vand\", &operands[2], <MODE>mode, 1, VALID_NEON_QREG_MODE (<MODE>mode));" 927 [(set_attr "type" "mve_move") 928 ]) 929 (define_expand "mve_vandq_s<mode>" 930 [ 931 (set (match_operand:MVE_2 0 "s_register_operand") 932 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand") 933 (match_operand:MVE_2 2 "neon_inv_logic_op2"))) 934 ] 935 "TARGET_HAVE_MVE" 936 ) 937 938 ;; 939 ;; [vbicq_s, vbicq_u]) 940 ;; 941 (define_insn "mve_vbicq_u<mode>" 942 [ 943 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 944 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w")) 945 (match_operand:MVE_2 1 "s_register_operand" "w"))) 946 ] 947 "TARGET_HAVE_MVE" 948 "vbic\t%q0, %q1, %q2" 949 [(set_attr "type" "mve_move") 950 ]) 951 952 (define_expand "mve_vbicq_s<mode>" 953 [ 954 (set (match_operand:MVE_2 0 "s_register_operand") 955 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand")) 956 (match_operand:MVE_2 1 "s_register_operand"))) 957 ] 958 "TARGET_HAVE_MVE" 959 ) 960 961 ;; 962 ;; [vbrsrq_n_u, vbrsrq_n_s]) 963 ;; 964 (define_insn "mve_vbrsrq_n_<supf><mode>" 965 [ 966 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 967 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 968 (match_operand:SI 2 "s_register_operand" "r")] 969 VBRSRQ_N)) 970 ] 971 "TARGET_HAVE_MVE" 972 "vbrsr.%#<V_sz_elem>\t%q0, %q1, %2" 973 [(set_attr "type" "mve_move") 974 ]) 975 976 ;; 977 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270]) 978 ;; 979 (define_insn "mve_vcaddq<mve_rot><mode>" 980 [ 981 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 982 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 983 (match_operand:MVE_2 2 "s_register_operand" "w")] 984 VCADD)) 985 ] 986 "TARGET_HAVE_MVE" 987 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #<rot>" 988 [(set_attr "type" "mve_move") 989 ]) 990 991 ;; Auto vectorizer pattern for int vcadd 992 (define_expand "cadd<rot><mode>3" 993 [(set (match_operand:MVE_2 0 "register_operand") 994 (unspec:MVE_2 [(match_operand:MVE_2 1 "register_operand") 995 (match_operand:MVE_2 2 "register_operand")] 996 VCADD))] 997 "TARGET_HAVE_MVE && !BYTES_BIG_ENDIAN" 998 ) 999 1000 ;; 1001 ;; [veorq_u, veorq_s]) 1002 ;; 1003 (define_insn "mve_veorq_u<mode>" 1004 [ 1005 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1006 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1007 (match_operand:MVE_2 2 "s_register_operand" "w"))) 1008 ] 1009 "TARGET_HAVE_MVE" 1010 "veor\t%q0, %q1, %q2" 1011 [(set_attr "type" "mve_move") 1012 ]) 1013 (define_expand "mve_veorq_s<mode>" 1014 [ 1015 (set (match_operand:MVE_2 0 "s_register_operand") 1016 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand") 1017 (match_operand:MVE_2 2 "s_register_operand"))) 1018 ] 1019 "TARGET_HAVE_MVE" 1020 ) 1021 1022 ;; 1023 ;; [vhaddq_n_u, vhaddq_n_s]) 1024 ;; 1025 (define_insn "mve_vhaddq_n_<supf><mode>" 1026 [ 1027 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1028 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1029 (match_operand:<V_elem> 2 "s_register_operand" "r")] 1030 VHADDQ_N)) 1031 ] 1032 "TARGET_HAVE_MVE" 1033 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1034 [(set_attr "type" "mve_move") 1035 ]) 1036 1037 ;; 1038 ;; [vhaddq_s, vhaddq_u]) 1039 ;; 1040 (define_insn "@mve_vhaddq_<supf><mode>" 1041 [ 1042 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1043 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1044 (match_operand:MVE_2 2 "s_register_operand" "w")] 1045 VHADDQ)) 1046 ] 1047 "TARGET_HAVE_MVE" 1048 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1049 [(set_attr "type" "mve_move") 1050 ]) 1051 1052 ;; 1053 ;; [vhcaddq_rot270_s]) 1054 ;; 1055 (define_insn "mve_vhcaddq_rot270_s<mode>" 1056 [ 1057 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 1058 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1059 (match_operand:MVE_2 2 "s_register_operand" "w")] 1060 VHCADDQ_ROT270_S)) 1061 ] 1062 "TARGET_HAVE_MVE" 1063 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270" 1064 [(set_attr "type" "mve_move") 1065 ]) 1066 1067 ;; 1068 ;; [vhcaddq_rot90_s]) 1069 ;; 1070 (define_insn "mve_vhcaddq_rot90_s<mode>" 1071 [ 1072 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 1073 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1074 (match_operand:MVE_2 2 "s_register_operand" "w")] 1075 VHCADDQ_ROT90_S)) 1076 ] 1077 "TARGET_HAVE_MVE" 1078 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90" 1079 [(set_attr "type" "mve_move") 1080 ]) 1081 1082 ;; 1083 ;; [vhsubq_n_u, vhsubq_n_s]) 1084 ;; 1085 (define_insn "mve_vhsubq_n_<supf><mode>" 1086 [ 1087 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1088 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1089 (match_operand:<V_elem> 2 "s_register_operand" "r")] 1090 VHSUBQ_N)) 1091 ] 1092 "TARGET_HAVE_MVE" 1093 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1094 [(set_attr "type" "mve_move") 1095 ]) 1096 1097 ;; 1098 ;; [vhsubq_s, vhsubq_u]) 1099 ;; 1100 (define_insn "mve_vhsubq_<supf><mode>" 1101 [ 1102 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1103 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1104 (match_operand:MVE_2 2 "s_register_operand" "w")] 1105 VHSUBQ)) 1106 ] 1107 "TARGET_HAVE_MVE" 1108 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1109 [(set_attr "type" "mve_move") 1110 ]) 1111 1112 ;; 1113 ;; [vmaxaq_s]) 1114 ;; 1115 (define_insn "mve_vmaxaq_s<mode>" 1116 [ 1117 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1118 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1119 (match_operand:MVE_2 2 "s_register_operand" "w")] 1120 VMAXAQ_S)) 1121 ] 1122 "TARGET_HAVE_MVE" 1123 "vmaxa.s%#<V_sz_elem> %q0, %q2" 1124 [(set_attr "type" "mve_move") 1125 ]) 1126 1127 ;; 1128 ;; [vmaxavq_s]) 1129 ;; 1130 (define_insn "mve_vmaxavq_s<mode>" 1131 [ 1132 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 1133 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 1134 (match_operand:MVE_2 2 "s_register_operand" "w")] 1135 VMAXAVQ_S)) 1136 ] 1137 "TARGET_HAVE_MVE" 1138 "vmaxav.s%#<V_sz_elem>\t%0, %q2" 1139 [(set_attr "type" "mve_move") 1140 ]) 1141 1142 ;; 1143 ;; [vmaxq_u, vmaxq_s]) 1144 ;; 1145 (define_insn "mve_vmaxq_s<mode>" 1146 [ 1147 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1148 (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1149 (match_operand:MVE_2 2 "s_register_operand" "w"))) 1150 ] 1151 "TARGET_HAVE_MVE" 1152 "vmax.%#<V_s_elem>\t%q0, %q1, %q2" 1153 [(set_attr "type" "mve_move") 1154 ]) 1155 1156 (define_insn "mve_vmaxq_u<mode>" 1157 [ 1158 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1159 (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1160 (match_operand:MVE_2 2 "s_register_operand" "w"))) 1161 ] 1162 "TARGET_HAVE_MVE" 1163 "vmax.%#<V_u_elem>\t%q0, %q1, %q2" 1164 [(set_attr "type" "mve_move") 1165 ]) 1166 1167 ;; 1168 ;; [vmaxvq_u, vmaxvq_s]) 1169 ;; 1170 (define_insn "mve_vmaxvq_<supf><mode>" 1171 [ 1172 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 1173 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 1174 (match_operand:MVE_2 2 "s_register_operand" "w")] 1175 VMAXVQ)) 1176 ] 1177 "TARGET_HAVE_MVE" 1178 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2" 1179 [(set_attr "type" "mve_move") 1180 ]) 1181 1182 ;; 1183 ;; [vminaq_s]) 1184 ;; 1185 (define_insn "mve_vminaq_s<mode>" 1186 [ 1187 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1188 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1189 (match_operand:MVE_2 2 "s_register_operand" "w")] 1190 VMINAQ_S)) 1191 ] 1192 "TARGET_HAVE_MVE" 1193 "vmina.s%#<V_sz_elem>\t%q0, %q2" 1194 [(set_attr "type" "mve_move") 1195 ]) 1196 1197 ;; 1198 ;; [vminavq_s]) 1199 ;; 1200 (define_insn "mve_vminavq_s<mode>" 1201 [ 1202 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 1203 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 1204 (match_operand:MVE_2 2 "s_register_operand" "w")] 1205 VMINAVQ_S)) 1206 ] 1207 "TARGET_HAVE_MVE" 1208 "vminav.s%#<V_sz_elem>\t%0, %q2" 1209 [(set_attr "type" "mve_move") 1210 ]) 1211 1212 ;; 1213 ;; [vminq_s, vminq_u]) 1214 ;; 1215 (define_insn "mve_vminq_s<mode>" 1216 [ 1217 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1218 (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1219 (match_operand:MVE_2 2 "s_register_operand" "w"))) 1220 ] 1221 "TARGET_HAVE_MVE" 1222 "vmin.%#<V_s_elem>\t%q0, %q1, %q2" 1223 [(set_attr "type" "mve_move") 1224 ]) 1225 1226 (define_insn "mve_vminq_u<mode>" 1227 [ 1228 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1229 (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1230 (match_operand:MVE_2 2 "s_register_operand" "w"))) 1231 ] 1232 "TARGET_HAVE_MVE" 1233 "vmin.%#<V_u_elem>\t%q0, %q1, %q2" 1234 [(set_attr "type" "mve_move") 1235 ]) 1236 1237 ;; 1238 ;; [vminvq_u, vminvq_s]) 1239 ;; 1240 (define_insn "mve_vminvq_<supf><mode>" 1241 [ 1242 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 1243 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 1244 (match_operand:MVE_2 2 "s_register_operand" "w")] 1245 VMINVQ)) 1246 ] 1247 "TARGET_HAVE_MVE" 1248 "vminv.<supf>%#<V_sz_elem>\t%0, %q2" 1249 [(set_attr "type" "mve_move") 1250 ]) 1251 1252 ;; 1253 ;; [vmladavq_u, vmladavq_s]) 1254 ;; 1255 (define_insn "mve_vmladavq_<supf><mode>" 1256 [ 1257 (set (match_operand:SI 0 "s_register_operand" "=Te") 1258 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 1259 (match_operand:MVE_2 2 "s_register_operand" "w")] 1260 VMLADAVQ)) 1261 ] 1262 "TARGET_HAVE_MVE" 1263 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2" 1264 [(set_attr "type" "mve_move") 1265 ]) 1266 1267 ;; 1268 ;; [vmladavxq_s]) 1269 ;; 1270 (define_insn "mve_vmladavxq_s<mode>" 1271 [ 1272 (set (match_operand:SI 0 "s_register_operand" "=Te") 1273 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 1274 (match_operand:MVE_2 2 "s_register_operand" "w")] 1275 VMLADAVXQ_S)) 1276 ] 1277 "TARGET_HAVE_MVE" 1278 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2" 1279 [(set_attr "type" "mve_move") 1280 ]) 1281 1282 ;; 1283 ;; [vmlsdavq_s]) 1284 ;; 1285 (define_insn "mve_vmlsdavq_s<mode>" 1286 [ 1287 (set (match_operand:SI 0 "s_register_operand" "=Te") 1288 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 1289 (match_operand:MVE_2 2 "s_register_operand" "w")] 1290 VMLSDAVQ_S)) 1291 ] 1292 "TARGET_HAVE_MVE" 1293 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2" 1294 [(set_attr "type" "mve_move") 1295 ]) 1296 1297 ;; 1298 ;; [vmlsdavxq_s]) 1299 ;; 1300 (define_insn "mve_vmlsdavxq_s<mode>" 1301 [ 1302 (set (match_operand:SI 0 "s_register_operand" "=Te") 1303 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 1304 (match_operand:MVE_2 2 "s_register_operand" "w")] 1305 VMLSDAVXQ_S)) 1306 ] 1307 "TARGET_HAVE_MVE" 1308 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2" 1309 [(set_attr "type" "mve_move") 1310 ]) 1311 1312 ;; 1313 ;; [vmulhq_s, vmulhq_u]) 1314 ;; 1315 (define_insn "mve_vmulhq_<supf><mode>" 1316 [ 1317 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1318 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1319 (match_operand:MVE_2 2 "s_register_operand" "w")] 1320 VMULHQ)) 1321 ] 1322 "TARGET_HAVE_MVE" 1323 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1324 [(set_attr "type" "mve_move") 1325 ]) 1326 1327 ;; 1328 ;; [vmullbq_int_u, vmullbq_int_s]) 1329 ;; 1330 (define_insn "mve_vmullbq_int_<supf><mode>" 1331 [ 1332 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 1333 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w") 1334 (match_operand:MVE_2 2 "s_register_operand" "w")] 1335 VMULLBQ_INT)) 1336 ] 1337 "TARGET_HAVE_MVE" 1338 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1339 [(set_attr "type" "mve_move") 1340 ]) 1341 1342 ;; 1343 ;; [vmulltq_int_u, vmulltq_int_s]) 1344 ;; 1345 (define_insn "mve_vmulltq_int_<supf><mode>" 1346 [ 1347 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 1348 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w") 1349 (match_operand:MVE_2 2 "s_register_operand" "w")] 1350 VMULLTQ_INT)) 1351 ] 1352 "TARGET_HAVE_MVE" 1353 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1354 [(set_attr "type" "mve_move") 1355 ]) 1356 1357 ;; 1358 ;; [vmulq_n_u, vmulq_n_s]) 1359 ;; 1360 (define_insn "mve_vmulq_n_<supf><mode>" 1361 [ 1362 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1363 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1364 (match_operand:<V_elem> 2 "s_register_operand" "r")] 1365 VMULQ_N)) 1366 ] 1367 "TARGET_HAVE_MVE" 1368 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2" 1369 [(set_attr "type" "mve_move") 1370 ]) 1371 1372 ;; 1373 ;; [vmulq_u, vmulq_s]) 1374 ;; 1375 (define_insn "mve_vmulq_<supf><mode>" 1376 [ 1377 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1378 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1379 (match_operand:MVE_2 2 "s_register_operand" "w")] 1380 VMULQ)) 1381 ] 1382 "TARGET_HAVE_MVE" 1383 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2" 1384 [(set_attr "type" "mve_move") 1385 ]) 1386 1387 (define_insn "mve_vmulq<mode>" 1388 [ 1389 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1390 (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1391 (match_operand:MVE_2 2 "s_register_operand" "w"))) 1392 ] 1393 "TARGET_HAVE_MVE" 1394 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2" 1395 [(set_attr "type" "mve_move") 1396 ]) 1397 1398 ;; 1399 ;; [vornq_u, vornq_s]) 1400 ;; 1401 (define_insn "mve_vornq_s<mode>" 1402 [ 1403 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1404 (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w")) 1405 (match_operand:MVE_2 1 "s_register_operand" "w"))) 1406 ] 1407 "TARGET_HAVE_MVE" 1408 "vorn\t%q0, %q1, %q2" 1409 [(set_attr "type" "mve_move") 1410 ]) 1411 1412 (define_expand "mve_vornq_u<mode>" 1413 [ 1414 (set (match_operand:MVE_2 0 "s_register_operand") 1415 (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand")) 1416 (match_operand:MVE_2 1 "s_register_operand"))) 1417 ] 1418 "TARGET_HAVE_MVE" 1419 ) 1420 1421 ;; 1422 ;; [vorrq_s, vorrq_u]) 1423 ;; 1424 ;; signed and unsigned versions are the same: define the unsigned 1425 ;; insn, and use an expander for the signed one as we still reference 1426 ;; both names from arm_mve.h. 1427 ;; We use the same code as in neon.md (TODO: avoid this duplication). 1428 (define_insn "mve_vorrq_s<mode>" 1429 [ 1430 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w") 1431 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0") 1432 (match_operand:MVE_2 2 "neon_logic_op2" "w,Dl"))) 1433 ] 1434 "TARGET_HAVE_MVE" 1435 "@ 1436 vorr\t%q0, %q1, %q2 1437 * return neon_output_logic_immediate (\"vorr\", &operands[2], <MODE>mode, 0, VALID_NEON_QREG_MODE (<MODE>mode));" 1438 [(set_attr "type" "mve_move") 1439 ]) 1440 (define_expand "mve_vorrq_u<mode>" 1441 [ 1442 (set (match_operand:MVE_2 0 "s_register_operand") 1443 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand") 1444 (match_operand:MVE_2 2 "neon_logic_op2"))) 1445 ] 1446 "TARGET_HAVE_MVE" 1447 ) 1448 1449 ;; 1450 ;; [vqaddq_n_s, vqaddq_n_u]) 1451 ;; 1452 (define_insn "mve_vqaddq_n_<supf><mode>" 1453 [ 1454 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1455 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1456 (match_operand:<V_elem> 2 "s_register_operand" "r")] 1457 VQADDQ_N)) 1458 ] 1459 "TARGET_HAVE_MVE" 1460 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1461 [(set_attr "type" "mve_move") 1462 ]) 1463 1464 ;; 1465 ;; [vqaddq_u, vqaddq_s]) 1466 ;; 1467 (define_insn "mve_vqaddq_<supf><mode>" 1468 [ 1469 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1470 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1471 (match_operand:MVE_2 2 "s_register_operand" "w")] 1472 VQADDQ)) 1473 ] 1474 "TARGET_HAVE_MVE" 1475 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1476 [(set_attr "type" "mve_move") 1477 ]) 1478 1479 ;; 1480 ;; [vqdmulhq_n_s]) 1481 ;; 1482 (define_insn "mve_vqdmulhq_n_s<mode>" 1483 [ 1484 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1485 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1486 (match_operand:<V_elem> 2 "s_register_operand" "r")] 1487 VQDMULHQ_N_S)) 1488 ] 1489 "TARGET_HAVE_MVE" 1490 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2" 1491 [(set_attr "type" "mve_move") 1492 ]) 1493 1494 ;; 1495 ;; [vqdmulhq_s]) 1496 ;; 1497 (define_insn "mve_vqdmulhq_s<mode>" 1498 [ 1499 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1500 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1501 (match_operand:MVE_2 2 "s_register_operand" "w")] 1502 VQDMULHQ_S)) 1503 ] 1504 "TARGET_HAVE_MVE" 1505 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2" 1506 [(set_attr "type" "mve_move") 1507 ]) 1508 1509 ;; 1510 ;; [vqrdmulhq_n_s]) 1511 ;; 1512 (define_insn "mve_vqrdmulhq_n_s<mode>" 1513 [ 1514 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1515 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1516 (match_operand:<V_elem> 2 "s_register_operand" "r")] 1517 VQRDMULHQ_N_S)) 1518 ] 1519 "TARGET_HAVE_MVE" 1520 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2" 1521 [(set_attr "type" "mve_move") 1522 ]) 1523 1524 ;; 1525 ;; [vqrdmulhq_s]) 1526 ;; 1527 (define_insn "mve_vqrdmulhq_s<mode>" 1528 [ 1529 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1530 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1531 (match_operand:MVE_2 2 "s_register_operand" "w")] 1532 VQRDMULHQ_S)) 1533 ] 1534 "TARGET_HAVE_MVE" 1535 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2" 1536 [(set_attr "type" "mve_move") 1537 ]) 1538 1539 ;; 1540 ;; [vqrshlq_n_s, vqrshlq_n_u]) 1541 ;; 1542 (define_insn "mve_vqrshlq_n_<supf><mode>" 1543 [ 1544 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1545 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1546 (match_operand:SI 2 "s_register_operand" "r")] 1547 VQRSHLQ_N)) 1548 ] 1549 "TARGET_HAVE_MVE" 1550 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2" 1551 [(set_attr "type" "mve_move") 1552 ]) 1553 1554 ;; 1555 ;; [vqrshlq_s, vqrshlq_u]) 1556 ;; 1557 (define_insn "mve_vqrshlq_<supf><mode>" 1558 [ 1559 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1560 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1561 (match_operand:MVE_2 2 "s_register_operand" "w")] 1562 VQRSHLQ)) 1563 ] 1564 "TARGET_HAVE_MVE" 1565 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1566 [(set_attr "type" "mve_move") 1567 ]) 1568 1569 ;; 1570 ;; [vqshlq_n_s, vqshlq_n_u]) 1571 ;; 1572 (define_insn "mve_vqshlq_n_<supf><mode>" 1573 [ 1574 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1575 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1576 (match_operand:SI 2 "immediate_operand" "i")] 1577 VQSHLQ_N)) 1578 ] 1579 "TARGET_HAVE_MVE" 1580 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1581 [(set_attr "type" "mve_move") 1582 ]) 1583 1584 ;; 1585 ;; [vqshlq_r_u, vqshlq_r_s]) 1586 ;; 1587 (define_insn "mve_vqshlq_r_<supf><mode>" 1588 [ 1589 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1590 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1591 (match_operand:SI 2 "s_register_operand" "r")] 1592 VQSHLQ_R)) 1593 ] 1594 "TARGET_HAVE_MVE" 1595 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2" 1596 [(set_attr "type" "mve_move") 1597 ]) 1598 1599 ;; 1600 ;; [vqshlq_s, vqshlq_u]) 1601 ;; 1602 (define_insn "mve_vqshlq_<supf><mode>" 1603 [ 1604 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1605 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1606 (match_operand:MVE_2 2 "s_register_operand" "w")] 1607 VQSHLQ)) 1608 ] 1609 "TARGET_HAVE_MVE" 1610 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1611 [(set_attr "type" "mve_move") 1612 ]) 1613 1614 ;; 1615 ;; [vqshluq_n_s]) 1616 ;; 1617 (define_insn "mve_vqshluq_n_s<mode>" 1618 [ 1619 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1620 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1621 (match_operand:SI 2 "<MVE_pred>" "<MVE_constraint>")] 1622 VQSHLUQ_N_S)) 1623 ] 1624 "TARGET_HAVE_MVE" 1625 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2" 1626 [(set_attr "type" "mve_move") 1627 ]) 1628 1629 ;; 1630 ;; [vqsubq_n_s, vqsubq_n_u]) 1631 ;; 1632 (define_insn "mve_vqsubq_n_<supf><mode>" 1633 [ 1634 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1635 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1636 (match_operand:<V_elem> 2 "s_register_operand" "r")] 1637 VQSUBQ_N)) 1638 ] 1639 "TARGET_HAVE_MVE" 1640 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1641 [(set_attr "type" "mve_move") 1642 ]) 1643 1644 ;; 1645 ;; [vqsubq_u, vqsubq_s]) 1646 ;; 1647 (define_insn "mve_vqsubq_<supf><mode>" 1648 [ 1649 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1650 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1651 (match_operand:MVE_2 2 "s_register_operand" "w")] 1652 VQSUBQ)) 1653 ] 1654 "TARGET_HAVE_MVE" 1655 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1656 [(set_attr "type" "mve_move") 1657 ]) 1658 1659 ;; 1660 ;; [vrhaddq_s, vrhaddq_u]) 1661 ;; 1662 (define_insn "@mve_vrhaddq_<supf><mode>" 1663 [ 1664 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1665 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1666 (match_operand:MVE_2 2 "s_register_operand" "w")] 1667 VRHADDQ)) 1668 ] 1669 "TARGET_HAVE_MVE" 1670 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1671 [(set_attr "type" "mve_move") 1672 ]) 1673 1674 ;; 1675 ;; [vrmulhq_s, vrmulhq_u]) 1676 ;; 1677 (define_insn "mve_vrmulhq_<supf><mode>" 1678 [ 1679 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1680 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1681 (match_operand:MVE_2 2 "s_register_operand" "w")] 1682 VRMULHQ)) 1683 ] 1684 "TARGET_HAVE_MVE" 1685 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1686 [(set_attr "type" "mve_move") 1687 ]) 1688 1689 ;; 1690 ;; [vrshlq_n_u, vrshlq_n_s]) 1691 ;; 1692 (define_insn "mve_vrshlq_n_<supf><mode>" 1693 [ 1694 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1695 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1696 (match_operand:SI 2 "s_register_operand" "r")] 1697 VRSHLQ_N)) 1698 ] 1699 "TARGET_HAVE_MVE" 1700 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2" 1701 [(set_attr "type" "mve_move") 1702 ]) 1703 1704 ;; 1705 ;; [vrshlq_s, vrshlq_u]) 1706 ;; 1707 (define_insn "mve_vrshlq_<supf><mode>" 1708 [ 1709 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1710 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1711 (match_operand:MVE_2 2 "s_register_operand" "w")] 1712 VRSHLQ)) 1713 ] 1714 "TARGET_HAVE_MVE" 1715 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1716 [(set_attr "type" "mve_move") 1717 ]) 1718 1719 ;; 1720 ;; [vrshrq_n_s, vrshrq_n_u]) 1721 ;; 1722 (define_insn "mve_vrshrq_n_<supf><mode>" 1723 [ 1724 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1725 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1726 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")] 1727 VRSHRQ_N)) 1728 ] 1729 "TARGET_HAVE_MVE" 1730 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1731 [(set_attr "type" "mve_move") 1732 ]) 1733 1734 ;; 1735 ;; [vshlq_n_u, vshlq_n_s]) 1736 ;; 1737 (define_insn "mve_vshlq_n_<supf><mode>" 1738 [ 1739 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1740 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1741 (match_operand:SI 2 "immediate_operand" "i")] 1742 VSHLQ_N)) 1743 ] 1744 "TARGET_HAVE_MVE" 1745 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1746 [(set_attr "type" "mve_move") 1747 ]) 1748 1749 ;; 1750 ;; [vshlq_r_s, vshlq_r_u]) 1751 ;; 1752 (define_insn "mve_vshlq_r_<supf><mode>" 1753 [ 1754 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1755 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1756 (match_operand:SI 2 "s_register_operand" "r")] 1757 VSHLQ_R)) 1758 ] 1759 "TARGET_HAVE_MVE" 1760 "vshl.<supf>%#<V_sz_elem>\t%q0, %2" 1761 [(set_attr "type" "mve_move") 1762 ]) 1763 1764 ;; 1765 ;; [vsubq_n_s, vsubq_n_u]) 1766 ;; 1767 (define_insn "mve_vsubq_n_<supf><mode>" 1768 [ 1769 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1770 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1771 (match_operand:<V_elem> 2 "s_register_operand" "r")] 1772 VSUBQ_N)) 1773 ] 1774 "TARGET_HAVE_MVE" 1775 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2" 1776 [(set_attr "type" "mve_move") 1777 ]) 1778 1779 ;; 1780 ;; [vsubq_s, vsubq_u]) 1781 ;; 1782 (define_insn "mve_vsubq_<supf><mode>" 1783 [ 1784 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1785 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1786 (match_operand:MVE_2 2 "s_register_operand" "w")] 1787 VSUBQ)) 1788 ] 1789 "TARGET_HAVE_MVE" 1790 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2" 1791 [(set_attr "type" "mve_move") 1792 ]) 1793 1794 (define_insn "mve_vsubq<mode>" 1795 [ 1796 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1797 (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1798 (match_operand:MVE_2 2 "s_register_operand" "w"))) 1799 ] 1800 "TARGET_HAVE_MVE" 1801 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2" 1802 [(set_attr "type" "mve_move") 1803 ]) 1804 1805 ;; 1806 ;; [vabdq_f]) 1807 ;; 1808 (define_insn "mve_vabdq_f<mode>" 1809 [ 1810 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 1811 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 1812 (match_operand:MVE_0 2 "s_register_operand" "w")] 1813 VABDQ_F)) 1814 ] 1815 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1816 "vabd.f%#<V_sz_elem> %q0, %q1, %q2" 1817 [(set_attr "type" "mve_move") 1818 ]) 1819 1820 ;; 1821 ;; [vaddlvaq_s vaddlvaq_u]) 1822 ;; 1823 (define_insn "mve_vaddlvaq_<supf>v4si" 1824 [ 1825 (set (match_operand:DI 0 "s_register_operand" "=r") 1826 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 1827 (match_operand:V4SI 2 "s_register_operand" "w")] 1828 VADDLVAQ)) 1829 ] 1830 "TARGET_HAVE_MVE" 1831 "vaddlva.<supf>32\t%Q0, %R0, %q2" 1832 [(set_attr "type" "mve_move") 1833 ]) 1834 1835 ;; 1836 ;; [vaddq_n_f]) 1837 ;; 1838 (define_insn "mve_vaddq_n_f<mode>" 1839 [ 1840 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 1841 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 1842 (match_operand:<V_elem> 2 "s_register_operand" "r")] 1843 VADDQ_N_F)) 1844 ] 1845 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1846 "vadd.f%#<V_sz_elem>\t%q0, %q1, %2" 1847 [(set_attr "type" "mve_move") 1848 ]) 1849 1850 ;; 1851 ;; [vandq_f]) 1852 ;; 1853 (define_insn "mve_vandq_f<mode>" 1854 [ 1855 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 1856 (and:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 1857 (match_operand:MVE_0 2 "s_register_operand" "w"))) 1858 ] 1859 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1860 "vand\t%q0, %q1, %q2" 1861 [(set_attr "type" "mve_move") 1862 ]) 1863 1864 ;; 1865 ;; [vbicq_f]) 1866 ;; 1867 (define_insn "mve_vbicq_f<mode>" 1868 [ 1869 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 1870 (and:MVE_0 (not:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")) 1871 (match_operand:MVE_0 2 "s_register_operand" "w"))) 1872 ] 1873 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1874 "vbic\t%q0, %q1, %q2" 1875 [(set_attr "type" "mve_move") 1876 ]) 1877 1878 ;; 1879 ;; [vbicq_n_s, vbicq_n_u]) 1880 ;; 1881 (define_insn "mve_vbicq_n_<supf><mode>" 1882 [ 1883 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 1884 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 1885 (match_operand:SI 2 "immediate_operand" "i")] 1886 VBICQ_N)) 1887 ] 1888 "TARGET_HAVE_MVE" 1889 "vbic.i%#<V_sz_elem>\t%q0, %2" 1890 [(set_attr "type" "mve_move") 1891 ]) 1892 1893 ;; 1894 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270]) 1895 ;; 1896 (define_insn "mve_vcaddq<mve_rot><mode>" 1897 [ 1898 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 1899 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 1900 (match_operand:MVE_0 2 "s_register_operand" "w")] 1901 VCADD)) 1902 ] 1903 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1904 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>" 1905 [(set_attr "type" "mve_move") 1906 ]) 1907 1908 ;; 1909 ;; [vcmpeqq_f, vcmpgeq_f, vcmpgtq_f, vcmpleq_f, vcmpltq_f, vcmpneq_f]) 1910 ;; 1911 (define_insn "@mve_vcmp<mve_cmp_op>q_f<mode>" 1912 [ 1913 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 1914 (MVE_FP_COMPARISONS:<MVE_VPRED> (match_operand:MVE_0 1 "s_register_operand" "w") 1915 (match_operand:MVE_0 2 "s_register_operand" "w"))) 1916 ] 1917 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1918 "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %q2" 1919 [(set_attr "type" "mve_move") 1920 ]) 1921 1922 ;; 1923 ;; [vcmpeqq_n_f, vcmpgeq_n_f, vcmpgtq_n_f, vcmpleq_n_f, vcmpltq_n_f, vcmpneq_n_f]) 1924 ;; 1925 (define_insn "@mve_vcmp<mve_cmp_op>q_n_f<mode>" 1926 [ 1927 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 1928 (MVE_FP_COMPARISONS:<MVE_VPRED> 1929 (match_operand:MVE_0 1 "s_register_operand" "w") 1930 (vec_duplicate:MVE_0 (match_operand:<V_elem> 2 "s_register_operand" "r")))) 1931 ] 1932 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1933 "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %2" 1934 [(set_attr "type" "mve_move") 1935 ]) 1936 1937 ;; 1938 ;; [vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270]) 1939 ;; 1940 (define_insn "mve_vcmulq<mve_rot><mode>" 1941 [ 1942 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 1943 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 1944 (match_operand:MVE_0 2 "s_register_operand" "w")] 1945 VCMUL)) 1946 ] 1947 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1948 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>" 1949 [(set_attr "type" "mve_move") 1950 ]) 1951 1952 ;; 1953 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m]) 1954 ;; 1955 (define_insn "mve_vctp<mode1>q_mhi" 1956 [ 1957 (set (match_operand:HI 0 "vpr_register_operand" "=Up") 1958 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r") 1959 (match_operand:HI 2 "vpr_register_operand" "Up")] 1960 VCTPQ_M)) 1961 ] 1962 "TARGET_HAVE_MVE" 1963 "vpst\;vctpt.<mode1>\t%1" 1964 [(set_attr "type" "mve_move") 1965 (set_attr "length""8")]) 1966 1967 ;; 1968 ;; [vcvtbq_f16_f32]) 1969 ;; 1970 (define_insn "mve_vcvtbq_f16_f32v8hf" 1971 [ 1972 (set (match_operand:V8HF 0 "s_register_operand" "=w") 1973 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0") 1974 (match_operand:V4SF 2 "s_register_operand" "w")] 1975 VCVTBQ_F16_F32)) 1976 ] 1977 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1978 "vcvtb.f16.f32\t%q0, %q2" 1979 [(set_attr "type" "mve_move") 1980 ]) 1981 1982 ;; 1983 ;; [vcvttq_f16_f32]) 1984 ;; 1985 (define_insn "mve_vcvttq_f16_f32v8hf" 1986 [ 1987 (set (match_operand:V8HF 0 "s_register_operand" "=w") 1988 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0") 1989 (match_operand:V4SF 2 "s_register_operand" "w")] 1990 VCVTTQ_F16_F32)) 1991 ] 1992 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1993 "vcvtt.f16.f32\t%q0, %q2" 1994 [(set_attr "type" "mve_move") 1995 ]) 1996 1997 ;; 1998 ;; [veorq_f]) 1999 ;; 2000 (define_insn "mve_veorq_f<mode>" 2001 [ 2002 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2003 (xor:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2004 (match_operand:MVE_0 2 "s_register_operand" "w"))) 2005 ] 2006 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2007 "veor\t%q0, %q1, %q2" 2008 [(set_attr "type" "mve_move") 2009 ]) 2010 2011 ;; 2012 ;; [vmaxnmaq_f]) 2013 ;; 2014 (define_insn "mve_vmaxnmaq_f<mode>" 2015 [ 2016 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2017 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 2018 (match_operand:MVE_0 2 "s_register_operand" "w")] 2019 VMAXNMAQ_F)) 2020 ] 2021 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2022 "vmaxnma.f%#<V_sz_elem> %q0, %q2" 2023 [(set_attr "type" "mve_move") 2024 ]) 2025 2026 ;; 2027 ;; [vmaxnmavq_f]) 2028 ;; 2029 (define_insn "mve_vmaxnmavq_f<mode>" 2030 [ 2031 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 2032 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 2033 (match_operand:MVE_0 2 "s_register_operand" "w")] 2034 VMAXNMAVQ_F)) 2035 ] 2036 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2037 "vmaxnmav.f%#<V_sz_elem> %0, %q2" 2038 [(set_attr "type" "mve_move") 2039 ]) 2040 2041 ;; 2042 ;; [vmaxnmq_f]) 2043 ;; 2044 (define_insn "mve_vmaxnmq_f<mode>" 2045 [ 2046 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2047 (smax:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2048 (match_operand:MVE_0 2 "s_register_operand" "w"))) 2049 ] 2050 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2051 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2" 2052 [(set_attr "type" "mve_move") 2053 ]) 2054 2055 ;; 2056 ;; [vmaxnmvq_f]) 2057 ;; 2058 (define_insn "mve_vmaxnmvq_f<mode>" 2059 [ 2060 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 2061 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 2062 (match_operand:MVE_0 2 "s_register_operand" "w")] 2063 VMAXNMVQ_F)) 2064 ] 2065 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2066 "vmaxnmv.f%#<V_sz_elem> %0, %q2" 2067 [(set_attr "type" "mve_move") 2068 ]) 2069 2070 ;; 2071 ;; [vminnmaq_f]) 2072 ;; 2073 (define_insn "mve_vminnmaq_f<mode>" 2074 [ 2075 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2076 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 2077 (match_operand:MVE_0 2 "s_register_operand" "w")] 2078 VMINNMAQ_F)) 2079 ] 2080 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2081 "vminnma.f%#<V_sz_elem> %q0, %q2" 2082 [(set_attr "type" "mve_move") 2083 ]) 2084 2085 ;; 2086 ;; [vminnmavq_f]) 2087 ;; 2088 (define_insn "mve_vminnmavq_f<mode>" 2089 [ 2090 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 2091 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 2092 (match_operand:MVE_0 2 "s_register_operand" "w")] 2093 VMINNMAVQ_F)) 2094 ] 2095 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2096 "vminnmav.f%#<V_sz_elem> %0, %q2" 2097 [(set_attr "type" "mve_move") 2098 ]) 2099 2100 ;; 2101 ;; [vminnmq_f]) 2102 ;; 2103 (define_insn "mve_vminnmq_f<mode>" 2104 [ 2105 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2106 (smin:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2107 (match_operand:MVE_0 2 "s_register_operand" "w"))) 2108 ] 2109 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2110 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2" 2111 [(set_attr "type" "mve_move") 2112 ]) 2113 2114 ;; 2115 ;; [vminnmvq_f]) 2116 ;; 2117 (define_insn "mve_vminnmvq_f<mode>" 2118 [ 2119 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 2120 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 2121 (match_operand:MVE_0 2 "s_register_operand" "w")] 2122 VMINNMVQ_F)) 2123 ] 2124 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2125 "vminnmv.f%#<V_sz_elem> %0, %q2" 2126 [(set_attr "type" "mve_move") 2127 ]) 2128 2129 ;; 2130 ;; [vmlaldavq_u, vmlaldavq_s]) 2131 ;; 2132 (define_insn "mve_vmlaldavq_<supf><mode>" 2133 [ 2134 (set (match_operand:DI 0 "s_register_operand" "=r") 2135 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 2136 (match_operand:MVE_5 2 "s_register_operand" "w")] 2137 VMLALDAVQ)) 2138 ] 2139 "TARGET_HAVE_MVE" 2140 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2" 2141 [(set_attr "type" "mve_move") 2142 ]) 2143 2144 ;; 2145 ;; [vmlaldavxq_s]) 2146 ;; 2147 (define_insn "mve_vmlaldavxq_s<mode>" 2148 [ 2149 (set (match_operand:DI 0 "s_register_operand" "=r") 2150 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 2151 (match_operand:MVE_5 2 "s_register_operand" "w")] 2152 VMLALDAVXQ_S)) 2153 ] 2154 "TARGET_HAVE_MVE" 2155 "vmlaldavx.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 2156 [(set_attr "type" "mve_move") 2157 ]) 2158 2159 ;; 2160 ;; [vmlsldavq_s]) 2161 ;; 2162 (define_insn "mve_vmlsldavq_s<mode>" 2163 [ 2164 (set (match_operand:DI 0 "s_register_operand" "=r") 2165 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 2166 (match_operand:MVE_5 2 "s_register_operand" "w")] 2167 VMLSLDAVQ_S)) 2168 ] 2169 "TARGET_HAVE_MVE" 2170 "vmlsldav.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 2171 [(set_attr "type" "mve_move") 2172 ]) 2173 2174 ;; 2175 ;; [vmlsldavxq_s]) 2176 ;; 2177 (define_insn "mve_vmlsldavxq_s<mode>" 2178 [ 2179 (set (match_operand:DI 0 "s_register_operand" "=r") 2180 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 2181 (match_operand:MVE_5 2 "s_register_operand" "w")] 2182 VMLSLDAVXQ_S)) 2183 ] 2184 "TARGET_HAVE_MVE" 2185 "vmlsldavx.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 2186 [(set_attr "type" "mve_move") 2187 ]) 2188 2189 ;; 2190 ;; [vmovnbq_u, vmovnbq_s]) 2191 ;; 2192 (define_insn "mve_vmovnbq_<supf><mode>" 2193 [ 2194 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2195 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2196 (match_operand:MVE_5 2 "s_register_operand" "w")] 2197 VMOVNBQ)) 2198 ] 2199 "TARGET_HAVE_MVE" 2200 "vmovnb.i%#<V_sz_elem> %q0, %q2" 2201 [(set_attr "type" "mve_move") 2202 ]) 2203 2204 ;; 2205 ;; [vmovntq_s, vmovntq_u]) 2206 ;; 2207 (define_insn "mve_vmovntq_<supf><mode>" 2208 [ 2209 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2210 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2211 (match_operand:MVE_5 2 "s_register_operand" "w")] 2212 VMOVNTQ)) 2213 ] 2214 "TARGET_HAVE_MVE" 2215 "vmovnt.i%#<V_sz_elem> %q0, %q2" 2216 [(set_attr "type" "mve_move") 2217 ]) 2218 2219 ;; 2220 ;; [vmulq_f]) 2221 ;; 2222 (define_insn "mve_vmulq_f<mode>" 2223 [ 2224 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2225 (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2226 (match_operand:MVE_0 2 "s_register_operand" "w"))) 2227 ] 2228 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2229 "vmul.f%#<V_sz_elem> %q0, %q1, %q2" 2230 [(set_attr "type" "mve_move") 2231 ]) 2232 2233 ;; 2234 ;; [vmulq_n_f]) 2235 ;; 2236 (define_insn "mve_vmulq_n_f<mode>" 2237 [ 2238 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2239 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 2240 (match_operand:<V_elem> 2 "s_register_operand" "r")] 2241 VMULQ_N_F)) 2242 ] 2243 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2244 "vmul.f%#<V_sz_elem> %q0, %q1, %2" 2245 [(set_attr "type" "mve_move") 2246 ]) 2247 2248 ;; 2249 ;; [vornq_f]) 2250 ;; 2251 (define_insn "mve_vornq_f<mode>" 2252 [ 2253 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2254 (ior:MVE_0 (not:MVE_0 (match_operand:MVE_0 2 "s_register_operand" "w")) 2255 (match_operand:MVE_0 1 "s_register_operand" "w"))) 2256 ] 2257 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2258 "vorn\t%q0, %q1, %q2" 2259 [(set_attr "type" "mve_move") 2260 ]) 2261 2262 ;; 2263 ;; [vorrq_f]) 2264 ;; 2265 (define_insn "mve_vorrq_f<mode>" 2266 [ 2267 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2268 (ior:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2269 (match_operand:MVE_0 2 "s_register_operand" "w"))) 2270 ] 2271 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2272 "vorr\t%q0, %q1, %q2" 2273 [(set_attr "type" "mve_move") 2274 ]) 2275 2276 ;; 2277 ;; [vorrq_n_u, vorrq_n_s]) 2278 ;; 2279 (define_insn "mve_vorrq_n_<supf><mode>" 2280 [ 2281 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 2282 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 2283 (match_operand:SI 2 "immediate_operand" "i")] 2284 VORRQ_N)) 2285 ] 2286 "TARGET_HAVE_MVE" 2287 "vorr.i%#<V_sz_elem> %q0, %2" 2288 [(set_attr "type" "mve_move") 2289 ]) 2290 2291 ;; 2292 ;; [vqdmullbq_n_s]) 2293 ;; 2294 (define_insn "mve_vqdmullbq_n_s<mode>" 2295 [ 2296 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 2297 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w") 2298 (match_operand:<V_elem> 2 "s_register_operand" "r")] 2299 VQDMULLBQ_N_S)) 2300 ] 2301 "TARGET_HAVE_MVE" 2302 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2" 2303 [(set_attr "type" "mve_move") 2304 ]) 2305 2306 ;; 2307 ;; [vqdmullbq_s]) 2308 ;; 2309 (define_insn "mve_vqdmullbq_s<mode>" 2310 [ 2311 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 2312 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w") 2313 (match_operand:MVE_5 2 "s_register_operand" "w")] 2314 VQDMULLBQ_S)) 2315 ] 2316 "TARGET_HAVE_MVE" 2317 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2" 2318 [(set_attr "type" "mve_move") 2319 ]) 2320 2321 ;; 2322 ;; [vqdmulltq_n_s]) 2323 ;; 2324 (define_insn "mve_vqdmulltq_n_s<mode>" 2325 [ 2326 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 2327 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w") 2328 (match_operand:<V_elem> 2 "s_register_operand" "r")] 2329 VQDMULLTQ_N_S)) 2330 ] 2331 "TARGET_HAVE_MVE" 2332 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2" 2333 [(set_attr "type" "mve_move") 2334 ]) 2335 2336 ;; 2337 ;; [vqdmulltq_s]) 2338 ;; 2339 (define_insn "mve_vqdmulltq_s<mode>" 2340 [ 2341 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 2342 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w") 2343 (match_operand:MVE_5 2 "s_register_operand" "w")] 2344 VQDMULLTQ_S)) 2345 ] 2346 "TARGET_HAVE_MVE" 2347 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2" 2348 [(set_attr "type" "mve_move") 2349 ]) 2350 2351 ;; 2352 ;; [vqmovnbq_u, vqmovnbq_s]) 2353 ;; 2354 (define_insn "mve_vqmovnbq_<supf><mode>" 2355 [ 2356 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2357 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2358 (match_operand:MVE_5 2 "s_register_operand" "w")] 2359 VQMOVNBQ)) 2360 ] 2361 "TARGET_HAVE_MVE" 2362 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2" 2363 [(set_attr "type" "mve_move") 2364 ]) 2365 2366 ;; 2367 ;; [vqmovntq_u, vqmovntq_s]) 2368 ;; 2369 (define_insn "mve_vqmovntq_<supf><mode>" 2370 [ 2371 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2372 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2373 (match_operand:MVE_5 2 "s_register_operand" "w")] 2374 VQMOVNTQ)) 2375 ] 2376 "TARGET_HAVE_MVE" 2377 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2" 2378 [(set_attr "type" "mve_move") 2379 ]) 2380 2381 ;; 2382 ;; [vqmovunbq_s]) 2383 ;; 2384 (define_insn "mve_vqmovunbq_s<mode>" 2385 [ 2386 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2387 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2388 (match_operand:MVE_5 2 "s_register_operand" "w")] 2389 VQMOVUNBQ_S)) 2390 ] 2391 "TARGET_HAVE_MVE" 2392 "vqmovunb.s%#<V_sz_elem> %q0, %q2" 2393 [(set_attr "type" "mve_move") 2394 ]) 2395 2396 ;; 2397 ;; [vqmovuntq_s]) 2398 ;; 2399 (define_insn "mve_vqmovuntq_s<mode>" 2400 [ 2401 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2402 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2403 (match_operand:MVE_5 2 "s_register_operand" "w")] 2404 VQMOVUNTQ_S)) 2405 ] 2406 "TARGET_HAVE_MVE" 2407 "vqmovunt.s%#<V_sz_elem> %q0, %q2" 2408 [(set_attr "type" "mve_move") 2409 ]) 2410 2411 ;; 2412 ;; [vrmlaldavhxq_s]) 2413 ;; 2414 (define_insn "mve_vrmlaldavhxq_sv4si" 2415 [ 2416 (set (match_operand:DI 0 "s_register_operand" "=r") 2417 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 2418 (match_operand:V4SI 2 "s_register_operand" "w")] 2419 VRMLALDAVHXQ_S)) 2420 ] 2421 "TARGET_HAVE_MVE" 2422 "vrmlaldavhx.s32\t%Q0, %R0, %q1, %q2" 2423 [(set_attr "type" "mve_move") 2424 ]) 2425 2426 ;; 2427 ;; [vrmlsldavhq_s]) 2428 ;; 2429 (define_insn "mve_vrmlsldavhq_sv4si" 2430 [ 2431 (set (match_operand:DI 0 "s_register_operand" "=r") 2432 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 2433 (match_operand:V4SI 2 "s_register_operand" "w")] 2434 VRMLSLDAVHQ_S)) 2435 ] 2436 "TARGET_HAVE_MVE" 2437 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2" 2438 [(set_attr "type" "mve_move") 2439 ]) 2440 2441 ;; 2442 ;; [vrmlsldavhxq_s]) 2443 ;; 2444 (define_insn "mve_vrmlsldavhxq_sv4si" 2445 [ 2446 (set (match_operand:DI 0 "s_register_operand" "=r") 2447 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 2448 (match_operand:V4SI 2 "s_register_operand" "w")] 2449 VRMLSLDAVHXQ_S)) 2450 ] 2451 "TARGET_HAVE_MVE" 2452 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2" 2453 [(set_attr "type" "mve_move") 2454 ]) 2455 2456 ;; 2457 ;; [vshllbq_n_s, vshllbq_n_u]) 2458 ;; 2459 (define_insn "mve_vshllbq_n_<supf><mode>" 2460 [ 2461 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 2462 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w") 2463 (match_operand:SI 2 "immediate_operand" "i")] 2464 VSHLLBQ_N)) 2465 ] 2466 "TARGET_HAVE_MVE" 2467 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 2468 [(set_attr "type" "mve_move") 2469 ]) 2470 2471 ;; 2472 ;; [vshlltq_n_u, vshlltq_n_s]) 2473 ;; 2474 (define_insn "mve_vshlltq_n_<supf><mode>" 2475 [ 2476 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 2477 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w") 2478 (match_operand:SI 2 "immediate_operand" "i")] 2479 VSHLLTQ_N)) 2480 ] 2481 "TARGET_HAVE_MVE" 2482 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 2483 [(set_attr "type" "mve_move") 2484 ]) 2485 2486 ;; 2487 ;; [vsubq_f]) 2488 ;; 2489 (define_insn "mve_vsubq_f<mode>" 2490 [ 2491 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2492 (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2493 (match_operand:MVE_0 2 "s_register_operand" "w"))) 2494 ] 2495 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2496 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2" 2497 [(set_attr "type" "mve_move") 2498 ]) 2499 2500 ;; 2501 ;; [vmulltq_poly_p]) 2502 ;; 2503 (define_insn "mve_vmulltq_poly_p<mode>" 2504 [ 2505 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 2506 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w") 2507 (match_operand:MVE_3 2 "s_register_operand" "w")] 2508 VMULLTQ_POLY_P)) 2509 ] 2510 "TARGET_HAVE_MVE" 2511 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2" 2512 [(set_attr "type" "mve_move") 2513 ]) 2514 2515 ;; 2516 ;; [vmullbq_poly_p]) 2517 ;; 2518 (define_insn "mve_vmullbq_poly_p<mode>" 2519 [ 2520 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 2521 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w") 2522 (match_operand:MVE_3 2 "s_register_operand" "w")] 2523 VMULLBQ_POLY_P)) 2524 ] 2525 "TARGET_HAVE_MVE" 2526 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2" 2527 [(set_attr "type" "mve_move") 2528 ]) 2529 2530 ;; 2531 ;; [vrmlaldavhq_u vrmlaldavhq_s]) 2532 ;; 2533 (define_insn "mve_vrmlaldavhq_<supf>v4si" 2534 [ 2535 (set (match_operand:DI 0 "s_register_operand" "=r") 2536 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 2537 (match_operand:V4SI 2 "s_register_operand" "w")] 2538 VRMLALDAVHQ)) 2539 ] 2540 "TARGET_HAVE_MVE" 2541 "vrmlaldavh.<supf>32\t%Q0, %R0, %q1, %q2" 2542 [(set_attr "type" "mve_move") 2543 ]) 2544 2545 ;; 2546 ;; [vbicq_m_n_s, vbicq_m_n_u]) 2547 ;; 2548 (define_insn "mve_vbicq_m_n_<supf><mode>" 2549 [ 2550 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 2551 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 2552 (match_operand:SI 2 "immediate_operand" "i") 2553 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2554 VBICQ_M_N)) 2555 ] 2556 "TARGET_HAVE_MVE" 2557 "vpst\;vbict.i%#<V_sz_elem>\t%q0, %2" 2558 [(set_attr "type" "mve_move") 2559 (set_attr "length""8")]) 2560 ;; 2561 ;; [vcmpeqq_m_f]) 2562 ;; 2563 (define_insn "mve_vcmpeqq_m_f<mode>" 2564 [ 2565 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2566 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 2567 (match_operand:MVE_0 2 "s_register_operand" "w") 2568 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2569 VCMPEQQ_M_F)) 2570 ] 2571 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2572 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2" 2573 [(set_attr "type" "mve_move") 2574 (set_attr "length""8")]) 2575 ;; 2576 ;; [vcvtaq_m_u, vcvtaq_m_s]) 2577 ;; 2578 (define_insn "mve_vcvtaq_m_<supf><mode>" 2579 [ 2580 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 2581 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 2582 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 2583 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2584 VCVTAQ_M)) 2585 ] 2586 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2587 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2" 2588 [(set_attr "type" "mve_move") 2589 (set_attr "length""8")]) 2590 ;; 2591 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u]) 2592 ;; 2593 (define_insn "mve_vcvtq_m_to_f_<supf><mode>" 2594 [ 2595 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2596 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 2597 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 2598 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2599 VCVTQ_M_TO_F)) 2600 ] 2601 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2602 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2" 2603 [(set_attr "type" "mve_move") 2604 (set_attr "length""8")]) 2605 ;; 2606 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s]) 2607 ;; 2608 (define_insn "mve_vqrshrnbq_n_<supf><mode>" 2609 [ 2610 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2611 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2612 (match_operand:MVE_5 2 "s_register_operand" "w") 2613 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 2614 VQRSHRNBQ_N)) 2615 ] 2616 "TARGET_HAVE_MVE" 2617 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3" 2618 [(set_attr "type" "mve_move") 2619 ]) 2620 ;; 2621 ;; [vqrshrunbq_n_s]) 2622 ;; 2623 (define_insn "mve_vqrshrunbq_n_s<mode>" 2624 [ 2625 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2626 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2627 (match_operand:MVE_5 2 "s_register_operand" "w") 2628 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 2629 VQRSHRUNBQ_N_S)) 2630 ] 2631 "TARGET_HAVE_MVE" 2632 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3" 2633 [(set_attr "type" "mve_move") 2634 ]) 2635 ;; 2636 ;; [vrmlaldavhaq_s vrmlaldavhaq_u]) 2637 ;; 2638 (define_insn "mve_vrmlaldavhaq_<supf>v4si" 2639 [ 2640 (set (match_operand:DI 0 "s_register_operand" "=r") 2641 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 2642 (match_operand:V4SI 2 "s_register_operand" "w") 2643 (match_operand:V4SI 3 "s_register_operand" "w")] 2644 VRMLALDAVHAQ)) 2645 ] 2646 "TARGET_HAVE_MVE" 2647 "vrmlaldavha.<supf>32\t%Q0, %R0, %q2, %q3" 2648 [(set_attr "type" "mve_move") 2649 ]) 2650 2651 ;; 2652 ;; [vabavq_s, vabavq_u]) 2653 ;; 2654 (define_insn "mve_vabavq_<supf><mode>" 2655 [ 2656 (set (match_operand:SI 0 "s_register_operand" "=r") 2657 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 2658 (match_operand:MVE_2 2 "s_register_operand" "w") 2659 (match_operand:MVE_2 3 "s_register_operand" "w")] 2660 VABAVQ)) 2661 ] 2662 "TARGET_HAVE_MVE" 2663 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3" 2664 [(set_attr "type" "mve_move") 2665 ]) 2666 2667 ;; 2668 ;; [vshlcq_u vshlcq_s] 2669 ;; 2670 (define_expand "mve_vshlcq_vec_<supf><mode>" 2671 [(match_operand:MVE_2 0 "s_register_operand") 2672 (match_operand:MVE_2 1 "s_register_operand") 2673 (match_operand:SI 2 "s_register_operand") 2674 (match_operand:SI 3 "mve_imm_32") 2675 (unspec:MVE_2 [(const_int 0)] VSHLCQ)] 2676 "TARGET_HAVE_MVE" 2677 { 2678 rtx ignore_wb = gen_reg_rtx (SImode); 2679 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1], 2680 operands[2], operands[3])); 2681 DONE; 2682 }) 2683 2684 (define_expand "mve_vshlcq_carry_<supf><mode>" 2685 [(match_operand:SI 0 "s_register_operand") 2686 (match_operand:MVE_2 1 "s_register_operand") 2687 (match_operand:SI 2 "s_register_operand") 2688 (match_operand:SI 3 "mve_imm_32") 2689 (unspec:MVE_2 [(const_int 0)] VSHLCQ)] 2690 "TARGET_HAVE_MVE" 2691 { 2692 rtx ignore_vec = gen_reg_rtx (<MODE>mode); 2693 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1], 2694 operands[2], operands[3])); 2695 DONE; 2696 }) 2697 2698 (define_insn "mve_vshlcq_<supf><mode>" 2699 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 2700 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0") 2701 (match_operand:SI 3 "s_register_operand" "1") 2702 (match_operand:SI 4 "mve_imm_32" "Rf")] 2703 VSHLCQ)) 2704 (set (match_operand:SI 1 "s_register_operand" "=r") 2705 (unspec:SI [(match_dup 2) 2706 (match_dup 3) 2707 (match_dup 4)] 2708 VSHLCQ))] 2709 "TARGET_HAVE_MVE" 2710 "vshlc\t%q0, %1, %4") 2711 2712 ;; 2713 ;; [vabsq_m_s]) 2714 ;; 2715 (define_insn "mve_vabsq_m_s<mode>" 2716 [ 2717 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 2718 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 2719 (match_operand:MVE_2 2 "s_register_operand" "w") 2720 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2721 VABSQ_M_S)) 2722 ] 2723 "TARGET_HAVE_MVE" 2724 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2" 2725 [(set_attr "type" "mve_move") 2726 (set_attr "length""8")]) 2727 2728 ;; 2729 ;; [vaddvaq_p_u, vaddvaq_p_s]) 2730 ;; 2731 (define_insn "mve_vaddvaq_p_<supf><mode>" 2732 [ 2733 (set (match_operand:SI 0 "s_register_operand" "=Te") 2734 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 2735 (match_operand:MVE_2 2 "s_register_operand" "w") 2736 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2737 VADDVAQ_P)) 2738 ] 2739 "TARGET_HAVE_MVE" 2740 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2" 2741 [(set_attr "type" "mve_move") 2742 (set_attr "length""8")]) 2743 2744 ;; 2745 ;; [vclsq_m_s]) 2746 ;; 2747 (define_insn "mve_vclsq_m_s<mode>" 2748 [ 2749 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 2750 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 2751 (match_operand:MVE_2 2 "s_register_operand" "w") 2752 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2753 VCLSQ_M_S)) 2754 ] 2755 "TARGET_HAVE_MVE" 2756 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2" 2757 [(set_attr "type" "mve_move") 2758 (set_attr "length""8")]) 2759 2760 ;; 2761 ;; [vclzq_m_s, vclzq_m_u]) 2762 ;; 2763 (define_insn "mve_vclzq_m_<supf><mode>" 2764 [ 2765 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 2766 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 2767 (match_operand:MVE_2 2 "s_register_operand" "w") 2768 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2769 VCLZQ_M)) 2770 ] 2771 "TARGET_HAVE_MVE" 2772 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2" 2773 [(set_attr "type" "mve_move") 2774 (set_attr "length""8")]) 2775 2776 ;; 2777 ;; [vcmpcsq_m_n_u]) 2778 ;; 2779 (define_insn "mve_vcmpcsq_m_n_u<mode>" 2780 [ 2781 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2782 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2783 (match_operand:<V_elem> 2 "s_register_operand" "r") 2784 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2785 VCMPCSQ_M_N_U)) 2786 ] 2787 "TARGET_HAVE_MVE" 2788 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2" 2789 [(set_attr "type" "mve_move") 2790 (set_attr "length""8")]) 2791 2792 ;; 2793 ;; [vcmpcsq_m_u]) 2794 ;; 2795 (define_insn "mve_vcmpcsq_m_u<mode>" 2796 [ 2797 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2798 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2799 (match_operand:MVE_2 2 "s_register_operand" "w") 2800 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2801 VCMPCSQ_M_U)) 2802 ] 2803 "TARGET_HAVE_MVE" 2804 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2" 2805 [(set_attr "type" "mve_move") 2806 (set_attr "length""8")]) 2807 2808 ;; 2809 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s]) 2810 ;; 2811 (define_insn "mve_vcmpeqq_m_n_<supf><mode>" 2812 [ 2813 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2814 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2815 (match_operand:<V_elem> 2 "s_register_operand" "r") 2816 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2817 VCMPEQQ_M_N)) 2818 ] 2819 "TARGET_HAVE_MVE" 2820 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2" 2821 [(set_attr "type" "mve_move") 2822 (set_attr "length""8")]) 2823 2824 ;; 2825 ;; [vcmpeqq_m_u, vcmpeqq_m_s]) 2826 ;; 2827 (define_insn "mve_vcmpeqq_m_<supf><mode>" 2828 [ 2829 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2830 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2831 (match_operand:MVE_2 2 "s_register_operand" "w") 2832 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2833 VCMPEQQ_M)) 2834 ] 2835 "TARGET_HAVE_MVE" 2836 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2" 2837 [(set_attr "type" "mve_move") 2838 (set_attr "length""8")]) 2839 2840 ;; 2841 ;; [vcmpgeq_m_n_s]) 2842 ;; 2843 (define_insn "mve_vcmpgeq_m_n_s<mode>" 2844 [ 2845 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2846 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2847 (match_operand:<V_elem> 2 "s_register_operand" "r") 2848 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2849 VCMPGEQ_M_N_S)) 2850 ] 2851 "TARGET_HAVE_MVE" 2852 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2" 2853 [(set_attr "type" "mve_move") 2854 (set_attr "length""8")]) 2855 2856 ;; 2857 ;; [vcmpgeq_m_s]) 2858 ;; 2859 (define_insn "mve_vcmpgeq_m_s<mode>" 2860 [ 2861 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2862 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2863 (match_operand:MVE_2 2 "s_register_operand" "w") 2864 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2865 VCMPGEQ_M_S)) 2866 ] 2867 "TARGET_HAVE_MVE" 2868 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2" 2869 [(set_attr "type" "mve_move") 2870 (set_attr "length""8")]) 2871 2872 ;; 2873 ;; [vcmpgtq_m_n_s]) 2874 ;; 2875 (define_insn "mve_vcmpgtq_m_n_s<mode>" 2876 [ 2877 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2878 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2879 (match_operand:<V_elem> 2 "s_register_operand" "r") 2880 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2881 VCMPGTQ_M_N_S)) 2882 ] 2883 "TARGET_HAVE_MVE" 2884 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2" 2885 [(set_attr "type" "mve_move") 2886 (set_attr "length""8")]) 2887 2888 ;; 2889 ;; [vcmpgtq_m_s]) 2890 ;; 2891 (define_insn "mve_vcmpgtq_m_s<mode>" 2892 [ 2893 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2894 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2895 (match_operand:MVE_2 2 "s_register_operand" "w") 2896 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2897 VCMPGTQ_M_S)) 2898 ] 2899 "TARGET_HAVE_MVE" 2900 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2" 2901 [(set_attr "type" "mve_move") 2902 (set_attr "length""8")]) 2903 2904 ;; 2905 ;; [vcmphiq_m_n_u]) 2906 ;; 2907 (define_insn "mve_vcmphiq_m_n_u<mode>" 2908 [ 2909 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2910 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2911 (match_operand:<V_elem> 2 "s_register_operand" "r") 2912 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2913 VCMPHIQ_M_N_U)) 2914 ] 2915 "TARGET_HAVE_MVE" 2916 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2" 2917 [(set_attr "type" "mve_move") 2918 (set_attr "length""8")]) 2919 2920 ;; 2921 ;; [vcmphiq_m_u]) 2922 ;; 2923 (define_insn "mve_vcmphiq_m_u<mode>" 2924 [ 2925 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2926 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2927 (match_operand:MVE_2 2 "s_register_operand" "w") 2928 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2929 VCMPHIQ_M_U)) 2930 ] 2931 "TARGET_HAVE_MVE" 2932 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2" 2933 [(set_attr "type" "mve_move") 2934 (set_attr "length""8")]) 2935 2936 ;; 2937 ;; [vcmpleq_m_n_s]) 2938 ;; 2939 (define_insn "mve_vcmpleq_m_n_s<mode>" 2940 [ 2941 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2942 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2943 (match_operand:<V_elem> 2 "s_register_operand" "r") 2944 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2945 VCMPLEQ_M_N_S)) 2946 ] 2947 "TARGET_HAVE_MVE" 2948 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2" 2949 [(set_attr "type" "mve_move") 2950 (set_attr "length""8")]) 2951 2952 ;; 2953 ;; [vcmpleq_m_s]) 2954 ;; 2955 (define_insn "mve_vcmpleq_m_s<mode>" 2956 [ 2957 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2958 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2959 (match_operand:MVE_2 2 "s_register_operand" "w") 2960 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2961 VCMPLEQ_M_S)) 2962 ] 2963 "TARGET_HAVE_MVE" 2964 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2" 2965 [(set_attr "type" "mve_move") 2966 (set_attr "length""8")]) 2967 2968 ;; 2969 ;; [vcmpltq_m_n_s]) 2970 ;; 2971 (define_insn "mve_vcmpltq_m_n_s<mode>" 2972 [ 2973 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2974 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2975 (match_operand:<V_elem> 2 "s_register_operand" "r") 2976 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2977 VCMPLTQ_M_N_S)) 2978 ] 2979 "TARGET_HAVE_MVE" 2980 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2" 2981 [(set_attr "type" "mve_move") 2982 (set_attr "length""8")]) 2983 2984 ;; 2985 ;; [vcmpltq_m_s]) 2986 ;; 2987 (define_insn "mve_vcmpltq_m_s<mode>" 2988 [ 2989 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2990 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2991 (match_operand:MVE_2 2 "s_register_operand" "w") 2992 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2993 VCMPLTQ_M_S)) 2994 ] 2995 "TARGET_HAVE_MVE" 2996 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2" 2997 [(set_attr "type" "mve_move") 2998 (set_attr "length""8")]) 2999 3000 ;; 3001 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s]) 3002 ;; 3003 (define_insn "mve_vcmpneq_m_n_<supf><mode>" 3004 [ 3005 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3006 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 3007 (match_operand:<V_elem> 2 "s_register_operand" "r") 3008 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3009 VCMPNEQ_M_N)) 3010 ] 3011 "TARGET_HAVE_MVE" 3012 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2" 3013 [(set_attr "type" "mve_move") 3014 (set_attr "length""8")]) 3015 3016 ;; 3017 ;; [vcmpneq_m_s, vcmpneq_m_u]) 3018 ;; 3019 (define_insn "mve_vcmpneq_m_<supf><mode>" 3020 [ 3021 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3022 (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 3023 (match_operand:MVE_2 2 "s_register_operand" "w") 3024 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3025 VCMPNEQ_M)) 3026 ] 3027 "TARGET_HAVE_MVE" 3028 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2" 3029 [(set_attr "type" "mve_move") 3030 (set_attr "length""8")]) 3031 3032 ;; 3033 ;; [vdupq_m_n_s, vdupq_m_n_u]) 3034 ;; 3035 (define_insn "mve_vdupq_m_n_<supf><mode>" 3036 [ 3037 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3038 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3039 (match_operand:<V_elem> 2 "s_register_operand" "r") 3040 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3041 VDUPQ_M_N)) 3042 ] 3043 "TARGET_HAVE_MVE" 3044 "vpst\;vdupt.%#<V_sz_elem>\t%q0, %2" 3045 [(set_attr "type" "mve_move") 3046 (set_attr "length""8")]) 3047 3048 ;; 3049 ;; [vmaxaq_m_s]) 3050 ;; 3051 (define_insn "mve_vmaxaq_m_s<mode>" 3052 [ 3053 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3054 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3055 (match_operand:MVE_2 2 "s_register_operand" "w") 3056 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3057 VMAXAQ_M_S)) 3058 ] 3059 "TARGET_HAVE_MVE" 3060 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2" 3061 [(set_attr "type" "mve_move") 3062 (set_attr "length""8")]) 3063 3064 ;; 3065 ;; [vmaxavq_p_s]) 3066 ;; 3067 (define_insn "mve_vmaxavq_p_s<mode>" 3068 [ 3069 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 3070 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 3071 (match_operand:MVE_2 2 "s_register_operand" "w") 3072 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3073 VMAXAVQ_P_S)) 3074 ] 3075 "TARGET_HAVE_MVE" 3076 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2" 3077 [(set_attr "type" "mve_move") 3078 (set_attr "length""8")]) 3079 3080 ;; 3081 ;; [vmaxvq_p_u, vmaxvq_p_s]) 3082 ;; 3083 (define_insn "mve_vmaxvq_p_<supf><mode>" 3084 [ 3085 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 3086 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 3087 (match_operand:MVE_2 2 "s_register_operand" "w") 3088 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3089 VMAXVQ_P)) 3090 ] 3091 "TARGET_HAVE_MVE" 3092 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2" 3093 [(set_attr "type" "mve_move") 3094 (set_attr "length""8")]) 3095 3096 ;; 3097 ;; [vminaq_m_s]) 3098 ;; 3099 (define_insn "mve_vminaq_m_s<mode>" 3100 [ 3101 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3102 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3103 (match_operand:MVE_2 2 "s_register_operand" "w") 3104 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3105 VMINAQ_M_S)) 3106 ] 3107 "TARGET_HAVE_MVE" 3108 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2" 3109 [(set_attr "type" "mve_move") 3110 (set_attr "length""8")]) 3111 3112 ;; 3113 ;; [vminavq_p_s]) 3114 ;; 3115 (define_insn "mve_vminavq_p_s<mode>" 3116 [ 3117 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 3118 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 3119 (match_operand:MVE_2 2 "s_register_operand" "w") 3120 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3121 VMINAVQ_P_S)) 3122 ] 3123 "TARGET_HAVE_MVE" 3124 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2" 3125 [(set_attr "type" "mve_move") 3126 (set_attr "length""8")]) 3127 3128 ;; 3129 ;; [vminvq_p_s, vminvq_p_u]) 3130 ;; 3131 (define_insn "mve_vminvq_p_<supf><mode>" 3132 [ 3133 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 3134 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 3135 (match_operand:MVE_2 2 "s_register_operand" "w") 3136 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3137 VMINVQ_P)) 3138 ] 3139 "TARGET_HAVE_MVE" 3140 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2" 3141 [(set_attr "type" "mve_move") 3142 (set_attr "length""8")]) 3143 3144 ;; 3145 ;; [vmladavaq_u, vmladavaq_s]) 3146 ;; 3147 (define_insn "mve_vmladavaq_<supf><mode>" 3148 [ 3149 (set (match_operand:SI 0 "s_register_operand" "=Te") 3150 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 3151 (match_operand:MVE_2 2 "s_register_operand" "w") 3152 (match_operand:MVE_2 3 "s_register_operand" "w")] 3153 VMLADAVAQ)) 3154 ] 3155 "TARGET_HAVE_MVE" 3156 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3" 3157 [(set_attr "type" "mve_move") 3158 ]) 3159 3160 ;; 3161 ;; [vmladavq_p_u, vmladavq_p_s]) 3162 ;; 3163 (define_insn "mve_vmladavq_p_<supf><mode>" 3164 [ 3165 (set (match_operand:SI 0 "s_register_operand" "=Te") 3166 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 3167 (match_operand:MVE_2 2 "s_register_operand" "w") 3168 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3169 VMLADAVQ_P)) 3170 ] 3171 "TARGET_HAVE_MVE" 3172 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2" 3173 [(set_attr "type" "mve_move") 3174 (set_attr "length""8")]) 3175 3176 ;; 3177 ;; [vmladavxq_p_s]) 3178 ;; 3179 (define_insn "mve_vmladavxq_p_s<mode>" 3180 [ 3181 (set (match_operand:SI 0 "s_register_operand" "=Te") 3182 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 3183 (match_operand:MVE_2 2 "s_register_operand" "w") 3184 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3185 VMLADAVXQ_P_S)) 3186 ] 3187 "TARGET_HAVE_MVE" 3188 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2" 3189 [(set_attr "type" "mve_move") 3190 (set_attr "length""8")]) 3191 3192 ;; 3193 ;; [vmlaq_n_u, vmlaq_n_s]) 3194 ;; 3195 (define_insn "mve_vmlaq_n_<supf><mode>" 3196 [ 3197 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3198 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3199 (match_operand:MVE_2 2 "s_register_operand" "w") 3200 (match_operand:<V_elem> 3 "s_register_operand" "r")] 3201 VMLAQ_N)) 3202 ] 3203 "TARGET_HAVE_MVE" 3204 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 3205 [(set_attr "type" "mve_move") 3206 ]) 3207 3208 ;; 3209 ;; [vmlasq_n_u, vmlasq_n_s]) 3210 ;; 3211 (define_insn "mve_vmlasq_n_<supf><mode>" 3212 [ 3213 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3214 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3215 (match_operand:MVE_2 2 "s_register_operand" "w") 3216 (match_operand:<V_elem> 3 "s_register_operand" "r")] 3217 VMLASQ_N)) 3218 ] 3219 "TARGET_HAVE_MVE" 3220 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3" 3221 [(set_attr "type" "mve_move") 3222 ]) 3223 3224 ;; 3225 ;; [vmlsdavq_p_s]) 3226 ;; 3227 (define_insn "mve_vmlsdavq_p_s<mode>" 3228 [ 3229 (set (match_operand:SI 0 "s_register_operand" "=Te") 3230 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 3231 (match_operand:MVE_2 2 "s_register_operand" "w") 3232 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3233 VMLSDAVQ_P_S)) 3234 ] 3235 "TARGET_HAVE_MVE" 3236 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2" 3237 [(set_attr "type" "mve_move") 3238 (set_attr "length""8")]) 3239 3240 ;; 3241 ;; [vmlsdavxq_p_s]) 3242 ;; 3243 (define_insn "mve_vmlsdavxq_p_s<mode>" 3244 [ 3245 (set (match_operand:SI 0 "s_register_operand" "=Te") 3246 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 3247 (match_operand:MVE_2 2 "s_register_operand" "w") 3248 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3249 VMLSDAVXQ_P_S)) 3250 ] 3251 "TARGET_HAVE_MVE" 3252 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2" 3253 [(set_attr "type" "mve_move") 3254 (set_attr "length""8")]) 3255 3256 ;; 3257 ;; [vmvnq_m_s, vmvnq_m_u]) 3258 ;; 3259 (define_insn "mve_vmvnq_m_<supf><mode>" 3260 [ 3261 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3262 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3263 (match_operand:MVE_2 2 "s_register_operand" "w") 3264 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3265 VMVNQ_M)) 3266 ] 3267 "TARGET_HAVE_MVE" 3268 "vpst\;vmvnt\t%q0, %q2" 3269 [(set_attr "type" "mve_move") 3270 (set_attr "length""8")]) 3271 3272 ;; 3273 ;; [vnegq_m_s]) 3274 ;; 3275 (define_insn "mve_vnegq_m_s<mode>" 3276 [ 3277 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3278 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3279 (match_operand:MVE_2 2 "s_register_operand" "w") 3280 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3281 VNEGQ_M_S)) 3282 ] 3283 "TARGET_HAVE_MVE" 3284 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2" 3285 [(set_attr "type" "mve_move") 3286 (set_attr "length""8")]) 3287 3288 ;; 3289 ;; [vpselq_u, vpselq_s]) 3290 ;; 3291 (define_insn "@mve_vpselq_<supf><mode>" 3292 [ 3293 (set (match_operand:MVE_1 0 "s_register_operand" "=w") 3294 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w") 3295 (match_operand:MVE_1 2 "s_register_operand" "w") 3296 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3297 VPSELQ)) 3298 ] 3299 "TARGET_HAVE_MVE" 3300 "vpsel\t%q0, %q1, %q2" 3301 [(set_attr "type" "mve_move") 3302 ]) 3303 3304 ;; 3305 ;; [vqabsq_m_s]) 3306 ;; 3307 (define_insn "mve_vqabsq_m_s<mode>" 3308 [ 3309 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3310 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3311 (match_operand:MVE_2 2 "s_register_operand" "w") 3312 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3313 VQABSQ_M_S)) 3314 ] 3315 "TARGET_HAVE_MVE" 3316 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2" 3317 [(set_attr "type" "mve_move") 3318 (set_attr "length""8")]) 3319 3320 ;; 3321 ;; [vqdmlahq_n_s]) 3322 ;; 3323 (define_insn "mve_vqdmlahq_n_<supf><mode>" 3324 [ 3325 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3326 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3327 (match_operand:MVE_2 2 "s_register_operand" "w") 3328 (match_operand:<V_elem> 3 "s_register_operand" "r")] 3329 VQDMLAHQ_N)) 3330 ] 3331 "TARGET_HAVE_MVE" 3332 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3" 3333 [(set_attr "type" "mve_move") 3334 ]) 3335 3336 ;; 3337 ;; [vqdmlashq_n_s]) 3338 ;; 3339 (define_insn "mve_vqdmlashq_n_<supf><mode>" 3340 [ 3341 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3342 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3343 (match_operand:MVE_2 2 "s_register_operand" "w") 3344 (match_operand:<V_elem> 3 "s_register_operand" "r")] 3345 VQDMLASHQ_N)) 3346 ] 3347 "TARGET_HAVE_MVE" 3348 "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3" 3349 [(set_attr "type" "mve_move") 3350 ]) 3351 3352 ;; 3353 ;; [vqnegq_m_s]) 3354 ;; 3355 (define_insn "mve_vqnegq_m_s<mode>" 3356 [ 3357 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3358 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3359 (match_operand:MVE_2 2 "s_register_operand" "w") 3360 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3361 VQNEGQ_M_S)) 3362 ] 3363 "TARGET_HAVE_MVE" 3364 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2" 3365 [(set_attr "type" "mve_move") 3366 (set_attr "length""8")]) 3367 3368 ;; 3369 ;; [vqrdmladhq_s]) 3370 ;; 3371 (define_insn "mve_vqrdmladhq_s<mode>" 3372 [ 3373 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3374 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3375 (match_operand:MVE_2 2 "s_register_operand" "w") 3376 (match_operand:MVE_2 3 "s_register_operand" "w")] 3377 VQRDMLADHQ_S)) 3378 ] 3379 "TARGET_HAVE_MVE" 3380 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3" 3381 [(set_attr "type" "mve_move") 3382 ]) 3383 3384 ;; 3385 ;; [vqrdmladhxq_s]) 3386 ;; 3387 (define_insn "mve_vqrdmladhxq_s<mode>" 3388 [ 3389 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3390 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3391 (match_operand:MVE_2 2 "s_register_operand" "w") 3392 (match_operand:MVE_2 3 "s_register_operand" "w")] 3393 VQRDMLADHXQ_S)) 3394 ] 3395 "TARGET_HAVE_MVE" 3396 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3" 3397 [(set_attr "type" "mve_move") 3398 ]) 3399 3400 ;; 3401 ;; [vqrdmlahq_n_s]) 3402 ;; 3403 (define_insn "mve_vqrdmlahq_n_<supf><mode>" 3404 [ 3405 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3406 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3407 (match_operand:MVE_2 2 "s_register_operand" "w") 3408 (match_operand:<V_elem> 3 "s_register_operand" "r")] 3409 VQRDMLAHQ_N)) 3410 ] 3411 "TARGET_HAVE_MVE" 3412 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3" 3413 [(set_attr "type" "mve_move") 3414 ]) 3415 3416 ;; 3417 ;; [vqrdmlashq_n_s]) 3418 ;; 3419 (define_insn "mve_vqrdmlashq_n_<supf><mode>" 3420 [ 3421 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3422 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3423 (match_operand:MVE_2 2 "s_register_operand" "w") 3424 (match_operand:<V_elem> 3 "s_register_operand" "r")] 3425 VQRDMLASHQ_N)) 3426 ] 3427 "TARGET_HAVE_MVE" 3428 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3" 3429 [(set_attr "type" "mve_move") 3430 ]) 3431 3432 ;; 3433 ;; [vqrdmlsdhq_s]) 3434 ;; 3435 (define_insn "mve_vqrdmlsdhq_s<mode>" 3436 [ 3437 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3438 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3439 (match_operand:MVE_2 2 "s_register_operand" "w") 3440 (match_operand:MVE_2 3 "s_register_operand" "w")] 3441 VQRDMLSDHQ_S)) 3442 ] 3443 "TARGET_HAVE_MVE" 3444 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3" 3445 [(set_attr "type" "mve_move") 3446 ]) 3447 3448 ;; 3449 ;; [vqrdmlsdhxq_s]) 3450 ;; 3451 (define_insn "mve_vqrdmlsdhxq_s<mode>" 3452 [ 3453 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3454 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3455 (match_operand:MVE_2 2 "s_register_operand" "w") 3456 (match_operand:MVE_2 3 "s_register_operand" "w")] 3457 VQRDMLSDHXQ_S)) 3458 ] 3459 "TARGET_HAVE_MVE" 3460 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3" 3461 [(set_attr "type" "mve_move") 3462 ]) 3463 3464 ;; 3465 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u]) 3466 ;; 3467 (define_insn "mve_vqrshlq_m_n_<supf><mode>" 3468 [ 3469 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3470 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3471 (match_operand:SI 2 "s_register_operand" "r") 3472 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3473 VQRSHLQ_M_N)) 3474 ] 3475 "TARGET_HAVE_MVE" 3476 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2" 3477 [(set_attr "type" "mve_move") 3478 (set_attr "length""8")]) 3479 3480 ;; 3481 ;; [vqshlq_m_r_u, vqshlq_m_r_s]) 3482 ;; 3483 (define_insn "mve_vqshlq_m_r_<supf><mode>" 3484 [ 3485 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3486 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3487 (match_operand:SI 2 "s_register_operand" "r") 3488 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3489 VQSHLQ_M_R)) 3490 ] 3491 "TARGET_HAVE_MVE" 3492 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2" 3493 [(set_attr "type" "mve_move") 3494 (set_attr "length""8")]) 3495 3496 ;; 3497 ;; [vrev64q_m_u, vrev64q_m_s]) 3498 ;; 3499 (define_insn "mve_vrev64q_m_<supf><mode>" 3500 [ 3501 (set (match_operand:MVE_2 0 "s_register_operand" "=&w") 3502 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3503 (match_operand:MVE_2 2 "s_register_operand" "w") 3504 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3505 VREV64Q_M)) 3506 ] 3507 "TARGET_HAVE_MVE" 3508 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2" 3509 [(set_attr "type" "mve_move") 3510 (set_attr "length""8")]) 3511 3512 ;; 3513 ;; [vrshlq_m_n_s, vrshlq_m_n_u]) 3514 ;; 3515 (define_insn "mve_vrshlq_m_n_<supf><mode>" 3516 [ 3517 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3518 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3519 (match_operand:SI 2 "s_register_operand" "r") 3520 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3521 VRSHLQ_M_N)) 3522 ] 3523 "TARGET_HAVE_MVE" 3524 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2" 3525 [(set_attr "type" "mve_move") 3526 (set_attr "length""8")]) 3527 3528 ;; 3529 ;; [vshlq_m_r_u, vshlq_m_r_s]) 3530 ;; 3531 (define_insn "mve_vshlq_m_r_<supf><mode>" 3532 [ 3533 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3534 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3535 (match_operand:SI 2 "s_register_operand" "r") 3536 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3537 VSHLQ_M_R)) 3538 ] 3539 "TARGET_HAVE_MVE" 3540 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2" 3541 [(set_attr "type" "mve_move") 3542 (set_attr "length""8")]) 3543 3544 ;; 3545 ;; [vsliq_n_u, vsliq_n_s]) 3546 ;; 3547 (define_insn "mve_vsliq_n_<supf><mode>" 3548 [ 3549 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3550 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3551 (match_operand:MVE_2 2 "s_register_operand" "w") 3552 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")] 3553 VSLIQ_N)) 3554 ] 3555 "TARGET_HAVE_MVE" 3556 "vsli.%#<V_sz_elem>\t%q0, %q2, %3" 3557 [(set_attr "type" "mve_move") 3558 ]) 3559 3560 ;; 3561 ;; [vsriq_n_u, vsriq_n_s]) 3562 ;; 3563 (define_insn "mve_vsriq_n_<supf><mode>" 3564 [ 3565 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3566 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3567 (match_operand:MVE_2 2 "s_register_operand" "w") 3568 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")] 3569 VSRIQ_N)) 3570 ] 3571 "TARGET_HAVE_MVE" 3572 "vsri.%#<V_sz_elem>\t%q0, %q2, %3" 3573 [(set_attr "type" "mve_move") 3574 ]) 3575 3576 ;; 3577 ;; [vqdmlsdhxq_s]) 3578 ;; 3579 (define_insn "mve_vqdmlsdhxq_s<mode>" 3580 [ 3581 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3582 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3583 (match_operand:MVE_2 2 "s_register_operand" "w") 3584 (match_operand:MVE_2 3 "s_register_operand" "w")] 3585 VQDMLSDHXQ_S)) 3586 ] 3587 "TARGET_HAVE_MVE" 3588 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3" 3589 [(set_attr "type" "mve_move") 3590 ]) 3591 3592 ;; 3593 ;; [vqdmlsdhq_s]) 3594 ;; 3595 (define_insn "mve_vqdmlsdhq_s<mode>" 3596 [ 3597 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3598 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3599 (match_operand:MVE_2 2 "s_register_operand" "w") 3600 (match_operand:MVE_2 3 "s_register_operand" "w")] 3601 VQDMLSDHQ_S)) 3602 ] 3603 "TARGET_HAVE_MVE" 3604 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3" 3605 [(set_attr "type" "mve_move") 3606 ]) 3607 3608 ;; 3609 ;; [vqdmladhxq_s]) 3610 ;; 3611 (define_insn "mve_vqdmladhxq_s<mode>" 3612 [ 3613 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3614 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3615 (match_operand:MVE_2 2 "s_register_operand" "w") 3616 (match_operand:MVE_2 3 "s_register_operand" "w")] 3617 VQDMLADHXQ_S)) 3618 ] 3619 "TARGET_HAVE_MVE" 3620 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3" 3621 [(set_attr "type" "mve_move") 3622 ]) 3623 3624 ;; 3625 ;; [vqdmladhq_s]) 3626 ;; 3627 (define_insn "mve_vqdmladhq_s<mode>" 3628 [ 3629 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3630 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3631 (match_operand:MVE_2 2 "s_register_operand" "w") 3632 (match_operand:MVE_2 3 "s_register_operand" "w")] 3633 VQDMLADHQ_S)) 3634 ] 3635 "TARGET_HAVE_MVE" 3636 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3" 3637 [(set_attr "type" "mve_move") 3638 ]) 3639 3640 ;; 3641 ;; [vmlsdavaxq_s]) 3642 ;; 3643 (define_insn "mve_vmlsdavaxq_s<mode>" 3644 [ 3645 (set (match_operand:SI 0 "s_register_operand" "=Te") 3646 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 3647 (match_operand:MVE_2 2 "s_register_operand" "w") 3648 (match_operand:MVE_2 3 "s_register_operand" "w")] 3649 VMLSDAVAXQ_S)) 3650 ] 3651 "TARGET_HAVE_MVE" 3652 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3" 3653 [(set_attr "type" "mve_move") 3654 ]) 3655 3656 ;; 3657 ;; [vmlsdavaq_s]) 3658 ;; 3659 (define_insn "mve_vmlsdavaq_s<mode>" 3660 [ 3661 (set (match_operand:SI 0 "s_register_operand" "=Te") 3662 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 3663 (match_operand:MVE_2 2 "s_register_operand" "w") 3664 (match_operand:MVE_2 3 "s_register_operand" "w")] 3665 VMLSDAVAQ_S)) 3666 ] 3667 "TARGET_HAVE_MVE" 3668 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3" 3669 [(set_attr "type" "mve_move") 3670 ]) 3671 3672 ;; 3673 ;; [vmladavaxq_s]) 3674 ;; 3675 (define_insn "mve_vmladavaxq_s<mode>" 3676 [ 3677 (set (match_operand:SI 0 "s_register_operand" "=Te") 3678 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 3679 (match_operand:MVE_2 2 "s_register_operand" "w") 3680 (match_operand:MVE_2 3 "s_register_operand" "w")] 3681 VMLADAVAXQ_S)) 3682 ] 3683 "TARGET_HAVE_MVE" 3684 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3" 3685 [(set_attr "type" "mve_move") 3686 ]) 3687 ;; 3688 ;; [vabsq_m_f]) 3689 ;; 3690 (define_insn "mve_vabsq_m_f<mode>" 3691 [ 3692 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 3693 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 3694 (match_operand:MVE_0 2 "s_register_operand" "w") 3695 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3696 VABSQ_M_F)) 3697 ] 3698 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3699 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2" 3700 [(set_attr "type" "mve_move") 3701 (set_attr "length""8")]) 3702 3703 ;; 3704 ;; [vaddlvaq_p_s vaddlvaq_p_u]) 3705 ;; 3706 (define_insn "mve_vaddlvaq_p_<supf>v4si" 3707 [ 3708 (set (match_operand:DI 0 "s_register_operand" "=r") 3709 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 3710 (match_operand:V4SI 2 "s_register_operand" "w") 3711 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 3712 VADDLVAQ_P)) 3713 ] 3714 "TARGET_HAVE_MVE" 3715 "vpst\;vaddlvat.<supf>32\t%Q0, %R0, %q2" 3716 [(set_attr "type" "mve_move") 3717 (set_attr "length""8")]) 3718 ;; 3719 ;; [vcmlaq, vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270]) 3720 ;; 3721 (define_insn "mve_vcmlaq<mve_rot><mode>" 3722 [ 3723 (set (match_operand:MVE_0 0 "s_register_operand" "=w,w") 3724 (plus:MVE_0 (match_operand:MVE_0 1 "reg_or_zero_operand" "Dz,0") 3725 (unspec:MVE_0 3726 [(match_operand:MVE_0 2 "s_register_operand" "w,w") 3727 (match_operand:MVE_0 3 "s_register_operand" "w,w")] 3728 VCMLA))) 3729 ] 3730 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3731 "@ 3732 vcmul.f%#<V_sz_elem> %q0, %q2, %q3, #<rot> 3733 vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>" 3734 [(set_attr "type" "mve_move") 3735 ]) 3736 3737 ;; 3738 ;; [vcmpeqq_m_n_f]) 3739 ;; 3740 (define_insn "mve_vcmpeqq_m_n_f<mode>" 3741 [ 3742 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3743 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3744 (match_operand:<V_elem> 2 "s_register_operand" "r") 3745 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3746 VCMPEQQ_M_N_F)) 3747 ] 3748 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3749 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2" 3750 [(set_attr "type" "mve_move") 3751 (set_attr "length""8")]) 3752 3753 ;; 3754 ;; [vcmpgeq_m_f]) 3755 ;; 3756 (define_insn "mve_vcmpgeq_m_f<mode>" 3757 [ 3758 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3759 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3760 (match_operand:MVE_0 2 "s_register_operand" "w") 3761 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3762 VCMPGEQ_M_F)) 3763 ] 3764 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3765 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2" 3766 [(set_attr "type" "mve_move") 3767 (set_attr "length""8")]) 3768 3769 ;; 3770 ;; [vcmpgeq_m_n_f]) 3771 ;; 3772 (define_insn "mve_vcmpgeq_m_n_f<mode>" 3773 [ 3774 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3775 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3776 (match_operand:<V_elem> 2 "s_register_operand" "r") 3777 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3778 VCMPGEQ_M_N_F)) 3779 ] 3780 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3781 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2" 3782 [(set_attr "type" "mve_move") 3783 (set_attr "length""8")]) 3784 3785 ;; 3786 ;; [vcmpgtq_m_f]) 3787 ;; 3788 (define_insn "mve_vcmpgtq_m_f<mode>" 3789 [ 3790 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3791 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3792 (match_operand:MVE_0 2 "s_register_operand" "w") 3793 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3794 VCMPGTQ_M_F)) 3795 ] 3796 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3797 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2" 3798 [(set_attr "type" "mve_move") 3799 (set_attr "length""8")]) 3800 3801 ;; 3802 ;; [vcmpgtq_m_n_f]) 3803 ;; 3804 (define_insn "mve_vcmpgtq_m_n_f<mode>" 3805 [ 3806 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3807 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3808 (match_operand:<V_elem> 2 "s_register_operand" "r") 3809 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3810 VCMPGTQ_M_N_F)) 3811 ] 3812 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3813 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2" 3814 [(set_attr "type" "mve_move") 3815 (set_attr "length""8")]) 3816 3817 ;; 3818 ;; [vcmpleq_m_f]) 3819 ;; 3820 (define_insn "mve_vcmpleq_m_f<mode>" 3821 [ 3822 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3823 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3824 (match_operand:MVE_0 2 "s_register_operand" "w") 3825 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3826 VCMPLEQ_M_F)) 3827 ] 3828 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3829 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2" 3830 [(set_attr "type" "mve_move") 3831 (set_attr "length""8")]) 3832 3833 ;; 3834 ;; [vcmpleq_m_n_f]) 3835 ;; 3836 (define_insn "mve_vcmpleq_m_n_f<mode>" 3837 [ 3838 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3839 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3840 (match_operand:<V_elem> 2 "s_register_operand" "r") 3841 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3842 VCMPLEQ_M_N_F)) 3843 ] 3844 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3845 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2" 3846 [(set_attr "type" "mve_move") 3847 (set_attr "length""8")]) 3848 3849 ;; 3850 ;; [vcmpltq_m_f]) 3851 ;; 3852 (define_insn "mve_vcmpltq_m_f<mode>" 3853 [ 3854 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3855 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3856 (match_operand:MVE_0 2 "s_register_operand" "w") 3857 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3858 VCMPLTQ_M_F)) 3859 ] 3860 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3861 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2" 3862 [(set_attr "type" "mve_move") 3863 (set_attr "length""8")]) 3864 3865 ;; 3866 ;; [vcmpltq_m_n_f]) 3867 ;; 3868 (define_insn "mve_vcmpltq_m_n_f<mode>" 3869 [ 3870 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3871 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3872 (match_operand:<V_elem> 2 "s_register_operand" "r") 3873 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3874 VCMPLTQ_M_N_F)) 3875 ] 3876 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3877 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2" 3878 [(set_attr "type" "mve_move") 3879 (set_attr "length""8")]) 3880 3881 ;; 3882 ;; [vcmpneq_m_f]) 3883 ;; 3884 (define_insn "mve_vcmpneq_m_f<mode>" 3885 [ 3886 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3887 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3888 (match_operand:MVE_0 2 "s_register_operand" "w") 3889 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3890 VCMPNEQ_M_F)) 3891 ] 3892 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3893 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2" 3894 [(set_attr "type" "mve_move") 3895 (set_attr "length""8")]) 3896 3897 ;; 3898 ;; [vcmpneq_m_n_f]) 3899 ;; 3900 (define_insn "mve_vcmpneq_m_n_f<mode>" 3901 [ 3902 (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3903 (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3904 (match_operand:<V_elem> 2 "s_register_operand" "r") 3905 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3906 VCMPNEQ_M_N_F)) 3907 ] 3908 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3909 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2" 3910 [(set_attr "type" "mve_move") 3911 (set_attr "length""8")]) 3912 3913 ;; 3914 ;; [vcvtbq_m_f16_f32]) 3915 ;; 3916 (define_insn "mve_vcvtbq_m_f16_f32v8hf" 3917 [ 3918 (set (match_operand:V8HF 0 "s_register_operand" "=w") 3919 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0") 3920 (match_operand:V4SF 2 "s_register_operand" "w") 3921 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3922 VCVTBQ_M_F16_F32)) 3923 ] 3924 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3925 "vpst\;vcvtbt.f16.f32\t%q0, %q2" 3926 [(set_attr "type" "mve_move") 3927 (set_attr "length""8")]) 3928 3929 ;; 3930 ;; [vcvtbq_m_f32_f16]) 3931 ;; 3932 (define_insn "mve_vcvtbq_m_f32_f16v4sf" 3933 [ 3934 (set (match_operand:V4SF 0 "s_register_operand" "=w") 3935 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0") 3936 (match_operand:V8HF 2 "s_register_operand" "w") 3937 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3938 VCVTBQ_M_F32_F16)) 3939 ] 3940 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3941 "vpst\;vcvtbt.f32.f16\t%q0, %q2" 3942 [(set_attr "type" "mve_move") 3943 (set_attr "length""8")]) 3944 3945 ;; 3946 ;; [vcvttq_m_f16_f32]) 3947 ;; 3948 (define_insn "mve_vcvttq_m_f16_f32v8hf" 3949 [ 3950 (set (match_operand:V8HF 0 "s_register_operand" "=w") 3951 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0") 3952 (match_operand:V4SF 2 "s_register_operand" "w") 3953 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3954 VCVTTQ_M_F16_F32)) 3955 ] 3956 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3957 "vpst\;vcvttt.f16.f32\t%q0, %q2" 3958 [(set_attr "type" "mve_move") 3959 (set_attr "length""8")]) 3960 3961 ;; 3962 ;; [vcvttq_m_f32_f16]) 3963 ;; 3964 (define_insn "mve_vcvttq_m_f32_f16v4sf" 3965 [ 3966 (set (match_operand:V4SF 0 "s_register_operand" "=w") 3967 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0") 3968 (match_operand:V8HF 2 "s_register_operand" "w") 3969 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3970 VCVTTQ_M_F32_F16)) 3971 ] 3972 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3973 "vpst\;vcvttt.f32.f16\t%q0, %q2" 3974 [(set_attr "type" "mve_move") 3975 (set_attr "length""8")]) 3976 3977 ;; 3978 ;; [vdupq_m_n_f]) 3979 ;; 3980 (define_insn "mve_vdupq_m_n_f<mode>" 3981 [ 3982 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 3983 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 3984 (match_operand:<V_elem> 2 "s_register_operand" "r") 3985 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3986 VDUPQ_M_N_F)) 3987 ] 3988 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3989 "vpst\;vdupt.%#<V_sz_elem>\t%q0, %2" 3990 [(set_attr "type" "mve_move") 3991 (set_attr "length""8")]) 3992 3993 ;; 3994 ;; [vfmaq_f]) 3995 ;; 3996 (define_insn "mve_vfmaq_f<mode>" 3997 [ 3998 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 3999 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4000 (match_operand:MVE_0 2 "s_register_operand" "w") 4001 (match_operand:MVE_0 3 "s_register_operand" "w")] 4002 VFMAQ_F)) 4003 ] 4004 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4005 "vfma.f%#<V_sz_elem> %q0, %q2, %q3" 4006 [(set_attr "type" "mve_move") 4007 ]) 4008 4009 ;; 4010 ;; [vfmaq_n_f]) 4011 ;; 4012 (define_insn "mve_vfmaq_n_f<mode>" 4013 [ 4014 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4015 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4016 (match_operand:MVE_0 2 "s_register_operand" "w") 4017 (match_operand:<V_elem> 3 "s_register_operand" "r")] 4018 VFMAQ_N_F)) 4019 ] 4020 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4021 "vfma.f%#<V_sz_elem> %q0, %q2, %3" 4022 [(set_attr "type" "mve_move") 4023 ]) 4024 4025 ;; 4026 ;; [vfmasq_n_f]) 4027 ;; 4028 (define_insn "mve_vfmasq_n_f<mode>" 4029 [ 4030 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4031 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4032 (match_operand:MVE_0 2 "s_register_operand" "w") 4033 (match_operand:<V_elem> 3 "s_register_operand" "r")] 4034 VFMASQ_N_F)) 4035 ] 4036 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4037 "vfmas.f%#<V_sz_elem> %q0, %q2, %3" 4038 [(set_attr "type" "mve_move") 4039 ]) 4040 ;; 4041 ;; [vfmsq_f]) 4042 ;; 4043 (define_insn "mve_vfmsq_f<mode>" 4044 [ 4045 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4046 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4047 (match_operand:MVE_0 2 "s_register_operand" "w") 4048 (match_operand:MVE_0 3 "s_register_operand" "w")] 4049 VFMSQ_F)) 4050 ] 4051 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4052 "vfms.f%#<V_sz_elem> %q0, %q2, %q3" 4053 [(set_attr "type" "mve_move") 4054 ]) 4055 4056 ;; 4057 ;; [vmaxnmaq_m_f]) 4058 ;; 4059 (define_insn "mve_vmaxnmaq_m_f<mode>" 4060 [ 4061 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4062 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4063 (match_operand:MVE_0 2 "s_register_operand" "w") 4064 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4065 VMAXNMAQ_M_F)) 4066 ] 4067 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4068 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2" 4069 [(set_attr "type" "mve_move") 4070 (set_attr "length""8")]) 4071 ;; 4072 ;; [vmaxnmavq_p_f]) 4073 ;; 4074 (define_insn "mve_vmaxnmavq_p_f<mode>" 4075 [ 4076 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 4077 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 4078 (match_operand:MVE_0 2 "s_register_operand" "w") 4079 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4080 VMAXNMAVQ_P_F)) 4081 ] 4082 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4083 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2" 4084 [(set_attr "type" "mve_move") 4085 (set_attr "length""8")]) 4086 4087 ;; 4088 ;; [vmaxnmvq_p_f]) 4089 ;; 4090 (define_insn "mve_vmaxnmvq_p_f<mode>" 4091 [ 4092 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 4093 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 4094 (match_operand:MVE_0 2 "s_register_operand" "w") 4095 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4096 VMAXNMVQ_P_F)) 4097 ] 4098 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4099 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2" 4100 [(set_attr "type" "mve_move") 4101 (set_attr "length""8")]) 4102 ;; 4103 ;; [vminnmaq_m_f]) 4104 ;; 4105 (define_insn "mve_vminnmaq_m_f<mode>" 4106 [ 4107 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4108 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4109 (match_operand:MVE_0 2 "s_register_operand" "w") 4110 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4111 VMINNMAQ_M_F)) 4112 ] 4113 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4114 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2" 4115 [(set_attr "type" "mve_move") 4116 (set_attr "length""8")]) 4117 4118 ;; 4119 ;; [vminnmavq_p_f]) 4120 ;; 4121 (define_insn "mve_vminnmavq_p_f<mode>" 4122 [ 4123 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 4124 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 4125 (match_operand:MVE_0 2 "s_register_operand" "w") 4126 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4127 VMINNMAVQ_P_F)) 4128 ] 4129 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4130 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2" 4131 [(set_attr "type" "mve_move") 4132 (set_attr "length""8")]) 4133 ;; 4134 ;; [vminnmvq_p_f]) 4135 ;; 4136 (define_insn "mve_vminnmvq_p_f<mode>" 4137 [ 4138 (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 4139 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 4140 (match_operand:MVE_0 2 "s_register_operand" "w") 4141 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4142 VMINNMVQ_P_F)) 4143 ] 4144 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4145 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2" 4146 [(set_attr "type" "mve_move") 4147 (set_attr "length""8")]) 4148 4149 ;; 4150 ;; [vmlaldavaq_s, vmlaldavaq_u]) 4151 ;; 4152 (define_insn "mve_vmlaldavaq_<supf><mode>" 4153 [ 4154 (set (match_operand:DI 0 "s_register_operand" "=r") 4155 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4156 (match_operand:MVE_5 2 "s_register_operand" "w") 4157 (match_operand:MVE_5 3 "s_register_operand" "w")] 4158 VMLALDAVAQ)) 4159 ] 4160 "TARGET_HAVE_MVE" 4161 "vmlaldava.<supf>%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 4162 [(set_attr "type" "mve_move") 4163 ]) 4164 4165 ;; 4166 ;; [vmlaldavaxq_s]) 4167 ;; 4168 (define_insn "mve_vmlaldavaxq_s<mode>" 4169 [ 4170 (set (match_operand:DI 0 "s_register_operand" "=r") 4171 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4172 (match_operand:MVE_5 2 "s_register_operand" "w") 4173 (match_operand:MVE_5 3 "s_register_operand" "w")] 4174 VMLALDAVAXQ_S)) 4175 ] 4176 "TARGET_HAVE_MVE" 4177 "vmlaldavax.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 4178 [(set_attr "type" "mve_move") 4179 ]) 4180 4181 ;; 4182 ;; [vmlaldavq_p_u, vmlaldavq_p_s]) 4183 ;; 4184 (define_insn "mve_vmlaldavq_p_<supf><mode>" 4185 [ 4186 (set (match_operand:DI 0 "s_register_operand" "=r") 4187 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 4188 (match_operand:MVE_5 2 "s_register_operand" "w") 4189 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4190 VMLALDAVQ_P)) 4191 ] 4192 "TARGET_HAVE_MVE" 4193 "vpst\;vmlaldavt.<supf>%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 4194 [(set_attr "type" "mve_move") 4195 (set_attr "length""8")]) 4196 4197 ;; 4198 ;; [vmlaldavxq_p_s]) 4199 ;; 4200 (define_insn "mve_vmlaldavxq_p_s<mode>" 4201 [ 4202 (set (match_operand:DI 0 "s_register_operand" "=r") 4203 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 4204 (match_operand:MVE_5 2 "s_register_operand" "w") 4205 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4206 VMLALDAVXQ_P_S)) 4207 ] 4208 "TARGET_HAVE_MVE" 4209 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 4210 [(set_attr "type" "mve_move") 4211 (set_attr "length""8")]) 4212 ;; 4213 ;; [vmlsldavaq_s]) 4214 ;; 4215 (define_insn "mve_vmlsldavaq_s<mode>" 4216 [ 4217 (set (match_operand:DI 0 "s_register_operand" "=r") 4218 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4219 (match_operand:MVE_5 2 "s_register_operand" "w") 4220 (match_operand:MVE_5 3 "s_register_operand" "w")] 4221 VMLSLDAVAQ_S)) 4222 ] 4223 "TARGET_HAVE_MVE" 4224 "vmlsldava.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 4225 [(set_attr "type" "mve_move") 4226 ]) 4227 4228 ;; 4229 ;; [vmlsldavaxq_s]) 4230 ;; 4231 (define_insn "mve_vmlsldavaxq_s<mode>" 4232 [ 4233 (set (match_operand:DI 0 "s_register_operand" "=r") 4234 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4235 (match_operand:MVE_5 2 "s_register_operand" "w") 4236 (match_operand:MVE_5 3 "s_register_operand" "w")] 4237 VMLSLDAVAXQ_S)) 4238 ] 4239 "TARGET_HAVE_MVE" 4240 "vmlsldavax.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 4241 [(set_attr "type" "mve_move") 4242 ]) 4243 4244 ;; 4245 ;; [vmlsldavq_p_s]) 4246 ;; 4247 (define_insn "mve_vmlsldavq_p_s<mode>" 4248 [ 4249 (set (match_operand:DI 0 "s_register_operand" "=r") 4250 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 4251 (match_operand:MVE_5 2 "s_register_operand" "w") 4252 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4253 VMLSLDAVQ_P_S)) 4254 ] 4255 "TARGET_HAVE_MVE" 4256 "vpst\;vmlsldavt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 4257 [(set_attr "type" "mve_move") 4258 (set_attr "length""8")]) 4259 4260 ;; 4261 ;; [vmlsldavxq_p_s]) 4262 ;; 4263 (define_insn "mve_vmlsldavxq_p_s<mode>" 4264 [ 4265 (set (match_operand:DI 0 "s_register_operand" "=r") 4266 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 4267 (match_operand:MVE_5 2 "s_register_operand" "w") 4268 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4269 VMLSLDAVXQ_P_S)) 4270 ] 4271 "TARGET_HAVE_MVE" 4272 "vpst\;vmlsldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 4273 [(set_attr "type" "mve_move") 4274 (set_attr "length""8")]) 4275 ;; 4276 ;; [vmovlbq_m_u, vmovlbq_m_s]) 4277 ;; 4278 (define_insn "mve_vmovlbq_m_<supf><mode>" 4279 [ 4280 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 4281 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 4282 (match_operand:MVE_3 2 "s_register_operand" "w") 4283 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4284 VMOVLBQ_M)) 4285 ] 4286 "TARGET_HAVE_MVE" 4287 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2" 4288 [(set_attr "type" "mve_move") 4289 (set_attr "length""8")]) 4290 ;; 4291 ;; [vmovltq_m_u, vmovltq_m_s]) 4292 ;; 4293 (define_insn "mve_vmovltq_m_<supf><mode>" 4294 [ 4295 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 4296 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 4297 (match_operand:MVE_3 2 "s_register_operand" "w") 4298 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4299 VMOVLTQ_M)) 4300 ] 4301 "TARGET_HAVE_MVE" 4302 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2" 4303 [(set_attr "type" "mve_move") 4304 (set_attr "length""8")]) 4305 ;; 4306 ;; [vmovnbq_m_u, vmovnbq_m_s]) 4307 ;; 4308 (define_insn "mve_vmovnbq_m_<supf><mode>" 4309 [ 4310 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4311 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4312 (match_operand:MVE_5 2 "s_register_operand" "w") 4313 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4314 VMOVNBQ_M)) 4315 ] 4316 "TARGET_HAVE_MVE" 4317 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2" 4318 [(set_attr "type" "mve_move") 4319 (set_attr "length""8")]) 4320 4321 ;; 4322 ;; [vmovntq_m_u, vmovntq_m_s]) 4323 ;; 4324 (define_insn "mve_vmovntq_m_<supf><mode>" 4325 [ 4326 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4327 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4328 (match_operand:MVE_5 2 "s_register_operand" "w") 4329 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4330 VMOVNTQ_M)) 4331 ] 4332 "TARGET_HAVE_MVE" 4333 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2" 4334 [(set_attr "type" "mve_move") 4335 (set_attr "length""8")]) 4336 4337 ;; 4338 ;; [vmvnq_m_n_u, vmvnq_m_n_s]) 4339 ;; 4340 (define_insn "mve_vmvnq_m_n_<supf><mode>" 4341 [ 4342 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4343 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4344 (match_operand:SI 2 "immediate_operand" "i") 4345 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4346 VMVNQ_M_N)) 4347 ] 4348 "TARGET_HAVE_MVE" 4349 "vpst\;vmvnt.i%#<V_sz_elem>\t%q0, %2" 4350 [(set_attr "type" "mve_move") 4351 (set_attr "length""8")]) 4352 ;; 4353 ;; [vnegq_m_f]) 4354 ;; 4355 (define_insn "mve_vnegq_m_f<mode>" 4356 [ 4357 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4358 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4359 (match_operand:MVE_0 2 "s_register_operand" "w") 4360 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4361 VNEGQ_M_F)) 4362 ] 4363 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4364 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2" 4365 [(set_attr "type" "mve_move") 4366 (set_attr "length""8")]) 4367 4368 ;; 4369 ;; [vorrq_m_n_s, vorrq_m_n_u]) 4370 ;; 4371 (define_insn "mve_vorrq_m_n_<supf><mode>" 4372 [ 4373 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4374 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4375 (match_operand:SI 2 "immediate_operand" "i") 4376 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4377 VORRQ_M_N)) 4378 ] 4379 "TARGET_HAVE_MVE" 4380 "vpst\;vorrt.i%#<V_sz_elem>\t%q0, %2" 4381 [(set_attr "type" "mve_move") 4382 (set_attr "length""8")]) 4383 ;; 4384 ;; [vpselq_f]) 4385 ;; 4386 (define_insn "@mve_vpselq_f<mode>" 4387 [ 4388 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4389 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 4390 (match_operand:MVE_0 2 "s_register_operand" "w") 4391 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4392 VPSELQ_F)) 4393 ] 4394 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4395 "vpsel\t%q0, %q1, %q2" 4396 [(set_attr "type" "mve_move") 4397 ]) 4398 4399 ;; 4400 ;; [vqmovnbq_m_s, vqmovnbq_m_u]) 4401 ;; 4402 (define_insn "mve_vqmovnbq_m_<supf><mode>" 4403 [ 4404 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4405 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4406 (match_operand:MVE_5 2 "s_register_operand" "w") 4407 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4408 VQMOVNBQ_M)) 4409 ] 4410 "TARGET_HAVE_MVE" 4411 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2" 4412 [(set_attr "type" "mve_move") 4413 (set_attr "length""8")]) 4414 4415 ;; 4416 ;; [vqmovntq_m_u, vqmovntq_m_s]) 4417 ;; 4418 (define_insn "mve_vqmovntq_m_<supf><mode>" 4419 [ 4420 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4421 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4422 (match_operand:MVE_5 2 "s_register_operand" "w") 4423 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4424 VQMOVNTQ_M)) 4425 ] 4426 "TARGET_HAVE_MVE" 4427 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2" 4428 [(set_attr "type" "mve_move") 4429 (set_attr "length""8")]) 4430 4431 ;; 4432 ;; [vqmovunbq_m_s]) 4433 ;; 4434 (define_insn "mve_vqmovunbq_m_s<mode>" 4435 [ 4436 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4437 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4438 (match_operand:MVE_5 2 "s_register_operand" "w") 4439 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4440 VQMOVUNBQ_M_S)) 4441 ] 4442 "TARGET_HAVE_MVE" 4443 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2" 4444 [(set_attr "type" "mve_move") 4445 (set_attr "length""8")]) 4446 4447 ;; 4448 ;; [vqmovuntq_m_s]) 4449 ;; 4450 (define_insn "mve_vqmovuntq_m_s<mode>" 4451 [ 4452 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4453 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4454 (match_operand:MVE_5 2 "s_register_operand" "w") 4455 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4456 VQMOVUNTQ_M_S)) 4457 ] 4458 "TARGET_HAVE_MVE" 4459 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2" 4460 [(set_attr "type" "mve_move") 4461 (set_attr "length""8")]) 4462 4463 ;; 4464 ;; [vqrshrntq_n_u, vqrshrntq_n_s]) 4465 ;; 4466 (define_insn "mve_vqrshrntq_n_<supf><mode>" 4467 [ 4468 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4469 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4470 (match_operand:MVE_5 2 "s_register_operand" "w") 4471 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4472 VQRSHRNTQ_N)) 4473 ] 4474 "TARGET_HAVE_MVE" 4475 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3" 4476 [(set_attr "type" "mve_move") 4477 ]) 4478 4479 ;; 4480 ;; [vqrshruntq_n_s]) 4481 ;; 4482 (define_insn "mve_vqrshruntq_n_s<mode>" 4483 [ 4484 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4485 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4486 (match_operand:MVE_5 2 "s_register_operand" "w") 4487 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4488 VQRSHRUNTQ_N_S)) 4489 ] 4490 "TARGET_HAVE_MVE" 4491 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3" 4492 [(set_attr "type" "mve_move") 4493 ]) 4494 4495 ;; 4496 ;; [vqshrnbq_n_u, vqshrnbq_n_s]) 4497 ;; 4498 (define_insn "mve_vqshrnbq_n_<supf><mode>" 4499 [ 4500 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4501 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4502 (match_operand:MVE_5 2 "s_register_operand" "w") 4503 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4504 VQSHRNBQ_N)) 4505 ] 4506 "TARGET_HAVE_MVE" 4507 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 4508 [(set_attr "type" "mve_move") 4509 ]) 4510 4511 ;; 4512 ;; [vqshrntq_n_u, vqshrntq_n_s]) 4513 ;; 4514 (define_insn "mve_vqshrntq_n_<supf><mode>" 4515 [ 4516 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4517 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4518 (match_operand:MVE_5 2 "s_register_operand" "w") 4519 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4520 VQSHRNTQ_N)) 4521 ] 4522 "TARGET_HAVE_MVE" 4523 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3" 4524 [(set_attr "type" "mve_move") 4525 ]) 4526 4527 ;; 4528 ;; [vqshrunbq_n_s]) 4529 ;; 4530 (define_insn "mve_vqshrunbq_n_s<mode>" 4531 [ 4532 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4533 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4534 (match_operand:MVE_5 2 "s_register_operand" "w") 4535 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4536 VQSHRUNBQ_N_S)) 4537 ] 4538 "TARGET_HAVE_MVE" 4539 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3" 4540 [(set_attr "type" "mve_move") 4541 ]) 4542 4543 ;; 4544 ;; [vqshruntq_n_s]) 4545 ;; 4546 (define_insn "mve_vqshruntq_n_s<mode>" 4547 [ 4548 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4549 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4550 (match_operand:MVE_5 2 "s_register_operand" "w") 4551 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4552 VQSHRUNTQ_N_S)) 4553 ] 4554 "TARGET_HAVE_MVE" 4555 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3" 4556 [(set_attr "type" "mve_move") 4557 ]) 4558 4559 ;; 4560 ;; [vrev32q_m_f]) 4561 ;; 4562 (define_insn "mve_vrev32q_m_fv8hf" 4563 [ 4564 (set (match_operand:V8HF 0 "s_register_operand" "=w") 4565 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0") 4566 (match_operand:V8HF 2 "s_register_operand" "w") 4567 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4568 VREV32Q_M_F)) 4569 ] 4570 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4571 "vpst\;vrev32t.16\t%q0, %q2" 4572 [(set_attr "type" "mve_move") 4573 (set_attr "length""8")]) 4574 4575 ;; 4576 ;; [vrev32q_m_s, vrev32q_m_u]) 4577 ;; 4578 (define_insn "mve_vrev32q_m_<supf><mode>" 4579 [ 4580 (set (match_operand:MVE_3 0 "s_register_operand" "=w") 4581 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0") 4582 (match_operand:MVE_3 2 "s_register_operand" "w") 4583 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4584 VREV32Q_M)) 4585 ] 4586 "TARGET_HAVE_MVE" 4587 "vpst\;vrev32t.%#<V_sz_elem>\t%q0, %q2" 4588 [(set_attr "type" "mve_move") 4589 (set_attr "length""8")]) 4590 4591 ;; 4592 ;; [vrev64q_m_f]) 4593 ;; 4594 (define_insn "mve_vrev64q_m_f<mode>" 4595 [ 4596 (set (match_operand:MVE_0 0 "s_register_operand" "=&w") 4597 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4598 (match_operand:MVE_0 2 "s_register_operand" "w") 4599 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4600 VREV64Q_M_F)) 4601 ] 4602 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4603 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2" 4604 [(set_attr "type" "mve_move") 4605 (set_attr "length""8")]) 4606 4607 ;; 4608 ;; [vrmlaldavhaxq_s]) 4609 ;; 4610 (define_insn "mve_vrmlaldavhaxq_sv4si" 4611 [ 4612 (set (match_operand:DI 0 "s_register_operand" "=r") 4613 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4614 (match_operand:V4SI 2 "s_register_operand" "w") 4615 (match_operand:V4SI 3 "s_register_operand" "w")] 4616 VRMLALDAVHAXQ_S)) 4617 ] 4618 "TARGET_HAVE_MVE" 4619 "vrmlaldavhax.s32\t%Q0, %R0, %q2, %q3" 4620 [(set_attr "type" "mve_move") 4621 ]) 4622 4623 ;; 4624 ;; [vrmlaldavhxq_p_s]) 4625 ;; 4626 (define_insn "mve_vrmlaldavhxq_p_sv4si" 4627 [ 4628 (set (match_operand:DI 0 "s_register_operand" "=r") 4629 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 4630 (match_operand:V4SI 2 "s_register_operand" "w") 4631 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4632 VRMLALDAVHXQ_P_S)) 4633 ] 4634 "TARGET_HAVE_MVE" 4635 "vpst\;vrmlaldavhxt.s32\t%Q0, %R0, %q1, %q2" 4636 [(set_attr "type" "mve_move") 4637 (set_attr "length""8")]) 4638 4639 ;; 4640 ;; [vrmlsldavhaxq_s]) 4641 ;; 4642 (define_insn "mve_vrmlsldavhaxq_sv4si" 4643 [ 4644 (set (match_operand:DI 0 "s_register_operand" "=r") 4645 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4646 (match_operand:V4SI 2 "s_register_operand" "w") 4647 (match_operand:V4SI 3 "s_register_operand" "w")] 4648 VRMLSLDAVHAXQ_S)) 4649 ] 4650 "TARGET_HAVE_MVE" 4651 "vrmlsldavhax.s32\t%Q0, %R0, %q2, %q3" 4652 [(set_attr "type" "mve_move") 4653 ]) 4654 4655 ;; 4656 ;; [vrmlsldavhq_p_s]) 4657 ;; 4658 (define_insn "mve_vrmlsldavhq_p_sv4si" 4659 [ 4660 (set (match_operand:DI 0 "s_register_operand" "=r") 4661 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 4662 (match_operand:V4SI 2 "s_register_operand" "w") 4663 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4664 VRMLSLDAVHQ_P_S)) 4665 ] 4666 "TARGET_HAVE_MVE" 4667 "vpst\;vrmlsldavht.s32\t%Q0, %R0, %q1, %q2" 4668 [(set_attr "type" "mve_move") 4669 (set_attr "length""8")]) 4670 4671 ;; 4672 ;; [vrmlsldavhxq_p_s]) 4673 ;; 4674 (define_insn "mve_vrmlsldavhxq_p_sv4si" 4675 [ 4676 (set (match_operand:DI 0 "s_register_operand" "=r") 4677 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 4678 (match_operand:V4SI 2 "s_register_operand" "w") 4679 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4680 VRMLSLDAVHXQ_P_S)) 4681 ] 4682 "TARGET_HAVE_MVE" 4683 "vpst\;vrmlsldavhxt.s32\t%Q0, %R0, %q1, %q2" 4684 [(set_attr "type" "mve_move") 4685 (set_attr "length""8")]) 4686 4687 ;; 4688 ;; [vrndaq_m_f]) 4689 ;; 4690 (define_insn "mve_vrndaq_m_f<mode>" 4691 [ 4692 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4693 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4694 (match_operand:MVE_0 2 "s_register_operand" "w") 4695 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4696 VRNDAQ_M_F)) 4697 ] 4698 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4699 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2" 4700 [(set_attr "type" "mve_move") 4701 (set_attr "length""8")]) 4702 4703 ;; 4704 ;; [vrndmq_m_f]) 4705 ;; 4706 (define_insn "mve_vrndmq_m_f<mode>" 4707 [ 4708 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4709 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4710 (match_operand:MVE_0 2 "s_register_operand" "w") 4711 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4712 VRNDMQ_M_F)) 4713 ] 4714 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4715 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2" 4716 [(set_attr "type" "mve_move") 4717 (set_attr "length""8")]) 4718 4719 ;; 4720 ;; [vrndnq_m_f]) 4721 ;; 4722 (define_insn "mve_vrndnq_m_f<mode>" 4723 [ 4724 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4725 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4726 (match_operand:MVE_0 2 "s_register_operand" "w") 4727 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4728 VRNDNQ_M_F)) 4729 ] 4730 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4731 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2" 4732 [(set_attr "type" "mve_move") 4733 (set_attr "length""8")]) 4734 4735 ;; 4736 ;; [vrndpq_m_f]) 4737 ;; 4738 (define_insn "mve_vrndpq_m_f<mode>" 4739 [ 4740 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4741 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4742 (match_operand:MVE_0 2 "s_register_operand" "w") 4743 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4744 VRNDPQ_M_F)) 4745 ] 4746 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4747 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2" 4748 [(set_attr "type" "mve_move") 4749 (set_attr "length""8")]) 4750 4751 ;; 4752 ;; [vrndxq_m_f]) 4753 ;; 4754 (define_insn "mve_vrndxq_m_f<mode>" 4755 [ 4756 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4757 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4758 (match_operand:MVE_0 2 "s_register_operand" "w") 4759 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4760 VRNDXQ_M_F)) 4761 ] 4762 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4763 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2" 4764 [(set_attr "type" "mve_move") 4765 (set_attr "length""8")]) 4766 4767 ;; 4768 ;; [vrshrnbq_n_s, vrshrnbq_n_u]) 4769 ;; 4770 (define_insn "mve_vrshrnbq_n_<supf><mode>" 4771 [ 4772 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4773 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4774 (match_operand:MVE_5 2 "s_register_operand" "w") 4775 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4776 VRSHRNBQ_N)) 4777 ] 4778 "TARGET_HAVE_MVE" 4779 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3" 4780 [(set_attr "type" "mve_move") 4781 ]) 4782 4783 ;; 4784 ;; [vrshrntq_n_u, vrshrntq_n_s]) 4785 ;; 4786 (define_insn "mve_vrshrntq_n_<supf><mode>" 4787 [ 4788 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4789 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4790 (match_operand:MVE_5 2 "s_register_operand" "w") 4791 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4792 VRSHRNTQ_N)) 4793 ] 4794 "TARGET_HAVE_MVE" 4795 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3" 4796 [(set_attr "type" "mve_move") 4797 ]) 4798 4799 ;; 4800 ;; [vshrnbq_n_u, vshrnbq_n_s]) 4801 ;; 4802 (define_insn "mve_vshrnbq_n_<supf><mode>" 4803 [ 4804 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4805 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4806 (match_operand:MVE_5 2 "s_register_operand" "w") 4807 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4808 VSHRNBQ_N)) 4809 ] 4810 "TARGET_HAVE_MVE" 4811 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3" 4812 [(set_attr "type" "mve_move") 4813 ]) 4814 4815 ;; 4816 ;; [vshrntq_n_s, vshrntq_n_u]) 4817 ;; 4818 (define_insn "mve_vshrntq_n_<supf><mode>" 4819 [ 4820 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4821 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4822 (match_operand:MVE_5 2 "s_register_operand" "w") 4823 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4824 VSHRNTQ_N)) 4825 ] 4826 "TARGET_HAVE_MVE" 4827 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3" 4828 [(set_attr "type" "mve_move") 4829 ]) 4830 4831 ;; 4832 ;; [vcvtmq_m_s, vcvtmq_m_u]) 4833 ;; 4834 (define_insn "mve_vcvtmq_m_<supf><mode>" 4835 [ 4836 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4837 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4838 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 4839 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4840 VCVTMQ_M)) 4841 ] 4842 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4843 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2" 4844 [(set_attr "type" "mve_move") 4845 (set_attr "length""8")]) 4846 4847 ;; 4848 ;; [vcvtpq_m_u, vcvtpq_m_s]) 4849 ;; 4850 (define_insn "mve_vcvtpq_m_<supf><mode>" 4851 [ 4852 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4853 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4854 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 4855 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4856 VCVTPQ_M)) 4857 ] 4858 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4859 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2" 4860 [(set_attr "type" "mve_move") 4861 (set_attr "length""8")]) 4862 4863 ;; 4864 ;; [vcvtnq_m_s, vcvtnq_m_u]) 4865 ;; 4866 (define_insn "mve_vcvtnq_m_<supf><mode>" 4867 [ 4868 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4869 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4870 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 4871 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4872 VCVTNQ_M)) 4873 ] 4874 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4875 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2" 4876 [(set_attr "type" "mve_move") 4877 (set_attr "length""8")]) 4878 4879 ;; 4880 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u]) 4881 ;; 4882 (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>" 4883 [ 4884 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4885 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4886 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 4887 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>") 4888 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 4889 VCVTQ_M_N_FROM_F)) 4890 ] 4891 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4892 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3" 4893 [(set_attr "type" "mve_move") 4894 (set_attr "length""8")]) 4895 4896 ;; 4897 ;; [vrev16q_m_u, vrev16q_m_s]) 4898 ;; 4899 (define_insn "mve_vrev16q_m_<supf>v16qi" 4900 [ 4901 (set (match_operand:V16QI 0 "s_register_operand" "=w") 4902 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0") 4903 (match_operand:V16QI 2 "s_register_operand" "w") 4904 (match_operand:V16BI 3 "vpr_register_operand" "Up")] 4905 VREV16Q_M)) 4906 ] 4907 "TARGET_HAVE_MVE" 4908 "vpst\;vrev16t.8\t%q0, %q2" 4909 [(set_attr "type" "mve_move") 4910 (set_attr "length""8")]) 4911 4912 ;; 4913 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s]) 4914 ;; 4915 (define_insn "mve_vcvtq_m_from_f_<supf><mode>" 4916 [ 4917 (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4918 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4919 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 4920 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4921 VCVTQ_M_FROM_F)) 4922 ] 4923 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4924 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2" 4925 [(set_attr "type" "mve_move") 4926 (set_attr "length""8")]) 4927 4928 ;; 4929 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s]) 4930 ;; 4931 (define_insn "mve_vrmlaldavhq_p_<supf>v4si" 4932 [ 4933 (set (match_operand:DI 0 "s_register_operand" "=r") 4934 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 4935 (match_operand:V4SI 2 "s_register_operand" "w") 4936 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 4937 VRMLALDAVHQ_P)) 4938 ] 4939 "TARGET_HAVE_MVE" 4940 "vpst\;vrmlaldavht.<supf>32\t%Q0, %R0, %q1, %q2" 4941 [(set_attr "type" "mve_move") 4942 (set_attr "length""8")]) 4943 4944 ;; 4945 ;; [vrmlsldavhaq_s]) 4946 ;; 4947 (define_insn "mve_vrmlsldavhaq_sv4si" 4948 [ 4949 (set (match_operand:DI 0 "s_register_operand" "=r") 4950 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4951 (match_operand:V4SI 2 "s_register_operand" "w") 4952 (match_operand:V4SI 3 "s_register_operand" "w")] 4953 VRMLSLDAVHAQ_S)) 4954 ] 4955 "TARGET_HAVE_MVE" 4956 "vrmlsldavha.s32\t%Q0, %R0, %q2, %q3" 4957 [(set_attr "type" "mve_move") 4958 ]) 4959 4960 ;; 4961 ;; [vabavq_p_s, vabavq_p_u]) 4962 ;; 4963 (define_insn "mve_vabavq_p_<supf><mode>" 4964 [ 4965 (set (match_operand:SI 0 "s_register_operand" "=r") 4966 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 4967 (match_operand:MVE_2 2 "s_register_operand" "w") 4968 (match_operand:MVE_2 3 "s_register_operand" "w") 4969 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 4970 VABAVQ_P)) 4971 ] 4972 "TARGET_HAVE_MVE" 4973 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3" 4974 [(set_attr "type" "mve_move") 4975 (set_attr "length" "8")]) 4976 4977 ;; 4978 ;; [vqshluq_m_n_s]) 4979 ;; 4980 (define_insn "mve_vqshluq_m_n_s<mode>" 4981 [ 4982 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 4983 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 4984 (match_operand:MVE_2 2 "s_register_operand" "w") 4985 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>") 4986 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 4987 VQSHLUQ_M_N_S)) 4988 ] 4989 "TARGET_HAVE_MVE" 4990 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3" 4991 [(set_attr "type" "mve_move") 4992 (set_attr "length" "8")]) 4993 4994 ;; 4995 ;; [vshlq_m_s, vshlq_m_u]) 4996 ;; 4997 (define_insn "mve_vshlq_m_<supf><mode>" 4998 [ 4999 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5000 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5001 (match_operand:MVE_2 2 "s_register_operand" "w") 5002 (match_operand:MVE_2 3 "s_register_operand" "w") 5003 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5004 VSHLQ_M)) 5005 ] 5006 "TARGET_HAVE_MVE" 5007 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5008 [(set_attr "type" "mve_move") 5009 (set_attr "length" "8")]) 5010 5011 ;; 5012 ;; [vsriq_m_n_s, vsriq_m_n_u]) 5013 ;; 5014 (define_insn "mve_vsriq_m_n_<supf><mode>" 5015 [ 5016 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5017 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5018 (match_operand:MVE_2 2 "s_register_operand" "w") 5019 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>") 5020 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5021 VSRIQ_M_N)) 5022 ] 5023 "TARGET_HAVE_MVE" 5024 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3" 5025 [(set_attr "type" "mve_move") 5026 (set_attr "length" "8")]) 5027 5028 ;; 5029 ;; [vsubq_m_u, vsubq_m_s]) 5030 ;; 5031 (define_insn "mve_vsubq_m_<supf><mode>" 5032 [ 5033 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5034 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5035 (match_operand:MVE_2 2 "s_register_operand" "w") 5036 (match_operand:MVE_2 3 "s_register_operand" "w") 5037 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5038 VSUBQ_M)) 5039 ] 5040 "TARGET_HAVE_MVE" 5041 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3" 5042 [(set_attr "type" "mve_move") 5043 (set_attr "length" "8")]) 5044 5045 ;; 5046 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s]) 5047 ;; 5048 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>" 5049 [ 5050 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 5051 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 5052 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 5053 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>") 5054 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5055 VCVTQ_M_N_TO_F)) 5056 ] 5057 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 5058 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5059 [(set_attr "type" "mve_move") 5060 (set_attr "length""8")]) 5061 ;; 5062 ;; [vabdq_m_s, vabdq_m_u]) 5063 ;; 5064 (define_insn "mve_vabdq_m_<supf><mode>" 5065 [ 5066 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5067 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5068 (match_operand:MVE_2 2 "s_register_operand" "w") 5069 (match_operand:MVE_2 3 "s_register_operand" "w") 5070 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5071 VABDQ_M)) 5072 ] 5073 "TARGET_HAVE_MVE" 5074 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5075 [(set_attr "type" "mve_move") 5076 (set_attr "length""8")]) 5077 5078 ;; 5079 ;; [vaddq_m_n_s, vaddq_m_n_u]) 5080 ;; 5081 (define_insn "mve_vaddq_m_n_<supf><mode>" 5082 [ 5083 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5084 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5085 (match_operand:MVE_2 2 "s_register_operand" "w") 5086 (match_operand:<V_elem> 3 "s_register_operand" "r") 5087 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5088 VADDQ_M_N)) 5089 ] 5090 "TARGET_HAVE_MVE" 5091 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3" 5092 [(set_attr "type" "mve_move") 5093 (set_attr "length""8")]) 5094 5095 ;; 5096 ;; [vaddq_m_u, vaddq_m_s]) 5097 ;; 5098 (define_insn "mve_vaddq_m_<supf><mode>" 5099 [ 5100 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5101 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5102 (match_operand:MVE_2 2 "s_register_operand" "w") 5103 (match_operand:MVE_2 3 "s_register_operand" "w") 5104 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5105 VADDQ_M)) 5106 ] 5107 "TARGET_HAVE_MVE" 5108 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3" 5109 [(set_attr "type" "mve_move") 5110 (set_attr "length""8")]) 5111 5112 ;; 5113 ;; [vandq_m_u, vandq_m_s]) 5114 ;; 5115 (define_insn "mve_vandq_m_<supf><mode>" 5116 [ 5117 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5118 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5119 (match_operand:MVE_2 2 "s_register_operand" "w") 5120 (match_operand:MVE_2 3 "s_register_operand" "w") 5121 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5122 VANDQ_M)) 5123 ] 5124 "TARGET_HAVE_MVE" 5125 "vpst\;vandt\t%q0, %q2, %q3" 5126 [(set_attr "type" "mve_move") 5127 (set_attr "length""8")]) 5128 5129 ;; 5130 ;; [vbicq_m_u, vbicq_m_s]) 5131 ;; 5132 (define_insn "mve_vbicq_m_<supf><mode>" 5133 [ 5134 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5135 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5136 (match_operand:MVE_2 2 "s_register_operand" "w") 5137 (match_operand:MVE_2 3 "s_register_operand" "w") 5138 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5139 VBICQ_M)) 5140 ] 5141 "TARGET_HAVE_MVE" 5142 "vpst\;vbict\t%q0, %q2, %q3" 5143 [(set_attr "type" "mve_move") 5144 (set_attr "length""8")]) 5145 5146 ;; 5147 ;; [vbrsrq_m_n_u, vbrsrq_m_n_s]) 5148 ;; 5149 (define_insn "mve_vbrsrq_m_n_<supf><mode>" 5150 [ 5151 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5152 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5153 (match_operand:MVE_2 2 "s_register_operand" "w") 5154 (match_operand:SI 3 "s_register_operand" "r") 5155 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5156 VBRSRQ_M_N)) 5157 ] 5158 "TARGET_HAVE_MVE" 5159 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3" 5160 [(set_attr "type" "mve_move") 5161 (set_attr "length""8")]) 5162 5163 ;; 5164 ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s]) 5165 ;; 5166 (define_insn "mve_vcaddq_rot270_m_<supf><mode>" 5167 [ 5168 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 5169 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5170 (match_operand:MVE_2 2 "s_register_operand" "w") 5171 (match_operand:MVE_2 3 "s_register_operand" "w") 5172 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5173 VCADDQ_ROT270_M)) 5174 ] 5175 "TARGET_HAVE_MVE" 5176 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270" 5177 [(set_attr "type" "mve_move") 5178 (set_attr "length""8")]) 5179 5180 ;; 5181 ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s]) 5182 ;; 5183 (define_insn "mve_vcaddq_rot90_m_<supf><mode>" 5184 [ 5185 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 5186 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5187 (match_operand:MVE_2 2 "s_register_operand" "w") 5188 (match_operand:MVE_2 3 "s_register_operand" "w") 5189 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5190 VCADDQ_ROT90_M)) 5191 ] 5192 "TARGET_HAVE_MVE" 5193 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90" 5194 [(set_attr "type" "mve_move") 5195 (set_attr "length""8")]) 5196 5197 ;; 5198 ;; [veorq_m_s, veorq_m_u]) 5199 ;; 5200 (define_insn "mve_veorq_m_<supf><mode>" 5201 [ 5202 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5203 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5204 (match_operand:MVE_2 2 "s_register_operand" "w") 5205 (match_operand:MVE_2 3 "s_register_operand" "w") 5206 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5207 VEORQ_M)) 5208 ] 5209 "TARGET_HAVE_MVE" 5210 "vpst\;veort\t%q0, %q2, %q3" 5211 [(set_attr "type" "mve_move") 5212 (set_attr "length""8")]) 5213 5214 ;; 5215 ;; [vhaddq_m_n_s, vhaddq_m_n_u]) 5216 ;; 5217 (define_insn "mve_vhaddq_m_n_<supf><mode>" 5218 [ 5219 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5220 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5221 (match_operand:MVE_2 2 "s_register_operand" "w") 5222 (match_operand:<V_elem> 3 "s_register_operand" "r") 5223 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5224 VHADDQ_M_N)) 5225 ] 5226 "TARGET_HAVE_MVE" 5227 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3" 5228 [(set_attr "type" "mve_move") 5229 (set_attr "length""8")]) 5230 5231 ;; 5232 ;; [vhaddq_m_s, vhaddq_m_u]) 5233 ;; 5234 (define_insn "mve_vhaddq_m_<supf><mode>" 5235 [ 5236 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5237 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5238 (match_operand:MVE_2 2 "s_register_operand" "w") 5239 (match_operand:MVE_2 3 "s_register_operand" "w") 5240 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5241 VHADDQ_M)) 5242 ] 5243 "TARGET_HAVE_MVE" 5244 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5245 [(set_attr "type" "mve_move") 5246 (set_attr "length""8")]) 5247 5248 ;; 5249 ;; [vhsubq_m_n_s, vhsubq_m_n_u]) 5250 ;; 5251 (define_insn "mve_vhsubq_m_n_<supf><mode>" 5252 [ 5253 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5254 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5255 (match_operand:MVE_2 2 "s_register_operand" "w") 5256 (match_operand:<V_elem> 3 "s_register_operand" "r") 5257 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5258 VHSUBQ_M_N)) 5259 ] 5260 "TARGET_HAVE_MVE" 5261 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3" 5262 [(set_attr "type" "mve_move") 5263 (set_attr "length""8")]) 5264 5265 ;; 5266 ;; [vhsubq_m_s, vhsubq_m_u]) 5267 ;; 5268 (define_insn "mve_vhsubq_m_<supf><mode>" 5269 [ 5270 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5271 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5272 (match_operand:MVE_2 2 "s_register_operand" "w") 5273 (match_operand:MVE_2 3 "s_register_operand" "w") 5274 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5275 VHSUBQ_M)) 5276 ] 5277 "TARGET_HAVE_MVE" 5278 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5279 [(set_attr "type" "mve_move") 5280 (set_attr "length""8")]) 5281 5282 ;; 5283 ;; [vmaxq_m_s, vmaxq_m_u]) 5284 ;; 5285 (define_insn "mve_vmaxq_m_<supf><mode>" 5286 [ 5287 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5288 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5289 (match_operand:MVE_2 2 "s_register_operand" "w") 5290 (match_operand:MVE_2 3 "s_register_operand" "w") 5291 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5292 VMAXQ_M)) 5293 ] 5294 "TARGET_HAVE_MVE" 5295 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5296 [(set_attr "type" "mve_move") 5297 (set_attr "length""8")]) 5298 5299 ;; 5300 ;; [vminq_m_s, vminq_m_u]) 5301 ;; 5302 (define_insn "mve_vminq_m_<supf><mode>" 5303 [ 5304 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5305 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5306 (match_operand:MVE_2 2 "s_register_operand" "w") 5307 (match_operand:MVE_2 3 "s_register_operand" "w") 5308 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5309 VMINQ_M)) 5310 ] 5311 "TARGET_HAVE_MVE" 5312 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5313 [(set_attr "type" "mve_move") 5314 (set_attr "length""8")]) 5315 5316 ;; 5317 ;; [vmladavaq_p_u, vmladavaq_p_s]) 5318 ;; 5319 (define_insn "mve_vmladavaq_p_<supf><mode>" 5320 [ 5321 (set (match_operand:SI 0 "s_register_operand" "=Te") 5322 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 5323 (match_operand:MVE_2 2 "s_register_operand" "w") 5324 (match_operand:MVE_2 3 "s_register_operand" "w") 5325 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5326 VMLADAVAQ_P)) 5327 ] 5328 "TARGET_HAVE_MVE" 5329 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3" 5330 [(set_attr "type" "mve_move") 5331 (set_attr "length""8")]) 5332 5333 ;; 5334 ;; [vmlaq_m_n_s, vmlaq_m_n_u]) 5335 ;; 5336 (define_insn "mve_vmlaq_m_n_<supf><mode>" 5337 [ 5338 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5339 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5340 (match_operand:MVE_2 2 "s_register_operand" "w") 5341 (match_operand:<V_elem> 3 "s_register_operand" "r") 5342 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5343 VMLAQ_M_N)) 5344 ] 5345 "TARGET_HAVE_MVE" 5346 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3" 5347 [(set_attr "type" "mve_move") 5348 (set_attr "length""8")]) 5349 5350 ;; 5351 ;; [vmlasq_m_n_u, vmlasq_m_n_s]) 5352 ;; 5353 (define_insn "mve_vmlasq_m_n_<supf><mode>" 5354 [ 5355 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5356 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5357 (match_operand:MVE_2 2 "s_register_operand" "w") 5358 (match_operand:<V_elem> 3 "s_register_operand" "r") 5359 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5360 VMLASQ_M_N)) 5361 ] 5362 "TARGET_HAVE_MVE" 5363 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3" 5364 [(set_attr "type" "mve_move") 5365 (set_attr "length""8")]) 5366 5367 ;; 5368 ;; [vmulhq_m_s, vmulhq_m_u]) 5369 ;; 5370 (define_insn "mve_vmulhq_m_<supf><mode>" 5371 [ 5372 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5373 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5374 (match_operand:MVE_2 2 "s_register_operand" "w") 5375 (match_operand:MVE_2 3 "s_register_operand" "w") 5376 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5377 VMULHQ_M)) 5378 ] 5379 "TARGET_HAVE_MVE" 5380 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5381 [(set_attr "type" "mve_move") 5382 (set_attr "length""8")]) 5383 5384 ;; 5385 ;; [vmullbq_int_m_u, vmullbq_int_m_s]) 5386 ;; 5387 (define_insn "mve_vmullbq_int_m_<supf><mode>" 5388 [ 5389 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 5390 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 5391 (match_operand:MVE_2 2 "s_register_operand" "w") 5392 (match_operand:MVE_2 3 "s_register_operand" "w") 5393 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5394 VMULLBQ_INT_M)) 5395 ] 5396 "TARGET_HAVE_MVE" 5397 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5398 [(set_attr "type" "mve_move") 5399 (set_attr "length""8")]) 5400 5401 ;; 5402 ;; [vmulltq_int_m_s, vmulltq_int_m_u]) 5403 ;; 5404 (define_insn "mve_vmulltq_int_m_<supf><mode>" 5405 [ 5406 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 5407 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 5408 (match_operand:MVE_2 2 "s_register_operand" "w") 5409 (match_operand:MVE_2 3 "s_register_operand" "w") 5410 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5411 VMULLTQ_INT_M)) 5412 ] 5413 "TARGET_HAVE_MVE" 5414 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5415 [(set_attr "type" "mve_move") 5416 (set_attr "length""8")]) 5417 5418 ;; 5419 ;; [vmulq_m_n_u, vmulq_m_n_s]) 5420 ;; 5421 (define_insn "mve_vmulq_m_n_<supf><mode>" 5422 [ 5423 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5424 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5425 (match_operand:MVE_2 2 "s_register_operand" "w") 5426 (match_operand:<V_elem> 3 "s_register_operand" "r") 5427 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5428 VMULQ_M_N)) 5429 ] 5430 "TARGET_HAVE_MVE" 5431 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3" 5432 [(set_attr "type" "mve_move") 5433 (set_attr "length""8")]) 5434 5435 ;; 5436 ;; [vmulq_m_s, vmulq_m_u]) 5437 ;; 5438 (define_insn "mve_vmulq_m_<supf><mode>" 5439 [ 5440 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5441 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5442 (match_operand:MVE_2 2 "s_register_operand" "w") 5443 (match_operand:MVE_2 3 "s_register_operand" "w") 5444 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5445 VMULQ_M)) 5446 ] 5447 "TARGET_HAVE_MVE" 5448 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3" 5449 [(set_attr "type" "mve_move") 5450 (set_attr "length""8")]) 5451 5452 ;; 5453 ;; [vornq_m_u, vornq_m_s]) 5454 ;; 5455 (define_insn "mve_vornq_m_<supf><mode>" 5456 [ 5457 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5458 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5459 (match_operand:MVE_2 2 "s_register_operand" "w") 5460 (match_operand:MVE_2 3 "s_register_operand" "w") 5461 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5462 VORNQ_M)) 5463 ] 5464 "TARGET_HAVE_MVE" 5465 "vpst\;vornt\t%q0, %q2, %q3" 5466 [(set_attr "type" "mve_move") 5467 (set_attr "length""8")]) 5468 5469 ;; 5470 ;; [vorrq_m_s, vorrq_m_u]) 5471 ;; 5472 (define_insn "mve_vorrq_m_<supf><mode>" 5473 [ 5474 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5475 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5476 (match_operand:MVE_2 2 "s_register_operand" "w") 5477 (match_operand:MVE_2 3 "s_register_operand" "w") 5478 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5479 VORRQ_M)) 5480 ] 5481 "TARGET_HAVE_MVE" 5482 "vpst\;vorrt\t%q0, %q2, %q3" 5483 [(set_attr "type" "mve_move") 5484 (set_attr "length""8")]) 5485 5486 ;; 5487 ;; [vqaddq_m_n_u, vqaddq_m_n_s]) 5488 ;; 5489 (define_insn "mve_vqaddq_m_n_<supf><mode>" 5490 [ 5491 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5492 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5493 (match_operand:MVE_2 2 "s_register_operand" "w") 5494 (match_operand:<V_elem> 3 "s_register_operand" "r") 5495 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5496 VQADDQ_M_N)) 5497 ] 5498 "TARGET_HAVE_MVE" 5499 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5500 [(set_attr "type" "mve_move") 5501 (set_attr "length""8")]) 5502 5503 ;; 5504 ;; [vqaddq_m_u, vqaddq_m_s]) 5505 ;; 5506 (define_insn "mve_vqaddq_m_<supf><mode>" 5507 [ 5508 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5509 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5510 (match_operand:MVE_2 2 "s_register_operand" "w") 5511 (match_operand:MVE_2 3 "s_register_operand" "w") 5512 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5513 VQADDQ_M)) 5514 ] 5515 "TARGET_HAVE_MVE" 5516 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5517 [(set_attr "type" "mve_move") 5518 (set_attr "length""8")]) 5519 5520 ;; 5521 ;; [vqdmlahq_m_n_s]) 5522 ;; 5523 (define_insn "mve_vqdmlahq_m_n_s<mode>" 5524 [ 5525 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5526 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5527 (match_operand:MVE_2 2 "s_register_operand" "w") 5528 (match_operand:<V_elem> 3 "s_register_operand" "r") 5529 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5530 VQDMLAHQ_M_N_S)) 5531 ] 5532 "TARGET_HAVE_MVE" 5533 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3" 5534 [(set_attr "type" "mve_move") 5535 (set_attr "length""8")]) 5536 5537 ;; 5538 ;; [vqdmlashq_m_n_s]) 5539 ;; 5540 (define_insn "mve_vqdmlashq_m_n_s<mode>" 5541 [ 5542 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5543 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5544 (match_operand:MVE_2 2 "s_register_operand" "w") 5545 (match_operand:<V_elem> 3 "s_register_operand" "r") 5546 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5547 VQDMLASHQ_M_N_S)) 5548 ] 5549 "TARGET_HAVE_MVE" 5550 "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3" 5551 [(set_attr "type" "mve_move") 5552 (set_attr "length""8")]) 5553 5554 ;; 5555 ;; [vqrdmlahq_m_n_s]) 5556 ;; 5557 (define_insn "mve_vqrdmlahq_m_n_s<mode>" 5558 [ 5559 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5560 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5561 (match_operand:MVE_2 2 "s_register_operand" "w") 5562 (match_operand:<V_elem> 3 "s_register_operand" "r") 5563 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5564 VQRDMLAHQ_M_N_S)) 5565 ] 5566 "TARGET_HAVE_MVE" 5567 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3" 5568 [(set_attr "type" "mve_move") 5569 (set_attr "length""8")]) 5570 5571 ;; 5572 ;; [vqrdmlashq_m_n_s]) 5573 ;; 5574 (define_insn "mve_vqrdmlashq_m_n_s<mode>" 5575 [ 5576 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5577 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5578 (match_operand:MVE_2 2 "s_register_operand" "w") 5579 (match_operand:<V_elem> 3 "s_register_operand" "r") 5580 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5581 VQRDMLASHQ_M_N_S)) 5582 ] 5583 "TARGET_HAVE_MVE" 5584 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3" 5585 [(set_attr "type" "mve_move") 5586 (set_attr "length""8")]) 5587 5588 ;; 5589 ;; [vqrshlq_m_u, vqrshlq_m_s]) 5590 ;; 5591 (define_insn "mve_vqrshlq_m_<supf><mode>" 5592 [ 5593 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5594 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5595 (match_operand:MVE_2 2 "s_register_operand" "w") 5596 (match_operand:MVE_2 3 "s_register_operand" "w") 5597 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5598 VQRSHLQ_M)) 5599 ] 5600 "TARGET_HAVE_MVE" 5601 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5602 [(set_attr "type" "mve_move") 5603 (set_attr "length""8")]) 5604 5605 ;; 5606 ;; [vqshlq_m_n_s, vqshlq_m_n_u]) 5607 ;; 5608 (define_insn "mve_vqshlq_m_n_<supf><mode>" 5609 [ 5610 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5611 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5612 (match_operand:MVE_2 2 "s_register_operand" "w") 5613 (match_operand:SI 3 "immediate_operand" "i") 5614 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5615 VQSHLQ_M_N)) 5616 ] 5617 "TARGET_HAVE_MVE" 5618 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5619 [(set_attr "type" "mve_move") 5620 (set_attr "length""8")]) 5621 5622 ;; 5623 ;; [vqshlq_m_u, vqshlq_m_s]) 5624 ;; 5625 (define_insn "mve_vqshlq_m_<supf><mode>" 5626 [ 5627 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5628 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5629 (match_operand:MVE_2 2 "s_register_operand" "w") 5630 (match_operand:MVE_2 3 "s_register_operand" "w") 5631 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5632 VQSHLQ_M)) 5633 ] 5634 "TARGET_HAVE_MVE" 5635 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5636 [(set_attr "type" "mve_move") 5637 (set_attr "length""8")]) 5638 5639 ;; 5640 ;; [vqsubq_m_n_u, vqsubq_m_n_s]) 5641 ;; 5642 (define_insn "mve_vqsubq_m_n_<supf><mode>" 5643 [ 5644 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5645 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5646 (match_operand:MVE_2 2 "s_register_operand" "w") 5647 (match_operand:<V_elem> 3 "s_register_operand" "r") 5648 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5649 VQSUBQ_M_N)) 5650 ] 5651 "TARGET_HAVE_MVE" 5652 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5653 [(set_attr "type" "mve_move") 5654 (set_attr "length""8")]) 5655 5656 ;; 5657 ;; [vqsubq_m_u, vqsubq_m_s]) 5658 ;; 5659 (define_insn "mve_vqsubq_m_<supf><mode>" 5660 [ 5661 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5662 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5663 (match_operand:MVE_2 2 "s_register_operand" "w") 5664 (match_operand:MVE_2 3 "s_register_operand" "w") 5665 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5666 VQSUBQ_M)) 5667 ] 5668 "TARGET_HAVE_MVE" 5669 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5670 [(set_attr "type" "mve_move") 5671 (set_attr "length""8")]) 5672 5673 ;; 5674 ;; [vrhaddq_m_u, vrhaddq_m_s]) 5675 ;; 5676 (define_insn "mve_vrhaddq_m_<supf><mode>" 5677 [ 5678 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5679 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5680 (match_operand:MVE_2 2 "s_register_operand" "w") 5681 (match_operand:MVE_2 3 "s_register_operand" "w") 5682 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5683 VRHADDQ_M)) 5684 ] 5685 "TARGET_HAVE_MVE" 5686 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5687 [(set_attr "type" "mve_move") 5688 (set_attr "length""8")]) 5689 5690 ;; 5691 ;; [vrmulhq_m_u, vrmulhq_m_s]) 5692 ;; 5693 (define_insn "mve_vrmulhq_m_<supf><mode>" 5694 [ 5695 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5696 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5697 (match_operand:MVE_2 2 "s_register_operand" "w") 5698 (match_operand:MVE_2 3 "s_register_operand" "w") 5699 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5700 VRMULHQ_M)) 5701 ] 5702 "TARGET_HAVE_MVE" 5703 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5704 [(set_attr "type" "mve_move") 5705 (set_attr "length""8")]) 5706 5707 ;; 5708 ;; [vrshlq_m_s, vrshlq_m_u]) 5709 ;; 5710 (define_insn "mve_vrshlq_m_<supf><mode>" 5711 [ 5712 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5713 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5714 (match_operand:MVE_2 2 "s_register_operand" "w") 5715 (match_operand:MVE_2 3 "s_register_operand" "w") 5716 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5717 VRSHLQ_M)) 5718 ] 5719 "TARGET_HAVE_MVE" 5720 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5721 [(set_attr "type" "mve_move") 5722 (set_attr "length""8")]) 5723 5724 ;; 5725 ;; [vrshrq_m_n_s, vrshrq_m_n_u]) 5726 ;; 5727 (define_insn "mve_vrshrq_m_n_<supf><mode>" 5728 [ 5729 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5730 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5731 (match_operand:MVE_2 2 "s_register_operand" "w") 5732 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>") 5733 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5734 VRSHRQ_M_N)) 5735 ] 5736 "TARGET_HAVE_MVE" 5737 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5738 [(set_attr "type" "mve_move") 5739 (set_attr "length""8")]) 5740 5741 ;; 5742 ;; [vshlq_m_n_s, vshlq_m_n_u]) 5743 ;; 5744 (define_insn "mve_vshlq_m_n_<supf><mode>" 5745 [ 5746 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5747 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5748 (match_operand:MVE_2 2 "s_register_operand" "w") 5749 (match_operand:SI 3 "immediate_operand" "i") 5750 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5751 VSHLQ_M_N)) 5752 ] 5753 "TARGET_HAVE_MVE" 5754 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5755 [(set_attr "type" "mve_move") 5756 (set_attr "length""8")]) 5757 5758 ;; 5759 ;; [vshrq_m_n_s, vshrq_m_n_u]) 5760 ;; 5761 (define_insn "mve_vshrq_m_n_<supf><mode>" 5762 [ 5763 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5764 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5765 (match_operand:MVE_2 2 "s_register_operand" "w") 5766 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>") 5767 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5768 VSHRQ_M_N)) 5769 ] 5770 "TARGET_HAVE_MVE" 5771 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5772 [(set_attr "type" "mve_move") 5773 (set_attr "length""8")]) 5774 5775 ;; 5776 ;; [vsliq_m_n_u, vsliq_m_n_s]) 5777 ;; 5778 (define_insn "mve_vsliq_m_n_<supf><mode>" 5779 [ 5780 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5781 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5782 (match_operand:MVE_2 2 "s_register_operand" "w") 5783 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>") 5784 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5785 VSLIQ_M_N)) 5786 ] 5787 "TARGET_HAVE_MVE" 5788 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3" 5789 [(set_attr "type" "mve_move") 5790 (set_attr "length""8")]) 5791 5792 ;; 5793 ;; [vsubq_m_n_s, vsubq_m_n_u]) 5794 ;; 5795 (define_insn "mve_vsubq_m_n_<supf><mode>" 5796 [ 5797 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5798 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5799 (match_operand:MVE_2 2 "s_register_operand" "w") 5800 (match_operand:<V_elem> 3 "s_register_operand" "r") 5801 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5802 VSUBQ_M_N)) 5803 ] 5804 "TARGET_HAVE_MVE" 5805 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3" 5806 [(set_attr "type" "mve_move") 5807 (set_attr "length""8")]) 5808 5809 ;; 5810 ;; [vhcaddq_rot270_m_s]) 5811 ;; 5812 (define_insn "mve_vhcaddq_rot270_m_s<mode>" 5813 [ 5814 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 5815 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5816 (match_operand:MVE_2 2 "s_register_operand" "w") 5817 (match_operand:MVE_2 3 "s_register_operand" "w") 5818 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5819 VHCADDQ_ROT270_M_S)) 5820 ] 5821 "TARGET_HAVE_MVE" 5822 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270" 5823 [(set_attr "type" "mve_move") 5824 (set_attr "length""8")]) 5825 5826 ;; 5827 ;; [vhcaddq_rot90_m_s]) 5828 ;; 5829 (define_insn "mve_vhcaddq_rot90_m_s<mode>" 5830 [ 5831 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 5832 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5833 (match_operand:MVE_2 2 "s_register_operand" "w") 5834 (match_operand:MVE_2 3 "s_register_operand" "w") 5835 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5836 VHCADDQ_ROT90_M_S)) 5837 ] 5838 "TARGET_HAVE_MVE" 5839 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90" 5840 [(set_attr "type" "mve_move") 5841 (set_attr "length""8")]) 5842 5843 ;; 5844 ;; [vmladavaxq_p_s]) 5845 ;; 5846 (define_insn "mve_vmladavaxq_p_s<mode>" 5847 [ 5848 (set (match_operand:SI 0 "s_register_operand" "=Te") 5849 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 5850 (match_operand:MVE_2 2 "s_register_operand" "w") 5851 (match_operand:MVE_2 3 "s_register_operand" "w") 5852 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5853 VMLADAVAXQ_P_S)) 5854 ] 5855 "TARGET_HAVE_MVE" 5856 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3" 5857 [(set_attr "type" "mve_move") 5858 (set_attr "length""8")]) 5859 5860 ;; 5861 ;; [vmlsdavaq_p_s]) 5862 ;; 5863 (define_insn "mve_vmlsdavaq_p_s<mode>" 5864 [ 5865 (set (match_operand:SI 0 "s_register_operand" "=Te") 5866 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 5867 (match_operand:MVE_2 2 "s_register_operand" "w") 5868 (match_operand:MVE_2 3 "s_register_operand" "w") 5869 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5870 VMLSDAVAQ_P_S)) 5871 ] 5872 "TARGET_HAVE_MVE" 5873 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3" 5874 [(set_attr "type" "mve_move") 5875 (set_attr "length""8")]) 5876 5877 ;; 5878 ;; [vmlsdavaxq_p_s]) 5879 ;; 5880 (define_insn "mve_vmlsdavaxq_p_s<mode>" 5881 [ 5882 (set (match_operand:SI 0 "s_register_operand" "=Te") 5883 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 5884 (match_operand:MVE_2 2 "s_register_operand" "w") 5885 (match_operand:MVE_2 3 "s_register_operand" "w") 5886 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5887 VMLSDAVAXQ_P_S)) 5888 ] 5889 "TARGET_HAVE_MVE" 5890 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3" 5891 [(set_attr "type" "mve_move") 5892 (set_attr "length""8")]) 5893 5894 ;; 5895 ;; [vqdmladhq_m_s]) 5896 ;; 5897 (define_insn "mve_vqdmladhq_m_s<mode>" 5898 [ 5899 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5900 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5901 (match_operand:MVE_2 2 "s_register_operand" "w") 5902 (match_operand:MVE_2 3 "s_register_operand" "w") 5903 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5904 VQDMLADHQ_M_S)) 5905 ] 5906 "TARGET_HAVE_MVE" 5907 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3" 5908 [(set_attr "type" "mve_move") 5909 (set_attr "length""8")]) 5910 5911 ;; 5912 ;; [vqdmladhxq_m_s]) 5913 ;; 5914 (define_insn "mve_vqdmladhxq_m_s<mode>" 5915 [ 5916 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5917 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5918 (match_operand:MVE_2 2 "s_register_operand" "w") 5919 (match_operand:MVE_2 3 "s_register_operand" "w") 5920 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5921 VQDMLADHXQ_M_S)) 5922 ] 5923 "TARGET_HAVE_MVE" 5924 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3" 5925 [(set_attr "type" "mve_move") 5926 (set_attr "length""8")]) 5927 5928 ;; 5929 ;; [vqdmlsdhq_m_s]) 5930 ;; 5931 (define_insn "mve_vqdmlsdhq_m_s<mode>" 5932 [ 5933 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5934 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5935 (match_operand:MVE_2 2 "s_register_operand" "w") 5936 (match_operand:MVE_2 3 "s_register_operand" "w") 5937 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5938 VQDMLSDHQ_M_S)) 5939 ] 5940 "TARGET_HAVE_MVE" 5941 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3" 5942 [(set_attr "type" "mve_move") 5943 (set_attr "length""8")]) 5944 5945 ;; 5946 ;; [vqdmlsdhxq_m_s]) 5947 ;; 5948 (define_insn "mve_vqdmlsdhxq_m_s<mode>" 5949 [ 5950 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5951 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5952 (match_operand:MVE_2 2 "s_register_operand" "w") 5953 (match_operand:MVE_2 3 "s_register_operand" "w") 5954 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5955 VQDMLSDHXQ_M_S)) 5956 ] 5957 "TARGET_HAVE_MVE" 5958 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3" 5959 [(set_attr "type" "mve_move") 5960 (set_attr "length""8")]) 5961 5962 ;; 5963 ;; [vqdmulhq_m_n_s]) 5964 ;; 5965 (define_insn "mve_vqdmulhq_m_n_s<mode>" 5966 [ 5967 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5968 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5969 (match_operand:MVE_2 2 "s_register_operand" "w") 5970 (match_operand:<V_elem> 3 "s_register_operand" "r") 5971 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5972 VQDMULHQ_M_N_S)) 5973 ] 5974 "TARGET_HAVE_MVE" 5975 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3" 5976 [(set_attr "type" "mve_move") 5977 (set_attr "length""8")]) 5978 5979 ;; 5980 ;; [vqdmulhq_m_s]) 5981 ;; 5982 (define_insn "mve_vqdmulhq_m_s<mode>" 5983 [ 5984 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5985 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5986 (match_operand:MVE_2 2 "s_register_operand" "w") 5987 (match_operand:MVE_2 3 "s_register_operand" "w") 5988 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5989 VQDMULHQ_M_S)) 5990 ] 5991 "TARGET_HAVE_MVE" 5992 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3" 5993 [(set_attr "type" "mve_move") 5994 (set_attr "length""8")]) 5995 5996 ;; 5997 ;; [vqrdmladhq_m_s]) 5998 ;; 5999 (define_insn "mve_vqrdmladhq_m_s<mode>" 6000 [ 6001 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6002 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6003 (match_operand:MVE_2 2 "s_register_operand" "w") 6004 (match_operand:MVE_2 3 "s_register_operand" "w") 6005 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6006 VQRDMLADHQ_M_S)) 6007 ] 6008 "TARGET_HAVE_MVE" 6009 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3" 6010 [(set_attr "type" "mve_move") 6011 (set_attr "length""8")]) 6012 6013 ;; 6014 ;; [vqrdmladhxq_m_s]) 6015 ;; 6016 (define_insn "mve_vqrdmladhxq_m_s<mode>" 6017 [ 6018 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6019 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6020 (match_operand:MVE_2 2 "s_register_operand" "w") 6021 (match_operand:MVE_2 3 "s_register_operand" "w") 6022 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6023 VQRDMLADHXQ_M_S)) 6024 ] 6025 "TARGET_HAVE_MVE" 6026 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3" 6027 [(set_attr "type" "mve_move") 6028 (set_attr "length""8")]) 6029 6030 ;; 6031 ;; [vqrdmlsdhq_m_s]) 6032 ;; 6033 (define_insn "mve_vqrdmlsdhq_m_s<mode>" 6034 [ 6035 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6036 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6037 (match_operand:MVE_2 2 "s_register_operand" "w") 6038 (match_operand:MVE_2 3 "s_register_operand" "w") 6039 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6040 VQRDMLSDHQ_M_S)) 6041 ] 6042 "TARGET_HAVE_MVE" 6043 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3" 6044 [(set_attr "type" "mve_move") 6045 (set_attr "length""8")]) 6046 6047 ;; 6048 ;; [vqrdmlsdhxq_m_s]) 6049 ;; 6050 (define_insn "mve_vqrdmlsdhxq_m_s<mode>" 6051 [ 6052 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6053 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6054 (match_operand:MVE_2 2 "s_register_operand" "w") 6055 (match_operand:MVE_2 3 "s_register_operand" "w") 6056 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6057 VQRDMLSDHXQ_M_S)) 6058 ] 6059 "TARGET_HAVE_MVE" 6060 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3" 6061 [(set_attr "type" "mve_move") 6062 (set_attr "length""8")]) 6063 6064 ;; 6065 ;; [vqrdmulhq_m_n_s]) 6066 ;; 6067 (define_insn "mve_vqrdmulhq_m_n_s<mode>" 6068 [ 6069 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6070 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6071 (match_operand:MVE_2 2 "s_register_operand" "w") 6072 (match_operand:<V_elem> 3 "s_register_operand" "r") 6073 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6074 VQRDMULHQ_M_N_S)) 6075 ] 6076 "TARGET_HAVE_MVE" 6077 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3" 6078 [(set_attr "type" "mve_move") 6079 (set_attr "length""8")]) 6080 6081 ;; 6082 ;; [vqrdmulhq_m_s]) 6083 ;; 6084 (define_insn "mve_vqrdmulhq_m_s<mode>" 6085 [ 6086 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6087 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6088 (match_operand:MVE_2 2 "s_register_operand" "w") 6089 (match_operand:MVE_2 3 "s_register_operand" "w") 6090 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6091 VQRDMULHQ_M_S)) 6092 ] 6093 "TARGET_HAVE_MVE" 6094 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3" 6095 [(set_attr "type" "mve_move") 6096 (set_attr "length""8")]) 6097 6098 ;; 6099 ;; [vmlaldavaq_p_u, vmlaldavaq_p_s]) 6100 ;; 6101 (define_insn "mve_vmlaldavaq_p_<supf><mode>" 6102 [ 6103 (set (match_operand:DI 0 "s_register_operand" "=r") 6104 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6105 (match_operand:MVE_5 2 "s_register_operand" "w") 6106 (match_operand:MVE_5 3 "s_register_operand" "w") 6107 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6108 VMLALDAVAQ_P)) 6109 ] 6110 "TARGET_HAVE_MVE" 6111 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3" 6112 [(set_attr "type" "mve_move") 6113 (set_attr "length""8")]) 6114 6115 ;; 6116 ;; [vmlaldavaxq_p_s]) 6117 ;; 6118 (define_insn "mve_vmlaldavaxq_p_<supf><mode>" 6119 [ 6120 (set (match_operand:DI 0 "s_register_operand" "=r") 6121 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6122 (match_operand:MVE_5 2 "s_register_operand" "w") 6123 (match_operand:MVE_5 3 "s_register_operand" "w") 6124 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6125 VMLALDAVAXQ_P)) 6126 ] 6127 "TARGET_HAVE_MVE" 6128 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 6129 [(set_attr "type" "mve_move") 6130 (set_attr "length""8")]) 6131 6132 ;; 6133 ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s]) 6134 ;; 6135 (define_insn "mve_vqrshrnbq_m_n_<supf><mode>" 6136 [ 6137 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6138 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6139 (match_operand:MVE_5 2 "s_register_operand" "w") 6140 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6141 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6142 VQRSHRNBQ_M_N)) 6143 ] 6144 "TARGET_HAVE_MVE" 6145 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3" 6146 [(set_attr "type" "mve_move") 6147 (set_attr "length""8")]) 6148 6149 ;; 6150 ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u]) 6151 ;; 6152 (define_insn "mve_vqrshrntq_m_n_<supf><mode>" 6153 [ 6154 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6155 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6156 (match_operand:MVE_5 2 "s_register_operand" "w") 6157 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6158 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6159 VQRSHRNTQ_M_N)) 6160 ] 6161 "TARGET_HAVE_MVE" 6162 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3" 6163 [(set_attr "type" "mve_move") 6164 (set_attr "length""8")]) 6165 6166 ;; 6167 ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s]) 6168 ;; 6169 (define_insn "mve_vqshrnbq_m_n_<supf><mode>" 6170 [ 6171 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6172 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6173 (match_operand:MVE_5 2 "s_register_operand" "w") 6174 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6175 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6176 VQSHRNBQ_M_N)) 6177 ] 6178 "TARGET_HAVE_MVE" 6179 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 6180 [(set_attr "type" "mve_move") 6181 (set_attr "length""8")]) 6182 6183 ;; 6184 ;; [vqshrntq_m_n_s, vqshrntq_m_n_u]) 6185 ;; 6186 (define_insn "mve_vqshrntq_m_n_<supf><mode>" 6187 [ 6188 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6189 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6190 (match_operand:MVE_5 2 "s_register_operand" "w") 6191 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6192 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6193 VQSHRNTQ_M_N)) 6194 ] 6195 "TARGET_HAVE_MVE" 6196 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 6197 [(set_attr "type" "mve_move") 6198 (set_attr "length""8")]) 6199 6200 ;; 6201 ;; [vrmlaldavhaq_p_s]) 6202 ;; 6203 (define_insn "mve_vrmlaldavhaq_p_sv4si" 6204 [ 6205 (set (match_operand:DI 0 "s_register_operand" "=r") 6206 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6207 (match_operand:V4SI 2 "s_register_operand" "w") 6208 (match_operand:V4SI 3 "s_register_operand" "w") 6209 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6210 VRMLALDAVHAQ_P_S)) 6211 ] 6212 "TARGET_HAVE_MVE" 6213 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3" 6214 [(set_attr "type" "mve_move") 6215 (set_attr "length""8")]) 6216 6217 ;; 6218 ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s]) 6219 ;; 6220 (define_insn "mve_vrshrnbq_m_n_<supf><mode>" 6221 [ 6222 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6223 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6224 (match_operand:MVE_5 2 "s_register_operand" "w") 6225 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6226 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6227 VRSHRNBQ_M_N)) 6228 ] 6229 "TARGET_HAVE_MVE" 6230 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3" 6231 [(set_attr "type" "mve_move") 6232 (set_attr "length""8")]) 6233 6234 ;; 6235 ;; [vrshrntq_m_n_u, vrshrntq_m_n_s]) 6236 ;; 6237 (define_insn "mve_vrshrntq_m_n_<supf><mode>" 6238 [ 6239 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6240 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6241 (match_operand:MVE_5 2 "s_register_operand" "w") 6242 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6243 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6244 VRSHRNTQ_M_N)) 6245 ] 6246 "TARGET_HAVE_MVE" 6247 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3" 6248 [(set_attr "type" "mve_move") 6249 (set_attr "length""8")]) 6250 6251 ;; 6252 ;; [vshllbq_m_n_u, vshllbq_m_n_s]) 6253 ;; 6254 (define_insn "mve_vshllbq_m_n_<supf><mode>" 6255 [ 6256 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 6257 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6258 (match_operand:MVE_3 2 "s_register_operand" "w") 6259 (match_operand:SI 3 "immediate_operand" "i") 6260 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6261 VSHLLBQ_M_N)) 6262 ] 6263 "TARGET_HAVE_MVE" 6264 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 6265 [(set_attr "type" "mve_move") 6266 (set_attr "length""8")]) 6267 6268 ;; 6269 ;; [vshlltq_m_n_u, vshlltq_m_n_s]) 6270 ;; 6271 (define_insn "mve_vshlltq_m_n_<supf><mode>" 6272 [ 6273 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 6274 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6275 (match_operand:MVE_3 2 "s_register_operand" "w") 6276 (match_operand:SI 3 "immediate_operand" "i") 6277 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6278 VSHLLTQ_M_N)) 6279 ] 6280 "TARGET_HAVE_MVE" 6281 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 6282 [(set_attr "type" "mve_move") 6283 (set_attr "length""8")]) 6284 6285 ;; 6286 ;; [vshrnbq_m_n_s, vshrnbq_m_n_u]) 6287 ;; 6288 (define_insn "mve_vshrnbq_m_n_<supf><mode>" 6289 [ 6290 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6291 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6292 (match_operand:MVE_5 2 "s_register_operand" "w") 6293 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6294 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6295 VSHRNBQ_M_N)) 6296 ] 6297 "TARGET_HAVE_MVE" 6298 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3" 6299 [(set_attr "type" "mve_move") 6300 (set_attr "length""8")]) 6301 6302 ;; 6303 ;; [vshrntq_m_n_s, vshrntq_m_n_u]) 6304 ;; 6305 (define_insn "mve_vshrntq_m_n_<supf><mode>" 6306 [ 6307 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6308 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6309 (match_operand:MVE_5 2 "s_register_operand" "w") 6310 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6311 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6312 VSHRNTQ_M_N)) 6313 ] 6314 "TARGET_HAVE_MVE" 6315 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3" 6316 [(set_attr "type" "mve_move") 6317 (set_attr "length""8")]) 6318 6319 ;; 6320 ;; [vmlsldavaq_p_s]) 6321 ;; 6322 (define_insn "mve_vmlsldavaq_p_s<mode>" 6323 [ 6324 (set (match_operand:DI 0 "s_register_operand" "=r") 6325 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6326 (match_operand:MVE_5 2 "s_register_operand" "w") 6327 (match_operand:MVE_5 3 "s_register_operand" "w") 6328 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6329 VMLSLDAVAQ_P_S)) 6330 ] 6331 "TARGET_HAVE_MVE" 6332 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 6333 [(set_attr "type" "mve_move") 6334 (set_attr "length""8")]) 6335 6336 ;; 6337 ;; [vmlsldavaxq_p_s]) 6338 ;; 6339 (define_insn "mve_vmlsldavaxq_p_s<mode>" 6340 [ 6341 (set (match_operand:DI 0 "s_register_operand" "=r") 6342 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6343 (match_operand:MVE_5 2 "s_register_operand" "w") 6344 (match_operand:MVE_5 3 "s_register_operand" "w") 6345 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6346 VMLSLDAVAXQ_P_S)) 6347 ] 6348 "TARGET_HAVE_MVE" 6349 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 6350 [(set_attr "type" "mve_move") 6351 (set_attr "length""8")]) 6352 6353 ;; 6354 ;; [vmullbq_poly_m_p]) 6355 ;; 6356 (define_insn "mve_vmullbq_poly_m_p<mode>" 6357 [ 6358 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 6359 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6360 (match_operand:MVE_3 2 "s_register_operand" "w") 6361 (match_operand:MVE_3 3 "s_register_operand" "w") 6362 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6363 VMULLBQ_POLY_M_P)) 6364 ] 6365 "TARGET_HAVE_MVE" 6366 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3" 6367 [(set_attr "type" "mve_move") 6368 (set_attr "length""8")]) 6369 6370 ;; 6371 ;; [vmulltq_poly_m_p]) 6372 ;; 6373 (define_insn "mve_vmulltq_poly_m_p<mode>" 6374 [ 6375 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 6376 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6377 (match_operand:MVE_3 2 "s_register_operand" "w") 6378 (match_operand:MVE_3 3 "s_register_operand" "w") 6379 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6380 VMULLTQ_POLY_M_P)) 6381 ] 6382 "TARGET_HAVE_MVE" 6383 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3" 6384 [(set_attr "type" "mve_move") 6385 (set_attr "length""8")]) 6386 6387 ;; 6388 ;; [vqdmullbq_m_n_s]) 6389 ;; 6390 (define_insn "mve_vqdmullbq_m_n_s<mode>" 6391 [ 6392 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 6393 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6394 (match_operand:MVE_5 2 "s_register_operand" "w") 6395 (match_operand:<V_elem> 3 "s_register_operand" "r") 6396 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6397 VQDMULLBQ_M_N_S)) 6398 ] 6399 "TARGET_HAVE_MVE" 6400 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3" 6401 [(set_attr "type" "mve_move") 6402 (set_attr "length""8")]) 6403 6404 ;; 6405 ;; [vqdmullbq_m_s]) 6406 ;; 6407 (define_insn "mve_vqdmullbq_m_s<mode>" 6408 [ 6409 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 6410 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6411 (match_operand:MVE_5 2 "s_register_operand" "w") 6412 (match_operand:MVE_5 3 "s_register_operand" "w") 6413 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6414 VQDMULLBQ_M_S)) 6415 ] 6416 "TARGET_HAVE_MVE" 6417 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3" 6418 [(set_attr "type" "mve_move") 6419 (set_attr "length""8")]) 6420 6421 ;; 6422 ;; [vqdmulltq_m_n_s]) 6423 ;; 6424 (define_insn "mve_vqdmulltq_m_n_s<mode>" 6425 [ 6426 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 6427 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6428 (match_operand:MVE_5 2 "s_register_operand" "w") 6429 (match_operand:<V_elem> 3 "s_register_operand" "r") 6430 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6431 VQDMULLTQ_M_N_S)) 6432 ] 6433 "TARGET_HAVE_MVE" 6434 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3" 6435 [(set_attr "type" "mve_move") 6436 (set_attr "length""8")]) 6437 6438 ;; 6439 ;; [vqdmulltq_m_s]) 6440 ;; 6441 (define_insn "mve_vqdmulltq_m_s<mode>" 6442 [ 6443 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 6444 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6445 (match_operand:MVE_5 2 "s_register_operand" "w") 6446 (match_operand:MVE_5 3 "s_register_operand" "w") 6447 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6448 VQDMULLTQ_M_S)) 6449 ] 6450 "TARGET_HAVE_MVE" 6451 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3" 6452 [(set_attr "type" "mve_move") 6453 (set_attr "length""8")]) 6454 6455 ;; 6456 ;; [vqrshrunbq_m_n_s]) 6457 ;; 6458 (define_insn "mve_vqrshrunbq_m_n_s<mode>" 6459 [ 6460 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6461 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6462 (match_operand:MVE_5 2 "s_register_operand" "w") 6463 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6464 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6465 VQRSHRUNBQ_M_N_S)) 6466 ] 6467 "TARGET_HAVE_MVE" 6468 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3" 6469 [(set_attr "type" "mve_move") 6470 (set_attr "length""8")]) 6471 6472 ;; 6473 ;; [vqrshruntq_m_n_s]) 6474 ;; 6475 (define_insn "mve_vqrshruntq_m_n_s<mode>" 6476 [ 6477 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6478 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6479 (match_operand:MVE_5 2 "s_register_operand" "w") 6480 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6481 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6482 VQRSHRUNTQ_M_N_S)) 6483 ] 6484 "TARGET_HAVE_MVE" 6485 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3" 6486 [(set_attr "type" "mve_move") 6487 (set_attr "length""8")]) 6488 6489 ;; 6490 ;; [vqshrunbq_m_n_s]) 6491 ;; 6492 (define_insn "mve_vqshrunbq_m_n_s<mode>" 6493 [ 6494 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6495 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6496 (match_operand:MVE_5 2 "s_register_operand" "w") 6497 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6498 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6499 VQSHRUNBQ_M_N_S)) 6500 ] 6501 "TARGET_HAVE_MVE" 6502 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3" 6503 [(set_attr "type" "mve_move") 6504 (set_attr "length""8")]) 6505 6506 ;; 6507 ;; [vqshruntq_m_n_s]) 6508 ;; 6509 (define_insn "mve_vqshruntq_m_n_s<mode>" 6510 [ 6511 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6512 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6513 (match_operand:MVE_5 2 "s_register_operand" "w") 6514 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6515 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6516 VQSHRUNTQ_M_N_S)) 6517 ] 6518 "TARGET_HAVE_MVE" 6519 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3" 6520 [(set_attr "type" "mve_move") 6521 (set_attr "length""8")]) 6522 6523 ;; 6524 ;; [vrmlaldavhaq_p_u]) 6525 ;; 6526 (define_insn "mve_vrmlaldavhaq_p_uv4si" 6527 [ 6528 (set (match_operand:DI 0 "s_register_operand" "=r") 6529 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6530 (match_operand:V4SI 2 "s_register_operand" "w") 6531 (match_operand:V4SI 3 "s_register_operand" "w") 6532 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6533 VRMLALDAVHAQ_P_U)) 6534 ] 6535 "TARGET_HAVE_MVE" 6536 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3" 6537 [(set_attr "type" "mve_move") 6538 (set_attr "length""8")]) 6539 6540 ;; 6541 ;; [vrmlaldavhaxq_p_s]) 6542 ;; 6543 (define_insn "mve_vrmlaldavhaxq_p_sv4si" 6544 [ 6545 (set (match_operand:DI 0 "s_register_operand" "=r") 6546 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6547 (match_operand:V4SI 2 "s_register_operand" "w") 6548 (match_operand:V4SI 3 "s_register_operand" "w") 6549 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6550 VRMLALDAVHAXQ_P_S)) 6551 ] 6552 "TARGET_HAVE_MVE" 6553 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3" 6554 [(set_attr "type" "mve_move") 6555 (set_attr "length""8")]) 6556 6557 ;; 6558 ;; [vrmlsldavhaq_p_s]) 6559 ;; 6560 (define_insn "mve_vrmlsldavhaq_p_sv4si" 6561 [ 6562 (set (match_operand:DI 0 "s_register_operand" "=r") 6563 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6564 (match_operand:V4SI 2 "s_register_operand" "w") 6565 (match_operand:V4SI 3 "s_register_operand" "w") 6566 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6567 VRMLSLDAVHAQ_P_S)) 6568 ] 6569 "TARGET_HAVE_MVE" 6570 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3" 6571 [(set_attr "type" "mve_move") 6572 (set_attr "length""8")]) 6573 6574 ;; 6575 ;; [vrmlsldavhaxq_p_s]) 6576 ;; 6577 (define_insn "mve_vrmlsldavhaxq_p_sv4si" 6578 [ 6579 (set (match_operand:DI 0 "s_register_operand" "=r") 6580 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6581 (match_operand:V4SI 2 "s_register_operand" "w") 6582 (match_operand:V4SI 3 "s_register_operand" "w") 6583 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6584 VRMLSLDAVHAXQ_P_S)) 6585 ] 6586 "TARGET_HAVE_MVE" 6587 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3" 6588 [(set_attr "type" "mve_move") 6589 (set_attr "length""8")]) 6590 ;; 6591 ;; [vabdq_m_f]) 6592 ;; 6593 (define_insn "mve_vabdq_m_f<mode>" 6594 [ 6595 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6596 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6597 (match_operand:MVE_0 2 "s_register_operand" "w") 6598 (match_operand:MVE_0 3 "s_register_operand" "w") 6599 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6600 VABDQ_M_F)) 6601 ] 6602 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6603 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3" 6604 [(set_attr "type" "mve_move") 6605 (set_attr "length""8")]) 6606 6607 ;; 6608 ;; [vaddq_m_f]) 6609 ;; 6610 (define_insn "mve_vaddq_m_f<mode>" 6611 [ 6612 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6613 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6614 (match_operand:MVE_0 2 "s_register_operand" "w") 6615 (match_operand:MVE_0 3 "s_register_operand" "w") 6616 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6617 VADDQ_M_F)) 6618 ] 6619 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6620 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3" 6621 [(set_attr "type" "mve_move") 6622 (set_attr "length""8")]) 6623 6624 ;; 6625 ;; [vaddq_m_n_f]) 6626 ;; 6627 (define_insn "mve_vaddq_m_n_f<mode>" 6628 [ 6629 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6630 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6631 (match_operand:MVE_0 2 "s_register_operand" "w") 6632 (match_operand:<V_elem> 3 "s_register_operand" "r") 6633 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6634 VADDQ_M_N_F)) 6635 ] 6636 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6637 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3" 6638 [(set_attr "type" "mve_move") 6639 (set_attr "length""8")]) 6640 6641 ;; 6642 ;; [vandq_m_f]) 6643 ;; 6644 (define_insn "mve_vandq_m_f<mode>" 6645 [ 6646 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6647 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6648 (match_operand:MVE_0 2 "s_register_operand" "w") 6649 (match_operand:MVE_0 3 "s_register_operand" "w") 6650 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6651 VANDQ_M_F)) 6652 ] 6653 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6654 "vpst\;vandt\t%q0, %q2, %q3" 6655 [(set_attr "type" "mve_move") 6656 (set_attr "length""8")]) 6657 6658 ;; 6659 ;; [vbicq_m_f]) 6660 ;; 6661 (define_insn "mve_vbicq_m_f<mode>" 6662 [ 6663 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6664 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6665 (match_operand:MVE_0 2 "s_register_operand" "w") 6666 (match_operand:MVE_0 3 "s_register_operand" "w") 6667 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6668 VBICQ_M_F)) 6669 ] 6670 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6671 "vpst\;vbict\t%q0, %q2, %q3" 6672 [(set_attr "type" "mve_move") 6673 (set_attr "length""8")]) 6674 6675 ;; 6676 ;; [vbrsrq_m_n_f]) 6677 ;; 6678 (define_insn "mve_vbrsrq_m_n_f<mode>" 6679 [ 6680 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6681 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6682 (match_operand:MVE_0 2 "s_register_operand" "w") 6683 (match_operand:SI 3 "s_register_operand" "r") 6684 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6685 VBRSRQ_M_N_F)) 6686 ] 6687 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6688 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3" 6689 [(set_attr "type" "mve_move") 6690 (set_attr "length""8")]) 6691 6692 ;; 6693 ;; [vcaddq_rot270_m_f]) 6694 ;; 6695 (define_insn "mve_vcaddq_rot270_m_f<mode>" 6696 [ 6697 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6698 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6699 (match_operand:MVE_0 2 "s_register_operand" "w") 6700 (match_operand:MVE_0 3 "s_register_operand" "w") 6701 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6702 VCADDQ_ROT270_M_F)) 6703 ] 6704 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6705 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270" 6706 [(set_attr "type" "mve_move") 6707 (set_attr "length""8")]) 6708 6709 ;; 6710 ;; [vcaddq_rot90_m_f]) 6711 ;; 6712 (define_insn "mve_vcaddq_rot90_m_f<mode>" 6713 [ 6714 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6715 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6716 (match_operand:MVE_0 2 "s_register_operand" "w") 6717 (match_operand:MVE_0 3 "s_register_operand" "w") 6718 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6719 VCADDQ_ROT90_M_F)) 6720 ] 6721 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6722 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90" 6723 [(set_attr "type" "mve_move") 6724 (set_attr "length""8")]) 6725 6726 ;; 6727 ;; [vcmlaq_m_f]) 6728 ;; 6729 (define_insn "mve_vcmlaq_m_f<mode>" 6730 [ 6731 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6732 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6733 (match_operand:MVE_0 2 "s_register_operand" "w") 6734 (match_operand:MVE_0 3 "s_register_operand" "w") 6735 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6736 VCMLAQ_M_F)) 6737 ] 6738 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6739 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0" 6740 [(set_attr "type" "mve_move") 6741 (set_attr "length""8")]) 6742 6743 ;; 6744 ;; [vcmlaq_rot180_m_f]) 6745 ;; 6746 (define_insn "mve_vcmlaq_rot180_m_f<mode>" 6747 [ 6748 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6749 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6750 (match_operand:MVE_0 2 "s_register_operand" "w") 6751 (match_operand:MVE_0 3 "s_register_operand" "w") 6752 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6753 VCMLAQ_ROT180_M_F)) 6754 ] 6755 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6756 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180" 6757 [(set_attr "type" "mve_move") 6758 (set_attr "length""8")]) 6759 6760 ;; 6761 ;; [vcmlaq_rot270_m_f]) 6762 ;; 6763 (define_insn "mve_vcmlaq_rot270_m_f<mode>" 6764 [ 6765 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6766 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6767 (match_operand:MVE_0 2 "s_register_operand" "w") 6768 (match_operand:MVE_0 3 "s_register_operand" "w") 6769 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6770 VCMLAQ_ROT270_M_F)) 6771 ] 6772 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6773 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270" 6774 [(set_attr "type" "mve_move") 6775 (set_attr "length""8")]) 6776 6777 ;; 6778 ;; [vcmlaq_rot90_m_f]) 6779 ;; 6780 (define_insn "mve_vcmlaq_rot90_m_f<mode>" 6781 [ 6782 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6783 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6784 (match_operand:MVE_0 2 "s_register_operand" "w") 6785 (match_operand:MVE_0 3 "s_register_operand" "w") 6786 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6787 VCMLAQ_ROT90_M_F)) 6788 ] 6789 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6790 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90" 6791 [(set_attr "type" "mve_move") 6792 (set_attr "length""8")]) 6793 6794 ;; 6795 ;; [vcmulq_m_f]) 6796 ;; 6797 (define_insn "mve_vcmulq_m_f<mode>" 6798 [ 6799 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6800 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6801 (match_operand:MVE_0 2 "s_register_operand" "w") 6802 (match_operand:MVE_0 3 "s_register_operand" "w") 6803 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6804 VCMULQ_M_F)) 6805 ] 6806 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6807 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0" 6808 [(set_attr "type" "mve_move") 6809 (set_attr "length""8")]) 6810 6811 ;; 6812 ;; [vcmulq_rot180_m_f]) 6813 ;; 6814 (define_insn "mve_vcmulq_rot180_m_f<mode>" 6815 [ 6816 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6817 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6818 (match_operand:MVE_0 2 "s_register_operand" "w") 6819 (match_operand:MVE_0 3 "s_register_operand" "w") 6820 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6821 VCMULQ_ROT180_M_F)) 6822 ] 6823 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6824 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180" 6825 [(set_attr "type" "mve_move") 6826 (set_attr "length""8")]) 6827 6828 ;; 6829 ;; [vcmulq_rot270_m_f]) 6830 ;; 6831 (define_insn "mve_vcmulq_rot270_m_f<mode>" 6832 [ 6833 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6834 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6835 (match_operand:MVE_0 2 "s_register_operand" "w") 6836 (match_operand:MVE_0 3 "s_register_operand" "w") 6837 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6838 VCMULQ_ROT270_M_F)) 6839 ] 6840 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6841 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270" 6842 [(set_attr "type" "mve_move") 6843 (set_attr "length""8")]) 6844 6845 ;; 6846 ;; [vcmulq_rot90_m_f]) 6847 ;; 6848 (define_insn "mve_vcmulq_rot90_m_f<mode>" 6849 [ 6850 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6851 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6852 (match_operand:MVE_0 2 "s_register_operand" "w") 6853 (match_operand:MVE_0 3 "s_register_operand" "w") 6854 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6855 VCMULQ_ROT90_M_F)) 6856 ] 6857 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6858 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90" 6859 [(set_attr "type" "mve_move") 6860 (set_attr "length""8")]) 6861 6862 ;; 6863 ;; [veorq_m_f]) 6864 ;; 6865 (define_insn "mve_veorq_m_f<mode>" 6866 [ 6867 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6868 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6869 (match_operand:MVE_0 2 "s_register_operand" "w") 6870 (match_operand:MVE_0 3 "s_register_operand" "w") 6871 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6872 VEORQ_M_F)) 6873 ] 6874 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6875 "vpst\;veort\t%q0, %q2, %q3" 6876 [(set_attr "type" "mve_move") 6877 (set_attr "length""8")]) 6878 6879 ;; 6880 ;; [vfmaq_m_f]) 6881 ;; 6882 (define_insn "mve_vfmaq_m_f<mode>" 6883 [ 6884 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6885 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6886 (match_operand:MVE_0 2 "s_register_operand" "w") 6887 (match_operand:MVE_0 3 "s_register_operand" "w") 6888 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6889 VFMAQ_M_F)) 6890 ] 6891 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6892 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3" 6893 [(set_attr "type" "mve_move") 6894 (set_attr "length""8")]) 6895 6896 ;; 6897 ;; [vfmaq_m_n_f]) 6898 ;; 6899 (define_insn "mve_vfmaq_m_n_f<mode>" 6900 [ 6901 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6902 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6903 (match_operand:MVE_0 2 "s_register_operand" "w") 6904 (match_operand:<V_elem> 3 "s_register_operand" "r") 6905 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6906 VFMAQ_M_N_F)) 6907 ] 6908 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6909 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3" 6910 [(set_attr "type" "mve_move") 6911 (set_attr "length""8")]) 6912 6913 ;; 6914 ;; [vfmasq_m_n_f]) 6915 ;; 6916 (define_insn "mve_vfmasq_m_n_f<mode>" 6917 [ 6918 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6919 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6920 (match_operand:MVE_0 2 "s_register_operand" "w") 6921 (match_operand:<V_elem> 3 "s_register_operand" "r") 6922 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6923 VFMASQ_M_N_F)) 6924 ] 6925 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6926 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3" 6927 [(set_attr "type" "mve_move") 6928 (set_attr "length""8")]) 6929 6930 ;; 6931 ;; [vfmsq_m_f]) 6932 ;; 6933 (define_insn "mve_vfmsq_m_f<mode>" 6934 [ 6935 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6936 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6937 (match_operand:MVE_0 2 "s_register_operand" "w") 6938 (match_operand:MVE_0 3 "s_register_operand" "w") 6939 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6940 VFMSQ_M_F)) 6941 ] 6942 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6943 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3" 6944 [(set_attr "type" "mve_move") 6945 (set_attr "length""8")]) 6946 6947 ;; 6948 ;; [vmaxnmq_m_f]) 6949 ;; 6950 (define_insn "mve_vmaxnmq_m_f<mode>" 6951 [ 6952 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6953 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6954 (match_operand:MVE_0 2 "s_register_operand" "w") 6955 (match_operand:MVE_0 3 "s_register_operand" "w") 6956 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6957 VMAXNMQ_M_F)) 6958 ] 6959 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6960 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3" 6961 [(set_attr "type" "mve_move") 6962 (set_attr "length""8")]) 6963 6964 ;; 6965 ;; [vminnmq_m_f]) 6966 ;; 6967 (define_insn "mve_vminnmq_m_f<mode>" 6968 [ 6969 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6970 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6971 (match_operand:MVE_0 2 "s_register_operand" "w") 6972 (match_operand:MVE_0 3 "s_register_operand" "w") 6973 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6974 VMINNMQ_M_F)) 6975 ] 6976 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6977 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3" 6978 [(set_attr "type" "mve_move") 6979 (set_attr "length""8")]) 6980 6981 ;; 6982 ;; [vmulq_m_f]) 6983 ;; 6984 (define_insn "mve_vmulq_m_f<mode>" 6985 [ 6986 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6987 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6988 (match_operand:MVE_0 2 "s_register_operand" "w") 6989 (match_operand:MVE_0 3 "s_register_operand" "w") 6990 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6991 VMULQ_M_F)) 6992 ] 6993 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6994 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3" 6995 [(set_attr "type" "mve_move") 6996 (set_attr "length""8")]) 6997 6998 ;; 6999 ;; [vmulq_m_n_f]) 7000 ;; 7001 (define_insn "mve_vmulq_m_n_f<mode>" 7002 [ 7003 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 7004 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 7005 (match_operand:MVE_0 2 "s_register_operand" "w") 7006 (match_operand:<V_elem> 3 "s_register_operand" "r") 7007 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 7008 VMULQ_M_N_F)) 7009 ] 7010 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7011 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3" 7012 [(set_attr "type" "mve_move") 7013 (set_attr "length""8")]) 7014 7015 ;; 7016 ;; [vornq_m_f]) 7017 ;; 7018 (define_insn "mve_vornq_m_f<mode>" 7019 [ 7020 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 7021 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 7022 (match_operand:MVE_0 2 "s_register_operand" "w") 7023 (match_operand:MVE_0 3 "s_register_operand" "w") 7024 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 7025 VORNQ_M_F)) 7026 ] 7027 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7028 "vpst\;vornt\t%q0, %q2, %q3" 7029 [(set_attr "type" "mve_move") 7030 (set_attr "length""8")]) 7031 7032 ;; 7033 ;; [vorrq_m_f]) 7034 ;; 7035 (define_insn "mve_vorrq_m_f<mode>" 7036 [ 7037 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 7038 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 7039 (match_operand:MVE_0 2 "s_register_operand" "w") 7040 (match_operand:MVE_0 3 "s_register_operand" "w") 7041 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 7042 VORRQ_M_F)) 7043 ] 7044 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7045 "vpst\;vorrt\t%q0, %q2, %q3" 7046 [(set_attr "type" "mve_move") 7047 (set_attr "length""8")]) 7048 7049 ;; 7050 ;; [vsubq_m_f]) 7051 ;; 7052 (define_insn "mve_vsubq_m_f<mode>" 7053 [ 7054 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 7055 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 7056 (match_operand:MVE_0 2 "s_register_operand" "w") 7057 (match_operand:MVE_0 3 "s_register_operand" "w") 7058 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 7059 VSUBQ_M_F)) 7060 ] 7061 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7062 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3" 7063 [(set_attr "type" "mve_move") 7064 (set_attr "length""8")]) 7065 7066 ;; 7067 ;; [vsubq_m_n_f]) 7068 ;; 7069 (define_insn "mve_vsubq_m_n_f<mode>" 7070 [ 7071 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 7072 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 7073 (match_operand:MVE_0 2 "s_register_operand" "w") 7074 (match_operand:<V_elem> 3 "s_register_operand" "r") 7075 (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 7076 VSUBQ_M_N_F)) 7077 ] 7078 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7079 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3" 7080 [(set_attr "type" "mve_move") 7081 (set_attr "length""8")]) 7082 7083 ;; 7084 ;; [vstrbq_s vstrbq_u] 7085 ;; 7086 (define_insn "mve_vstrbq_<supf><mode>" 7087 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux") 7088 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")] 7089 VSTRBQ)) 7090 ] 7091 "TARGET_HAVE_MVE" 7092 { 7093 rtx ops[2]; 7094 int regno = REGNO (operands[1]); 7095 ops[1] = gen_rtx_REG (TImode, regno); 7096 ops[0] = operands[0]; 7097 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops); 7098 return ""; 7099 } 7100 [(set_attr "length" "4")]) 7101 7102 ;; 7103 ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u] 7104 ;; 7105 (define_expand "mve_vstrbq_scatter_offset_<supf><mode>" 7106 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory") 7107 (match_operand:MVE_2 1 "s_register_operand") 7108 (match_operand:MVE_2 2 "s_register_operand") 7109 (unspec:V4SI [(const_int 0)] VSTRBSOQ)] 7110 "TARGET_HAVE_MVE" 7111 { 7112 rtx ind = XEXP (operands[0], 0); 7113 gcc_assert (REG_P (ind)); 7114 emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1], 7115 operands[2])); 7116 DONE; 7117 }) 7118 7119 (define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn" 7120 [(set (mem:BLK (scratch)) 7121 (unspec:BLK 7122 [(match_operand:SI 0 "register_operand" "r") 7123 (match_operand:MVE_2 1 "s_register_operand" "w") 7124 (match_operand:MVE_2 2 "s_register_operand" "w")] 7125 VSTRBSOQ))] 7126 "TARGET_HAVE_MVE" 7127 "vstrb.<V_sz_elem>\t%q2, [%0, %q1]" 7128 [(set_attr "length" "4")]) 7129 7130 ;; 7131 ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u] 7132 ;; 7133 (define_insn "mve_vstrwq_scatter_base_<supf>v4si" 7134 [(set (mem:BLK (scratch)) 7135 (unspec:BLK 7136 [(match_operand:V4SI 0 "s_register_operand" "w") 7137 (match_operand:SI 1 "immediate_operand" "i") 7138 (match_operand:V4SI 2 "s_register_operand" "w")] 7139 VSTRWSBQ)) 7140 ] 7141 "TARGET_HAVE_MVE" 7142 { 7143 rtx ops[3]; 7144 ops[0] = operands[0]; 7145 ops[1] = operands[1]; 7146 ops[2] = operands[2]; 7147 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops); 7148 return ""; 7149 } 7150 [(set_attr "length" "4")]) 7151 7152 ;; 7153 ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u] 7154 ;; 7155 (define_insn "mve_vldrbq_gather_offset_<supf><mode>" 7156 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w") 7157 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us") 7158 (match_operand:MVE_2 2 "s_register_operand" "w")] 7159 VLDRBGOQ)) 7160 ] 7161 "TARGET_HAVE_MVE" 7162 { 7163 rtx ops[3]; 7164 ops[0] = operands[0]; 7165 ops[1] = operands[1]; 7166 ops[2] = operands[2]; 7167 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8) 7168 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops); 7169 else 7170 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops); 7171 return ""; 7172 } 7173 [(set_attr "length" "4")]) 7174 7175 ;; 7176 ;; [vldrbq_s vldrbq_u] 7177 ;; 7178 (define_insn "mve_vldrbq_<supf><mode>" 7179 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 7180 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")] 7181 VLDRBQ)) 7182 ] 7183 "TARGET_HAVE_MVE" 7184 { 7185 rtx ops[2]; 7186 int regno = REGNO (operands[0]); 7187 ops[0] = gen_rtx_REG (TImode, regno); 7188 ops[1] = operands[1]; 7189 if (<V_sz_elem> == 8) 7190 output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops); 7191 else 7192 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops); 7193 return ""; 7194 } 7195 [(set_attr "length" "4")]) 7196 7197 ;; 7198 ;; [vldrwq_gather_base_s vldrwq_gather_base_u] 7199 ;; 7200 (define_insn "mve_vldrwq_gather_base_<supf>v4si" 7201 [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 7202 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 7203 (match_operand:SI 2 "immediate_operand" "i")] 7204 VLDRWGBQ)) 7205 ] 7206 "TARGET_HAVE_MVE" 7207 { 7208 rtx ops[3]; 7209 ops[0] = operands[0]; 7210 ops[1] = operands[1]; 7211 ops[2] = operands[2]; 7212 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops); 7213 return ""; 7214 } 7215 [(set_attr "length" "4")]) 7216 7217 ;; 7218 ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u] 7219 ;; 7220 (define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>" 7221 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory") 7222 (match_operand:MVE_2 1 "s_register_operand") 7223 (match_operand:MVE_2 2 "s_register_operand") 7224 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up") 7225 (unspec:V4SI [(const_int 0)] VSTRBSOQ)] 7226 "TARGET_HAVE_MVE" 7227 { 7228 rtx ind = XEXP (operands[0], 0); 7229 gcc_assert (REG_P (ind)); 7230 emit_insn ( 7231 gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1], 7232 operands[2], 7233 operands[3])); 7234 DONE; 7235 }) 7236 7237 (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn" 7238 [(set (mem:BLK (scratch)) 7239 (unspec:BLK 7240 [(match_operand:SI 0 "register_operand" "r") 7241 (match_operand:MVE_2 1 "s_register_operand" "w") 7242 (match_operand:MVE_2 2 "s_register_operand" "w") 7243 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 7244 VSTRBSOQ))] 7245 "TARGET_HAVE_MVE" 7246 "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]" 7247 [(set_attr "length" "8")]) 7248 7249 ;; 7250 ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u] 7251 ;; 7252 (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si" 7253 [(set (mem:BLK (scratch)) 7254 (unspec:BLK 7255 [(match_operand:V4SI 0 "s_register_operand" "w") 7256 (match_operand:SI 1 "immediate_operand" "i") 7257 (match_operand:V4SI 2 "s_register_operand" "w") 7258 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 7259 VSTRWSBQ)) 7260 ] 7261 "TARGET_HAVE_MVE" 7262 { 7263 rtx ops[3]; 7264 ops[0] = operands[0]; 7265 ops[1] = operands[1]; 7266 ops[2] = operands[2]; 7267 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops); 7268 return ""; 7269 } 7270 [(set_attr "length" "8")]) 7271 7272 (define_insn "mve_vstrbq_p_<supf><mode>" 7273 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux") 7274 (unspec:<MVE_B_ELEM> 7275 [(match_operand:MVE_2 1 "s_register_operand" "w") 7276 (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up") 7277 (match_dup 0)] 7278 VSTRBQ))] 7279 "TARGET_HAVE_MVE" 7280 { 7281 rtx ops[2]; 7282 int regno = REGNO (operands[1]); 7283 ops[1] = gen_rtx_REG (TImode, regno); 7284 ops[0] = operands[0]; 7285 output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops); 7286 return ""; 7287 } 7288 [(set_attr "length" "8")]) 7289 7290 ;; 7291 ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u] 7292 ;; 7293 (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>" 7294 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w") 7295 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us") 7296 (match_operand:MVE_2 2 "s_register_operand" "w") 7297 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 7298 VLDRBGOQ)) 7299 ] 7300 "TARGET_HAVE_MVE" 7301 { 7302 rtx ops[4]; 7303 ops[0] = operands[0]; 7304 ops[1] = operands[1]; 7305 ops[2] = operands[2]; 7306 ops[3] = operands[3]; 7307 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8) 7308 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops); 7309 else 7310 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops); 7311 return ""; 7312 } 7313 [(set_attr "length" "8")]) 7314 7315 ;; 7316 ;; [vldrbq_z_s vldrbq_z_u] 7317 ;; 7318 (define_insn "mve_vldrbq_z_<supf><mode>" 7319 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 7320 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux") 7321 (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up")] 7322 VLDRBQ)) 7323 ] 7324 "TARGET_HAVE_MVE" 7325 { 7326 rtx ops[2]; 7327 int regno = REGNO (operands[0]); 7328 ops[0] = gen_rtx_REG (TImode, regno); 7329 ops[1] = operands[1]; 7330 if (<V_sz_elem> == 8) 7331 output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops); 7332 else 7333 output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops); 7334 return ""; 7335 } 7336 [(set_attr "length" "8")]) 7337 7338 ;; 7339 ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u] 7340 ;; 7341 (define_insn "mve_vldrwq_gather_base_z_<supf>v4si" 7342 [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 7343 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 7344 (match_operand:SI 2 "immediate_operand" "i") 7345 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 7346 VLDRWGBQ)) 7347 ] 7348 "TARGET_HAVE_MVE" 7349 { 7350 rtx ops[3]; 7351 ops[0] = operands[0]; 7352 ops[1] = operands[1]; 7353 ops[2] = operands[2]; 7354 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops); 7355 return ""; 7356 } 7357 [(set_attr "length" "8")]) 7358 7359 ;; 7360 ;; [vldrhq_f] 7361 ;; 7362 (define_insn "mve_vldrhq_fv8hf" 7363 [(set (match_operand:V8HF 0 "s_register_operand" "=w") 7364 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")] 7365 VLDRHQ_F)) 7366 ] 7367 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7368 { 7369 rtx ops[2]; 7370 int regno = REGNO (operands[0]); 7371 ops[0] = gen_rtx_REG (TImode, regno); 7372 ops[1] = operands[1]; 7373 output_asm_insn ("vldrh.16\t%q0, %E1",ops); 7374 return ""; 7375 } 7376 [(set_attr "length" "4")]) 7377 7378 ;; 7379 ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u] 7380 ;; 7381 (define_insn "mve_vldrhq_gather_offset_<supf><mode>" 7382 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w") 7383 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us") 7384 (match_operand:MVE_6 2 "s_register_operand" "w")] 7385 VLDRHGOQ)) 7386 ] 7387 "TARGET_HAVE_MVE" 7388 { 7389 rtx ops[3]; 7390 ops[0] = operands[0]; 7391 ops[1] = operands[1]; 7392 ops[2] = operands[2]; 7393 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16) 7394 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops); 7395 else 7396 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops); 7397 return ""; 7398 } 7399 [(set_attr "length" "4")]) 7400 7401 ;; 7402 ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u] 7403 ;; 7404 (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>" 7405 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w") 7406 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us") 7407 (match_operand:MVE_6 2 "s_register_operand" "w") 7408 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up") 7409 ]VLDRHGOQ)) 7410 ] 7411 "TARGET_HAVE_MVE" 7412 { 7413 rtx ops[4]; 7414 ops[0] = operands[0]; 7415 ops[1] = operands[1]; 7416 ops[2] = operands[2]; 7417 ops[3] = operands[3]; 7418 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16) 7419 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops); 7420 else 7421 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops); 7422 return ""; 7423 } 7424 [(set_attr "length" "8")]) 7425 7426 ;; 7427 ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u] 7428 ;; 7429 (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>" 7430 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w") 7431 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us") 7432 (match_operand:MVE_6 2 "s_register_operand" "w")] 7433 VLDRHGSOQ)) 7434 ] 7435 "TARGET_HAVE_MVE" 7436 { 7437 rtx ops[3]; 7438 ops[0] = operands[0]; 7439 ops[1] = operands[1]; 7440 ops[2] = operands[2]; 7441 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16) 7442 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops); 7443 else 7444 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops); 7445 return ""; 7446 } 7447 [(set_attr "length" "4")]) 7448 7449 ;; 7450 ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u] 7451 ;; 7452 (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>" 7453 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w") 7454 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us") 7455 (match_operand:MVE_6 2 "s_register_operand" "w") 7456 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up") 7457 ]VLDRHGSOQ)) 7458 ] 7459 "TARGET_HAVE_MVE" 7460 { 7461 rtx ops[4]; 7462 ops[0] = operands[0]; 7463 ops[1] = operands[1]; 7464 ops[2] = operands[2]; 7465 ops[3] = operands[3]; 7466 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16) 7467 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops); 7468 else 7469 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops); 7470 return ""; 7471 } 7472 [(set_attr "length" "8")]) 7473 7474 ;; 7475 ;; [vldrhq_s, vldrhq_u] 7476 ;; 7477 (define_insn "mve_vldrhq_<supf><mode>" 7478 [(set (match_operand:MVE_6 0 "s_register_operand" "=w") 7479 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")] 7480 VLDRHQ)) 7481 ] 7482 "TARGET_HAVE_MVE" 7483 { 7484 rtx ops[2]; 7485 int regno = REGNO (operands[0]); 7486 ops[0] = gen_rtx_REG (TImode, regno); 7487 ops[1] = operands[1]; 7488 if (<V_sz_elem> == 16) 7489 output_asm_insn ("vldrh.16\t%q0, %E1",ops); 7490 else 7491 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops); 7492 return ""; 7493 } 7494 [(set_attr "length" "4")]) 7495 7496 ;; 7497 ;; [vldrhq_z_f] 7498 ;; 7499 (define_insn "mve_vldrhq_z_fv8hf" 7500 [(set (match_operand:V8HF 0 "s_register_operand" "=w") 7501 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux") 7502 (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up")] 7503 VLDRHQ_F)) 7504 ] 7505 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7506 { 7507 rtx ops[2]; 7508 int regno = REGNO (operands[0]); 7509 ops[0] = gen_rtx_REG (TImode, regno); 7510 ops[1] = operands[1]; 7511 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops); 7512 return ""; 7513 } 7514 [(set_attr "length" "8")]) 7515 7516 ;; 7517 ;; [vldrhq_z_s vldrhq_z_u] 7518 ;; 7519 (define_insn "mve_vldrhq_z_<supf><mode>" 7520 [(set (match_operand:MVE_6 0 "s_register_operand" "=w") 7521 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux") 7522 (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up")] 7523 VLDRHQ)) 7524 ] 7525 "TARGET_HAVE_MVE" 7526 { 7527 rtx ops[2]; 7528 int regno = REGNO (operands[0]); 7529 ops[0] = gen_rtx_REG (TImode, regno); 7530 ops[1] = operands[1]; 7531 if (<V_sz_elem> == 16) 7532 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops); 7533 else 7534 output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops); 7535 return ""; 7536 } 7537 [(set_attr "length" "8")]) 7538 7539 ;; 7540 ;; [vldrwq_f] 7541 ;; 7542 (define_insn "mve_vldrwq_fv4sf" 7543 [(set (match_operand:V4SF 0 "s_register_operand" "=w") 7544 (unspec:V4SF [(match_operand:V4SI 1 "mve_memory_operand" "Ux")] 7545 VLDRWQ_F)) 7546 ] 7547 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7548 { 7549 rtx ops[2]; 7550 int regno = REGNO (operands[0]); 7551 ops[0] = gen_rtx_REG (TImode, regno); 7552 ops[1] = operands[1]; 7553 output_asm_insn ("vldrw.32\t%q0, %E1",ops); 7554 return ""; 7555 } 7556 [(set_attr "length" "4")]) 7557 7558 ;; 7559 ;; [vldrwq_s vldrwq_u] 7560 ;; 7561 (define_insn "mve_vldrwq_<supf>v4si" 7562 [(set (match_operand:V4SI 0 "s_register_operand" "=w") 7563 (unspec:V4SI [(match_operand:V4SI 1 "mve_memory_operand" "Ux")] 7564 VLDRWQ)) 7565 ] 7566 "TARGET_HAVE_MVE" 7567 { 7568 rtx ops[2]; 7569 int regno = REGNO (operands[0]); 7570 ops[0] = gen_rtx_REG (TImode, regno); 7571 ops[1] = operands[1]; 7572 output_asm_insn ("vldrw.32\t%q0, %E1",ops); 7573 return ""; 7574 } 7575 [(set_attr "length" "4")]) 7576 7577 ;; 7578 ;; [vldrwq_z_f] 7579 ;; 7580 (define_insn "mve_vldrwq_z_fv4sf" 7581 [(set (match_operand:V4SF 0 "s_register_operand" "=w") 7582 (unspec:V4SF [(match_operand:V4SI 1 "mve_memory_operand" "Ux") 7583 (match_operand:V4BI 2 "vpr_register_operand" "Up")] 7584 VLDRWQ_F)) 7585 ] 7586 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7587 { 7588 rtx ops[2]; 7589 int regno = REGNO (operands[0]); 7590 ops[0] = gen_rtx_REG (TImode, regno); 7591 ops[1] = operands[1]; 7592 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops); 7593 return ""; 7594 } 7595 [(set_attr "length" "8")]) 7596 7597 ;; 7598 ;; [vldrwq_z_s vldrwq_z_u] 7599 ;; 7600 (define_insn "mve_vldrwq_z_<supf>v4si" 7601 [(set (match_operand:V4SI 0 "s_register_operand" "=w") 7602 (unspec:V4SI [(match_operand:V4SI 1 "mve_memory_operand" "Ux") 7603 (match_operand:V4BI 2 "vpr_register_operand" "Up")] 7604 VLDRWQ)) 7605 ] 7606 "TARGET_HAVE_MVE" 7607 { 7608 rtx ops[2]; 7609 int regno = REGNO (operands[0]); 7610 ops[0] = gen_rtx_REG (TImode, regno); 7611 ops[1] = operands[1]; 7612 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops); 7613 return ""; 7614 } 7615 [(set_attr "length" "8")]) 7616 7617 (define_expand "mve_vld1q_f<mode>" 7618 [(match_operand:MVE_0 0 "s_register_operand") 7619 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F) 7620 ] 7621 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT" 7622 { 7623 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1])); 7624 DONE; 7625 }) 7626 7627 (define_expand "mve_vld1q_<supf><mode>" 7628 [(match_operand:MVE_2 0 "s_register_operand") 7629 (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q) 7630 ] 7631 "TARGET_HAVE_MVE" 7632 { 7633 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1])); 7634 DONE; 7635 }) 7636 7637 ;; 7638 ;; [vldrdq_gather_base_s vldrdq_gather_base_u] 7639 ;; 7640 (define_insn "mve_vldrdq_gather_base_<supf>v2di" 7641 [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7642 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w") 7643 (match_operand:SI 2 "immediate_operand" "i")] 7644 VLDRDGBQ)) 7645 ] 7646 "TARGET_HAVE_MVE" 7647 { 7648 rtx ops[3]; 7649 ops[0] = operands[0]; 7650 ops[1] = operands[1]; 7651 ops[2] = operands[2]; 7652 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops); 7653 return ""; 7654 } 7655 [(set_attr "length" "4")]) 7656 7657 ;; 7658 ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u] 7659 ;; 7660 (define_insn "mve_vldrdq_gather_base_z_<supf>v2di" 7661 [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7662 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w") 7663 (match_operand:SI 2 "immediate_operand" "i") 7664 (match_operand:HI 3 "vpr_register_operand" "Up")] 7665 VLDRDGBQ)) 7666 ] 7667 "TARGET_HAVE_MVE" 7668 { 7669 rtx ops[3]; 7670 ops[0] = operands[0]; 7671 ops[1] = operands[1]; 7672 ops[2] = operands[2]; 7673 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops); 7674 return ""; 7675 } 7676 [(set_attr "length" "8")]) 7677 7678 ;; 7679 ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u] 7680 ;; 7681 (define_insn "mve_vldrdq_gather_offset_<supf>v2di" 7682 [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7683 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us") 7684 (match_operand:V2DI 2 "s_register_operand" "w")] 7685 VLDRDGOQ)) 7686 ] 7687 "TARGET_HAVE_MVE" 7688 { 7689 rtx ops[3]; 7690 ops[0] = operands[0]; 7691 ops[1] = operands[1]; 7692 ops[2] = operands[2]; 7693 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops); 7694 return ""; 7695 } 7696 [(set_attr "length" "4")]) 7697 7698 ;; 7699 ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u] 7700 ;; 7701 (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di" 7702 [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7703 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us") 7704 (match_operand:V2DI 2 "s_register_operand" "w") 7705 (match_operand:HI 3 "vpr_register_operand" "Up")] 7706 VLDRDGOQ)) 7707 ] 7708 "TARGET_HAVE_MVE" 7709 { 7710 rtx ops[3]; 7711 ops[0] = operands[0]; 7712 ops[1] = operands[1]; 7713 ops[2] = operands[2]; 7714 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops); 7715 return ""; 7716 } 7717 [(set_attr "length" "8")]) 7718 7719 ;; 7720 ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u] 7721 ;; 7722 (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di" 7723 [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7724 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us") 7725 (match_operand:V2DI 2 "s_register_operand" "w")] 7726 VLDRDGSOQ)) 7727 ] 7728 "TARGET_HAVE_MVE" 7729 { 7730 rtx ops[3]; 7731 ops[0] = operands[0]; 7732 ops[1] = operands[1]; 7733 ops[2] = operands[2]; 7734 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops); 7735 return ""; 7736 } 7737 [(set_attr "length" "4")]) 7738 7739 ;; 7740 ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u] 7741 ;; 7742 (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di" 7743 [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7744 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us") 7745 (match_operand:V2DI 2 "s_register_operand" "w") 7746 (match_operand:HI 3 "vpr_register_operand" "Up")] 7747 VLDRDGSOQ)) 7748 ] 7749 "TARGET_HAVE_MVE" 7750 { 7751 rtx ops[3]; 7752 ops[0] = operands[0]; 7753 ops[1] = operands[1]; 7754 ops[2] = operands[2]; 7755 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops); 7756 return ""; 7757 } 7758 [(set_attr "length" "8")]) 7759 7760 ;; 7761 ;; [vldrhq_gather_offset_f] 7762 ;; 7763 (define_insn "mve_vldrhq_gather_offset_fv8hf" 7764 [(set (match_operand:V8HF 0 "s_register_operand" "=&w") 7765 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us") 7766 (match_operand:V8HI 2 "s_register_operand" "w")] 7767 VLDRHQGO_F)) 7768 ] 7769 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7770 { 7771 rtx ops[3]; 7772 ops[0] = operands[0]; 7773 ops[1] = operands[1]; 7774 ops[2] = operands[2]; 7775 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops); 7776 return ""; 7777 } 7778 [(set_attr "length" "4")]) 7779 7780 ;; 7781 ;; [vldrhq_gather_offset_z_f] 7782 ;; 7783 (define_insn "mve_vldrhq_gather_offset_z_fv8hf" 7784 [(set (match_operand:V8HF 0 "s_register_operand" "=&w") 7785 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us") 7786 (match_operand:V8HI 2 "s_register_operand" "w") 7787 (match_operand:V8BI 3 "vpr_register_operand" "Up")] 7788 VLDRHQGO_F)) 7789 ] 7790 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7791 { 7792 rtx ops[4]; 7793 ops[0] = operands[0]; 7794 ops[1] = operands[1]; 7795 ops[2] = operands[2]; 7796 ops[3] = operands[3]; 7797 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops); 7798 return ""; 7799 } 7800 [(set_attr "length" "8")]) 7801 7802 ;; 7803 ;; [vldrhq_gather_shifted_offset_f] 7804 ;; 7805 (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf" 7806 [(set (match_operand:V8HF 0 "s_register_operand" "=&w") 7807 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us") 7808 (match_operand:V8HI 2 "s_register_operand" "w")] 7809 VLDRHQGSO_F)) 7810 ] 7811 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7812 { 7813 rtx ops[3]; 7814 ops[0] = operands[0]; 7815 ops[1] = operands[1]; 7816 ops[2] = operands[2]; 7817 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops); 7818 return ""; 7819 } 7820 [(set_attr "length" "4")]) 7821 7822 ;; 7823 ;; [vldrhq_gather_shifted_offset_z_f] 7824 ;; 7825 (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf" 7826 [(set (match_operand:V8HF 0 "s_register_operand" "=&w") 7827 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us") 7828 (match_operand:V8HI 2 "s_register_operand" "w") 7829 (match_operand:V8BI 3 "vpr_register_operand" "Up")] 7830 VLDRHQGSO_F)) 7831 ] 7832 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7833 { 7834 rtx ops[4]; 7835 ops[0] = operands[0]; 7836 ops[1] = operands[1]; 7837 ops[2] = operands[2]; 7838 ops[3] = operands[3]; 7839 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops); 7840 return ""; 7841 } 7842 [(set_attr "length" "8")]) 7843 7844 ;; 7845 ;; [vldrwq_gather_base_f] 7846 ;; 7847 (define_insn "mve_vldrwq_gather_base_fv4sf" 7848 [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 7849 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w") 7850 (match_operand:SI 2 "immediate_operand" "i")] 7851 VLDRWQGB_F)) 7852 ] 7853 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7854 { 7855 rtx ops[3]; 7856 ops[0] = operands[0]; 7857 ops[1] = operands[1]; 7858 ops[2] = operands[2]; 7859 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops); 7860 return ""; 7861 } 7862 [(set_attr "length" "4")]) 7863 7864 ;; 7865 ;; [vldrwq_gather_base_z_f] 7866 ;; 7867 (define_insn "mve_vldrwq_gather_base_z_fv4sf" 7868 [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 7869 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w") 7870 (match_operand:SI 2 "immediate_operand" "i") 7871 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 7872 VLDRWQGB_F)) 7873 ] 7874 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7875 { 7876 rtx ops[3]; 7877 ops[0] = operands[0]; 7878 ops[1] = operands[1]; 7879 ops[2] = operands[2]; 7880 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops); 7881 return ""; 7882 } 7883 [(set_attr "length" "8")]) 7884 7885 ;; 7886 ;; [vldrwq_gather_offset_f] 7887 ;; 7888 (define_insn "mve_vldrwq_gather_offset_fv4sf" 7889 [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 7890 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us") 7891 (match_operand:V4SI 2 "s_register_operand" "w")] 7892 VLDRWQGO_F)) 7893 ] 7894 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7895 { 7896 rtx ops[3]; 7897 ops[0] = operands[0]; 7898 ops[1] = operands[1]; 7899 ops[2] = operands[2]; 7900 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops); 7901 return ""; 7902 } 7903 [(set_attr "length" "4")]) 7904 7905 ;; 7906 ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u] 7907 ;; 7908 (define_insn "mve_vldrwq_gather_offset_<supf>v4si" 7909 [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 7910 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us") 7911 (match_operand:V4SI 2 "s_register_operand" "w")] 7912 VLDRWGOQ)) 7913 ] 7914 "TARGET_HAVE_MVE" 7915 { 7916 rtx ops[3]; 7917 ops[0] = operands[0]; 7918 ops[1] = operands[1]; 7919 ops[2] = operands[2]; 7920 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops); 7921 return ""; 7922 } 7923 [(set_attr "length" "4")]) 7924 7925 ;; 7926 ;; [vldrwq_gather_offset_z_f] 7927 ;; 7928 (define_insn "mve_vldrwq_gather_offset_z_fv4sf" 7929 [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 7930 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us") 7931 (match_operand:V4SI 2 "s_register_operand" "w") 7932 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 7933 VLDRWQGO_F)) 7934 ] 7935 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7936 { 7937 rtx ops[4]; 7938 ops[0] = operands[0]; 7939 ops[1] = operands[1]; 7940 ops[2] = operands[2]; 7941 ops[3] = operands[3]; 7942 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops); 7943 return ""; 7944 } 7945 [(set_attr "length" "8")]) 7946 7947 ;; 7948 ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u] 7949 ;; 7950 (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si" 7951 [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 7952 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us") 7953 (match_operand:V4SI 2 "s_register_operand" "w") 7954 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 7955 VLDRWGOQ)) 7956 ] 7957 "TARGET_HAVE_MVE" 7958 { 7959 rtx ops[4]; 7960 ops[0] = operands[0]; 7961 ops[1] = operands[1]; 7962 ops[2] = operands[2]; 7963 ops[3] = operands[3]; 7964 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops); 7965 return ""; 7966 } 7967 [(set_attr "length" "8")]) 7968 7969 ;; 7970 ;; [vldrwq_gather_shifted_offset_f] 7971 ;; 7972 (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf" 7973 [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 7974 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us") 7975 (match_operand:V4SI 2 "s_register_operand" "w")] 7976 VLDRWQGSO_F)) 7977 ] 7978 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7979 { 7980 rtx ops[3]; 7981 ops[0] = operands[0]; 7982 ops[1] = operands[1]; 7983 ops[2] = operands[2]; 7984 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops); 7985 return ""; 7986 } 7987 [(set_attr "length" "4")]) 7988 7989 ;; 7990 ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u] 7991 ;; 7992 (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si" 7993 [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 7994 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us") 7995 (match_operand:V4SI 2 "s_register_operand" "w")] 7996 VLDRWGSOQ)) 7997 ] 7998 "TARGET_HAVE_MVE" 7999 { 8000 rtx ops[3]; 8001 ops[0] = operands[0]; 8002 ops[1] = operands[1]; 8003 ops[2] = operands[2]; 8004 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops); 8005 return ""; 8006 } 8007 [(set_attr "length" "4")]) 8008 8009 ;; 8010 ;; [vldrwq_gather_shifted_offset_z_f] 8011 ;; 8012 (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf" 8013 [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 8014 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us") 8015 (match_operand:V4SI 2 "s_register_operand" "w") 8016 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8017 VLDRWQGSO_F)) 8018 ] 8019 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8020 { 8021 rtx ops[4]; 8022 ops[0] = operands[0]; 8023 ops[1] = operands[1]; 8024 ops[2] = operands[2]; 8025 ops[3] = operands[3]; 8026 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops); 8027 return ""; 8028 } 8029 [(set_attr "length" "8")]) 8030 8031 ;; 8032 ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u] 8033 ;; 8034 (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si" 8035 [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 8036 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us") 8037 (match_operand:V4SI 2 "s_register_operand" "w") 8038 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8039 VLDRWGSOQ)) 8040 ] 8041 "TARGET_HAVE_MVE" 8042 { 8043 rtx ops[4]; 8044 ops[0] = operands[0]; 8045 ops[1] = operands[1]; 8046 ops[2] = operands[2]; 8047 ops[3] = operands[3]; 8048 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops); 8049 return ""; 8050 } 8051 [(set_attr "length" "8")]) 8052 8053 ;; 8054 ;; [vstrhq_f] 8055 ;; 8056 (define_insn "mve_vstrhq_fv8hf" 8057 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux") 8058 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")] 8059 VSTRHQ_F)) 8060 ] 8061 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8062 { 8063 rtx ops[2]; 8064 int regno = REGNO (operands[1]); 8065 ops[1] = gen_rtx_REG (TImode, regno); 8066 ops[0] = operands[0]; 8067 output_asm_insn ("vstrh.16\t%q1, %E0",ops); 8068 return ""; 8069 } 8070 [(set_attr "length" "4")]) 8071 8072 ;; 8073 ;; [vstrhq_p_f] 8074 ;; 8075 (define_insn "mve_vstrhq_p_fv8hf" 8076 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux") 8077 (unspec:V8HI 8078 [(match_operand:V8HF 1 "s_register_operand" "w") 8079 (match_operand:V8BI 2 "vpr_register_operand" "Up") 8080 (match_dup 0)] 8081 VSTRHQ_F))] 8082 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8083 { 8084 rtx ops[2]; 8085 int regno = REGNO (operands[1]); 8086 ops[1] = gen_rtx_REG (TImode, regno); 8087 ops[0] = operands[0]; 8088 output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops); 8089 return ""; 8090 } 8091 [(set_attr "length" "8")]) 8092 8093 ;; 8094 ;; [vstrhq_p_s vstrhq_p_u] 8095 ;; 8096 (define_insn "mve_vstrhq_p_<supf><mode>" 8097 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux") 8098 (unspec:<MVE_H_ELEM> 8099 [(match_operand:MVE_6 1 "s_register_operand" "w") 8100 (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up") 8101 (match_dup 0)] 8102 VSTRHQ)) 8103 ] 8104 "TARGET_HAVE_MVE" 8105 { 8106 rtx ops[2]; 8107 int regno = REGNO (operands[1]); 8108 ops[1] = gen_rtx_REG (TImode, regno); 8109 ops[0] = operands[0]; 8110 output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops); 8111 return ""; 8112 } 8113 [(set_attr "length" "8")]) 8114 8115 ;; 8116 ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u] 8117 ;; 8118 (define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>" 8119 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory") 8120 (match_operand:MVE_6 1 "s_register_operand") 8121 (match_operand:MVE_6 2 "s_register_operand") 8122 (match_operand:<MVE_VPRED> 3 "vpr_register_operand") 8123 (unspec:V4SI [(const_int 0)] VSTRHSOQ)] 8124 "TARGET_HAVE_MVE" 8125 { 8126 rtx ind = XEXP (operands[0], 0); 8127 gcc_assert (REG_P (ind)); 8128 emit_insn ( 8129 gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1], 8130 operands[2], 8131 operands[3])); 8132 DONE; 8133 }) 8134 8135 (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn" 8136 [(set (mem:BLK (scratch)) 8137 (unspec:BLK 8138 [(match_operand:SI 0 "register_operand" "r") 8139 (match_operand:MVE_6 1 "s_register_operand" "w") 8140 (match_operand:MVE_6 2 "s_register_operand" "w") 8141 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 8142 VSTRHSOQ))] 8143 "TARGET_HAVE_MVE" 8144 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]" 8145 [(set_attr "length" "8")]) 8146 8147 ;; 8148 ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u] 8149 ;; 8150 (define_expand "mve_vstrhq_scatter_offset_<supf><mode>" 8151 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory") 8152 (match_operand:MVE_6 1 "s_register_operand") 8153 (match_operand:MVE_6 2 "s_register_operand") 8154 (unspec:V4SI [(const_int 0)] VSTRHSOQ)] 8155 "TARGET_HAVE_MVE" 8156 { 8157 rtx ind = XEXP (operands[0], 0); 8158 gcc_assert (REG_P (ind)); 8159 emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1], 8160 operands[2])); 8161 DONE; 8162 }) 8163 8164 (define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn" 8165 [(set (mem:BLK (scratch)) 8166 (unspec:BLK 8167 [(match_operand:SI 0 "register_operand" "r") 8168 (match_operand:MVE_6 1 "s_register_operand" "w") 8169 (match_operand:MVE_6 2 "s_register_operand" "w")] 8170 VSTRHSOQ))] 8171 "TARGET_HAVE_MVE" 8172 "vstrh.<V_sz_elem>\t%q2, [%0, %q1]" 8173 [(set_attr "length" "4")]) 8174 8175 ;; 8176 ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u] 8177 ;; 8178 (define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>" 8179 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory") 8180 (match_operand:MVE_6 1 "s_register_operand") 8181 (match_operand:MVE_6 2 "s_register_operand") 8182 (match_operand:<MVE_VPRED> 3 "vpr_register_operand") 8183 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)] 8184 "TARGET_HAVE_MVE" 8185 { 8186 rtx ind = XEXP (operands[0], 0); 8187 gcc_assert (REG_P (ind)); 8188 emit_insn ( 8189 gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1], 8190 operands[2], 8191 operands[3])); 8192 DONE; 8193 }) 8194 8195 (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn" 8196 [(set (mem:BLK (scratch)) 8197 (unspec:BLK 8198 [(match_operand:SI 0 "register_operand" "r") 8199 (match_operand:MVE_6 1 "s_register_operand" "w") 8200 (match_operand:MVE_6 2 "s_register_operand" "w") 8201 (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 8202 VSTRHSSOQ))] 8203 "TARGET_HAVE_MVE" 8204 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]" 8205 [(set_attr "length" "8")]) 8206 8207 ;; 8208 ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u] 8209 ;; 8210 (define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>" 8211 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory") 8212 (match_operand:MVE_6 1 "s_register_operand") 8213 (match_operand:MVE_6 2 "s_register_operand") 8214 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)] 8215 "TARGET_HAVE_MVE" 8216 { 8217 rtx ind = XEXP (operands[0], 0); 8218 gcc_assert (REG_P (ind)); 8219 emit_insn ( 8220 gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1], 8221 operands[2])); 8222 DONE; 8223 }) 8224 8225 (define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn" 8226 [(set (mem:BLK (scratch)) 8227 (unspec:BLK 8228 [(match_operand:SI 0 "register_operand" "r") 8229 (match_operand:MVE_6 1 "s_register_operand" "w") 8230 (match_operand:MVE_6 2 "s_register_operand" "w")] 8231 VSTRHSSOQ))] 8232 "TARGET_HAVE_MVE" 8233 "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]" 8234 [(set_attr "length" "4")]) 8235 8236 ;; 8237 ;; [vstrhq_s, vstrhq_u] 8238 ;; 8239 (define_insn "mve_vstrhq_<supf><mode>" 8240 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux") 8241 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")] 8242 VSTRHQ)) 8243 ] 8244 "TARGET_HAVE_MVE" 8245 { 8246 rtx ops[2]; 8247 int regno = REGNO (operands[1]); 8248 ops[1] = gen_rtx_REG (TImode, regno); 8249 ops[0] = operands[0]; 8250 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops); 8251 return ""; 8252 } 8253 [(set_attr "length" "4")]) 8254 8255 ;; 8256 ;; [vstrwq_f] 8257 ;; 8258 (define_insn "mve_vstrwq_fv4sf" 8259 [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux") 8260 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")] 8261 VSTRWQ_F)) 8262 ] 8263 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8264 { 8265 rtx ops[2]; 8266 int regno = REGNO (operands[1]); 8267 ops[1] = gen_rtx_REG (TImode, regno); 8268 ops[0] = operands[0]; 8269 output_asm_insn ("vstrw.32\t%q1, %E0",ops); 8270 return ""; 8271 } 8272 [(set_attr "length" "4")]) 8273 8274 ;; 8275 ;; [vstrwq_p_f] 8276 ;; 8277 (define_insn "mve_vstrwq_p_fv4sf" 8278 [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux") 8279 (unspec:V4SI 8280 [(match_operand:V4SF 1 "s_register_operand" "w") 8281 (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up") 8282 (match_dup 0)] 8283 VSTRWQ_F))] 8284 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8285 { 8286 rtx ops[2]; 8287 int regno = REGNO (operands[1]); 8288 ops[1] = gen_rtx_REG (TImode, regno); 8289 ops[0] = operands[0]; 8290 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops); 8291 return ""; 8292 } 8293 [(set_attr "length" "8")]) 8294 8295 ;; 8296 ;; [vstrwq_p_s vstrwq_p_u] 8297 ;; 8298 (define_insn "mve_vstrwq_p_<supf>v4si" 8299 [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux") 8300 (unspec:V4SI 8301 [(match_operand:V4SI 1 "s_register_operand" "w") 8302 (match_operand:V4BI 2 "vpr_register_operand" "Up") 8303 (match_dup 0)] 8304 VSTRWQ))] 8305 "TARGET_HAVE_MVE" 8306 { 8307 rtx ops[2]; 8308 int regno = REGNO (operands[1]); 8309 ops[1] = gen_rtx_REG (TImode, regno); 8310 ops[0] = operands[0]; 8311 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops); 8312 return ""; 8313 } 8314 [(set_attr "length" "8")]) 8315 8316 ;; 8317 ;; [vstrwq_s vstrwq_u] 8318 ;; 8319 (define_insn "mve_vstrwq_<supf>v4si" 8320 [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux") 8321 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")] 8322 VSTRWQ)) 8323 ] 8324 "TARGET_HAVE_MVE" 8325 { 8326 rtx ops[2]; 8327 int regno = REGNO (operands[1]); 8328 ops[1] = gen_rtx_REG (TImode, regno); 8329 ops[0] = operands[0]; 8330 output_asm_insn ("vstrw.32\t%q1, %E0",ops); 8331 return ""; 8332 } 8333 [(set_attr "length" "4")]) 8334 8335 (define_expand "mve_vst1q_f<mode>" 8336 [(match_operand:<MVE_CNVT> 0 "mve_memory_operand") 8337 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F) 8338 ] 8339 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT" 8340 { 8341 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1])); 8342 DONE; 8343 }) 8344 8345 (define_expand "mve_vst1q_<supf><mode>" 8346 [(match_operand:MVE_2 0 "mve_memory_operand") 8347 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q) 8348 ] 8349 "TARGET_HAVE_MVE" 8350 { 8351 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1])); 8352 DONE; 8353 }) 8354 8355 ;; 8356 ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u] 8357 ;; 8358 (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di" 8359 [(set (mem:BLK (scratch)) 8360 (unspec:BLK 8361 [(match_operand:V2DI 0 "s_register_operand" "w") 8362 (match_operand:SI 1 "mve_vldrd_immediate" "Ri") 8363 (match_operand:V2DI 2 "s_register_operand" "w") 8364 (match_operand:HI 3 "vpr_register_operand" "Up")] 8365 VSTRDSBQ)) 8366 ] 8367 "TARGET_HAVE_MVE" 8368 { 8369 rtx ops[3]; 8370 ops[0] = operands[0]; 8371 ops[1] = operands[1]; 8372 ops[2] = operands[2]; 8373 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops); 8374 return ""; 8375 } 8376 [(set_attr "length" "8")]) 8377 8378 ;; 8379 ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u] 8380 ;; 8381 (define_insn "mve_vstrdq_scatter_base_<supf>v2di" 8382 [(set (mem:BLK (scratch)) 8383 (unspec:BLK 8384 [(match_operand:V2DI 0 "s_register_operand" "=w") 8385 (match_operand:SI 1 "mve_vldrd_immediate" "Ri") 8386 (match_operand:V2DI 2 "s_register_operand" "w")] 8387 VSTRDSBQ)) 8388 ] 8389 "TARGET_HAVE_MVE" 8390 { 8391 rtx ops[3]; 8392 ops[0] = operands[0]; 8393 ops[1] = operands[1]; 8394 ops[2] = operands[2]; 8395 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops); 8396 return ""; 8397 } 8398 [(set_attr "length" "4")]) 8399 8400 ;; 8401 ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u] 8402 ;; 8403 (define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di" 8404 [(match_operand:V2DI 0 "mve_scatter_memory") 8405 (match_operand:V2DI 1 "s_register_operand") 8406 (match_operand:V2DI 2 "s_register_operand") 8407 (match_operand:HI 3 "vpr_register_operand") 8408 (unspec:V4SI [(const_int 0)] VSTRDSOQ)] 8409 "TARGET_HAVE_MVE" 8410 { 8411 rtx ind = XEXP (operands[0], 0); 8412 gcc_assert (REG_P (ind)); 8413 emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1], 8414 operands[2], 8415 operands[3])); 8416 DONE; 8417 }) 8418 8419 (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn" 8420 [(set (mem:BLK (scratch)) 8421 (unspec:BLK 8422 [(match_operand:SI 0 "register_operand" "r") 8423 (match_operand:V2DI 1 "s_register_operand" "w") 8424 (match_operand:V2DI 2 "s_register_operand" "w") 8425 (match_operand:HI 3 "vpr_register_operand" "Up")] 8426 VSTRDSOQ))] 8427 "TARGET_HAVE_MVE" 8428 "vpst\;vstrdt.64\t%q2, [%0, %q1]" 8429 [(set_attr "length" "8")]) 8430 8431 ;; 8432 ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u] 8433 ;; 8434 (define_expand "mve_vstrdq_scatter_offset_<supf>v2di" 8435 [(match_operand:V2DI 0 "mve_scatter_memory") 8436 (match_operand:V2DI 1 "s_register_operand") 8437 (match_operand:V2DI 2 "s_register_operand") 8438 (unspec:V4SI [(const_int 0)] VSTRDSOQ)] 8439 "TARGET_HAVE_MVE" 8440 { 8441 rtx ind = XEXP (operands[0], 0); 8442 gcc_assert (REG_P (ind)); 8443 emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1], 8444 operands[2])); 8445 DONE; 8446 }) 8447 8448 (define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn" 8449 [(set (mem:BLK (scratch)) 8450 (unspec:BLK 8451 [(match_operand:SI 0 "register_operand" "r") 8452 (match_operand:V2DI 1 "s_register_operand" "w") 8453 (match_operand:V2DI 2 "s_register_operand" "w")] 8454 VSTRDSOQ))] 8455 "TARGET_HAVE_MVE" 8456 "vstrd.64\t%q2, [%0, %q1]" 8457 [(set_attr "length" "4")]) 8458 8459 ;; 8460 ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u] 8461 ;; 8462 (define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di" 8463 [(match_operand:V2DI 0 "mve_scatter_memory") 8464 (match_operand:V2DI 1 "s_register_operand") 8465 (match_operand:V2DI 2 "s_register_operand") 8466 (match_operand:HI 3 "vpr_register_operand") 8467 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)] 8468 "TARGET_HAVE_MVE" 8469 { 8470 rtx ind = XEXP (operands[0], 0); 8471 gcc_assert (REG_P (ind)); 8472 emit_insn ( 8473 gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1], 8474 operands[2], 8475 operands[3])); 8476 DONE; 8477 }) 8478 8479 (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn" 8480 [(set (mem:BLK (scratch)) 8481 (unspec:BLK 8482 [(match_operand:SI 0 "register_operand" "r") 8483 (match_operand:V2DI 1 "s_register_operand" "w") 8484 (match_operand:V2DI 2 "s_register_operand" "w") 8485 (match_operand:HI 3 "vpr_register_operand" "Up")] 8486 VSTRDSSOQ))] 8487 "TARGET_HAVE_MVE" 8488 "vpst\;vstrdt.64\t%q2, [%0, %q1, uxtw #3]" 8489 [(set_attr "length" "8")]) 8490 8491 ;; 8492 ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u] 8493 ;; 8494 (define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di" 8495 [(match_operand:V2DI 0 "mve_scatter_memory") 8496 (match_operand:V2DI 1 "s_register_operand") 8497 (match_operand:V2DI 2 "s_register_operand") 8498 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)] 8499 "TARGET_HAVE_MVE" 8500 { 8501 rtx ind = XEXP (operands[0], 0); 8502 gcc_assert (REG_P (ind)); 8503 emit_insn ( 8504 gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1], 8505 operands[2])); 8506 DONE; 8507 }) 8508 8509 (define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn" 8510 [(set (mem:BLK (scratch)) 8511 (unspec:BLK 8512 [(match_operand:SI 0 "register_operand" "r") 8513 (match_operand:V2DI 1 "s_register_operand" "w") 8514 (match_operand:V2DI 2 "s_register_operand" "w")] 8515 VSTRDSSOQ))] 8516 "TARGET_HAVE_MVE" 8517 "vstrd.64\t%q2, [%0, %q1, uxtw #3]" 8518 [(set_attr "length" "4")]) 8519 8520 ;; 8521 ;; [vstrhq_scatter_offset_f] 8522 ;; 8523 (define_expand "mve_vstrhq_scatter_offset_fv8hf" 8524 [(match_operand:V8HI 0 "mve_scatter_memory") 8525 (match_operand:V8HI 1 "s_register_operand") 8526 (match_operand:V8HF 2 "s_register_operand") 8527 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)] 8528 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8529 { 8530 rtx ind = XEXP (operands[0], 0); 8531 gcc_assert (REG_P (ind)); 8532 emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1], 8533 operands[2])); 8534 DONE; 8535 }) 8536 8537 (define_insn "mve_vstrhq_scatter_offset_fv8hf_insn" 8538 [(set (mem:BLK (scratch)) 8539 (unspec:BLK 8540 [(match_operand:SI 0 "register_operand" "r") 8541 (match_operand:V8HI 1 "s_register_operand" "w") 8542 (match_operand:V8HF 2 "s_register_operand" "w")] 8543 VSTRHQSO_F))] 8544 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8545 "vstrh.16\t%q2, [%0, %q1]" 8546 [(set_attr "length" "4")]) 8547 8548 ;; 8549 ;; [vstrhq_scatter_offset_p_f] 8550 ;; 8551 (define_expand "mve_vstrhq_scatter_offset_p_fv8hf" 8552 [(match_operand:V8HI 0 "mve_scatter_memory") 8553 (match_operand:V8HI 1 "s_register_operand") 8554 (match_operand:V8HF 2 "s_register_operand") 8555 (match_operand:V8BI 3 "vpr_register_operand") 8556 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)] 8557 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8558 { 8559 rtx ind = XEXP (operands[0], 0); 8560 gcc_assert (REG_P (ind)); 8561 emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1], 8562 operands[2], 8563 operands[3])); 8564 DONE; 8565 }) 8566 8567 (define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn" 8568 [(set (mem:BLK (scratch)) 8569 (unspec:BLK 8570 [(match_operand:SI 0 "register_operand" "r") 8571 (match_operand:V8HI 1 "s_register_operand" "w") 8572 (match_operand:V8HF 2 "s_register_operand" "w") 8573 (match_operand:V8BI 3 "vpr_register_operand" "Up")] 8574 VSTRHQSO_F))] 8575 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8576 "vpst\;vstrht.16\t%q2, [%0, %q1]" 8577 [(set_attr "length" "8")]) 8578 8579 ;; 8580 ;; [vstrhq_scatter_shifted_offset_f] 8581 ;; 8582 (define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf" 8583 [(match_operand:V8HI 0 "memory_operand" "=Us") 8584 (match_operand:V8HI 1 "s_register_operand" "w") 8585 (match_operand:V8HF 2 "s_register_operand" "w") 8586 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)] 8587 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8588 { 8589 rtx ind = XEXP (operands[0], 0); 8590 gcc_assert (REG_P (ind)); 8591 emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1], 8592 operands[2])); 8593 DONE; 8594 }) 8595 8596 (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn" 8597 [(set (mem:BLK (scratch)) 8598 (unspec:BLK 8599 [(match_operand:SI 0 "register_operand" "r") 8600 (match_operand:V8HI 1 "s_register_operand" "w") 8601 (match_operand:V8HF 2 "s_register_operand" "w")] 8602 VSTRHQSSO_F))] 8603 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8604 "vstrh.16\t%q2, [%0, %q1, uxtw #1]" 8605 [(set_attr "length" "4")]) 8606 8607 ;; 8608 ;; [vstrhq_scatter_shifted_offset_p_f] 8609 ;; 8610 (define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf" 8611 [(match_operand:V8HI 0 "memory_operand" "=Us") 8612 (match_operand:V8HI 1 "s_register_operand" "w") 8613 (match_operand:V8HF 2 "s_register_operand" "w") 8614 (match_operand:V8BI 3 "vpr_register_operand" "Up") 8615 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)] 8616 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8617 { 8618 rtx ind = XEXP (operands[0], 0); 8619 gcc_assert (REG_P (ind)); 8620 emit_insn ( 8621 gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1], 8622 operands[2], 8623 operands[3])); 8624 DONE; 8625 }) 8626 8627 (define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn" 8628 [(set (mem:BLK (scratch)) 8629 (unspec:BLK 8630 [(match_operand:SI 0 "register_operand" "r") 8631 (match_operand:V8HI 1 "s_register_operand" "w") 8632 (match_operand:V8HF 2 "s_register_operand" "w") 8633 (match_operand:V8BI 3 "vpr_register_operand" "Up")] 8634 VSTRHQSSO_F))] 8635 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8636 "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]" 8637 [(set_attr "length" "8")]) 8638 8639 ;; 8640 ;; [vstrwq_scatter_base_f] 8641 ;; 8642 (define_insn "mve_vstrwq_scatter_base_fv4sf" 8643 [(set (mem:BLK (scratch)) 8644 (unspec:BLK 8645 [(match_operand:V4SI 0 "s_register_operand" "w") 8646 (match_operand:SI 1 "immediate_operand" "i") 8647 (match_operand:V4SF 2 "s_register_operand" "w")] 8648 VSTRWQSB_F)) 8649 ] 8650 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8651 { 8652 rtx ops[3]; 8653 ops[0] = operands[0]; 8654 ops[1] = operands[1]; 8655 ops[2] = operands[2]; 8656 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops); 8657 return ""; 8658 } 8659 [(set_attr "length" "4")]) 8660 8661 ;; 8662 ;; [vstrwq_scatter_base_p_f] 8663 ;; 8664 (define_insn "mve_vstrwq_scatter_base_p_fv4sf" 8665 [(set (mem:BLK (scratch)) 8666 (unspec:BLK 8667 [(match_operand:V4SI 0 "s_register_operand" "w") 8668 (match_operand:SI 1 "immediate_operand" "i") 8669 (match_operand:V4SF 2 "s_register_operand" "w") 8670 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8671 VSTRWQSB_F)) 8672 ] 8673 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8674 { 8675 rtx ops[3]; 8676 ops[0] = operands[0]; 8677 ops[1] = operands[1]; 8678 ops[2] = operands[2]; 8679 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops); 8680 return ""; 8681 } 8682 [(set_attr "length" "8")]) 8683 8684 ;; 8685 ;; [vstrwq_scatter_offset_f] 8686 ;; 8687 (define_expand "mve_vstrwq_scatter_offset_fv4sf" 8688 [(match_operand:V4SI 0 "mve_scatter_memory") 8689 (match_operand:V4SI 1 "s_register_operand") 8690 (match_operand:V4SF 2 "s_register_operand") 8691 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)] 8692 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8693 { 8694 rtx ind = XEXP (operands[0], 0); 8695 gcc_assert (REG_P (ind)); 8696 emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1], 8697 operands[2])); 8698 DONE; 8699 }) 8700 8701 (define_insn "mve_vstrwq_scatter_offset_fv4sf_insn" 8702 [(set (mem:BLK (scratch)) 8703 (unspec:BLK 8704 [(match_operand:SI 0 "register_operand" "r") 8705 (match_operand:V4SI 1 "s_register_operand" "w") 8706 (match_operand:V4SF 2 "s_register_operand" "w")] 8707 VSTRWQSO_F))] 8708 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8709 "vstrw.32\t%q2, [%0, %q1]" 8710 [(set_attr "length" "4")]) 8711 8712 ;; 8713 ;; [vstrwq_scatter_offset_p_f] 8714 ;; 8715 (define_expand "mve_vstrwq_scatter_offset_p_fv4sf" 8716 [(match_operand:V4SI 0 "mve_scatter_memory") 8717 (match_operand:V4SI 1 "s_register_operand") 8718 (match_operand:V4SF 2 "s_register_operand") 8719 (match_operand:V4BI 3 "vpr_register_operand") 8720 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)] 8721 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8722 { 8723 rtx ind = XEXP (operands[0], 0); 8724 gcc_assert (REG_P (ind)); 8725 emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1], 8726 operands[2], 8727 operands[3])); 8728 DONE; 8729 }) 8730 8731 (define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn" 8732 [(set (mem:BLK (scratch)) 8733 (unspec:BLK 8734 [(match_operand:SI 0 "register_operand" "r") 8735 (match_operand:V4SI 1 "s_register_operand" "w") 8736 (match_operand:V4SF 2 "s_register_operand" "w") 8737 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8738 VSTRWQSO_F))] 8739 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8740 "vpst\;vstrwt.32\t%q2, [%0, %q1]" 8741 [(set_attr "length" "8")]) 8742 8743 ;; 8744 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u] 8745 ;; 8746 (define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si" 8747 [(match_operand:V4SI 0 "mve_scatter_memory") 8748 (match_operand:V4SI 1 "s_register_operand") 8749 (match_operand:V4SI 2 "s_register_operand") 8750 (match_operand:V4BI 3 "vpr_register_operand") 8751 (unspec:V4SI [(const_int 0)] VSTRWSOQ)] 8752 "TARGET_HAVE_MVE" 8753 { 8754 rtx ind = XEXP (operands[0], 0); 8755 gcc_assert (REG_P (ind)); 8756 emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1], 8757 operands[2], 8758 operands[3])); 8759 DONE; 8760 }) 8761 8762 (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn" 8763 [(set (mem:BLK (scratch)) 8764 (unspec:BLK 8765 [(match_operand:SI 0 "register_operand" "r") 8766 (match_operand:V4SI 1 "s_register_operand" "w") 8767 (match_operand:V4SI 2 "s_register_operand" "w") 8768 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8769 VSTRWSOQ))] 8770 "TARGET_HAVE_MVE" 8771 "vpst\;vstrwt.32\t%q2, [%0, %q1]" 8772 [(set_attr "length" "8")]) 8773 8774 ;; 8775 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u] 8776 ;; 8777 (define_expand "mve_vstrwq_scatter_offset_<supf>v4si" 8778 [(match_operand:V4SI 0 "mve_scatter_memory") 8779 (match_operand:V4SI 1 "s_register_operand") 8780 (match_operand:V4SI 2 "s_register_operand") 8781 (unspec:V4SI [(const_int 0)] VSTRWSOQ)] 8782 "TARGET_HAVE_MVE" 8783 { 8784 rtx ind = XEXP (operands[0], 0); 8785 gcc_assert (REG_P (ind)); 8786 emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1], 8787 operands[2])); 8788 DONE; 8789 }) 8790 8791 (define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn" 8792 [(set (mem:BLK (scratch)) 8793 (unspec:BLK 8794 [(match_operand:SI 0 "register_operand" "r") 8795 (match_operand:V4SI 1 "s_register_operand" "w") 8796 (match_operand:V4SI 2 "s_register_operand" "w")] 8797 VSTRWSOQ))] 8798 "TARGET_HAVE_MVE" 8799 "vstrw.32\t%q2, [%0, %q1]" 8800 [(set_attr "length" "4")]) 8801 8802 ;; 8803 ;; [vstrwq_scatter_shifted_offset_f] 8804 ;; 8805 (define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf" 8806 [(match_operand:V4SI 0 "mve_scatter_memory") 8807 (match_operand:V4SI 1 "s_register_operand") 8808 (match_operand:V4SF 2 "s_register_operand") 8809 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)] 8810 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8811 { 8812 rtx ind = XEXP (operands[0], 0); 8813 gcc_assert (REG_P (ind)); 8814 emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1], 8815 operands[2])); 8816 DONE; 8817 }) 8818 8819 (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn" 8820 [(set (mem:BLK (scratch)) 8821 (unspec:BLK 8822 [(match_operand:SI 0 "register_operand" "r") 8823 (match_operand:V4SI 1 "s_register_operand" "w") 8824 (match_operand:V4SF 2 "s_register_operand" "w")] 8825 VSTRWQSSO_F))] 8826 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8827 "vstrw.32\t%q2, [%0, %q1, uxtw #2]" 8828 [(set_attr "length" "8")]) 8829 8830 ;; 8831 ;; [vstrwq_scatter_shifted_offset_p_f] 8832 ;; 8833 (define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf" 8834 [(match_operand:V4SI 0 "mve_scatter_memory") 8835 (match_operand:V4SI 1 "s_register_operand") 8836 (match_operand:V4SF 2 "s_register_operand") 8837 (match_operand:V4BI 3 "vpr_register_operand") 8838 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)] 8839 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8840 { 8841 rtx ind = XEXP (operands[0], 0); 8842 gcc_assert (REG_P (ind)); 8843 emit_insn ( 8844 gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1], 8845 operands[2], 8846 operands[3])); 8847 DONE; 8848 }) 8849 8850 (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn" 8851 [(set (mem:BLK (scratch)) 8852 (unspec:BLK 8853 [(match_operand:SI 0 "register_operand" "r") 8854 (match_operand:V4SI 1 "s_register_operand" "w") 8855 (match_operand:V4SF 2 "s_register_operand" "w") 8856 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8857 VSTRWQSSO_F))] 8858 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8859 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]" 8860 [(set_attr "length" "8")]) 8861 8862 ;; 8863 ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u] 8864 ;; 8865 (define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si" 8866 [(match_operand:V4SI 0 "mve_scatter_memory") 8867 (match_operand:V4SI 1 "s_register_operand") 8868 (match_operand:V4SI 2 "s_register_operand") 8869 (match_operand:V4BI 3 "vpr_register_operand") 8870 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)] 8871 "TARGET_HAVE_MVE" 8872 { 8873 rtx ind = XEXP (operands[0], 0); 8874 gcc_assert (REG_P (ind)); 8875 emit_insn ( 8876 gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1], 8877 operands[2], 8878 operands[3])); 8879 DONE; 8880 }) 8881 8882 (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn" 8883 [(set (mem:BLK (scratch)) 8884 (unspec:BLK 8885 [(match_operand:SI 0 "register_operand" "r") 8886 (match_operand:V4SI 1 "s_register_operand" "w") 8887 (match_operand:V4SI 2 "s_register_operand" "w") 8888 (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8889 VSTRWSSOQ))] 8890 "TARGET_HAVE_MVE" 8891 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]" 8892 [(set_attr "length" "8")]) 8893 8894 ;; 8895 ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u] 8896 ;; 8897 (define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si" 8898 [(match_operand:V4SI 0 "mve_scatter_memory") 8899 (match_operand:V4SI 1 "s_register_operand") 8900 (match_operand:V4SI 2 "s_register_operand") 8901 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)] 8902 "TARGET_HAVE_MVE" 8903 { 8904 rtx ind = XEXP (operands[0], 0); 8905 gcc_assert (REG_P (ind)); 8906 emit_insn ( 8907 gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1], 8908 operands[2])); 8909 DONE; 8910 }) 8911 8912 (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn" 8913 [(set (mem:BLK (scratch)) 8914 (unspec:BLK 8915 [(match_operand:SI 0 "register_operand" "r") 8916 (match_operand:V4SI 1 "s_register_operand" "w") 8917 (match_operand:V4SI 2 "s_register_operand" "w")] 8918 VSTRWSSOQ))] 8919 "TARGET_HAVE_MVE" 8920 "vstrw.32\t%q2, [%0, %q1, uxtw #2]" 8921 [(set_attr "length" "4")]) 8922 8923 ;; 8924 ;; [vaddq_s, vaddq_u]) 8925 ;; 8926 (define_insn "mve_vaddq<mode>" 8927 [ 8928 (set (match_operand:MVE_2 0 "s_register_operand" "=w") 8929 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 8930 (match_operand:MVE_2 2 "s_register_operand" "w"))) 8931 ] 8932 "TARGET_HAVE_MVE" 8933 "vadd.i%#<V_sz_elem>\t%q0, %q1, %q2" 8934 [(set_attr "type" "mve_move") 8935 ]) 8936 8937 ;; 8938 ;; [vaddq_f]) 8939 ;; 8940 (define_insn "mve_vaddq_f<mode>" 8941 [ 8942 (set (match_operand:MVE_0 0 "s_register_operand" "=w") 8943 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 8944 (match_operand:MVE_0 2 "s_register_operand" "w"))) 8945 ] 8946 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8947 "vadd.f%#<V_sz_elem>\t%q0, %q1, %q2" 8948 [(set_attr "type" "mve_move") 8949 ]) 8950 8951 ;; 8952 ;; [vidupq_n_u]) 8953 ;; 8954 (define_expand "mve_vidupq_n_u<mode>" 8955 [(match_operand:MVE_2 0 "s_register_operand") 8956 (match_operand:SI 1 "s_register_operand") 8957 (match_operand:SI 2 "mve_imm_selective_upto_8")] 8958 "TARGET_HAVE_MVE" 8959 { 8960 rtx temp = gen_reg_rtx (SImode); 8961 emit_move_insn (temp, operands[1]); 8962 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode); 8963 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1], 8964 operands[2], inc)); 8965 DONE; 8966 }) 8967 8968 ;; 8969 ;; [vidupq_u_insn]) 8970 ;; 8971 (define_insn "mve_vidupq_u<mode>_insn" 8972 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 8973 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1") 8974 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")] 8975 VIDUPQ)) 8976 (set (match_operand:SI 1 "s_register_operand" "=Te") 8977 (plus:SI (match_dup 2) 8978 (match_operand:SI 4 "immediate_operand" "i")))] 8979 "TARGET_HAVE_MVE" 8980 "vidup.u%#<V_sz_elem>\t%q0, %1, %3") 8981 8982 ;; 8983 ;; [vidupq_m_n_u]) 8984 ;; 8985 (define_expand "mve_vidupq_m_n_u<mode>" 8986 [(match_operand:MVE_2 0 "s_register_operand") 8987 (match_operand:MVE_2 1 "s_register_operand") 8988 (match_operand:SI 2 "s_register_operand") 8989 (match_operand:SI 3 "mve_imm_selective_upto_8") 8990 (match_operand:<MVE_VPRED> 4 "vpr_register_operand")] 8991 "TARGET_HAVE_MVE" 8992 { 8993 rtx temp = gen_reg_rtx (SImode); 8994 emit_move_insn (temp, operands[2]); 8995 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode); 8996 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp, 8997 operands[2], operands[3], 8998 operands[4], inc)); 8999 DONE; 9000 }) 9001 9002 ;; 9003 ;; [vidupq_m_wb_u_insn]) 9004 ;; 9005 (define_insn "mve_vidupq_m_wb_u<mode>_insn" 9006 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9007 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 9008 (match_operand:SI 3 "s_register_operand" "2") 9009 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg") 9010 (match_operand:<MVE_VPRED> 5 "vpr_register_operand" "Up")] 9011 VIDUPQ_M)) 9012 (set (match_operand:SI 2 "s_register_operand" "=Te") 9013 (plus:SI (match_dup 3) 9014 (match_operand:SI 6 "immediate_operand" "i")))] 9015 "TARGET_HAVE_MVE" 9016 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4" 9017 [(set_attr "length""8")]) 9018 9019 ;; 9020 ;; [vddupq_n_u]) 9021 ;; 9022 (define_expand "mve_vddupq_n_u<mode>" 9023 [(match_operand:MVE_2 0 "s_register_operand") 9024 (match_operand:SI 1 "s_register_operand") 9025 (match_operand:SI 2 "mve_imm_selective_upto_8")] 9026 "TARGET_HAVE_MVE" 9027 { 9028 rtx temp = gen_reg_rtx (SImode); 9029 emit_move_insn (temp, operands[1]); 9030 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode); 9031 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1], 9032 operands[2], inc)); 9033 DONE; 9034 }) 9035 9036 ;; 9037 ;; [vddupq_u_insn]) 9038 ;; 9039 (define_insn "mve_vddupq_u<mode>_insn" 9040 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9041 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1") 9042 (match_operand:SI 3 "immediate_operand" "i")] 9043 VDDUPQ)) 9044 (set (match_operand:SI 1 "s_register_operand" "=Te") 9045 (minus:SI (match_dup 2) 9046 (match_operand:SI 4 "immediate_operand" "i")))] 9047 "TARGET_HAVE_MVE" 9048 "vddup.u%#<V_sz_elem>\t%q0, %1, %3") 9049 9050 ;; 9051 ;; [vddupq_m_n_u]) 9052 ;; 9053 (define_expand "mve_vddupq_m_n_u<mode>" 9054 [(match_operand:MVE_2 0 "s_register_operand") 9055 (match_operand:MVE_2 1 "s_register_operand") 9056 (match_operand:SI 2 "s_register_operand") 9057 (match_operand:SI 3 "mve_imm_selective_upto_8") 9058 (match_operand:<MVE_VPRED> 4 "vpr_register_operand")] 9059 "TARGET_HAVE_MVE" 9060 { 9061 rtx temp = gen_reg_rtx (SImode); 9062 emit_move_insn (temp, operands[2]); 9063 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode); 9064 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp, 9065 operands[2], operands[3], 9066 operands[4], inc)); 9067 DONE; 9068 }) 9069 9070 ;; 9071 ;; [vddupq_m_wb_u_insn]) 9072 ;; 9073 (define_insn "mve_vddupq_m_wb_u<mode>_insn" 9074 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9075 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 9076 (match_operand:SI 3 "s_register_operand" "2") 9077 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg") 9078 (match_operand:<MVE_VPRED> 5 "vpr_register_operand" "Up")] 9079 VDDUPQ_M)) 9080 (set (match_operand:SI 2 "s_register_operand" "=Te") 9081 (minus:SI (match_dup 3) 9082 (match_operand:SI 6 "immediate_operand" "i")))] 9083 "TARGET_HAVE_MVE" 9084 "vpst\;vddupt.u%#<V_sz_elem>\t%q0, %2, %4" 9085 [(set_attr "length""8")]) 9086 9087 ;; 9088 ;; [vdwdupq_n_u]) 9089 ;; 9090 (define_expand "mve_vdwdupq_n_u<mode>" 9091 [(match_operand:MVE_2 0 "s_register_operand") 9092 (match_operand:SI 1 "s_register_operand") 9093 (match_operand:DI 2 "s_register_operand") 9094 (match_operand:SI 3 "mve_imm_selective_upto_8")] 9095 "TARGET_HAVE_MVE" 9096 { 9097 rtx ignore_wb = gen_reg_rtx (SImode); 9098 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb, 9099 operands[1], operands[2], 9100 operands[3])); 9101 DONE; 9102 }) 9103 9104 ;; 9105 ;; [vdwdupq_wb_u]) 9106 ;; 9107 (define_expand "mve_vdwdupq_wb_u<mode>" 9108 [(match_operand:SI 0 "s_register_operand") 9109 (match_operand:SI 1 "s_register_operand") 9110 (match_operand:DI 2 "s_register_operand") 9111 (match_operand:SI 3 "mve_imm_selective_upto_8") 9112 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 9113 "TARGET_HAVE_MVE" 9114 { 9115 rtx ignore_vec = gen_reg_rtx (<MODE>mode); 9116 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0], 9117 operands[1], operands[2], 9118 operands[3])); 9119 DONE; 9120 }) 9121 9122 ;; 9123 ;; [vdwdupq_wb_u_insn]) 9124 ;; 9125 (define_insn "mve_vdwdupq_wb_u<mode>_insn" 9126 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9127 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1") 9128 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4) 9129 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")] 9130 VDWDUPQ)) 9131 (set (match_operand:SI 1 "s_register_operand" "=Te") 9132 (unspec:SI [(match_dup 2) 9133 (subreg:SI (match_dup 3) 4) 9134 (match_dup 4)] 9135 VDWDUPQ))] 9136 "TARGET_HAVE_MVE" 9137 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4" 9138 ) 9139 9140 ;; 9141 ;; [vdwdupq_m_n_u]) 9142 ;; 9143 (define_expand "mve_vdwdupq_m_n_u<mode>" 9144 [(match_operand:MVE_2 0 "s_register_operand") 9145 (match_operand:MVE_2 1 "s_register_operand") 9146 (match_operand:SI 2 "s_register_operand") 9147 (match_operand:DI 3 "s_register_operand") 9148 (match_operand:SI 4 "mve_imm_selective_upto_8") 9149 (match_operand:<MVE_VPRED> 5 "vpr_register_operand")] 9150 "TARGET_HAVE_MVE" 9151 { 9152 rtx ignore_wb = gen_reg_rtx (SImode); 9153 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb, 9154 operands[1], operands[2], 9155 operands[3], operands[4], 9156 operands[5])); 9157 DONE; 9158 }) 9159 9160 ;; 9161 ;; [vdwdupq_m_wb_u]) 9162 ;; 9163 (define_expand "mve_vdwdupq_m_wb_u<mode>" 9164 [(match_operand:SI 0 "s_register_operand") 9165 (match_operand:MVE_2 1 "s_register_operand") 9166 (match_operand:SI 2 "s_register_operand") 9167 (match_operand:DI 3 "s_register_operand") 9168 (match_operand:SI 4 "mve_imm_selective_upto_8") 9169 (match_operand:<MVE_VPRED> 5 "vpr_register_operand")] 9170 "TARGET_HAVE_MVE" 9171 { 9172 rtx ignore_vec = gen_reg_rtx (<MODE>mode); 9173 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0], 9174 operands[1], operands[2], 9175 operands[3], operands[4], 9176 operands[5])); 9177 DONE; 9178 }) 9179 9180 ;; 9181 ;; [vdwdupq_m_wb_u_insn]) 9182 ;; 9183 (define_insn "mve_vdwdupq_m_wb_u<mode>_insn" 9184 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9185 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0") 9186 (match_operand:SI 3 "s_register_operand" "1") 9187 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4) 9188 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg") 9189 (match_operand:<MVE_VPRED> 6 "vpr_register_operand" "Up")] 9190 VDWDUPQ_M)) 9191 (set (match_operand:SI 1 "s_register_operand" "=Te") 9192 (unspec:SI [(match_dup 2) 9193 (match_dup 3) 9194 (subreg:SI (match_dup 4) 4) 9195 (match_dup 5) 9196 (match_dup 6)] 9197 VDWDUPQ_M)) 9198 ] 9199 "TARGET_HAVE_MVE" 9200 "vpst\;vdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5" 9201 [(set_attr "type" "mve_move") 9202 (set_attr "length""8")]) 9203 9204 ;; 9205 ;; [viwdupq_n_u]) 9206 ;; 9207 (define_expand "mve_viwdupq_n_u<mode>" 9208 [(match_operand:MVE_2 0 "s_register_operand") 9209 (match_operand:SI 1 "s_register_operand") 9210 (match_operand:DI 2 "s_register_operand") 9211 (match_operand:SI 3 "mve_imm_selective_upto_8")] 9212 "TARGET_HAVE_MVE" 9213 { 9214 rtx ignore_wb = gen_reg_rtx (SImode); 9215 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb, 9216 operands[1], operands[2], 9217 operands[3])); 9218 DONE; 9219 }) 9220 9221 ;; 9222 ;; [viwdupq_wb_u]) 9223 ;; 9224 (define_expand "mve_viwdupq_wb_u<mode>" 9225 [(match_operand:SI 0 "s_register_operand") 9226 (match_operand:SI 1 "s_register_operand") 9227 (match_operand:DI 2 "s_register_operand") 9228 (match_operand:SI 3 "mve_imm_selective_upto_8") 9229 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 9230 "TARGET_HAVE_MVE" 9231 { 9232 rtx ignore_vec = gen_reg_rtx (<MODE>mode); 9233 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0], 9234 operands[1], operands[2], 9235 operands[3])); 9236 DONE; 9237 }) 9238 9239 ;; 9240 ;; [viwdupq_wb_u_insn]) 9241 ;; 9242 (define_insn "mve_viwdupq_wb_u<mode>_insn" 9243 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9244 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1") 9245 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4) 9246 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")] 9247 VIWDUPQ)) 9248 (set (match_operand:SI 1 "s_register_operand" "=Te") 9249 (unspec:SI [(match_dup 2) 9250 (subreg:SI (match_dup 3) 4) 9251 (match_dup 4)] 9252 VIWDUPQ))] 9253 "TARGET_HAVE_MVE" 9254 "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4" 9255 ) 9256 9257 ;; 9258 ;; [viwdupq_m_n_u]) 9259 ;; 9260 (define_expand "mve_viwdupq_m_n_u<mode>" 9261 [(match_operand:MVE_2 0 "s_register_operand") 9262 (match_operand:MVE_2 1 "s_register_operand") 9263 (match_operand:SI 2 "s_register_operand") 9264 (match_operand:DI 3 "s_register_operand") 9265 (match_operand:SI 4 "mve_imm_selective_upto_8") 9266 (match_operand:<MVE_VPRED> 5 "vpr_register_operand")] 9267 "TARGET_HAVE_MVE" 9268 { 9269 rtx ignore_wb = gen_reg_rtx (SImode); 9270 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb, 9271 operands[1], operands[2], 9272 operands[3], operands[4], 9273 operands[5])); 9274 DONE; 9275 }) 9276 9277 ;; 9278 ;; [viwdupq_m_wb_u]) 9279 ;; 9280 (define_expand "mve_viwdupq_m_wb_u<mode>" 9281 [(match_operand:SI 0 "s_register_operand") 9282 (match_operand:MVE_2 1 "s_register_operand") 9283 (match_operand:SI 2 "s_register_operand") 9284 (match_operand:DI 3 "s_register_operand") 9285 (match_operand:SI 4 "mve_imm_selective_upto_8") 9286 (match_operand:<MVE_VPRED> 5 "vpr_register_operand")] 9287 "TARGET_HAVE_MVE" 9288 { 9289 rtx ignore_vec = gen_reg_rtx (<MODE>mode); 9290 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0], 9291 operands[1], operands[2], 9292 operands[3], operands[4], 9293 operands[5])); 9294 DONE; 9295 }) 9296 9297 ;; 9298 ;; [viwdupq_m_wb_u_insn]) 9299 ;; 9300 (define_insn "mve_viwdupq_m_wb_u<mode>_insn" 9301 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9302 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0") 9303 (match_operand:SI 3 "s_register_operand" "1") 9304 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4) 9305 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg") 9306 (match_operand:<MVE_VPRED> 6 "vpr_register_operand" "Up")] 9307 VIWDUPQ_M)) 9308 (set (match_operand:SI 1 "s_register_operand" "=Te") 9309 (unspec:SI [(match_dup 2) 9310 (match_dup 3) 9311 (subreg:SI (match_dup 4) 4) 9312 (match_dup 5) 9313 (match_dup 6)] 9314 VIWDUPQ_M)) 9315 ] 9316 "TARGET_HAVE_MVE" 9317 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5" 9318 [(set_attr "type" "mve_move") 9319 (set_attr "length""8")]) 9320 9321 ;; 9322 ;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u] 9323 ;; 9324 (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si" 9325 [(set (mem:BLK (scratch)) 9326 (unspec:BLK 9327 [(match_operand:V4SI 1 "s_register_operand" "0") 9328 (match_operand:SI 2 "mve_vldrd_immediate" "Ri") 9329 (match_operand:V4SI 3 "s_register_operand" "w")] 9330 VSTRWSBWBQ)) 9331 (set (match_operand:V4SI 0 "s_register_operand" "=w") 9332 (unspec:V4SI [(match_dup 1) (match_dup 2)] 9333 VSTRWSBWBQ)) 9334 ] 9335 "TARGET_HAVE_MVE" 9336 { 9337 rtx ops[3]; 9338 ops[0] = operands[1]; 9339 ops[1] = operands[2]; 9340 ops[2] = operands[3]; 9341 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops); 9342 return ""; 9343 } 9344 [(set_attr "length" "4")]) 9345 9346 ;; 9347 ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u] 9348 ;; 9349 (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si" 9350 [(set (mem:BLK (scratch)) 9351 (unspec:BLK 9352 [(match_operand:V4SI 1 "s_register_operand" "0") 9353 (match_operand:SI 2 "mve_vldrd_immediate" "Ri") 9354 (match_operand:V4SI 3 "s_register_operand" "w") 9355 (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9356 VSTRWSBWBQ)) 9357 (set (match_operand:V4SI 0 "s_register_operand" "=w") 9358 (unspec:V4SI [(match_dup 1) (match_dup 2)] 9359 VSTRWSBWBQ)) 9360 ] 9361 "TARGET_HAVE_MVE" 9362 { 9363 rtx ops[3]; 9364 ops[0] = operands[1]; 9365 ops[1] = operands[2]; 9366 ops[2] = operands[3]; 9367 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops); 9368 return ""; 9369 } 9370 [(set_attr "length" "8")]) 9371 9372 ;; 9373 ;; [vstrwq_scatter_base_wb_f] 9374 ;; 9375 (define_insn "mve_vstrwq_scatter_base_wb_fv4sf" 9376 [(set (mem:BLK (scratch)) 9377 (unspec:BLK 9378 [(match_operand:V4SI 1 "s_register_operand" "0") 9379 (match_operand:SI 2 "mve_vldrd_immediate" "Ri") 9380 (match_operand:V4SF 3 "s_register_operand" "w")] 9381 VSTRWQSBWB_F)) 9382 (set (match_operand:V4SI 0 "s_register_operand" "=w") 9383 (unspec:V4SI [(match_dup 1) (match_dup 2)] 9384 VSTRWQSBWB_F)) 9385 ] 9386 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9387 { 9388 rtx ops[3]; 9389 ops[0] = operands[1]; 9390 ops[1] = operands[2]; 9391 ops[2] = operands[3]; 9392 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops); 9393 return ""; 9394 } 9395 [(set_attr "length" "4")]) 9396 9397 ;; 9398 ;; [vstrwq_scatter_base_wb_p_f] 9399 ;; 9400 (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf" 9401 [(set (mem:BLK (scratch)) 9402 (unspec:BLK 9403 [(match_operand:V4SI 1 "s_register_operand" "0") 9404 (match_operand:SI 2 "mve_vstrw_immediate" "Rl") 9405 (match_operand:V4SF 3 "s_register_operand" "w") 9406 (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9407 VSTRWQSBWB_F)) 9408 (set (match_operand:V4SI 0 "s_register_operand" "=w") 9409 (unspec:V4SI [(match_dup 1) (match_dup 2)] 9410 VSTRWQSBWB_F)) 9411 ] 9412 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9413 { 9414 rtx ops[3]; 9415 ops[0] = operands[1]; 9416 ops[1] = operands[2]; 9417 ops[2] = operands[3]; 9418 output_asm_insn ("vpst\;vstrwt.u32\t%q2, [%q0, %1]!",ops); 9419 return ""; 9420 } 9421 [(set_attr "length" "8")]) 9422 9423 ;; 9424 ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u] 9425 ;; 9426 (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di" 9427 [(set (mem:BLK (scratch)) 9428 (unspec:BLK 9429 [(match_operand:V2DI 1 "s_register_operand" "0") 9430 (match_operand:SI 2 "mve_vldrd_immediate" "Ri") 9431 (match_operand:V2DI 3 "s_register_operand" "w")] 9432 VSTRDSBWBQ)) 9433 (set (match_operand:V2DI 0 "s_register_operand" "=&w") 9434 (unspec:V2DI [(match_dup 1) (match_dup 2)] 9435 VSTRDSBWBQ)) 9436 ] 9437 "TARGET_HAVE_MVE" 9438 { 9439 rtx ops[3]; 9440 ops[0] = operands[1]; 9441 ops[1] = operands[2]; 9442 ops[2] = operands[3]; 9443 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops); 9444 return ""; 9445 } 9446 [(set_attr "length" "4")]) 9447 9448 ;; 9449 ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u] 9450 ;; 9451 (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di" 9452 [(set (mem:BLK (scratch)) 9453 (unspec:BLK 9454 [(match_operand:V2DI 1 "s_register_operand" "0") 9455 (match_operand:SI 2 "mve_vldrd_immediate" "Ri") 9456 (match_operand:V2DI 3 "s_register_operand" "w") 9457 (match_operand:HI 4 "vpr_register_operand" "Up")] 9458 VSTRDSBWBQ)) 9459 (set (match_operand:V2DI 0 "s_register_operand" "=w") 9460 (unspec:V2DI [(match_dup 1) (match_dup 2)] 9461 VSTRDSBWBQ)) 9462 ] 9463 "TARGET_HAVE_MVE" 9464 { 9465 rtx ops[3]; 9466 ops[0] = operands[1]; 9467 ops[1] = operands[2]; 9468 ops[2] = operands[3]; 9469 output_asm_insn ("vpst\;vstrdt.u64\t%q2, [%q0, %1]!",ops); 9470 return ""; 9471 } 9472 [(set_attr "length" "8")]) 9473 9474 (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si" 9475 [(match_operand:V4SI 0 "s_register_operand") 9476 (match_operand:V4SI 1 "s_register_operand") 9477 (match_operand:SI 2 "mve_vldrd_immediate") 9478 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)] 9479 "TARGET_HAVE_MVE" 9480 { 9481 rtx ignore_result = gen_reg_rtx (V4SImode); 9482 emit_insn ( 9483 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0], 9484 operands[1], operands[2])); 9485 DONE; 9486 }) 9487 9488 (define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si" 9489 [(match_operand:V4SI 0 "s_register_operand") 9490 (match_operand:V4SI 1 "s_register_operand") 9491 (match_operand:SI 2 "mve_vldrd_immediate") 9492 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)] 9493 "TARGET_HAVE_MVE" 9494 { 9495 rtx ignore_wb = gen_reg_rtx (V4SImode); 9496 emit_insn ( 9497 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb, 9498 operands[1], operands[2])); 9499 DONE; 9500 }) 9501 9502 ;; 9503 ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u] 9504 ;; 9505 (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn" 9506 [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 9507 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1") 9508 (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9509 (mem:BLK (scratch))] 9510 VLDRWGBWBQ)) 9511 (set (match_operand:V4SI 1 "s_register_operand" "=&w") 9512 (unspec:V4SI [(match_dup 2) (match_dup 3)] 9513 VLDRWGBWBQ)) 9514 ] 9515 "TARGET_HAVE_MVE" 9516 { 9517 rtx ops[3]; 9518 ops[0] = operands[0]; 9519 ops[1] = operands[2]; 9520 ops[2] = operands[3]; 9521 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops); 9522 return ""; 9523 } 9524 [(set_attr "length" "4")]) 9525 9526 (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si" 9527 [(match_operand:V4SI 0 "s_register_operand") 9528 (match_operand:V4SI 1 "s_register_operand") 9529 (match_operand:SI 2 "mve_vldrd_immediate") 9530 (match_operand:V4BI 3 "vpr_register_operand") 9531 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)] 9532 "TARGET_HAVE_MVE" 9533 { 9534 rtx ignore_result = gen_reg_rtx (V4SImode); 9535 emit_insn ( 9536 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0], 9537 operands[1], operands[2], 9538 operands[3])); 9539 DONE; 9540 }) 9541 (define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si" 9542 [(match_operand:V4SI 0 "s_register_operand") 9543 (match_operand:V4SI 1 "s_register_operand") 9544 (match_operand:SI 2 "mve_vldrd_immediate") 9545 (match_operand:V4BI 3 "vpr_register_operand") 9546 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)] 9547 "TARGET_HAVE_MVE" 9548 { 9549 rtx ignore_wb = gen_reg_rtx (V4SImode); 9550 emit_insn ( 9551 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb, 9552 operands[1], operands[2], 9553 operands[3])); 9554 DONE; 9555 }) 9556 9557 ;; 9558 ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u] 9559 ;; 9560 (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn" 9561 [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 9562 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1") 9563 (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9564 (match_operand:V4BI 4 "vpr_register_operand" "Up") 9565 (mem:BLK (scratch))] 9566 VLDRWGBWBQ)) 9567 (set (match_operand:V4SI 1 "s_register_operand" "=&w") 9568 (unspec:V4SI [(match_dup 2) (match_dup 3)] 9569 VLDRWGBWBQ)) 9570 ] 9571 "TARGET_HAVE_MVE" 9572 { 9573 rtx ops[3]; 9574 ops[0] = operands[0]; 9575 ops[1] = operands[2]; 9576 ops[2] = operands[3]; 9577 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops); 9578 return ""; 9579 } 9580 [(set_attr "length" "8")]) 9581 9582 (define_expand "mve_vldrwq_gather_base_wb_fv4sf" 9583 [(match_operand:V4SI 0 "s_register_operand") 9584 (match_operand:V4SI 1 "s_register_operand") 9585 (match_operand:SI 2 "mve_vldrd_immediate") 9586 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)] 9587 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9588 { 9589 rtx ignore_result = gen_reg_rtx (V4SFmode); 9590 emit_insn ( 9591 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0], 9592 operands[1], operands[2])); 9593 DONE; 9594 }) 9595 9596 (define_expand "mve_vldrwq_gather_base_nowb_fv4sf" 9597 [(match_operand:V4SF 0 "s_register_operand") 9598 (match_operand:V4SI 1 "s_register_operand") 9599 (match_operand:SI 2 "mve_vldrd_immediate") 9600 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)] 9601 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9602 { 9603 rtx ignore_wb = gen_reg_rtx (V4SImode); 9604 emit_insn ( 9605 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb, 9606 operands[1], operands[2])); 9607 DONE; 9608 }) 9609 9610 ;; 9611 ;; [vldrwq_gather_base_wb_f] 9612 ;; 9613 (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn" 9614 [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 9615 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1") 9616 (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9617 (mem:BLK (scratch))] 9618 VLDRWQGBWB_F)) 9619 (set (match_operand:V4SI 1 "s_register_operand" "=&w") 9620 (unspec:V4SI [(match_dup 2) (match_dup 3)] 9621 VLDRWQGBWB_F)) 9622 ] 9623 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9624 { 9625 rtx ops[3]; 9626 ops[0] = operands[0]; 9627 ops[1] = operands[2]; 9628 ops[2] = operands[3]; 9629 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops); 9630 return ""; 9631 } 9632 [(set_attr "length" "4")]) 9633 9634 (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf" 9635 [(match_operand:V4SI 0 "s_register_operand") 9636 (match_operand:V4SI 1 "s_register_operand") 9637 (match_operand:SI 2 "mve_vldrd_immediate") 9638 (match_operand:V4BI 3 "vpr_register_operand") 9639 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)] 9640 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9641 { 9642 rtx ignore_result = gen_reg_rtx (V4SFmode); 9643 emit_insn ( 9644 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0], 9645 operands[1], operands[2], 9646 operands[3])); 9647 DONE; 9648 }) 9649 9650 (define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf" 9651 [(match_operand:V4SF 0 "s_register_operand") 9652 (match_operand:V4SI 1 "s_register_operand") 9653 (match_operand:SI 2 "mve_vldrd_immediate") 9654 (match_operand:V4BI 3 "vpr_register_operand") 9655 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)] 9656 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9657 { 9658 rtx ignore_wb = gen_reg_rtx (V4SImode); 9659 emit_insn ( 9660 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb, 9661 operands[1], operands[2], 9662 operands[3])); 9663 DONE; 9664 }) 9665 9666 ;; 9667 ;; [vldrwq_gather_base_wb_z_f] 9668 ;; 9669 (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn" 9670 [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 9671 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1") 9672 (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9673 (match_operand:V4BI 4 "vpr_register_operand" "Up") 9674 (mem:BLK (scratch))] 9675 VLDRWQGBWB_F)) 9676 (set (match_operand:V4SI 1 "s_register_operand" "=&w") 9677 (unspec:V4SI [(match_dup 2) (match_dup 3)] 9678 VLDRWQGBWB_F)) 9679 ] 9680 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9681 { 9682 rtx ops[3]; 9683 ops[0] = operands[0]; 9684 ops[1] = operands[2]; 9685 ops[2] = operands[3]; 9686 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops); 9687 return ""; 9688 } 9689 [(set_attr "length" "8")]) 9690 9691 (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di" 9692 [(match_operand:V2DI 0 "s_register_operand") 9693 (match_operand:V2DI 1 "s_register_operand") 9694 (match_operand:SI 2 "mve_vldrd_immediate") 9695 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)] 9696 "TARGET_HAVE_MVE" 9697 { 9698 rtx ignore_result = gen_reg_rtx (V2DImode); 9699 emit_insn ( 9700 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0], 9701 operands[1], operands[2])); 9702 DONE; 9703 }) 9704 9705 (define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di" 9706 [(match_operand:V2DI 0 "s_register_operand") 9707 (match_operand:V2DI 1 "s_register_operand") 9708 (match_operand:SI 2 "mve_vldrd_immediate") 9709 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)] 9710 "TARGET_HAVE_MVE" 9711 { 9712 rtx ignore_wb = gen_reg_rtx (V2DImode); 9713 emit_insn ( 9714 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb, 9715 operands[1], operands[2])); 9716 DONE; 9717 }) 9718 9719 9720 ;; 9721 ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u] 9722 ;; 9723 (define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn" 9724 [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 9725 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1") 9726 (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9727 (mem:BLK (scratch))] 9728 VLDRDGBWBQ)) 9729 (set (match_operand:V2DI 1 "s_register_operand" "=&w") 9730 (unspec:V2DI [(match_dup 2) (match_dup 3)] 9731 VLDRDGBWBQ)) 9732 ] 9733 "TARGET_HAVE_MVE" 9734 { 9735 rtx ops[3]; 9736 ops[0] = operands[0]; 9737 ops[1] = operands[2]; 9738 ops[2] = operands[3]; 9739 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops); 9740 return ""; 9741 } 9742 [(set_attr "length" "4")]) 9743 9744 (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di" 9745 [(match_operand:V2DI 0 "s_register_operand") 9746 (match_operand:V2DI 1 "s_register_operand") 9747 (match_operand:SI 2 "mve_vldrd_immediate") 9748 (match_operand:HI 3 "vpr_register_operand") 9749 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)] 9750 "TARGET_HAVE_MVE" 9751 { 9752 rtx ignore_result = gen_reg_rtx (V2DImode); 9753 emit_insn ( 9754 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0], 9755 operands[1], operands[2], 9756 operands[3])); 9757 DONE; 9758 }) 9759 9760 (define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di" 9761 [(match_operand:V2DI 0 "s_register_operand") 9762 (match_operand:V2DI 1 "s_register_operand") 9763 (match_operand:SI 2 "mve_vldrd_immediate") 9764 (match_operand:HI 3 "vpr_register_operand") 9765 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)] 9766 "TARGET_HAVE_MVE" 9767 { 9768 rtx ignore_wb = gen_reg_rtx (V2DImode); 9769 emit_insn ( 9770 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb, 9771 operands[1], operands[2], 9772 operands[3])); 9773 DONE; 9774 }) 9775 9776 (define_insn "get_fpscr_nzcvqc" 9777 [(set (match_operand:SI 0 "register_operand" "=r") 9778 (unspec_volatile:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))] 9779 "TARGET_HAVE_MVE" 9780 "vmrs\\t%0, FPSCR_nzcvqc" 9781 [(set_attr "type" "mve_move")]) 9782 9783 (define_insn "set_fpscr_nzcvqc" 9784 [(set (reg:SI VFPCC_REGNUM) 9785 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")] 9786 VUNSPEC_SET_FPSCR_NZCVQC))] 9787 "TARGET_HAVE_MVE" 9788 "vmsr\\tFPSCR_nzcvqc, %0" 9789 [(set_attr "type" "mve_move")]) 9790 9791 ;; 9792 ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u] 9793 ;; 9794 (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn" 9795 [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 9796 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1") 9797 (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9798 (match_operand:HI 4 "vpr_register_operand" "Up") 9799 (mem:BLK (scratch))] 9800 VLDRDGBWBQ)) 9801 (set (match_operand:V2DI 1 "s_register_operand" "=&w") 9802 (unspec:V2DI [(match_dup 2) (match_dup 3)] 9803 VLDRDGBWBQ)) 9804 ] 9805 "TARGET_HAVE_MVE" 9806 { 9807 rtx ops[3]; 9808 ops[0] = operands[0]; 9809 ops[1] = operands[2]; 9810 ops[2] = operands[3]; 9811 output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops); 9812 return ""; 9813 } 9814 [(set_attr "length" "8")]) 9815 ;; 9816 ;; [vadciq_m_s, vadciq_m_u]) 9817 ;; 9818 (define_insn "mve_vadciq_m_<supf>v4si" 9819 [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9820 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0") 9821 (match_operand:V4SI 2 "s_register_operand" "w") 9822 (match_operand:V4SI 3 "s_register_operand" "w") 9823 (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9824 VADCIQ_M)) 9825 (set (reg:SI VFPCC_REGNUM) 9826 (unspec:SI [(const_int 0)] 9827 VADCIQ_M)) 9828 ] 9829 "TARGET_HAVE_MVE" 9830 "vpst\;vadcit.i32\t%q0, %q2, %q3" 9831 [(set_attr "type" "mve_move") 9832 (set_attr "length" "8")]) 9833 9834 ;; 9835 ;; [vadciq_u, vadciq_s]) 9836 ;; 9837 (define_insn "mve_vadciq_<supf>v4si" 9838 [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9839 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9840 (match_operand:V4SI 2 "s_register_operand" "w")] 9841 VADCIQ)) 9842 (set (reg:SI VFPCC_REGNUM) 9843 (unspec:SI [(const_int 0)] 9844 VADCIQ)) 9845 ] 9846 "TARGET_HAVE_MVE" 9847 "vadci.i32\t%q0, %q1, %q2" 9848 [(set_attr "type" "mve_move") 9849 (set_attr "length" "4")]) 9850 9851 ;; 9852 ;; [vadcq_m_s, vadcq_m_u]) 9853 ;; 9854 (define_insn "mve_vadcq_m_<supf>v4si" 9855 [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9856 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0") 9857 (match_operand:V4SI 2 "s_register_operand" "w") 9858 (match_operand:V4SI 3 "s_register_operand" "w") 9859 (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9860 VADCQ_M)) 9861 (set (reg:SI VFPCC_REGNUM) 9862 (unspec:SI [(reg:SI VFPCC_REGNUM)] 9863 VADCQ_M)) 9864 ] 9865 "TARGET_HAVE_MVE" 9866 "vpst\;vadct.i32\t%q0, %q2, %q3" 9867 [(set_attr "type" "mve_move") 9868 (set_attr "length" "8")]) 9869 9870 ;; 9871 ;; [vadcq_u, vadcq_s]) 9872 ;; 9873 (define_insn "mve_vadcq_<supf>v4si" 9874 [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9875 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9876 (match_operand:V4SI 2 "s_register_operand" "w")] 9877 VADCQ)) 9878 (set (reg:SI VFPCC_REGNUM) 9879 (unspec:SI [(reg:SI VFPCC_REGNUM)] 9880 VADCQ)) 9881 ] 9882 "TARGET_HAVE_MVE" 9883 "vadc.i32\t%q0, %q1, %q2" 9884 [(set_attr "type" "mve_move") 9885 (set_attr "length" "4") 9886 (set_attr "conds" "set")]) 9887 9888 ;; 9889 ;; [vsbciq_m_u, vsbciq_m_s]) 9890 ;; 9891 (define_insn "mve_vsbciq_m_<supf>v4si" 9892 [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9893 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9894 (match_operand:V4SI 2 "s_register_operand" "w") 9895 (match_operand:V4SI 3 "s_register_operand" "w") 9896 (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9897 VSBCIQ_M)) 9898 (set (reg:SI VFPCC_REGNUM) 9899 (unspec:SI [(const_int 0)] 9900 VSBCIQ_M)) 9901 ] 9902 "TARGET_HAVE_MVE" 9903 "vpst\;vsbcit.i32\t%q0, %q2, %q3" 9904 [(set_attr "type" "mve_move") 9905 (set_attr "length" "8")]) 9906 9907 ;; 9908 ;; [vsbciq_s, vsbciq_u]) 9909 ;; 9910 (define_insn "mve_vsbciq_<supf>v4si" 9911 [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9912 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9913 (match_operand:V4SI 2 "s_register_operand" "w")] 9914 VSBCIQ)) 9915 (set (reg:SI VFPCC_REGNUM) 9916 (unspec:SI [(const_int 0)] 9917 VSBCIQ)) 9918 ] 9919 "TARGET_HAVE_MVE" 9920 "vsbci.i32\t%q0, %q1, %q2" 9921 [(set_attr "type" "mve_move") 9922 (set_attr "length" "4")]) 9923 9924 ;; 9925 ;; [vsbcq_m_u, vsbcq_m_s]) 9926 ;; 9927 (define_insn "mve_vsbcq_m_<supf>v4si" 9928 [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9929 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9930 (match_operand:V4SI 2 "s_register_operand" "w") 9931 (match_operand:V4SI 3 "s_register_operand" "w") 9932 (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9933 VSBCQ_M)) 9934 (set (reg:SI VFPCC_REGNUM) 9935 (unspec:SI [(reg:SI VFPCC_REGNUM)] 9936 VSBCQ_M)) 9937 ] 9938 "TARGET_HAVE_MVE" 9939 "vpst\;vsbct.i32\t%q0, %q2, %q3" 9940 [(set_attr "type" "mve_move") 9941 (set_attr "length" "8")]) 9942 9943 ;; 9944 ;; [vsbcq_s, vsbcq_u]) 9945 ;; 9946 (define_insn "mve_vsbcq_<supf>v4si" 9947 [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9948 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9949 (match_operand:V4SI 2 "s_register_operand" "w")] 9950 VSBCQ)) 9951 (set (reg:SI VFPCC_REGNUM) 9952 (unspec:SI [(reg:SI VFPCC_REGNUM)] 9953 VSBCQ)) 9954 ] 9955 "TARGET_HAVE_MVE" 9956 "vsbc.i32\t%q0, %q1, %q2" 9957 [(set_attr "type" "mve_move") 9958 (set_attr "length" "4")]) 9959 9960 ;; 9961 ;; [vst2q]) 9962 ;; 9963 (define_insn "mve_vst2q<mode>" 9964 [(set (match_operand:OI 0 "mve_struct_operand" "=Ug") 9965 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w") 9966 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 9967 VST2Q)) 9968 ] 9969 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 9970 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 9971 { 9972 rtx ops[4]; 9973 int regno = REGNO (operands[1]); 9974 ops[0] = gen_rtx_REG (TImode, regno); 9975 ops[1] = gen_rtx_REG (TImode, regno + 4); 9976 rtx reg = operands[0]; 9977 while (reg && !REG_P (reg)) 9978 reg = XEXP (reg, 0); 9979 gcc_assert (REG_P (reg)); 9980 ops[2] = reg; 9981 ops[3] = operands[0]; 9982 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t" 9983 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops); 9984 return ""; 9985 } 9986 [(set_attr "length" "8")]) 9987 9988 ;; 9989 ;; [vld2q]) 9990 ;; 9991 (define_insn "mve_vld2q<mode>" 9992 [(set (match_operand:OI 0 "s_register_operand" "=w") 9993 (unspec:OI [(match_operand:OI 1 "mve_struct_operand" "Ug") 9994 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 9995 VLD2Q)) 9996 ] 9997 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 9998 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 9999 { 10000 rtx ops[4]; 10001 int regno = REGNO (operands[0]); 10002 ops[0] = gen_rtx_REG (TImode, regno); 10003 ops[1] = gen_rtx_REG (TImode, regno + 4); 10004 rtx reg = operands[1]; 10005 while (reg && !REG_P (reg)) 10006 reg = XEXP (reg, 0); 10007 gcc_assert (REG_P (reg)); 10008 ops[2] = reg; 10009 ops[3] = operands[1]; 10010 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t" 10011 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops); 10012 return ""; 10013 } 10014 [(set_attr "length" "8")]) 10015 10016 ;; 10017 ;; [vld4q]) 10018 ;; 10019 (define_insn "mve_vld4q<mode>" 10020 [(set (match_operand:XI 0 "s_register_operand" "=w") 10021 (unspec:XI [(match_operand:XI 1 "mve_struct_operand" "Ug") 10022 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 10023 VLD4Q)) 10024 ] 10025 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10026 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 10027 { 10028 rtx ops[6]; 10029 int regno = REGNO (operands[0]); 10030 ops[0] = gen_rtx_REG (TImode, regno); 10031 ops[1] = gen_rtx_REG (TImode, regno+4); 10032 ops[2] = gen_rtx_REG (TImode, regno+8); 10033 ops[3] = gen_rtx_REG (TImode, regno + 12); 10034 rtx reg = operands[1]; 10035 while (reg && !REG_P (reg)) 10036 reg = XEXP (reg, 0); 10037 gcc_assert (REG_P (reg)); 10038 ops[4] = reg; 10039 ops[5] = operands[1]; 10040 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 10041 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 10042 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 10043 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops); 10044 return ""; 10045 } 10046 [(set_attr "length" "16")]) 10047 ;; 10048 ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f]) 10049 ;; 10050 (define_insn "mve_vec_extract<mode><V_elem_l>" 10051 [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r") 10052 (vec_select:<V_elem> 10053 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w") 10054 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))] 10055 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10056 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 10057 { 10058 if (BYTES_BIG_ENDIAN) 10059 { 10060 int elt = INTVAL (operands[2]); 10061 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt; 10062 operands[2] = GEN_INT (elt); 10063 } 10064 return "vmov.<V_extr_elem>\t%0, %q1[%c2]"; 10065 } 10066 [(set_attr "type" "mve_move")]) 10067 10068 (define_insn "mve_vec_extractv2didi" 10069 [(set (match_operand:DI 0 "nonimmediate_operand" "=r") 10070 (vec_select:DI 10071 (match_operand:V2DI 1 "s_register_operand" "w") 10072 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))] 10073 "TARGET_HAVE_MVE" 10074 { 10075 int elt = INTVAL (operands[2]); 10076 if (BYTES_BIG_ENDIAN) 10077 elt = 1 - elt; 10078 10079 if (elt == 0) 10080 return "vmov\t%Q0, %R0, %e1"; 10081 else 10082 return "vmov\t%Q0, %R0, %f1"; 10083 } 10084 [(set_attr "type" "mve_move")]) 10085 10086 (define_insn "*mve_vec_extract_sext_internal<mode>" 10087 [(set (match_operand:SI 0 "s_register_operand" "=r") 10088 (sign_extend:SI 10089 (vec_select:<V_elem> 10090 (match_operand:MVE_2 1 "s_register_operand" "w") 10091 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))] 10092 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10093 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 10094 { 10095 if (BYTES_BIG_ENDIAN) 10096 { 10097 int elt = INTVAL (operands[2]); 10098 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt; 10099 operands[2] = GEN_INT (elt); 10100 } 10101 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]"; 10102 } 10103 [(set_attr "type" "mve_move")]) 10104 10105 (define_insn "*mve_vec_extract_zext_internal<mode>" 10106 [(set (match_operand:SI 0 "s_register_operand" "=r") 10107 (zero_extend:SI 10108 (vec_select:<V_elem> 10109 (match_operand:MVE_2 1 "s_register_operand" "w") 10110 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))] 10111 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10112 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 10113 { 10114 if (BYTES_BIG_ENDIAN) 10115 { 10116 int elt = INTVAL (operands[2]); 10117 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt; 10118 operands[2] = GEN_INT (elt); 10119 } 10120 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]"; 10121 } 10122 [(set_attr "type" "mve_move")]) 10123 10124 ;; 10125 ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f]) 10126 ;; 10127 (define_insn "mve_vec_set<mode>_internal" 10128 [(set (match_operand:VQ2 0 "s_register_operand" "=w") 10129 (vec_merge:VQ2 10130 (vec_duplicate:VQ2 10131 (match_operand:<V_elem> 1 "nonimmediate_operand" "r")) 10132 (match_operand:VQ2 3 "s_register_operand" "0") 10133 (match_operand:SI 2 "immediate_operand" "i")))] 10134 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10135 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 10136 { 10137 int elt = ffs ((int) INTVAL (operands[2])) - 1; 10138 if (BYTES_BIG_ENDIAN) 10139 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt; 10140 operands[2] = GEN_INT (elt); 10141 10142 return "vmov.<V_sz_elem>\t%q0[%c2], %1"; 10143 } 10144 [(set_attr "type" "mve_move")]) 10145 10146 (define_insn "mve_vec_setv2di_internal" 10147 [(set (match_operand:V2DI 0 "s_register_operand" "=w") 10148 (vec_merge:V2DI 10149 (vec_duplicate:V2DI 10150 (match_operand:DI 1 "nonimmediate_operand" "r")) 10151 (match_operand:V2DI 3 "s_register_operand" "0") 10152 (match_operand:SI 2 "immediate_operand" "i")))] 10153 "TARGET_HAVE_MVE" 10154 { 10155 int elt = ffs ((int) INTVAL (operands[2])) - 1; 10156 if (BYTES_BIG_ENDIAN) 10157 elt = 1 - elt; 10158 10159 if (elt == 0) 10160 return "vmov\t%e0, %Q1, %R1"; 10161 else 10162 return "vmov\t%f0, %Q1, %R1"; 10163 } 10164 [(set_attr "type" "mve_move")]) 10165 10166 ;; 10167 ;; [uqrshll_di] 10168 ;; 10169 (define_insn "mve_uqrshll_sat<supf>_di" 10170 [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10171 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0") 10172 (match_operand:SI 2 "register_operand" "r")] 10173 UQRSHLLQ))] 10174 "TARGET_HAVE_MVE" 10175 "uqrshll%?\\t%Q1, %R1, #<supf>, %2" 10176 [(set_attr "predicable" "yes")]) 10177 10178 ;; 10179 ;; [sqrshrl_di] 10180 ;; 10181 (define_insn "mve_sqrshrl_sat<supf>_di" 10182 [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10183 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0") 10184 (match_operand:SI 2 "register_operand" "r")] 10185 SQRSHRLQ))] 10186 "TARGET_HAVE_MVE" 10187 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2" 10188 [(set_attr "predicable" "yes")]) 10189 10190 ;; 10191 ;; [uqrshl_si] 10192 ;; 10193 (define_insn "mve_uqrshl_si" 10194 [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10195 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0") 10196 (match_operand:SI 2 "register_operand" "r")] 10197 UQRSHL))] 10198 "TARGET_HAVE_MVE" 10199 "uqrshl%?\\t%1, %2" 10200 [(set_attr "predicable" "yes")]) 10201 10202 ;; 10203 ;; [sqrshr_si] 10204 ;; 10205 (define_insn "mve_sqrshr_si" 10206 [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10207 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0") 10208 (match_operand:SI 2 "register_operand" "r")] 10209 SQRSHR))] 10210 "TARGET_HAVE_MVE" 10211 "sqrshr%?\\t%1, %2" 10212 [(set_attr "predicable" "yes")]) 10213 10214 ;; 10215 ;; [uqshll_di] 10216 ;; 10217 (define_insn "mve_uqshll_di" 10218 [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10219 (us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0") 10220 (match_operand:SI 2 "immediate_operand" "Pg")))] 10221 "TARGET_HAVE_MVE" 10222 "uqshll%?\\t%Q1, %R1, %2" 10223 [(set_attr "predicable" "yes")]) 10224 10225 ;; 10226 ;; [urshrl_di] 10227 ;; 10228 (define_insn "mve_urshrl_di" 10229 [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10230 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0") 10231 (match_operand:SI 2 "immediate_operand" "Pg")] 10232 URSHRL))] 10233 "TARGET_HAVE_MVE" 10234 "urshrl%?\\t%Q1, %R1, %2" 10235 [(set_attr "predicable" "yes")]) 10236 10237 ;; 10238 ;; [uqshl_si] 10239 ;; 10240 (define_insn "mve_uqshl_si" 10241 [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10242 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0") 10243 (match_operand:SI 2 "immediate_operand" "Pg")))] 10244 "TARGET_HAVE_MVE" 10245 "uqshl%?\\t%1, %2" 10246 [(set_attr "predicable" "yes")]) 10247 10248 ;; 10249 ;; [urshr_si] 10250 ;; 10251 (define_insn "mve_urshr_si" 10252 [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10253 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0") 10254 (match_operand:SI 2 "immediate_operand" "Pg")] 10255 URSHR))] 10256 "TARGET_HAVE_MVE" 10257 "urshr%?\\t%1, %2" 10258 [(set_attr "predicable" "yes")]) 10259 10260 ;; 10261 ;; [sqshl_si] 10262 ;; 10263 (define_insn "mve_sqshl_si" 10264 [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10265 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0") 10266 (match_operand:SI 2 "immediate_operand" "Pg")))] 10267 "TARGET_HAVE_MVE" 10268 "sqshl%?\\t%1, %2" 10269 [(set_attr "predicable" "yes")]) 10270 10271 ;; 10272 ;; [srshr_si] 10273 ;; 10274 (define_insn "mve_srshr_si" 10275 [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10276 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0") 10277 (match_operand:SI 2 "immediate_operand" "Pg")] 10278 SRSHR))] 10279 "TARGET_HAVE_MVE" 10280 "srshr%?\\t%1, %2" 10281 [(set_attr "predicable" "yes")]) 10282 10283 ;; 10284 ;; [srshrl_di] 10285 ;; 10286 (define_insn "mve_srshrl_di" 10287 [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10288 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0") 10289 (match_operand:SI 2 "immediate_operand" "Pg")] 10290 SRSHRL))] 10291 "TARGET_HAVE_MVE" 10292 "srshrl%?\\t%Q1, %R1, %2" 10293 [(set_attr "predicable" "yes")]) 10294 10295 ;; 10296 ;; [sqshll_di] 10297 ;; 10298 (define_insn "mve_sqshll_di" 10299 [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10300 (ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0") 10301 (match_operand:SI 2 "immediate_operand" "Pg")))] 10302 "TARGET_HAVE_MVE" 10303 "sqshll%?\\t%Q1, %R1, %2" 10304 [(set_attr "predicable" "yes")]) 10305 10306 ;; 10307 ;; [vshlcq_m_u vshlcq_m_s] 10308 ;; 10309 (define_expand "mve_vshlcq_m_vec_<supf><mode>" 10310 [(match_operand:MVE_2 0 "s_register_operand") 10311 (match_operand:MVE_2 1 "s_register_operand") 10312 (match_operand:SI 2 "s_register_operand") 10313 (match_operand:SI 3 "mve_imm_32") 10314 (match_operand:<MVE_VPRED> 4 "vpr_register_operand") 10315 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)] 10316 "TARGET_HAVE_MVE" 10317 { 10318 rtx ignore_wb = gen_reg_rtx (SImode); 10319 emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1], 10320 operands[2], operands[3], 10321 operands[4])); 10322 DONE; 10323 }) 10324 10325 (define_expand "mve_vshlcq_m_carry_<supf><mode>" 10326 [(match_operand:SI 0 "s_register_operand") 10327 (match_operand:MVE_2 1 "s_register_operand") 10328 (match_operand:SI 2 "s_register_operand") 10329 (match_operand:SI 3 "mve_imm_32") 10330 (match_operand:<MVE_VPRED> 4 "vpr_register_operand") 10331 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)] 10332 "TARGET_HAVE_MVE" 10333 { 10334 rtx ignore_vec = gen_reg_rtx (<MODE>mode); 10335 emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0], 10336 operands[1], operands[2], 10337 operands[3], operands[4])); 10338 DONE; 10339 }) 10340 10341 (define_insn "mve_vshlcq_m_<supf><mode>" 10342 [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 10343 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0") 10344 (match_operand:SI 3 "s_register_operand" "1") 10345 (match_operand:SI 4 "mve_imm_32" "Rf") 10346 (match_operand:<MVE_VPRED> 5 "vpr_register_operand" "Up")] 10347 VSHLCQ_M)) 10348 (set (match_operand:SI 1 "s_register_operand" "=r") 10349 (unspec:SI [(match_dup 2) 10350 (match_dup 3) 10351 (match_dup 4) 10352 (match_dup 5)] 10353 VSHLCQ_M)) 10354 ] 10355 "TARGET_HAVE_MVE" 10356 "vpst\;vshlct\t%q0, %1, %4" 10357 [(set_attr "type" "mve_move") 10358 (set_attr "length" "8")]) 10359 10360 ;; CDE instructions on MVE registers. 10361 10362 (define_insn "arm_vcx1qv16qi" 10363 [(set (match_operand:V16QI 0 "register_operand" "=t") 10364 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10365 (match_operand:SI 2 "const_int_mve_cde1_operand" "i")] 10366 UNSPEC_VCDE))] 10367 "TARGET_CDE && TARGET_HAVE_MVE" 10368 "vcx1\\tp%c1, %q0, #%c2" 10369 [(set_attr "type" "coproc")] 10370 ) 10371 10372 (define_insn "arm_vcx1qav16qi" 10373 [(set (match_operand:V16QI 0 "register_operand" "=t") 10374 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10375 (match_operand:V16QI 2 "register_operand" "0") 10376 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")] 10377 UNSPEC_VCDEA))] 10378 "TARGET_CDE && TARGET_HAVE_MVE" 10379 "vcx1a\\tp%c1, %q0, #%c3" 10380 [(set_attr "type" "coproc")] 10381 ) 10382 10383 (define_insn "arm_vcx2qv16qi" 10384 [(set (match_operand:V16QI 0 "register_operand" "=t") 10385 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10386 (match_operand:V16QI 2 "register_operand" "t") 10387 (match_operand:SI 3 "const_int_mve_cde2_operand" "i")] 10388 UNSPEC_VCDE))] 10389 "TARGET_CDE && TARGET_HAVE_MVE" 10390 "vcx2\\tp%c1, %q0, %q2, #%c3" 10391 [(set_attr "type" "coproc")] 10392 ) 10393 10394 (define_insn "arm_vcx2qav16qi" 10395 [(set (match_operand:V16QI 0 "register_operand" "=t") 10396 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10397 (match_operand:V16QI 2 "register_operand" "0") 10398 (match_operand:V16QI 3 "register_operand" "t") 10399 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")] 10400 UNSPEC_VCDEA))] 10401 "TARGET_CDE && TARGET_HAVE_MVE" 10402 "vcx2a\\tp%c1, %q0, %q3, #%c4" 10403 [(set_attr "type" "coproc")] 10404 ) 10405 10406 (define_insn "arm_vcx3qv16qi" 10407 [(set (match_operand:V16QI 0 "register_operand" "=t") 10408 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10409 (match_operand:V16QI 2 "register_operand" "t") 10410 (match_operand:V16QI 3 "register_operand" "t") 10411 (match_operand:SI 4 "const_int_mve_cde3_operand" "i")] 10412 UNSPEC_VCDE))] 10413 "TARGET_CDE && TARGET_HAVE_MVE" 10414 "vcx3\\tp%c1, %q0, %q2, %q3, #%c4" 10415 [(set_attr "type" "coproc")] 10416 ) 10417 10418 (define_insn "arm_vcx3qav16qi" 10419 [(set (match_operand:V16QI 0 "register_operand" "=t") 10420 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10421 (match_operand:V16QI 2 "register_operand" "0") 10422 (match_operand:V16QI 3 "register_operand" "t") 10423 (match_operand:V16QI 4 "register_operand" "t") 10424 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")] 10425 UNSPEC_VCDEA))] 10426 "TARGET_CDE && TARGET_HAVE_MVE" 10427 "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5" 10428 [(set_attr "type" "coproc")] 10429 ) 10430 10431 (define_insn "arm_vcx1q<a>_p_v16qi" 10432 [(set (match_operand:V16QI 0 "register_operand" "=t") 10433 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10434 (match_operand:V16QI 2 "register_operand" "0") 10435 (match_operand:SI 3 "const_int_mve_cde1_operand" "i") 10436 (match_operand:V16BI 4 "vpr_register_operand" "Up")] 10437 CDE_VCX))] 10438 "TARGET_CDE && TARGET_HAVE_MVE" 10439 "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3" 10440 [(set_attr "type" "coproc") 10441 (set_attr "length" "8")] 10442 ) 10443 10444 (define_insn "arm_vcx2q<a>_p_v16qi" 10445 [(set (match_operand:V16QI 0 "register_operand" "=t") 10446 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10447 (match_operand:V16QI 2 "register_operand" "0") 10448 (match_operand:V16QI 3 "register_operand" "t") 10449 (match_operand:SI 4 "const_int_mve_cde2_operand" "i") 10450 (match_operand:V16BI 5 "vpr_register_operand" "Up")] 10451 CDE_VCX))] 10452 "TARGET_CDE && TARGET_HAVE_MVE" 10453 "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4" 10454 [(set_attr "type" "coproc") 10455 (set_attr "length" "8")] 10456 ) 10457 10458 (define_insn "arm_vcx3q<a>_p_v16qi" 10459 [(set (match_operand:V16QI 0 "register_operand" "=t") 10460 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10461 (match_operand:V16QI 2 "register_operand" "0") 10462 (match_operand:V16QI 3 "register_operand" "t") 10463 (match_operand:V16QI 4 "register_operand" "t") 10464 (match_operand:SI 5 "const_int_mve_cde3_operand" "i") 10465 (match_operand:V16BI 6 "vpr_register_operand" "Up")] 10466 CDE_VCX))] 10467 "TARGET_CDE && TARGET_HAVE_MVE" 10468 "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5" 10469 [(set_attr "type" "coproc") 10470 (set_attr "length" "8")] 10471 ) 10472 10473 (define_insn "*movmisalign<mode>_mve_store" 10474 [(set (match_operand:MVE_VLD_ST 0 "mve_memory_operand" "=Ux") 10475 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "s_register_operand" " w")] 10476 UNSPEC_MISALIGNED_ACCESS))] 10477 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10478 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))) 10479 && !BYTES_BIG_ENDIAN && unaligned_access" 10480 "vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0" 10481 [(set_attr "type" "mve_store")] 10482 ) 10483 10484 10485 (define_insn "*movmisalign<mode>_mve_load" 10486 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w") 10487 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "mve_memory_operand" " Ux")] 10488 UNSPEC_MISALIGNED_ACCESS))] 10489 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10490 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))) 10491 && !BYTES_BIG_ENDIAN && unaligned_access" 10492 "vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1" 10493 [(set_attr "type" "mve_load")] 10494 ) 10495 10496 ;; Expander for VxBI moves 10497 (define_expand "mov<mode>" 10498 [(set (match_operand:MVE_7 0 "nonimmediate_operand") 10499 (match_operand:MVE_7 1 "general_operand"))] 10500 "TARGET_HAVE_MVE" 10501 { 10502 if (!register_operand (operands[0], <MODE>mode)) 10503 operands[1] = force_reg (<MODE>mode, operands[1]); 10504 } 10505 ) 10506 10507 ;; Expanders for vec_cmp and vcond 10508 10509 (define_expand "vec_cmp<mode><MVE_vpred>" 10510 [(set (match_operand:<MVE_VPRED> 0 "s_register_operand") 10511 (match_operator:<MVE_VPRED> 1 "comparison_operator" 10512 [(match_operand:MVE_VLD_ST 2 "s_register_operand") 10513 (match_operand:MVE_VLD_ST 3 "reg_or_zero_operand")]))] 10514 "TARGET_HAVE_MVE 10515 && (!<Is_float_mode> || flag_unsafe_math_optimizations)" 10516 { 10517 arm_expand_vector_compare (operands[0], GET_CODE (operands[1]), 10518 operands[2], operands[3], false); 10519 DONE; 10520 }) 10521 10522 (define_expand "vec_cmpu<mode><MVE_vpred>" 10523 [(set (match_operand:<MVE_VPRED> 0 "s_register_operand") 10524 (match_operator:<MVE_VPRED> 1 "comparison_operator" 10525 [(match_operand:MVE_2 2 "s_register_operand") 10526 (match_operand:MVE_2 3 "reg_or_zero_operand")]))] 10527 "TARGET_HAVE_MVE" 10528 { 10529 arm_expand_vector_compare (operands[0], GET_CODE (operands[1]), 10530 operands[2], operands[3], false); 10531 DONE; 10532 }) 10533 10534 (define_expand "vcond_mask_<mode><MVE_vpred>" 10535 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand") 10536 (if_then_else:MVE_VLD_ST 10537 (match_operand:<MVE_VPRED> 3 "s_register_operand") 10538 (match_operand:MVE_VLD_ST 1 "s_register_operand") 10539 (match_operand:MVE_VLD_ST 2 "s_register_operand")))] 10540 "TARGET_HAVE_MVE" 10541 { 10542 switch (GET_MODE_CLASS (<MODE>mode)) 10543 { 10544 case MODE_VECTOR_INT: 10545 emit_insn (gen_mve_vpselq (VPSELQ_S, <MODE>mode, operands[0], 10546 operands[1], operands[2], operands[3])); 10547 break; 10548 case MODE_VECTOR_FLOAT: 10549 emit_insn (gen_mve_vpselq_f (<MODE>mode, operands[0], 10550 operands[1], operands[2], operands[3])); 10551 break; 10552 default: 10553 gcc_unreachable (); 10554 } 10555 DONE; 10556 }) 10557