1 ;; Arm M-profile Vector Extension Machine Description
2 ;; Copyright (C) 2019-2021 Free Software Foundation, Inc.
4 ;; This file is part of GCC.
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)
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.
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/>.
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"
25 if (which_alternative == 3 || which_alternative == 6)
28 static char templ[40];
30 is_valid = simd_immediate_valid_for_move (operands[1], <MODE>mode,
31 &operands[1], &width);
33 gcc_assert (is_valid != 0);
36 return "vmov.f32\t%q0, %1 @ <mode>";
38 sprintf (templ, "vmov.i%d\t%%q0, %%x1 @ <mode>", width);
42 if (which_alternative == 4 || which_alternative == 7)
44 if (<MODE>mode == V2DFmode || <MODE>mode == V2DImode || <MODE>mode == TImode)
46 if (which_alternative == 7)
47 output_asm_insn ("vstrw.32\t%q1, %E0", operands);
49 output_asm_insn ("vldrw.u32\t%q0, %E1",operands);
53 if (which_alternative == 7)
54 output_asm_insn ("vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0", operands);
56 output_asm_insn ("vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1", operands);
60 switch (which_alternative)
63 return "vmov\t%q0, %q1";
65 return "vmov\t%e0, %Q1, %R1 @ <mode>\;vmov\t%f0, %J1, %K1";
67 return "vmov\t%Q0, %R0, %e1 @ <mode>\;vmov\t%J0, %K0, %f1";
69 return output_move_quad (operands);
71 return output_move_neon (operands);
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,*,*,*,*")])
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")])
94 (define_insn "mve_vst4q<mode>"
95 [(set (match_operand:XI 0 "neon_struct_operand" "=Um")
96 (unspec:XI [(match_operand:XI 1 "s_register_operand" "w")
97 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
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))
111 gcc_assert (REG_P (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);
123 [(set_attr "length" "16")])
128 (define_insn "mve_vrndq_m_f<mode>"
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:HI 3 "vpr_register_operand" "Up")]
136 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
137 "vpst\;vrintzt.f%#<V_sz_elem> %q0, %q2"
138 [(set_attr "type" "mve_move")
139 (set_attr "length""8")])
144 (define_insn "mve_vrndxq_f<mode>"
146 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
147 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
150 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
151 "vrintx.f%#<V_sz_elem> %q0, %q1"
152 [(set_attr "type" "mve_move")
158 (define_insn "mve_vrndq_f<mode>"
160 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
161 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
164 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
165 "vrintz.f%#<V_sz_elem> %q0, %q1"
166 [(set_attr "type" "mve_move")
172 (define_insn "mve_vrndpq_f<mode>"
174 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
175 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
178 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
179 "vrintp.f%#<V_sz_elem> %q0, %q1"
180 [(set_attr "type" "mve_move")
186 (define_insn "mve_vrndnq_f<mode>"
188 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
189 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
192 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
193 "vrintn.f%#<V_sz_elem> %q0, %q1"
194 [(set_attr "type" "mve_move")
200 (define_insn "mve_vrndmq_f<mode>"
202 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
203 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
206 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
207 "vrintm.f%#<V_sz_elem> %q0, %q1"
208 [(set_attr "type" "mve_move")
214 (define_insn "mve_vrndaq_f<mode>"
216 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
217 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
220 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
221 "vrinta.f%#<V_sz_elem> %q0, %q1"
222 [(set_attr "type" "mve_move")
228 (define_insn "mve_vrev64q_f<mode>"
230 (set (match_operand:MVE_0 0 "s_register_operand" "=&w")
231 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
234 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
235 "vrev64.%#<V_sz_elem> %q0, %q1"
236 [(set_attr "type" "mve_move")
242 (define_insn "mve_vnegq_f<mode>"
244 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
245 (neg:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")))
247 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
248 "vneg.f%#<V_sz_elem> %q0, %q1"
249 [(set_attr "type" "mve_move")
255 (define_insn "mve_vdupq_n_f<mode>"
257 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
258 (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
261 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
262 "vdup.%#<V_sz_elem> %q0, %1"
263 [(set_attr "type" "mve_move")
269 (define_insn "mve_vabsq_f<mode>"
271 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
272 (abs:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")))
274 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
275 "vabs.f%#<V_sz_elem> %q0, %q1"
276 [(set_attr "type" "mve_move")
282 (define_insn "mve_vrev32q_fv8hf"
284 (set (match_operand:V8HF 0 "s_register_operand" "=w")
285 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")]
288 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
290 [(set_attr "type" "mve_move")
295 (define_insn "mve_vcvttq_f32_f16v4sf"
297 (set (match_operand:V4SF 0 "s_register_operand" "=w")
298 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
301 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
302 "vcvtt.f32.f16 %q0, %q1"
303 [(set_attr "type" "mve_move")
309 (define_insn "mve_vcvtbq_f32_f16v4sf"
311 (set (match_operand:V4SF 0 "s_register_operand" "=w")
312 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
315 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
316 "vcvtb.f32.f16 %q0, %q1"
317 [(set_attr "type" "mve_move")
321 ;; [vcvtq_to_f_s, vcvtq_to_f_u])
323 (define_insn "mve_vcvtq_to_f_<supf><mode>"
325 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
326 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
329 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
330 "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q1"
331 [(set_attr "type" "mve_move")
335 ;; [vrev64q_u, vrev64q_s])
337 (define_insn "mve_vrev64q_<supf><mode>"
339 (set (match_operand:MVE_2 0 "s_register_operand" "=&w")
340 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
344 "vrev64.%#<V_sz_elem> %q0, %q1"
345 [(set_attr "type" "mve_move")
349 ;; [vcvtq_from_f_s, vcvtq_from_f_u])
351 (define_insn "mve_vcvtq_from_f_<supf><mode>"
353 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
354 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
357 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
358 "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
359 [(set_attr "type" "mve_move")
363 (define_insn "mve_vqnegq_s<mode>"
365 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
366 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
370 "vqneg.s%#<V_sz_elem> %q0, %q1"
371 [(set_attr "type" "mve_move")
377 (define_insn "mve_vqabsq_s<mode>"
379 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
380 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
384 "vqabs.s%#<V_sz_elem> %q0, %q1"
385 [(set_attr "type" "mve_move")
391 (define_insn "mve_vnegq_s<mode>"
393 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
394 (neg:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
397 "vneg.s%#<V_sz_elem> %q0, %q1"
398 [(set_attr "type" "mve_move")
402 ;; [vmvnq_u, vmvnq_s])
404 (define_insn "mve_vmvnq_u<mode>"
406 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
407 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
411 [(set_attr "type" "mve_move")
413 (define_expand "mve_vmvnq_s<mode>"
415 (set (match_operand:MVE_2 0 "s_register_operand")
416 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand")))
422 ;; [vdupq_n_u, vdupq_n_s])
424 (define_insn "mve_vdupq_n_<supf><mode>"
426 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
427 (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
431 "vdup.%#<V_sz_elem> %q0, %1"
432 [(set_attr "type" "mve_move")
436 ;; [vclzq_u, vclzq_s])
438 (define_insn "mve_vclzq_<supf><mode>"
440 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
441 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
445 "vclz.i%#<V_sz_elem> %q0, %q1"
446 [(set_attr "type" "mve_move")
452 (define_insn "mve_vclsq_s<mode>"
454 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
455 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
459 "vcls.s%#<V_sz_elem> %q0, %q1"
460 [(set_attr "type" "mve_move")
464 ;; [vaddvq_s, vaddvq_u])
466 (define_insn "@mve_vaddvq_<supf><mode>"
468 (set (match_operand:SI 0 "s_register_operand" "=Te")
469 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
473 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
474 [(set_attr "type" "mve_move")
480 (define_insn "mve_vabsq_s<mode>"
482 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
483 (abs:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
486 "vabs.s%#<V_sz_elem>\t%q0, %q1"
487 [(set_attr "type" "mve_move")
491 ;; [vrev32q_u, vrev32q_s])
493 (define_insn "mve_vrev32q_<supf><mode>"
495 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
496 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
500 "vrev32.%#<V_sz_elem>\t%q0, %q1"
501 [(set_attr "type" "mve_move")
505 ;; [vmovltq_u, vmovltq_s])
507 (define_insn "mve_vmovltq_<supf><mode>"
509 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
510 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
514 "vmovlt.<supf>%#<V_sz_elem> %q0, %q1"
515 [(set_attr "type" "mve_move")
519 ;; [vmovlbq_s, vmovlbq_u])
521 (define_insn "mve_vmovlbq_<supf><mode>"
523 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
524 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
528 "vmovlb.<supf>%#<V_sz_elem> %q0, %q1"
529 [(set_attr "type" "mve_move")
533 ;; [vcvtpq_s, vcvtpq_u])
535 (define_insn "mve_vcvtpq_<supf><mode>"
537 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
538 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
541 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
542 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
543 [(set_attr "type" "mve_move")
547 ;; [vcvtnq_s, vcvtnq_u])
549 (define_insn "mve_vcvtnq_<supf><mode>"
551 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
552 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
555 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
556 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
557 [(set_attr "type" "mve_move")
561 ;; [vcvtmq_s, vcvtmq_u])
563 (define_insn "mve_vcvtmq_<supf><mode>"
565 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
566 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
569 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
570 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
571 [(set_attr "type" "mve_move")
575 ;; [vcvtaq_u, vcvtaq_s])
577 (define_insn "mve_vcvtaq_<supf><mode>"
579 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
580 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
583 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
584 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
585 [(set_attr "type" "mve_move")
589 ;; [vmvnq_n_u, vmvnq_n_s])
591 (define_insn "mve_vmvnq_n_<supf><mode>"
593 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
594 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
598 "vmvn.i%#<V_sz_elem> %q0, %1"
599 [(set_attr "type" "mve_move")
603 ;; [vrev16q_u, vrev16q_s])
605 (define_insn "mve_vrev16q_<supf>v16qi"
607 (set (match_operand:V16QI 0 "s_register_operand" "=w")
608 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
613 [(set_attr "type" "mve_move")
617 ;; [vaddlvq_s vaddlvq_u])
619 (define_insn "mve_vaddlvq_<supf>v4si"
621 (set (match_operand:DI 0 "s_register_operand" "=r")
622 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
626 "vaddlv.<supf>32 %Q0, %R0, %q1"
627 [(set_attr "type" "mve_move")
631 ;; [vctp8q vctp16q vctp32q vctp64q])
633 (define_insn "mve_vctp<mode1>qhi"
635 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
636 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
641 [(set_attr "type" "mve_move")
647 (define_insn "mve_vpnothi"
649 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
650 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
655 [(set_attr "type" "mve_move")
661 (define_insn "mve_vsubq_n_f<mode>"
663 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
664 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
665 (match_operand:<V_elem> 2 "s_register_operand" "r")]
668 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
669 "vsub.f<V_sz_elem> %q0, %q1, %2"
670 [(set_attr "type" "mve_move")
676 (define_insn "mve_vbrsrq_n_f<mode>"
678 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
679 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
680 (match_operand:SI 2 "s_register_operand" "r")]
683 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
684 "vbrsr.<V_sz_elem> %q0, %q1, %2"
685 [(set_attr "type" "mve_move")
689 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
691 (define_insn "mve_vcvtq_n_to_f_<supf><mode>"
693 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
694 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
695 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
698 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
699 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
700 [(set_attr "type" "mve_move")
705 (define_insn "mve_vcreateq_f<mode>"
707 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
708 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
709 (match_operand:DI 2 "s_register_operand" "r")]
712 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
713 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
714 [(set_attr "type" "mve_move")
715 (set_attr "length""8")])
718 ;; [vcreateq_u, vcreateq_s])
720 (define_insn "mve_vcreateq_<supf><mode>"
722 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
723 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
724 (match_operand:DI 2 "s_register_operand" "r")]
728 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
729 [(set_attr "type" "mve_move")
730 (set_attr "length""8")])
733 ;; [vshrq_n_s, vshrq_n_u])
735 ;; Version that takes an immediate as operand 2.
736 (define_insn "mve_vshrq_n_<supf><mode>"
738 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
739 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
740 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
744 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
745 [(set_attr "type" "mve_move")
748 ;; Versions that take constant vectors as operand 2 (with all elements
750 (define_insn "mve_vshrq_n_s<mode>_imm"
752 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
753 (ashiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
754 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i")))
758 return neon_output_shift_immediate ("vshr", 's', &operands[2],
760 VALID_NEON_QREG_MODE (<MODE>mode),
763 [(set_attr "type" "mve_move")
765 (define_insn "mve_vshrq_n_u<mode>_imm"
767 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
768 (lshiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
769 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i")))
773 return neon_output_shift_immediate ("vshr", 'u', &operands[2],
775 VALID_NEON_QREG_MODE (<MODE>mode),
778 [(set_attr "type" "mve_move")
782 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
784 (define_insn "mve_vcvtq_n_from_f_<supf><mode>"
786 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
787 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
788 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
791 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
792 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
793 [(set_attr "type" "mve_move")
799 (define_insn "mve_vaddlvq_p_<supf>v4si"
801 (set (match_operand:DI 0 "s_register_operand" "=r")
802 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
803 (match_operand:HI 2 "vpr_register_operand" "Up")]
807 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
808 [(set_attr "type" "mve_move")
809 (set_attr "length""8")])
812 ;; [vcmpneq_, vcmpcsq_, vcmpeqq_, vcmpgeq_, vcmpgtq_, vcmphiq_, vcmpleq_, vcmpltq_])
814 (define_insn "@mve_vcmp<mve_cmp_op>q_<mode>"
816 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
817 (MVE_COMPARISONS:HI (match_operand:MVE_2 1 "s_register_operand" "w")
818 (match_operand:MVE_2 2 "s_register_operand" "w")))
821 "vcmp.<mve_cmp_type>%#<V_sz_elem> <mve_cmp_op>, %q1, %q2"
822 [(set_attr "type" "mve_move")
826 ;; [vcmpcsq_n_, vcmpeqq_n_, vcmpgeq_n_, vcmpgtq_n_, vcmphiq_n_, vcmpleq_n_, vcmpltq_n_, vcmpneq_n_])
828 (define_insn "mve_vcmp<mve_cmp_op>q_n_<mode>"
830 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
831 (MVE_COMPARISONS:HI (match_operand:MVE_2 1 "s_register_operand" "w")
832 (match_operand:<V_elem> 2 "s_register_operand" "r")))
835 "vcmp.<mve_cmp_type>%#<V_sz_elem> <mve_cmp_op>, %q1, %2"
836 [(set_attr "type" "mve_move")
840 ;; [vshlq_s, vshlq_u])
844 ;; [vabdq_s, vabdq_u])
846 (define_insn "mve_vabdq_<supf><mode>"
848 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
849 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
850 (match_operand:MVE_2 2 "s_register_operand" "w")]
854 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
855 [(set_attr "type" "mve_move")
859 ;; [vaddq_n_s, vaddq_n_u])
861 (define_insn "mve_vaddq_n_<supf><mode>"
863 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
864 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
865 (match_operand:<V_elem> 2 "s_register_operand" "r")]
869 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
870 [(set_attr "type" "mve_move")
874 ;; [vaddvaq_s, vaddvaq_u])
876 (define_insn "mve_vaddvaq_<supf><mode>"
878 (set (match_operand:SI 0 "s_register_operand" "=Te")
879 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
880 (match_operand:MVE_2 2 "s_register_operand" "w")]
884 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
885 [(set_attr "type" "mve_move")
889 ;; [vaddvq_p_u, vaddvq_p_s])
891 (define_insn "mve_vaddvq_p_<supf><mode>"
893 (set (match_operand:SI 0 "s_register_operand" "=Te")
894 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
895 (match_operand:HI 2 "vpr_register_operand" "Up")]
899 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
900 [(set_attr "type" "mve_move")
901 (set_attr "length""8")])
904 ;; [vandq_u, vandq_s])
906 ;; signed and unsigned versions are the same: define the unsigned
907 ;; insn, and use an expander for the signed one as we still reference
908 ;; both names from arm_mve.h.
909 ;; We use the same code as in neon.md (TODO: avoid this duplication).
910 (define_insn "mve_vandq_u<mode>"
912 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
913 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
914 (match_operand:MVE_2 2 "neon_inv_logic_op2" "w,DL")))
919 * return neon_output_logic_immediate (\"vand\", &operands[2], <MODE>mode, 1, VALID_NEON_QREG_MODE (<MODE>mode));"
920 [(set_attr "type" "mve_move")
922 (define_expand "mve_vandq_s<mode>"
924 (set (match_operand:MVE_2 0 "s_register_operand")
925 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
926 (match_operand:MVE_2 2 "neon_inv_logic_op2")))
932 ;; [vbicq_s, vbicq_u])
934 (define_insn "mve_vbicq_u<mode>"
936 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
937 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
938 (match_operand:MVE_2 1 "s_register_operand" "w")))
941 "vbic\t%q0, %q1, %q2"
942 [(set_attr "type" "mve_move")
945 (define_expand "mve_vbicq_s<mode>"
947 (set (match_operand:MVE_2 0 "s_register_operand")
948 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
949 (match_operand:MVE_2 1 "s_register_operand")))
955 ;; [vbrsrq_n_u, vbrsrq_n_s])
957 (define_insn "mve_vbrsrq_n_<supf><mode>"
959 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
960 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
961 (match_operand:SI 2 "s_register_operand" "r")]
965 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
966 [(set_attr "type" "mve_move")
970 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
972 (define_insn "mve_vcaddq<mve_rot><mode>"
974 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
975 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
976 (match_operand:MVE_2 2 "s_register_operand" "w")]
980 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
981 [(set_attr "type" "mve_move")
984 ;; Auto vectorizer pattern for int vcadd
985 (define_expand "cadd<rot><mode>3"
986 [(set (match_operand:MVE_2 0 "register_operand")
987 (unspec:MVE_2 [(match_operand:MVE_2 1 "register_operand")
988 (match_operand:MVE_2 2 "register_operand")]
990 "TARGET_HAVE_MVE && !BYTES_BIG_ENDIAN"
994 ;; [veorq_u, veorq_s])
996 (define_insn "mve_veorq_u<mode>"
998 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
999 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1000 (match_operand:MVE_2 2 "s_register_operand" "w")))
1003 "veor\t%q0, %q1, %q2"
1004 [(set_attr "type" "mve_move")
1006 (define_expand "mve_veorq_s<mode>"
1008 (set (match_operand:MVE_2 0 "s_register_operand")
1009 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1010 (match_operand:MVE_2 2 "s_register_operand")))
1016 ;; [vhaddq_n_u, vhaddq_n_s])
1018 (define_insn "mve_vhaddq_n_<supf><mode>"
1020 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1021 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1022 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1026 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1027 [(set_attr "type" "mve_move")
1031 ;; [vhaddq_s, vhaddq_u])
1033 (define_insn "@mve_vhaddq_<supf><mode>"
1035 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1036 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1037 (match_operand:MVE_2 2 "s_register_operand" "w")]
1041 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1042 [(set_attr "type" "mve_move")
1046 ;; [vhcaddq_rot270_s])
1048 (define_insn "mve_vhcaddq_rot270_s<mode>"
1050 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1051 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1052 (match_operand:MVE_2 2 "s_register_operand" "w")]
1056 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1057 [(set_attr "type" "mve_move")
1061 ;; [vhcaddq_rot90_s])
1063 (define_insn "mve_vhcaddq_rot90_s<mode>"
1065 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1066 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1067 (match_operand:MVE_2 2 "s_register_operand" "w")]
1071 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1072 [(set_attr "type" "mve_move")
1076 ;; [vhsubq_n_u, vhsubq_n_s])
1078 (define_insn "mve_vhsubq_n_<supf><mode>"
1080 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1081 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1082 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1086 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1087 [(set_attr "type" "mve_move")
1091 ;; [vhsubq_s, vhsubq_u])
1093 (define_insn "mve_vhsubq_<supf><mode>"
1095 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1096 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1097 (match_operand:MVE_2 2 "s_register_operand" "w")]
1101 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1102 [(set_attr "type" "mve_move")
1108 (define_insn "mve_vmaxaq_s<mode>"
1110 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1111 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1112 (match_operand:MVE_2 2 "s_register_operand" "w")]
1116 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1117 [(set_attr "type" "mve_move")
1123 (define_insn "mve_vmaxavq_s<mode>"
1125 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1126 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1127 (match_operand:MVE_2 2 "s_register_operand" "w")]
1131 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1132 [(set_attr "type" "mve_move")
1136 ;; [vmaxq_u, vmaxq_s])
1138 (define_insn "mve_vmaxq_s<mode>"
1140 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1141 (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1142 (match_operand:MVE_2 2 "s_register_operand" "w")))
1145 "vmax.%#<V_s_elem>\t%q0, %q1, %q2"
1146 [(set_attr "type" "mve_move")
1149 (define_insn "mve_vmaxq_u<mode>"
1151 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1152 (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1153 (match_operand:MVE_2 2 "s_register_operand" "w")))
1156 "vmax.%#<V_u_elem>\t%q0, %q1, %q2"
1157 [(set_attr "type" "mve_move")
1161 ;; [vmaxvq_u, vmaxvq_s])
1163 (define_insn "mve_vmaxvq_<supf><mode>"
1165 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1166 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1167 (match_operand:MVE_2 2 "s_register_operand" "w")]
1171 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1172 [(set_attr "type" "mve_move")
1178 (define_insn "mve_vminaq_s<mode>"
1180 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1181 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1182 (match_operand:MVE_2 2 "s_register_operand" "w")]
1186 "vmina.s%#<V_sz_elem>\t%q0, %q2"
1187 [(set_attr "type" "mve_move")
1193 (define_insn "mve_vminavq_s<mode>"
1195 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1196 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1197 (match_operand:MVE_2 2 "s_register_operand" "w")]
1201 "vminav.s%#<V_sz_elem>\t%0, %q2"
1202 [(set_attr "type" "mve_move")
1206 ;; [vminq_s, vminq_u])
1208 (define_insn "mve_vminq_s<mode>"
1210 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1211 (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1212 (match_operand:MVE_2 2 "s_register_operand" "w")))
1215 "vmin.%#<V_s_elem>\t%q0, %q1, %q2"
1216 [(set_attr "type" "mve_move")
1219 (define_insn "mve_vminq_u<mode>"
1221 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1222 (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1223 (match_operand:MVE_2 2 "s_register_operand" "w")))
1226 "vmin.%#<V_u_elem>\t%q0, %q1, %q2"
1227 [(set_attr "type" "mve_move")
1231 ;; [vminvq_u, vminvq_s])
1233 (define_insn "mve_vminvq_<supf><mode>"
1235 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1236 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1237 (match_operand:MVE_2 2 "s_register_operand" "w")]
1241 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
1242 [(set_attr "type" "mve_move")
1246 ;; [vmladavq_u, vmladavq_s])
1248 (define_insn "mve_vmladavq_<supf><mode>"
1250 (set (match_operand:SI 0 "s_register_operand" "=Te")
1251 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1252 (match_operand:MVE_2 2 "s_register_operand" "w")]
1256 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
1257 [(set_attr "type" "mve_move")
1263 (define_insn "mve_vmladavxq_s<mode>"
1265 (set (match_operand:SI 0 "s_register_operand" "=Te")
1266 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1267 (match_operand:MVE_2 2 "s_register_operand" "w")]
1271 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1272 [(set_attr "type" "mve_move")
1278 (define_insn "mve_vmlsdavq_s<mode>"
1280 (set (match_operand:SI 0 "s_register_operand" "=Te")
1281 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1282 (match_operand:MVE_2 2 "s_register_operand" "w")]
1286 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
1287 [(set_attr "type" "mve_move")
1293 (define_insn "mve_vmlsdavxq_s<mode>"
1295 (set (match_operand:SI 0 "s_register_operand" "=Te")
1296 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1297 (match_operand:MVE_2 2 "s_register_operand" "w")]
1301 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1302 [(set_attr "type" "mve_move")
1306 ;; [vmulhq_s, vmulhq_u])
1308 (define_insn "mve_vmulhq_<supf><mode>"
1310 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1311 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1312 (match_operand:MVE_2 2 "s_register_operand" "w")]
1316 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1317 [(set_attr "type" "mve_move")
1321 ;; [vmullbq_int_u, vmullbq_int_s])
1323 (define_insn "mve_vmullbq_int_<supf><mode>"
1325 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1326 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1327 (match_operand:MVE_2 2 "s_register_operand" "w")]
1331 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1332 [(set_attr "type" "mve_move")
1336 ;; [vmulltq_int_u, vmulltq_int_s])
1338 (define_insn "mve_vmulltq_int_<supf><mode>"
1340 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1341 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1342 (match_operand:MVE_2 2 "s_register_operand" "w")]
1346 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1347 [(set_attr "type" "mve_move")
1351 ;; [vmulq_n_u, vmulq_n_s])
1353 (define_insn "mve_vmulq_n_<supf><mode>"
1355 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1356 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1357 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1361 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
1362 [(set_attr "type" "mve_move")
1366 ;; [vmulq_u, vmulq_s])
1368 (define_insn "mve_vmulq_<supf><mode>"
1370 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1371 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1372 (match_operand:MVE_2 2 "s_register_operand" "w")]
1376 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1377 [(set_attr "type" "mve_move")
1380 (define_insn "mve_vmulq<mode>"
1382 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1383 (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1384 (match_operand:MVE_2 2 "s_register_operand" "w")))
1387 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1388 [(set_attr "type" "mve_move")
1392 ;; [vornq_u, vornq_s])
1394 (define_insn "mve_vornq_s<mode>"
1396 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1397 (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
1398 (match_operand:MVE_2 1 "s_register_operand" "w")))
1401 "vorn\t%q0, %q1, %q2"
1402 [(set_attr "type" "mve_move")
1405 (define_expand "mve_vornq_u<mode>"
1407 (set (match_operand:MVE_2 0 "s_register_operand")
1408 (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
1409 (match_operand:MVE_2 1 "s_register_operand")))
1415 ;; [vorrq_s, vorrq_u])
1417 ;; signed and unsigned versions are the same: define the unsigned
1418 ;; insn, and use an expander for the signed one as we still reference
1419 ;; both names from arm_mve.h.
1420 ;; We use the same code as in neon.md (TODO: avoid this duplication).
1421 (define_insn "mve_vorrq_s<mode>"
1423 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
1424 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
1425 (match_operand:MVE_2 2 "neon_logic_op2" "w,Dl")))
1430 * return neon_output_logic_immediate (\"vorr\", &operands[2], <MODE>mode, 0, VALID_NEON_QREG_MODE (<MODE>mode));"
1431 [(set_attr "type" "mve_move")
1433 (define_expand "mve_vorrq_u<mode>"
1435 (set (match_operand:MVE_2 0 "s_register_operand")
1436 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1437 (match_operand:MVE_2 2 "neon_logic_op2")))
1443 ;; [vqaddq_n_s, vqaddq_n_u])
1445 (define_insn "mve_vqaddq_n_<supf><mode>"
1447 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1448 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1449 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1453 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1454 [(set_attr "type" "mve_move")
1458 ;; [vqaddq_u, vqaddq_s])
1460 (define_insn "mve_vqaddq_<supf><mode>"
1462 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1463 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1464 (match_operand:MVE_2 2 "s_register_operand" "w")]
1468 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1469 [(set_attr "type" "mve_move")
1475 (define_insn "mve_vqdmulhq_n_s<mode>"
1477 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1478 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1479 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1483 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1484 [(set_attr "type" "mve_move")
1490 (define_insn "mve_vqdmulhq_s<mode>"
1492 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1493 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1494 (match_operand:MVE_2 2 "s_register_operand" "w")]
1498 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1499 [(set_attr "type" "mve_move")
1505 (define_insn "mve_vqrdmulhq_n_s<mode>"
1507 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1508 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1509 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1513 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1514 [(set_attr "type" "mve_move")
1520 (define_insn "mve_vqrdmulhq_s<mode>"
1522 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1523 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1524 (match_operand:MVE_2 2 "s_register_operand" "w")]
1528 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1529 [(set_attr "type" "mve_move")
1533 ;; [vqrshlq_n_s, vqrshlq_n_u])
1535 (define_insn "mve_vqrshlq_n_<supf><mode>"
1537 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1538 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1539 (match_operand:SI 2 "s_register_operand" "r")]
1543 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1544 [(set_attr "type" "mve_move")
1548 ;; [vqrshlq_s, vqrshlq_u])
1550 (define_insn "mve_vqrshlq_<supf><mode>"
1552 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1553 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1554 (match_operand:MVE_2 2 "s_register_operand" "w")]
1558 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1559 [(set_attr "type" "mve_move")
1563 ;; [vqshlq_n_s, vqshlq_n_u])
1565 (define_insn "mve_vqshlq_n_<supf><mode>"
1567 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1568 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1569 (match_operand:SI 2 "immediate_operand" "i")]
1573 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1574 [(set_attr "type" "mve_move")
1578 ;; [vqshlq_r_u, vqshlq_r_s])
1580 (define_insn "mve_vqshlq_r_<supf><mode>"
1582 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1583 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1584 (match_operand:SI 2 "s_register_operand" "r")]
1588 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
1589 [(set_attr "type" "mve_move")
1593 ;; [vqshlq_s, vqshlq_u])
1595 (define_insn "mve_vqshlq_<supf><mode>"
1597 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1598 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1599 (match_operand:MVE_2 2 "s_register_operand" "w")]
1603 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1604 [(set_attr "type" "mve_move")
1610 (define_insn "mve_vqshluq_n_s<mode>"
1612 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1613 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1614 (match_operand:SI 2 "mve_imm_7" "Ra")]
1618 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
1619 [(set_attr "type" "mve_move")
1623 ;; [vqsubq_n_s, vqsubq_n_u])
1625 (define_insn "mve_vqsubq_n_<supf><mode>"
1627 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1628 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1629 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1633 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1634 [(set_attr "type" "mve_move")
1638 ;; [vqsubq_u, vqsubq_s])
1640 (define_insn "mve_vqsubq_<supf><mode>"
1642 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1643 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1644 (match_operand:MVE_2 2 "s_register_operand" "w")]
1648 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1649 [(set_attr "type" "mve_move")
1653 ;; [vrhaddq_s, vrhaddq_u])
1655 (define_insn "@mve_vrhaddq_<supf><mode>"
1657 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1658 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1659 (match_operand:MVE_2 2 "s_register_operand" "w")]
1663 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1664 [(set_attr "type" "mve_move")
1668 ;; [vrmulhq_s, vrmulhq_u])
1670 (define_insn "mve_vrmulhq_<supf><mode>"
1672 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1673 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1674 (match_operand:MVE_2 2 "s_register_operand" "w")]
1678 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1679 [(set_attr "type" "mve_move")
1683 ;; [vrshlq_n_u, vrshlq_n_s])
1685 (define_insn "mve_vrshlq_n_<supf><mode>"
1687 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1688 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1689 (match_operand:SI 2 "s_register_operand" "r")]
1693 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1694 [(set_attr "type" "mve_move")
1698 ;; [vrshlq_s, vrshlq_u])
1700 (define_insn "mve_vrshlq_<supf><mode>"
1702 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1703 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1704 (match_operand:MVE_2 2 "s_register_operand" "w")]
1708 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1709 [(set_attr "type" "mve_move")
1713 ;; [vrshrq_n_s, vrshrq_n_u])
1715 (define_insn "mve_vrshrq_n_<supf><mode>"
1717 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1718 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1719 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1723 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1724 [(set_attr "type" "mve_move")
1728 ;; [vshlq_n_u, vshlq_n_s])
1730 (define_insn "mve_vshlq_n_<supf><mode>"
1732 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1733 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1734 (match_operand:SI 2 "immediate_operand" "i")]
1738 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1739 [(set_attr "type" "mve_move")
1743 ;; [vshlq_r_s, vshlq_r_u])
1745 (define_insn "mve_vshlq_r_<supf><mode>"
1747 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1748 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1749 (match_operand:SI 2 "s_register_operand" "r")]
1753 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
1754 [(set_attr "type" "mve_move")
1758 ;; [vsubq_n_s, vsubq_n_u])
1760 (define_insn "mve_vsubq_n_<supf><mode>"
1762 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1763 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1764 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1768 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
1769 [(set_attr "type" "mve_move")
1773 ;; [vsubq_s, vsubq_u])
1775 (define_insn "mve_vsubq_<supf><mode>"
1777 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1778 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1779 (match_operand:MVE_2 2 "s_register_operand" "w")]
1783 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1784 [(set_attr "type" "mve_move")
1787 (define_insn "mve_vsubq<mode>"
1789 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1790 (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1791 (match_operand:MVE_2 2 "s_register_operand" "w")))
1794 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1795 [(set_attr "type" "mve_move")
1801 (define_insn "mve_vabdq_f<mode>"
1803 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1804 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1805 (match_operand:MVE_0 2 "s_register_operand" "w")]
1808 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1809 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
1810 [(set_attr "type" "mve_move")
1814 ;; [vaddlvaq_s vaddlvaq_u])
1816 (define_insn "mve_vaddlvaq_<supf>v4si"
1818 (set (match_operand:DI 0 "s_register_operand" "=r")
1819 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
1820 (match_operand:V4SI 2 "s_register_operand" "w")]
1824 "vaddlva.<supf>32 %Q0, %R0, %q2"
1825 [(set_attr "type" "mve_move")
1831 (define_insn "mve_vaddq_n_f<mode>"
1833 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1834 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1835 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1838 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1839 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
1840 [(set_attr "type" "mve_move")
1846 (define_insn "mve_vandq_f<mode>"
1848 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1849 (and:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
1850 (match_operand:MVE_0 2 "s_register_operand" "w")))
1852 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1853 "vand %q0, %q1, %q2"
1854 [(set_attr "type" "mve_move")
1860 (define_insn "mve_vbicq_f<mode>"
1862 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1863 (and:MVE_0 (not:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))
1864 (match_operand:MVE_0 2 "s_register_operand" "w")))
1866 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1867 "vbic %q0, %q1, %q2"
1868 [(set_attr "type" "mve_move")
1872 ;; [vbicq_n_s, vbicq_n_u])
1874 (define_insn "mve_vbicq_n_<supf><mode>"
1876 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1877 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
1878 (match_operand:SI 2 "immediate_operand" "i")]
1882 "vbic.i%#<V_sz_elem> %q0, %2"
1883 [(set_attr "type" "mve_move")
1887 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
1889 (define_insn "mve_vcaddq<mve_rot><mode>"
1891 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
1892 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1893 (match_operand:MVE_0 2 "s_register_operand" "w")]
1896 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1897 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
1898 [(set_attr "type" "mve_move")
1902 ;; [vcmpeqq_f, vcmpgeq_f, vcmpgtq_f, vcmpleq_f, vcmpltq_f, vcmpneq_f])
1904 (define_insn "@mve_vcmp<mve_cmp_op>q_f<mode>"
1906 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1907 (MVE_FP_COMPARISONS:HI (match_operand:MVE_0 1 "s_register_operand" "w")
1908 (match_operand:MVE_0 2 "s_register_operand" "w")))
1910 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1911 "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %q2"
1912 [(set_attr "type" "mve_move")
1916 ;; [vcmpeqq_n_f, vcmpgeq_n_f, vcmpgtq_n_f, vcmpleq_n_f, vcmpltq_n_f, vcmpneq_n_f])
1918 (define_insn "@mve_vcmp<mve_cmp_op>q_n_f<mode>"
1920 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1921 (MVE_FP_COMPARISONS:HI (match_operand:MVE_0 1 "s_register_operand" "w")
1922 (match_operand:<V_elem> 2 "s_register_operand" "r")))
1924 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1925 "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %2"
1926 [(set_attr "type" "mve_move")
1930 ;; [vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270])
1932 (define_insn "mve_vcmulq<mve_rot><mode>"
1934 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
1935 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1936 (match_operand:MVE_0 2 "s_register_operand" "w")]
1939 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1940 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
1941 [(set_attr "type" "mve_move")
1945 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
1947 (define_insn "mve_vctp<mode1>q_mhi"
1949 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1950 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
1951 (match_operand:HI 2 "vpr_register_operand" "Up")]
1955 "vpst\;vctpt.<mode1> %1"
1956 [(set_attr "type" "mve_move")
1957 (set_attr "length""8")])
1960 ;; [vcvtbq_f16_f32])
1962 (define_insn "mve_vcvtbq_f16_f32v8hf"
1964 (set (match_operand:V8HF 0 "s_register_operand" "=w")
1965 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
1966 (match_operand:V4SF 2 "s_register_operand" "w")]
1969 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1970 "vcvtb.f16.f32 %q0, %q2"
1971 [(set_attr "type" "mve_move")
1975 ;; [vcvttq_f16_f32])
1977 (define_insn "mve_vcvttq_f16_f32v8hf"
1979 (set (match_operand:V8HF 0 "s_register_operand" "=w")
1980 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
1981 (match_operand:V4SF 2 "s_register_operand" "w")]
1984 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1985 "vcvtt.f16.f32 %q0, %q2"
1986 [(set_attr "type" "mve_move")
1992 (define_insn "mve_veorq_f<mode>"
1994 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1995 (xor:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
1996 (match_operand:MVE_0 2 "s_register_operand" "w")))
1998 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1999 "veor %q0, %q1, %q2"
2000 [(set_attr "type" "mve_move")
2006 (define_insn "mve_vmaxnmaq_f<mode>"
2008 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2009 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2010 (match_operand:MVE_0 2 "s_register_operand" "w")]
2013 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2014 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
2015 [(set_attr "type" "mve_move")
2021 (define_insn "mve_vmaxnmavq_f<mode>"
2023 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2024 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2025 (match_operand:MVE_0 2 "s_register_operand" "w")]
2028 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2029 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
2030 [(set_attr "type" "mve_move")
2036 (define_insn "mve_vmaxnmq_f<mode>"
2038 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2039 (smax:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2040 (match_operand:MVE_0 2 "s_register_operand" "w")))
2042 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2043 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
2044 [(set_attr "type" "mve_move")
2050 (define_insn "mve_vmaxnmvq_f<mode>"
2052 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2053 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2054 (match_operand:MVE_0 2 "s_register_operand" "w")]
2057 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2058 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
2059 [(set_attr "type" "mve_move")
2065 (define_insn "mve_vminnmaq_f<mode>"
2067 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2068 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2069 (match_operand:MVE_0 2 "s_register_operand" "w")]
2072 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2073 "vminnma.f%#<V_sz_elem> %q0, %q2"
2074 [(set_attr "type" "mve_move")
2080 (define_insn "mve_vminnmavq_f<mode>"
2082 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2083 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2084 (match_operand:MVE_0 2 "s_register_operand" "w")]
2087 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2088 "vminnmav.f%#<V_sz_elem> %0, %q2"
2089 [(set_attr "type" "mve_move")
2095 (define_insn "mve_vminnmq_f<mode>"
2097 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2098 (smin:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2099 (match_operand:MVE_0 2 "s_register_operand" "w")))
2101 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2102 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
2103 [(set_attr "type" "mve_move")
2109 (define_insn "mve_vminnmvq_f<mode>"
2111 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2112 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2113 (match_operand:MVE_0 2 "s_register_operand" "w")]
2116 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2117 "vminnmv.f%#<V_sz_elem> %0, %q2"
2118 [(set_attr "type" "mve_move")
2122 ;; [vmlaldavq_u, vmlaldavq_s])
2124 (define_insn "mve_vmlaldavq_<supf><mode>"
2126 (set (match_operand:DI 0 "s_register_operand" "=r")
2127 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2128 (match_operand:MVE_5 2 "s_register_operand" "w")]
2132 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2133 [(set_attr "type" "mve_move")
2139 (define_insn "mve_vmlaldavxq_s<mode>"
2141 (set (match_operand:DI 0 "s_register_operand" "=r")
2142 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2143 (match_operand:MVE_5 2 "s_register_operand" "w")]
2147 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2148 [(set_attr "type" "mve_move")
2154 (define_insn "mve_vmlsldavq_s<mode>"
2156 (set (match_operand:DI 0 "s_register_operand" "=r")
2157 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2158 (match_operand:MVE_5 2 "s_register_operand" "w")]
2162 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2163 [(set_attr "type" "mve_move")
2169 (define_insn "mve_vmlsldavxq_s<mode>"
2171 (set (match_operand:DI 0 "s_register_operand" "=r")
2172 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2173 (match_operand:MVE_5 2 "s_register_operand" "w")]
2177 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2178 [(set_attr "type" "mve_move")
2182 ;; [vmovnbq_u, vmovnbq_s])
2184 (define_insn "mve_vmovnbq_<supf><mode>"
2186 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2187 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2188 (match_operand:MVE_5 2 "s_register_operand" "w")]
2192 "vmovnb.i%#<V_sz_elem> %q0, %q2"
2193 [(set_attr "type" "mve_move")
2197 ;; [vmovntq_s, vmovntq_u])
2199 (define_insn "mve_vmovntq_<supf><mode>"
2201 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2202 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2203 (match_operand:MVE_5 2 "s_register_operand" "w")]
2207 "vmovnt.i%#<V_sz_elem> %q0, %q2"
2208 [(set_attr "type" "mve_move")
2214 (define_insn "mve_vmulq_f<mode>"
2216 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2217 (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2218 (match_operand:MVE_0 2 "s_register_operand" "w")))
2220 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2221 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
2222 [(set_attr "type" "mve_move")
2228 (define_insn "mve_vmulq_n_f<mode>"
2230 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2231 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2232 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2235 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2236 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
2237 [(set_attr "type" "mve_move")
2243 (define_insn "mve_vornq_f<mode>"
2245 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2246 (ior:MVE_0 (not:MVE_0 (match_operand:MVE_0 2 "s_register_operand" "w"))
2247 (match_operand:MVE_0 1 "s_register_operand" "w")))
2249 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2250 "vorn %q0, %q1, %q2"
2251 [(set_attr "type" "mve_move")
2257 (define_insn "mve_vorrq_f<mode>"
2259 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2260 (ior:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2261 (match_operand:MVE_0 2 "s_register_operand" "w")))
2263 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2264 "vorr %q0, %q1, %q2"
2265 [(set_attr "type" "mve_move")
2269 ;; [vorrq_n_u, vorrq_n_s])
2271 (define_insn "mve_vorrq_n_<supf><mode>"
2273 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2274 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2275 (match_operand:SI 2 "immediate_operand" "i")]
2279 "vorr.i%#<V_sz_elem> %q0, %2"
2280 [(set_attr "type" "mve_move")
2286 (define_insn "mve_vqdmullbq_n_s<mode>"
2288 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2289 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2290 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2294 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
2295 [(set_attr "type" "mve_move")
2301 (define_insn "mve_vqdmullbq_s<mode>"
2303 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2304 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2305 (match_operand:MVE_5 2 "s_register_operand" "w")]
2309 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
2310 [(set_attr "type" "mve_move")
2316 (define_insn "mve_vqdmulltq_n_s<mode>"
2318 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2319 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2320 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2324 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
2325 [(set_attr "type" "mve_move")
2331 (define_insn "mve_vqdmulltq_s<mode>"
2333 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2334 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2335 (match_operand:MVE_5 2 "s_register_operand" "w")]
2339 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
2340 [(set_attr "type" "mve_move")
2344 ;; [vqmovnbq_u, vqmovnbq_s])
2346 (define_insn "mve_vqmovnbq_<supf><mode>"
2348 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2349 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2350 (match_operand:MVE_5 2 "s_register_operand" "w")]
2354 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
2355 [(set_attr "type" "mve_move")
2359 ;; [vqmovntq_u, vqmovntq_s])
2361 (define_insn "mve_vqmovntq_<supf><mode>"
2363 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2364 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2365 (match_operand:MVE_5 2 "s_register_operand" "w")]
2369 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
2370 [(set_attr "type" "mve_move")
2376 (define_insn "mve_vqmovunbq_s<mode>"
2378 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2379 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2380 (match_operand:MVE_5 2 "s_register_operand" "w")]
2384 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
2385 [(set_attr "type" "mve_move")
2391 (define_insn "mve_vqmovuntq_s<mode>"
2393 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2394 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2395 (match_operand:MVE_5 2 "s_register_operand" "w")]
2399 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
2400 [(set_attr "type" "mve_move")
2404 ;; [vrmlaldavhxq_s])
2406 (define_insn "mve_vrmlaldavhxq_sv4si"
2408 (set (match_operand:DI 0 "s_register_operand" "=r")
2409 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2410 (match_operand:V4SI 2 "s_register_operand" "w")]
2414 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
2415 [(set_attr "type" "mve_move")
2421 (define_insn "mve_vrmlsldavhq_sv4si"
2423 (set (match_operand:DI 0 "s_register_operand" "=r")
2424 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2425 (match_operand:V4SI 2 "s_register_operand" "w")]
2429 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
2430 [(set_attr "type" "mve_move")
2434 ;; [vrmlsldavhxq_s])
2436 (define_insn "mve_vrmlsldavhxq_sv4si"
2438 (set (match_operand:DI 0 "s_register_operand" "=r")
2439 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2440 (match_operand:V4SI 2 "s_register_operand" "w")]
2444 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
2445 [(set_attr "type" "mve_move")
2449 ;; [vshllbq_n_s, vshllbq_n_u])
2451 (define_insn "mve_vshllbq_n_<supf><mode>"
2453 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2454 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2455 (match_operand:SI 2 "immediate_operand" "i")]
2459 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2460 [(set_attr "type" "mve_move")
2464 ;; [vshlltq_n_u, vshlltq_n_s])
2466 (define_insn "mve_vshlltq_n_<supf><mode>"
2468 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2469 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2470 (match_operand:SI 2 "immediate_operand" "i")]
2474 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2475 [(set_attr "type" "mve_move")
2481 (define_insn "mve_vsubq_f<mode>"
2483 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2484 (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2485 (match_operand:MVE_0 2 "s_register_operand" "w")))
2487 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2488 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
2489 [(set_attr "type" "mve_move")
2493 ;; [vmulltq_poly_p])
2495 (define_insn "mve_vmulltq_poly_p<mode>"
2497 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2498 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2499 (match_operand:MVE_3 2 "s_register_operand" "w")]
2503 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
2504 [(set_attr "type" "mve_move")
2508 ;; [vmullbq_poly_p])
2510 (define_insn "mve_vmullbq_poly_p<mode>"
2512 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2513 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2514 (match_operand:MVE_3 2 "s_register_operand" "w")]
2518 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
2519 [(set_attr "type" "mve_move")
2523 ;; [vrmlaldavhq_u vrmlaldavhq_s])
2525 (define_insn "mve_vrmlaldavhq_<supf>v4si"
2527 (set (match_operand:DI 0 "s_register_operand" "=r")
2528 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2529 (match_operand:V4SI 2 "s_register_operand" "w")]
2533 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
2534 [(set_attr "type" "mve_move")
2538 ;; [vbicq_m_n_s, vbicq_m_n_u])
2540 (define_insn "mve_vbicq_m_n_<supf><mode>"
2542 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2543 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2544 (match_operand:SI 2 "immediate_operand" "i")
2545 (match_operand:HI 3 "vpr_register_operand" "Up")]
2549 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
2550 [(set_attr "type" "mve_move")
2551 (set_attr "length""8")])
2555 (define_insn "mve_vcmpeqq_m_f<mode>"
2557 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2558 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2559 (match_operand:MVE_0 2 "s_register_operand" "w")
2560 (match_operand:HI 3 "vpr_register_operand" "Up")]
2563 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2564 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
2565 [(set_attr "type" "mve_move")
2566 (set_attr "length""8")])
2568 ;; [vcvtaq_m_u, vcvtaq_m_s])
2570 (define_insn "mve_vcvtaq_m_<supf><mode>"
2572 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2573 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2574 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2575 (match_operand:HI 3 "vpr_register_operand" "Up")]
2578 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2579 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
2580 [(set_attr "type" "mve_move")
2581 (set_attr "length""8")])
2583 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
2585 (define_insn "mve_vcvtq_m_to_f_<supf><mode>"
2587 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2588 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2589 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2590 (match_operand:HI 3 "vpr_register_operand" "Up")]
2593 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2594 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
2595 [(set_attr "type" "mve_move")
2596 (set_attr "length""8")])
2598 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
2600 (define_insn "mve_vqrshrnbq_n_<supf><mode>"
2602 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2603 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2604 (match_operand:MVE_5 2 "s_register_operand" "w")
2605 (match_operand:SI 3 "mve_imm_8" "Rb")]
2609 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
2610 [(set_attr "type" "mve_move")
2613 ;; [vqrshrunbq_n_s])
2615 (define_insn "mve_vqrshrunbq_n_s<mode>"
2617 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2618 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2619 (match_operand:MVE_5 2 "s_register_operand" "w")
2620 (match_operand:SI 3 "mve_imm_8" "Rb")]
2624 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
2625 [(set_attr "type" "mve_move")
2628 ;; [vrmlaldavhaq_s vrmlaldavhaq_u])
2630 (define_insn "mve_vrmlaldavhaq_<supf>v4si"
2632 (set (match_operand:DI 0 "s_register_operand" "=r")
2633 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2634 (match_operand:V4SI 2 "s_register_operand" "w")
2635 (match_operand:V4SI 3 "s_register_operand" "w")]
2639 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
2640 [(set_attr "type" "mve_move")
2644 ;; [vabavq_s, vabavq_u])
2646 (define_insn "mve_vabavq_<supf><mode>"
2648 (set (match_operand:SI 0 "s_register_operand" "=r")
2649 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
2650 (match_operand:MVE_2 2 "s_register_operand" "w")
2651 (match_operand:MVE_2 3 "s_register_operand" "w")]
2655 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
2656 [(set_attr "type" "mve_move")
2660 ;; [vshlcq_u vshlcq_s]
2662 (define_expand "mve_vshlcq_vec_<supf><mode>"
2663 [(match_operand:MVE_2 0 "s_register_operand")
2664 (match_operand:MVE_2 1 "s_register_operand")
2665 (match_operand:SI 2 "s_register_operand")
2666 (match_operand:SI 3 "mve_imm_32")
2667 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
2670 rtx ignore_wb = gen_reg_rtx (SImode);
2671 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
2672 operands[2], operands[3]));
2676 (define_expand "mve_vshlcq_carry_<supf><mode>"
2677 [(match_operand:SI 0 "s_register_operand")
2678 (match_operand:MVE_2 1 "s_register_operand")
2679 (match_operand:SI 2 "s_register_operand")
2680 (match_operand:SI 3 "mve_imm_32")
2681 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
2684 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
2685 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
2686 operands[2], operands[3]));
2690 (define_insn "mve_vshlcq_<supf><mode>"
2691 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
2692 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
2693 (match_operand:SI 3 "s_register_operand" "1")
2694 (match_operand:SI 4 "mve_imm_32" "Rf")]
2696 (set (match_operand:SI 1 "s_register_operand" "=r")
2697 (unspec:SI [(match_dup 2)
2702 "vshlc %q0, %1, %4")
2707 (define_insn "mve_vabsq_m_s<mode>"
2709 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2710 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2711 (match_operand:MVE_2 2 "s_register_operand" "w")
2712 (match_operand:HI 3 "vpr_register_operand" "Up")]
2716 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
2717 [(set_attr "type" "mve_move")
2718 (set_attr "length""8")])
2721 ;; [vaddvaq_p_u, vaddvaq_p_s])
2723 (define_insn "mve_vaddvaq_p_<supf><mode>"
2725 (set (match_operand:SI 0 "s_register_operand" "=Te")
2726 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
2727 (match_operand:MVE_2 2 "s_register_operand" "w")
2728 (match_operand:HI 3 "vpr_register_operand" "Up")]
2732 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
2733 [(set_attr "type" "mve_move")
2734 (set_attr "length""8")])
2739 (define_insn "mve_vclsq_m_s<mode>"
2741 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2742 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2743 (match_operand:MVE_2 2 "s_register_operand" "w")
2744 (match_operand:HI 3 "vpr_register_operand" "Up")]
2748 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
2749 [(set_attr "type" "mve_move")
2750 (set_attr "length""8")])
2753 ;; [vclzq_m_s, vclzq_m_u])
2755 (define_insn "mve_vclzq_m_<supf><mode>"
2757 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2758 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2759 (match_operand:MVE_2 2 "s_register_operand" "w")
2760 (match_operand:HI 3 "vpr_register_operand" "Up")]
2764 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
2765 [(set_attr "type" "mve_move")
2766 (set_attr "length""8")])
2771 (define_insn "mve_vcmpcsq_m_n_u<mode>"
2773 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2774 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2775 (match_operand:<V_elem> 2 "s_register_operand" "r")
2776 (match_operand:HI 3 "vpr_register_operand" "Up")]
2780 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
2781 [(set_attr "type" "mve_move")
2782 (set_attr "length""8")])
2787 (define_insn "mve_vcmpcsq_m_u<mode>"
2789 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2790 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2791 (match_operand:MVE_2 2 "s_register_operand" "w")
2792 (match_operand:HI 3 "vpr_register_operand" "Up")]
2796 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
2797 [(set_attr "type" "mve_move")
2798 (set_attr "length""8")])
2801 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
2803 (define_insn "mve_vcmpeqq_m_n_<supf><mode>"
2805 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2806 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2807 (match_operand:<V_elem> 2 "s_register_operand" "r")
2808 (match_operand:HI 3 "vpr_register_operand" "Up")]
2812 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
2813 [(set_attr "type" "mve_move")
2814 (set_attr "length""8")])
2817 ;; [vcmpeqq_m_u, vcmpeqq_m_s])
2819 (define_insn "mve_vcmpeqq_m_<supf><mode>"
2821 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2822 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2823 (match_operand:MVE_2 2 "s_register_operand" "w")
2824 (match_operand:HI 3 "vpr_register_operand" "Up")]
2828 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
2829 [(set_attr "type" "mve_move")
2830 (set_attr "length""8")])
2835 (define_insn "mve_vcmpgeq_m_n_s<mode>"
2837 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2838 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2839 (match_operand:<V_elem> 2 "s_register_operand" "r")
2840 (match_operand:HI 3 "vpr_register_operand" "Up")]
2844 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
2845 [(set_attr "type" "mve_move")
2846 (set_attr "length""8")])
2851 (define_insn "mve_vcmpgeq_m_s<mode>"
2853 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2854 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2855 (match_operand:MVE_2 2 "s_register_operand" "w")
2856 (match_operand:HI 3 "vpr_register_operand" "Up")]
2860 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
2861 [(set_attr "type" "mve_move")
2862 (set_attr "length""8")])
2867 (define_insn "mve_vcmpgtq_m_n_s<mode>"
2869 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2870 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2871 (match_operand:<V_elem> 2 "s_register_operand" "r")
2872 (match_operand:HI 3 "vpr_register_operand" "Up")]
2876 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
2877 [(set_attr "type" "mve_move")
2878 (set_attr "length""8")])
2883 (define_insn "mve_vcmpgtq_m_s<mode>"
2885 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2886 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2887 (match_operand:MVE_2 2 "s_register_operand" "w")
2888 (match_operand:HI 3 "vpr_register_operand" "Up")]
2892 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
2893 [(set_attr "type" "mve_move")
2894 (set_attr "length""8")])
2899 (define_insn "mve_vcmphiq_m_n_u<mode>"
2901 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2902 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2903 (match_operand:<V_elem> 2 "s_register_operand" "r")
2904 (match_operand:HI 3 "vpr_register_operand" "Up")]
2908 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
2909 [(set_attr "type" "mve_move")
2910 (set_attr "length""8")])
2915 (define_insn "mve_vcmphiq_m_u<mode>"
2917 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2918 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2919 (match_operand:MVE_2 2 "s_register_operand" "w")
2920 (match_operand:HI 3 "vpr_register_operand" "Up")]
2924 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
2925 [(set_attr "type" "mve_move")
2926 (set_attr "length""8")])
2931 (define_insn "mve_vcmpleq_m_n_s<mode>"
2933 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2934 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2935 (match_operand:<V_elem> 2 "s_register_operand" "r")
2936 (match_operand:HI 3 "vpr_register_operand" "Up")]
2940 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
2941 [(set_attr "type" "mve_move")
2942 (set_attr "length""8")])
2947 (define_insn "mve_vcmpleq_m_s<mode>"
2949 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2950 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2951 (match_operand:MVE_2 2 "s_register_operand" "w")
2952 (match_operand:HI 3 "vpr_register_operand" "Up")]
2956 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
2957 [(set_attr "type" "mve_move")
2958 (set_attr "length""8")])
2963 (define_insn "mve_vcmpltq_m_n_s<mode>"
2965 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2966 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2967 (match_operand:<V_elem> 2 "s_register_operand" "r")
2968 (match_operand:HI 3 "vpr_register_operand" "Up")]
2972 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
2973 [(set_attr "type" "mve_move")
2974 (set_attr "length""8")])
2979 (define_insn "mve_vcmpltq_m_s<mode>"
2981 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2982 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2983 (match_operand:MVE_2 2 "s_register_operand" "w")
2984 (match_operand:HI 3 "vpr_register_operand" "Up")]
2988 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
2989 [(set_attr "type" "mve_move")
2990 (set_attr "length""8")])
2993 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
2995 (define_insn "mve_vcmpneq_m_n_<supf><mode>"
2997 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2998 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2999 (match_operand:<V_elem> 2 "s_register_operand" "r")
3000 (match_operand:HI 3 "vpr_register_operand" "Up")]
3004 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
3005 [(set_attr "type" "mve_move")
3006 (set_attr "length""8")])
3009 ;; [vcmpneq_m_s, vcmpneq_m_u])
3011 (define_insn "mve_vcmpneq_m_<supf><mode>"
3013 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3014 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3015 (match_operand:MVE_2 2 "s_register_operand" "w")
3016 (match_operand:HI 3 "vpr_register_operand" "Up")]
3020 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
3021 [(set_attr "type" "mve_move")
3022 (set_attr "length""8")])
3025 ;; [vdupq_m_n_s, vdupq_m_n_u])
3027 (define_insn "mve_vdupq_m_n_<supf><mode>"
3029 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3030 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3031 (match_operand:<V_elem> 2 "s_register_operand" "r")
3032 (match_operand:HI 3 "vpr_register_operand" "Up")]
3036 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3037 [(set_attr "type" "mve_move")
3038 (set_attr "length""8")])
3043 (define_insn "mve_vmaxaq_m_s<mode>"
3045 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3046 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3047 (match_operand:MVE_2 2 "s_register_operand" "w")
3048 (match_operand:HI 3 "vpr_register_operand" "Up")]
3052 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
3053 [(set_attr "type" "mve_move")
3054 (set_attr "length""8")])
3059 (define_insn "mve_vmaxavq_p_s<mode>"
3061 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3062 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3063 (match_operand:MVE_2 2 "s_register_operand" "w")
3064 (match_operand:HI 3 "vpr_register_operand" "Up")]
3068 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
3069 [(set_attr "type" "mve_move")
3070 (set_attr "length""8")])
3073 ;; [vmaxvq_p_u, vmaxvq_p_s])
3075 (define_insn "mve_vmaxvq_p_<supf><mode>"
3077 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3078 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3079 (match_operand:MVE_2 2 "s_register_operand" "w")
3080 (match_operand:HI 3 "vpr_register_operand" "Up")]
3084 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
3085 [(set_attr "type" "mve_move")
3086 (set_attr "length""8")])
3091 (define_insn "mve_vminaq_m_s<mode>"
3093 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3094 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3095 (match_operand:MVE_2 2 "s_register_operand" "w")
3096 (match_operand:HI 3 "vpr_register_operand" "Up")]
3100 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
3101 [(set_attr "type" "mve_move")
3102 (set_attr "length""8")])
3107 (define_insn "mve_vminavq_p_s<mode>"
3109 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3110 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3111 (match_operand:MVE_2 2 "s_register_operand" "w")
3112 (match_operand:HI 3 "vpr_register_operand" "Up")]
3116 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
3117 [(set_attr "type" "mve_move")
3118 (set_attr "length""8")])
3121 ;; [vminvq_p_s, vminvq_p_u])
3123 (define_insn "mve_vminvq_p_<supf><mode>"
3125 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3126 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3127 (match_operand:MVE_2 2 "s_register_operand" "w")
3128 (match_operand:HI 3 "vpr_register_operand" "Up")]
3132 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
3133 [(set_attr "type" "mve_move")
3134 (set_attr "length""8")])
3137 ;; [vmladavaq_u, vmladavaq_s])
3139 (define_insn "mve_vmladavaq_<supf><mode>"
3141 (set (match_operand:SI 0 "s_register_operand" "=Te")
3142 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3143 (match_operand:MVE_2 2 "s_register_operand" "w")
3144 (match_operand:MVE_2 3 "s_register_operand" "w")]
3148 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
3149 [(set_attr "type" "mve_move")
3153 ;; [vmladavq_p_u, vmladavq_p_s])
3155 (define_insn "mve_vmladavq_p_<supf><mode>"
3157 (set (match_operand:SI 0 "s_register_operand" "=Te")
3158 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3159 (match_operand:MVE_2 2 "s_register_operand" "w")
3160 (match_operand:HI 3 "vpr_register_operand" "Up")]
3164 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
3165 [(set_attr "type" "mve_move")
3166 (set_attr "length""8")])
3171 (define_insn "mve_vmladavxq_p_s<mode>"
3173 (set (match_operand:SI 0 "s_register_operand" "=Te")
3174 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3175 (match_operand:MVE_2 2 "s_register_operand" "w")
3176 (match_operand:HI 3 "vpr_register_operand" "Up")]
3180 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
3181 [(set_attr "type" "mve_move")
3182 (set_attr "length""8")])
3185 ;; [vmlaq_n_u, vmlaq_n_s])
3187 (define_insn "mve_vmlaq_n_<supf><mode>"
3189 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3190 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3191 (match_operand:MVE_2 2 "s_register_operand" "w")
3192 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3196 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
3197 [(set_attr "type" "mve_move")
3201 ;; [vmlasq_n_u, vmlasq_n_s])
3203 (define_insn "mve_vmlasq_n_<supf><mode>"
3205 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3206 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3207 (match_operand:MVE_2 2 "s_register_operand" "w")
3208 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3212 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
3213 [(set_attr "type" "mve_move")
3219 (define_insn "mve_vmlsdavq_p_s<mode>"
3221 (set (match_operand:SI 0 "s_register_operand" "=Te")
3222 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3223 (match_operand:MVE_2 2 "s_register_operand" "w")
3224 (match_operand:HI 3 "vpr_register_operand" "Up")]
3228 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
3229 [(set_attr "type" "mve_move")
3230 (set_attr "length""8")])
3235 (define_insn "mve_vmlsdavxq_p_s<mode>"
3237 (set (match_operand:SI 0 "s_register_operand" "=Te")
3238 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3239 (match_operand:MVE_2 2 "s_register_operand" "w")
3240 (match_operand:HI 3 "vpr_register_operand" "Up")]
3244 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
3245 [(set_attr "type" "mve_move")
3246 (set_attr "length""8")])
3249 ;; [vmvnq_m_s, vmvnq_m_u])
3251 (define_insn "mve_vmvnq_m_<supf><mode>"
3253 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3254 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3255 (match_operand:MVE_2 2 "s_register_operand" "w")
3256 (match_operand:HI 3 "vpr_register_operand" "Up")]
3260 "vpst\;vmvnt %q0, %q2"
3261 [(set_attr "type" "mve_move")
3262 (set_attr "length""8")])
3267 (define_insn "mve_vnegq_m_s<mode>"
3269 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3270 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3271 (match_operand:MVE_2 2 "s_register_operand" "w")
3272 (match_operand:HI 3 "vpr_register_operand" "Up")]
3276 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
3277 [(set_attr "type" "mve_move")
3278 (set_attr "length""8")])
3281 ;; [vpselq_u, vpselq_s])
3283 (define_insn "@mve_vpselq_<supf><mode>"
3285 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
3286 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
3287 (match_operand:MVE_1 2 "s_register_operand" "w")
3288 (match_operand:HI 3 "vpr_register_operand" "Up")]
3292 "vpsel %q0, %q1, %q2"
3293 [(set_attr "type" "mve_move")
3299 (define_insn "mve_vqabsq_m_s<mode>"
3301 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3302 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3303 (match_operand:MVE_2 2 "s_register_operand" "w")
3304 (match_operand:HI 3 "vpr_register_operand" "Up")]
3308 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
3309 [(set_attr "type" "mve_move")
3310 (set_attr "length""8")])
3315 (define_insn "mve_vqdmlahq_n_<supf><mode>"
3317 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3318 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3319 (match_operand:MVE_2 2 "s_register_operand" "w")
3320 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3324 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3325 [(set_attr "type" "mve_move")
3331 (define_insn "mve_vqdmlashq_n_<supf><mode>"
3333 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3334 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3335 (match_operand:MVE_2 2 "s_register_operand" "w")
3336 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3340 "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3341 [(set_attr "type" "mve_move")
3347 (define_insn "mve_vqnegq_m_s<mode>"
3349 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3350 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3351 (match_operand:MVE_2 2 "s_register_operand" "w")
3352 (match_operand:HI 3 "vpr_register_operand" "Up")]
3356 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
3357 [(set_attr "type" "mve_move")
3358 (set_attr "length""8")])
3363 (define_insn "mve_vqrdmladhq_s<mode>"
3365 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3366 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3367 (match_operand:MVE_2 2 "s_register_operand" "w")
3368 (match_operand:MVE_2 3 "s_register_operand" "w")]
3372 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3373 [(set_attr "type" "mve_move")
3379 (define_insn "mve_vqrdmladhxq_s<mode>"
3381 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3382 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3383 (match_operand:MVE_2 2 "s_register_operand" "w")
3384 (match_operand:MVE_2 3 "s_register_operand" "w")]
3388 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3389 [(set_attr "type" "mve_move")
3395 (define_insn "mve_vqrdmlahq_n_<supf><mode>"
3397 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3398 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3399 (match_operand:MVE_2 2 "s_register_operand" "w")
3400 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3404 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3405 [(set_attr "type" "mve_move")
3409 ;; [vqrdmlashq_n_s])
3411 (define_insn "mve_vqrdmlashq_n_<supf><mode>"
3413 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3414 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3415 (match_operand:MVE_2 2 "s_register_operand" "w")
3416 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3420 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3421 [(set_attr "type" "mve_move")
3427 (define_insn "mve_vqrdmlsdhq_s<mode>"
3429 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3430 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3431 (match_operand:MVE_2 2 "s_register_operand" "w")
3432 (match_operand:MVE_2 3 "s_register_operand" "w")]
3436 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3437 [(set_attr "type" "mve_move")
3443 (define_insn "mve_vqrdmlsdhxq_s<mode>"
3445 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3446 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3447 (match_operand:MVE_2 2 "s_register_operand" "w")
3448 (match_operand:MVE_2 3 "s_register_operand" "w")]
3452 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3453 [(set_attr "type" "mve_move")
3457 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
3459 (define_insn "mve_vqrshlq_m_n_<supf><mode>"
3461 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3462 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3463 (match_operand:SI 2 "s_register_operand" "r")
3464 (match_operand:HI 3 "vpr_register_operand" "Up")]
3468 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
3469 [(set_attr "type" "mve_move")
3470 (set_attr "length""8")])
3473 ;; [vqshlq_m_r_u, vqshlq_m_r_s])
3475 (define_insn "mve_vqshlq_m_r_<supf><mode>"
3477 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3478 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3479 (match_operand:SI 2 "s_register_operand" "r")
3480 (match_operand:HI 3 "vpr_register_operand" "Up")]
3484 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3485 [(set_attr "type" "mve_move")
3486 (set_attr "length""8")])
3489 ;; [vrev64q_m_u, vrev64q_m_s])
3491 (define_insn "mve_vrev64q_m_<supf><mode>"
3493 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3494 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3495 (match_operand:MVE_2 2 "s_register_operand" "w")
3496 (match_operand:HI 3 "vpr_register_operand" "Up")]
3500 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
3501 [(set_attr "type" "mve_move")
3502 (set_attr "length""8")])
3505 ;; [vrshlq_m_n_s, vrshlq_m_n_u])
3507 (define_insn "mve_vrshlq_m_n_<supf><mode>"
3509 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3510 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3511 (match_operand:SI 2 "s_register_operand" "r")
3512 (match_operand:HI 3 "vpr_register_operand" "Up")]
3516 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3517 [(set_attr "type" "mve_move")
3518 (set_attr "length""8")])
3521 ;; [vshlq_m_r_u, vshlq_m_r_s])
3523 (define_insn "mve_vshlq_m_r_<supf><mode>"
3525 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3526 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3527 (match_operand:SI 2 "s_register_operand" "r")
3528 (match_operand:HI 3 "vpr_register_operand" "Up")]
3532 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3533 [(set_attr "type" "mve_move")
3534 (set_attr "length""8")])
3537 ;; [vsliq_n_u, vsliq_n_s])
3539 (define_insn "mve_vsliq_n_<supf><mode>"
3541 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3542 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3543 (match_operand:MVE_2 2 "s_register_operand" "w")
3544 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
3548 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
3549 [(set_attr "type" "mve_move")
3553 ;; [vsriq_n_u, vsriq_n_s])
3555 (define_insn "mve_vsriq_n_<supf><mode>"
3557 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3558 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3559 (match_operand:MVE_2 2 "s_register_operand" "w")
3560 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
3564 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
3565 [(set_attr "type" "mve_move")
3571 (define_insn "mve_vqdmlsdhxq_s<mode>"
3573 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3574 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3575 (match_operand:MVE_2 2 "s_register_operand" "w")
3576 (match_operand:MVE_2 3 "s_register_operand" "w")]
3580 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3581 [(set_attr "type" "mve_move")
3587 (define_insn "mve_vqdmlsdhq_s<mode>"
3589 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3590 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3591 (match_operand:MVE_2 2 "s_register_operand" "w")
3592 (match_operand:MVE_2 3 "s_register_operand" "w")]
3596 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3597 [(set_attr "type" "mve_move")
3603 (define_insn "mve_vqdmladhxq_s<mode>"
3605 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3606 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3607 (match_operand:MVE_2 2 "s_register_operand" "w")
3608 (match_operand:MVE_2 3 "s_register_operand" "w")]
3612 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3613 [(set_attr "type" "mve_move")
3619 (define_insn "mve_vqdmladhq_s<mode>"
3621 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3622 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3623 (match_operand:MVE_2 2 "s_register_operand" "w")
3624 (match_operand:MVE_2 3 "s_register_operand" "w")]
3628 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3629 [(set_attr "type" "mve_move")
3635 (define_insn "mve_vmlsdavaxq_s<mode>"
3637 (set (match_operand:SI 0 "s_register_operand" "=Te")
3638 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3639 (match_operand:MVE_2 2 "s_register_operand" "w")
3640 (match_operand:MVE_2 3 "s_register_operand" "w")]
3644 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
3645 [(set_attr "type" "mve_move")
3651 (define_insn "mve_vmlsdavaq_s<mode>"
3653 (set (match_operand:SI 0 "s_register_operand" "=Te")
3654 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3655 (match_operand:MVE_2 2 "s_register_operand" "w")
3656 (match_operand:MVE_2 3 "s_register_operand" "w")]
3660 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
3661 [(set_attr "type" "mve_move")
3667 (define_insn "mve_vmladavaxq_s<mode>"
3669 (set (match_operand:SI 0 "s_register_operand" "=Te")
3670 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3671 (match_operand:MVE_2 2 "s_register_operand" "w")
3672 (match_operand:MVE_2 3 "s_register_operand" "w")]
3676 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
3677 [(set_attr "type" "mve_move")
3682 (define_insn "mve_vabsq_m_f<mode>"
3684 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3685 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3686 (match_operand:MVE_0 2 "s_register_operand" "w")
3687 (match_operand:HI 3 "vpr_register_operand" "Up")]
3690 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3691 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
3692 [(set_attr "type" "mve_move")
3693 (set_attr "length""8")])
3696 ;; [vaddlvaq_p_s vaddlvaq_p_u])
3698 (define_insn "mve_vaddlvaq_p_<supf>v4si"
3700 (set (match_operand:DI 0 "s_register_operand" "=r")
3701 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
3702 (match_operand:V4SI 2 "s_register_operand" "w")
3703 (match_operand:HI 3 "vpr_register_operand" "Up")]
3707 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
3708 [(set_attr "type" "mve_move")
3709 (set_attr "length""8")])
3711 ;; [vcmlaq, vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270])
3713 (define_insn "mve_vcmlaq<mve_rot><mode>"
3715 (set (match_operand:MVE_0 0 "s_register_operand" "=w,w")
3716 (plus:MVE_0 (match_operand:MVE_0 1 "reg_or_zero_operand" "Dz,0")
3718 [(match_operand:MVE_0 2 "s_register_operand" "w,w")
3719 (match_operand:MVE_0 3 "s_register_operand" "w,w")]
3722 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3724 vcmul.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>
3725 vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>"
3726 [(set_attr "type" "mve_move")
3732 (define_insn "mve_vcmpeqq_m_n_f<mode>"
3734 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3735 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3736 (match_operand:<V_elem> 2 "s_register_operand" "r")
3737 (match_operand:HI 3 "vpr_register_operand" "Up")]
3740 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3741 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
3742 [(set_attr "type" "mve_move")
3743 (set_attr "length""8")])
3748 (define_insn "mve_vcmpgeq_m_f<mode>"
3750 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3751 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3752 (match_operand:MVE_0 2 "s_register_operand" "w")
3753 (match_operand:HI 3 "vpr_register_operand" "Up")]
3756 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3757 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
3758 [(set_attr "type" "mve_move")
3759 (set_attr "length""8")])
3764 (define_insn "mve_vcmpgeq_m_n_f<mode>"
3766 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3767 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3768 (match_operand:<V_elem> 2 "s_register_operand" "r")
3769 (match_operand:HI 3 "vpr_register_operand" "Up")]
3772 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3773 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
3774 [(set_attr "type" "mve_move")
3775 (set_attr "length""8")])
3780 (define_insn "mve_vcmpgtq_m_f<mode>"
3782 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3783 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3784 (match_operand:MVE_0 2 "s_register_operand" "w")
3785 (match_operand:HI 3 "vpr_register_operand" "Up")]
3788 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3789 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
3790 [(set_attr "type" "mve_move")
3791 (set_attr "length""8")])
3796 (define_insn "mve_vcmpgtq_m_n_f<mode>"
3798 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3799 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3800 (match_operand:<V_elem> 2 "s_register_operand" "r")
3801 (match_operand:HI 3 "vpr_register_operand" "Up")]
3804 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3805 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
3806 [(set_attr "type" "mve_move")
3807 (set_attr "length""8")])
3812 (define_insn "mve_vcmpleq_m_f<mode>"
3814 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3815 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3816 (match_operand:MVE_0 2 "s_register_operand" "w")
3817 (match_operand:HI 3 "vpr_register_operand" "Up")]
3820 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3821 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
3822 [(set_attr "type" "mve_move")
3823 (set_attr "length""8")])
3828 (define_insn "mve_vcmpleq_m_n_f<mode>"
3830 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3831 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3832 (match_operand:<V_elem> 2 "s_register_operand" "r")
3833 (match_operand:HI 3 "vpr_register_operand" "Up")]
3836 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3837 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
3838 [(set_attr "type" "mve_move")
3839 (set_attr "length""8")])
3844 (define_insn "mve_vcmpltq_m_f<mode>"
3846 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3847 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3848 (match_operand:MVE_0 2 "s_register_operand" "w")
3849 (match_operand:HI 3 "vpr_register_operand" "Up")]
3852 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3853 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
3854 [(set_attr "type" "mve_move")
3855 (set_attr "length""8")])
3860 (define_insn "mve_vcmpltq_m_n_f<mode>"
3862 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3863 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3864 (match_operand:<V_elem> 2 "s_register_operand" "r")
3865 (match_operand:HI 3 "vpr_register_operand" "Up")]
3868 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3869 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
3870 [(set_attr "type" "mve_move")
3871 (set_attr "length""8")])
3876 (define_insn "mve_vcmpneq_m_f<mode>"
3878 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3879 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3880 (match_operand:MVE_0 2 "s_register_operand" "w")
3881 (match_operand:HI 3 "vpr_register_operand" "Up")]
3884 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3885 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
3886 [(set_attr "type" "mve_move")
3887 (set_attr "length""8")])
3892 (define_insn "mve_vcmpneq_m_n_f<mode>"
3894 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3895 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3896 (match_operand:<V_elem> 2 "s_register_operand" "r")
3897 (match_operand:HI 3 "vpr_register_operand" "Up")]
3900 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3901 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
3902 [(set_attr "type" "mve_move")
3903 (set_attr "length""8")])
3906 ;; [vcvtbq_m_f16_f32])
3908 (define_insn "mve_vcvtbq_m_f16_f32v8hf"
3910 (set (match_operand:V8HF 0 "s_register_operand" "=w")
3911 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
3912 (match_operand:V4SF 2 "s_register_operand" "w")
3913 (match_operand:HI 3 "vpr_register_operand" "Up")]
3916 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3917 "vpst\;vcvtbt.f16.f32 %q0, %q2"
3918 [(set_attr "type" "mve_move")
3919 (set_attr "length""8")])
3922 ;; [vcvtbq_m_f32_f16])
3924 (define_insn "mve_vcvtbq_m_f32_f16v4sf"
3926 (set (match_operand:V4SF 0 "s_register_operand" "=w")
3927 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
3928 (match_operand:V8HF 2 "s_register_operand" "w")
3929 (match_operand:HI 3 "vpr_register_operand" "Up")]
3932 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3933 "vpst\;vcvtbt.f32.f16 %q0, %q2"
3934 [(set_attr "type" "mve_move")
3935 (set_attr "length""8")])
3938 ;; [vcvttq_m_f16_f32])
3940 (define_insn "mve_vcvttq_m_f16_f32v8hf"
3942 (set (match_operand:V8HF 0 "s_register_operand" "=w")
3943 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
3944 (match_operand:V4SF 2 "s_register_operand" "w")
3945 (match_operand:HI 3 "vpr_register_operand" "Up")]
3948 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3949 "vpst\;vcvttt.f16.f32 %q0, %q2"
3950 [(set_attr "type" "mve_move")
3951 (set_attr "length""8")])
3954 ;; [vcvttq_m_f32_f16])
3956 (define_insn "mve_vcvttq_m_f32_f16v4sf"
3958 (set (match_operand:V4SF 0 "s_register_operand" "=w")
3959 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
3960 (match_operand:V8HF 2 "s_register_operand" "w")
3961 (match_operand:HI 3 "vpr_register_operand" "Up")]
3964 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3965 "vpst\;vcvttt.f32.f16 %q0, %q2"
3966 [(set_attr "type" "mve_move")
3967 (set_attr "length""8")])
3972 (define_insn "mve_vdupq_m_n_f<mode>"
3974 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3975 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3976 (match_operand:<V_elem> 2 "s_register_operand" "r")
3977 (match_operand:HI 3 "vpr_register_operand" "Up")]
3980 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3981 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3982 [(set_attr "type" "mve_move")
3983 (set_attr "length""8")])
3988 (define_insn "mve_vfmaq_f<mode>"
3990 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3991 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3992 (match_operand:MVE_0 2 "s_register_operand" "w")
3993 (match_operand:MVE_0 3 "s_register_operand" "w")]
3996 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3997 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
3998 [(set_attr "type" "mve_move")
4004 (define_insn "mve_vfmaq_n_f<mode>"
4006 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4007 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4008 (match_operand:MVE_0 2 "s_register_operand" "w")
4009 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4012 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4013 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
4014 [(set_attr "type" "mve_move")
4020 (define_insn "mve_vfmasq_n_f<mode>"
4022 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4023 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4024 (match_operand:MVE_0 2 "s_register_operand" "w")
4025 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4028 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4029 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
4030 [(set_attr "type" "mve_move")
4035 (define_insn "mve_vfmsq_f<mode>"
4037 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4038 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4039 (match_operand:MVE_0 2 "s_register_operand" "w")
4040 (match_operand:MVE_0 3 "s_register_operand" "w")]
4043 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4044 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
4045 [(set_attr "type" "mve_move")
4051 (define_insn "mve_vmaxnmaq_m_f<mode>"
4053 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4054 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4055 (match_operand:MVE_0 2 "s_register_operand" "w")
4056 (match_operand:HI 3 "vpr_register_operand" "Up")]
4059 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4060 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
4061 [(set_attr "type" "mve_move")
4062 (set_attr "length""8")])
4066 (define_insn "mve_vmaxnmavq_p_f<mode>"
4068 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4069 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4070 (match_operand:MVE_0 2 "s_register_operand" "w")
4071 (match_operand:HI 3 "vpr_register_operand" "Up")]
4074 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4075 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
4076 [(set_attr "type" "mve_move")
4077 (set_attr "length""8")])
4082 (define_insn "mve_vmaxnmvq_p_f<mode>"
4084 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4085 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4086 (match_operand:MVE_0 2 "s_register_operand" "w")
4087 (match_operand:HI 3 "vpr_register_operand" "Up")]
4090 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4091 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
4092 [(set_attr "type" "mve_move")
4093 (set_attr "length""8")])
4097 (define_insn "mve_vminnmaq_m_f<mode>"
4099 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4100 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4101 (match_operand:MVE_0 2 "s_register_operand" "w")
4102 (match_operand:HI 3 "vpr_register_operand" "Up")]
4105 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4106 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
4107 [(set_attr "type" "mve_move")
4108 (set_attr "length""8")])
4113 (define_insn "mve_vminnmavq_p_f<mode>"
4115 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4116 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4117 (match_operand:MVE_0 2 "s_register_operand" "w")
4118 (match_operand:HI 3 "vpr_register_operand" "Up")]
4121 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4122 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
4123 [(set_attr "type" "mve_move")
4124 (set_attr "length""8")])
4128 (define_insn "mve_vminnmvq_p_f<mode>"
4130 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4131 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4132 (match_operand:MVE_0 2 "s_register_operand" "w")
4133 (match_operand:HI 3 "vpr_register_operand" "Up")]
4136 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4137 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
4138 [(set_attr "type" "mve_move")
4139 (set_attr "length""8")])
4142 ;; [vmlaldavaq_s, vmlaldavaq_u])
4144 (define_insn "mve_vmlaldavaq_<supf><mode>"
4146 (set (match_operand:DI 0 "s_register_operand" "=r")
4147 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4148 (match_operand:MVE_5 2 "s_register_operand" "w")
4149 (match_operand:MVE_5 3 "s_register_operand" "w")]
4153 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4154 [(set_attr "type" "mve_move")
4160 (define_insn "mve_vmlaldavaxq_s<mode>"
4162 (set (match_operand:DI 0 "s_register_operand" "=r")
4163 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4164 (match_operand:MVE_5 2 "s_register_operand" "w")
4165 (match_operand:MVE_5 3 "s_register_operand" "w")]
4169 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4170 [(set_attr "type" "mve_move")
4174 ;; [vmlaldavq_p_u, vmlaldavq_p_s])
4176 (define_insn "mve_vmlaldavq_p_<supf><mode>"
4178 (set (match_operand:DI 0 "s_register_operand" "=r")
4179 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4180 (match_operand:MVE_5 2 "s_register_operand" "w")
4181 (match_operand:HI 3 "vpr_register_operand" "Up")]
4185 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4186 [(set_attr "type" "mve_move")
4187 (set_attr "length""8")])
4190 ;; [vmlaldavxq_p_s])
4192 (define_insn "mve_vmlaldavxq_p_s<mode>"
4194 (set (match_operand:DI 0 "s_register_operand" "=r")
4195 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4196 (match_operand:MVE_5 2 "s_register_operand" "w")
4197 (match_operand:HI 3 "vpr_register_operand" "Up")]
4201 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
4202 [(set_attr "type" "mve_move")
4203 (set_attr "length""8")])
4207 (define_insn "mve_vmlsldavaq_s<mode>"
4209 (set (match_operand:DI 0 "s_register_operand" "=r")
4210 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4211 (match_operand:MVE_5 2 "s_register_operand" "w")
4212 (match_operand:MVE_5 3 "s_register_operand" "w")]
4216 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4217 [(set_attr "type" "mve_move")
4223 (define_insn "mve_vmlsldavaxq_s<mode>"
4225 (set (match_operand:DI 0 "s_register_operand" "=r")
4226 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4227 (match_operand:MVE_5 2 "s_register_operand" "w")
4228 (match_operand:MVE_5 3 "s_register_operand" "w")]
4232 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4233 [(set_attr "type" "mve_move")
4239 (define_insn "mve_vmlsldavq_p_s<mode>"
4241 (set (match_operand:DI 0 "s_register_operand" "=r")
4242 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4243 (match_operand:MVE_5 2 "s_register_operand" "w")
4244 (match_operand:HI 3 "vpr_register_operand" "Up")]
4248 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4249 [(set_attr "type" "mve_move")
4250 (set_attr "length""8")])
4253 ;; [vmlsldavxq_p_s])
4255 (define_insn "mve_vmlsldavxq_p_s<mode>"
4257 (set (match_operand:DI 0 "s_register_operand" "=r")
4258 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4259 (match_operand:MVE_5 2 "s_register_operand" "w")
4260 (match_operand:HI 3 "vpr_register_operand" "Up")]
4264 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4265 [(set_attr "type" "mve_move")
4266 (set_attr "length""8")])
4268 ;; [vmovlbq_m_u, vmovlbq_m_s])
4270 (define_insn "mve_vmovlbq_m_<supf><mode>"
4272 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4273 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4274 (match_operand:MVE_3 2 "s_register_operand" "w")
4275 (match_operand:HI 3 "vpr_register_operand" "Up")]
4279 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
4280 [(set_attr "type" "mve_move")
4281 (set_attr "length""8")])
4283 ;; [vmovltq_m_u, vmovltq_m_s])
4285 (define_insn "mve_vmovltq_m_<supf><mode>"
4287 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4288 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4289 (match_operand:MVE_3 2 "s_register_operand" "w")
4290 (match_operand:HI 3 "vpr_register_operand" "Up")]
4294 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
4295 [(set_attr "type" "mve_move")
4296 (set_attr "length""8")])
4298 ;; [vmovnbq_m_u, vmovnbq_m_s])
4300 (define_insn "mve_vmovnbq_m_<supf><mode>"
4302 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4303 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4304 (match_operand:MVE_5 2 "s_register_operand" "w")
4305 (match_operand:HI 3 "vpr_register_operand" "Up")]
4309 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
4310 [(set_attr "type" "mve_move")
4311 (set_attr "length""8")])
4314 ;; [vmovntq_m_u, vmovntq_m_s])
4316 (define_insn "mve_vmovntq_m_<supf><mode>"
4318 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4319 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4320 (match_operand:MVE_5 2 "s_register_operand" "w")
4321 (match_operand:HI 3 "vpr_register_operand" "Up")]
4325 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
4326 [(set_attr "type" "mve_move")
4327 (set_attr "length""8")])
4330 ;; [vmvnq_m_n_u, vmvnq_m_n_s])
4332 (define_insn "mve_vmvnq_m_n_<supf><mode>"
4334 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4335 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4336 (match_operand:SI 2 "immediate_operand" "i")
4337 (match_operand:HI 3 "vpr_register_operand" "Up")]
4341 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
4342 [(set_attr "type" "mve_move")
4343 (set_attr "length""8")])
4347 (define_insn "mve_vnegq_m_f<mode>"
4349 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4350 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4351 (match_operand:MVE_0 2 "s_register_operand" "w")
4352 (match_operand:HI 3 "vpr_register_operand" "Up")]
4355 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4356 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
4357 [(set_attr "type" "mve_move")
4358 (set_attr "length""8")])
4361 ;; [vorrq_m_n_s, vorrq_m_n_u])
4363 (define_insn "mve_vorrq_m_n_<supf><mode>"
4365 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4366 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4367 (match_operand:SI 2 "immediate_operand" "i")
4368 (match_operand:HI 3 "vpr_register_operand" "Up")]
4372 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
4373 [(set_attr "type" "mve_move")
4374 (set_attr "length""8")])
4378 (define_insn "@mve_vpselq_f<mode>"
4380 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4381 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
4382 (match_operand:MVE_0 2 "s_register_operand" "w")
4383 (match_operand:HI 3 "vpr_register_operand" "Up")]
4386 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4387 "vpsel %q0, %q1, %q2"
4388 [(set_attr "type" "mve_move")
4392 ;; [vqmovnbq_m_s, vqmovnbq_m_u])
4394 (define_insn "mve_vqmovnbq_m_<supf><mode>"
4396 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4397 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4398 (match_operand:MVE_5 2 "s_register_operand" "w")
4399 (match_operand:HI 3 "vpr_register_operand" "Up")]
4403 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
4404 [(set_attr "type" "mve_move")
4405 (set_attr "length""8")])
4408 ;; [vqmovntq_m_u, vqmovntq_m_s])
4410 (define_insn "mve_vqmovntq_m_<supf><mode>"
4412 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4413 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4414 (match_operand:MVE_5 2 "s_register_operand" "w")
4415 (match_operand:HI 3 "vpr_register_operand" "Up")]
4419 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
4420 [(set_attr "type" "mve_move")
4421 (set_attr "length""8")])
4426 (define_insn "mve_vqmovunbq_m_s<mode>"
4428 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4429 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4430 (match_operand:MVE_5 2 "s_register_operand" "w")
4431 (match_operand:HI 3 "vpr_register_operand" "Up")]
4435 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
4436 [(set_attr "type" "mve_move")
4437 (set_attr "length""8")])
4442 (define_insn "mve_vqmovuntq_m_s<mode>"
4444 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4445 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4446 (match_operand:MVE_5 2 "s_register_operand" "w")
4447 (match_operand:HI 3 "vpr_register_operand" "Up")]
4451 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
4452 [(set_attr "type" "mve_move")
4453 (set_attr "length""8")])
4456 ;; [vqrshrntq_n_u, vqrshrntq_n_s])
4458 (define_insn "mve_vqrshrntq_n_<supf><mode>"
4460 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4461 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4462 (match_operand:MVE_5 2 "s_register_operand" "w")
4463 (match_operand:SI 3 "mve_imm_8" "Rb")]
4467 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4468 [(set_attr "type" "mve_move")
4472 ;; [vqrshruntq_n_s])
4474 (define_insn "mve_vqrshruntq_n_s<mode>"
4476 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4477 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4478 (match_operand:MVE_5 2 "s_register_operand" "w")
4479 (match_operand:SI 3 "mve_imm_8" "Rb")]
4483 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4484 [(set_attr "type" "mve_move")
4488 ;; [vqshrnbq_n_u, vqshrnbq_n_s])
4490 (define_insn "mve_vqshrnbq_n_<supf><mode>"
4492 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4493 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4494 (match_operand:MVE_5 2 "s_register_operand" "w")
4495 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4499 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4500 [(set_attr "type" "mve_move")
4504 ;; [vqshrntq_n_u, vqshrntq_n_s])
4506 (define_insn "mve_vqshrntq_n_<supf><mode>"
4508 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4509 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4510 (match_operand:MVE_5 2 "s_register_operand" "w")
4511 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4515 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4516 [(set_attr "type" "mve_move")
4522 (define_insn "mve_vqshrunbq_n_s<mode>"
4524 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4525 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4526 (match_operand:MVE_5 2 "s_register_operand" "w")
4527 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4531 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
4532 [(set_attr "type" "mve_move")
4538 (define_insn "mve_vqshruntq_n_s<mode>"
4540 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4541 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4542 (match_operand:MVE_5 2 "s_register_operand" "w")
4543 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4547 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4548 [(set_attr "type" "mve_move")
4554 (define_insn "mve_vrev32q_m_fv8hf"
4556 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4557 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4558 (match_operand:V8HF 2 "s_register_operand" "w")
4559 (match_operand:HI 3 "vpr_register_operand" "Up")]
4562 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4563 "vpst\;vrev32t.16 %q0, %q2"
4564 [(set_attr "type" "mve_move")
4565 (set_attr "length""8")])
4568 ;; [vrev32q_m_s, vrev32q_m_u])
4570 (define_insn "mve_vrev32q_m_<supf><mode>"
4572 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
4573 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
4574 (match_operand:MVE_3 2 "s_register_operand" "w")
4575 (match_operand:HI 3 "vpr_register_operand" "Up")]
4579 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
4580 [(set_attr "type" "mve_move")
4581 (set_attr "length""8")])
4586 (define_insn "mve_vrev64q_m_f<mode>"
4588 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4589 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4590 (match_operand:MVE_0 2 "s_register_operand" "w")
4591 (match_operand:HI 3 "vpr_register_operand" "Up")]
4594 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4595 "vpst\;vrev64t.%#<V_sz_elem> %q0, %q2"
4596 [(set_attr "type" "mve_move")
4597 (set_attr "length""8")])
4600 ;; [vrmlaldavhaxq_s])
4602 (define_insn "mve_vrmlaldavhaxq_sv4si"
4604 (set (match_operand:DI 0 "s_register_operand" "=r")
4605 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4606 (match_operand:V4SI 2 "s_register_operand" "w")
4607 (match_operand:V4SI 3 "s_register_operand" "w")]
4611 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
4612 [(set_attr "type" "mve_move")
4616 ;; [vrmlaldavhxq_p_s])
4618 (define_insn "mve_vrmlaldavhxq_p_sv4si"
4620 (set (match_operand:DI 0 "s_register_operand" "=r")
4621 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4622 (match_operand:V4SI 2 "s_register_operand" "w")
4623 (match_operand:HI 3 "vpr_register_operand" "Up")]
4627 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
4628 [(set_attr "type" "mve_move")
4629 (set_attr "length""8")])
4632 ;; [vrmlsldavhaxq_s])
4634 (define_insn "mve_vrmlsldavhaxq_sv4si"
4636 (set (match_operand:DI 0 "s_register_operand" "=r")
4637 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4638 (match_operand:V4SI 2 "s_register_operand" "w")
4639 (match_operand:V4SI 3 "s_register_operand" "w")]
4643 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
4644 [(set_attr "type" "mve_move")
4648 ;; [vrmlsldavhq_p_s])
4650 (define_insn "mve_vrmlsldavhq_p_sv4si"
4652 (set (match_operand:DI 0 "s_register_operand" "=r")
4653 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4654 (match_operand:V4SI 2 "s_register_operand" "w")
4655 (match_operand:HI 3 "vpr_register_operand" "Up")]
4659 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
4660 [(set_attr "type" "mve_move")
4661 (set_attr "length""8")])
4664 ;; [vrmlsldavhxq_p_s])
4666 (define_insn "mve_vrmlsldavhxq_p_sv4si"
4668 (set (match_operand:DI 0 "s_register_operand" "=r")
4669 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4670 (match_operand:V4SI 2 "s_register_operand" "w")
4671 (match_operand:HI 3 "vpr_register_operand" "Up")]
4675 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
4676 [(set_attr "type" "mve_move")
4677 (set_attr "length""8")])
4682 (define_insn "mve_vrndaq_m_f<mode>"
4684 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4685 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4686 (match_operand:MVE_0 2 "s_register_operand" "w")
4687 (match_operand:HI 3 "vpr_register_operand" "Up")]
4690 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4691 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
4692 [(set_attr "type" "mve_move")
4693 (set_attr "length""8")])
4698 (define_insn "mve_vrndmq_m_f<mode>"
4700 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4701 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4702 (match_operand:MVE_0 2 "s_register_operand" "w")
4703 (match_operand:HI 3 "vpr_register_operand" "Up")]
4706 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4707 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
4708 [(set_attr "type" "mve_move")
4709 (set_attr "length""8")])
4714 (define_insn "mve_vrndnq_m_f<mode>"
4716 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4717 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4718 (match_operand:MVE_0 2 "s_register_operand" "w")
4719 (match_operand:HI 3 "vpr_register_operand" "Up")]
4722 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4723 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
4724 [(set_attr "type" "mve_move")
4725 (set_attr "length""8")])
4730 (define_insn "mve_vrndpq_m_f<mode>"
4732 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4733 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4734 (match_operand:MVE_0 2 "s_register_operand" "w")
4735 (match_operand:HI 3 "vpr_register_operand" "Up")]
4738 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4739 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
4740 [(set_attr "type" "mve_move")
4741 (set_attr "length""8")])
4746 (define_insn "mve_vrndxq_m_f<mode>"
4748 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4749 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4750 (match_operand:MVE_0 2 "s_register_operand" "w")
4751 (match_operand:HI 3 "vpr_register_operand" "Up")]
4754 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4755 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
4756 [(set_attr "type" "mve_move")
4757 (set_attr "length""8")])
4760 ;; [vrshrnbq_n_s, vrshrnbq_n_u])
4762 (define_insn "mve_vrshrnbq_n_<supf><mode>"
4764 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4765 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4766 (match_operand:MVE_5 2 "s_register_operand" "w")
4767 (match_operand:SI 3 "mve_imm_8" "Rb")]
4771 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
4772 [(set_attr "type" "mve_move")
4776 ;; [vrshrntq_n_u, vrshrntq_n_s])
4778 (define_insn "mve_vrshrntq_n_<supf><mode>"
4780 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4781 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4782 (match_operand:MVE_5 2 "s_register_operand" "w")
4783 (match_operand:SI 3 "mve_imm_8" "Rb")]
4787 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
4788 [(set_attr "type" "mve_move")
4792 ;; [vshrnbq_n_u, vshrnbq_n_s])
4794 (define_insn "mve_vshrnbq_n_<supf><mode>"
4796 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4797 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4798 (match_operand:MVE_5 2 "s_register_operand" "w")
4799 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4803 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
4804 [(set_attr "type" "mve_move")
4808 ;; [vshrntq_n_s, vshrntq_n_u])
4810 (define_insn "mve_vshrntq_n_<supf><mode>"
4812 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4813 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4814 (match_operand:MVE_5 2 "s_register_operand" "w")
4815 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4819 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
4820 [(set_attr "type" "mve_move")
4824 ;; [vcvtmq_m_s, vcvtmq_m_u])
4826 (define_insn "mve_vcvtmq_m_<supf><mode>"
4828 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4829 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4830 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4831 (match_operand:HI 3 "vpr_register_operand" "Up")]
4834 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4835 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4836 [(set_attr "type" "mve_move")
4837 (set_attr "length""8")])
4840 ;; [vcvtpq_m_u, vcvtpq_m_s])
4842 (define_insn "mve_vcvtpq_m_<supf><mode>"
4844 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4845 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4846 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4847 (match_operand:HI 3 "vpr_register_operand" "Up")]
4850 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4851 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4852 [(set_attr "type" "mve_move")
4853 (set_attr "length""8")])
4856 ;; [vcvtnq_m_s, vcvtnq_m_u])
4858 (define_insn "mve_vcvtnq_m_<supf><mode>"
4860 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4861 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4862 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4863 (match_operand:HI 3 "vpr_register_operand" "Up")]
4866 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4867 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4868 [(set_attr "type" "mve_move")
4869 (set_attr "length""8")])
4872 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
4874 (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
4876 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4877 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4878 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4879 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
4880 (match_operand:HI 4 "vpr_register_operand" "Up")]
4883 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4884 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
4885 [(set_attr "type" "mve_move")
4886 (set_attr "length""8")])
4889 ;; [vrev16q_m_u, vrev16q_m_s])
4891 (define_insn "mve_vrev16q_m_<supf>v16qi"
4893 (set (match_operand:V16QI 0 "s_register_operand" "=w")
4894 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
4895 (match_operand:V16QI 2 "s_register_operand" "w")
4896 (match_operand:HI 3 "vpr_register_operand" "Up")]
4900 "vpst\;vrev16t.8 %q0, %q2"
4901 [(set_attr "type" "mve_move")
4902 (set_attr "length""8")])
4905 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
4907 (define_insn "mve_vcvtq_m_from_f_<supf><mode>"
4909 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4910 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4911 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4912 (match_operand:HI 3 "vpr_register_operand" "Up")]
4915 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4916 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4917 [(set_attr "type" "mve_move")
4918 (set_attr "length""8")])
4921 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
4923 (define_insn "mve_vrmlaldavhq_p_<supf>v4si"
4925 (set (match_operand:DI 0 "s_register_operand" "=r")
4926 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4927 (match_operand:V4SI 2 "s_register_operand" "w")
4928 (match_operand:HI 3 "vpr_register_operand" "Up")]
4932 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
4933 [(set_attr "type" "mve_move")
4934 (set_attr "length""8")])
4937 ;; [vrmlsldavhaq_s])
4939 (define_insn "mve_vrmlsldavhaq_sv4si"
4941 (set (match_operand:DI 0 "s_register_operand" "=r")
4942 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4943 (match_operand:V4SI 2 "s_register_operand" "w")
4944 (match_operand:V4SI 3 "s_register_operand" "w")]
4948 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
4949 [(set_attr "type" "mve_move")
4953 ;; [vabavq_p_s, vabavq_p_u])
4955 (define_insn "mve_vabavq_p_<supf><mode>"
4957 (set (match_operand:SI 0 "s_register_operand" "=r")
4958 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4959 (match_operand:MVE_2 2 "s_register_operand" "w")
4960 (match_operand:MVE_2 3 "s_register_operand" "w")
4961 (match_operand:HI 4 "vpr_register_operand" "Up")]
4965 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
4966 [(set_attr "type" "mve_move")
4972 (define_insn "mve_vqshluq_m_n_s<mode>"
4974 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4975 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4976 (match_operand:MVE_2 2 "s_register_operand" "w")
4977 (match_operand:SI 3 "mve_imm_7" "Ra")
4978 (match_operand:HI 4 "vpr_register_operand" "Up")]
4982 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
4983 [(set_attr "type" "mve_move")])
4986 ;; [vshlq_m_s, vshlq_m_u])
4988 (define_insn "mve_vshlq_m_<supf><mode>"
4990 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4991 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4992 (match_operand:MVE_2 2 "s_register_operand" "w")
4993 (match_operand:MVE_2 3 "s_register_operand" "w")
4994 (match_operand:HI 4 "vpr_register_operand" "Up")]
4998 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
4999 [(set_attr "type" "mve_move")])
5002 ;; [vsriq_m_n_s, vsriq_m_n_u])
5004 (define_insn "mve_vsriq_m_n_<supf><mode>"
5006 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5007 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5008 (match_operand:MVE_2 2 "s_register_operand" "w")
5009 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
5010 (match_operand:HI 4 "vpr_register_operand" "Up")]
5014 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
5015 [(set_attr "type" "mve_move")])
5018 ;; [vsubq_m_u, vsubq_m_s])
5020 (define_insn "mve_vsubq_m_<supf><mode>"
5022 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5023 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5024 (match_operand:MVE_2 2 "s_register_operand" "w")
5025 (match_operand:MVE_2 3 "s_register_operand" "w")
5026 (match_operand:HI 4 "vpr_register_operand" "Up")]
5030 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
5031 [(set_attr "type" "mve_move")])
5034 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
5036 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
5038 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5039 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5040 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5041 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5042 (match_operand:HI 4 "vpr_register_operand" "Up")]
5045 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5046 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5047 [(set_attr "type" "mve_move")
5048 (set_attr "length""8")])
5050 ;; [vabdq_m_s, vabdq_m_u])
5052 (define_insn "mve_vabdq_m_<supf><mode>"
5054 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5055 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5056 (match_operand:MVE_2 2 "s_register_operand" "w")
5057 (match_operand:MVE_2 3 "s_register_operand" "w")
5058 (match_operand:HI 4 "vpr_register_operand" "Up")]
5062 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5063 [(set_attr "type" "mve_move")
5064 (set_attr "length""8")])
5067 ;; [vaddq_m_n_s, vaddq_m_n_u])
5069 (define_insn "mve_vaddq_m_n_<supf><mode>"
5071 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5072 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5073 (match_operand:MVE_2 2 "s_register_operand" "w")
5074 (match_operand:<V_elem> 3 "s_register_operand" "r")
5075 (match_operand:HI 4 "vpr_register_operand" "Up")]
5079 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3"
5080 [(set_attr "type" "mve_move")
5081 (set_attr "length""8")])
5084 ;; [vaddq_m_u, vaddq_m_s])
5086 (define_insn "mve_vaddq_m_<supf><mode>"
5088 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5089 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5090 (match_operand:MVE_2 2 "s_register_operand" "w")
5091 (match_operand:MVE_2 3 "s_register_operand" "w")
5092 (match_operand:HI 4 "vpr_register_operand" "Up")]
5096 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3"
5097 [(set_attr "type" "mve_move")
5098 (set_attr "length""8")])
5101 ;; [vandq_m_u, vandq_m_s])
5103 (define_insn "mve_vandq_m_<supf><mode>"
5105 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5106 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5107 (match_operand:MVE_2 2 "s_register_operand" "w")
5108 (match_operand:MVE_2 3 "s_register_operand" "w")
5109 (match_operand:HI 4 "vpr_register_operand" "Up")]
5113 "vpst\;vandt %q0, %q2, %q3"
5114 [(set_attr "type" "mve_move")
5115 (set_attr "length""8")])
5118 ;; [vbicq_m_u, vbicq_m_s])
5120 (define_insn "mve_vbicq_m_<supf><mode>"
5122 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5123 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5124 (match_operand:MVE_2 2 "s_register_operand" "w")
5125 (match_operand:MVE_2 3 "s_register_operand" "w")
5126 (match_operand:HI 4 "vpr_register_operand" "Up")]
5130 "vpst\;vbict %q0, %q2, %q3"
5131 [(set_attr "type" "mve_move")
5132 (set_attr "length""8")])
5135 ;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
5137 (define_insn "mve_vbrsrq_m_n_<supf><mode>"
5139 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5140 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5141 (match_operand:MVE_2 2 "s_register_operand" "w")
5142 (match_operand:SI 3 "s_register_operand" "r")
5143 (match_operand:HI 4 "vpr_register_operand" "Up")]
5147 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
5148 [(set_attr "type" "mve_move")
5149 (set_attr "length""8")])
5152 ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
5154 (define_insn "mve_vcaddq_rot270_m_<supf><mode>"
5156 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5157 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5158 (match_operand:MVE_2 2 "s_register_operand" "w")
5159 (match_operand:MVE_2 3 "s_register_operand" "w")
5160 (match_operand:HI 4 "vpr_register_operand" "Up")]
5164 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270"
5165 [(set_attr "type" "mve_move")
5166 (set_attr "length""8")])
5169 ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
5171 (define_insn "mve_vcaddq_rot90_m_<supf><mode>"
5173 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5174 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5175 (match_operand:MVE_2 2 "s_register_operand" "w")
5176 (match_operand:MVE_2 3 "s_register_operand" "w")
5177 (match_operand:HI 4 "vpr_register_operand" "Up")]
5181 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90"
5182 [(set_attr "type" "mve_move")
5183 (set_attr "length""8")])
5186 ;; [veorq_m_s, veorq_m_u])
5188 (define_insn "mve_veorq_m_<supf><mode>"
5190 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5191 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5192 (match_operand:MVE_2 2 "s_register_operand" "w")
5193 (match_operand:MVE_2 3 "s_register_operand" "w")
5194 (match_operand:HI 4 "vpr_register_operand" "Up")]
5198 "vpst\;veort %q0, %q2, %q3"
5199 [(set_attr "type" "mve_move")
5200 (set_attr "length""8")])
5203 ;; [vhaddq_m_n_s, vhaddq_m_n_u])
5205 (define_insn "mve_vhaddq_m_n_<supf><mode>"
5207 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5208 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5209 (match_operand:MVE_2 2 "s_register_operand" "w")
5210 (match_operand:<V_elem> 3 "s_register_operand" "r")
5211 (match_operand:HI 4 "vpr_register_operand" "Up")]
5215 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5216 [(set_attr "type" "mve_move")
5217 (set_attr "length""8")])
5220 ;; [vhaddq_m_s, vhaddq_m_u])
5222 (define_insn "mve_vhaddq_m_<supf><mode>"
5224 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5225 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5226 (match_operand:MVE_2 2 "s_register_operand" "w")
5227 (match_operand:MVE_2 3 "s_register_operand" "w")
5228 (match_operand:HI 4 "vpr_register_operand" "Up")]
5232 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5233 [(set_attr "type" "mve_move")
5234 (set_attr "length""8")])
5237 ;; [vhsubq_m_n_s, vhsubq_m_n_u])
5239 (define_insn "mve_vhsubq_m_n_<supf><mode>"
5241 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5242 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5243 (match_operand:MVE_2 2 "s_register_operand" "w")
5244 (match_operand:<V_elem> 3 "s_register_operand" "r")
5245 (match_operand:HI 4 "vpr_register_operand" "Up")]
5249 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5250 [(set_attr "type" "mve_move")
5251 (set_attr "length""8")])
5254 ;; [vhsubq_m_s, vhsubq_m_u])
5256 (define_insn "mve_vhsubq_m_<supf><mode>"
5258 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5259 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5260 (match_operand:MVE_2 2 "s_register_operand" "w")
5261 (match_operand:MVE_2 3 "s_register_operand" "w")
5262 (match_operand:HI 4 "vpr_register_operand" "Up")]
5266 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5267 [(set_attr "type" "mve_move")
5268 (set_attr "length""8")])
5271 ;; [vmaxq_m_s, vmaxq_m_u])
5273 (define_insn "mve_vmaxq_m_<supf><mode>"
5275 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5276 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5277 (match_operand:MVE_2 2 "s_register_operand" "w")
5278 (match_operand:MVE_2 3 "s_register_operand" "w")
5279 (match_operand:HI 4 "vpr_register_operand" "Up")]
5283 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5284 [(set_attr "type" "mve_move")
5285 (set_attr "length""8")])
5288 ;; [vminq_m_s, vminq_m_u])
5290 (define_insn "mve_vminq_m_<supf><mode>"
5292 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5293 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5294 (match_operand:MVE_2 2 "s_register_operand" "w")
5295 (match_operand:MVE_2 3 "s_register_operand" "w")
5296 (match_operand:HI 4 "vpr_register_operand" "Up")]
5300 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5301 [(set_attr "type" "mve_move")
5302 (set_attr "length""8")])
5305 ;; [vmladavaq_p_u, vmladavaq_p_s])
5307 (define_insn "mve_vmladavaq_p_<supf><mode>"
5309 (set (match_operand:SI 0 "s_register_operand" "=Te")
5310 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5311 (match_operand:MVE_2 2 "s_register_operand" "w")
5312 (match_operand:MVE_2 3 "s_register_operand" "w")
5313 (match_operand:HI 4 "vpr_register_operand" "Up")]
5317 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3"
5318 [(set_attr "type" "mve_move")
5319 (set_attr "length""8")])
5322 ;; [vmlaq_m_n_s, vmlaq_m_n_u])
5324 (define_insn "mve_vmlaq_m_n_<supf><mode>"
5326 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5327 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5328 (match_operand:MVE_2 2 "s_register_operand" "w")
5329 (match_operand:<V_elem> 3 "s_register_operand" "r")
5330 (match_operand:HI 4 "vpr_register_operand" "Up")]
5334 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3"
5335 [(set_attr "type" "mve_move")
5336 (set_attr "length""8")])
5339 ;; [vmlasq_m_n_u, vmlasq_m_n_s])
5341 (define_insn "mve_vmlasq_m_n_<supf><mode>"
5343 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5344 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5345 (match_operand:MVE_2 2 "s_register_operand" "w")
5346 (match_operand:<V_elem> 3 "s_register_operand" "r")
5347 (match_operand:HI 4 "vpr_register_operand" "Up")]
5351 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3"
5352 [(set_attr "type" "mve_move")
5353 (set_attr "length""8")])
5356 ;; [vmulhq_m_s, vmulhq_m_u])
5358 (define_insn "mve_vmulhq_m_<supf><mode>"
5360 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5361 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5362 (match_operand:MVE_2 2 "s_register_operand" "w")
5363 (match_operand:MVE_2 3 "s_register_operand" "w")
5364 (match_operand:HI 4 "vpr_register_operand" "Up")]
5368 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5369 [(set_attr "type" "mve_move")
5370 (set_attr "length""8")])
5373 ;; [vmullbq_int_m_u, vmullbq_int_m_s])
5375 (define_insn "mve_vmullbq_int_m_<supf><mode>"
5377 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5378 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5379 (match_operand:MVE_2 2 "s_register_operand" "w")
5380 (match_operand:MVE_2 3 "s_register_operand" "w")
5381 (match_operand:HI 4 "vpr_register_operand" "Up")]
5385 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5386 [(set_attr "type" "mve_move")
5387 (set_attr "length""8")])
5390 ;; [vmulltq_int_m_s, vmulltq_int_m_u])
5392 (define_insn "mve_vmulltq_int_m_<supf><mode>"
5394 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5395 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5396 (match_operand:MVE_2 2 "s_register_operand" "w")
5397 (match_operand:MVE_2 3 "s_register_operand" "w")
5398 (match_operand:HI 4 "vpr_register_operand" "Up")]
5402 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5403 [(set_attr "type" "mve_move")
5404 (set_attr "length""8")])
5407 ;; [vmulq_m_n_u, vmulq_m_n_s])
5409 (define_insn "mve_vmulq_m_n_<supf><mode>"
5411 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5412 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5413 (match_operand:MVE_2 2 "s_register_operand" "w")
5414 (match_operand:<V_elem> 3 "s_register_operand" "r")
5415 (match_operand:HI 4 "vpr_register_operand" "Up")]
5419 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3"
5420 [(set_attr "type" "mve_move")
5421 (set_attr "length""8")])
5424 ;; [vmulq_m_s, vmulq_m_u])
5426 (define_insn "mve_vmulq_m_<supf><mode>"
5428 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5429 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5430 (match_operand:MVE_2 2 "s_register_operand" "w")
5431 (match_operand:MVE_2 3 "s_register_operand" "w")
5432 (match_operand:HI 4 "vpr_register_operand" "Up")]
5436 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3"
5437 [(set_attr "type" "mve_move")
5438 (set_attr "length""8")])
5441 ;; [vornq_m_u, vornq_m_s])
5443 (define_insn "mve_vornq_m_<supf><mode>"
5445 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5446 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5447 (match_operand:MVE_2 2 "s_register_operand" "w")
5448 (match_operand:MVE_2 3 "s_register_operand" "w")
5449 (match_operand:HI 4 "vpr_register_operand" "Up")]
5453 "vpst\;vornt %q0, %q2, %q3"
5454 [(set_attr "type" "mve_move")
5455 (set_attr "length""8")])
5458 ;; [vorrq_m_s, vorrq_m_u])
5460 (define_insn "mve_vorrq_m_<supf><mode>"
5462 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5463 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5464 (match_operand:MVE_2 2 "s_register_operand" "w")
5465 (match_operand:MVE_2 3 "s_register_operand" "w")
5466 (match_operand:HI 4 "vpr_register_operand" "Up")]
5470 "vpst\;vorrt %q0, %q2, %q3"
5471 [(set_attr "type" "mve_move")
5472 (set_attr "length""8")])
5475 ;; [vqaddq_m_n_u, vqaddq_m_n_s])
5477 (define_insn "mve_vqaddq_m_n_<supf><mode>"
5479 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5480 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5481 (match_operand:MVE_2 2 "s_register_operand" "w")
5482 (match_operand:<V_elem> 3 "s_register_operand" "r")
5483 (match_operand:HI 4 "vpr_register_operand" "Up")]
5487 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5488 [(set_attr "type" "mve_move")
5489 (set_attr "length""8")])
5492 ;; [vqaddq_m_u, vqaddq_m_s])
5494 (define_insn "mve_vqaddq_m_<supf><mode>"
5496 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5497 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5498 (match_operand:MVE_2 2 "s_register_operand" "w")
5499 (match_operand:MVE_2 3 "s_register_operand" "w")
5500 (match_operand:HI 4 "vpr_register_operand" "Up")]
5504 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5505 [(set_attr "type" "mve_move")
5506 (set_attr "length""8")])
5509 ;; [vqdmlahq_m_n_s])
5511 (define_insn "mve_vqdmlahq_m_n_s<mode>"
5513 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5514 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5515 (match_operand:MVE_2 2 "s_register_operand" "w")
5516 (match_operand:<V_elem> 3 "s_register_operand" "r")
5517 (match_operand:HI 4 "vpr_register_operand" "Up")]
5521 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5522 [(set_attr "type" "mve_move")
5523 (set_attr "length""8")])
5526 ;; [vqdmlashq_m_n_s])
5528 (define_insn "mve_vqdmlashq_m_n_s<mode>"
5530 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5531 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5532 (match_operand:MVE_2 2 "s_register_operand" "w")
5533 (match_operand:<V_elem> 3 "s_register_operand" "r")
5534 (match_operand:HI 4 "vpr_register_operand" "Up")]
5538 "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5539 [(set_attr "type" "mve_move")
5540 (set_attr "length""8")])
5543 ;; [vqrdmlahq_m_n_s])
5545 (define_insn "mve_vqrdmlahq_m_n_s<mode>"
5547 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5548 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5549 (match_operand:MVE_2 2 "s_register_operand" "w")
5550 (match_operand:<V_elem> 3 "s_register_operand" "r")
5551 (match_operand:HI 4 "vpr_register_operand" "Up")]
5555 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5556 [(set_attr "type" "mve_move")
5557 (set_attr "length""8")])
5560 ;; [vqrdmlashq_m_n_s])
5562 (define_insn "mve_vqrdmlashq_m_n_s<mode>"
5564 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5565 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5566 (match_operand:MVE_2 2 "s_register_operand" "w")
5567 (match_operand:<V_elem> 3 "s_register_operand" "r")
5568 (match_operand:HI 4 "vpr_register_operand" "Up")]
5572 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5573 [(set_attr "type" "mve_move")
5574 (set_attr "length""8")])
5577 ;; [vqrshlq_m_u, vqrshlq_m_s])
5579 (define_insn "mve_vqrshlq_m_<supf><mode>"
5581 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5582 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5583 (match_operand:MVE_2 2 "s_register_operand" "w")
5584 (match_operand:MVE_2 3 "s_register_operand" "w")
5585 (match_operand:HI 4 "vpr_register_operand" "Up")]
5589 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5590 [(set_attr "type" "mve_move")
5591 (set_attr "length""8")])
5594 ;; [vqshlq_m_n_s, vqshlq_m_n_u])
5596 (define_insn "mve_vqshlq_m_n_<supf><mode>"
5598 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5599 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5600 (match_operand:MVE_2 2 "s_register_operand" "w")
5601 (match_operand:SI 3 "immediate_operand" "i")
5602 (match_operand:HI 4 "vpr_register_operand" "Up")]
5606 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5607 [(set_attr "type" "mve_move")
5608 (set_attr "length""8")])
5611 ;; [vqshlq_m_u, vqshlq_m_s])
5613 (define_insn "mve_vqshlq_m_<supf><mode>"
5615 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5616 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5617 (match_operand:MVE_2 2 "s_register_operand" "w")
5618 (match_operand:MVE_2 3 "s_register_operand" "w")
5619 (match_operand:HI 4 "vpr_register_operand" "Up")]
5623 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5624 [(set_attr "type" "mve_move")
5625 (set_attr "length""8")])
5628 ;; [vqsubq_m_n_u, vqsubq_m_n_s])
5630 (define_insn "mve_vqsubq_m_n_<supf><mode>"
5632 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5633 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5634 (match_operand:MVE_2 2 "s_register_operand" "w")
5635 (match_operand:<V_elem> 3 "s_register_operand" "r")
5636 (match_operand:HI 4 "vpr_register_operand" "Up")]
5640 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5641 [(set_attr "type" "mve_move")
5642 (set_attr "length""8")])
5645 ;; [vqsubq_m_u, vqsubq_m_s])
5647 (define_insn "mve_vqsubq_m_<supf><mode>"
5649 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5650 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5651 (match_operand:MVE_2 2 "s_register_operand" "w")
5652 (match_operand:MVE_2 3 "s_register_operand" "w")
5653 (match_operand:HI 4 "vpr_register_operand" "Up")]
5657 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5658 [(set_attr "type" "mve_move")
5659 (set_attr "length""8")])
5662 ;; [vrhaddq_m_u, vrhaddq_m_s])
5664 (define_insn "mve_vrhaddq_m_<supf><mode>"
5666 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5667 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5668 (match_operand:MVE_2 2 "s_register_operand" "w")
5669 (match_operand:MVE_2 3 "s_register_operand" "w")
5670 (match_operand:HI 4 "vpr_register_operand" "Up")]
5674 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5675 [(set_attr "type" "mve_move")
5676 (set_attr "length""8")])
5679 ;; [vrmulhq_m_u, vrmulhq_m_s])
5681 (define_insn "mve_vrmulhq_m_<supf><mode>"
5683 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5684 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5685 (match_operand:MVE_2 2 "s_register_operand" "w")
5686 (match_operand:MVE_2 3 "s_register_operand" "w")
5687 (match_operand:HI 4 "vpr_register_operand" "Up")]
5691 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5692 [(set_attr "type" "mve_move")
5693 (set_attr "length""8")])
5696 ;; [vrshlq_m_s, vrshlq_m_u])
5698 (define_insn "mve_vrshlq_m_<supf><mode>"
5700 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5701 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5702 (match_operand:MVE_2 2 "s_register_operand" "w")
5703 (match_operand:MVE_2 3 "s_register_operand" "w")
5704 (match_operand:HI 4 "vpr_register_operand" "Up")]
5708 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5709 [(set_attr "type" "mve_move")
5710 (set_attr "length""8")])
5713 ;; [vrshrq_m_n_s, vrshrq_m_n_u])
5715 (define_insn "mve_vrshrq_m_n_<supf><mode>"
5717 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5718 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5719 (match_operand:MVE_2 2 "s_register_operand" "w")
5720 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5721 (match_operand:HI 4 "vpr_register_operand" "Up")]
5725 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5726 [(set_attr "type" "mve_move")
5727 (set_attr "length""8")])
5730 ;; [vshlq_m_n_s, vshlq_m_n_u])
5732 (define_insn "mve_vshlq_m_n_<supf><mode>"
5734 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5735 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5736 (match_operand:MVE_2 2 "s_register_operand" "w")
5737 (match_operand:SI 3 "immediate_operand" "i")
5738 (match_operand:HI 4 "vpr_register_operand" "Up")]
5742 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5743 [(set_attr "type" "mve_move")
5744 (set_attr "length""8")])
5747 ;; [vshrq_m_n_s, vshrq_m_n_u])
5749 (define_insn "mve_vshrq_m_n_<supf><mode>"
5751 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5752 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5753 (match_operand:MVE_2 2 "s_register_operand" "w")
5754 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5755 (match_operand:HI 4 "vpr_register_operand" "Up")]
5759 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5760 [(set_attr "type" "mve_move")
5761 (set_attr "length""8")])
5764 ;; [vsliq_m_n_u, vsliq_m_n_s])
5766 (define_insn "mve_vsliq_m_n_<supf><mode>"
5768 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5769 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5770 (match_operand:MVE_2 2 "s_register_operand" "w")
5771 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
5772 (match_operand:HI 4 "vpr_register_operand" "Up")]
5776 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
5777 [(set_attr "type" "mve_move")
5778 (set_attr "length""8")])
5781 ;; [vsubq_m_n_s, vsubq_m_n_u])
5783 (define_insn "mve_vsubq_m_n_<supf><mode>"
5785 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5786 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5787 (match_operand:MVE_2 2 "s_register_operand" "w")
5788 (match_operand:<V_elem> 3 "s_register_operand" "r")
5789 (match_operand:HI 4 "vpr_register_operand" "Up")]
5793 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
5794 [(set_attr "type" "mve_move")
5795 (set_attr "length""8")])
5798 ;; [vhcaddq_rot270_m_s])
5800 (define_insn "mve_vhcaddq_rot270_m_s<mode>"
5802 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5803 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5804 (match_operand:MVE_2 2 "s_register_operand" "w")
5805 (match_operand:MVE_2 3 "s_register_operand" "w")
5806 (match_operand:HI 4 "vpr_register_operand" "Up")]
5807 VHCADDQ_ROT270_M_S))
5810 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
5811 [(set_attr "type" "mve_move")
5812 (set_attr "length""8")])
5815 ;; [vhcaddq_rot90_m_s])
5817 (define_insn "mve_vhcaddq_rot90_m_s<mode>"
5819 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5820 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5821 (match_operand:MVE_2 2 "s_register_operand" "w")
5822 (match_operand:MVE_2 3 "s_register_operand" "w")
5823 (match_operand:HI 4 "vpr_register_operand" "Up")]
5827 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
5828 [(set_attr "type" "mve_move")
5829 (set_attr "length""8")])
5832 ;; [vmladavaxq_p_s])
5834 (define_insn "mve_vmladavaxq_p_s<mode>"
5836 (set (match_operand:SI 0 "s_register_operand" "=Te")
5837 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5838 (match_operand:MVE_2 2 "s_register_operand" "w")
5839 (match_operand:MVE_2 3 "s_register_operand" "w")
5840 (match_operand:HI 4 "vpr_register_operand" "Up")]
5844 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
5845 [(set_attr "type" "mve_move")
5846 (set_attr "length""8")])
5851 (define_insn "mve_vmlsdavaq_p_s<mode>"
5853 (set (match_operand:SI 0 "s_register_operand" "=Te")
5854 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5855 (match_operand:MVE_2 2 "s_register_operand" "w")
5856 (match_operand:MVE_2 3 "s_register_operand" "w")
5857 (match_operand:HI 4 "vpr_register_operand" "Up")]
5861 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
5862 [(set_attr "type" "mve_move")
5863 (set_attr "length""8")])
5866 ;; [vmlsdavaxq_p_s])
5868 (define_insn "mve_vmlsdavaxq_p_s<mode>"
5870 (set (match_operand:SI 0 "s_register_operand" "=Te")
5871 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5872 (match_operand:MVE_2 2 "s_register_operand" "w")
5873 (match_operand:MVE_2 3 "s_register_operand" "w")
5874 (match_operand:HI 4 "vpr_register_operand" "Up")]
5878 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
5879 [(set_attr "type" "mve_move")
5880 (set_attr "length""8")])
5885 (define_insn "mve_vqdmladhq_m_s<mode>"
5887 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5888 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5889 (match_operand:MVE_2 2 "s_register_operand" "w")
5890 (match_operand:MVE_2 3 "s_register_operand" "w")
5891 (match_operand:HI 4 "vpr_register_operand" "Up")]
5895 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
5896 [(set_attr "type" "mve_move")
5897 (set_attr "length""8")])
5900 ;; [vqdmladhxq_m_s])
5902 (define_insn "mve_vqdmladhxq_m_s<mode>"
5904 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5905 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5906 (match_operand:MVE_2 2 "s_register_operand" "w")
5907 (match_operand:MVE_2 3 "s_register_operand" "w")
5908 (match_operand:HI 4 "vpr_register_operand" "Up")]
5912 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
5913 [(set_attr "type" "mve_move")
5914 (set_attr "length""8")])
5919 (define_insn "mve_vqdmlsdhq_m_s<mode>"
5921 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5922 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5923 (match_operand:MVE_2 2 "s_register_operand" "w")
5924 (match_operand:MVE_2 3 "s_register_operand" "w")
5925 (match_operand:HI 4 "vpr_register_operand" "Up")]
5929 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
5930 [(set_attr "type" "mve_move")
5931 (set_attr "length""8")])
5934 ;; [vqdmlsdhxq_m_s])
5936 (define_insn "mve_vqdmlsdhxq_m_s<mode>"
5938 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5939 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5940 (match_operand:MVE_2 2 "s_register_operand" "w")
5941 (match_operand:MVE_2 3 "s_register_operand" "w")
5942 (match_operand:HI 4 "vpr_register_operand" "Up")]
5946 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
5947 [(set_attr "type" "mve_move")
5948 (set_attr "length""8")])
5951 ;; [vqdmulhq_m_n_s])
5953 (define_insn "mve_vqdmulhq_m_n_s<mode>"
5955 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5956 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5957 (match_operand:MVE_2 2 "s_register_operand" "w")
5958 (match_operand:<V_elem> 3 "s_register_operand" "r")
5959 (match_operand:HI 4 "vpr_register_operand" "Up")]
5963 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
5964 [(set_attr "type" "mve_move")
5965 (set_attr "length""8")])
5970 (define_insn "mve_vqdmulhq_m_s<mode>"
5972 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5973 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5974 (match_operand:MVE_2 2 "s_register_operand" "w")
5975 (match_operand:MVE_2 3 "s_register_operand" "w")
5976 (match_operand:HI 4 "vpr_register_operand" "Up")]
5980 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
5981 [(set_attr "type" "mve_move")
5982 (set_attr "length""8")])
5985 ;; [vqrdmladhq_m_s])
5987 (define_insn "mve_vqrdmladhq_m_s<mode>"
5989 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5990 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5991 (match_operand:MVE_2 2 "s_register_operand" "w")
5992 (match_operand:MVE_2 3 "s_register_operand" "w")
5993 (match_operand:HI 4 "vpr_register_operand" "Up")]
5997 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
5998 [(set_attr "type" "mve_move")
5999 (set_attr "length""8")])
6002 ;; [vqrdmladhxq_m_s])
6004 (define_insn "mve_vqrdmladhxq_m_s<mode>"
6006 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6007 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6008 (match_operand:MVE_2 2 "s_register_operand" "w")
6009 (match_operand:MVE_2 3 "s_register_operand" "w")
6010 (match_operand:HI 4 "vpr_register_operand" "Up")]
6014 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6015 [(set_attr "type" "mve_move")
6016 (set_attr "length""8")])
6019 ;; [vqrdmlsdhq_m_s])
6021 (define_insn "mve_vqrdmlsdhq_m_s<mode>"
6023 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6024 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6025 (match_operand:MVE_2 2 "s_register_operand" "w")
6026 (match_operand:MVE_2 3 "s_register_operand" "w")
6027 (match_operand:HI 4 "vpr_register_operand" "Up")]
6031 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6032 [(set_attr "type" "mve_move")
6033 (set_attr "length""8")])
6036 ;; [vqrdmlsdhxq_m_s])
6038 (define_insn "mve_vqrdmlsdhxq_m_s<mode>"
6040 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6041 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6042 (match_operand:MVE_2 2 "s_register_operand" "w")
6043 (match_operand:MVE_2 3 "s_register_operand" "w")
6044 (match_operand:HI 4 "vpr_register_operand" "Up")]
6048 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6049 [(set_attr "type" "mve_move")
6050 (set_attr "length""8")])
6053 ;; [vqrdmulhq_m_n_s])
6055 (define_insn "mve_vqrdmulhq_m_n_s<mode>"
6057 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6058 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6059 (match_operand:MVE_2 2 "s_register_operand" "w")
6060 (match_operand:<V_elem> 3 "s_register_operand" "r")
6061 (match_operand:HI 4 "vpr_register_operand" "Up")]
6065 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6066 [(set_attr "type" "mve_move")
6067 (set_attr "length""8")])
6072 (define_insn "mve_vqrdmulhq_m_s<mode>"
6074 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6075 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6076 (match_operand:MVE_2 2 "s_register_operand" "w")
6077 (match_operand:MVE_2 3 "s_register_operand" "w")
6078 (match_operand:HI 4 "vpr_register_operand" "Up")]
6082 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6083 [(set_attr "type" "mve_move")
6084 (set_attr "length""8")])
6087 ;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
6089 (define_insn "mve_vmlaldavaq_p_<supf><mode>"
6091 (set (match_operand:DI 0 "s_register_operand" "=r")
6092 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6093 (match_operand:MVE_5 2 "s_register_operand" "w")
6094 (match_operand:MVE_5 3 "s_register_operand" "w")
6095 (match_operand:HI 4 "vpr_register_operand" "Up")]
6099 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6100 [(set_attr "type" "mve_move")
6101 (set_attr "length""8")])
6104 ;; [vmlaldavaxq_p_s])
6106 (define_insn "mve_vmlaldavaxq_p_<supf><mode>"
6108 (set (match_operand:DI 0 "s_register_operand" "=r")
6109 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6110 (match_operand:MVE_5 2 "s_register_operand" "w")
6111 (match_operand:MVE_5 3 "s_register_operand" "w")
6112 (match_operand:HI 4 "vpr_register_operand" "Up")]
6116 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6117 [(set_attr "type" "mve_move")
6118 (set_attr "length""8")])
6121 ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
6123 (define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
6125 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6126 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6127 (match_operand:MVE_5 2 "s_register_operand" "w")
6128 (match_operand:SI 3 "mve_imm_8" "Rb")
6129 (match_operand:HI 4 "vpr_register_operand" "Up")]
6133 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6134 [(set_attr "type" "mve_move")
6135 (set_attr "length""8")])
6138 ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
6140 (define_insn "mve_vqrshrntq_m_n_<supf><mode>"
6142 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6143 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6144 (match_operand:MVE_5 2 "s_register_operand" "w")
6145 (match_operand:SI 3 "mve_imm_8" "Rb")
6146 (match_operand:HI 4 "vpr_register_operand" "Up")]
6150 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6151 [(set_attr "type" "mve_move")
6152 (set_attr "length""8")])
6155 ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
6157 (define_insn "mve_vqshrnbq_m_n_<supf><mode>"
6159 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6160 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6161 (match_operand:MVE_5 2 "s_register_operand" "w")
6162 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6163 (match_operand:HI 4 "vpr_register_operand" "Up")]
6167 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6168 [(set_attr "type" "mve_move")
6169 (set_attr "length""8")])
6172 ;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
6174 (define_insn "mve_vqshrntq_m_n_<supf><mode>"
6176 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6177 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6178 (match_operand:MVE_5 2 "s_register_operand" "w")
6179 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6180 (match_operand:HI 4 "vpr_register_operand" "Up")]
6184 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6185 [(set_attr "type" "mve_move")
6186 (set_attr "length""8")])
6189 ;; [vrmlaldavhaq_p_s])
6191 (define_insn "mve_vrmlaldavhaq_p_sv4si"
6193 (set (match_operand:DI 0 "s_register_operand" "=r")
6194 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6195 (match_operand:V4SI 2 "s_register_operand" "w")
6196 (match_operand:V4SI 3 "s_register_operand" "w")
6197 (match_operand:HI 4 "vpr_register_operand" "Up")]
6201 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
6202 [(set_attr "type" "mve_move")
6203 (set_attr "length""8")])
6206 ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
6208 (define_insn "mve_vrshrnbq_m_n_<supf><mode>"
6210 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6211 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6212 (match_operand:MVE_5 2 "s_register_operand" "w")
6213 (match_operand:SI 3 "mve_imm_8" "Rb")
6214 (match_operand:HI 4 "vpr_register_operand" "Up")]
6218 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6219 [(set_attr "type" "mve_move")
6220 (set_attr "length""8")])
6223 ;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
6225 (define_insn "mve_vrshrntq_m_n_<supf><mode>"
6227 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6228 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6229 (match_operand:MVE_5 2 "s_register_operand" "w")
6230 (match_operand:SI 3 "mve_imm_8" "Rb")
6231 (match_operand:HI 4 "vpr_register_operand" "Up")]
6235 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6236 [(set_attr "type" "mve_move")
6237 (set_attr "length""8")])
6240 ;; [vshllbq_m_n_u, vshllbq_m_n_s])
6242 (define_insn "mve_vshllbq_m_n_<supf><mode>"
6244 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6245 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6246 (match_operand:MVE_3 2 "s_register_operand" "w")
6247 (match_operand:SI 3 "immediate_operand" "i")
6248 (match_operand:HI 4 "vpr_register_operand" "Up")]
6252 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6253 [(set_attr "type" "mve_move")
6254 (set_attr "length""8")])
6257 ;; [vshlltq_m_n_u, vshlltq_m_n_s])
6259 (define_insn "mve_vshlltq_m_n_<supf><mode>"
6261 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6262 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6263 (match_operand:MVE_3 2 "s_register_operand" "w")
6264 (match_operand:SI 3 "immediate_operand" "i")
6265 (match_operand:HI 4 "vpr_register_operand" "Up")]
6269 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6270 [(set_attr "type" "mve_move")
6271 (set_attr "length""8")])
6274 ;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
6276 (define_insn "mve_vshrnbq_m_n_<supf><mode>"
6278 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6279 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6280 (match_operand:MVE_5 2 "s_register_operand" "w")
6281 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6282 (match_operand:HI 4 "vpr_register_operand" "Up")]
6286 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6287 [(set_attr "type" "mve_move")
6288 (set_attr "length""8")])
6291 ;; [vshrntq_m_n_s, vshrntq_m_n_u])
6293 (define_insn "mve_vshrntq_m_n_<supf><mode>"
6295 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6296 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6297 (match_operand:MVE_5 2 "s_register_operand" "w")
6298 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6299 (match_operand:HI 4 "vpr_register_operand" "Up")]
6303 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6304 [(set_attr "type" "mve_move")
6305 (set_attr "length""8")])
6308 ;; [vmlsldavaq_p_s])
6310 (define_insn "mve_vmlsldavaq_p_s<mode>"
6312 (set (match_operand:DI 0 "s_register_operand" "=r")
6313 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6314 (match_operand:MVE_5 2 "s_register_operand" "w")
6315 (match_operand:MVE_5 3 "s_register_operand" "w")
6316 (match_operand:HI 4 "vpr_register_operand" "Up")]
6320 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6321 [(set_attr "type" "mve_move")
6322 (set_attr "length""8")])
6325 ;; [vmlsldavaxq_p_s])
6327 (define_insn "mve_vmlsldavaxq_p_s<mode>"
6329 (set (match_operand:DI 0 "s_register_operand" "=r")
6330 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6331 (match_operand:MVE_5 2 "s_register_operand" "w")
6332 (match_operand:MVE_5 3 "s_register_operand" "w")
6333 (match_operand:HI 4 "vpr_register_operand" "Up")]
6337 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6338 [(set_attr "type" "mve_move")
6339 (set_attr "length""8")])
6342 ;; [vmullbq_poly_m_p])
6344 (define_insn "mve_vmullbq_poly_m_p<mode>"
6346 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6347 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6348 (match_operand:MVE_3 2 "s_register_operand" "w")
6349 (match_operand:MVE_3 3 "s_register_operand" "w")
6350 (match_operand:HI 4 "vpr_register_operand" "Up")]
6354 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6355 [(set_attr "type" "mve_move")
6356 (set_attr "length""8")])
6359 ;; [vmulltq_poly_m_p])
6361 (define_insn "mve_vmulltq_poly_m_p<mode>"
6363 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6364 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6365 (match_operand:MVE_3 2 "s_register_operand" "w")
6366 (match_operand:MVE_3 3 "s_register_operand" "w")
6367 (match_operand:HI 4 "vpr_register_operand" "Up")]
6371 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6372 [(set_attr "type" "mve_move")
6373 (set_attr "length""8")])
6376 ;; [vqdmullbq_m_n_s])
6378 (define_insn "mve_vqdmullbq_m_n_s<mode>"
6380 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6381 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6382 (match_operand:MVE_5 2 "s_register_operand" "w")
6383 (match_operand:<V_elem> 3 "s_register_operand" "r")
6384 (match_operand:HI 4 "vpr_register_operand" "Up")]
6388 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6389 [(set_attr "type" "mve_move")
6390 (set_attr "length""8")])
6395 (define_insn "mve_vqdmullbq_m_s<mode>"
6397 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6398 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6399 (match_operand:MVE_5 2 "s_register_operand" "w")
6400 (match_operand:MVE_5 3 "s_register_operand" "w")
6401 (match_operand:HI 4 "vpr_register_operand" "Up")]
6405 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6406 [(set_attr "type" "mve_move")
6407 (set_attr "length""8")])
6410 ;; [vqdmulltq_m_n_s])
6412 (define_insn "mve_vqdmulltq_m_n_s<mode>"
6414 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6415 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6416 (match_operand:MVE_5 2 "s_register_operand" "w")
6417 (match_operand:<V_elem> 3 "s_register_operand" "r")
6418 (match_operand:HI 4 "vpr_register_operand" "Up")]
6422 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
6423 [(set_attr "type" "mve_move")
6424 (set_attr "length""8")])
6429 (define_insn "mve_vqdmulltq_m_s<mode>"
6431 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6432 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6433 (match_operand:MVE_5 2 "s_register_operand" "w")
6434 (match_operand:MVE_5 3 "s_register_operand" "w")
6435 (match_operand:HI 4 "vpr_register_operand" "Up")]
6439 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6440 [(set_attr "type" "mve_move")
6441 (set_attr "length""8")])
6444 ;; [vqrshrunbq_m_n_s])
6446 (define_insn "mve_vqrshrunbq_m_n_s<mode>"
6448 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6449 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6450 (match_operand:MVE_5 2 "s_register_operand" "w")
6451 (match_operand:SI 3 "mve_imm_8" "Rb")
6452 (match_operand:HI 4 "vpr_register_operand" "Up")]
6456 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6457 [(set_attr "type" "mve_move")
6458 (set_attr "length""8")])
6461 ;; [vqrshruntq_m_n_s])
6463 (define_insn "mve_vqrshruntq_m_n_s<mode>"
6465 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6466 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6467 (match_operand:MVE_5 2 "s_register_operand" "w")
6468 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6469 (match_operand:HI 4 "vpr_register_operand" "Up")]
6473 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6474 [(set_attr "type" "mve_move")
6475 (set_attr "length""8")])
6478 ;; [vqshrunbq_m_n_s])
6480 (define_insn "mve_vqshrunbq_m_n_s<mode>"
6482 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6483 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6484 (match_operand:MVE_5 2 "s_register_operand" "w")
6485 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6486 (match_operand:HI 4 "vpr_register_operand" "Up")]
6490 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6491 [(set_attr "type" "mve_move")
6492 (set_attr "length""8")])
6495 ;; [vqshruntq_m_n_s])
6497 (define_insn "mve_vqshruntq_m_n_s<mode>"
6499 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6500 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6501 (match_operand:MVE_5 2 "s_register_operand" "w")
6502 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6503 (match_operand:HI 4 "vpr_register_operand" "Up")]
6507 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6508 [(set_attr "type" "mve_move")
6509 (set_attr "length""8")])
6512 ;; [vrmlaldavhaq_p_u])
6514 (define_insn "mve_vrmlaldavhaq_p_uv4si"
6516 (set (match_operand:DI 0 "s_register_operand" "=r")
6517 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6518 (match_operand:V4SI 2 "s_register_operand" "w")
6519 (match_operand:V4SI 3 "s_register_operand" "w")
6520 (match_operand:HI 4 "vpr_register_operand" "Up")]
6524 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
6525 [(set_attr "type" "mve_move")
6526 (set_attr "length""8")])
6529 ;; [vrmlaldavhaxq_p_s])
6531 (define_insn "mve_vrmlaldavhaxq_p_sv4si"
6533 (set (match_operand:DI 0 "s_register_operand" "=r")
6534 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6535 (match_operand:V4SI 2 "s_register_operand" "w")
6536 (match_operand:V4SI 3 "s_register_operand" "w")
6537 (match_operand:HI 4 "vpr_register_operand" "Up")]
6541 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6542 [(set_attr "type" "mve_move")
6543 (set_attr "length""8")])
6546 ;; [vrmlsldavhaq_p_s])
6548 (define_insn "mve_vrmlsldavhaq_p_sv4si"
6550 (set (match_operand:DI 0 "s_register_operand" "=r")
6551 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6552 (match_operand:V4SI 2 "s_register_operand" "w")
6553 (match_operand:V4SI 3 "s_register_operand" "w")
6554 (match_operand:HI 4 "vpr_register_operand" "Up")]
6558 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
6559 [(set_attr "type" "mve_move")
6560 (set_attr "length""8")])
6563 ;; [vrmlsldavhaxq_p_s])
6565 (define_insn "mve_vrmlsldavhaxq_p_sv4si"
6567 (set (match_operand:DI 0 "s_register_operand" "=r")
6568 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6569 (match_operand:V4SI 2 "s_register_operand" "w")
6570 (match_operand:V4SI 3 "s_register_operand" "w")
6571 (match_operand:HI 4 "vpr_register_operand" "Up")]
6575 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6576 [(set_attr "type" "mve_move")
6577 (set_attr "length""8")])
6581 (define_insn "mve_vabdq_m_f<mode>"
6583 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6584 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6585 (match_operand:MVE_0 2 "s_register_operand" "w")
6586 (match_operand:MVE_0 3 "s_register_operand" "w")
6587 (match_operand:HI 4 "vpr_register_operand" "Up")]
6590 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6591 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3"
6592 [(set_attr "type" "mve_move")
6593 (set_attr "length""8")])
6598 (define_insn "mve_vaddq_m_f<mode>"
6600 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6601 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6602 (match_operand:MVE_0 2 "s_register_operand" "w")
6603 (match_operand:MVE_0 3 "s_register_operand" "w")
6604 (match_operand:HI 4 "vpr_register_operand" "Up")]
6607 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6608 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3"
6609 [(set_attr "type" "mve_move")
6610 (set_attr "length""8")])
6615 (define_insn "mve_vaddq_m_n_f<mode>"
6617 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6618 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6619 (match_operand:MVE_0 2 "s_register_operand" "w")
6620 (match_operand:<V_elem> 3 "s_register_operand" "r")
6621 (match_operand:HI 4 "vpr_register_operand" "Up")]
6624 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6625 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3"
6626 [(set_attr "type" "mve_move")
6627 (set_attr "length""8")])
6632 (define_insn "mve_vandq_m_f<mode>"
6634 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6635 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6636 (match_operand:MVE_0 2 "s_register_operand" "w")
6637 (match_operand:MVE_0 3 "s_register_operand" "w")
6638 (match_operand:HI 4 "vpr_register_operand" "Up")]
6641 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6642 "vpst\;vandt %q0, %q2, %q3"
6643 [(set_attr "type" "mve_move")
6644 (set_attr "length""8")])
6649 (define_insn "mve_vbicq_m_f<mode>"
6651 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6652 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6653 (match_operand:MVE_0 2 "s_register_operand" "w")
6654 (match_operand:MVE_0 3 "s_register_operand" "w")
6655 (match_operand:HI 4 "vpr_register_operand" "Up")]
6658 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6659 "vpst\;vbict %q0, %q2, %q3"
6660 [(set_attr "type" "mve_move")
6661 (set_attr "length""8")])
6666 (define_insn "mve_vbrsrq_m_n_f<mode>"
6668 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6669 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6670 (match_operand:MVE_0 2 "s_register_operand" "w")
6671 (match_operand:SI 3 "s_register_operand" "r")
6672 (match_operand:HI 4 "vpr_register_operand" "Up")]
6675 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6676 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
6677 [(set_attr "type" "mve_move")
6678 (set_attr "length""8")])
6681 ;; [vcaddq_rot270_m_f])
6683 (define_insn "mve_vcaddq_rot270_m_f<mode>"
6685 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6686 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6687 (match_operand:MVE_0 2 "s_register_operand" "w")
6688 (match_operand:MVE_0 3 "s_register_operand" "w")
6689 (match_operand:HI 4 "vpr_register_operand" "Up")]
6692 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6693 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270"
6694 [(set_attr "type" "mve_move")
6695 (set_attr "length""8")])
6698 ;; [vcaddq_rot90_m_f])
6700 (define_insn "mve_vcaddq_rot90_m_f<mode>"
6702 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6703 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6704 (match_operand:MVE_0 2 "s_register_operand" "w")
6705 (match_operand:MVE_0 3 "s_register_operand" "w")
6706 (match_operand:HI 4 "vpr_register_operand" "Up")]
6709 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6710 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90"
6711 [(set_attr "type" "mve_move")
6712 (set_attr "length""8")])
6717 (define_insn "mve_vcmlaq_m_f<mode>"
6719 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6720 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6721 (match_operand:MVE_0 2 "s_register_operand" "w")
6722 (match_operand:MVE_0 3 "s_register_operand" "w")
6723 (match_operand:HI 4 "vpr_register_operand" "Up")]
6726 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6727 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0"
6728 [(set_attr "type" "mve_move")
6729 (set_attr "length""8")])
6732 ;; [vcmlaq_rot180_m_f])
6734 (define_insn "mve_vcmlaq_rot180_m_f<mode>"
6736 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6737 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6738 (match_operand:MVE_0 2 "s_register_operand" "w")
6739 (match_operand:MVE_0 3 "s_register_operand" "w")
6740 (match_operand:HI 4 "vpr_register_operand" "Up")]
6743 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6744 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180"
6745 [(set_attr "type" "mve_move")
6746 (set_attr "length""8")])
6749 ;; [vcmlaq_rot270_m_f])
6751 (define_insn "mve_vcmlaq_rot270_m_f<mode>"
6753 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6754 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6755 (match_operand:MVE_0 2 "s_register_operand" "w")
6756 (match_operand:MVE_0 3 "s_register_operand" "w")
6757 (match_operand:HI 4 "vpr_register_operand" "Up")]
6760 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6761 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270"
6762 [(set_attr "type" "mve_move")
6763 (set_attr "length""8")])
6766 ;; [vcmlaq_rot90_m_f])
6768 (define_insn "mve_vcmlaq_rot90_m_f<mode>"
6770 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6771 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6772 (match_operand:MVE_0 2 "s_register_operand" "w")
6773 (match_operand:MVE_0 3 "s_register_operand" "w")
6774 (match_operand:HI 4 "vpr_register_operand" "Up")]
6777 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6778 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90"
6779 [(set_attr "type" "mve_move")
6780 (set_attr "length""8")])
6785 (define_insn "mve_vcmulq_m_f<mode>"
6787 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6788 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6789 (match_operand:MVE_0 2 "s_register_operand" "w")
6790 (match_operand:MVE_0 3 "s_register_operand" "w")
6791 (match_operand:HI 4 "vpr_register_operand" "Up")]
6794 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6795 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0"
6796 [(set_attr "type" "mve_move")
6797 (set_attr "length""8")])
6800 ;; [vcmulq_rot180_m_f])
6802 (define_insn "mve_vcmulq_rot180_m_f<mode>"
6804 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6805 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6806 (match_operand:MVE_0 2 "s_register_operand" "w")
6807 (match_operand:MVE_0 3 "s_register_operand" "w")
6808 (match_operand:HI 4 "vpr_register_operand" "Up")]
6811 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6812 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180"
6813 [(set_attr "type" "mve_move")
6814 (set_attr "length""8")])
6817 ;; [vcmulq_rot270_m_f])
6819 (define_insn "mve_vcmulq_rot270_m_f<mode>"
6821 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6822 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6823 (match_operand:MVE_0 2 "s_register_operand" "w")
6824 (match_operand:MVE_0 3 "s_register_operand" "w")
6825 (match_operand:HI 4 "vpr_register_operand" "Up")]
6828 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6829 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270"
6830 [(set_attr "type" "mve_move")
6831 (set_attr "length""8")])
6834 ;; [vcmulq_rot90_m_f])
6836 (define_insn "mve_vcmulq_rot90_m_f<mode>"
6838 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6839 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6840 (match_operand:MVE_0 2 "s_register_operand" "w")
6841 (match_operand:MVE_0 3 "s_register_operand" "w")
6842 (match_operand:HI 4 "vpr_register_operand" "Up")]
6845 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6846 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90"
6847 [(set_attr "type" "mve_move")
6848 (set_attr "length""8")])
6853 (define_insn "mve_veorq_m_f<mode>"
6855 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6856 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6857 (match_operand:MVE_0 2 "s_register_operand" "w")
6858 (match_operand:MVE_0 3 "s_register_operand" "w")
6859 (match_operand:HI 4 "vpr_register_operand" "Up")]
6862 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6863 "vpst\;veort %q0, %q2, %q3"
6864 [(set_attr "type" "mve_move")
6865 (set_attr "length""8")])
6870 (define_insn "mve_vfmaq_m_f<mode>"
6872 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6873 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6874 (match_operand:MVE_0 2 "s_register_operand" "w")
6875 (match_operand:MVE_0 3 "s_register_operand" "w")
6876 (match_operand:HI 4 "vpr_register_operand" "Up")]
6879 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6880 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3"
6881 [(set_attr "type" "mve_move")
6882 (set_attr "length""8")])
6887 (define_insn "mve_vfmaq_m_n_f<mode>"
6889 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6890 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6891 (match_operand:MVE_0 2 "s_register_operand" "w")
6892 (match_operand:<V_elem> 3 "s_register_operand" "r")
6893 (match_operand:HI 4 "vpr_register_operand" "Up")]
6896 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6897 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3"
6898 [(set_attr "type" "mve_move")
6899 (set_attr "length""8")])
6904 (define_insn "mve_vfmasq_m_n_f<mode>"
6906 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6907 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6908 (match_operand:MVE_0 2 "s_register_operand" "w")
6909 (match_operand:<V_elem> 3 "s_register_operand" "r")
6910 (match_operand:HI 4 "vpr_register_operand" "Up")]
6913 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6914 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3"
6915 [(set_attr "type" "mve_move")
6916 (set_attr "length""8")])
6921 (define_insn "mve_vfmsq_m_f<mode>"
6923 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6924 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6925 (match_operand:MVE_0 2 "s_register_operand" "w")
6926 (match_operand:MVE_0 3 "s_register_operand" "w")
6927 (match_operand:HI 4 "vpr_register_operand" "Up")]
6930 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6931 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3"
6932 [(set_attr "type" "mve_move")
6933 (set_attr "length""8")])
6938 (define_insn "mve_vmaxnmq_m_f<mode>"
6940 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6941 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6942 (match_operand:MVE_0 2 "s_register_operand" "w")
6943 (match_operand:MVE_0 3 "s_register_operand" "w")
6944 (match_operand:HI 4 "vpr_register_operand" "Up")]
6947 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6948 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3"
6949 [(set_attr "type" "mve_move")
6950 (set_attr "length""8")])
6955 (define_insn "mve_vminnmq_m_f<mode>"
6957 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6958 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6959 (match_operand:MVE_0 2 "s_register_operand" "w")
6960 (match_operand:MVE_0 3 "s_register_operand" "w")
6961 (match_operand:HI 4 "vpr_register_operand" "Up")]
6964 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6965 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3"
6966 [(set_attr "type" "mve_move")
6967 (set_attr "length""8")])
6972 (define_insn "mve_vmulq_m_f<mode>"
6974 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6975 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6976 (match_operand:MVE_0 2 "s_register_operand" "w")
6977 (match_operand:MVE_0 3 "s_register_operand" "w")
6978 (match_operand:HI 4 "vpr_register_operand" "Up")]
6981 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6982 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3"
6983 [(set_attr "type" "mve_move")
6984 (set_attr "length""8")])
6989 (define_insn "mve_vmulq_m_n_f<mode>"
6991 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6992 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6993 (match_operand:MVE_0 2 "s_register_operand" "w")
6994 (match_operand:<V_elem> 3 "s_register_operand" "r")
6995 (match_operand:HI 4 "vpr_register_operand" "Up")]
6998 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6999 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3"
7000 [(set_attr "type" "mve_move")
7001 (set_attr "length""8")])
7006 (define_insn "mve_vornq_m_f<mode>"
7008 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7009 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7010 (match_operand:MVE_0 2 "s_register_operand" "w")
7011 (match_operand:MVE_0 3 "s_register_operand" "w")
7012 (match_operand:HI 4 "vpr_register_operand" "Up")]
7015 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7016 "vpst\;vornt %q0, %q2, %q3"
7017 [(set_attr "type" "mve_move")
7018 (set_attr "length""8")])
7023 (define_insn "mve_vorrq_m_f<mode>"
7025 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7026 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7027 (match_operand:MVE_0 2 "s_register_operand" "w")
7028 (match_operand:MVE_0 3 "s_register_operand" "w")
7029 (match_operand:HI 4 "vpr_register_operand" "Up")]
7032 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7033 "vpst\;vorrt %q0, %q2, %q3"
7034 [(set_attr "type" "mve_move")
7035 (set_attr "length""8")])
7040 (define_insn "mve_vsubq_m_f<mode>"
7042 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7043 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7044 (match_operand:MVE_0 2 "s_register_operand" "w")
7045 (match_operand:MVE_0 3 "s_register_operand" "w")
7046 (match_operand:HI 4 "vpr_register_operand" "Up")]
7049 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7050 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
7051 [(set_attr "type" "mve_move")
7052 (set_attr "length""8")])
7057 (define_insn "mve_vsubq_m_n_f<mode>"
7059 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7060 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7061 (match_operand:MVE_0 2 "s_register_operand" "w")
7062 (match_operand:<V_elem> 3 "s_register_operand" "r")
7063 (match_operand:HI 4 "vpr_register_operand" "Up")]
7066 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7067 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
7068 [(set_attr "type" "mve_move")
7069 (set_attr "length""8")])
7072 ;; [vstrbq_s vstrbq_u]
7074 (define_insn "mve_vstrbq_<supf><mode>"
7075 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7076 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
7082 int regno = REGNO (operands[1]);
7083 ops[1] = gen_rtx_REG (TImode, regno);
7084 ops[0] = operands[0];
7085 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
7088 [(set_attr "length" "4")])
7091 ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
7093 (define_expand "mve_vstrbq_scatter_offset_<supf><mode>"
7094 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7095 (match_operand:MVE_2 1 "s_register_operand")
7096 (match_operand:MVE_2 2 "s_register_operand")
7097 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7100 rtx ind = XEXP (operands[0], 0);
7101 gcc_assert (REG_P (ind));
7102 emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1],
7107 (define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn"
7108 [(set (mem:BLK (scratch))
7110 [(match_operand:SI 0 "register_operand" "r")
7111 (match_operand:MVE_2 1 "s_register_operand" "w")
7112 (match_operand:MVE_2 2 "s_register_operand" "w")]
7115 "vstrb.<V_sz_elem>\t%q2, [%0, %q1]"
7116 [(set_attr "length" "4")])
7119 ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
7121 (define_insn "mve_vstrwq_scatter_base_<supf>v4si"
7122 [(set (mem:BLK (scratch))
7124 [(match_operand:V4SI 0 "s_register_operand" "w")
7125 (match_operand:SI 1 "immediate_operand" "i")
7126 (match_operand:V4SI 2 "s_register_operand" "w")]
7132 ops[0] = operands[0];
7133 ops[1] = operands[1];
7134 ops[2] = operands[2];
7135 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
7138 [(set_attr "length" "4")])
7141 ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
7143 (define_insn "mve_vldrbq_gather_offset_<supf><mode>"
7144 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7145 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7146 (match_operand:MVE_2 2 "s_register_operand" "w")]
7152 ops[0] = operands[0];
7153 ops[1] = operands[1];
7154 ops[2] = operands[2];
7155 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7156 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
7158 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7161 [(set_attr "length" "4")])
7164 ;; [vldrbq_s vldrbq_u]
7166 (define_insn "mve_vldrbq_<supf><mode>"
7167 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7168 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")]
7174 int regno = REGNO (operands[0]);
7175 ops[0] = gen_rtx_REG (TImode, regno);
7176 ops[1] = operands[1];
7177 if (<V_sz_elem> == 8)
7178 output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops);
7180 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
7183 [(set_attr "length" "4")])
7186 ;; [vldrwq_gather_base_s vldrwq_gather_base_u]
7188 (define_insn "mve_vldrwq_gather_base_<supf>v4si"
7189 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7190 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7191 (match_operand:SI 2 "immediate_operand" "i")]
7197 ops[0] = operands[0];
7198 ops[1] = operands[1];
7199 ops[2] = operands[2];
7200 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7203 [(set_attr "length" "4")])
7206 ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
7208 (define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>"
7209 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7210 (match_operand:MVE_2 1 "s_register_operand")
7211 (match_operand:MVE_2 2 "s_register_operand")
7212 (match_operand:HI 3 "vpr_register_operand" "Up")
7213 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7216 rtx ind = XEXP (operands[0], 0);
7217 gcc_assert (REG_P (ind));
7219 gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
7225 (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn"
7226 [(set (mem:BLK (scratch))
7228 [(match_operand:SI 0 "register_operand" "r")
7229 (match_operand:MVE_2 1 "s_register_operand" "w")
7230 (match_operand:MVE_2 2 "s_register_operand" "w")
7231 (match_operand:HI 3 "vpr_register_operand" "Up")]
7234 "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]"
7235 [(set_attr "length" "8")])
7238 ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
7240 (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
7241 [(set (mem:BLK (scratch))
7243 [(match_operand:V4SI 0 "s_register_operand" "w")
7244 (match_operand:SI 1 "immediate_operand" "i")
7245 (match_operand:V4SI 2 "s_register_operand" "w")
7246 (match_operand:HI 3 "vpr_register_operand" "Up")]
7252 ops[0] = operands[0];
7253 ops[1] = operands[1];
7254 ops[2] = operands[2];
7255 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
7258 [(set_attr "length" "8")])
7261 ;; [vstrbq_p_s vstrbq_p_u]
7263 (define_insn "mve_vstrbq_p_<supf><mode>"
7264 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7265 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
7266 (match_operand:HI 2 "vpr_register_operand" "Up")]
7272 int regno = REGNO (operands[1]);
7273 ops[1] = gen_rtx_REG (TImode, regno);
7274 ops[0] = operands[0];
7275 output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops);
7278 [(set_attr "length" "8")])
7281 ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
7283 (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
7284 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7285 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7286 (match_operand:MVE_2 2 "s_register_operand" "w")
7287 (match_operand:HI 3 "vpr_register_operand" "Up")]
7293 ops[0] = operands[0];
7294 ops[1] = operands[1];
7295 ops[2] = operands[2];
7296 ops[3] = operands[3];
7297 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7298 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
7300 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7303 [(set_attr "length" "8")])
7306 ;; [vldrbq_z_s vldrbq_z_u]
7308 (define_insn "mve_vldrbq_z_<supf><mode>"
7309 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7310 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")
7311 (match_operand:HI 2 "vpr_register_operand" "Up")]
7317 int regno = REGNO (operands[0]);
7318 ops[0] = gen_rtx_REG (TImode, regno);
7319 ops[1] = operands[1];
7320 if (<V_sz_elem> == 8)
7321 output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops);
7323 output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
7326 [(set_attr "length" "8")])
7329 ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
7331 (define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
7332 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7333 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7334 (match_operand:SI 2 "immediate_operand" "i")
7335 (match_operand:HI 3 "vpr_register_operand" "Up")]
7341 ops[0] = operands[0];
7342 ops[1] = operands[1];
7343 ops[2] = operands[2];
7344 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7347 [(set_attr "length" "8")])
7352 (define_insn "mve_vldrhq_fv8hf"
7353 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7354 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")]
7357 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7360 int regno = REGNO (operands[0]);
7361 ops[0] = gen_rtx_REG (TImode, regno);
7362 ops[1] = operands[1];
7363 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7366 [(set_attr "length" "4")])
7369 ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
7371 (define_insn "mve_vldrhq_gather_offset_<supf><mode>"
7372 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7373 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7374 (match_operand:MVE_6 2 "s_register_operand" "w")]
7380 ops[0] = operands[0];
7381 ops[1] = operands[1];
7382 ops[2] = operands[2];
7383 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7384 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
7386 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7389 [(set_attr "length" "4")])
7392 ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
7394 (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
7395 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7396 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7397 (match_operand:MVE_6 2 "s_register_operand" "w")
7398 (match_operand:HI 3 "vpr_register_operand" "Up")
7404 ops[0] = operands[0];
7405 ops[1] = operands[1];
7406 ops[2] = operands[2];
7407 ops[3] = operands[3];
7408 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7409 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
7411 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7414 [(set_attr "length" "8")])
7417 ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
7419 (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
7420 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7421 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7422 (match_operand:MVE_6 2 "s_register_operand" "w")]
7428 ops[0] = operands[0];
7429 ops[1] = operands[1];
7430 ops[2] = operands[2];
7431 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7432 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7434 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7437 [(set_attr "length" "4")])
7440 ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
7442 (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
7443 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7444 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7445 (match_operand:MVE_6 2 "s_register_operand" "w")
7446 (match_operand:HI 3 "vpr_register_operand" "Up")
7452 ops[0] = operands[0];
7453 ops[1] = operands[1];
7454 ops[2] = operands[2];
7455 ops[3] = operands[3];
7456 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7457 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7459 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7462 [(set_attr "length" "8")])
7465 ;; [vldrhq_s, vldrhq_u]
7467 (define_insn "mve_vldrhq_<supf><mode>"
7468 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7469 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")]
7475 int regno = REGNO (operands[0]);
7476 ops[0] = gen_rtx_REG (TImode, regno);
7477 ops[1] = operands[1];
7478 if (<V_sz_elem> == 16)
7479 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7481 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
7484 [(set_attr "length" "4")])
7489 (define_insn "mve_vldrhq_z_fv8hf"
7490 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7491 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")
7492 (match_operand:HI 2 "vpr_register_operand" "Up")]
7495 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7498 int regno = REGNO (operands[0]);
7499 ops[0] = gen_rtx_REG (TImode, regno);
7500 ops[1] = operands[1];
7501 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7504 [(set_attr "length" "8")])
7507 ;; [vldrhq_z_s vldrhq_z_u]
7509 (define_insn "mve_vldrhq_z_<supf><mode>"
7510 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7511 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")
7512 (match_operand:HI 2 "vpr_register_operand" "Up")]
7518 int regno = REGNO (operands[0]);
7519 ops[0] = gen_rtx_REG (TImode, regno);
7520 ops[1] = operands[1];
7521 if (<V_sz_elem> == 16)
7522 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7524 output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
7527 [(set_attr "length" "8")])
7532 (define_insn "mve_vldrwq_fv4sf"
7533 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7534 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")]
7537 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7540 int regno = REGNO (operands[0]);
7541 ops[0] = gen_rtx_REG (TImode, regno);
7542 ops[1] = operands[1];
7543 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7546 [(set_attr "length" "4")])
7549 ;; [vldrwq_s vldrwq_u]
7551 (define_insn "mve_vldrwq_<supf>v4si"
7552 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7553 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")]
7559 int regno = REGNO (operands[0]);
7560 ops[0] = gen_rtx_REG (TImode, regno);
7561 ops[1] = operands[1];
7562 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7565 [(set_attr "length" "4")])
7570 (define_insn "mve_vldrwq_z_fv4sf"
7571 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7572 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")
7573 (match_operand:HI 2 "vpr_register_operand" "Up")]
7576 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7579 int regno = REGNO (operands[0]);
7580 ops[0] = gen_rtx_REG (TImode, regno);
7581 ops[1] = operands[1];
7582 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7585 [(set_attr "length" "8")])
7588 ;; [vldrwq_z_s vldrwq_z_u]
7590 (define_insn "mve_vldrwq_z_<supf>v4si"
7591 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7592 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")
7593 (match_operand:HI 2 "vpr_register_operand" "Up")]
7599 int regno = REGNO (operands[0]);
7600 ops[0] = gen_rtx_REG (TImode, regno);
7601 ops[1] = operands[1];
7602 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7605 [(set_attr "length" "8")])
7607 (define_expand "mve_vld1q_f<mode>"
7608 [(match_operand:MVE_0 0 "s_register_operand")
7609 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F)
7611 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
7613 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
7617 (define_expand "mve_vld1q_<supf><mode>"
7618 [(match_operand:MVE_2 0 "s_register_operand")
7619 (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q)
7623 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
7628 ;; [vldrdq_gather_base_s vldrdq_gather_base_u]
7630 (define_insn "mve_vldrdq_gather_base_<supf>v2di"
7631 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7632 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
7633 (match_operand:SI 2 "immediate_operand" "i")]
7639 ops[0] = operands[0];
7640 ops[1] = operands[1];
7641 ops[2] = operands[2];
7642 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
7645 [(set_attr "length" "4")])
7648 ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
7650 (define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
7651 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7652 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
7653 (match_operand:SI 2 "immediate_operand" "i")
7654 (match_operand:HI 3 "vpr_register_operand" "Up")]
7660 ops[0] = operands[0];
7661 ops[1] = operands[1];
7662 ops[2] = operands[2];
7663 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
7666 [(set_attr "length" "8")])
7669 ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
7671 (define_insn "mve_vldrdq_gather_offset_<supf>v2di"
7672 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7673 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7674 (match_operand:V2DI 2 "s_register_operand" "w")]
7680 ops[0] = operands[0];
7681 ops[1] = operands[1];
7682 ops[2] = operands[2];
7683 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
7686 [(set_attr "length" "4")])
7689 ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
7691 (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
7692 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7693 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7694 (match_operand:V2DI 2 "s_register_operand" "w")
7695 (match_operand:HI 3 "vpr_register_operand" "Up")]
7701 ops[0] = operands[0];
7702 ops[1] = operands[1];
7703 ops[2] = operands[2];
7704 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
7707 [(set_attr "length" "8")])
7710 ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
7712 (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
7713 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7714 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7715 (match_operand:V2DI 2 "s_register_operand" "w")]
7721 ops[0] = operands[0];
7722 ops[1] = operands[1];
7723 ops[2] = operands[2];
7724 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
7727 [(set_attr "length" "4")])
7730 ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
7732 (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
7733 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7734 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7735 (match_operand:V2DI 2 "s_register_operand" "w")
7736 (match_operand:HI 3 "vpr_register_operand" "Up")]
7742 ops[0] = operands[0];
7743 ops[1] = operands[1];
7744 ops[2] = operands[2];
7745 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
7748 [(set_attr "length" "8")])
7751 ;; [vldrhq_gather_offset_f]
7753 (define_insn "mve_vldrhq_gather_offset_fv8hf"
7754 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7755 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7756 (match_operand:V8HI 2 "s_register_operand" "w")]
7759 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7762 ops[0] = operands[0];
7763 ops[1] = operands[1];
7764 ops[2] = operands[2];
7765 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
7768 [(set_attr "length" "4")])
7771 ;; [vldrhq_gather_offset_z_f]
7773 (define_insn "mve_vldrhq_gather_offset_z_fv8hf"
7774 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7775 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7776 (match_operand:V8HI 2 "s_register_operand" "w")
7777 (match_operand:HI 3 "vpr_register_operand" "Up")]
7780 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7783 ops[0] = operands[0];
7784 ops[1] = operands[1];
7785 ops[2] = operands[2];
7786 ops[3] = operands[3];
7787 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
7790 [(set_attr "length" "8")])
7793 ;; [vldrhq_gather_shifted_offset_f]
7795 (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
7796 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7797 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7798 (match_operand:V8HI 2 "s_register_operand" "w")]
7801 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7804 ops[0] = operands[0];
7805 ops[1] = operands[1];
7806 ops[2] = operands[2];
7807 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
7810 [(set_attr "length" "4")])
7813 ;; [vldrhq_gather_shifted_offset_z_f]
7815 (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
7816 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7817 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7818 (match_operand:V8HI 2 "s_register_operand" "w")
7819 (match_operand:HI 3 "vpr_register_operand" "Up")]
7822 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7825 ops[0] = operands[0];
7826 ops[1] = operands[1];
7827 ops[2] = operands[2];
7828 ops[3] = operands[3];
7829 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
7832 [(set_attr "length" "8")])
7835 ;; [vldrwq_gather_base_f]
7837 (define_insn "mve_vldrwq_gather_base_fv4sf"
7838 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7839 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
7840 (match_operand:SI 2 "immediate_operand" "i")]
7843 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7846 ops[0] = operands[0];
7847 ops[1] = operands[1];
7848 ops[2] = operands[2];
7849 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7852 [(set_attr "length" "4")])
7855 ;; [vldrwq_gather_base_z_f]
7857 (define_insn "mve_vldrwq_gather_base_z_fv4sf"
7858 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7859 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
7860 (match_operand:SI 2 "immediate_operand" "i")
7861 (match_operand:HI 3 "vpr_register_operand" "Up")]
7864 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7867 ops[0] = operands[0];
7868 ops[1] = operands[1];
7869 ops[2] = operands[2];
7870 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7873 [(set_attr "length" "8")])
7876 ;; [vldrwq_gather_offset_f]
7878 (define_insn "mve_vldrwq_gather_offset_fv4sf"
7879 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7880 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
7881 (match_operand:V4SI 2 "s_register_operand" "w")]
7884 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7887 ops[0] = operands[0];
7888 ops[1] = operands[1];
7889 ops[2] = operands[2];
7890 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
7893 [(set_attr "length" "4")])
7896 ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
7898 (define_insn "mve_vldrwq_gather_offset_<supf>v4si"
7899 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7900 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
7901 (match_operand:V4SI 2 "s_register_operand" "w")]
7907 ops[0] = operands[0];
7908 ops[1] = operands[1];
7909 ops[2] = operands[2];
7910 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
7913 [(set_attr "length" "4")])
7916 ;; [vldrwq_gather_offset_z_f]
7918 (define_insn "mve_vldrwq_gather_offset_z_fv4sf"
7919 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7920 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
7921 (match_operand:V4SI 2 "s_register_operand" "w")
7922 (match_operand:HI 3 "vpr_register_operand" "Up")]
7925 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7928 ops[0] = operands[0];
7929 ops[1] = operands[1];
7930 ops[2] = operands[2];
7931 ops[3] = operands[3];
7932 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
7935 [(set_attr "length" "8")])
7938 ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
7940 (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
7941 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7942 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
7943 (match_operand:V4SI 2 "s_register_operand" "w")
7944 (match_operand:HI 3 "vpr_register_operand" "Up")]
7950 ops[0] = operands[0];
7951 ops[1] = operands[1];
7952 ops[2] = operands[2];
7953 ops[3] = operands[3];
7954 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
7957 [(set_attr "length" "8")])
7960 ;; [vldrwq_gather_shifted_offset_f]
7962 (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
7963 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7964 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
7965 (match_operand:V4SI 2 "s_register_operand" "w")]
7968 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7971 ops[0] = operands[0];
7972 ops[1] = operands[1];
7973 ops[2] = operands[2];
7974 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
7977 [(set_attr "length" "4")])
7980 ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
7982 (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
7983 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7984 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
7985 (match_operand:V4SI 2 "s_register_operand" "w")]
7991 ops[0] = operands[0];
7992 ops[1] = operands[1];
7993 ops[2] = operands[2];
7994 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
7997 [(set_attr "length" "4")])
8000 ;; [vldrwq_gather_shifted_offset_z_f]
8002 (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
8003 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8004 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8005 (match_operand:V4SI 2 "s_register_operand" "w")
8006 (match_operand:HI 3 "vpr_register_operand" "Up")]
8009 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8012 ops[0] = operands[0];
8013 ops[1] = operands[1];
8014 ops[2] = operands[2];
8015 ops[3] = operands[3];
8016 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8019 [(set_attr "length" "8")])
8022 ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
8024 (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
8025 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8026 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8027 (match_operand:V4SI 2 "s_register_operand" "w")
8028 (match_operand:HI 3 "vpr_register_operand" "Up")]
8034 ops[0] = operands[0];
8035 ops[1] = operands[1];
8036 ops[2] = operands[2];
8037 ops[3] = operands[3];
8038 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8041 [(set_attr "length" "8")])
8046 (define_insn "mve_vstrhq_fv8hf"
8047 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8048 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
8051 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8054 int regno = REGNO (operands[1]);
8055 ops[1] = gen_rtx_REG (TImode, regno);
8056 ops[0] = operands[0];
8057 output_asm_insn ("vstrh.16\t%q1, %E0",ops);
8060 [(set_attr "length" "4")])
8065 (define_insn "mve_vstrhq_p_fv8hf"
8066 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8067 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
8068 (match_operand:HI 2 "vpr_register_operand" "Up")]
8071 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8074 int regno = REGNO (operands[1]);
8075 ops[1] = gen_rtx_REG (TImode, regno);
8076 ops[0] = operands[0];
8077 output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops);
8080 [(set_attr "length" "8")])
8083 ;; [vstrhq_p_s vstrhq_p_u]
8085 (define_insn "mve_vstrhq_p_<supf><mode>"
8086 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8087 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
8088 (match_operand:HI 2 "vpr_register_operand" "Up")]
8094 int regno = REGNO (operands[1]);
8095 ops[1] = gen_rtx_REG (TImode, regno);
8096 ops[0] = operands[0];
8097 output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops);
8100 [(set_attr "length" "8")])
8103 ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
8105 (define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>"
8106 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8107 (match_operand:MVE_6 1 "s_register_operand")
8108 (match_operand:MVE_6 2 "s_register_operand")
8109 (match_operand:HI 3 "vpr_register_operand")
8110 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8113 rtx ind = XEXP (operands[0], 0);
8114 gcc_assert (REG_P (ind));
8116 gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
8122 (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn"
8123 [(set (mem:BLK (scratch))
8125 [(match_operand:SI 0 "register_operand" "r")
8126 (match_operand:MVE_6 1 "s_register_operand" "w")
8127 (match_operand:MVE_6 2 "s_register_operand" "w")
8128 (match_operand:HI 3 "vpr_register_operand" "Up")]
8131 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]"
8132 [(set_attr "length" "8")])
8135 ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
8137 (define_expand "mve_vstrhq_scatter_offset_<supf><mode>"
8138 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8139 (match_operand:MVE_6 1 "s_register_operand")
8140 (match_operand:MVE_6 2 "s_register_operand")
8141 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8144 rtx ind = XEXP (operands[0], 0);
8145 gcc_assert (REG_P (ind));
8146 emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1],
8151 (define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn"
8152 [(set (mem:BLK (scratch))
8154 [(match_operand:SI 0 "register_operand" "r")
8155 (match_operand:MVE_6 1 "s_register_operand" "w")
8156 (match_operand:MVE_6 2 "s_register_operand" "w")]
8159 "vstrh.<V_sz_elem>\t%q2, [%0, %q1]"
8160 [(set_attr "length" "4")])
8163 ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
8165 (define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
8166 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8167 (match_operand:MVE_6 1 "s_register_operand")
8168 (match_operand:MVE_6 2 "s_register_operand")
8169 (match_operand:HI 3 "vpr_register_operand")
8170 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8173 rtx ind = XEXP (operands[0], 0);
8174 gcc_assert (REG_P (ind));
8176 gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1],
8182 (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn"
8183 [(set (mem:BLK (scratch))
8185 [(match_operand:SI 0 "register_operand" "r")
8186 (match_operand:MVE_6 1 "s_register_operand" "w")
8187 (match_operand:MVE_6 2 "s_register_operand" "w")
8188 (match_operand:HI 3 "vpr_register_operand" "Up")]
8191 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8192 [(set_attr "length" "8")])
8195 ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
8197 (define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
8198 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8199 (match_operand:MVE_6 1 "s_register_operand")
8200 (match_operand:MVE_6 2 "s_register_operand")
8201 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8204 rtx ind = XEXP (operands[0], 0);
8205 gcc_assert (REG_P (ind));
8207 gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1],
8212 (define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn"
8213 [(set (mem:BLK (scratch))
8215 [(match_operand:SI 0 "register_operand" "r")
8216 (match_operand:MVE_6 1 "s_register_operand" "w")
8217 (match_operand:MVE_6 2 "s_register_operand" "w")]
8220 "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8221 [(set_attr "length" "4")])
8224 ;; [vstrhq_s, vstrhq_u]
8226 (define_insn "mve_vstrhq_<supf><mode>"
8227 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8228 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
8234 int regno = REGNO (operands[1]);
8235 ops[1] = gen_rtx_REG (TImode, regno);
8236 ops[0] = operands[0];
8237 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
8240 [(set_attr "length" "4")])
8245 (define_insn "mve_vstrwq_fv4sf"
8246 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8247 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
8250 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8253 int regno = REGNO (operands[1]);
8254 ops[1] = gen_rtx_REG (TImode, regno);
8255 ops[0] = operands[0];
8256 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8259 [(set_attr "length" "4")])
8264 (define_insn "mve_vstrwq_p_fv4sf"
8265 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8266 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
8267 (match_operand:HI 2 "vpr_register_operand" "Up")]
8270 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8273 int regno = REGNO (operands[1]);
8274 ops[1] = gen_rtx_REG (TImode, regno);
8275 ops[0] = operands[0];
8276 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8279 [(set_attr "length" "8")])
8282 ;; [vstrwq_p_s vstrwq_p_u]
8284 (define_insn "mve_vstrwq_p_<supf>v4si"
8285 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8286 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8287 (match_operand:HI 2 "vpr_register_operand" "Up")]
8293 int regno = REGNO (operands[1]);
8294 ops[1] = gen_rtx_REG (TImode, regno);
8295 ops[0] = operands[0];
8296 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8299 [(set_attr "length" "8")])
8302 ;; [vstrwq_s vstrwq_u]
8304 (define_insn "mve_vstrwq_<supf>v4si"
8305 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8306 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
8312 int regno = REGNO (operands[1]);
8313 ops[1] = gen_rtx_REG (TImode, regno);
8314 ops[0] = operands[0];
8315 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8318 [(set_attr "length" "4")])
8320 (define_expand "mve_vst1q_f<mode>"
8321 [(match_operand:<MVE_CNVT> 0 "mve_memory_operand")
8322 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
8324 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8326 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8330 (define_expand "mve_vst1q_<supf><mode>"
8331 [(match_operand:MVE_2 0 "mve_memory_operand")
8332 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
8336 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8341 ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
8343 (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
8344 [(set (mem:BLK (scratch))
8346 [(match_operand:V2DI 0 "s_register_operand" "w")
8347 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8348 (match_operand:V2DI 2 "s_register_operand" "w")
8349 (match_operand:HI 3 "vpr_register_operand" "Up")]
8355 ops[0] = operands[0];
8356 ops[1] = operands[1];
8357 ops[2] = operands[2];
8358 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
8361 [(set_attr "length" "8")])
8364 ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
8366 (define_insn "mve_vstrdq_scatter_base_<supf>v2di"
8367 [(set (mem:BLK (scratch))
8369 [(match_operand:V2DI 0 "s_register_operand" "=w")
8370 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8371 (match_operand:V2DI 2 "s_register_operand" "w")]
8377 ops[0] = operands[0];
8378 ops[1] = operands[1];
8379 ops[2] = operands[2];
8380 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
8383 [(set_attr "length" "4")])
8386 ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
8388 (define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di"
8389 [(match_operand:V2DI 0 "mve_scatter_memory")
8390 (match_operand:V2DI 1 "s_register_operand")
8391 (match_operand:V2DI 2 "s_register_operand")
8392 (match_operand:HI 3 "vpr_register_operand")
8393 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8396 rtx ind = XEXP (operands[0], 0);
8397 gcc_assert (REG_P (ind));
8398 emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1],
8404 (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn"
8405 [(set (mem:BLK (scratch))
8407 [(match_operand:SI 0 "register_operand" "r")
8408 (match_operand:V2DI 1 "s_register_operand" "w")
8409 (match_operand:V2DI 2 "s_register_operand" "w")
8410 (match_operand:HI 3 "vpr_register_operand" "Up")]
8413 "vpst\;vstrdt.64\t%q2, [%0, %q1]"
8414 [(set_attr "length" "8")])
8417 ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
8419 (define_expand "mve_vstrdq_scatter_offset_<supf>v2di"
8420 [(match_operand:V2DI 0 "mve_scatter_memory")
8421 (match_operand:V2DI 1 "s_register_operand")
8422 (match_operand:V2DI 2 "s_register_operand")
8423 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8426 rtx ind = XEXP (operands[0], 0);
8427 gcc_assert (REG_P (ind));
8428 emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1],
8433 (define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn"
8434 [(set (mem:BLK (scratch))
8436 [(match_operand:SI 0 "register_operand" "r")
8437 (match_operand:V2DI 1 "s_register_operand" "w")
8438 (match_operand:V2DI 2 "s_register_operand" "w")]
8441 "vstrd.64\t%q2, [%0, %q1]"
8442 [(set_attr "length" "4")])
8445 ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
8447 (define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
8448 [(match_operand:V2DI 0 "mve_scatter_memory")
8449 (match_operand:V2DI 1 "s_register_operand")
8450 (match_operand:V2DI 2 "s_register_operand")
8451 (match_operand:HI 3 "vpr_register_operand")
8452 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8455 rtx ind = XEXP (operands[0], 0);
8456 gcc_assert (REG_P (ind));
8458 gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1],
8464 (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn"
8465 [(set (mem:BLK (scratch))
8467 [(match_operand:SI 0 "register_operand" "r")
8468 (match_operand:V2DI 1 "s_register_operand" "w")
8469 (match_operand:V2DI 2 "s_register_operand" "w")
8470 (match_operand:HI 3 "vpr_register_operand" "Up")]
8473 "vpst\;vstrdt.64\t%q2, [%0, %q1, UXTW #3]"
8474 [(set_attr "length" "8")])
8477 ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
8479 (define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
8480 [(match_operand:V2DI 0 "mve_scatter_memory")
8481 (match_operand:V2DI 1 "s_register_operand")
8482 (match_operand:V2DI 2 "s_register_operand")
8483 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8486 rtx ind = XEXP (operands[0], 0);
8487 gcc_assert (REG_P (ind));
8489 gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1],
8494 (define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn"
8495 [(set (mem:BLK (scratch))
8497 [(match_operand:SI 0 "register_operand" "r")
8498 (match_operand:V2DI 1 "s_register_operand" "w")
8499 (match_operand:V2DI 2 "s_register_operand" "w")]
8502 "vstrd.64\t%q2, [%0, %q1, UXTW #3]"
8503 [(set_attr "length" "4")])
8506 ;; [vstrhq_scatter_offset_f]
8508 (define_expand "mve_vstrhq_scatter_offset_fv8hf"
8509 [(match_operand:V8HI 0 "mve_scatter_memory")
8510 (match_operand:V8HI 1 "s_register_operand")
8511 (match_operand:V8HF 2 "s_register_operand")
8512 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8513 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8515 rtx ind = XEXP (operands[0], 0);
8516 gcc_assert (REG_P (ind));
8517 emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1],
8522 (define_insn "mve_vstrhq_scatter_offset_fv8hf_insn"
8523 [(set (mem:BLK (scratch))
8525 [(match_operand:SI 0 "register_operand" "r")
8526 (match_operand:V8HI 1 "s_register_operand" "w")
8527 (match_operand:V8HF 2 "s_register_operand" "w")]
8529 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8530 "vstrh.16\t%q2, [%0, %q1]"
8531 [(set_attr "length" "4")])
8534 ;; [vstrhq_scatter_offset_p_f]
8536 (define_expand "mve_vstrhq_scatter_offset_p_fv8hf"
8537 [(match_operand:V8HI 0 "mve_scatter_memory")
8538 (match_operand:V8HI 1 "s_register_operand")
8539 (match_operand:V8HF 2 "s_register_operand")
8540 (match_operand:HI 3 "vpr_register_operand")
8541 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8542 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8544 rtx ind = XEXP (operands[0], 0);
8545 gcc_assert (REG_P (ind));
8546 emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1],
8552 (define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn"
8553 [(set (mem:BLK (scratch))
8555 [(match_operand:SI 0 "register_operand" "r")
8556 (match_operand:V8HI 1 "s_register_operand" "w")
8557 (match_operand:V8HF 2 "s_register_operand" "w")
8558 (match_operand:HI 3 "vpr_register_operand" "Up")]
8560 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8561 "vpst\;vstrht.16\t%q2, [%0, %q1]"
8562 [(set_attr "length" "8")])
8565 ;; [vstrhq_scatter_shifted_offset_f]
8567 (define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf"
8568 [(match_operand:V8HI 0 "memory_operand" "=Us")
8569 (match_operand:V8HI 1 "s_register_operand" "w")
8570 (match_operand:V8HF 2 "s_register_operand" "w")
8571 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8572 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8574 rtx ind = XEXP (operands[0], 0);
8575 gcc_assert (REG_P (ind));
8576 emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1],
8581 (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn"
8582 [(set (mem:BLK (scratch))
8584 [(match_operand:SI 0 "register_operand" "r")
8585 (match_operand:V8HI 1 "s_register_operand" "w")
8586 (match_operand:V8HF 2 "s_register_operand" "w")]
8588 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8589 "vstrh.16\t%q2, [%0, %q1, uxtw #1]"
8590 [(set_attr "length" "4")])
8593 ;; [vstrhq_scatter_shifted_offset_p_f]
8595 (define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
8596 [(match_operand:V8HI 0 "memory_operand" "=Us")
8597 (match_operand:V8HI 1 "s_register_operand" "w")
8598 (match_operand:V8HF 2 "s_register_operand" "w")
8599 (match_operand:HI 3 "vpr_register_operand" "Up")
8600 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8601 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8603 rtx ind = XEXP (operands[0], 0);
8604 gcc_assert (REG_P (ind));
8606 gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1],
8612 (define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn"
8613 [(set (mem:BLK (scratch))
8615 [(match_operand:SI 0 "register_operand" "r")
8616 (match_operand:V8HI 1 "s_register_operand" "w")
8617 (match_operand:V8HF 2 "s_register_operand" "w")
8618 (match_operand:HI 3 "vpr_register_operand" "Up")]
8620 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8621 "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]"
8622 [(set_attr "length" "8")])
8625 ;; [vstrwq_scatter_base_f]
8627 (define_insn "mve_vstrwq_scatter_base_fv4sf"
8628 [(set (mem:BLK (scratch))
8630 [(match_operand:V4SI 0 "s_register_operand" "w")
8631 (match_operand:SI 1 "immediate_operand" "i")
8632 (match_operand:V4SF 2 "s_register_operand" "w")]
8635 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8638 ops[0] = operands[0];
8639 ops[1] = operands[1];
8640 ops[2] = operands[2];
8641 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
8644 [(set_attr "length" "4")])
8647 ;; [vstrwq_scatter_base_p_f]
8649 (define_insn "mve_vstrwq_scatter_base_p_fv4sf"
8650 [(set (mem:BLK (scratch))
8652 [(match_operand:V4SI 0 "s_register_operand" "w")
8653 (match_operand:SI 1 "immediate_operand" "i")
8654 (match_operand:V4SF 2 "s_register_operand" "w")
8655 (match_operand:HI 3 "vpr_register_operand" "Up")]
8658 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8661 ops[0] = operands[0];
8662 ops[1] = operands[1];
8663 ops[2] = operands[2];
8664 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
8667 [(set_attr "length" "8")])
8670 ;; [vstrwq_scatter_offset_f]
8672 (define_expand "mve_vstrwq_scatter_offset_fv4sf"
8673 [(match_operand:V4SI 0 "mve_scatter_memory")
8674 (match_operand:V4SI 1 "s_register_operand")
8675 (match_operand:V4SF 2 "s_register_operand")
8676 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
8677 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8679 rtx ind = XEXP (operands[0], 0);
8680 gcc_assert (REG_P (ind));
8681 emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1],
8686 (define_insn "mve_vstrwq_scatter_offset_fv4sf_insn"
8687 [(set (mem:BLK (scratch))
8689 [(match_operand:SI 0 "register_operand" "r")
8690 (match_operand:V4SI 1 "s_register_operand" "w")
8691 (match_operand:V4SF 2 "s_register_operand" "w")]
8693 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8694 "vstrw.32\t%q2, [%0, %q1]"
8695 [(set_attr "length" "4")])
8698 ;; [vstrwq_scatter_offset_p_f]
8700 (define_expand "mve_vstrwq_scatter_offset_p_fv4sf"
8701 [(match_operand:V4SI 0 "mve_scatter_memory")
8702 (match_operand:V4SI 1 "s_register_operand")
8703 (match_operand:V4SF 2 "s_register_operand")
8704 (match_operand:HI 3 "vpr_register_operand")
8705 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
8706 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8708 rtx ind = XEXP (operands[0], 0);
8709 gcc_assert (REG_P (ind));
8710 emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1],
8716 (define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn"
8717 [(set (mem:BLK (scratch))
8719 [(match_operand:SI 0 "register_operand" "r")
8720 (match_operand:V4SI 1 "s_register_operand" "w")
8721 (match_operand:V4SF 2 "s_register_operand" "w")
8722 (match_operand:HI 3 "vpr_register_operand" "Up")]
8724 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8725 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
8726 [(set_attr "length" "8")])
8729 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
8731 (define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si"
8732 [(match_operand:V4SI 0 "mve_scatter_memory")
8733 (match_operand:V4SI 1 "s_register_operand")
8734 (match_operand:V4SI 2 "s_register_operand")
8735 (match_operand:HI 3 "vpr_register_operand")
8736 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
8739 rtx ind = XEXP (operands[0], 0);
8740 gcc_assert (REG_P (ind));
8741 emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1],
8747 (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn"
8748 [(set (mem:BLK (scratch))
8750 [(match_operand:SI 0 "register_operand" "r")
8751 (match_operand:V4SI 1 "s_register_operand" "w")
8752 (match_operand:V4SI 2 "s_register_operand" "w")
8753 (match_operand:HI 3 "vpr_register_operand" "Up")]
8756 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
8757 [(set_attr "length" "8")])
8760 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
8762 (define_expand "mve_vstrwq_scatter_offset_<supf>v4si"
8763 [(match_operand:V4SI 0 "mve_scatter_memory")
8764 (match_operand:V4SI 1 "s_register_operand")
8765 (match_operand:V4SI 2 "s_register_operand")
8766 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
8769 rtx ind = XEXP (operands[0], 0);
8770 gcc_assert (REG_P (ind));
8771 emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1],
8776 (define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn"
8777 [(set (mem:BLK (scratch))
8779 [(match_operand:SI 0 "register_operand" "r")
8780 (match_operand:V4SI 1 "s_register_operand" "w")
8781 (match_operand:V4SI 2 "s_register_operand" "w")]
8784 "vstrw.32\t%q2, [%0, %q1]"
8785 [(set_attr "length" "4")])
8788 ;; [vstrwq_scatter_shifted_offset_f]
8790 (define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf"
8791 [(match_operand:V4SI 0 "mve_scatter_memory")
8792 (match_operand:V4SI 1 "s_register_operand")
8793 (match_operand:V4SF 2 "s_register_operand")
8794 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
8795 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8797 rtx ind = XEXP (operands[0], 0);
8798 gcc_assert (REG_P (ind));
8799 emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1],
8804 (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn"
8805 [(set (mem:BLK (scratch))
8807 [(match_operand:SI 0 "register_operand" "r")
8808 (match_operand:V4SI 1 "s_register_operand" "w")
8809 (match_operand:V4SF 2 "s_register_operand" "w")]
8811 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8812 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
8813 [(set_attr "length" "8")])
8816 ;; [vstrwq_scatter_shifted_offset_p_f]
8818 (define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
8819 [(match_operand:V4SI 0 "mve_scatter_memory")
8820 (match_operand:V4SI 1 "s_register_operand")
8821 (match_operand:V4SF 2 "s_register_operand")
8822 (match_operand:HI 3 "vpr_register_operand")
8823 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
8824 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8826 rtx ind = XEXP (operands[0], 0);
8827 gcc_assert (REG_P (ind));
8829 gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1],
8835 (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn"
8836 [(set (mem:BLK (scratch))
8838 [(match_operand:SI 0 "register_operand" "r")
8839 (match_operand:V4SI 1 "s_register_operand" "w")
8840 (match_operand:V4SF 2 "s_register_operand" "w")
8841 (match_operand:HI 3 "vpr_register_operand" "Up")]
8843 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8844 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
8845 [(set_attr "length" "8")])
8848 ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
8850 (define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
8851 [(match_operand:V4SI 0 "mve_scatter_memory")
8852 (match_operand:V4SI 1 "s_register_operand")
8853 (match_operand:V4SI 2 "s_register_operand")
8854 (match_operand:HI 3 "vpr_register_operand")
8855 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
8858 rtx ind = XEXP (operands[0], 0);
8859 gcc_assert (REG_P (ind));
8861 gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1],
8867 (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn"
8868 [(set (mem:BLK (scratch))
8870 [(match_operand:SI 0 "register_operand" "r")
8871 (match_operand:V4SI 1 "s_register_operand" "w")
8872 (match_operand:V4SI 2 "s_register_operand" "w")
8873 (match_operand:HI 3 "vpr_register_operand" "Up")]
8876 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
8877 [(set_attr "length" "8")])
8880 ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
8882 (define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
8883 [(match_operand:V4SI 0 "mve_scatter_memory")
8884 (match_operand:V4SI 1 "s_register_operand")
8885 (match_operand:V4SI 2 "s_register_operand")
8886 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
8889 rtx ind = XEXP (operands[0], 0);
8890 gcc_assert (REG_P (ind));
8892 gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1],
8897 (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn"
8898 [(set (mem:BLK (scratch))
8900 [(match_operand:SI 0 "register_operand" "r")
8901 (match_operand:V4SI 1 "s_register_operand" "w")
8902 (match_operand:V4SI 2 "s_register_operand" "w")]
8905 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
8906 [(set_attr "length" "4")])
8909 ;; [vaddq_s, vaddq_u])
8911 (define_insn "mve_vaddq<mode>"
8913 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
8914 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
8915 (match_operand:MVE_2 2 "s_register_operand" "w")))
8918 "vadd.i%#<V_sz_elem> %q0, %q1, %q2"
8919 [(set_attr "type" "mve_move")
8925 (define_insn "mve_vaddq_f<mode>"
8927 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
8928 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
8929 (match_operand:MVE_0 2 "s_register_operand" "w")))
8931 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8932 "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
8933 [(set_attr "type" "mve_move")
8939 (define_expand "mve_vidupq_n_u<mode>"
8940 [(match_operand:MVE_2 0 "s_register_operand")
8941 (match_operand:SI 1 "s_register_operand")
8942 (match_operand:SI 2 "mve_imm_selective_upto_8")]
8945 rtx temp = gen_reg_rtx (SImode);
8946 emit_move_insn (temp, operands[1]);
8947 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
8948 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
8956 (define_insn "mve_vidupq_u<mode>_insn"
8957 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
8958 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
8959 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
8961 (set (match_operand:SI 1 "s_register_operand" "=Te")
8962 (plus:SI (match_dup 2)
8963 (match_operand:SI 4 "immediate_operand" "i")))]
8965 "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
8970 (define_expand "mve_vidupq_m_n_u<mode>"
8971 [(match_operand:MVE_2 0 "s_register_operand")
8972 (match_operand:MVE_2 1 "s_register_operand")
8973 (match_operand:SI 2 "s_register_operand")
8974 (match_operand:SI 3 "mve_imm_selective_upto_8")
8975 (match_operand:HI 4 "vpr_register_operand")]
8978 rtx temp = gen_reg_rtx (SImode);
8979 emit_move_insn (temp, operands[2]);
8980 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
8981 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
8982 operands[2], operands[3],
8988 ;; [vidupq_m_wb_u_insn])
8990 (define_insn "mve_vidupq_m_wb_u<mode>_insn"
8991 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
8992 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
8993 (match_operand:SI 3 "s_register_operand" "2")
8994 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
8995 (match_operand:HI 5 "vpr_register_operand" "Up")]
8997 (set (match_operand:SI 2 "s_register_operand" "=Te")
8998 (plus:SI (match_dup 3)
8999 (match_operand:SI 6 "immediate_operand" "i")))]
9001 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
9002 [(set_attr "length""8")])
9007 (define_expand "mve_vddupq_n_u<mode>"
9008 [(match_operand:MVE_2 0 "s_register_operand")
9009 (match_operand:SI 1 "s_register_operand")
9010 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9013 rtx temp = gen_reg_rtx (SImode);
9014 emit_move_insn (temp, operands[1]);
9015 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9016 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
9024 (define_insn "mve_vddupq_u<mode>_insn"
9025 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9026 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9027 (match_operand:SI 3 "immediate_operand" "i")]
9029 (set (match_operand:SI 1 "s_register_operand" "=Te")
9030 (minus:SI (match_dup 2)
9031 (match_operand:SI 4 "immediate_operand" "i")))]
9033 "vddup.u%#<V_sz_elem> %q0, %1, %3")
9038 (define_expand "mve_vddupq_m_n_u<mode>"
9039 [(match_operand:MVE_2 0 "s_register_operand")
9040 (match_operand:MVE_2 1 "s_register_operand")
9041 (match_operand:SI 2 "s_register_operand")
9042 (match_operand:SI 3 "mve_imm_selective_upto_8")
9043 (match_operand:HI 4 "vpr_register_operand")]
9046 rtx temp = gen_reg_rtx (SImode);
9047 emit_move_insn (temp, operands[2]);
9048 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9049 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9050 operands[2], operands[3],
9056 ;; [vddupq_m_wb_u_insn])
9058 (define_insn "mve_vddupq_m_wb_u<mode>_insn"
9059 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9060 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9061 (match_operand:SI 3 "s_register_operand" "2")
9062 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9063 (match_operand:HI 5 "vpr_register_operand" "Up")]
9065 (set (match_operand:SI 2 "s_register_operand" "=Te")
9066 (minus:SI (match_dup 3)
9067 (match_operand:SI 6 "immediate_operand" "i")))]
9069 "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
9070 [(set_attr "length""8")])
9075 (define_expand "mve_vdwdupq_n_u<mode>"
9076 [(match_operand:MVE_2 0 "s_register_operand")
9077 (match_operand:SI 1 "s_register_operand")
9078 (match_operand:DI 2 "s_register_operand")
9079 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9082 rtx ignore_wb = gen_reg_rtx (SImode);
9083 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9084 operands[1], operands[2],
9092 (define_expand "mve_vdwdupq_wb_u<mode>"
9093 [(match_operand:SI 0 "s_register_operand")
9094 (match_operand:SI 1 "s_register_operand")
9095 (match_operand:DI 2 "s_register_operand")
9096 (match_operand:SI 3 "mve_imm_selective_upto_8")
9097 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9100 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9101 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9102 operands[1], operands[2],
9108 ;; [vdwdupq_wb_u_insn])
9110 (define_insn "mve_vdwdupq_wb_u<mode>_insn"
9111 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9112 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9113 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9114 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9116 (set (match_operand:SI 1 "s_register_operand" "=Te")
9117 (unspec:SI [(match_dup 2)
9118 (subreg:SI (match_dup 3) 4)
9122 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9128 (define_expand "mve_vdwdupq_m_n_u<mode>"
9129 [(match_operand:MVE_2 0 "s_register_operand")
9130 (match_operand:MVE_2 1 "s_register_operand")
9131 (match_operand:SI 2 "s_register_operand")
9132 (match_operand:DI 3 "s_register_operand")
9133 (match_operand:SI 4 "mve_imm_selective_upto_8")
9134 (match_operand:HI 5 "vpr_register_operand")]
9137 rtx ignore_wb = gen_reg_rtx (SImode);
9138 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9139 operands[1], operands[2],
9140 operands[3], operands[4],
9146 ;; [vdwdupq_m_wb_u])
9148 (define_expand "mve_vdwdupq_m_wb_u<mode>"
9149 [(match_operand:SI 0 "s_register_operand")
9150 (match_operand:MVE_2 1 "s_register_operand")
9151 (match_operand:SI 2 "s_register_operand")
9152 (match_operand:DI 3 "s_register_operand")
9153 (match_operand:SI 4 "mve_imm_selective_upto_8")
9154 (match_operand:HI 5 "vpr_register_operand")]
9157 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9158 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9159 operands[1], operands[2],
9160 operands[3], operands[4],
9166 ;; [vdwdupq_m_wb_u_insn])
9168 (define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
9169 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9170 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9171 (match_operand:SI 3 "s_register_operand" "1")
9172 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9173 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9174 (match_operand:HI 6 "vpr_register_operand" "Up")]
9176 (set (match_operand:SI 1 "s_register_operand" "=Te")
9177 (unspec:SI [(match_dup 2)
9179 (subreg:SI (match_dup 4) 4)
9185 "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9186 [(set_attr "type" "mve_move")
9187 (set_attr "length""8")])
9192 (define_expand "mve_viwdupq_n_u<mode>"
9193 [(match_operand:MVE_2 0 "s_register_operand")
9194 (match_operand:SI 1 "s_register_operand")
9195 (match_operand:DI 2 "s_register_operand")
9196 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9199 rtx ignore_wb = gen_reg_rtx (SImode);
9200 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9201 operands[1], operands[2],
9209 (define_expand "mve_viwdupq_wb_u<mode>"
9210 [(match_operand:SI 0 "s_register_operand")
9211 (match_operand:SI 1 "s_register_operand")
9212 (match_operand:DI 2 "s_register_operand")
9213 (match_operand:SI 3 "mve_imm_selective_upto_8")
9214 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9217 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9218 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9219 operands[1], operands[2],
9225 ;; [viwdupq_wb_u_insn])
9227 (define_insn "mve_viwdupq_wb_u<mode>_insn"
9228 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9229 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9230 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9231 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9233 (set (match_operand:SI 1 "s_register_operand" "=Te")
9234 (unspec:SI [(match_dup 2)
9235 (subreg:SI (match_dup 3) 4)
9239 "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9245 (define_expand "mve_viwdupq_m_n_u<mode>"
9246 [(match_operand:MVE_2 0 "s_register_operand")
9247 (match_operand:MVE_2 1 "s_register_operand")
9248 (match_operand:SI 2 "s_register_operand")
9249 (match_operand:DI 3 "s_register_operand")
9250 (match_operand:SI 4 "mve_imm_selective_upto_8")
9251 (match_operand:HI 5 "vpr_register_operand")]
9254 rtx ignore_wb = gen_reg_rtx (SImode);
9255 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9256 operands[1], operands[2],
9257 operands[3], operands[4],
9263 ;; [viwdupq_m_wb_u])
9265 (define_expand "mve_viwdupq_m_wb_u<mode>"
9266 [(match_operand:SI 0 "s_register_operand")
9267 (match_operand:MVE_2 1 "s_register_operand")
9268 (match_operand:SI 2 "s_register_operand")
9269 (match_operand:DI 3 "s_register_operand")
9270 (match_operand:SI 4 "mve_imm_selective_upto_8")
9271 (match_operand:HI 5 "vpr_register_operand")]
9274 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9275 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9276 operands[1], operands[2],
9277 operands[3], operands[4],
9283 ;; [viwdupq_m_wb_u_insn])
9285 (define_insn "mve_viwdupq_m_wb_u<mode>_insn"
9286 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9287 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9288 (match_operand:SI 3 "s_register_operand" "1")
9289 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9290 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9291 (match_operand:HI 6 "vpr_register_operand" "Up")]
9293 (set (match_operand:SI 1 "s_register_operand" "=Te")
9294 (unspec:SI [(match_dup 2)
9296 (subreg:SI (match_dup 4) 4)
9302 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9303 [(set_attr "type" "mve_move")
9304 (set_attr "length""8")])
9307 ;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u]
9309 (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si"
9310 [(set (mem:BLK (scratch))
9312 [(match_operand:V4SI 1 "s_register_operand" "0")
9313 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9314 (match_operand:V4SI 3 "s_register_operand" "w")]
9316 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9317 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9323 ops[0] = operands[1];
9324 ops[1] = operands[2];
9325 ops[2] = operands[3];
9326 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9329 [(set_attr "length" "4")])
9332 ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
9334 (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
9335 [(set (mem:BLK (scratch))
9337 [(match_operand:V4SI 1 "s_register_operand" "0")
9338 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9339 (match_operand:V4SI 3 "s_register_operand" "w")
9340 (match_operand:HI 4 "vpr_register_operand")]
9342 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9343 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9349 ops[0] = operands[1];
9350 ops[1] = operands[2];
9351 ops[2] = operands[3];
9352 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9355 [(set_attr "length" "8")])
9358 ;; [vstrwq_scatter_base_wb_f]
9360 (define_insn "mve_vstrwq_scatter_base_wb_fv4sf"
9361 [(set (mem:BLK (scratch))
9363 [(match_operand:V4SI 1 "s_register_operand" "0")
9364 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9365 (match_operand:V4SF 3 "s_register_operand" "w")]
9367 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9368 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9371 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9374 ops[0] = operands[1];
9375 ops[1] = operands[2];
9376 ops[2] = operands[3];
9377 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9380 [(set_attr "length" "4")])
9383 ;; [vstrwq_scatter_base_wb_p_f]
9385 (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf"
9386 [(set (mem:BLK (scratch))
9388 [(match_operand:V4SI 1 "s_register_operand" "0")
9389 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9390 (match_operand:V4SF 3 "s_register_operand" "w")
9391 (match_operand:HI 4 "vpr_register_operand")]
9393 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9394 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9397 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9400 ops[0] = operands[1];
9401 ops[1] = operands[2];
9402 ops[2] = operands[3];
9403 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9406 [(set_attr "length" "8")])
9409 ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
9411 (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di"
9412 [(set (mem:BLK (scratch))
9414 [(match_operand:V2DI 1 "s_register_operand" "0")
9415 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9416 (match_operand:V2DI 3 "s_register_operand" "w")]
9418 (set (match_operand:V2DI 0 "s_register_operand" "=&w")
9419 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9425 ops[0] = operands[1];
9426 ops[1] = operands[2];
9427 ops[2] = operands[3];
9428 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
9431 [(set_attr "length" "4")])
9434 ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
9436 (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
9437 [(set (mem:BLK (scratch))
9439 [(match_operand:V2DI 1 "s_register_operand" "0")
9440 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9441 (match_operand:V2DI 3 "s_register_operand" "w")
9442 (match_operand:HI 4 "vpr_register_operand")]
9444 (set (match_operand:V2DI 0 "s_register_operand" "=w")
9445 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9451 ops[0] = operands[1];
9452 ops[1] = operands[2];
9453 ops[2] = operands[3];
9454 output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops);
9457 [(set_attr "length" "8")])
9459 (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
9460 [(match_operand:V4SI 0 "s_register_operand")
9461 (match_operand:V4SI 1 "s_register_operand")
9462 (match_operand:SI 2 "mve_vldrd_immediate")
9463 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9466 rtx ignore_result = gen_reg_rtx (V4SImode);
9468 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0],
9469 operands[1], operands[2]));
9473 (define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si"
9474 [(match_operand:V4SI 0 "s_register_operand")
9475 (match_operand:V4SI 1 "s_register_operand")
9476 (match_operand:SI 2 "mve_vldrd_immediate")
9477 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9480 rtx ignore_wb = gen_reg_rtx (V4SImode);
9482 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
9483 operands[1], operands[2]));
9488 ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
9490 (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
9491 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9492 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9493 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9494 (mem:BLK (scratch))]
9496 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9497 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9503 ops[0] = operands[0];
9504 ops[1] = operands[2];
9505 ops[2] = operands[3];
9506 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9509 [(set_attr "length" "4")])
9511 (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
9512 [(match_operand:V4SI 0 "s_register_operand")
9513 (match_operand:V4SI 1 "s_register_operand")
9514 (match_operand:SI 2 "mve_vldrd_immediate")
9515 (match_operand:HI 3 "vpr_register_operand")
9516 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9519 rtx ignore_result = gen_reg_rtx (V4SImode);
9521 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0],
9522 operands[1], operands[2],
9526 (define_expand "mve_vldrwq_gather_base_nowb_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:HI 3 "vpr_register_operand")
9531 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9534 rtx ignore_wb = gen_reg_rtx (V4SImode);
9536 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
9537 operands[1], operands[2],
9543 ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
9545 (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
9546 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9547 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9548 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9549 (match_operand:HI 4 "vpr_register_operand" "Up")
9550 (mem:BLK (scratch))]
9552 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9553 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9559 ops[0] = operands[0];
9560 ops[1] = operands[2];
9561 ops[2] = operands[3];
9562 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
9565 [(set_attr "length" "8")])
9567 (define_expand "mve_vldrwq_gather_base_wb_fv4sf"
9568 [(match_operand:V4SI 0 "s_register_operand")
9569 (match_operand:V4SI 1 "s_register_operand")
9570 (match_operand:SI 2 "mve_vldrd_immediate")
9571 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9572 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9574 rtx ignore_result = gen_reg_rtx (V4SFmode);
9576 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0],
9577 operands[1], operands[2]));
9581 (define_expand "mve_vldrwq_gather_base_nowb_fv4sf"
9582 [(match_operand:V4SF 0 "s_register_operand")
9583 (match_operand:V4SI 1 "s_register_operand")
9584 (match_operand:SI 2 "mve_vldrd_immediate")
9585 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9586 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9588 rtx ignore_wb = gen_reg_rtx (V4SImode);
9590 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
9591 operands[1], operands[2]));
9596 ;; [vldrwq_gather_base_wb_f]
9598 (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
9599 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9600 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
9601 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9602 (mem:BLK (scratch))]
9604 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9605 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9608 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9611 ops[0] = operands[0];
9612 ops[1] = operands[2];
9613 ops[2] = operands[3];
9614 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9617 [(set_attr "length" "4")])
9619 (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
9620 [(match_operand:V4SI 0 "s_register_operand")
9621 (match_operand:V4SI 1 "s_register_operand")
9622 (match_operand:SI 2 "mve_vldrd_immediate")
9623 (match_operand:HI 3 "vpr_register_operand")
9624 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9625 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9627 rtx ignore_result = gen_reg_rtx (V4SFmode);
9629 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0],
9630 operands[1], operands[2],
9635 (define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf"
9636 [(match_operand:V4SF 0 "s_register_operand")
9637 (match_operand:V4SI 1 "s_register_operand")
9638 (match_operand:SI 2 "mve_vldrd_immediate")
9639 (match_operand:HI 3 "vpr_register_operand")
9640 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9641 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9643 rtx ignore_wb = gen_reg_rtx (V4SImode);
9645 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
9646 operands[1], operands[2],
9652 ;; [vldrwq_gather_base_wb_z_f]
9654 (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
9655 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9656 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
9657 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9658 (match_operand:HI 4 "vpr_register_operand" "Up")
9659 (mem:BLK (scratch))]
9661 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9662 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9665 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9668 ops[0] = operands[0];
9669 ops[1] = operands[2];
9670 ops[2] = operands[3];
9671 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
9674 [(set_attr "length" "8")])
9676 (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
9677 [(match_operand:V2DI 0 "s_register_operand")
9678 (match_operand:V2DI 1 "s_register_operand")
9679 (match_operand:SI 2 "mve_vldrd_immediate")
9680 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9683 rtx ignore_result = gen_reg_rtx (V2DImode);
9685 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0],
9686 operands[1], operands[2]));
9690 (define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di"
9691 [(match_operand:V2DI 0 "s_register_operand")
9692 (match_operand:V2DI 1 "s_register_operand")
9693 (match_operand:SI 2 "mve_vldrd_immediate")
9694 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9697 rtx ignore_wb = gen_reg_rtx (V2DImode);
9699 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
9700 operands[1], operands[2]));
9706 ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
9708 (define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn"
9709 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
9710 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
9711 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9712 (mem:BLK (scratch))]
9714 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
9715 (unspec:V2DI [(match_dup 2) (match_dup 3)]
9721 ops[0] = operands[0];
9722 ops[1] = operands[2];
9723 ops[2] = operands[3];
9724 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
9727 [(set_attr "length" "4")])
9729 (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
9730 [(match_operand:V2DI 0 "s_register_operand")
9731 (match_operand:V2DI 1 "s_register_operand")
9732 (match_operand:SI 2 "mve_vldrd_immediate")
9733 (match_operand:HI 3 "vpr_register_operand")
9734 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9737 rtx ignore_result = gen_reg_rtx (V2DImode);
9739 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0],
9740 operands[1], operands[2],
9745 (define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di"
9746 [(match_operand:V2DI 0 "s_register_operand")
9747 (match_operand:V2DI 1 "s_register_operand")
9748 (match_operand:SI 2 "mve_vldrd_immediate")
9749 (match_operand:HI 3 "vpr_register_operand")
9750 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9753 rtx ignore_wb = gen_reg_rtx (V2DImode);
9755 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
9756 operands[1], operands[2],
9761 (define_insn "get_fpscr_nzcvqc"
9762 [(set (match_operand:SI 0 "register_operand" "=r")
9763 (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
9765 "vmrs\\t%0, FPSCR_nzcvqc"
9766 [(set_attr "type" "mve_move")])
9768 (define_insn "set_fpscr_nzcvqc"
9769 [(set (reg:SI VFPCC_REGNUM)
9770 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
9771 VUNSPEC_SET_FPSCR_NZCVQC))]
9773 "vmsr\\tFPSCR_nzcvqc, %0"
9774 [(set_attr "type" "mve_move")])
9777 ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
9779 (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
9780 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
9781 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
9782 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9783 (match_operand:HI 4 "vpr_register_operand" "Up")
9784 (mem:BLK (scratch))]
9786 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
9787 (unspec:V2DI [(match_dup 2) (match_dup 3)]
9793 ops[0] = operands[0];
9794 ops[1] = operands[2];
9795 ops[2] = operands[3];
9796 output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops);
9799 [(set_attr "length" "8")])
9801 ;; [vadciq_m_s, vadciq_m_u])
9803 (define_insn "mve_vadciq_m_<supf>v4si"
9804 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9805 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
9806 (match_operand:V4SI 2 "s_register_operand" "w")
9807 (match_operand:V4SI 3 "s_register_operand" "w")
9808 (match_operand:HI 4 "vpr_register_operand" "Up")]
9810 (set (reg:SI VFPCC_REGNUM)
9811 (unspec:SI [(const_int 0)]
9815 "vpst\;vadcit.i32\t%q0, %q2, %q3"
9816 [(set_attr "type" "mve_move")
9817 (set_attr "length" "8")])
9820 ;; [vadciq_u, vadciq_s])
9822 (define_insn "mve_vadciq_<supf>v4si"
9823 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9824 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9825 (match_operand:V4SI 2 "s_register_operand" "w")]
9827 (set (reg:SI VFPCC_REGNUM)
9828 (unspec:SI [(const_int 0)]
9832 "vadci.i32\t%q0, %q1, %q2"
9833 [(set_attr "type" "mve_move")
9834 (set_attr "length" "4")])
9837 ;; [vadcq_m_s, vadcq_m_u])
9839 (define_insn "mve_vadcq_m_<supf>v4si"
9840 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9841 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
9842 (match_operand:V4SI 2 "s_register_operand" "w")
9843 (match_operand:V4SI 3 "s_register_operand" "w")
9844 (match_operand:HI 4 "vpr_register_operand" "Up")]
9846 (set (reg:SI VFPCC_REGNUM)
9847 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9851 "vpst\;vadct.i32\t%q0, %q2, %q3"
9852 [(set_attr "type" "mve_move")
9853 (set_attr "length" "8")])
9856 ;; [vadcq_u, vadcq_s])
9858 (define_insn "mve_vadcq_<supf>v4si"
9859 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9860 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9861 (match_operand:V4SI 2 "s_register_operand" "w")]
9863 (set (reg:SI VFPCC_REGNUM)
9864 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9868 "vadc.i32\t%q0, %q1, %q2"
9869 [(set_attr "type" "mve_move")
9870 (set_attr "length" "4")
9871 (set_attr "conds" "set")])
9874 ;; [vsbciq_m_u, vsbciq_m_s])
9876 (define_insn "mve_vsbciq_m_<supf>v4si"
9877 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9878 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9879 (match_operand:V4SI 2 "s_register_operand" "w")
9880 (match_operand:V4SI 3 "s_register_operand" "w")
9881 (match_operand:HI 4 "vpr_register_operand" "Up")]
9883 (set (reg:SI VFPCC_REGNUM)
9884 (unspec:SI [(const_int 0)]
9888 "vpst\;vsbcit.i32\t%q0, %q2, %q3"
9889 [(set_attr "type" "mve_move")
9890 (set_attr "length" "8")])
9893 ;; [vsbciq_s, vsbciq_u])
9895 (define_insn "mve_vsbciq_<supf>v4si"
9896 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9897 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9898 (match_operand:V4SI 2 "s_register_operand" "w")]
9900 (set (reg:SI VFPCC_REGNUM)
9901 (unspec:SI [(const_int 0)]
9905 "vsbci.i32\t%q0, %q1, %q2"
9906 [(set_attr "type" "mve_move")
9907 (set_attr "length" "4")])
9910 ;; [vsbcq_m_u, vsbcq_m_s])
9912 (define_insn "mve_vsbcq_m_<supf>v4si"
9913 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9914 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9915 (match_operand:V4SI 2 "s_register_operand" "w")
9916 (match_operand:V4SI 3 "s_register_operand" "w")
9917 (match_operand:HI 4 "vpr_register_operand" "Up")]
9919 (set (reg:SI VFPCC_REGNUM)
9920 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9924 "vpst\;vsbct.i32\t%q0, %q2, %q3"
9925 [(set_attr "type" "mve_move")
9926 (set_attr "length" "8")])
9929 ;; [vsbcq_s, vsbcq_u])
9931 (define_insn "mve_vsbcq_<supf>v4si"
9932 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9933 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9934 (match_operand:V4SI 2 "s_register_operand" "w")]
9936 (set (reg:SI VFPCC_REGNUM)
9937 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9941 "vsbc.i32\t%q0, %q1, %q2"
9942 [(set_attr "type" "mve_move")
9943 (set_attr "length" "4")])
9948 (define_insn "mve_vst2q<mode>"
9949 [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
9950 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
9951 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9954 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
9955 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
9958 int regno = REGNO (operands[1]);
9959 ops[0] = gen_rtx_REG (TImode, regno);
9960 ops[1] = gen_rtx_REG (TImode, regno + 4);
9961 rtx reg = operands[0];
9962 while (reg && !REG_P (reg))
9963 reg = XEXP (reg, 0);
9964 gcc_assert (REG_P (reg));
9966 ops[3] = operands[0];
9967 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
9968 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
9971 [(set_attr "length" "8")])
9976 (define_insn "mve_vld2q<mode>"
9977 [(set (match_operand:OI 0 "s_register_operand" "=w")
9978 (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
9979 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9982 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
9983 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
9986 int regno = REGNO (operands[0]);
9987 ops[0] = gen_rtx_REG (TImode, regno);
9988 ops[1] = gen_rtx_REG (TImode, regno + 4);
9989 rtx reg = operands[1];
9990 while (reg && !REG_P (reg))
9991 reg = XEXP (reg, 0);
9992 gcc_assert (REG_P (reg));
9994 ops[3] = operands[1];
9995 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
9996 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
9999 [(set_attr "length" "8")])
10004 (define_insn "mve_vld4q<mode>"
10005 [(set (match_operand:XI 0 "s_register_operand" "=w")
10006 (unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
10007 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10010 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10011 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10014 int regno = REGNO (operands[0]);
10015 ops[0] = gen_rtx_REG (TImode, regno);
10016 ops[1] = gen_rtx_REG (TImode, regno+4);
10017 ops[2] = gen_rtx_REG (TImode, regno+8);
10018 ops[3] = gen_rtx_REG (TImode, regno + 12);
10019 rtx reg = operands[1];
10020 while (reg && !REG_P (reg))
10021 reg = XEXP (reg, 0);
10022 gcc_assert (REG_P (reg));
10024 ops[5] = operands[1];
10025 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10026 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10027 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10028 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
10031 [(set_attr "length" "16")])
10033 ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
10035 (define_insn "mve_vec_extract<mode><V_elem_l>"
10036 [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r")
10037 (vec_select:<V_elem>
10038 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
10039 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10040 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10041 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10043 if (BYTES_BIG_ENDIAN)
10045 int elt = INTVAL (operands[2]);
10046 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10047 operands[2] = GEN_INT (elt);
10049 return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
10051 [(set_attr "type" "mve_move")])
10053 (define_insn "mve_vec_extractv2didi"
10054 [(set (match_operand:DI 0 "nonimmediate_operand" "=r")
10056 (match_operand:V2DI 1 "s_register_operand" "w")
10057 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10060 int elt = INTVAL (operands[2]);
10061 if (BYTES_BIG_ENDIAN)
10065 return "vmov\t%Q0, %R0, %e1";
10067 return "vmov\t%Q0, %R0, %f1";
10069 [(set_attr "type" "mve_move")])
10071 (define_insn "*mve_vec_extract_sext_internal<mode>"
10072 [(set (match_operand:SI 0 "s_register_operand" "=r")
10074 (vec_select:<V_elem>
10075 (match_operand:MVE_2 1 "s_register_operand" "w")
10076 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10077 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10078 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10080 if (BYTES_BIG_ENDIAN)
10082 int elt = INTVAL (operands[2]);
10083 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10084 operands[2] = GEN_INT (elt);
10086 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
10088 [(set_attr "type" "mve_move")])
10090 (define_insn "*mve_vec_extract_zext_internal<mode>"
10091 [(set (match_operand:SI 0 "s_register_operand" "=r")
10093 (vec_select:<V_elem>
10094 (match_operand:MVE_2 1 "s_register_operand" "w")
10095 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10096 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10097 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10099 if (BYTES_BIG_ENDIAN)
10101 int elt = INTVAL (operands[2]);
10102 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10103 operands[2] = GEN_INT (elt);
10105 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
10107 [(set_attr "type" "mve_move")])
10110 ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
10112 (define_insn "mve_vec_set<mode>_internal"
10113 [(set (match_operand:VQ2 0 "s_register_operand" "=w")
10116 (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
10117 (match_operand:VQ2 3 "s_register_operand" "0")
10118 (match_operand:SI 2 "immediate_operand" "i")))]
10119 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10120 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10122 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10123 if (BYTES_BIG_ENDIAN)
10124 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10125 operands[2] = GEN_INT (elt);
10127 return "vmov.<V_sz_elem>\t%q0[%c2], %1";
10129 [(set_attr "type" "mve_move")])
10131 (define_insn "mve_vec_setv2di_internal"
10132 [(set (match_operand:V2DI 0 "s_register_operand" "=w")
10134 (vec_duplicate:V2DI
10135 (match_operand:DI 1 "nonimmediate_operand" "r"))
10136 (match_operand:V2DI 3 "s_register_operand" "0")
10137 (match_operand:SI 2 "immediate_operand" "i")))]
10140 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10141 if (BYTES_BIG_ENDIAN)
10145 return "vmov\t%e0, %Q1, %R1";
10147 return "vmov\t%f0, %J1, %K1";
10149 [(set_attr "type" "mve_move")])
10154 (define_insn "mve_uqrshll_sat<supf>_di"
10155 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10156 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10157 (match_operand:SI 2 "register_operand" "r")]
10160 "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
10161 [(set_attr "predicable" "yes")])
10166 (define_insn "mve_sqrshrl_sat<supf>_di"
10167 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10168 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10169 (match_operand:SI 2 "register_operand" "r")]
10172 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
10173 [(set_attr "predicable" "yes")])
10178 (define_insn "mve_uqrshl_si"
10179 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10180 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10181 (match_operand:SI 2 "register_operand" "r")]
10184 "uqrshl%?\\t%1, %2"
10185 [(set_attr "predicable" "yes")])
10190 (define_insn "mve_sqrshr_si"
10191 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10192 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10193 (match_operand:SI 2 "register_operand" "r")]
10196 "sqrshr%?\\t%1, %2"
10197 [(set_attr "predicable" "yes")])
10202 (define_insn "mve_uqshll_di"
10203 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10204 (us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10205 (match_operand:SI 2 "immediate_operand" "Pg")))]
10207 "uqshll%?\\t%Q1, %R1, %2"
10208 [(set_attr "predicable" "yes")])
10213 (define_insn "mve_urshrl_di"
10214 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10215 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10216 (match_operand:SI 2 "immediate_operand" "Pg")]
10219 "urshrl%?\\t%Q1, %R1, %2"
10220 [(set_attr "predicable" "yes")])
10225 (define_insn "mve_uqshl_si"
10226 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10227 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0")
10228 (match_operand:SI 2 "immediate_operand" "Pg")))]
10231 [(set_attr "predicable" "yes")])
10236 (define_insn "mve_urshr_si"
10237 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10238 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10239 (match_operand:SI 2 "immediate_operand" "Pg")]
10243 [(set_attr "predicable" "yes")])
10248 (define_insn "mve_sqshl_si"
10249 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10250 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0")
10251 (match_operand:SI 2 "immediate_operand" "Pg")))]
10254 [(set_attr "predicable" "yes")])
10259 (define_insn "mve_srshr_si"
10260 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10261 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0")
10262 (match_operand:SI 2 "immediate_operand" "Pg")]
10266 [(set_attr "predicable" "yes")])
10271 (define_insn "mve_srshrl_di"
10272 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10273 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10274 (match_operand:SI 2 "immediate_operand" "Pg")]
10277 "srshrl%?\\t%Q1, %R1, %2"
10278 [(set_attr "predicable" "yes")])
10283 (define_insn "mve_sqshll_di"
10284 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10285 (ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10286 (match_operand:SI 2 "immediate_operand" "Pg")))]
10288 "sqshll%?\\t%Q1, %R1, %2"
10289 [(set_attr "predicable" "yes")])
10292 ;; [vshlcq_m_u vshlcq_m_s]
10294 (define_expand "mve_vshlcq_m_vec_<supf><mode>"
10295 [(match_operand:MVE_2 0 "s_register_operand")
10296 (match_operand:MVE_2 1 "s_register_operand")
10297 (match_operand:SI 2 "s_register_operand")
10298 (match_operand:SI 3 "mve_imm_32")
10299 (match_operand:HI 4 "vpr_register_operand")
10300 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10303 rtx ignore_wb = gen_reg_rtx (SImode);
10304 emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1],
10305 operands[2], operands[3],
10310 (define_expand "mve_vshlcq_m_carry_<supf><mode>"
10311 [(match_operand:SI 0 "s_register_operand")
10312 (match_operand:MVE_2 1 "s_register_operand")
10313 (match_operand:SI 2 "s_register_operand")
10314 (match_operand:SI 3 "mve_imm_32")
10315 (match_operand:HI 4 "vpr_register_operand")
10316 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10319 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10320 emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0],
10321 operands[1], operands[2],
10322 operands[3], operands[4]));
10326 (define_insn "mve_vshlcq_m_<supf><mode>"
10327 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10328 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10329 (match_operand:SI 3 "s_register_operand" "1")
10330 (match_operand:SI 4 "mve_imm_32" "Rf")
10331 (match_operand:HI 5 "vpr_register_operand" "Up")]
10333 (set (match_operand:SI 1 "s_register_operand" "=r")
10334 (unspec:SI [(match_dup 2)
10341 "vpst\;vshlct\t%q0, %1, %4"
10342 [(set_attr "type" "mve_move")
10343 (set_attr "length" "8")])
10345 ;; CDE instructions on MVE registers.
10347 (define_insn "arm_vcx1qv16qi"
10348 [(set (match_operand:V16QI 0 "register_operand" "=t")
10349 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10350 (match_operand:SI 2 "const_int_mve_cde1_operand" "i")]
10352 "TARGET_CDE && TARGET_HAVE_MVE"
10353 "vcx1\\tp%c1, %q0, #%c2"
10354 [(set_attr "type" "coproc")]
10357 (define_insn "arm_vcx1qav16qi"
10358 [(set (match_operand:V16QI 0 "register_operand" "=t")
10359 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10360 (match_operand:V16QI 2 "register_operand" "0")
10361 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")]
10363 "TARGET_CDE && TARGET_HAVE_MVE"
10364 "vcx1a\\tp%c1, %q0, #%c3"
10365 [(set_attr "type" "coproc")]
10368 (define_insn "arm_vcx2qv16qi"
10369 [(set (match_operand:V16QI 0 "register_operand" "=t")
10370 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10371 (match_operand:V16QI 2 "register_operand" "t")
10372 (match_operand:SI 3 "const_int_mve_cde2_operand" "i")]
10374 "TARGET_CDE && TARGET_HAVE_MVE"
10375 "vcx2\\tp%c1, %q0, %q2, #%c3"
10376 [(set_attr "type" "coproc")]
10379 (define_insn "arm_vcx2qav16qi"
10380 [(set (match_operand:V16QI 0 "register_operand" "=t")
10381 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10382 (match_operand:V16QI 2 "register_operand" "0")
10383 (match_operand:V16QI 3 "register_operand" "t")
10384 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")]
10386 "TARGET_CDE && TARGET_HAVE_MVE"
10387 "vcx2a\\tp%c1, %q0, %q3, #%c4"
10388 [(set_attr "type" "coproc")]
10391 (define_insn "arm_vcx3qv16qi"
10392 [(set (match_operand:V16QI 0 "register_operand" "=t")
10393 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10394 (match_operand:V16QI 2 "register_operand" "t")
10395 (match_operand:V16QI 3 "register_operand" "t")
10396 (match_operand:SI 4 "const_int_mve_cde3_operand" "i")]
10398 "TARGET_CDE && TARGET_HAVE_MVE"
10399 "vcx3\\tp%c1, %q0, %q2, %q3, #%c4"
10400 [(set_attr "type" "coproc")]
10403 (define_insn "arm_vcx3qav16qi"
10404 [(set (match_operand:V16QI 0 "register_operand" "=t")
10405 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10406 (match_operand:V16QI 2 "register_operand" "0")
10407 (match_operand:V16QI 3 "register_operand" "t")
10408 (match_operand:V16QI 4 "register_operand" "t")
10409 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")]
10411 "TARGET_CDE && TARGET_HAVE_MVE"
10412 "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5"
10413 [(set_attr "type" "coproc")]
10416 (define_insn "arm_vcx1q<a>_p_v16qi"
10417 [(set (match_operand:V16QI 0 "register_operand" "=t")
10418 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10419 (match_operand:V16QI 2 "register_operand" "0")
10420 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")
10421 (match_operand:HI 4 "vpr_register_operand" "Up")]
10423 "TARGET_CDE && TARGET_HAVE_MVE"
10424 "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3"
10425 [(set_attr "type" "coproc")
10426 (set_attr "length" "8")]
10429 (define_insn "arm_vcx2q<a>_p_v16qi"
10430 [(set (match_operand:V16QI 0 "register_operand" "=t")
10431 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10432 (match_operand:V16QI 2 "register_operand" "0")
10433 (match_operand:V16QI 3 "register_operand" "t")
10434 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")
10435 (match_operand:HI 5 "vpr_register_operand" "Up")]
10437 "TARGET_CDE && TARGET_HAVE_MVE"
10438 "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4"
10439 [(set_attr "type" "coproc")
10440 (set_attr "length" "8")]
10443 (define_insn "arm_vcx3q<a>_p_v16qi"
10444 [(set (match_operand:V16QI 0 "register_operand" "=t")
10445 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10446 (match_operand:V16QI 2 "register_operand" "0")
10447 (match_operand:V16QI 3 "register_operand" "t")
10448 (match_operand:V16QI 4 "register_operand" "t")
10449 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")
10450 (match_operand:HI 6 "vpr_register_operand" "Up")]
10452 "TARGET_CDE && TARGET_HAVE_MVE"
10453 "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5"
10454 [(set_attr "type" "coproc")
10455 (set_attr "length" "8")]
10458 (define_insn "*movmisalign<mode>_mve_store"
10459 [(set (match_operand:MVE_VLD_ST 0 "neon_permissive_struct_operand" "=Ux")
10460 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "s_register_operand" " w")]
10461 UNSPEC_MISALIGNED_ACCESS))]
10462 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10463 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))
10464 && !BYTES_BIG_ENDIAN && unaligned_access"
10465 "vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0"
10466 [(set_attr "type" "mve_store")]
10470 (define_insn "*movmisalign<mode>_mve_load"
10471 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
10472 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "neon_permissive_struct_operand" " Ux")]
10473 UNSPEC_MISALIGNED_ACCESS))]
10474 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10475 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))
10476 && !BYTES_BIG_ENDIAN && unaligned_access"
10477 "vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1"
10478 [(set_attr "type" "mve_load")]