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_s<mode>"
440 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
441 (clz:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
444 "vclz.i%#<V_sz_elem> %q0, %q1"
445 [(set_attr "type" "mve_move")
447 (define_expand "mve_vclzq_u<mode>"
449 (set (match_operand:MVE_2 0 "s_register_operand")
450 (clz:MVE_2 (match_operand:MVE_2 1 "s_register_operand")))
458 (define_insn "mve_vclsq_s<mode>"
460 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
461 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
465 "vcls.s%#<V_sz_elem> %q0, %q1"
466 [(set_attr "type" "mve_move")
470 ;; [vaddvq_s, vaddvq_u])
472 (define_insn "@mve_vaddvq_<supf><mode>"
474 (set (match_operand:SI 0 "s_register_operand" "=Te")
475 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
479 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
480 [(set_attr "type" "mve_move")
486 (define_insn "mve_vabsq_s<mode>"
488 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
489 (abs:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
492 "vabs.s%#<V_sz_elem>\t%q0, %q1"
493 [(set_attr "type" "mve_move")
497 ;; [vrev32q_u, vrev32q_s])
499 (define_insn "mve_vrev32q_<supf><mode>"
501 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
502 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
506 "vrev32.%#<V_sz_elem>\t%q0, %q1"
507 [(set_attr "type" "mve_move")
511 ;; [vmovltq_u, vmovltq_s])
513 (define_insn "mve_vmovltq_<supf><mode>"
515 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
516 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
520 "vmovlt.<supf>%#<V_sz_elem> %q0, %q1"
521 [(set_attr "type" "mve_move")
525 ;; [vmovlbq_s, vmovlbq_u])
527 (define_insn "mve_vmovlbq_<supf><mode>"
529 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
530 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
534 "vmovlb.<supf>%#<V_sz_elem> %q0, %q1"
535 [(set_attr "type" "mve_move")
539 ;; [vcvtpq_s, vcvtpq_u])
541 (define_insn "mve_vcvtpq_<supf><mode>"
543 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
544 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
547 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
548 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
549 [(set_attr "type" "mve_move")
553 ;; [vcvtnq_s, vcvtnq_u])
555 (define_insn "mve_vcvtnq_<supf><mode>"
557 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
558 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
561 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
562 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
563 [(set_attr "type" "mve_move")
567 ;; [vcvtmq_s, vcvtmq_u])
569 (define_insn "mve_vcvtmq_<supf><mode>"
571 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
572 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
575 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
576 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
577 [(set_attr "type" "mve_move")
581 ;; [vcvtaq_u, vcvtaq_s])
583 (define_insn "mve_vcvtaq_<supf><mode>"
585 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
586 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
589 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
590 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
591 [(set_attr "type" "mve_move")
595 ;; [vmvnq_n_u, vmvnq_n_s])
597 (define_insn "mve_vmvnq_n_<supf><mode>"
599 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
600 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
604 "vmvn.i%#<V_sz_elem> %q0, %1"
605 [(set_attr "type" "mve_move")
609 ;; [vrev16q_u, vrev16q_s])
611 (define_insn "mve_vrev16q_<supf>v16qi"
613 (set (match_operand:V16QI 0 "s_register_operand" "=w")
614 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
619 [(set_attr "type" "mve_move")
623 ;; [vaddlvq_s vaddlvq_u])
625 (define_insn "mve_vaddlvq_<supf>v4si"
627 (set (match_operand:DI 0 "s_register_operand" "=r")
628 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
632 "vaddlv.<supf>32 %Q0, %R0, %q1"
633 [(set_attr "type" "mve_move")
637 ;; [vctp8q vctp16q vctp32q vctp64q])
639 (define_insn "mve_vctp<mode1>qhi"
641 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
642 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
647 [(set_attr "type" "mve_move")
653 (define_insn "mve_vpnothi"
655 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
656 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
661 [(set_attr "type" "mve_move")
667 (define_insn "mve_vsubq_n_f<mode>"
669 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
670 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
671 (match_operand:<V_elem> 2 "s_register_operand" "r")]
674 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
675 "vsub.f<V_sz_elem> %q0, %q1, %2"
676 [(set_attr "type" "mve_move")
682 (define_insn "mve_vbrsrq_n_f<mode>"
684 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
685 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
686 (match_operand:SI 2 "s_register_operand" "r")]
689 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
690 "vbrsr.<V_sz_elem> %q0, %q1, %2"
691 [(set_attr "type" "mve_move")
695 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
697 (define_insn "mve_vcvtq_n_to_f_<supf><mode>"
699 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
700 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
701 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
704 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
705 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
706 [(set_attr "type" "mve_move")
711 (define_insn "mve_vcreateq_f<mode>"
713 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
714 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
715 (match_operand:DI 2 "s_register_operand" "r")]
718 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
719 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
720 [(set_attr "type" "mve_move")
721 (set_attr "length""8")])
724 ;; [vcreateq_u, vcreateq_s])
726 (define_insn "mve_vcreateq_<supf><mode>"
728 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
729 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
730 (match_operand:DI 2 "s_register_operand" "r")]
734 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
735 [(set_attr "type" "mve_move")
736 (set_attr "length""8")])
739 ;; [vshrq_n_s, vshrq_n_u])
741 ;; Version that takes an immediate as operand 2.
742 (define_insn "mve_vshrq_n_<supf><mode>"
744 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
745 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
746 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
750 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
751 [(set_attr "type" "mve_move")
754 ;; Versions that take constant vectors as operand 2 (with all elements
756 (define_insn "mve_vshrq_n_s<mode>_imm"
758 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
759 (ashiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
760 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i")))
764 return neon_output_shift_immediate ("vshr", 's', &operands[2],
766 VALID_NEON_QREG_MODE (<MODE>mode),
769 [(set_attr "type" "mve_move")
771 (define_insn "mve_vshrq_n_u<mode>_imm"
773 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
774 (lshiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
775 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i")))
779 return neon_output_shift_immediate ("vshr", 'u', &operands[2],
781 VALID_NEON_QREG_MODE (<MODE>mode),
784 [(set_attr "type" "mve_move")
788 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
790 (define_insn "mve_vcvtq_n_from_f_<supf><mode>"
792 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
793 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
794 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
797 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
798 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
799 [(set_attr "type" "mve_move")
805 (define_insn "mve_vaddlvq_p_<supf>v4si"
807 (set (match_operand:DI 0 "s_register_operand" "=r")
808 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
809 (match_operand:HI 2 "vpr_register_operand" "Up")]
813 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
814 [(set_attr "type" "mve_move")
815 (set_attr "length""8")])
818 ;; [vcmpneq_, vcmpcsq_, vcmpeqq_, vcmpgeq_, vcmpgtq_, vcmphiq_, vcmpleq_, vcmpltq_])
820 (define_insn "@mve_vcmp<mve_cmp_op>q_<mode>"
822 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
823 (MVE_COMPARISONS:HI (match_operand:MVE_2 1 "s_register_operand" "w")
824 (match_operand:MVE_2 2 "s_register_operand" "w")))
827 "vcmp.<mve_cmp_type>%#<V_sz_elem> <mve_cmp_op>, %q1, %q2"
828 [(set_attr "type" "mve_move")
832 ;; [vcmpcsq_n_, vcmpeqq_n_, vcmpgeq_n_, vcmpgtq_n_, vcmphiq_n_, vcmpleq_n_, vcmpltq_n_, vcmpneq_n_])
834 (define_insn "mve_vcmp<mve_cmp_op>q_n_<mode>"
836 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
837 (MVE_COMPARISONS:HI (match_operand:MVE_2 1 "s_register_operand" "w")
838 (match_operand:<V_elem> 2 "s_register_operand" "r")))
841 "vcmp.<mve_cmp_type>%#<V_sz_elem> <mve_cmp_op>, %q1, %2"
842 [(set_attr "type" "mve_move")
846 ;; [vshlq_s, vshlq_u])
850 ;; [vabdq_s, vabdq_u])
852 (define_insn "mve_vabdq_<supf><mode>"
854 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
855 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
856 (match_operand:MVE_2 2 "s_register_operand" "w")]
860 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
861 [(set_attr "type" "mve_move")
865 ;; [vaddq_n_s, vaddq_n_u])
867 (define_insn "mve_vaddq_n_<supf><mode>"
869 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
870 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
871 (match_operand:<V_elem> 2 "s_register_operand" "r")]
875 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
876 [(set_attr "type" "mve_move")
880 ;; [vaddvaq_s, vaddvaq_u])
882 (define_insn "mve_vaddvaq_<supf><mode>"
884 (set (match_operand:SI 0 "s_register_operand" "=Te")
885 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
886 (match_operand:MVE_2 2 "s_register_operand" "w")]
890 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
891 [(set_attr "type" "mve_move")
895 ;; [vaddvq_p_u, vaddvq_p_s])
897 (define_insn "mve_vaddvq_p_<supf><mode>"
899 (set (match_operand:SI 0 "s_register_operand" "=Te")
900 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
901 (match_operand:HI 2 "vpr_register_operand" "Up")]
905 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
906 [(set_attr "type" "mve_move")
907 (set_attr "length""8")])
910 ;; [vandq_u, vandq_s])
912 ;; signed and unsigned versions are the same: define the unsigned
913 ;; insn, and use an expander for the signed one as we still reference
914 ;; both names from arm_mve.h.
915 ;; We use the same code as in neon.md (TODO: avoid this duplication).
916 (define_insn "mve_vandq_u<mode>"
918 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
919 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
920 (match_operand:MVE_2 2 "neon_inv_logic_op2" "w,DL")))
925 * return neon_output_logic_immediate (\"vand\", &operands[2], <MODE>mode, 1, VALID_NEON_QREG_MODE (<MODE>mode));"
926 [(set_attr "type" "mve_move")
928 (define_expand "mve_vandq_s<mode>"
930 (set (match_operand:MVE_2 0 "s_register_operand")
931 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
932 (match_operand:MVE_2 2 "neon_inv_logic_op2")))
938 ;; [vbicq_s, vbicq_u])
940 (define_insn "mve_vbicq_u<mode>"
942 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
943 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
944 (match_operand:MVE_2 1 "s_register_operand" "w")))
947 "vbic\t%q0, %q1, %q2"
948 [(set_attr "type" "mve_move")
951 (define_expand "mve_vbicq_s<mode>"
953 (set (match_operand:MVE_2 0 "s_register_operand")
954 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
955 (match_operand:MVE_2 1 "s_register_operand")))
961 ;; [vbrsrq_n_u, vbrsrq_n_s])
963 (define_insn "mve_vbrsrq_n_<supf><mode>"
965 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
966 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
967 (match_operand:SI 2 "s_register_operand" "r")]
971 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
972 [(set_attr "type" "mve_move")
976 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
978 (define_insn "mve_vcaddq<mve_rot><mode>"
980 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
981 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
982 (match_operand:MVE_2 2 "s_register_operand" "w")]
986 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
987 [(set_attr "type" "mve_move")
990 ;; Auto vectorizer pattern for int vcadd
991 (define_expand "cadd<rot><mode>3"
992 [(set (match_operand:MVE_2 0 "register_operand")
993 (unspec:MVE_2 [(match_operand:MVE_2 1 "register_operand")
994 (match_operand:MVE_2 2 "register_operand")]
996 "TARGET_HAVE_MVE && !BYTES_BIG_ENDIAN"
1000 ;; [veorq_u, veorq_s])
1002 (define_insn "mve_veorq_u<mode>"
1004 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1005 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1006 (match_operand:MVE_2 2 "s_register_operand" "w")))
1009 "veor\t%q0, %q1, %q2"
1010 [(set_attr "type" "mve_move")
1012 (define_expand "mve_veorq_s<mode>"
1014 (set (match_operand:MVE_2 0 "s_register_operand")
1015 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1016 (match_operand:MVE_2 2 "s_register_operand")))
1022 ;; [vhaddq_n_u, vhaddq_n_s])
1024 (define_insn "mve_vhaddq_n_<supf><mode>"
1026 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1027 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1028 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1032 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1033 [(set_attr "type" "mve_move")
1037 ;; [vhaddq_s, vhaddq_u])
1039 (define_insn "@mve_vhaddq_<supf><mode>"
1041 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1042 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1043 (match_operand:MVE_2 2 "s_register_operand" "w")]
1047 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1048 [(set_attr "type" "mve_move")
1052 ;; [vhcaddq_rot270_s])
1054 (define_insn "mve_vhcaddq_rot270_s<mode>"
1056 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1057 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1058 (match_operand:MVE_2 2 "s_register_operand" "w")]
1062 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1063 [(set_attr "type" "mve_move")
1067 ;; [vhcaddq_rot90_s])
1069 (define_insn "mve_vhcaddq_rot90_s<mode>"
1071 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1072 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1073 (match_operand:MVE_2 2 "s_register_operand" "w")]
1077 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1078 [(set_attr "type" "mve_move")
1082 ;; [vhsubq_n_u, vhsubq_n_s])
1084 (define_insn "mve_vhsubq_n_<supf><mode>"
1086 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1087 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1088 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1092 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1093 [(set_attr "type" "mve_move")
1097 ;; [vhsubq_s, vhsubq_u])
1099 (define_insn "mve_vhsubq_<supf><mode>"
1101 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1102 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1103 (match_operand:MVE_2 2 "s_register_operand" "w")]
1107 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1108 [(set_attr "type" "mve_move")
1114 (define_insn "mve_vmaxaq_s<mode>"
1116 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1117 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1118 (match_operand:MVE_2 2 "s_register_operand" "w")]
1122 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1123 [(set_attr "type" "mve_move")
1129 (define_insn "mve_vmaxavq_s<mode>"
1131 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1132 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1133 (match_operand:MVE_2 2 "s_register_operand" "w")]
1137 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1138 [(set_attr "type" "mve_move")
1142 ;; [vmaxq_u, vmaxq_s])
1144 (define_insn "mve_vmaxq_s<mode>"
1146 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1147 (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1148 (match_operand:MVE_2 2 "s_register_operand" "w")))
1151 "vmax.%#<V_s_elem>\t%q0, %q1, %q2"
1152 [(set_attr "type" "mve_move")
1155 (define_insn "mve_vmaxq_u<mode>"
1157 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1158 (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1159 (match_operand:MVE_2 2 "s_register_operand" "w")))
1162 "vmax.%#<V_u_elem>\t%q0, %q1, %q2"
1163 [(set_attr "type" "mve_move")
1167 ;; [vmaxvq_u, vmaxvq_s])
1169 (define_insn "mve_vmaxvq_<supf><mode>"
1171 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1172 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1173 (match_operand:MVE_2 2 "s_register_operand" "w")]
1177 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1178 [(set_attr "type" "mve_move")
1184 (define_insn "mve_vminaq_s<mode>"
1186 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1187 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1188 (match_operand:MVE_2 2 "s_register_operand" "w")]
1192 "vmina.s%#<V_sz_elem>\t%q0, %q2"
1193 [(set_attr "type" "mve_move")
1199 (define_insn "mve_vminavq_s<mode>"
1201 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1202 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1203 (match_operand:MVE_2 2 "s_register_operand" "w")]
1207 "vminav.s%#<V_sz_elem>\t%0, %q2"
1208 [(set_attr "type" "mve_move")
1212 ;; [vminq_s, vminq_u])
1214 (define_insn "mve_vminq_s<mode>"
1216 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1217 (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1218 (match_operand:MVE_2 2 "s_register_operand" "w")))
1221 "vmin.%#<V_s_elem>\t%q0, %q1, %q2"
1222 [(set_attr "type" "mve_move")
1225 (define_insn "mve_vminq_u<mode>"
1227 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1228 (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1229 (match_operand:MVE_2 2 "s_register_operand" "w")))
1232 "vmin.%#<V_u_elem>\t%q0, %q1, %q2"
1233 [(set_attr "type" "mve_move")
1237 ;; [vminvq_u, vminvq_s])
1239 (define_insn "mve_vminvq_<supf><mode>"
1241 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1242 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1243 (match_operand:MVE_2 2 "s_register_operand" "w")]
1247 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
1248 [(set_attr "type" "mve_move")
1252 ;; [vmladavq_u, vmladavq_s])
1254 (define_insn "mve_vmladavq_<supf><mode>"
1256 (set (match_operand:SI 0 "s_register_operand" "=Te")
1257 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1258 (match_operand:MVE_2 2 "s_register_operand" "w")]
1262 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
1263 [(set_attr "type" "mve_move")
1269 (define_insn "mve_vmladavxq_s<mode>"
1271 (set (match_operand:SI 0 "s_register_operand" "=Te")
1272 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1273 (match_operand:MVE_2 2 "s_register_operand" "w")]
1277 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1278 [(set_attr "type" "mve_move")
1284 (define_insn "mve_vmlsdavq_s<mode>"
1286 (set (match_operand:SI 0 "s_register_operand" "=Te")
1287 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1288 (match_operand:MVE_2 2 "s_register_operand" "w")]
1292 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
1293 [(set_attr "type" "mve_move")
1299 (define_insn "mve_vmlsdavxq_s<mode>"
1301 (set (match_operand:SI 0 "s_register_operand" "=Te")
1302 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1303 (match_operand:MVE_2 2 "s_register_operand" "w")]
1307 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1308 [(set_attr "type" "mve_move")
1312 ;; [vmulhq_s, vmulhq_u])
1314 (define_insn "mve_vmulhq_<supf><mode>"
1316 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1317 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1318 (match_operand:MVE_2 2 "s_register_operand" "w")]
1322 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1323 [(set_attr "type" "mve_move")
1327 ;; [vmullbq_int_u, vmullbq_int_s])
1329 (define_insn "mve_vmullbq_int_<supf><mode>"
1331 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1332 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1333 (match_operand:MVE_2 2 "s_register_operand" "w")]
1337 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1338 [(set_attr "type" "mve_move")
1342 ;; [vmulltq_int_u, vmulltq_int_s])
1344 (define_insn "mve_vmulltq_int_<supf><mode>"
1346 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1347 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1348 (match_operand:MVE_2 2 "s_register_operand" "w")]
1352 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1353 [(set_attr "type" "mve_move")
1357 ;; [vmulq_n_u, vmulq_n_s])
1359 (define_insn "mve_vmulq_n_<supf><mode>"
1361 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1362 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1363 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1367 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
1368 [(set_attr "type" "mve_move")
1372 ;; [vmulq_u, vmulq_s])
1374 (define_insn "mve_vmulq_<supf><mode>"
1376 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1377 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1378 (match_operand:MVE_2 2 "s_register_operand" "w")]
1382 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1383 [(set_attr "type" "mve_move")
1386 (define_insn "mve_vmulq<mode>"
1388 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1389 (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1390 (match_operand:MVE_2 2 "s_register_operand" "w")))
1393 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1394 [(set_attr "type" "mve_move")
1398 ;; [vornq_u, vornq_s])
1400 (define_insn "mve_vornq_s<mode>"
1402 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1403 (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
1404 (match_operand:MVE_2 1 "s_register_operand" "w")))
1407 "vorn\t%q0, %q1, %q2"
1408 [(set_attr "type" "mve_move")
1411 (define_expand "mve_vornq_u<mode>"
1413 (set (match_operand:MVE_2 0 "s_register_operand")
1414 (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
1415 (match_operand:MVE_2 1 "s_register_operand")))
1421 ;; [vorrq_s, vorrq_u])
1423 ;; signed and unsigned versions are the same: define the unsigned
1424 ;; insn, and use an expander for the signed one as we still reference
1425 ;; both names from arm_mve.h.
1426 ;; We use the same code as in neon.md (TODO: avoid this duplication).
1427 (define_insn "mve_vorrq_s<mode>"
1429 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
1430 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
1431 (match_operand:MVE_2 2 "neon_logic_op2" "w,Dl")))
1436 * return neon_output_logic_immediate (\"vorr\", &operands[2], <MODE>mode, 0, VALID_NEON_QREG_MODE (<MODE>mode));"
1437 [(set_attr "type" "mve_move")
1439 (define_expand "mve_vorrq_u<mode>"
1441 (set (match_operand:MVE_2 0 "s_register_operand")
1442 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1443 (match_operand:MVE_2 2 "neon_logic_op2")))
1449 ;; [vqaddq_n_s, vqaddq_n_u])
1451 (define_insn "mve_vqaddq_n_<supf><mode>"
1453 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1454 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1455 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1459 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1460 [(set_attr "type" "mve_move")
1464 ;; [vqaddq_u, vqaddq_s])
1466 (define_insn "mve_vqaddq_<supf><mode>"
1468 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1469 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1470 (match_operand:MVE_2 2 "s_register_operand" "w")]
1474 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1475 [(set_attr "type" "mve_move")
1481 (define_insn "mve_vqdmulhq_n_s<mode>"
1483 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1484 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1485 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1489 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1490 [(set_attr "type" "mve_move")
1496 (define_insn "mve_vqdmulhq_s<mode>"
1498 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1499 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1500 (match_operand:MVE_2 2 "s_register_operand" "w")]
1504 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1505 [(set_attr "type" "mve_move")
1511 (define_insn "mve_vqrdmulhq_n_s<mode>"
1513 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1514 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1515 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1519 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1520 [(set_attr "type" "mve_move")
1526 (define_insn "mve_vqrdmulhq_s<mode>"
1528 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1529 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1530 (match_operand:MVE_2 2 "s_register_operand" "w")]
1534 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1535 [(set_attr "type" "mve_move")
1539 ;; [vqrshlq_n_s, vqrshlq_n_u])
1541 (define_insn "mve_vqrshlq_n_<supf><mode>"
1543 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1544 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1545 (match_operand:SI 2 "s_register_operand" "r")]
1549 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1550 [(set_attr "type" "mve_move")
1554 ;; [vqrshlq_s, vqrshlq_u])
1556 (define_insn "mve_vqrshlq_<supf><mode>"
1558 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1559 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1560 (match_operand:MVE_2 2 "s_register_operand" "w")]
1564 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1565 [(set_attr "type" "mve_move")
1569 ;; [vqshlq_n_s, vqshlq_n_u])
1571 (define_insn "mve_vqshlq_n_<supf><mode>"
1573 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1574 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1575 (match_operand:SI 2 "immediate_operand" "i")]
1579 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1580 [(set_attr "type" "mve_move")
1584 ;; [vqshlq_r_u, vqshlq_r_s])
1586 (define_insn "mve_vqshlq_r_<supf><mode>"
1588 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1589 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1590 (match_operand:SI 2 "s_register_operand" "r")]
1594 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
1595 [(set_attr "type" "mve_move")
1599 ;; [vqshlq_s, vqshlq_u])
1601 (define_insn "mve_vqshlq_<supf><mode>"
1603 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1604 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1605 (match_operand:MVE_2 2 "s_register_operand" "w")]
1609 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1610 [(set_attr "type" "mve_move")
1616 (define_insn "mve_vqshluq_n_s<mode>"
1618 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1619 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1620 (match_operand:SI 2 "mve_imm_7" "Ra")]
1624 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
1625 [(set_attr "type" "mve_move")
1629 ;; [vqsubq_n_s, vqsubq_n_u])
1631 (define_insn "mve_vqsubq_n_<supf><mode>"
1633 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1634 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1635 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1639 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1640 [(set_attr "type" "mve_move")
1644 ;; [vqsubq_u, vqsubq_s])
1646 (define_insn "mve_vqsubq_<supf><mode>"
1648 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1649 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1650 (match_operand:MVE_2 2 "s_register_operand" "w")]
1654 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1655 [(set_attr "type" "mve_move")
1659 ;; [vrhaddq_s, vrhaddq_u])
1661 (define_insn "@mve_vrhaddq_<supf><mode>"
1663 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1664 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1665 (match_operand:MVE_2 2 "s_register_operand" "w")]
1669 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1670 [(set_attr "type" "mve_move")
1674 ;; [vrmulhq_s, vrmulhq_u])
1676 (define_insn "mve_vrmulhq_<supf><mode>"
1678 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1679 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1680 (match_operand:MVE_2 2 "s_register_operand" "w")]
1684 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1685 [(set_attr "type" "mve_move")
1689 ;; [vrshlq_n_u, vrshlq_n_s])
1691 (define_insn "mve_vrshlq_n_<supf><mode>"
1693 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1694 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1695 (match_operand:SI 2 "s_register_operand" "r")]
1699 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1700 [(set_attr "type" "mve_move")
1704 ;; [vrshlq_s, vrshlq_u])
1706 (define_insn "mve_vrshlq_<supf><mode>"
1708 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1709 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1710 (match_operand:MVE_2 2 "s_register_operand" "w")]
1714 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1715 [(set_attr "type" "mve_move")
1719 ;; [vrshrq_n_s, vrshrq_n_u])
1721 (define_insn "mve_vrshrq_n_<supf><mode>"
1723 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1724 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1725 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1729 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1730 [(set_attr "type" "mve_move")
1734 ;; [vshlq_n_u, vshlq_n_s])
1736 (define_insn "mve_vshlq_n_<supf><mode>"
1738 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1739 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1740 (match_operand:SI 2 "immediate_operand" "i")]
1744 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1745 [(set_attr "type" "mve_move")
1749 ;; [vshlq_r_s, vshlq_r_u])
1751 (define_insn "mve_vshlq_r_<supf><mode>"
1753 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1754 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1755 (match_operand:SI 2 "s_register_operand" "r")]
1759 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
1760 [(set_attr "type" "mve_move")
1764 ;; [vsubq_n_s, vsubq_n_u])
1766 (define_insn "mve_vsubq_n_<supf><mode>"
1768 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1769 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1770 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1774 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
1775 [(set_attr "type" "mve_move")
1779 ;; [vsubq_s, vsubq_u])
1781 (define_insn "mve_vsubq_<supf><mode>"
1783 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1784 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1785 (match_operand:MVE_2 2 "s_register_operand" "w")]
1789 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1790 [(set_attr "type" "mve_move")
1793 (define_insn "mve_vsubq<mode>"
1795 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1796 (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1797 (match_operand:MVE_2 2 "s_register_operand" "w")))
1800 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1801 [(set_attr "type" "mve_move")
1807 (define_insn "mve_vabdq_f<mode>"
1809 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1810 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1811 (match_operand:MVE_0 2 "s_register_operand" "w")]
1814 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1815 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
1816 [(set_attr "type" "mve_move")
1820 ;; [vaddlvaq_s vaddlvaq_u])
1822 (define_insn "mve_vaddlvaq_<supf>v4si"
1824 (set (match_operand:DI 0 "s_register_operand" "=r")
1825 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
1826 (match_operand:V4SI 2 "s_register_operand" "w")]
1830 "vaddlva.<supf>32 %Q0, %R0, %q2"
1831 [(set_attr "type" "mve_move")
1837 (define_insn "mve_vaddq_n_f<mode>"
1839 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1840 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1841 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1844 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1845 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
1846 [(set_attr "type" "mve_move")
1852 (define_insn "mve_vandq_f<mode>"
1854 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1855 (and:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
1856 (match_operand:MVE_0 2 "s_register_operand" "w")))
1858 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1859 "vand %q0, %q1, %q2"
1860 [(set_attr "type" "mve_move")
1866 (define_insn "mve_vbicq_f<mode>"
1868 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1869 (and:MVE_0 (not:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))
1870 (match_operand:MVE_0 2 "s_register_operand" "w")))
1872 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1873 "vbic %q0, %q1, %q2"
1874 [(set_attr "type" "mve_move")
1878 ;; [vbicq_n_s, vbicq_n_u])
1880 (define_insn "mve_vbicq_n_<supf><mode>"
1882 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1883 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
1884 (match_operand:SI 2 "immediate_operand" "i")]
1888 "vbic.i%#<V_sz_elem> %q0, %2"
1889 [(set_attr "type" "mve_move")
1893 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
1895 (define_insn "mve_vcaddq<mve_rot><mode>"
1897 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
1898 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1899 (match_operand:MVE_0 2 "s_register_operand" "w")]
1902 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1903 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
1904 [(set_attr "type" "mve_move")
1908 ;; [vcmpeqq_f, vcmpgeq_f, vcmpgtq_f, vcmpleq_f, vcmpltq_f, vcmpneq_f])
1910 (define_insn "@mve_vcmp<mve_cmp_op>q_f<mode>"
1912 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1913 (MVE_FP_COMPARISONS:HI (match_operand:MVE_0 1 "s_register_operand" "w")
1914 (match_operand:MVE_0 2 "s_register_operand" "w")))
1916 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1917 "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %q2"
1918 [(set_attr "type" "mve_move")
1922 ;; [vcmpeqq_n_f, vcmpgeq_n_f, vcmpgtq_n_f, vcmpleq_n_f, vcmpltq_n_f, vcmpneq_n_f])
1924 (define_insn "@mve_vcmp<mve_cmp_op>q_n_f<mode>"
1926 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1927 (MVE_FP_COMPARISONS:HI (match_operand:MVE_0 1 "s_register_operand" "w")
1928 (match_operand:<V_elem> 2 "s_register_operand" "r")))
1930 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1931 "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %2"
1932 [(set_attr "type" "mve_move")
1936 ;; [vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270])
1938 (define_insn "mve_vcmulq<mve_rot><mode>"
1940 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
1941 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1942 (match_operand:MVE_0 2 "s_register_operand" "w")]
1945 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1946 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
1947 [(set_attr "type" "mve_move")
1951 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
1953 (define_insn "mve_vctp<mode1>q_mhi"
1955 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1956 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
1957 (match_operand:HI 2 "vpr_register_operand" "Up")]
1961 "vpst\;vctpt.<mode1> %1"
1962 [(set_attr "type" "mve_move")
1963 (set_attr "length""8")])
1966 ;; [vcvtbq_f16_f32])
1968 (define_insn "mve_vcvtbq_f16_f32v8hf"
1970 (set (match_operand:V8HF 0 "s_register_operand" "=w")
1971 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
1972 (match_operand:V4SF 2 "s_register_operand" "w")]
1975 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1976 "vcvtb.f16.f32 %q0, %q2"
1977 [(set_attr "type" "mve_move")
1981 ;; [vcvttq_f16_f32])
1983 (define_insn "mve_vcvttq_f16_f32v8hf"
1985 (set (match_operand:V8HF 0 "s_register_operand" "=w")
1986 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
1987 (match_operand:V4SF 2 "s_register_operand" "w")]
1990 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1991 "vcvtt.f16.f32 %q0, %q2"
1992 [(set_attr "type" "mve_move")
1998 (define_insn "mve_veorq_f<mode>"
2000 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2001 (xor:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2002 (match_operand:MVE_0 2 "s_register_operand" "w")))
2004 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2005 "veor %q0, %q1, %q2"
2006 [(set_attr "type" "mve_move")
2012 (define_insn "mve_vmaxnmaq_f<mode>"
2014 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2015 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2016 (match_operand:MVE_0 2 "s_register_operand" "w")]
2019 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2020 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
2021 [(set_attr "type" "mve_move")
2027 (define_insn "mve_vmaxnmavq_f<mode>"
2029 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2030 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2031 (match_operand:MVE_0 2 "s_register_operand" "w")]
2034 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2035 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
2036 [(set_attr "type" "mve_move")
2042 (define_insn "mve_vmaxnmq_f<mode>"
2044 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2045 (smax:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2046 (match_operand:MVE_0 2 "s_register_operand" "w")))
2048 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2049 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
2050 [(set_attr "type" "mve_move")
2056 (define_insn "mve_vmaxnmvq_f<mode>"
2058 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2059 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2060 (match_operand:MVE_0 2 "s_register_operand" "w")]
2063 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2064 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
2065 [(set_attr "type" "mve_move")
2071 (define_insn "mve_vminnmaq_f<mode>"
2073 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2074 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2075 (match_operand:MVE_0 2 "s_register_operand" "w")]
2078 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2079 "vminnma.f%#<V_sz_elem> %q0, %q2"
2080 [(set_attr "type" "mve_move")
2086 (define_insn "mve_vminnmavq_f<mode>"
2088 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2089 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2090 (match_operand:MVE_0 2 "s_register_operand" "w")]
2093 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2094 "vminnmav.f%#<V_sz_elem> %0, %q2"
2095 [(set_attr "type" "mve_move")
2101 (define_insn "mve_vminnmq_f<mode>"
2103 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2104 (smin:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2105 (match_operand:MVE_0 2 "s_register_operand" "w")))
2107 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2108 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
2109 [(set_attr "type" "mve_move")
2115 (define_insn "mve_vminnmvq_f<mode>"
2117 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2118 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2119 (match_operand:MVE_0 2 "s_register_operand" "w")]
2122 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2123 "vminnmv.f%#<V_sz_elem> %0, %q2"
2124 [(set_attr "type" "mve_move")
2128 ;; [vmlaldavq_u, vmlaldavq_s])
2130 (define_insn "mve_vmlaldavq_<supf><mode>"
2132 (set (match_operand:DI 0 "s_register_operand" "=r")
2133 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2134 (match_operand:MVE_5 2 "s_register_operand" "w")]
2138 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2139 [(set_attr "type" "mve_move")
2145 (define_insn "mve_vmlaldavxq_s<mode>"
2147 (set (match_operand:DI 0 "s_register_operand" "=r")
2148 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2149 (match_operand:MVE_5 2 "s_register_operand" "w")]
2153 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2154 [(set_attr "type" "mve_move")
2160 (define_insn "mve_vmlsldavq_s<mode>"
2162 (set (match_operand:DI 0 "s_register_operand" "=r")
2163 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2164 (match_operand:MVE_5 2 "s_register_operand" "w")]
2168 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2169 [(set_attr "type" "mve_move")
2175 (define_insn "mve_vmlsldavxq_s<mode>"
2177 (set (match_operand:DI 0 "s_register_operand" "=r")
2178 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2179 (match_operand:MVE_5 2 "s_register_operand" "w")]
2183 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2184 [(set_attr "type" "mve_move")
2188 ;; [vmovnbq_u, vmovnbq_s])
2190 (define_insn "mve_vmovnbq_<supf><mode>"
2192 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2193 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2194 (match_operand:MVE_5 2 "s_register_operand" "w")]
2198 "vmovnb.i%#<V_sz_elem> %q0, %q2"
2199 [(set_attr "type" "mve_move")
2203 ;; [vmovntq_s, vmovntq_u])
2205 (define_insn "mve_vmovntq_<supf><mode>"
2207 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2208 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2209 (match_operand:MVE_5 2 "s_register_operand" "w")]
2213 "vmovnt.i%#<V_sz_elem> %q0, %q2"
2214 [(set_attr "type" "mve_move")
2220 (define_insn "mve_vmulq_f<mode>"
2222 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2223 (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2224 (match_operand:MVE_0 2 "s_register_operand" "w")))
2226 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2227 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
2228 [(set_attr "type" "mve_move")
2234 (define_insn "mve_vmulq_n_f<mode>"
2236 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2237 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2238 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2241 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2242 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
2243 [(set_attr "type" "mve_move")
2249 (define_insn "mve_vornq_f<mode>"
2251 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2252 (ior:MVE_0 (not:MVE_0 (match_operand:MVE_0 2 "s_register_operand" "w"))
2253 (match_operand:MVE_0 1 "s_register_operand" "w")))
2255 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2256 "vorn %q0, %q1, %q2"
2257 [(set_attr "type" "mve_move")
2263 (define_insn "mve_vorrq_f<mode>"
2265 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2266 (ior:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2267 (match_operand:MVE_0 2 "s_register_operand" "w")))
2269 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2270 "vorr %q0, %q1, %q2"
2271 [(set_attr "type" "mve_move")
2275 ;; [vorrq_n_u, vorrq_n_s])
2277 (define_insn "mve_vorrq_n_<supf><mode>"
2279 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2280 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2281 (match_operand:SI 2 "immediate_operand" "i")]
2285 "vorr.i%#<V_sz_elem> %q0, %2"
2286 [(set_attr "type" "mve_move")
2292 (define_insn "mve_vqdmullbq_n_s<mode>"
2294 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2295 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2296 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2300 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
2301 [(set_attr "type" "mve_move")
2307 (define_insn "mve_vqdmullbq_s<mode>"
2309 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2310 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2311 (match_operand:MVE_5 2 "s_register_operand" "w")]
2315 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
2316 [(set_attr "type" "mve_move")
2322 (define_insn "mve_vqdmulltq_n_s<mode>"
2324 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2325 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2326 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2330 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
2331 [(set_attr "type" "mve_move")
2337 (define_insn "mve_vqdmulltq_s<mode>"
2339 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2340 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2341 (match_operand:MVE_5 2 "s_register_operand" "w")]
2345 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
2346 [(set_attr "type" "mve_move")
2350 ;; [vqmovnbq_u, vqmovnbq_s])
2352 (define_insn "mve_vqmovnbq_<supf><mode>"
2354 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2355 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2356 (match_operand:MVE_5 2 "s_register_operand" "w")]
2360 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
2361 [(set_attr "type" "mve_move")
2365 ;; [vqmovntq_u, vqmovntq_s])
2367 (define_insn "mve_vqmovntq_<supf><mode>"
2369 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2370 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2371 (match_operand:MVE_5 2 "s_register_operand" "w")]
2375 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
2376 [(set_attr "type" "mve_move")
2382 (define_insn "mve_vqmovunbq_s<mode>"
2384 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2385 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2386 (match_operand:MVE_5 2 "s_register_operand" "w")]
2390 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
2391 [(set_attr "type" "mve_move")
2397 (define_insn "mve_vqmovuntq_s<mode>"
2399 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2400 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2401 (match_operand:MVE_5 2 "s_register_operand" "w")]
2405 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
2406 [(set_attr "type" "mve_move")
2410 ;; [vrmlaldavhxq_s])
2412 (define_insn "mve_vrmlaldavhxq_sv4si"
2414 (set (match_operand:DI 0 "s_register_operand" "=r")
2415 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2416 (match_operand:V4SI 2 "s_register_operand" "w")]
2420 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
2421 [(set_attr "type" "mve_move")
2427 (define_insn "mve_vrmlsldavhq_sv4si"
2429 (set (match_operand:DI 0 "s_register_operand" "=r")
2430 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2431 (match_operand:V4SI 2 "s_register_operand" "w")]
2435 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
2436 [(set_attr "type" "mve_move")
2440 ;; [vrmlsldavhxq_s])
2442 (define_insn "mve_vrmlsldavhxq_sv4si"
2444 (set (match_operand:DI 0 "s_register_operand" "=r")
2445 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2446 (match_operand:V4SI 2 "s_register_operand" "w")]
2450 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
2451 [(set_attr "type" "mve_move")
2455 ;; [vshllbq_n_s, vshllbq_n_u])
2457 (define_insn "mve_vshllbq_n_<supf><mode>"
2459 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2460 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2461 (match_operand:SI 2 "immediate_operand" "i")]
2465 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2466 [(set_attr "type" "mve_move")
2470 ;; [vshlltq_n_u, vshlltq_n_s])
2472 (define_insn "mve_vshlltq_n_<supf><mode>"
2474 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2475 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2476 (match_operand:SI 2 "immediate_operand" "i")]
2480 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2481 [(set_attr "type" "mve_move")
2487 (define_insn "mve_vsubq_f<mode>"
2489 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2490 (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2491 (match_operand:MVE_0 2 "s_register_operand" "w")))
2493 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2494 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
2495 [(set_attr "type" "mve_move")
2499 ;; [vmulltq_poly_p])
2501 (define_insn "mve_vmulltq_poly_p<mode>"
2503 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2504 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2505 (match_operand:MVE_3 2 "s_register_operand" "w")]
2509 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
2510 [(set_attr "type" "mve_move")
2514 ;; [vmullbq_poly_p])
2516 (define_insn "mve_vmullbq_poly_p<mode>"
2518 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2519 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2520 (match_operand:MVE_3 2 "s_register_operand" "w")]
2524 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
2525 [(set_attr "type" "mve_move")
2529 ;; [vrmlaldavhq_u vrmlaldavhq_s])
2531 (define_insn "mve_vrmlaldavhq_<supf>v4si"
2533 (set (match_operand:DI 0 "s_register_operand" "=r")
2534 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2535 (match_operand:V4SI 2 "s_register_operand" "w")]
2539 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
2540 [(set_attr "type" "mve_move")
2544 ;; [vbicq_m_n_s, vbicq_m_n_u])
2546 (define_insn "mve_vbicq_m_n_<supf><mode>"
2548 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2549 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2550 (match_operand:SI 2 "immediate_operand" "i")
2551 (match_operand:HI 3 "vpr_register_operand" "Up")]
2555 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
2556 [(set_attr "type" "mve_move")
2557 (set_attr "length""8")])
2561 (define_insn "mve_vcmpeqq_m_f<mode>"
2563 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2564 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2565 (match_operand:MVE_0 2 "s_register_operand" "w")
2566 (match_operand:HI 3 "vpr_register_operand" "Up")]
2569 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2570 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
2571 [(set_attr "type" "mve_move")
2572 (set_attr "length""8")])
2574 ;; [vcvtaq_m_u, vcvtaq_m_s])
2576 (define_insn "mve_vcvtaq_m_<supf><mode>"
2578 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2579 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2580 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2581 (match_operand:HI 3 "vpr_register_operand" "Up")]
2584 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2585 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
2586 [(set_attr "type" "mve_move")
2587 (set_attr "length""8")])
2589 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
2591 (define_insn "mve_vcvtq_m_to_f_<supf><mode>"
2593 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2594 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2595 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2596 (match_operand:HI 3 "vpr_register_operand" "Up")]
2599 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2600 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
2601 [(set_attr "type" "mve_move")
2602 (set_attr "length""8")])
2604 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
2606 (define_insn "mve_vqrshrnbq_n_<supf><mode>"
2608 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2609 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2610 (match_operand:MVE_5 2 "s_register_operand" "w")
2611 (match_operand:SI 3 "mve_imm_8" "Rb")]
2615 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
2616 [(set_attr "type" "mve_move")
2619 ;; [vqrshrunbq_n_s])
2621 (define_insn "mve_vqrshrunbq_n_s<mode>"
2623 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2624 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2625 (match_operand:MVE_5 2 "s_register_operand" "w")
2626 (match_operand:SI 3 "mve_imm_8" "Rb")]
2630 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
2631 [(set_attr "type" "mve_move")
2634 ;; [vrmlaldavhaq_s vrmlaldavhaq_u])
2636 (define_insn "mve_vrmlaldavhaq_<supf>v4si"
2638 (set (match_operand:DI 0 "s_register_operand" "=r")
2639 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2640 (match_operand:V4SI 2 "s_register_operand" "w")
2641 (match_operand:V4SI 3 "s_register_operand" "w")]
2645 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
2646 [(set_attr "type" "mve_move")
2650 ;; [vabavq_s, vabavq_u])
2652 (define_insn "mve_vabavq_<supf><mode>"
2654 (set (match_operand:SI 0 "s_register_operand" "=r")
2655 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
2656 (match_operand:MVE_2 2 "s_register_operand" "w")
2657 (match_operand:MVE_2 3 "s_register_operand" "w")]
2661 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
2662 [(set_attr "type" "mve_move")
2666 ;; [vshlcq_u vshlcq_s]
2668 (define_expand "mve_vshlcq_vec_<supf><mode>"
2669 [(match_operand:MVE_2 0 "s_register_operand")
2670 (match_operand:MVE_2 1 "s_register_operand")
2671 (match_operand:SI 2 "s_register_operand")
2672 (match_operand:SI 3 "mve_imm_32")
2673 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
2676 rtx ignore_wb = gen_reg_rtx (SImode);
2677 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
2678 operands[2], operands[3]));
2682 (define_expand "mve_vshlcq_carry_<supf><mode>"
2683 [(match_operand:SI 0 "s_register_operand")
2684 (match_operand:MVE_2 1 "s_register_operand")
2685 (match_operand:SI 2 "s_register_operand")
2686 (match_operand:SI 3 "mve_imm_32")
2687 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
2690 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
2691 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
2692 operands[2], operands[3]));
2696 (define_insn "mve_vshlcq_<supf><mode>"
2697 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
2698 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
2699 (match_operand:SI 3 "s_register_operand" "1")
2700 (match_operand:SI 4 "mve_imm_32" "Rf")]
2702 (set (match_operand:SI 1 "s_register_operand" "=r")
2703 (unspec:SI [(match_dup 2)
2708 "vshlc %q0, %1, %4")
2713 (define_insn "mve_vabsq_m_s<mode>"
2715 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2716 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2717 (match_operand:MVE_2 2 "s_register_operand" "w")
2718 (match_operand:HI 3 "vpr_register_operand" "Up")]
2722 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
2723 [(set_attr "type" "mve_move")
2724 (set_attr "length""8")])
2727 ;; [vaddvaq_p_u, vaddvaq_p_s])
2729 (define_insn "mve_vaddvaq_p_<supf><mode>"
2731 (set (match_operand:SI 0 "s_register_operand" "=Te")
2732 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
2733 (match_operand:MVE_2 2 "s_register_operand" "w")
2734 (match_operand:HI 3 "vpr_register_operand" "Up")]
2738 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
2739 [(set_attr "type" "mve_move")
2740 (set_attr "length""8")])
2745 (define_insn "mve_vclsq_m_s<mode>"
2747 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2748 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2749 (match_operand:MVE_2 2 "s_register_operand" "w")
2750 (match_operand:HI 3 "vpr_register_operand" "Up")]
2754 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
2755 [(set_attr "type" "mve_move")
2756 (set_attr "length""8")])
2759 ;; [vclzq_m_s, vclzq_m_u])
2761 (define_insn "mve_vclzq_m_<supf><mode>"
2763 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2764 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2765 (match_operand:MVE_2 2 "s_register_operand" "w")
2766 (match_operand:HI 3 "vpr_register_operand" "Up")]
2770 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
2771 [(set_attr "type" "mve_move")
2772 (set_attr "length""8")])
2777 (define_insn "mve_vcmpcsq_m_n_u<mode>"
2779 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2780 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2781 (match_operand:<V_elem> 2 "s_register_operand" "r")
2782 (match_operand:HI 3 "vpr_register_operand" "Up")]
2786 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
2787 [(set_attr "type" "mve_move")
2788 (set_attr "length""8")])
2793 (define_insn "mve_vcmpcsq_m_u<mode>"
2795 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2796 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2797 (match_operand:MVE_2 2 "s_register_operand" "w")
2798 (match_operand:HI 3 "vpr_register_operand" "Up")]
2802 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
2803 [(set_attr "type" "mve_move")
2804 (set_attr "length""8")])
2807 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
2809 (define_insn "mve_vcmpeqq_m_n_<supf><mode>"
2811 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2812 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2813 (match_operand:<V_elem> 2 "s_register_operand" "r")
2814 (match_operand:HI 3 "vpr_register_operand" "Up")]
2818 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
2819 [(set_attr "type" "mve_move")
2820 (set_attr "length""8")])
2823 ;; [vcmpeqq_m_u, vcmpeqq_m_s])
2825 (define_insn "mve_vcmpeqq_m_<supf><mode>"
2827 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2828 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2829 (match_operand:MVE_2 2 "s_register_operand" "w")
2830 (match_operand:HI 3 "vpr_register_operand" "Up")]
2834 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
2835 [(set_attr "type" "mve_move")
2836 (set_attr "length""8")])
2841 (define_insn "mve_vcmpgeq_m_n_s<mode>"
2843 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2844 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2845 (match_operand:<V_elem> 2 "s_register_operand" "r")
2846 (match_operand:HI 3 "vpr_register_operand" "Up")]
2850 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
2851 [(set_attr "type" "mve_move")
2852 (set_attr "length""8")])
2857 (define_insn "mve_vcmpgeq_m_s<mode>"
2859 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2860 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2861 (match_operand:MVE_2 2 "s_register_operand" "w")
2862 (match_operand:HI 3 "vpr_register_operand" "Up")]
2866 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
2867 [(set_attr "type" "mve_move")
2868 (set_attr "length""8")])
2873 (define_insn "mve_vcmpgtq_m_n_s<mode>"
2875 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2876 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2877 (match_operand:<V_elem> 2 "s_register_operand" "r")
2878 (match_operand:HI 3 "vpr_register_operand" "Up")]
2882 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
2883 [(set_attr "type" "mve_move")
2884 (set_attr "length""8")])
2889 (define_insn "mve_vcmpgtq_m_s<mode>"
2891 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2892 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2893 (match_operand:MVE_2 2 "s_register_operand" "w")
2894 (match_operand:HI 3 "vpr_register_operand" "Up")]
2898 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
2899 [(set_attr "type" "mve_move")
2900 (set_attr "length""8")])
2905 (define_insn "mve_vcmphiq_m_n_u<mode>"
2907 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2908 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2909 (match_operand:<V_elem> 2 "s_register_operand" "r")
2910 (match_operand:HI 3 "vpr_register_operand" "Up")]
2914 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
2915 [(set_attr "type" "mve_move")
2916 (set_attr "length""8")])
2921 (define_insn "mve_vcmphiq_m_u<mode>"
2923 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2924 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2925 (match_operand:MVE_2 2 "s_register_operand" "w")
2926 (match_operand:HI 3 "vpr_register_operand" "Up")]
2930 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
2931 [(set_attr "type" "mve_move")
2932 (set_attr "length""8")])
2937 (define_insn "mve_vcmpleq_m_n_s<mode>"
2939 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2940 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2941 (match_operand:<V_elem> 2 "s_register_operand" "r")
2942 (match_operand:HI 3 "vpr_register_operand" "Up")]
2946 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
2947 [(set_attr "type" "mve_move")
2948 (set_attr "length""8")])
2953 (define_insn "mve_vcmpleq_m_s<mode>"
2955 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2956 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2957 (match_operand:MVE_2 2 "s_register_operand" "w")
2958 (match_operand:HI 3 "vpr_register_operand" "Up")]
2962 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
2963 [(set_attr "type" "mve_move")
2964 (set_attr "length""8")])
2969 (define_insn "mve_vcmpltq_m_n_s<mode>"
2971 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2972 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2973 (match_operand:<V_elem> 2 "s_register_operand" "r")
2974 (match_operand:HI 3 "vpr_register_operand" "Up")]
2978 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
2979 [(set_attr "type" "mve_move")
2980 (set_attr "length""8")])
2985 (define_insn "mve_vcmpltq_m_s<mode>"
2987 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2988 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2989 (match_operand:MVE_2 2 "s_register_operand" "w")
2990 (match_operand:HI 3 "vpr_register_operand" "Up")]
2994 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
2995 [(set_attr "type" "mve_move")
2996 (set_attr "length""8")])
2999 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3001 (define_insn "mve_vcmpneq_m_n_<supf><mode>"
3003 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3004 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3005 (match_operand:<V_elem> 2 "s_register_operand" "r")
3006 (match_operand:HI 3 "vpr_register_operand" "Up")]
3010 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
3011 [(set_attr "type" "mve_move")
3012 (set_attr "length""8")])
3015 ;; [vcmpneq_m_s, vcmpneq_m_u])
3017 (define_insn "mve_vcmpneq_m_<supf><mode>"
3019 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3020 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3021 (match_operand:MVE_2 2 "s_register_operand" "w")
3022 (match_operand:HI 3 "vpr_register_operand" "Up")]
3026 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
3027 [(set_attr "type" "mve_move")
3028 (set_attr "length""8")])
3031 ;; [vdupq_m_n_s, vdupq_m_n_u])
3033 (define_insn "mve_vdupq_m_n_<supf><mode>"
3035 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3036 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3037 (match_operand:<V_elem> 2 "s_register_operand" "r")
3038 (match_operand:HI 3 "vpr_register_operand" "Up")]
3042 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3043 [(set_attr "type" "mve_move")
3044 (set_attr "length""8")])
3049 (define_insn "mve_vmaxaq_m_s<mode>"
3051 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3052 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3053 (match_operand:MVE_2 2 "s_register_operand" "w")
3054 (match_operand:HI 3 "vpr_register_operand" "Up")]
3058 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
3059 [(set_attr "type" "mve_move")
3060 (set_attr "length""8")])
3065 (define_insn "mve_vmaxavq_p_s<mode>"
3067 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3068 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3069 (match_operand:MVE_2 2 "s_register_operand" "w")
3070 (match_operand:HI 3 "vpr_register_operand" "Up")]
3074 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
3075 [(set_attr "type" "mve_move")
3076 (set_attr "length""8")])
3079 ;; [vmaxvq_p_u, vmaxvq_p_s])
3081 (define_insn "mve_vmaxvq_p_<supf><mode>"
3083 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3084 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3085 (match_operand:MVE_2 2 "s_register_operand" "w")
3086 (match_operand:HI 3 "vpr_register_operand" "Up")]
3090 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
3091 [(set_attr "type" "mve_move")
3092 (set_attr "length""8")])
3097 (define_insn "mve_vminaq_m_s<mode>"
3099 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3100 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3101 (match_operand:MVE_2 2 "s_register_operand" "w")
3102 (match_operand:HI 3 "vpr_register_operand" "Up")]
3106 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
3107 [(set_attr "type" "mve_move")
3108 (set_attr "length""8")])
3113 (define_insn "mve_vminavq_p_s<mode>"
3115 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3116 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3117 (match_operand:MVE_2 2 "s_register_operand" "w")
3118 (match_operand:HI 3 "vpr_register_operand" "Up")]
3122 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
3123 [(set_attr "type" "mve_move")
3124 (set_attr "length""8")])
3127 ;; [vminvq_p_s, vminvq_p_u])
3129 (define_insn "mve_vminvq_p_<supf><mode>"
3131 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3132 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3133 (match_operand:MVE_2 2 "s_register_operand" "w")
3134 (match_operand:HI 3 "vpr_register_operand" "Up")]
3138 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
3139 [(set_attr "type" "mve_move")
3140 (set_attr "length""8")])
3143 ;; [vmladavaq_u, vmladavaq_s])
3145 (define_insn "mve_vmladavaq_<supf><mode>"
3147 (set (match_operand:SI 0 "s_register_operand" "=Te")
3148 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3149 (match_operand:MVE_2 2 "s_register_operand" "w")
3150 (match_operand:MVE_2 3 "s_register_operand" "w")]
3154 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
3155 [(set_attr "type" "mve_move")
3159 ;; [vmladavq_p_u, vmladavq_p_s])
3161 (define_insn "mve_vmladavq_p_<supf><mode>"
3163 (set (match_operand:SI 0 "s_register_operand" "=Te")
3164 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3165 (match_operand:MVE_2 2 "s_register_operand" "w")
3166 (match_operand:HI 3 "vpr_register_operand" "Up")]
3170 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
3171 [(set_attr "type" "mve_move")
3172 (set_attr "length""8")])
3177 (define_insn "mve_vmladavxq_p_s<mode>"
3179 (set (match_operand:SI 0 "s_register_operand" "=Te")
3180 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3181 (match_operand:MVE_2 2 "s_register_operand" "w")
3182 (match_operand:HI 3 "vpr_register_operand" "Up")]
3186 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
3187 [(set_attr "type" "mve_move")
3188 (set_attr "length""8")])
3191 ;; [vmlaq_n_u, vmlaq_n_s])
3193 (define_insn "mve_vmlaq_n_<supf><mode>"
3195 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3196 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3197 (match_operand:MVE_2 2 "s_register_operand" "w")
3198 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3202 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
3203 [(set_attr "type" "mve_move")
3207 ;; [vmlasq_n_u, vmlasq_n_s])
3209 (define_insn "mve_vmlasq_n_<supf><mode>"
3211 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3212 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3213 (match_operand:MVE_2 2 "s_register_operand" "w")
3214 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3218 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
3219 [(set_attr "type" "mve_move")
3225 (define_insn "mve_vmlsdavq_p_s<mode>"
3227 (set (match_operand:SI 0 "s_register_operand" "=Te")
3228 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3229 (match_operand:MVE_2 2 "s_register_operand" "w")
3230 (match_operand:HI 3 "vpr_register_operand" "Up")]
3234 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
3235 [(set_attr "type" "mve_move")
3236 (set_attr "length""8")])
3241 (define_insn "mve_vmlsdavxq_p_s<mode>"
3243 (set (match_operand:SI 0 "s_register_operand" "=Te")
3244 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3245 (match_operand:MVE_2 2 "s_register_operand" "w")
3246 (match_operand:HI 3 "vpr_register_operand" "Up")]
3250 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
3251 [(set_attr "type" "mve_move")
3252 (set_attr "length""8")])
3255 ;; [vmvnq_m_s, vmvnq_m_u])
3257 (define_insn "mve_vmvnq_m_<supf><mode>"
3259 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3260 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3261 (match_operand:MVE_2 2 "s_register_operand" "w")
3262 (match_operand:HI 3 "vpr_register_operand" "Up")]
3266 "vpst\;vmvnt %q0, %q2"
3267 [(set_attr "type" "mve_move")
3268 (set_attr "length""8")])
3273 (define_insn "mve_vnegq_m_s<mode>"
3275 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3276 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3277 (match_operand:MVE_2 2 "s_register_operand" "w")
3278 (match_operand:HI 3 "vpr_register_operand" "Up")]
3282 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
3283 [(set_attr "type" "mve_move")
3284 (set_attr "length""8")])
3287 ;; [vpselq_u, vpselq_s])
3289 (define_insn "@mve_vpselq_<supf><mode>"
3291 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
3292 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
3293 (match_operand:MVE_1 2 "s_register_operand" "w")
3294 (match_operand:HI 3 "vpr_register_operand" "Up")]
3298 "vpsel %q0, %q1, %q2"
3299 [(set_attr "type" "mve_move")
3305 (define_insn "mve_vqabsq_m_s<mode>"
3307 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3308 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3309 (match_operand:MVE_2 2 "s_register_operand" "w")
3310 (match_operand:HI 3 "vpr_register_operand" "Up")]
3314 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
3315 [(set_attr "type" "mve_move")
3316 (set_attr "length""8")])
3321 (define_insn "mve_vqdmlahq_n_<supf><mode>"
3323 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3324 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3325 (match_operand:MVE_2 2 "s_register_operand" "w")
3326 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3330 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3331 [(set_attr "type" "mve_move")
3337 (define_insn "mve_vqdmlashq_n_<supf><mode>"
3339 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3340 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3341 (match_operand:MVE_2 2 "s_register_operand" "w")
3342 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3346 "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3347 [(set_attr "type" "mve_move")
3353 (define_insn "mve_vqnegq_m_s<mode>"
3355 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3356 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3357 (match_operand:MVE_2 2 "s_register_operand" "w")
3358 (match_operand:HI 3 "vpr_register_operand" "Up")]
3362 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
3363 [(set_attr "type" "mve_move")
3364 (set_attr "length""8")])
3369 (define_insn "mve_vqrdmladhq_s<mode>"
3371 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3372 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3373 (match_operand:MVE_2 2 "s_register_operand" "w")
3374 (match_operand:MVE_2 3 "s_register_operand" "w")]
3378 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3379 [(set_attr "type" "mve_move")
3385 (define_insn "mve_vqrdmladhxq_s<mode>"
3387 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3388 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3389 (match_operand:MVE_2 2 "s_register_operand" "w")
3390 (match_operand:MVE_2 3 "s_register_operand" "w")]
3394 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3395 [(set_attr "type" "mve_move")
3401 (define_insn "mve_vqrdmlahq_n_<supf><mode>"
3403 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3404 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3405 (match_operand:MVE_2 2 "s_register_operand" "w")
3406 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3410 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3411 [(set_attr "type" "mve_move")
3415 ;; [vqrdmlashq_n_s])
3417 (define_insn "mve_vqrdmlashq_n_<supf><mode>"
3419 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3420 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3421 (match_operand:MVE_2 2 "s_register_operand" "w")
3422 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3426 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3427 [(set_attr "type" "mve_move")
3433 (define_insn "mve_vqrdmlsdhq_s<mode>"
3435 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3436 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3437 (match_operand:MVE_2 2 "s_register_operand" "w")
3438 (match_operand:MVE_2 3 "s_register_operand" "w")]
3442 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3443 [(set_attr "type" "mve_move")
3449 (define_insn "mve_vqrdmlsdhxq_s<mode>"
3451 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3452 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3453 (match_operand:MVE_2 2 "s_register_operand" "w")
3454 (match_operand:MVE_2 3 "s_register_operand" "w")]
3458 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3459 [(set_attr "type" "mve_move")
3463 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
3465 (define_insn "mve_vqrshlq_m_n_<supf><mode>"
3467 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3468 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3469 (match_operand:SI 2 "s_register_operand" "r")
3470 (match_operand:HI 3 "vpr_register_operand" "Up")]
3474 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
3475 [(set_attr "type" "mve_move")
3476 (set_attr "length""8")])
3479 ;; [vqshlq_m_r_u, vqshlq_m_r_s])
3481 (define_insn "mve_vqshlq_m_r_<supf><mode>"
3483 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3484 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3485 (match_operand:SI 2 "s_register_operand" "r")
3486 (match_operand:HI 3 "vpr_register_operand" "Up")]
3490 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3491 [(set_attr "type" "mve_move")
3492 (set_attr "length""8")])
3495 ;; [vrev64q_m_u, vrev64q_m_s])
3497 (define_insn "mve_vrev64q_m_<supf><mode>"
3499 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3500 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3501 (match_operand:MVE_2 2 "s_register_operand" "w")
3502 (match_operand:HI 3 "vpr_register_operand" "Up")]
3506 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
3507 [(set_attr "type" "mve_move")
3508 (set_attr "length""8")])
3511 ;; [vrshlq_m_n_s, vrshlq_m_n_u])
3513 (define_insn "mve_vrshlq_m_n_<supf><mode>"
3515 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3516 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3517 (match_operand:SI 2 "s_register_operand" "r")
3518 (match_operand:HI 3 "vpr_register_operand" "Up")]
3522 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3523 [(set_attr "type" "mve_move")
3524 (set_attr "length""8")])
3527 ;; [vshlq_m_r_u, vshlq_m_r_s])
3529 (define_insn "mve_vshlq_m_r_<supf><mode>"
3531 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3532 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3533 (match_operand:SI 2 "s_register_operand" "r")
3534 (match_operand:HI 3 "vpr_register_operand" "Up")]
3538 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3539 [(set_attr "type" "mve_move")
3540 (set_attr "length""8")])
3543 ;; [vsliq_n_u, vsliq_n_s])
3545 (define_insn "mve_vsliq_n_<supf><mode>"
3547 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3548 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3549 (match_operand:MVE_2 2 "s_register_operand" "w")
3550 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
3554 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
3555 [(set_attr "type" "mve_move")
3559 ;; [vsriq_n_u, vsriq_n_s])
3561 (define_insn "mve_vsriq_n_<supf><mode>"
3563 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3564 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3565 (match_operand:MVE_2 2 "s_register_operand" "w")
3566 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
3570 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
3571 [(set_attr "type" "mve_move")
3577 (define_insn "mve_vqdmlsdhxq_s<mode>"
3579 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3580 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3581 (match_operand:MVE_2 2 "s_register_operand" "w")
3582 (match_operand:MVE_2 3 "s_register_operand" "w")]
3586 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3587 [(set_attr "type" "mve_move")
3593 (define_insn "mve_vqdmlsdhq_s<mode>"
3595 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3596 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3597 (match_operand:MVE_2 2 "s_register_operand" "w")
3598 (match_operand:MVE_2 3 "s_register_operand" "w")]
3602 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3603 [(set_attr "type" "mve_move")
3609 (define_insn "mve_vqdmladhxq_s<mode>"
3611 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3612 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3613 (match_operand:MVE_2 2 "s_register_operand" "w")
3614 (match_operand:MVE_2 3 "s_register_operand" "w")]
3618 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3619 [(set_attr "type" "mve_move")
3625 (define_insn "mve_vqdmladhq_s<mode>"
3627 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3628 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3629 (match_operand:MVE_2 2 "s_register_operand" "w")
3630 (match_operand:MVE_2 3 "s_register_operand" "w")]
3634 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3635 [(set_attr "type" "mve_move")
3641 (define_insn "mve_vmlsdavaxq_s<mode>"
3643 (set (match_operand:SI 0 "s_register_operand" "=Te")
3644 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3645 (match_operand:MVE_2 2 "s_register_operand" "w")
3646 (match_operand:MVE_2 3 "s_register_operand" "w")]
3650 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
3651 [(set_attr "type" "mve_move")
3657 (define_insn "mve_vmlsdavaq_s<mode>"
3659 (set (match_operand:SI 0 "s_register_operand" "=Te")
3660 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3661 (match_operand:MVE_2 2 "s_register_operand" "w")
3662 (match_operand:MVE_2 3 "s_register_operand" "w")]
3666 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
3667 [(set_attr "type" "mve_move")
3673 (define_insn "mve_vmladavaxq_s<mode>"
3675 (set (match_operand:SI 0 "s_register_operand" "=Te")
3676 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3677 (match_operand:MVE_2 2 "s_register_operand" "w")
3678 (match_operand:MVE_2 3 "s_register_operand" "w")]
3682 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
3683 [(set_attr "type" "mve_move")
3688 (define_insn "mve_vabsq_m_f<mode>"
3690 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3691 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3692 (match_operand:MVE_0 2 "s_register_operand" "w")
3693 (match_operand:HI 3 "vpr_register_operand" "Up")]
3696 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3697 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
3698 [(set_attr "type" "mve_move")
3699 (set_attr "length""8")])
3702 ;; [vaddlvaq_p_s vaddlvaq_p_u])
3704 (define_insn "mve_vaddlvaq_p_<supf>v4si"
3706 (set (match_operand:DI 0 "s_register_operand" "=r")
3707 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
3708 (match_operand:V4SI 2 "s_register_operand" "w")
3709 (match_operand:HI 3 "vpr_register_operand" "Up")]
3713 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
3714 [(set_attr "type" "mve_move")
3715 (set_attr "length""8")])
3717 ;; [vcmlaq, vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270])
3719 (define_insn "mve_vcmlaq<mve_rot><mode>"
3721 (set (match_operand:MVE_0 0 "s_register_operand" "=w,w")
3722 (plus:MVE_0 (match_operand:MVE_0 1 "reg_or_zero_operand" "Dz,0")
3724 [(match_operand:MVE_0 2 "s_register_operand" "w,w")
3725 (match_operand:MVE_0 3 "s_register_operand" "w,w")]
3728 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3730 vcmul.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>
3731 vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>"
3732 [(set_attr "type" "mve_move")
3738 (define_insn "mve_vcmpeqq_m_n_f<mode>"
3740 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3741 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3742 (match_operand:<V_elem> 2 "s_register_operand" "r")
3743 (match_operand:HI 3 "vpr_register_operand" "Up")]
3746 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3747 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
3748 [(set_attr "type" "mve_move")
3749 (set_attr "length""8")])
3754 (define_insn "mve_vcmpgeq_m_f<mode>"
3756 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3757 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3758 (match_operand:MVE_0 2 "s_register_operand" "w")
3759 (match_operand:HI 3 "vpr_register_operand" "Up")]
3762 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3763 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
3764 [(set_attr "type" "mve_move")
3765 (set_attr "length""8")])
3770 (define_insn "mve_vcmpgeq_m_n_f<mode>"
3772 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3773 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3774 (match_operand:<V_elem> 2 "s_register_operand" "r")
3775 (match_operand:HI 3 "vpr_register_operand" "Up")]
3778 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3779 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
3780 [(set_attr "type" "mve_move")
3781 (set_attr "length""8")])
3786 (define_insn "mve_vcmpgtq_m_f<mode>"
3788 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3789 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3790 (match_operand:MVE_0 2 "s_register_operand" "w")
3791 (match_operand:HI 3 "vpr_register_operand" "Up")]
3794 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3795 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
3796 [(set_attr "type" "mve_move")
3797 (set_attr "length""8")])
3802 (define_insn "mve_vcmpgtq_m_n_f<mode>"
3804 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3805 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3806 (match_operand:<V_elem> 2 "s_register_operand" "r")
3807 (match_operand:HI 3 "vpr_register_operand" "Up")]
3810 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3811 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
3812 [(set_attr "type" "mve_move")
3813 (set_attr "length""8")])
3818 (define_insn "mve_vcmpleq_m_f<mode>"
3820 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3821 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3822 (match_operand:MVE_0 2 "s_register_operand" "w")
3823 (match_operand:HI 3 "vpr_register_operand" "Up")]
3826 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3827 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
3828 [(set_attr "type" "mve_move")
3829 (set_attr "length""8")])
3834 (define_insn "mve_vcmpleq_m_n_f<mode>"
3836 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3837 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3838 (match_operand:<V_elem> 2 "s_register_operand" "r")
3839 (match_operand:HI 3 "vpr_register_operand" "Up")]
3842 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3843 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
3844 [(set_attr "type" "mve_move")
3845 (set_attr "length""8")])
3850 (define_insn "mve_vcmpltq_m_f<mode>"
3852 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3853 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3854 (match_operand:MVE_0 2 "s_register_operand" "w")
3855 (match_operand:HI 3 "vpr_register_operand" "Up")]
3858 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3859 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
3860 [(set_attr "type" "mve_move")
3861 (set_attr "length""8")])
3866 (define_insn "mve_vcmpltq_m_n_f<mode>"
3868 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3869 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3870 (match_operand:<V_elem> 2 "s_register_operand" "r")
3871 (match_operand:HI 3 "vpr_register_operand" "Up")]
3874 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3875 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
3876 [(set_attr "type" "mve_move")
3877 (set_attr "length""8")])
3882 (define_insn "mve_vcmpneq_m_f<mode>"
3884 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3885 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3886 (match_operand:MVE_0 2 "s_register_operand" "w")
3887 (match_operand:HI 3 "vpr_register_operand" "Up")]
3890 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3891 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
3892 [(set_attr "type" "mve_move")
3893 (set_attr "length""8")])
3898 (define_insn "mve_vcmpneq_m_n_f<mode>"
3900 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3901 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3902 (match_operand:<V_elem> 2 "s_register_operand" "r")
3903 (match_operand:HI 3 "vpr_register_operand" "Up")]
3906 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3907 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
3908 [(set_attr "type" "mve_move")
3909 (set_attr "length""8")])
3912 ;; [vcvtbq_m_f16_f32])
3914 (define_insn "mve_vcvtbq_m_f16_f32v8hf"
3916 (set (match_operand:V8HF 0 "s_register_operand" "=w")
3917 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
3918 (match_operand:V4SF 2 "s_register_operand" "w")
3919 (match_operand:HI 3 "vpr_register_operand" "Up")]
3922 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3923 "vpst\;vcvtbt.f16.f32 %q0, %q2"
3924 [(set_attr "type" "mve_move")
3925 (set_attr "length""8")])
3928 ;; [vcvtbq_m_f32_f16])
3930 (define_insn "mve_vcvtbq_m_f32_f16v4sf"
3932 (set (match_operand:V4SF 0 "s_register_operand" "=w")
3933 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
3934 (match_operand:V8HF 2 "s_register_operand" "w")
3935 (match_operand:HI 3 "vpr_register_operand" "Up")]
3938 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3939 "vpst\;vcvtbt.f32.f16 %q0, %q2"
3940 [(set_attr "type" "mve_move")
3941 (set_attr "length""8")])
3944 ;; [vcvttq_m_f16_f32])
3946 (define_insn "mve_vcvttq_m_f16_f32v8hf"
3948 (set (match_operand:V8HF 0 "s_register_operand" "=w")
3949 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
3950 (match_operand:V4SF 2 "s_register_operand" "w")
3951 (match_operand:HI 3 "vpr_register_operand" "Up")]
3954 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3955 "vpst\;vcvttt.f16.f32 %q0, %q2"
3956 [(set_attr "type" "mve_move")
3957 (set_attr "length""8")])
3960 ;; [vcvttq_m_f32_f16])
3962 (define_insn "mve_vcvttq_m_f32_f16v4sf"
3964 (set (match_operand:V4SF 0 "s_register_operand" "=w")
3965 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
3966 (match_operand:V8HF 2 "s_register_operand" "w")
3967 (match_operand:HI 3 "vpr_register_operand" "Up")]
3970 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3971 "vpst\;vcvttt.f32.f16 %q0, %q2"
3972 [(set_attr "type" "mve_move")
3973 (set_attr "length""8")])
3978 (define_insn "mve_vdupq_m_n_f<mode>"
3980 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3981 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3982 (match_operand:<V_elem> 2 "s_register_operand" "r")
3983 (match_operand:HI 3 "vpr_register_operand" "Up")]
3986 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3987 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3988 [(set_attr "type" "mve_move")
3989 (set_attr "length""8")])
3994 (define_insn "mve_vfmaq_f<mode>"
3996 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3997 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3998 (match_operand:MVE_0 2 "s_register_operand" "w")
3999 (match_operand:MVE_0 3 "s_register_operand" "w")]
4002 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4003 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
4004 [(set_attr "type" "mve_move")
4010 (define_insn "mve_vfmaq_n_f<mode>"
4012 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4013 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4014 (match_operand:MVE_0 2 "s_register_operand" "w")
4015 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4018 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4019 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
4020 [(set_attr "type" "mve_move")
4026 (define_insn "mve_vfmasq_n_f<mode>"
4028 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4029 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4030 (match_operand:MVE_0 2 "s_register_operand" "w")
4031 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4034 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4035 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
4036 [(set_attr "type" "mve_move")
4041 (define_insn "mve_vfmsq_f<mode>"
4043 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4044 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4045 (match_operand:MVE_0 2 "s_register_operand" "w")
4046 (match_operand:MVE_0 3 "s_register_operand" "w")]
4049 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4050 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
4051 [(set_attr "type" "mve_move")
4057 (define_insn "mve_vmaxnmaq_m_f<mode>"
4059 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4060 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4061 (match_operand:MVE_0 2 "s_register_operand" "w")
4062 (match_operand:HI 3 "vpr_register_operand" "Up")]
4065 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4066 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
4067 [(set_attr "type" "mve_move")
4068 (set_attr "length""8")])
4072 (define_insn "mve_vmaxnmavq_p_f<mode>"
4074 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4075 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4076 (match_operand:MVE_0 2 "s_register_operand" "w")
4077 (match_operand:HI 3 "vpr_register_operand" "Up")]
4080 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4081 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
4082 [(set_attr "type" "mve_move")
4083 (set_attr "length""8")])
4088 (define_insn "mve_vmaxnmvq_p_f<mode>"
4090 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4091 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4092 (match_operand:MVE_0 2 "s_register_operand" "w")
4093 (match_operand:HI 3 "vpr_register_operand" "Up")]
4096 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4097 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
4098 [(set_attr "type" "mve_move")
4099 (set_attr "length""8")])
4103 (define_insn "mve_vminnmaq_m_f<mode>"
4105 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4106 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4107 (match_operand:MVE_0 2 "s_register_operand" "w")
4108 (match_operand:HI 3 "vpr_register_operand" "Up")]
4111 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4112 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
4113 [(set_attr "type" "mve_move")
4114 (set_attr "length""8")])
4119 (define_insn "mve_vminnmavq_p_f<mode>"
4121 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4122 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4123 (match_operand:MVE_0 2 "s_register_operand" "w")
4124 (match_operand:HI 3 "vpr_register_operand" "Up")]
4127 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4128 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
4129 [(set_attr "type" "mve_move")
4130 (set_attr "length""8")])
4134 (define_insn "mve_vminnmvq_p_f<mode>"
4136 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4137 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4138 (match_operand:MVE_0 2 "s_register_operand" "w")
4139 (match_operand:HI 3 "vpr_register_operand" "Up")]
4142 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4143 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
4144 [(set_attr "type" "mve_move")
4145 (set_attr "length""8")])
4148 ;; [vmlaldavaq_s, vmlaldavaq_u])
4150 (define_insn "mve_vmlaldavaq_<supf><mode>"
4152 (set (match_operand:DI 0 "s_register_operand" "=r")
4153 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4154 (match_operand:MVE_5 2 "s_register_operand" "w")
4155 (match_operand:MVE_5 3 "s_register_operand" "w")]
4159 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4160 [(set_attr "type" "mve_move")
4166 (define_insn "mve_vmlaldavaxq_s<mode>"
4168 (set (match_operand:DI 0 "s_register_operand" "=r")
4169 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4170 (match_operand:MVE_5 2 "s_register_operand" "w")
4171 (match_operand:MVE_5 3 "s_register_operand" "w")]
4175 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4176 [(set_attr "type" "mve_move")
4180 ;; [vmlaldavq_p_u, vmlaldavq_p_s])
4182 (define_insn "mve_vmlaldavq_p_<supf><mode>"
4184 (set (match_operand:DI 0 "s_register_operand" "=r")
4185 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4186 (match_operand:MVE_5 2 "s_register_operand" "w")
4187 (match_operand:HI 3 "vpr_register_operand" "Up")]
4191 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4192 [(set_attr "type" "mve_move")
4193 (set_attr "length""8")])
4196 ;; [vmlaldavxq_p_s])
4198 (define_insn "mve_vmlaldavxq_p_s<mode>"
4200 (set (match_operand:DI 0 "s_register_operand" "=r")
4201 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4202 (match_operand:MVE_5 2 "s_register_operand" "w")
4203 (match_operand:HI 3 "vpr_register_operand" "Up")]
4207 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
4208 [(set_attr "type" "mve_move")
4209 (set_attr "length""8")])
4213 (define_insn "mve_vmlsldavaq_s<mode>"
4215 (set (match_operand:DI 0 "s_register_operand" "=r")
4216 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4217 (match_operand:MVE_5 2 "s_register_operand" "w")
4218 (match_operand:MVE_5 3 "s_register_operand" "w")]
4222 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4223 [(set_attr "type" "mve_move")
4229 (define_insn "mve_vmlsldavaxq_s<mode>"
4231 (set (match_operand:DI 0 "s_register_operand" "=r")
4232 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4233 (match_operand:MVE_5 2 "s_register_operand" "w")
4234 (match_operand:MVE_5 3 "s_register_operand" "w")]
4238 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4239 [(set_attr "type" "mve_move")
4245 (define_insn "mve_vmlsldavq_p_s<mode>"
4247 (set (match_operand:DI 0 "s_register_operand" "=r")
4248 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4249 (match_operand:MVE_5 2 "s_register_operand" "w")
4250 (match_operand:HI 3 "vpr_register_operand" "Up")]
4254 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4255 [(set_attr "type" "mve_move")
4256 (set_attr "length""8")])
4259 ;; [vmlsldavxq_p_s])
4261 (define_insn "mve_vmlsldavxq_p_s<mode>"
4263 (set (match_operand:DI 0 "s_register_operand" "=r")
4264 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4265 (match_operand:MVE_5 2 "s_register_operand" "w")
4266 (match_operand:HI 3 "vpr_register_operand" "Up")]
4270 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4271 [(set_attr "type" "mve_move")
4272 (set_attr "length""8")])
4274 ;; [vmovlbq_m_u, vmovlbq_m_s])
4276 (define_insn "mve_vmovlbq_m_<supf><mode>"
4278 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4279 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4280 (match_operand:MVE_3 2 "s_register_operand" "w")
4281 (match_operand:HI 3 "vpr_register_operand" "Up")]
4285 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
4286 [(set_attr "type" "mve_move")
4287 (set_attr "length""8")])
4289 ;; [vmovltq_m_u, vmovltq_m_s])
4291 (define_insn "mve_vmovltq_m_<supf><mode>"
4293 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4294 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4295 (match_operand:MVE_3 2 "s_register_operand" "w")
4296 (match_operand:HI 3 "vpr_register_operand" "Up")]
4300 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
4301 [(set_attr "type" "mve_move")
4302 (set_attr "length""8")])
4304 ;; [vmovnbq_m_u, vmovnbq_m_s])
4306 (define_insn "mve_vmovnbq_m_<supf><mode>"
4308 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4309 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4310 (match_operand:MVE_5 2 "s_register_operand" "w")
4311 (match_operand:HI 3 "vpr_register_operand" "Up")]
4315 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
4316 [(set_attr "type" "mve_move")
4317 (set_attr "length""8")])
4320 ;; [vmovntq_m_u, vmovntq_m_s])
4322 (define_insn "mve_vmovntq_m_<supf><mode>"
4324 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4325 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4326 (match_operand:MVE_5 2 "s_register_operand" "w")
4327 (match_operand:HI 3 "vpr_register_operand" "Up")]
4331 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
4332 [(set_attr "type" "mve_move")
4333 (set_attr "length""8")])
4336 ;; [vmvnq_m_n_u, vmvnq_m_n_s])
4338 (define_insn "mve_vmvnq_m_n_<supf><mode>"
4340 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4341 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4342 (match_operand:SI 2 "immediate_operand" "i")
4343 (match_operand:HI 3 "vpr_register_operand" "Up")]
4347 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
4348 [(set_attr "type" "mve_move")
4349 (set_attr "length""8")])
4353 (define_insn "mve_vnegq_m_f<mode>"
4355 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4356 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4357 (match_operand:MVE_0 2 "s_register_operand" "w")
4358 (match_operand:HI 3 "vpr_register_operand" "Up")]
4361 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4362 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
4363 [(set_attr "type" "mve_move")
4364 (set_attr "length""8")])
4367 ;; [vorrq_m_n_s, vorrq_m_n_u])
4369 (define_insn "mve_vorrq_m_n_<supf><mode>"
4371 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4372 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4373 (match_operand:SI 2 "immediate_operand" "i")
4374 (match_operand:HI 3 "vpr_register_operand" "Up")]
4378 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
4379 [(set_attr "type" "mve_move")
4380 (set_attr "length""8")])
4384 (define_insn "@mve_vpselq_f<mode>"
4386 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4387 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
4388 (match_operand:MVE_0 2 "s_register_operand" "w")
4389 (match_operand:HI 3 "vpr_register_operand" "Up")]
4392 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4393 "vpsel %q0, %q1, %q2"
4394 [(set_attr "type" "mve_move")
4398 ;; [vqmovnbq_m_s, vqmovnbq_m_u])
4400 (define_insn "mve_vqmovnbq_m_<supf><mode>"
4402 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4403 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4404 (match_operand:MVE_5 2 "s_register_operand" "w")
4405 (match_operand:HI 3 "vpr_register_operand" "Up")]
4409 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
4410 [(set_attr "type" "mve_move")
4411 (set_attr "length""8")])
4414 ;; [vqmovntq_m_u, vqmovntq_m_s])
4416 (define_insn "mve_vqmovntq_m_<supf><mode>"
4418 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4419 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4420 (match_operand:MVE_5 2 "s_register_operand" "w")
4421 (match_operand:HI 3 "vpr_register_operand" "Up")]
4425 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
4426 [(set_attr "type" "mve_move")
4427 (set_attr "length""8")])
4432 (define_insn "mve_vqmovunbq_m_s<mode>"
4434 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4435 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4436 (match_operand:MVE_5 2 "s_register_operand" "w")
4437 (match_operand:HI 3 "vpr_register_operand" "Up")]
4441 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
4442 [(set_attr "type" "mve_move")
4443 (set_attr "length""8")])
4448 (define_insn "mve_vqmovuntq_m_s<mode>"
4450 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4451 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4452 (match_operand:MVE_5 2 "s_register_operand" "w")
4453 (match_operand:HI 3 "vpr_register_operand" "Up")]
4457 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
4458 [(set_attr "type" "mve_move")
4459 (set_attr "length""8")])
4462 ;; [vqrshrntq_n_u, vqrshrntq_n_s])
4464 (define_insn "mve_vqrshrntq_n_<supf><mode>"
4466 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4467 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4468 (match_operand:MVE_5 2 "s_register_operand" "w")
4469 (match_operand:SI 3 "mve_imm_8" "Rb")]
4473 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4474 [(set_attr "type" "mve_move")
4478 ;; [vqrshruntq_n_s])
4480 (define_insn "mve_vqrshruntq_n_s<mode>"
4482 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4483 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4484 (match_operand:MVE_5 2 "s_register_operand" "w")
4485 (match_operand:SI 3 "mve_imm_8" "Rb")]
4489 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4490 [(set_attr "type" "mve_move")
4494 ;; [vqshrnbq_n_u, vqshrnbq_n_s])
4496 (define_insn "mve_vqshrnbq_n_<supf><mode>"
4498 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4499 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4500 (match_operand:MVE_5 2 "s_register_operand" "w")
4501 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4505 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4506 [(set_attr "type" "mve_move")
4510 ;; [vqshrntq_n_u, vqshrntq_n_s])
4512 (define_insn "mve_vqshrntq_n_<supf><mode>"
4514 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4515 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4516 (match_operand:MVE_5 2 "s_register_operand" "w")
4517 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4521 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4522 [(set_attr "type" "mve_move")
4528 (define_insn "mve_vqshrunbq_n_s<mode>"
4530 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4531 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4532 (match_operand:MVE_5 2 "s_register_operand" "w")
4533 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4537 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
4538 [(set_attr "type" "mve_move")
4544 (define_insn "mve_vqshruntq_n_s<mode>"
4546 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4547 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4548 (match_operand:MVE_5 2 "s_register_operand" "w")
4549 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4553 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4554 [(set_attr "type" "mve_move")
4560 (define_insn "mve_vrev32q_m_fv8hf"
4562 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4563 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4564 (match_operand:V8HF 2 "s_register_operand" "w")
4565 (match_operand:HI 3 "vpr_register_operand" "Up")]
4568 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4569 "vpst\;vrev32t.16 %q0, %q2"
4570 [(set_attr "type" "mve_move")
4571 (set_attr "length""8")])
4574 ;; [vrev32q_m_s, vrev32q_m_u])
4576 (define_insn "mve_vrev32q_m_<supf><mode>"
4578 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
4579 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
4580 (match_operand:MVE_3 2 "s_register_operand" "w")
4581 (match_operand:HI 3 "vpr_register_operand" "Up")]
4585 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
4586 [(set_attr "type" "mve_move")
4587 (set_attr "length""8")])
4592 (define_insn "mve_vrev64q_m_f<mode>"
4594 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4595 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4596 (match_operand:MVE_0 2 "s_register_operand" "w")
4597 (match_operand:HI 3 "vpr_register_operand" "Up")]
4600 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4601 "vpst\;vrev64t.%#<V_sz_elem> %q0, %q2"
4602 [(set_attr "type" "mve_move")
4603 (set_attr "length""8")])
4606 ;; [vrmlaldavhaxq_s])
4608 (define_insn "mve_vrmlaldavhaxq_sv4si"
4610 (set (match_operand:DI 0 "s_register_operand" "=r")
4611 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4612 (match_operand:V4SI 2 "s_register_operand" "w")
4613 (match_operand:V4SI 3 "s_register_operand" "w")]
4617 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
4618 [(set_attr "type" "mve_move")
4622 ;; [vrmlaldavhxq_p_s])
4624 (define_insn "mve_vrmlaldavhxq_p_sv4si"
4626 (set (match_operand:DI 0 "s_register_operand" "=r")
4627 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4628 (match_operand:V4SI 2 "s_register_operand" "w")
4629 (match_operand:HI 3 "vpr_register_operand" "Up")]
4633 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
4634 [(set_attr "type" "mve_move")
4635 (set_attr "length""8")])
4638 ;; [vrmlsldavhaxq_s])
4640 (define_insn "mve_vrmlsldavhaxq_sv4si"
4642 (set (match_operand:DI 0 "s_register_operand" "=r")
4643 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4644 (match_operand:V4SI 2 "s_register_operand" "w")
4645 (match_operand:V4SI 3 "s_register_operand" "w")]
4649 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
4650 [(set_attr "type" "mve_move")
4654 ;; [vrmlsldavhq_p_s])
4656 (define_insn "mve_vrmlsldavhq_p_sv4si"
4658 (set (match_operand:DI 0 "s_register_operand" "=r")
4659 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4660 (match_operand:V4SI 2 "s_register_operand" "w")
4661 (match_operand:HI 3 "vpr_register_operand" "Up")]
4665 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
4666 [(set_attr "type" "mve_move")
4667 (set_attr "length""8")])
4670 ;; [vrmlsldavhxq_p_s])
4672 (define_insn "mve_vrmlsldavhxq_p_sv4si"
4674 (set (match_operand:DI 0 "s_register_operand" "=r")
4675 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4676 (match_operand:V4SI 2 "s_register_operand" "w")
4677 (match_operand:HI 3 "vpr_register_operand" "Up")]
4681 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
4682 [(set_attr "type" "mve_move")
4683 (set_attr "length""8")])
4688 (define_insn "mve_vrndaq_m_f<mode>"
4690 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4691 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4692 (match_operand:MVE_0 2 "s_register_operand" "w")
4693 (match_operand:HI 3 "vpr_register_operand" "Up")]
4696 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4697 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
4698 [(set_attr "type" "mve_move")
4699 (set_attr "length""8")])
4704 (define_insn "mve_vrndmq_m_f<mode>"
4706 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4707 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4708 (match_operand:MVE_0 2 "s_register_operand" "w")
4709 (match_operand:HI 3 "vpr_register_operand" "Up")]
4712 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4713 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
4714 [(set_attr "type" "mve_move")
4715 (set_attr "length""8")])
4720 (define_insn "mve_vrndnq_m_f<mode>"
4722 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4723 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4724 (match_operand:MVE_0 2 "s_register_operand" "w")
4725 (match_operand:HI 3 "vpr_register_operand" "Up")]
4728 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4729 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
4730 [(set_attr "type" "mve_move")
4731 (set_attr "length""8")])
4736 (define_insn "mve_vrndpq_m_f<mode>"
4738 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4739 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4740 (match_operand:MVE_0 2 "s_register_operand" "w")
4741 (match_operand:HI 3 "vpr_register_operand" "Up")]
4744 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4745 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
4746 [(set_attr "type" "mve_move")
4747 (set_attr "length""8")])
4752 (define_insn "mve_vrndxq_m_f<mode>"
4754 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4755 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4756 (match_operand:MVE_0 2 "s_register_operand" "w")
4757 (match_operand:HI 3 "vpr_register_operand" "Up")]
4760 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4761 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
4762 [(set_attr "type" "mve_move")
4763 (set_attr "length""8")])
4766 ;; [vrshrnbq_n_s, vrshrnbq_n_u])
4768 (define_insn "mve_vrshrnbq_n_<supf><mode>"
4770 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4771 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4772 (match_operand:MVE_5 2 "s_register_operand" "w")
4773 (match_operand:SI 3 "mve_imm_8" "Rb")]
4777 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
4778 [(set_attr "type" "mve_move")
4782 ;; [vrshrntq_n_u, vrshrntq_n_s])
4784 (define_insn "mve_vrshrntq_n_<supf><mode>"
4786 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4787 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4788 (match_operand:MVE_5 2 "s_register_operand" "w")
4789 (match_operand:SI 3 "mve_imm_8" "Rb")]
4793 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
4794 [(set_attr "type" "mve_move")
4798 ;; [vshrnbq_n_u, vshrnbq_n_s])
4800 (define_insn "mve_vshrnbq_n_<supf><mode>"
4802 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4803 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4804 (match_operand:MVE_5 2 "s_register_operand" "w")
4805 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4809 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
4810 [(set_attr "type" "mve_move")
4814 ;; [vshrntq_n_s, vshrntq_n_u])
4816 (define_insn "mve_vshrntq_n_<supf><mode>"
4818 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4819 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4820 (match_operand:MVE_5 2 "s_register_operand" "w")
4821 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4825 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
4826 [(set_attr "type" "mve_move")
4830 ;; [vcvtmq_m_s, vcvtmq_m_u])
4832 (define_insn "mve_vcvtmq_m_<supf><mode>"
4834 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4835 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4836 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4837 (match_operand:HI 3 "vpr_register_operand" "Up")]
4840 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4841 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4842 [(set_attr "type" "mve_move")
4843 (set_attr "length""8")])
4846 ;; [vcvtpq_m_u, vcvtpq_m_s])
4848 (define_insn "mve_vcvtpq_m_<supf><mode>"
4850 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4851 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4852 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4853 (match_operand:HI 3 "vpr_register_operand" "Up")]
4856 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4857 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4858 [(set_attr "type" "mve_move")
4859 (set_attr "length""8")])
4862 ;; [vcvtnq_m_s, vcvtnq_m_u])
4864 (define_insn "mve_vcvtnq_m_<supf><mode>"
4866 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4867 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4868 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4869 (match_operand:HI 3 "vpr_register_operand" "Up")]
4872 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4873 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4874 [(set_attr "type" "mve_move")
4875 (set_attr "length""8")])
4878 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
4880 (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
4882 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4883 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4884 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4885 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
4886 (match_operand:HI 4 "vpr_register_operand" "Up")]
4889 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4890 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
4891 [(set_attr "type" "mve_move")
4892 (set_attr "length""8")])
4895 ;; [vrev16q_m_u, vrev16q_m_s])
4897 (define_insn "mve_vrev16q_m_<supf>v16qi"
4899 (set (match_operand:V16QI 0 "s_register_operand" "=w")
4900 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
4901 (match_operand:V16QI 2 "s_register_operand" "w")
4902 (match_operand:HI 3 "vpr_register_operand" "Up")]
4906 "vpst\;vrev16t.8 %q0, %q2"
4907 [(set_attr "type" "mve_move")
4908 (set_attr "length""8")])
4911 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
4913 (define_insn "mve_vcvtq_m_from_f_<supf><mode>"
4915 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4916 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4917 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4918 (match_operand:HI 3 "vpr_register_operand" "Up")]
4921 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4922 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4923 [(set_attr "type" "mve_move")
4924 (set_attr "length""8")])
4927 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
4929 (define_insn "mve_vrmlaldavhq_p_<supf>v4si"
4931 (set (match_operand:DI 0 "s_register_operand" "=r")
4932 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4933 (match_operand:V4SI 2 "s_register_operand" "w")
4934 (match_operand:HI 3 "vpr_register_operand" "Up")]
4938 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
4939 [(set_attr "type" "mve_move")
4940 (set_attr "length""8")])
4943 ;; [vrmlsldavhaq_s])
4945 (define_insn "mve_vrmlsldavhaq_sv4si"
4947 (set (match_operand:DI 0 "s_register_operand" "=r")
4948 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4949 (match_operand:V4SI 2 "s_register_operand" "w")
4950 (match_operand:V4SI 3 "s_register_operand" "w")]
4954 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
4955 [(set_attr "type" "mve_move")
4959 ;; [vabavq_p_s, vabavq_p_u])
4961 (define_insn "mve_vabavq_p_<supf><mode>"
4963 (set (match_operand:SI 0 "s_register_operand" "=r")
4964 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4965 (match_operand:MVE_2 2 "s_register_operand" "w")
4966 (match_operand:MVE_2 3 "s_register_operand" "w")
4967 (match_operand:HI 4 "vpr_register_operand" "Up")]
4971 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
4972 [(set_attr "type" "mve_move")
4978 (define_insn "mve_vqshluq_m_n_s<mode>"
4980 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4981 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4982 (match_operand:MVE_2 2 "s_register_operand" "w")
4983 (match_operand:SI 3 "mve_imm_7" "Ra")
4984 (match_operand:HI 4 "vpr_register_operand" "Up")]
4988 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
4989 [(set_attr "type" "mve_move")])
4992 ;; [vshlq_m_s, vshlq_m_u])
4994 (define_insn "mve_vshlq_m_<supf><mode>"
4996 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4997 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4998 (match_operand:MVE_2 2 "s_register_operand" "w")
4999 (match_operand:MVE_2 3 "s_register_operand" "w")
5000 (match_operand:HI 4 "vpr_register_operand" "Up")]
5004 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5005 [(set_attr "type" "mve_move")])
5008 ;; [vsriq_m_n_s, vsriq_m_n_u])
5010 (define_insn "mve_vsriq_m_n_<supf><mode>"
5012 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5013 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5014 (match_operand:MVE_2 2 "s_register_operand" "w")
5015 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
5016 (match_operand:HI 4 "vpr_register_operand" "Up")]
5020 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
5021 [(set_attr "type" "mve_move")])
5024 ;; [vsubq_m_u, vsubq_m_s])
5026 (define_insn "mve_vsubq_m_<supf><mode>"
5028 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5029 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5030 (match_operand:MVE_2 2 "s_register_operand" "w")
5031 (match_operand:MVE_2 3 "s_register_operand" "w")
5032 (match_operand:HI 4 "vpr_register_operand" "Up")]
5036 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
5037 [(set_attr "type" "mve_move")])
5040 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
5042 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
5044 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5045 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5046 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5047 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5048 (match_operand:HI 4 "vpr_register_operand" "Up")]
5051 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5052 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5053 [(set_attr "type" "mve_move")
5054 (set_attr "length""8")])
5056 ;; [vabdq_m_s, vabdq_m_u])
5058 (define_insn "mve_vabdq_m_<supf><mode>"
5060 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5061 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5062 (match_operand:MVE_2 2 "s_register_operand" "w")
5063 (match_operand:MVE_2 3 "s_register_operand" "w")
5064 (match_operand:HI 4 "vpr_register_operand" "Up")]
5068 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5069 [(set_attr "type" "mve_move")
5070 (set_attr "length""8")])
5073 ;; [vaddq_m_n_s, vaddq_m_n_u])
5075 (define_insn "mve_vaddq_m_n_<supf><mode>"
5077 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5078 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5079 (match_operand:MVE_2 2 "s_register_operand" "w")
5080 (match_operand:<V_elem> 3 "s_register_operand" "r")
5081 (match_operand:HI 4 "vpr_register_operand" "Up")]
5085 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3"
5086 [(set_attr "type" "mve_move")
5087 (set_attr "length""8")])
5090 ;; [vaddq_m_u, vaddq_m_s])
5092 (define_insn "mve_vaddq_m_<supf><mode>"
5094 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5095 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5096 (match_operand:MVE_2 2 "s_register_operand" "w")
5097 (match_operand:MVE_2 3 "s_register_operand" "w")
5098 (match_operand:HI 4 "vpr_register_operand" "Up")]
5102 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3"
5103 [(set_attr "type" "mve_move")
5104 (set_attr "length""8")])
5107 ;; [vandq_m_u, vandq_m_s])
5109 (define_insn "mve_vandq_m_<supf><mode>"
5111 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5112 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5113 (match_operand:MVE_2 2 "s_register_operand" "w")
5114 (match_operand:MVE_2 3 "s_register_operand" "w")
5115 (match_operand:HI 4 "vpr_register_operand" "Up")]
5119 "vpst\;vandt %q0, %q2, %q3"
5120 [(set_attr "type" "mve_move")
5121 (set_attr "length""8")])
5124 ;; [vbicq_m_u, vbicq_m_s])
5126 (define_insn "mve_vbicq_m_<supf><mode>"
5128 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5129 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5130 (match_operand:MVE_2 2 "s_register_operand" "w")
5131 (match_operand:MVE_2 3 "s_register_operand" "w")
5132 (match_operand:HI 4 "vpr_register_operand" "Up")]
5136 "vpst\;vbict %q0, %q2, %q3"
5137 [(set_attr "type" "mve_move")
5138 (set_attr "length""8")])
5141 ;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
5143 (define_insn "mve_vbrsrq_m_n_<supf><mode>"
5145 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5146 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5147 (match_operand:MVE_2 2 "s_register_operand" "w")
5148 (match_operand:SI 3 "s_register_operand" "r")
5149 (match_operand:HI 4 "vpr_register_operand" "Up")]
5153 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
5154 [(set_attr "type" "mve_move")
5155 (set_attr "length""8")])
5158 ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
5160 (define_insn "mve_vcaddq_rot270_m_<supf><mode>"
5162 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5163 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5164 (match_operand:MVE_2 2 "s_register_operand" "w")
5165 (match_operand:MVE_2 3 "s_register_operand" "w")
5166 (match_operand:HI 4 "vpr_register_operand" "Up")]
5170 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270"
5171 [(set_attr "type" "mve_move")
5172 (set_attr "length""8")])
5175 ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
5177 (define_insn "mve_vcaddq_rot90_m_<supf><mode>"
5179 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5180 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5181 (match_operand:MVE_2 2 "s_register_operand" "w")
5182 (match_operand:MVE_2 3 "s_register_operand" "w")
5183 (match_operand:HI 4 "vpr_register_operand" "Up")]
5187 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90"
5188 [(set_attr "type" "mve_move")
5189 (set_attr "length""8")])
5192 ;; [veorq_m_s, veorq_m_u])
5194 (define_insn "mve_veorq_m_<supf><mode>"
5196 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5197 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5198 (match_operand:MVE_2 2 "s_register_operand" "w")
5199 (match_operand:MVE_2 3 "s_register_operand" "w")
5200 (match_operand:HI 4 "vpr_register_operand" "Up")]
5204 "vpst\;veort %q0, %q2, %q3"
5205 [(set_attr "type" "mve_move")
5206 (set_attr "length""8")])
5209 ;; [vhaddq_m_n_s, vhaddq_m_n_u])
5211 (define_insn "mve_vhaddq_m_n_<supf><mode>"
5213 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5214 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5215 (match_operand:MVE_2 2 "s_register_operand" "w")
5216 (match_operand:<V_elem> 3 "s_register_operand" "r")
5217 (match_operand:HI 4 "vpr_register_operand" "Up")]
5221 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5222 [(set_attr "type" "mve_move")
5223 (set_attr "length""8")])
5226 ;; [vhaddq_m_s, vhaddq_m_u])
5228 (define_insn "mve_vhaddq_m_<supf><mode>"
5230 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5231 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5232 (match_operand:MVE_2 2 "s_register_operand" "w")
5233 (match_operand:MVE_2 3 "s_register_operand" "w")
5234 (match_operand:HI 4 "vpr_register_operand" "Up")]
5238 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5239 [(set_attr "type" "mve_move")
5240 (set_attr "length""8")])
5243 ;; [vhsubq_m_n_s, vhsubq_m_n_u])
5245 (define_insn "mve_vhsubq_m_n_<supf><mode>"
5247 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5248 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5249 (match_operand:MVE_2 2 "s_register_operand" "w")
5250 (match_operand:<V_elem> 3 "s_register_operand" "r")
5251 (match_operand:HI 4 "vpr_register_operand" "Up")]
5255 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5256 [(set_attr "type" "mve_move")
5257 (set_attr "length""8")])
5260 ;; [vhsubq_m_s, vhsubq_m_u])
5262 (define_insn "mve_vhsubq_m_<supf><mode>"
5264 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5265 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5266 (match_operand:MVE_2 2 "s_register_operand" "w")
5267 (match_operand:MVE_2 3 "s_register_operand" "w")
5268 (match_operand:HI 4 "vpr_register_operand" "Up")]
5272 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5273 [(set_attr "type" "mve_move")
5274 (set_attr "length""8")])
5277 ;; [vmaxq_m_s, vmaxq_m_u])
5279 (define_insn "mve_vmaxq_m_<supf><mode>"
5281 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5282 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5283 (match_operand:MVE_2 2 "s_register_operand" "w")
5284 (match_operand:MVE_2 3 "s_register_operand" "w")
5285 (match_operand:HI 4 "vpr_register_operand" "Up")]
5289 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5290 [(set_attr "type" "mve_move")
5291 (set_attr "length""8")])
5294 ;; [vminq_m_s, vminq_m_u])
5296 (define_insn "mve_vminq_m_<supf><mode>"
5298 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5299 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5300 (match_operand:MVE_2 2 "s_register_operand" "w")
5301 (match_operand:MVE_2 3 "s_register_operand" "w")
5302 (match_operand:HI 4 "vpr_register_operand" "Up")]
5306 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5307 [(set_attr "type" "mve_move")
5308 (set_attr "length""8")])
5311 ;; [vmladavaq_p_u, vmladavaq_p_s])
5313 (define_insn "mve_vmladavaq_p_<supf><mode>"
5315 (set (match_operand:SI 0 "s_register_operand" "=Te")
5316 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5317 (match_operand:MVE_2 2 "s_register_operand" "w")
5318 (match_operand:MVE_2 3 "s_register_operand" "w")
5319 (match_operand:HI 4 "vpr_register_operand" "Up")]
5323 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3"
5324 [(set_attr "type" "mve_move")
5325 (set_attr "length""8")])
5328 ;; [vmlaq_m_n_s, vmlaq_m_n_u])
5330 (define_insn "mve_vmlaq_m_n_<supf><mode>"
5332 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5333 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5334 (match_operand:MVE_2 2 "s_register_operand" "w")
5335 (match_operand:<V_elem> 3 "s_register_operand" "r")
5336 (match_operand:HI 4 "vpr_register_operand" "Up")]
5340 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3"
5341 [(set_attr "type" "mve_move")
5342 (set_attr "length""8")])
5345 ;; [vmlasq_m_n_u, vmlasq_m_n_s])
5347 (define_insn "mve_vmlasq_m_n_<supf><mode>"
5349 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5350 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5351 (match_operand:MVE_2 2 "s_register_operand" "w")
5352 (match_operand:<V_elem> 3 "s_register_operand" "r")
5353 (match_operand:HI 4 "vpr_register_operand" "Up")]
5357 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3"
5358 [(set_attr "type" "mve_move")
5359 (set_attr "length""8")])
5362 ;; [vmulhq_m_s, vmulhq_m_u])
5364 (define_insn "mve_vmulhq_m_<supf><mode>"
5366 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5367 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5368 (match_operand:MVE_2 2 "s_register_operand" "w")
5369 (match_operand:MVE_2 3 "s_register_operand" "w")
5370 (match_operand:HI 4 "vpr_register_operand" "Up")]
5374 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5375 [(set_attr "type" "mve_move")
5376 (set_attr "length""8")])
5379 ;; [vmullbq_int_m_u, vmullbq_int_m_s])
5381 (define_insn "mve_vmullbq_int_m_<supf><mode>"
5383 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5384 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5385 (match_operand:MVE_2 2 "s_register_operand" "w")
5386 (match_operand:MVE_2 3 "s_register_operand" "w")
5387 (match_operand:HI 4 "vpr_register_operand" "Up")]
5391 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5392 [(set_attr "type" "mve_move")
5393 (set_attr "length""8")])
5396 ;; [vmulltq_int_m_s, vmulltq_int_m_u])
5398 (define_insn "mve_vmulltq_int_m_<supf><mode>"
5400 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5401 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5402 (match_operand:MVE_2 2 "s_register_operand" "w")
5403 (match_operand:MVE_2 3 "s_register_operand" "w")
5404 (match_operand:HI 4 "vpr_register_operand" "Up")]
5408 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5409 [(set_attr "type" "mve_move")
5410 (set_attr "length""8")])
5413 ;; [vmulq_m_n_u, vmulq_m_n_s])
5415 (define_insn "mve_vmulq_m_n_<supf><mode>"
5417 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5418 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5419 (match_operand:MVE_2 2 "s_register_operand" "w")
5420 (match_operand:<V_elem> 3 "s_register_operand" "r")
5421 (match_operand:HI 4 "vpr_register_operand" "Up")]
5425 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3"
5426 [(set_attr "type" "mve_move")
5427 (set_attr "length""8")])
5430 ;; [vmulq_m_s, vmulq_m_u])
5432 (define_insn "mve_vmulq_m_<supf><mode>"
5434 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5435 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5436 (match_operand:MVE_2 2 "s_register_operand" "w")
5437 (match_operand:MVE_2 3 "s_register_operand" "w")
5438 (match_operand:HI 4 "vpr_register_operand" "Up")]
5442 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3"
5443 [(set_attr "type" "mve_move")
5444 (set_attr "length""8")])
5447 ;; [vornq_m_u, vornq_m_s])
5449 (define_insn "mve_vornq_m_<supf><mode>"
5451 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5452 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5453 (match_operand:MVE_2 2 "s_register_operand" "w")
5454 (match_operand:MVE_2 3 "s_register_operand" "w")
5455 (match_operand:HI 4 "vpr_register_operand" "Up")]
5459 "vpst\;vornt %q0, %q2, %q3"
5460 [(set_attr "type" "mve_move")
5461 (set_attr "length""8")])
5464 ;; [vorrq_m_s, vorrq_m_u])
5466 (define_insn "mve_vorrq_m_<supf><mode>"
5468 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5469 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5470 (match_operand:MVE_2 2 "s_register_operand" "w")
5471 (match_operand:MVE_2 3 "s_register_operand" "w")
5472 (match_operand:HI 4 "vpr_register_operand" "Up")]
5476 "vpst\;vorrt %q0, %q2, %q3"
5477 [(set_attr "type" "mve_move")
5478 (set_attr "length""8")])
5481 ;; [vqaddq_m_n_u, vqaddq_m_n_s])
5483 (define_insn "mve_vqaddq_m_n_<supf><mode>"
5485 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5486 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5487 (match_operand:MVE_2 2 "s_register_operand" "w")
5488 (match_operand:<V_elem> 3 "s_register_operand" "r")
5489 (match_operand:HI 4 "vpr_register_operand" "Up")]
5493 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5494 [(set_attr "type" "mve_move")
5495 (set_attr "length""8")])
5498 ;; [vqaddq_m_u, vqaddq_m_s])
5500 (define_insn "mve_vqaddq_m_<supf><mode>"
5502 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5503 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5504 (match_operand:MVE_2 2 "s_register_operand" "w")
5505 (match_operand:MVE_2 3 "s_register_operand" "w")
5506 (match_operand:HI 4 "vpr_register_operand" "Up")]
5510 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5511 [(set_attr "type" "mve_move")
5512 (set_attr "length""8")])
5515 ;; [vqdmlahq_m_n_s])
5517 (define_insn "mve_vqdmlahq_m_n_s<mode>"
5519 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5520 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5521 (match_operand:MVE_2 2 "s_register_operand" "w")
5522 (match_operand:<V_elem> 3 "s_register_operand" "r")
5523 (match_operand:HI 4 "vpr_register_operand" "Up")]
5527 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5528 [(set_attr "type" "mve_move")
5529 (set_attr "length""8")])
5532 ;; [vqdmlashq_m_n_s])
5534 (define_insn "mve_vqdmlashq_m_n_s<mode>"
5536 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5537 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5538 (match_operand:MVE_2 2 "s_register_operand" "w")
5539 (match_operand:<V_elem> 3 "s_register_operand" "r")
5540 (match_operand:HI 4 "vpr_register_operand" "Up")]
5544 "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5545 [(set_attr "type" "mve_move")
5546 (set_attr "length""8")])
5549 ;; [vqrdmlahq_m_n_s])
5551 (define_insn "mve_vqrdmlahq_m_n_s<mode>"
5553 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5554 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5555 (match_operand:MVE_2 2 "s_register_operand" "w")
5556 (match_operand:<V_elem> 3 "s_register_operand" "r")
5557 (match_operand:HI 4 "vpr_register_operand" "Up")]
5561 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5562 [(set_attr "type" "mve_move")
5563 (set_attr "length""8")])
5566 ;; [vqrdmlashq_m_n_s])
5568 (define_insn "mve_vqrdmlashq_m_n_s<mode>"
5570 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5571 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5572 (match_operand:MVE_2 2 "s_register_operand" "w")
5573 (match_operand:<V_elem> 3 "s_register_operand" "r")
5574 (match_operand:HI 4 "vpr_register_operand" "Up")]
5578 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5579 [(set_attr "type" "mve_move")
5580 (set_attr "length""8")])
5583 ;; [vqrshlq_m_u, vqrshlq_m_s])
5585 (define_insn "mve_vqrshlq_m_<supf><mode>"
5587 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5588 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5589 (match_operand:MVE_2 2 "s_register_operand" "w")
5590 (match_operand:MVE_2 3 "s_register_operand" "w")
5591 (match_operand:HI 4 "vpr_register_operand" "Up")]
5595 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5596 [(set_attr "type" "mve_move")
5597 (set_attr "length""8")])
5600 ;; [vqshlq_m_n_s, vqshlq_m_n_u])
5602 (define_insn "mve_vqshlq_m_n_<supf><mode>"
5604 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5605 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5606 (match_operand:MVE_2 2 "s_register_operand" "w")
5607 (match_operand:SI 3 "immediate_operand" "i")
5608 (match_operand:HI 4 "vpr_register_operand" "Up")]
5612 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5613 [(set_attr "type" "mve_move")
5614 (set_attr "length""8")])
5617 ;; [vqshlq_m_u, vqshlq_m_s])
5619 (define_insn "mve_vqshlq_m_<supf><mode>"
5621 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5622 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5623 (match_operand:MVE_2 2 "s_register_operand" "w")
5624 (match_operand:MVE_2 3 "s_register_operand" "w")
5625 (match_operand:HI 4 "vpr_register_operand" "Up")]
5629 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5630 [(set_attr "type" "mve_move")
5631 (set_attr "length""8")])
5634 ;; [vqsubq_m_n_u, vqsubq_m_n_s])
5636 (define_insn "mve_vqsubq_m_n_<supf><mode>"
5638 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5639 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5640 (match_operand:MVE_2 2 "s_register_operand" "w")
5641 (match_operand:<V_elem> 3 "s_register_operand" "r")
5642 (match_operand:HI 4 "vpr_register_operand" "Up")]
5646 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5647 [(set_attr "type" "mve_move")
5648 (set_attr "length""8")])
5651 ;; [vqsubq_m_u, vqsubq_m_s])
5653 (define_insn "mve_vqsubq_m_<supf><mode>"
5655 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5656 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5657 (match_operand:MVE_2 2 "s_register_operand" "w")
5658 (match_operand:MVE_2 3 "s_register_operand" "w")
5659 (match_operand:HI 4 "vpr_register_operand" "Up")]
5663 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5664 [(set_attr "type" "mve_move")
5665 (set_attr "length""8")])
5668 ;; [vrhaddq_m_u, vrhaddq_m_s])
5670 (define_insn "mve_vrhaddq_m_<supf><mode>"
5672 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5673 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5674 (match_operand:MVE_2 2 "s_register_operand" "w")
5675 (match_operand:MVE_2 3 "s_register_operand" "w")
5676 (match_operand:HI 4 "vpr_register_operand" "Up")]
5680 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5681 [(set_attr "type" "mve_move")
5682 (set_attr "length""8")])
5685 ;; [vrmulhq_m_u, vrmulhq_m_s])
5687 (define_insn "mve_vrmulhq_m_<supf><mode>"
5689 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5690 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5691 (match_operand:MVE_2 2 "s_register_operand" "w")
5692 (match_operand:MVE_2 3 "s_register_operand" "w")
5693 (match_operand:HI 4 "vpr_register_operand" "Up")]
5697 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5698 [(set_attr "type" "mve_move")
5699 (set_attr "length""8")])
5702 ;; [vrshlq_m_s, vrshlq_m_u])
5704 (define_insn "mve_vrshlq_m_<supf><mode>"
5706 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5707 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5708 (match_operand:MVE_2 2 "s_register_operand" "w")
5709 (match_operand:MVE_2 3 "s_register_operand" "w")
5710 (match_operand:HI 4 "vpr_register_operand" "Up")]
5714 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5715 [(set_attr "type" "mve_move")
5716 (set_attr "length""8")])
5719 ;; [vrshrq_m_n_s, vrshrq_m_n_u])
5721 (define_insn "mve_vrshrq_m_n_<supf><mode>"
5723 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5724 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5725 (match_operand:MVE_2 2 "s_register_operand" "w")
5726 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5727 (match_operand:HI 4 "vpr_register_operand" "Up")]
5731 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5732 [(set_attr "type" "mve_move")
5733 (set_attr "length""8")])
5736 ;; [vshlq_m_n_s, vshlq_m_n_u])
5738 (define_insn "mve_vshlq_m_n_<supf><mode>"
5740 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5741 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5742 (match_operand:MVE_2 2 "s_register_operand" "w")
5743 (match_operand:SI 3 "immediate_operand" "i")
5744 (match_operand:HI 4 "vpr_register_operand" "Up")]
5748 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5749 [(set_attr "type" "mve_move")
5750 (set_attr "length""8")])
5753 ;; [vshrq_m_n_s, vshrq_m_n_u])
5755 (define_insn "mve_vshrq_m_n_<supf><mode>"
5757 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5758 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5759 (match_operand:MVE_2 2 "s_register_operand" "w")
5760 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5761 (match_operand:HI 4 "vpr_register_operand" "Up")]
5765 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5766 [(set_attr "type" "mve_move")
5767 (set_attr "length""8")])
5770 ;; [vsliq_m_n_u, vsliq_m_n_s])
5772 (define_insn "mve_vsliq_m_n_<supf><mode>"
5774 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5775 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5776 (match_operand:MVE_2 2 "s_register_operand" "w")
5777 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
5778 (match_operand:HI 4 "vpr_register_operand" "Up")]
5782 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
5783 [(set_attr "type" "mve_move")
5784 (set_attr "length""8")])
5787 ;; [vsubq_m_n_s, vsubq_m_n_u])
5789 (define_insn "mve_vsubq_m_n_<supf><mode>"
5791 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5792 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5793 (match_operand:MVE_2 2 "s_register_operand" "w")
5794 (match_operand:<V_elem> 3 "s_register_operand" "r")
5795 (match_operand:HI 4 "vpr_register_operand" "Up")]
5799 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
5800 [(set_attr "type" "mve_move")
5801 (set_attr "length""8")])
5804 ;; [vhcaddq_rot270_m_s])
5806 (define_insn "mve_vhcaddq_rot270_m_s<mode>"
5808 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5809 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5810 (match_operand:MVE_2 2 "s_register_operand" "w")
5811 (match_operand:MVE_2 3 "s_register_operand" "w")
5812 (match_operand:HI 4 "vpr_register_operand" "Up")]
5813 VHCADDQ_ROT270_M_S))
5816 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
5817 [(set_attr "type" "mve_move")
5818 (set_attr "length""8")])
5821 ;; [vhcaddq_rot90_m_s])
5823 (define_insn "mve_vhcaddq_rot90_m_s<mode>"
5825 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5826 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5827 (match_operand:MVE_2 2 "s_register_operand" "w")
5828 (match_operand:MVE_2 3 "s_register_operand" "w")
5829 (match_operand:HI 4 "vpr_register_operand" "Up")]
5833 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
5834 [(set_attr "type" "mve_move")
5835 (set_attr "length""8")])
5838 ;; [vmladavaxq_p_s])
5840 (define_insn "mve_vmladavaxq_p_s<mode>"
5842 (set (match_operand:SI 0 "s_register_operand" "=Te")
5843 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5844 (match_operand:MVE_2 2 "s_register_operand" "w")
5845 (match_operand:MVE_2 3 "s_register_operand" "w")
5846 (match_operand:HI 4 "vpr_register_operand" "Up")]
5850 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
5851 [(set_attr "type" "mve_move")
5852 (set_attr "length""8")])
5857 (define_insn "mve_vmlsdavaq_p_s<mode>"
5859 (set (match_operand:SI 0 "s_register_operand" "=Te")
5860 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5861 (match_operand:MVE_2 2 "s_register_operand" "w")
5862 (match_operand:MVE_2 3 "s_register_operand" "w")
5863 (match_operand:HI 4 "vpr_register_operand" "Up")]
5867 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
5868 [(set_attr "type" "mve_move")
5869 (set_attr "length""8")])
5872 ;; [vmlsdavaxq_p_s])
5874 (define_insn "mve_vmlsdavaxq_p_s<mode>"
5876 (set (match_operand:SI 0 "s_register_operand" "=Te")
5877 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5878 (match_operand:MVE_2 2 "s_register_operand" "w")
5879 (match_operand:MVE_2 3 "s_register_operand" "w")
5880 (match_operand:HI 4 "vpr_register_operand" "Up")]
5884 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
5885 [(set_attr "type" "mve_move")
5886 (set_attr "length""8")])
5891 (define_insn "mve_vqdmladhq_m_s<mode>"
5893 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5894 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5895 (match_operand:MVE_2 2 "s_register_operand" "w")
5896 (match_operand:MVE_2 3 "s_register_operand" "w")
5897 (match_operand:HI 4 "vpr_register_operand" "Up")]
5901 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
5902 [(set_attr "type" "mve_move")
5903 (set_attr "length""8")])
5906 ;; [vqdmladhxq_m_s])
5908 (define_insn "mve_vqdmladhxq_m_s<mode>"
5910 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5911 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5912 (match_operand:MVE_2 2 "s_register_operand" "w")
5913 (match_operand:MVE_2 3 "s_register_operand" "w")
5914 (match_operand:HI 4 "vpr_register_operand" "Up")]
5918 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
5919 [(set_attr "type" "mve_move")
5920 (set_attr "length""8")])
5925 (define_insn "mve_vqdmlsdhq_m_s<mode>"
5927 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5928 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5929 (match_operand:MVE_2 2 "s_register_operand" "w")
5930 (match_operand:MVE_2 3 "s_register_operand" "w")
5931 (match_operand:HI 4 "vpr_register_operand" "Up")]
5935 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
5936 [(set_attr "type" "mve_move")
5937 (set_attr "length""8")])
5940 ;; [vqdmlsdhxq_m_s])
5942 (define_insn "mve_vqdmlsdhxq_m_s<mode>"
5944 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5945 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5946 (match_operand:MVE_2 2 "s_register_operand" "w")
5947 (match_operand:MVE_2 3 "s_register_operand" "w")
5948 (match_operand:HI 4 "vpr_register_operand" "Up")]
5952 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
5953 [(set_attr "type" "mve_move")
5954 (set_attr "length""8")])
5957 ;; [vqdmulhq_m_n_s])
5959 (define_insn "mve_vqdmulhq_m_n_s<mode>"
5961 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5962 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5963 (match_operand:MVE_2 2 "s_register_operand" "w")
5964 (match_operand:<V_elem> 3 "s_register_operand" "r")
5965 (match_operand:HI 4 "vpr_register_operand" "Up")]
5969 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
5970 [(set_attr "type" "mve_move")
5971 (set_attr "length""8")])
5976 (define_insn "mve_vqdmulhq_m_s<mode>"
5978 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5979 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5980 (match_operand:MVE_2 2 "s_register_operand" "w")
5981 (match_operand:MVE_2 3 "s_register_operand" "w")
5982 (match_operand:HI 4 "vpr_register_operand" "Up")]
5986 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
5987 [(set_attr "type" "mve_move")
5988 (set_attr "length""8")])
5991 ;; [vqrdmladhq_m_s])
5993 (define_insn "mve_vqrdmladhq_m_s<mode>"
5995 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5996 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5997 (match_operand:MVE_2 2 "s_register_operand" "w")
5998 (match_operand:MVE_2 3 "s_register_operand" "w")
5999 (match_operand:HI 4 "vpr_register_operand" "Up")]
6003 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6004 [(set_attr "type" "mve_move")
6005 (set_attr "length""8")])
6008 ;; [vqrdmladhxq_m_s])
6010 (define_insn "mve_vqrdmladhxq_m_s<mode>"
6012 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6013 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6014 (match_operand:MVE_2 2 "s_register_operand" "w")
6015 (match_operand:MVE_2 3 "s_register_operand" "w")
6016 (match_operand:HI 4 "vpr_register_operand" "Up")]
6020 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6021 [(set_attr "type" "mve_move")
6022 (set_attr "length""8")])
6025 ;; [vqrdmlsdhq_m_s])
6027 (define_insn "mve_vqrdmlsdhq_m_s<mode>"
6029 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6030 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6031 (match_operand:MVE_2 2 "s_register_operand" "w")
6032 (match_operand:MVE_2 3 "s_register_operand" "w")
6033 (match_operand:HI 4 "vpr_register_operand" "Up")]
6037 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6038 [(set_attr "type" "mve_move")
6039 (set_attr "length""8")])
6042 ;; [vqrdmlsdhxq_m_s])
6044 (define_insn "mve_vqrdmlsdhxq_m_s<mode>"
6046 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6047 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6048 (match_operand:MVE_2 2 "s_register_operand" "w")
6049 (match_operand:MVE_2 3 "s_register_operand" "w")
6050 (match_operand:HI 4 "vpr_register_operand" "Up")]
6054 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6055 [(set_attr "type" "mve_move")
6056 (set_attr "length""8")])
6059 ;; [vqrdmulhq_m_n_s])
6061 (define_insn "mve_vqrdmulhq_m_n_s<mode>"
6063 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6064 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6065 (match_operand:MVE_2 2 "s_register_operand" "w")
6066 (match_operand:<V_elem> 3 "s_register_operand" "r")
6067 (match_operand:HI 4 "vpr_register_operand" "Up")]
6071 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6072 [(set_attr "type" "mve_move")
6073 (set_attr "length""8")])
6078 (define_insn "mve_vqrdmulhq_m_s<mode>"
6080 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6081 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6082 (match_operand:MVE_2 2 "s_register_operand" "w")
6083 (match_operand:MVE_2 3 "s_register_operand" "w")
6084 (match_operand:HI 4 "vpr_register_operand" "Up")]
6088 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6089 [(set_attr "type" "mve_move")
6090 (set_attr "length""8")])
6093 ;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
6095 (define_insn "mve_vmlaldavaq_p_<supf><mode>"
6097 (set (match_operand:DI 0 "s_register_operand" "=r")
6098 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6099 (match_operand:MVE_5 2 "s_register_operand" "w")
6100 (match_operand:MVE_5 3 "s_register_operand" "w")
6101 (match_operand:HI 4 "vpr_register_operand" "Up")]
6105 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6106 [(set_attr "type" "mve_move")
6107 (set_attr "length""8")])
6110 ;; [vmlaldavaxq_p_s])
6112 (define_insn "mve_vmlaldavaxq_p_<supf><mode>"
6114 (set (match_operand:DI 0 "s_register_operand" "=r")
6115 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6116 (match_operand:MVE_5 2 "s_register_operand" "w")
6117 (match_operand:MVE_5 3 "s_register_operand" "w")
6118 (match_operand:HI 4 "vpr_register_operand" "Up")]
6122 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6123 [(set_attr "type" "mve_move")
6124 (set_attr "length""8")])
6127 ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
6129 (define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
6131 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6132 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6133 (match_operand:MVE_5 2 "s_register_operand" "w")
6134 (match_operand:SI 3 "mve_imm_8" "Rb")
6135 (match_operand:HI 4 "vpr_register_operand" "Up")]
6139 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6140 [(set_attr "type" "mve_move")
6141 (set_attr "length""8")])
6144 ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
6146 (define_insn "mve_vqrshrntq_m_n_<supf><mode>"
6148 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6149 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6150 (match_operand:MVE_5 2 "s_register_operand" "w")
6151 (match_operand:SI 3 "mve_imm_8" "Rb")
6152 (match_operand:HI 4 "vpr_register_operand" "Up")]
6156 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6157 [(set_attr "type" "mve_move")
6158 (set_attr "length""8")])
6161 ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
6163 (define_insn "mve_vqshrnbq_m_n_<supf><mode>"
6165 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6166 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6167 (match_operand:MVE_5 2 "s_register_operand" "w")
6168 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6169 (match_operand:HI 4 "vpr_register_operand" "Up")]
6173 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6174 [(set_attr "type" "mve_move")
6175 (set_attr "length""8")])
6178 ;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
6180 (define_insn "mve_vqshrntq_m_n_<supf><mode>"
6182 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6183 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6184 (match_operand:MVE_5 2 "s_register_operand" "w")
6185 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6186 (match_operand:HI 4 "vpr_register_operand" "Up")]
6190 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6191 [(set_attr "type" "mve_move")
6192 (set_attr "length""8")])
6195 ;; [vrmlaldavhaq_p_s])
6197 (define_insn "mve_vrmlaldavhaq_p_sv4si"
6199 (set (match_operand:DI 0 "s_register_operand" "=r")
6200 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6201 (match_operand:V4SI 2 "s_register_operand" "w")
6202 (match_operand:V4SI 3 "s_register_operand" "w")
6203 (match_operand:HI 4 "vpr_register_operand" "Up")]
6207 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
6208 [(set_attr "type" "mve_move")
6209 (set_attr "length""8")])
6212 ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
6214 (define_insn "mve_vrshrnbq_m_n_<supf><mode>"
6216 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6217 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6218 (match_operand:MVE_5 2 "s_register_operand" "w")
6219 (match_operand:SI 3 "mve_imm_8" "Rb")
6220 (match_operand:HI 4 "vpr_register_operand" "Up")]
6224 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6225 [(set_attr "type" "mve_move")
6226 (set_attr "length""8")])
6229 ;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
6231 (define_insn "mve_vrshrntq_m_n_<supf><mode>"
6233 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6234 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6235 (match_operand:MVE_5 2 "s_register_operand" "w")
6236 (match_operand:SI 3 "mve_imm_8" "Rb")
6237 (match_operand:HI 4 "vpr_register_operand" "Up")]
6241 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6242 [(set_attr "type" "mve_move")
6243 (set_attr "length""8")])
6246 ;; [vshllbq_m_n_u, vshllbq_m_n_s])
6248 (define_insn "mve_vshllbq_m_n_<supf><mode>"
6250 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6251 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6252 (match_operand:MVE_3 2 "s_register_operand" "w")
6253 (match_operand:SI 3 "immediate_operand" "i")
6254 (match_operand:HI 4 "vpr_register_operand" "Up")]
6258 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6259 [(set_attr "type" "mve_move")
6260 (set_attr "length""8")])
6263 ;; [vshlltq_m_n_u, vshlltq_m_n_s])
6265 (define_insn "mve_vshlltq_m_n_<supf><mode>"
6267 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6268 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6269 (match_operand:MVE_3 2 "s_register_operand" "w")
6270 (match_operand:SI 3 "immediate_operand" "i")
6271 (match_operand:HI 4 "vpr_register_operand" "Up")]
6275 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6276 [(set_attr "type" "mve_move")
6277 (set_attr "length""8")])
6280 ;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
6282 (define_insn "mve_vshrnbq_m_n_<supf><mode>"
6284 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6285 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6286 (match_operand:MVE_5 2 "s_register_operand" "w")
6287 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6288 (match_operand:HI 4 "vpr_register_operand" "Up")]
6292 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6293 [(set_attr "type" "mve_move")
6294 (set_attr "length""8")])
6297 ;; [vshrntq_m_n_s, vshrntq_m_n_u])
6299 (define_insn "mve_vshrntq_m_n_<supf><mode>"
6301 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6302 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6303 (match_operand:MVE_5 2 "s_register_operand" "w")
6304 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6305 (match_operand:HI 4 "vpr_register_operand" "Up")]
6309 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6310 [(set_attr "type" "mve_move")
6311 (set_attr "length""8")])
6314 ;; [vmlsldavaq_p_s])
6316 (define_insn "mve_vmlsldavaq_p_s<mode>"
6318 (set (match_operand:DI 0 "s_register_operand" "=r")
6319 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6320 (match_operand:MVE_5 2 "s_register_operand" "w")
6321 (match_operand:MVE_5 3 "s_register_operand" "w")
6322 (match_operand:HI 4 "vpr_register_operand" "Up")]
6326 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6327 [(set_attr "type" "mve_move")
6328 (set_attr "length""8")])
6331 ;; [vmlsldavaxq_p_s])
6333 (define_insn "mve_vmlsldavaxq_p_s<mode>"
6335 (set (match_operand:DI 0 "s_register_operand" "=r")
6336 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6337 (match_operand:MVE_5 2 "s_register_operand" "w")
6338 (match_operand:MVE_5 3 "s_register_operand" "w")
6339 (match_operand:HI 4 "vpr_register_operand" "Up")]
6343 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6344 [(set_attr "type" "mve_move")
6345 (set_attr "length""8")])
6348 ;; [vmullbq_poly_m_p])
6350 (define_insn "mve_vmullbq_poly_m_p<mode>"
6352 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6353 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6354 (match_operand:MVE_3 2 "s_register_operand" "w")
6355 (match_operand:MVE_3 3 "s_register_operand" "w")
6356 (match_operand:HI 4 "vpr_register_operand" "Up")]
6360 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6361 [(set_attr "type" "mve_move")
6362 (set_attr "length""8")])
6365 ;; [vmulltq_poly_m_p])
6367 (define_insn "mve_vmulltq_poly_m_p<mode>"
6369 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6370 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6371 (match_operand:MVE_3 2 "s_register_operand" "w")
6372 (match_operand:MVE_3 3 "s_register_operand" "w")
6373 (match_operand:HI 4 "vpr_register_operand" "Up")]
6377 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6378 [(set_attr "type" "mve_move")
6379 (set_attr "length""8")])
6382 ;; [vqdmullbq_m_n_s])
6384 (define_insn "mve_vqdmullbq_m_n_s<mode>"
6386 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6387 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6388 (match_operand:MVE_5 2 "s_register_operand" "w")
6389 (match_operand:<V_elem> 3 "s_register_operand" "r")
6390 (match_operand:HI 4 "vpr_register_operand" "Up")]
6394 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6395 [(set_attr "type" "mve_move")
6396 (set_attr "length""8")])
6401 (define_insn "mve_vqdmullbq_m_s<mode>"
6403 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6404 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6405 (match_operand:MVE_5 2 "s_register_operand" "w")
6406 (match_operand:MVE_5 3 "s_register_operand" "w")
6407 (match_operand:HI 4 "vpr_register_operand" "Up")]
6411 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6412 [(set_attr "type" "mve_move")
6413 (set_attr "length""8")])
6416 ;; [vqdmulltq_m_n_s])
6418 (define_insn "mve_vqdmulltq_m_n_s<mode>"
6420 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6421 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6422 (match_operand:MVE_5 2 "s_register_operand" "w")
6423 (match_operand:<V_elem> 3 "s_register_operand" "r")
6424 (match_operand:HI 4 "vpr_register_operand" "Up")]
6428 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
6429 [(set_attr "type" "mve_move")
6430 (set_attr "length""8")])
6435 (define_insn "mve_vqdmulltq_m_s<mode>"
6437 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6438 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6439 (match_operand:MVE_5 2 "s_register_operand" "w")
6440 (match_operand:MVE_5 3 "s_register_operand" "w")
6441 (match_operand:HI 4 "vpr_register_operand" "Up")]
6445 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6446 [(set_attr "type" "mve_move")
6447 (set_attr "length""8")])
6450 ;; [vqrshrunbq_m_n_s])
6452 (define_insn "mve_vqrshrunbq_m_n_s<mode>"
6454 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6455 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6456 (match_operand:MVE_5 2 "s_register_operand" "w")
6457 (match_operand:SI 3 "mve_imm_8" "Rb")
6458 (match_operand:HI 4 "vpr_register_operand" "Up")]
6462 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6463 [(set_attr "type" "mve_move")
6464 (set_attr "length""8")])
6467 ;; [vqrshruntq_m_n_s])
6469 (define_insn "mve_vqrshruntq_m_n_s<mode>"
6471 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6472 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6473 (match_operand:MVE_5 2 "s_register_operand" "w")
6474 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6475 (match_operand:HI 4 "vpr_register_operand" "Up")]
6479 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6480 [(set_attr "type" "mve_move")
6481 (set_attr "length""8")])
6484 ;; [vqshrunbq_m_n_s])
6486 (define_insn "mve_vqshrunbq_m_n_s<mode>"
6488 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6489 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6490 (match_operand:MVE_5 2 "s_register_operand" "w")
6491 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6492 (match_operand:HI 4 "vpr_register_operand" "Up")]
6496 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6497 [(set_attr "type" "mve_move")
6498 (set_attr "length""8")])
6501 ;; [vqshruntq_m_n_s])
6503 (define_insn "mve_vqshruntq_m_n_s<mode>"
6505 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6506 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6507 (match_operand:MVE_5 2 "s_register_operand" "w")
6508 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6509 (match_operand:HI 4 "vpr_register_operand" "Up")]
6513 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6514 [(set_attr "type" "mve_move")
6515 (set_attr "length""8")])
6518 ;; [vrmlaldavhaq_p_u])
6520 (define_insn "mve_vrmlaldavhaq_p_uv4si"
6522 (set (match_operand:DI 0 "s_register_operand" "=r")
6523 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6524 (match_operand:V4SI 2 "s_register_operand" "w")
6525 (match_operand:V4SI 3 "s_register_operand" "w")
6526 (match_operand:HI 4 "vpr_register_operand" "Up")]
6530 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
6531 [(set_attr "type" "mve_move")
6532 (set_attr "length""8")])
6535 ;; [vrmlaldavhaxq_p_s])
6537 (define_insn "mve_vrmlaldavhaxq_p_sv4si"
6539 (set (match_operand:DI 0 "s_register_operand" "=r")
6540 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6541 (match_operand:V4SI 2 "s_register_operand" "w")
6542 (match_operand:V4SI 3 "s_register_operand" "w")
6543 (match_operand:HI 4 "vpr_register_operand" "Up")]
6547 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6548 [(set_attr "type" "mve_move")
6549 (set_attr "length""8")])
6552 ;; [vrmlsldavhaq_p_s])
6554 (define_insn "mve_vrmlsldavhaq_p_sv4si"
6556 (set (match_operand:DI 0 "s_register_operand" "=r")
6557 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6558 (match_operand:V4SI 2 "s_register_operand" "w")
6559 (match_operand:V4SI 3 "s_register_operand" "w")
6560 (match_operand:HI 4 "vpr_register_operand" "Up")]
6564 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
6565 [(set_attr "type" "mve_move")
6566 (set_attr "length""8")])
6569 ;; [vrmlsldavhaxq_p_s])
6571 (define_insn "mve_vrmlsldavhaxq_p_sv4si"
6573 (set (match_operand:DI 0 "s_register_operand" "=r")
6574 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6575 (match_operand:V4SI 2 "s_register_operand" "w")
6576 (match_operand:V4SI 3 "s_register_operand" "w")
6577 (match_operand:HI 4 "vpr_register_operand" "Up")]
6581 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6582 [(set_attr "type" "mve_move")
6583 (set_attr "length""8")])
6587 (define_insn "mve_vabdq_m_f<mode>"
6589 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6590 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6591 (match_operand:MVE_0 2 "s_register_operand" "w")
6592 (match_operand:MVE_0 3 "s_register_operand" "w")
6593 (match_operand:HI 4 "vpr_register_operand" "Up")]
6596 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6597 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3"
6598 [(set_attr "type" "mve_move")
6599 (set_attr "length""8")])
6604 (define_insn "mve_vaddq_m_f<mode>"
6606 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6607 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6608 (match_operand:MVE_0 2 "s_register_operand" "w")
6609 (match_operand:MVE_0 3 "s_register_operand" "w")
6610 (match_operand:HI 4 "vpr_register_operand" "Up")]
6613 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6614 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3"
6615 [(set_attr "type" "mve_move")
6616 (set_attr "length""8")])
6621 (define_insn "mve_vaddq_m_n_f<mode>"
6623 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6624 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6625 (match_operand:MVE_0 2 "s_register_operand" "w")
6626 (match_operand:<V_elem> 3 "s_register_operand" "r")
6627 (match_operand:HI 4 "vpr_register_operand" "Up")]
6630 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6631 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3"
6632 [(set_attr "type" "mve_move")
6633 (set_attr "length""8")])
6638 (define_insn "mve_vandq_m_f<mode>"
6640 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6641 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6642 (match_operand:MVE_0 2 "s_register_operand" "w")
6643 (match_operand:MVE_0 3 "s_register_operand" "w")
6644 (match_operand:HI 4 "vpr_register_operand" "Up")]
6647 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6648 "vpst\;vandt %q0, %q2, %q3"
6649 [(set_attr "type" "mve_move")
6650 (set_attr "length""8")])
6655 (define_insn "mve_vbicq_m_f<mode>"
6657 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6658 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6659 (match_operand:MVE_0 2 "s_register_operand" "w")
6660 (match_operand:MVE_0 3 "s_register_operand" "w")
6661 (match_operand:HI 4 "vpr_register_operand" "Up")]
6664 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6665 "vpst\;vbict %q0, %q2, %q3"
6666 [(set_attr "type" "mve_move")
6667 (set_attr "length""8")])
6672 (define_insn "mve_vbrsrq_m_n_f<mode>"
6674 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6675 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6676 (match_operand:MVE_0 2 "s_register_operand" "w")
6677 (match_operand:SI 3 "s_register_operand" "r")
6678 (match_operand:HI 4 "vpr_register_operand" "Up")]
6681 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6682 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
6683 [(set_attr "type" "mve_move")
6684 (set_attr "length""8")])
6687 ;; [vcaddq_rot270_m_f])
6689 (define_insn "mve_vcaddq_rot270_m_f<mode>"
6691 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6692 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6693 (match_operand:MVE_0 2 "s_register_operand" "w")
6694 (match_operand:MVE_0 3 "s_register_operand" "w")
6695 (match_operand:HI 4 "vpr_register_operand" "Up")]
6698 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6699 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270"
6700 [(set_attr "type" "mve_move")
6701 (set_attr "length""8")])
6704 ;; [vcaddq_rot90_m_f])
6706 (define_insn "mve_vcaddq_rot90_m_f<mode>"
6708 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6709 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6710 (match_operand:MVE_0 2 "s_register_operand" "w")
6711 (match_operand:MVE_0 3 "s_register_operand" "w")
6712 (match_operand:HI 4 "vpr_register_operand" "Up")]
6715 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6716 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90"
6717 [(set_attr "type" "mve_move")
6718 (set_attr "length""8")])
6723 (define_insn "mve_vcmlaq_m_f<mode>"
6725 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6726 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6727 (match_operand:MVE_0 2 "s_register_operand" "w")
6728 (match_operand:MVE_0 3 "s_register_operand" "w")
6729 (match_operand:HI 4 "vpr_register_operand" "Up")]
6732 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6733 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0"
6734 [(set_attr "type" "mve_move")
6735 (set_attr "length""8")])
6738 ;; [vcmlaq_rot180_m_f])
6740 (define_insn "mve_vcmlaq_rot180_m_f<mode>"
6742 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6743 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6744 (match_operand:MVE_0 2 "s_register_operand" "w")
6745 (match_operand:MVE_0 3 "s_register_operand" "w")
6746 (match_operand:HI 4 "vpr_register_operand" "Up")]
6749 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6750 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180"
6751 [(set_attr "type" "mve_move")
6752 (set_attr "length""8")])
6755 ;; [vcmlaq_rot270_m_f])
6757 (define_insn "mve_vcmlaq_rot270_m_f<mode>"
6759 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6760 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6761 (match_operand:MVE_0 2 "s_register_operand" "w")
6762 (match_operand:MVE_0 3 "s_register_operand" "w")
6763 (match_operand:HI 4 "vpr_register_operand" "Up")]
6766 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6767 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270"
6768 [(set_attr "type" "mve_move")
6769 (set_attr "length""8")])
6772 ;; [vcmlaq_rot90_m_f])
6774 (define_insn "mve_vcmlaq_rot90_m_f<mode>"
6776 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6777 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6778 (match_operand:MVE_0 2 "s_register_operand" "w")
6779 (match_operand:MVE_0 3 "s_register_operand" "w")
6780 (match_operand:HI 4 "vpr_register_operand" "Up")]
6783 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6784 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90"
6785 [(set_attr "type" "mve_move")
6786 (set_attr "length""8")])
6791 (define_insn "mve_vcmulq_m_f<mode>"
6793 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6794 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6795 (match_operand:MVE_0 2 "s_register_operand" "w")
6796 (match_operand:MVE_0 3 "s_register_operand" "w")
6797 (match_operand:HI 4 "vpr_register_operand" "Up")]
6800 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6801 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0"
6802 [(set_attr "type" "mve_move")
6803 (set_attr "length""8")])
6806 ;; [vcmulq_rot180_m_f])
6808 (define_insn "mve_vcmulq_rot180_m_f<mode>"
6810 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6811 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6812 (match_operand:MVE_0 2 "s_register_operand" "w")
6813 (match_operand:MVE_0 3 "s_register_operand" "w")
6814 (match_operand:HI 4 "vpr_register_operand" "Up")]
6817 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6818 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180"
6819 [(set_attr "type" "mve_move")
6820 (set_attr "length""8")])
6823 ;; [vcmulq_rot270_m_f])
6825 (define_insn "mve_vcmulq_rot270_m_f<mode>"
6827 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6828 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6829 (match_operand:MVE_0 2 "s_register_operand" "w")
6830 (match_operand:MVE_0 3 "s_register_operand" "w")
6831 (match_operand:HI 4 "vpr_register_operand" "Up")]
6834 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6835 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270"
6836 [(set_attr "type" "mve_move")
6837 (set_attr "length""8")])
6840 ;; [vcmulq_rot90_m_f])
6842 (define_insn "mve_vcmulq_rot90_m_f<mode>"
6844 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6845 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6846 (match_operand:MVE_0 2 "s_register_operand" "w")
6847 (match_operand:MVE_0 3 "s_register_operand" "w")
6848 (match_operand:HI 4 "vpr_register_operand" "Up")]
6851 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6852 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90"
6853 [(set_attr "type" "mve_move")
6854 (set_attr "length""8")])
6859 (define_insn "mve_veorq_m_f<mode>"
6861 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6862 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6863 (match_operand:MVE_0 2 "s_register_operand" "w")
6864 (match_operand:MVE_0 3 "s_register_operand" "w")
6865 (match_operand:HI 4 "vpr_register_operand" "Up")]
6868 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6869 "vpst\;veort %q0, %q2, %q3"
6870 [(set_attr "type" "mve_move")
6871 (set_attr "length""8")])
6876 (define_insn "mve_vfmaq_m_f<mode>"
6878 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6879 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6880 (match_operand:MVE_0 2 "s_register_operand" "w")
6881 (match_operand:MVE_0 3 "s_register_operand" "w")
6882 (match_operand:HI 4 "vpr_register_operand" "Up")]
6885 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6886 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3"
6887 [(set_attr "type" "mve_move")
6888 (set_attr "length""8")])
6893 (define_insn "mve_vfmaq_m_n_f<mode>"
6895 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6896 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6897 (match_operand:MVE_0 2 "s_register_operand" "w")
6898 (match_operand:<V_elem> 3 "s_register_operand" "r")
6899 (match_operand:HI 4 "vpr_register_operand" "Up")]
6902 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6903 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3"
6904 [(set_attr "type" "mve_move")
6905 (set_attr "length""8")])
6910 (define_insn "mve_vfmasq_m_n_f<mode>"
6912 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6913 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6914 (match_operand:MVE_0 2 "s_register_operand" "w")
6915 (match_operand:<V_elem> 3 "s_register_operand" "r")
6916 (match_operand:HI 4 "vpr_register_operand" "Up")]
6919 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6920 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3"
6921 [(set_attr "type" "mve_move")
6922 (set_attr "length""8")])
6927 (define_insn "mve_vfmsq_m_f<mode>"
6929 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6930 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6931 (match_operand:MVE_0 2 "s_register_operand" "w")
6932 (match_operand:MVE_0 3 "s_register_operand" "w")
6933 (match_operand:HI 4 "vpr_register_operand" "Up")]
6936 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6937 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3"
6938 [(set_attr "type" "mve_move")
6939 (set_attr "length""8")])
6944 (define_insn "mve_vmaxnmq_m_f<mode>"
6946 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6947 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6948 (match_operand:MVE_0 2 "s_register_operand" "w")
6949 (match_operand:MVE_0 3 "s_register_operand" "w")
6950 (match_operand:HI 4 "vpr_register_operand" "Up")]
6953 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6954 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3"
6955 [(set_attr "type" "mve_move")
6956 (set_attr "length""8")])
6961 (define_insn "mve_vminnmq_m_f<mode>"
6963 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6964 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6965 (match_operand:MVE_0 2 "s_register_operand" "w")
6966 (match_operand:MVE_0 3 "s_register_operand" "w")
6967 (match_operand:HI 4 "vpr_register_operand" "Up")]
6970 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6971 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3"
6972 [(set_attr "type" "mve_move")
6973 (set_attr "length""8")])
6978 (define_insn "mve_vmulq_m_f<mode>"
6980 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6981 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6982 (match_operand:MVE_0 2 "s_register_operand" "w")
6983 (match_operand:MVE_0 3 "s_register_operand" "w")
6984 (match_operand:HI 4 "vpr_register_operand" "Up")]
6987 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6988 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3"
6989 [(set_attr "type" "mve_move")
6990 (set_attr "length""8")])
6995 (define_insn "mve_vmulq_m_n_f<mode>"
6997 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6998 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6999 (match_operand:MVE_0 2 "s_register_operand" "w")
7000 (match_operand:<V_elem> 3 "s_register_operand" "r")
7001 (match_operand:HI 4 "vpr_register_operand" "Up")]
7004 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7005 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3"
7006 [(set_attr "type" "mve_move")
7007 (set_attr "length""8")])
7012 (define_insn "mve_vornq_m_f<mode>"
7014 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7015 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7016 (match_operand:MVE_0 2 "s_register_operand" "w")
7017 (match_operand:MVE_0 3 "s_register_operand" "w")
7018 (match_operand:HI 4 "vpr_register_operand" "Up")]
7021 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7022 "vpst\;vornt %q0, %q2, %q3"
7023 [(set_attr "type" "mve_move")
7024 (set_attr "length""8")])
7029 (define_insn "mve_vorrq_m_f<mode>"
7031 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7032 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7033 (match_operand:MVE_0 2 "s_register_operand" "w")
7034 (match_operand:MVE_0 3 "s_register_operand" "w")
7035 (match_operand:HI 4 "vpr_register_operand" "Up")]
7038 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7039 "vpst\;vorrt %q0, %q2, %q3"
7040 [(set_attr "type" "mve_move")
7041 (set_attr "length""8")])
7046 (define_insn "mve_vsubq_m_f<mode>"
7048 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7049 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7050 (match_operand:MVE_0 2 "s_register_operand" "w")
7051 (match_operand:MVE_0 3 "s_register_operand" "w")
7052 (match_operand:HI 4 "vpr_register_operand" "Up")]
7055 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7056 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
7057 [(set_attr "type" "mve_move")
7058 (set_attr "length""8")])
7063 (define_insn "mve_vsubq_m_n_f<mode>"
7065 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7066 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7067 (match_operand:MVE_0 2 "s_register_operand" "w")
7068 (match_operand:<V_elem> 3 "s_register_operand" "r")
7069 (match_operand:HI 4 "vpr_register_operand" "Up")]
7072 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7073 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
7074 [(set_attr "type" "mve_move")
7075 (set_attr "length""8")])
7078 ;; [vstrbq_s vstrbq_u]
7080 (define_insn "mve_vstrbq_<supf><mode>"
7081 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7082 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
7088 int regno = REGNO (operands[1]);
7089 ops[1] = gen_rtx_REG (TImode, regno);
7090 ops[0] = operands[0];
7091 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
7094 [(set_attr "length" "4")])
7097 ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
7099 (define_expand "mve_vstrbq_scatter_offset_<supf><mode>"
7100 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7101 (match_operand:MVE_2 1 "s_register_operand")
7102 (match_operand:MVE_2 2 "s_register_operand")
7103 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7106 rtx ind = XEXP (operands[0], 0);
7107 gcc_assert (REG_P (ind));
7108 emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1],
7113 (define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn"
7114 [(set (mem:BLK (scratch))
7116 [(match_operand:SI 0 "register_operand" "r")
7117 (match_operand:MVE_2 1 "s_register_operand" "w")
7118 (match_operand:MVE_2 2 "s_register_operand" "w")]
7121 "vstrb.<V_sz_elem>\t%q2, [%0, %q1]"
7122 [(set_attr "length" "4")])
7125 ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
7127 (define_insn "mve_vstrwq_scatter_base_<supf>v4si"
7128 [(set (mem:BLK (scratch))
7130 [(match_operand:V4SI 0 "s_register_operand" "w")
7131 (match_operand:SI 1 "immediate_operand" "i")
7132 (match_operand:V4SI 2 "s_register_operand" "w")]
7138 ops[0] = operands[0];
7139 ops[1] = operands[1];
7140 ops[2] = operands[2];
7141 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
7144 [(set_attr "length" "4")])
7147 ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
7149 (define_insn "mve_vldrbq_gather_offset_<supf><mode>"
7150 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7151 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7152 (match_operand:MVE_2 2 "s_register_operand" "w")]
7158 ops[0] = operands[0];
7159 ops[1] = operands[1];
7160 ops[2] = operands[2];
7161 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7162 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
7164 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7167 [(set_attr "length" "4")])
7170 ;; [vldrbq_s vldrbq_u]
7172 (define_insn "mve_vldrbq_<supf><mode>"
7173 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7174 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")]
7180 int regno = REGNO (operands[0]);
7181 ops[0] = gen_rtx_REG (TImode, regno);
7182 ops[1] = operands[1];
7183 if (<V_sz_elem> == 8)
7184 output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops);
7186 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
7189 [(set_attr "length" "4")])
7192 ;; [vldrwq_gather_base_s vldrwq_gather_base_u]
7194 (define_insn "mve_vldrwq_gather_base_<supf>v4si"
7195 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7196 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7197 (match_operand:SI 2 "immediate_operand" "i")]
7203 ops[0] = operands[0];
7204 ops[1] = operands[1];
7205 ops[2] = operands[2];
7206 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7209 [(set_attr "length" "4")])
7212 ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
7214 (define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>"
7215 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7216 (match_operand:MVE_2 1 "s_register_operand")
7217 (match_operand:MVE_2 2 "s_register_operand")
7218 (match_operand:HI 3 "vpr_register_operand" "Up")
7219 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7222 rtx ind = XEXP (operands[0], 0);
7223 gcc_assert (REG_P (ind));
7225 gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
7231 (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn"
7232 [(set (mem:BLK (scratch))
7234 [(match_operand:SI 0 "register_operand" "r")
7235 (match_operand:MVE_2 1 "s_register_operand" "w")
7236 (match_operand:MVE_2 2 "s_register_operand" "w")
7237 (match_operand:HI 3 "vpr_register_operand" "Up")]
7240 "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]"
7241 [(set_attr "length" "8")])
7244 ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
7246 (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
7247 [(set (mem:BLK (scratch))
7249 [(match_operand:V4SI 0 "s_register_operand" "w")
7250 (match_operand:SI 1 "immediate_operand" "i")
7251 (match_operand:V4SI 2 "s_register_operand" "w")
7252 (match_operand:HI 3 "vpr_register_operand" "Up")]
7258 ops[0] = operands[0];
7259 ops[1] = operands[1];
7260 ops[2] = operands[2];
7261 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
7264 [(set_attr "length" "8")])
7267 ;; [vstrbq_p_s vstrbq_p_u]
7269 (define_insn "mve_vstrbq_p_<supf><mode>"
7270 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7271 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
7272 (match_operand:HI 2 "vpr_register_operand" "Up")]
7278 int regno = REGNO (operands[1]);
7279 ops[1] = gen_rtx_REG (TImode, regno);
7280 ops[0] = operands[0];
7281 output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops);
7284 [(set_attr "length" "8")])
7287 ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
7289 (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
7290 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7291 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7292 (match_operand:MVE_2 2 "s_register_operand" "w")
7293 (match_operand:HI 3 "vpr_register_operand" "Up")]
7299 ops[0] = operands[0];
7300 ops[1] = operands[1];
7301 ops[2] = operands[2];
7302 ops[3] = operands[3];
7303 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7304 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
7306 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7309 [(set_attr "length" "8")])
7312 ;; [vldrbq_z_s vldrbq_z_u]
7314 (define_insn "mve_vldrbq_z_<supf><mode>"
7315 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7316 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")
7317 (match_operand:HI 2 "vpr_register_operand" "Up")]
7323 int regno = REGNO (operands[0]);
7324 ops[0] = gen_rtx_REG (TImode, regno);
7325 ops[1] = operands[1];
7326 if (<V_sz_elem> == 8)
7327 output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops);
7329 output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
7332 [(set_attr "length" "8")])
7335 ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
7337 (define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
7338 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7339 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7340 (match_operand:SI 2 "immediate_operand" "i")
7341 (match_operand:HI 3 "vpr_register_operand" "Up")]
7347 ops[0] = operands[0];
7348 ops[1] = operands[1];
7349 ops[2] = operands[2];
7350 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7353 [(set_attr "length" "8")])
7358 (define_insn "mve_vldrhq_fv8hf"
7359 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7360 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")]
7363 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7366 int regno = REGNO (operands[0]);
7367 ops[0] = gen_rtx_REG (TImode, regno);
7368 ops[1] = operands[1];
7369 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7372 [(set_attr "length" "4")])
7375 ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
7377 (define_insn "mve_vldrhq_gather_offset_<supf><mode>"
7378 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7379 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7380 (match_operand:MVE_6 2 "s_register_operand" "w")]
7386 ops[0] = operands[0];
7387 ops[1] = operands[1];
7388 ops[2] = operands[2];
7389 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7390 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
7392 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7395 [(set_attr "length" "4")])
7398 ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
7400 (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
7401 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7402 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7403 (match_operand:MVE_6 2 "s_register_operand" "w")
7404 (match_operand:HI 3 "vpr_register_operand" "Up")
7410 ops[0] = operands[0];
7411 ops[1] = operands[1];
7412 ops[2] = operands[2];
7413 ops[3] = operands[3];
7414 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7415 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
7417 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7420 [(set_attr "length" "8")])
7423 ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
7425 (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
7426 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7427 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7428 (match_operand:MVE_6 2 "s_register_operand" "w")]
7434 ops[0] = operands[0];
7435 ops[1] = operands[1];
7436 ops[2] = operands[2];
7437 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7438 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7440 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7443 [(set_attr "length" "4")])
7446 ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
7448 (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
7449 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7450 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7451 (match_operand:MVE_6 2 "s_register_operand" "w")
7452 (match_operand:HI 3 "vpr_register_operand" "Up")
7458 ops[0] = operands[0];
7459 ops[1] = operands[1];
7460 ops[2] = operands[2];
7461 ops[3] = operands[3];
7462 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7463 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7465 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7468 [(set_attr "length" "8")])
7471 ;; [vldrhq_s, vldrhq_u]
7473 (define_insn "mve_vldrhq_<supf><mode>"
7474 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7475 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")]
7481 int regno = REGNO (operands[0]);
7482 ops[0] = gen_rtx_REG (TImode, regno);
7483 ops[1] = operands[1];
7484 if (<V_sz_elem> == 16)
7485 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7487 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
7490 [(set_attr "length" "4")])
7495 (define_insn "mve_vldrhq_z_fv8hf"
7496 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7497 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")
7498 (match_operand:HI 2 "vpr_register_operand" "Up")]
7501 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7504 int regno = REGNO (operands[0]);
7505 ops[0] = gen_rtx_REG (TImode, regno);
7506 ops[1] = operands[1];
7507 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7510 [(set_attr "length" "8")])
7513 ;; [vldrhq_z_s vldrhq_z_u]
7515 (define_insn "mve_vldrhq_z_<supf><mode>"
7516 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7517 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")
7518 (match_operand:HI 2 "vpr_register_operand" "Up")]
7524 int regno = REGNO (operands[0]);
7525 ops[0] = gen_rtx_REG (TImode, regno);
7526 ops[1] = operands[1];
7527 if (<V_sz_elem> == 16)
7528 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7530 output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
7533 [(set_attr "length" "8")])
7538 (define_insn "mve_vldrwq_fv4sf"
7539 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7540 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")]
7543 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7546 int regno = REGNO (operands[0]);
7547 ops[0] = gen_rtx_REG (TImode, regno);
7548 ops[1] = operands[1];
7549 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7552 [(set_attr "length" "4")])
7555 ;; [vldrwq_s vldrwq_u]
7557 (define_insn "mve_vldrwq_<supf>v4si"
7558 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7559 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")]
7565 int regno = REGNO (operands[0]);
7566 ops[0] = gen_rtx_REG (TImode, regno);
7567 ops[1] = operands[1];
7568 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7571 [(set_attr "length" "4")])
7576 (define_insn "mve_vldrwq_z_fv4sf"
7577 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7578 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")
7579 (match_operand:HI 2 "vpr_register_operand" "Up")]
7582 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7585 int regno = REGNO (operands[0]);
7586 ops[0] = gen_rtx_REG (TImode, regno);
7587 ops[1] = operands[1];
7588 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7591 [(set_attr "length" "8")])
7594 ;; [vldrwq_z_s vldrwq_z_u]
7596 (define_insn "mve_vldrwq_z_<supf>v4si"
7597 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7598 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")
7599 (match_operand:HI 2 "vpr_register_operand" "Up")]
7605 int regno = REGNO (operands[0]);
7606 ops[0] = gen_rtx_REG (TImode, regno);
7607 ops[1] = operands[1];
7608 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7611 [(set_attr "length" "8")])
7613 (define_expand "mve_vld1q_f<mode>"
7614 [(match_operand:MVE_0 0 "s_register_operand")
7615 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F)
7617 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
7619 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
7623 (define_expand "mve_vld1q_<supf><mode>"
7624 [(match_operand:MVE_2 0 "s_register_operand")
7625 (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q)
7629 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
7634 ;; [vldrdq_gather_base_s vldrdq_gather_base_u]
7636 (define_insn "mve_vldrdq_gather_base_<supf>v2di"
7637 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7638 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
7639 (match_operand:SI 2 "immediate_operand" "i")]
7645 ops[0] = operands[0];
7646 ops[1] = operands[1];
7647 ops[2] = operands[2];
7648 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
7651 [(set_attr "length" "4")])
7654 ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
7656 (define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
7657 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7658 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
7659 (match_operand:SI 2 "immediate_operand" "i")
7660 (match_operand:HI 3 "vpr_register_operand" "Up")]
7666 ops[0] = operands[0];
7667 ops[1] = operands[1];
7668 ops[2] = operands[2];
7669 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
7672 [(set_attr "length" "8")])
7675 ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
7677 (define_insn "mve_vldrdq_gather_offset_<supf>v2di"
7678 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7679 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7680 (match_operand:V2DI 2 "s_register_operand" "w")]
7686 ops[0] = operands[0];
7687 ops[1] = operands[1];
7688 ops[2] = operands[2];
7689 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
7692 [(set_attr "length" "4")])
7695 ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
7697 (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
7698 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7699 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7700 (match_operand:V2DI 2 "s_register_operand" "w")
7701 (match_operand:HI 3 "vpr_register_operand" "Up")]
7707 ops[0] = operands[0];
7708 ops[1] = operands[1];
7709 ops[2] = operands[2];
7710 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
7713 [(set_attr "length" "8")])
7716 ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
7718 (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
7719 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7720 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7721 (match_operand:V2DI 2 "s_register_operand" "w")]
7727 ops[0] = operands[0];
7728 ops[1] = operands[1];
7729 ops[2] = operands[2];
7730 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
7733 [(set_attr "length" "4")])
7736 ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
7738 (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
7739 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7740 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7741 (match_operand:V2DI 2 "s_register_operand" "w")
7742 (match_operand:HI 3 "vpr_register_operand" "Up")]
7748 ops[0] = operands[0];
7749 ops[1] = operands[1];
7750 ops[2] = operands[2];
7751 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
7754 [(set_attr "length" "8")])
7757 ;; [vldrhq_gather_offset_f]
7759 (define_insn "mve_vldrhq_gather_offset_fv8hf"
7760 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7761 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7762 (match_operand:V8HI 2 "s_register_operand" "w")]
7765 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7768 ops[0] = operands[0];
7769 ops[1] = operands[1];
7770 ops[2] = operands[2];
7771 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
7774 [(set_attr "length" "4")])
7777 ;; [vldrhq_gather_offset_z_f]
7779 (define_insn "mve_vldrhq_gather_offset_z_fv8hf"
7780 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7781 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7782 (match_operand:V8HI 2 "s_register_operand" "w")
7783 (match_operand:HI 3 "vpr_register_operand" "Up")]
7786 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7789 ops[0] = operands[0];
7790 ops[1] = operands[1];
7791 ops[2] = operands[2];
7792 ops[3] = operands[3];
7793 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
7796 [(set_attr "length" "8")])
7799 ;; [vldrhq_gather_shifted_offset_f]
7801 (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
7802 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7803 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7804 (match_operand:V8HI 2 "s_register_operand" "w")]
7807 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7810 ops[0] = operands[0];
7811 ops[1] = operands[1];
7812 ops[2] = operands[2];
7813 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
7816 [(set_attr "length" "4")])
7819 ;; [vldrhq_gather_shifted_offset_z_f]
7821 (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
7822 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7823 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7824 (match_operand:V8HI 2 "s_register_operand" "w")
7825 (match_operand:HI 3 "vpr_register_operand" "Up")]
7828 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7831 ops[0] = operands[0];
7832 ops[1] = operands[1];
7833 ops[2] = operands[2];
7834 ops[3] = operands[3];
7835 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
7838 [(set_attr "length" "8")])
7841 ;; [vldrwq_gather_base_f]
7843 (define_insn "mve_vldrwq_gather_base_fv4sf"
7844 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7845 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
7846 (match_operand:SI 2 "immediate_operand" "i")]
7849 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7852 ops[0] = operands[0];
7853 ops[1] = operands[1];
7854 ops[2] = operands[2];
7855 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7858 [(set_attr "length" "4")])
7861 ;; [vldrwq_gather_base_z_f]
7863 (define_insn "mve_vldrwq_gather_base_z_fv4sf"
7864 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7865 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
7866 (match_operand:SI 2 "immediate_operand" "i")
7867 (match_operand:HI 3 "vpr_register_operand" "Up")]
7870 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7873 ops[0] = operands[0];
7874 ops[1] = operands[1];
7875 ops[2] = operands[2];
7876 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7879 [(set_attr "length" "8")])
7882 ;; [vldrwq_gather_offset_f]
7884 (define_insn "mve_vldrwq_gather_offset_fv4sf"
7885 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7886 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
7887 (match_operand:V4SI 2 "s_register_operand" "w")]
7890 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7893 ops[0] = operands[0];
7894 ops[1] = operands[1];
7895 ops[2] = operands[2];
7896 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
7899 [(set_attr "length" "4")])
7902 ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
7904 (define_insn "mve_vldrwq_gather_offset_<supf>v4si"
7905 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7906 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
7907 (match_operand:V4SI 2 "s_register_operand" "w")]
7913 ops[0] = operands[0];
7914 ops[1] = operands[1];
7915 ops[2] = operands[2];
7916 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
7919 [(set_attr "length" "4")])
7922 ;; [vldrwq_gather_offset_z_f]
7924 (define_insn "mve_vldrwq_gather_offset_z_fv4sf"
7925 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7926 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
7927 (match_operand:V4SI 2 "s_register_operand" "w")
7928 (match_operand:HI 3 "vpr_register_operand" "Up")]
7931 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7934 ops[0] = operands[0];
7935 ops[1] = operands[1];
7936 ops[2] = operands[2];
7937 ops[3] = operands[3];
7938 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
7941 [(set_attr "length" "8")])
7944 ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
7946 (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
7947 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7948 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
7949 (match_operand:V4SI 2 "s_register_operand" "w")
7950 (match_operand:HI 3 "vpr_register_operand" "Up")]
7956 ops[0] = operands[0];
7957 ops[1] = operands[1];
7958 ops[2] = operands[2];
7959 ops[3] = operands[3];
7960 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
7963 [(set_attr "length" "8")])
7966 ;; [vldrwq_gather_shifted_offset_f]
7968 (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
7969 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7970 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
7971 (match_operand:V4SI 2 "s_register_operand" "w")]
7974 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7977 ops[0] = operands[0];
7978 ops[1] = operands[1];
7979 ops[2] = operands[2];
7980 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
7983 [(set_attr "length" "4")])
7986 ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
7988 (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
7989 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7990 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
7991 (match_operand:V4SI 2 "s_register_operand" "w")]
7997 ops[0] = operands[0];
7998 ops[1] = operands[1];
7999 ops[2] = operands[2];
8000 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8003 [(set_attr "length" "4")])
8006 ;; [vldrwq_gather_shifted_offset_z_f]
8008 (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
8009 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8010 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8011 (match_operand:V4SI 2 "s_register_operand" "w")
8012 (match_operand:HI 3 "vpr_register_operand" "Up")]
8015 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8018 ops[0] = operands[0];
8019 ops[1] = operands[1];
8020 ops[2] = operands[2];
8021 ops[3] = operands[3];
8022 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8025 [(set_attr "length" "8")])
8028 ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
8030 (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
8031 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8032 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8033 (match_operand:V4SI 2 "s_register_operand" "w")
8034 (match_operand:HI 3 "vpr_register_operand" "Up")]
8040 ops[0] = operands[0];
8041 ops[1] = operands[1];
8042 ops[2] = operands[2];
8043 ops[3] = operands[3];
8044 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8047 [(set_attr "length" "8")])
8052 (define_insn "mve_vstrhq_fv8hf"
8053 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8054 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
8057 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8060 int regno = REGNO (operands[1]);
8061 ops[1] = gen_rtx_REG (TImode, regno);
8062 ops[0] = operands[0];
8063 output_asm_insn ("vstrh.16\t%q1, %E0",ops);
8066 [(set_attr "length" "4")])
8071 (define_insn "mve_vstrhq_p_fv8hf"
8072 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8073 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
8074 (match_operand:HI 2 "vpr_register_operand" "Up")]
8077 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8080 int regno = REGNO (operands[1]);
8081 ops[1] = gen_rtx_REG (TImode, regno);
8082 ops[0] = operands[0];
8083 output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops);
8086 [(set_attr "length" "8")])
8089 ;; [vstrhq_p_s vstrhq_p_u]
8091 (define_insn "mve_vstrhq_p_<supf><mode>"
8092 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8093 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
8094 (match_operand:HI 2 "vpr_register_operand" "Up")]
8100 int regno = REGNO (operands[1]);
8101 ops[1] = gen_rtx_REG (TImode, regno);
8102 ops[0] = operands[0];
8103 output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops);
8106 [(set_attr "length" "8")])
8109 ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
8111 (define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>"
8112 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8113 (match_operand:MVE_6 1 "s_register_operand")
8114 (match_operand:MVE_6 2 "s_register_operand")
8115 (match_operand:HI 3 "vpr_register_operand")
8116 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8119 rtx ind = XEXP (operands[0], 0);
8120 gcc_assert (REG_P (ind));
8122 gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
8128 (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn"
8129 [(set (mem:BLK (scratch))
8131 [(match_operand:SI 0 "register_operand" "r")
8132 (match_operand:MVE_6 1 "s_register_operand" "w")
8133 (match_operand:MVE_6 2 "s_register_operand" "w")
8134 (match_operand:HI 3 "vpr_register_operand" "Up")]
8137 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]"
8138 [(set_attr "length" "8")])
8141 ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
8143 (define_expand "mve_vstrhq_scatter_offset_<supf><mode>"
8144 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8145 (match_operand:MVE_6 1 "s_register_operand")
8146 (match_operand:MVE_6 2 "s_register_operand")
8147 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8150 rtx ind = XEXP (operands[0], 0);
8151 gcc_assert (REG_P (ind));
8152 emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1],
8157 (define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn"
8158 [(set (mem:BLK (scratch))
8160 [(match_operand:SI 0 "register_operand" "r")
8161 (match_operand:MVE_6 1 "s_register_operand" "w")
8162 (match_operand:MVE_6 2 "s_register_operand" "w")]
8165 "vstrh.<V_sz_elem>\t%q2, [%0, %q1]"
8166 [(set_attr "length" "4")])
8169 ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
8171 (define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
8172 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8173 (match_operand:MVE_6 1 "s_register_operand")
8174 (match_operand:MVE_6 2 "s_register_operand")
8175 (match_operand:HI 3 "vpr_register_operand")
8176 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8179 rtx ind = XEXP (operands[0], 0);
8180 gcc_assert (REG_P (ind));
8182 gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1],
8188 (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn"
8189 [(set (mem:BLK (scratch))
8191 [(match_operand:SI 0 "register_operand" "r")
8192 (match_operand:MVE_6 1 "s_register_operand" "w")
8193 (match_operand:MVE_6 2 "s_register_operand" "w")
8194 (match_operand:HI 3 "vpr_register_operand" "Up")]
8197 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8198 [(set_attr "length" "8")])
8201 ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
8203 (define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
8204 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8205 (match_operand:MVE_6 1 "s_register_operand")
8206 (match_operand:MVE_6 2 "s_register_operand")
8207 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8210 rtx ind = XEXP (operands[0], 0);
8211 gcc_assert (REG_P (ind));
8213 gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1],
8218 (define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn"
8219 [(set (mem:BLK (scratch))
8221 [(match_operand:SI 0 "register_operand" "r")
8222 (match_operand:MVE_6 1 "s_register_operand" "w")
8223 (match_operand:MVE_6 2 "s_register_operand" "w")]
8226 "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8227 [(set_attr "length" "4")])
8230 ;; [vstrhq_s, vstrhq_u]
8232 (define_insn "mve_vstrhq_<supf><mode>"
8233 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8234 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
8240 int regno = REGNO (operands[1]);
8241 ops[1] = gen_rtx_REG (TImode, regno);
8242 ops[0] = operands[0];
8243 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
8246 [(set_attr "length" "4")])
8251 (define_insn "mve_vstrwq_fv4sf"
8252 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8253 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
8256 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8259 int regno = REGNO (operands[1]);
8260 ops[1] = gen_rtx_REG (TImode, regno);
8261 ops[0] = operands[0];
8262 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8265 [(set_attr "length" "4")])
8270 (define_insn "mve_vstrwq_p_fv4sf"
8271 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8272 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
8273 (match_operand:HI 2 "vpr_register_operand" "Up")]
8276 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8279 int regno = REGNO (operands[1]);
8280 ops[1] = gen_rtx_REG (TImode, regno);
8281 ops[0] = operands[0];
8282 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8285 [(set_attr "length" "8")])
8288 ;; [vstrwq_p_s vstrwq_p_u]
8290 (define_insn "mve_vstrwq_p_<supf>v4si"
8291 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8292 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8293 (match_operand:HI 2 "vpr_register_operand" "Up")]
8299 int regno = REGNO (operands[1]);
8300 ops[1] = gen_rtx_REG (TImode, regno);
8301 ops[0] = operands[0];
8302 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8305 [(set_attr "length" "8")])
8308 ;; [vstrwq_s vstrwq_u]
8310 (define_insn "mve_vstrwq_<supf>v4si"
8311 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8312 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
8318 int regno = REGNO (operands[1]);
8319 ops[1] = gen_rtx_REG (TImode, regno);
8320 ops[0] = operands[0];
8321 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8324 [(set_attr "length" "4")])
8326 (define_expand "mve_vst1q_f<mode>"
8327 [(match_operand:<MVE_CNVT> 0 "mve_memory_operand")
8328 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
8330 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8332 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8336 (define_expand "mve_vst1q_<supf><mode>"
8337 [(match_operand:MVE_2 0 "mve_memory_operand")
8338 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
8342 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8347 ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
8349 (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
8350 [(set (mem:BLK (scratch))
8352 [(match_operand:V2DI 0 "s_register_operand" "w")
8353 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8354 (match_operand:V2DI 2 "s_register_operand" "w")
8355 (match_operand:HI 3 "vpr_register_operand" "Up")]
8361 ops[0] = operands[0];
8362 ops[1] = operands[1];
8363 ops[2] = operands[2];
8364 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
8367 [(set_attr "length" "8")])
8370 ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
8372 (define_insn "mve_vstrdq_scatter_base_<supf>v2di"
8373 [(set (mem:BLK (scratch))
8375 [(match_operand:V2DI 0 "s_register_operand" "=w")
8376 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8377 (match_operand:V2DI 2 "s_register_operand" "w")]
8383 ops[0] = operands[0];
8384 ops[1] = operands[1];
8385 ops[2] = operands[2];
8386 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
8389 [(set_attr "length" "4")])
8392 ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
8394 (define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di"
8395 [(match_operand:V2DI 0 "mve_scatter_memory")
8396 (match_operand:V2DI 1 "s_register_operand")
8397 (match_operand:V2DI 2 "s_register_operand")
8398 (match_operand:HI 3 "vpr_register_operand")
8399 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8402 rtx ind = XEXP (operands[0], 0);
8403 gcc_assert (REG_P (ind));
8404 emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1],
8410 (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn"
8411 [(set (mem:BLK (scratch))
8413 [(match_operand:SI 0 "register_operand" "r")
8414 (match_operand:V2DI 1 "s_register_operand" "w")
8415 (match_operand:V2DI 2 "s_register_operand" "w")
8416 (match_operand:HI 3 "vpr_register_operand" "Up")]
8419 "vpst\;vstrdt.64\t%q2, [%0, %q1]"
8420 [(set_attr "length" "8")])
8423 ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
8425 (define_expand "mve_vstrdq_scatter_offset_<supf>v2di"
8426 [(match_operand:V2DI 0 "mve_scatter_memory")
8427 (match_operand:V2DI 1 "s_register_operand")
8428 (match_operand:V2DI 2 "s_register_operand")
8429 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8432 rtx ind = XEXP (operands[0], 0);
8433 gcc_assert (REG_P (ind));
8434 emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1],
8439 (define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn"
8440 [(set (mem:BLK (scratch))
8442 [(match_operand:SI 0 "register_operand" "r")
8443 (match_operand:V2DI 1 "s_register_operand" "w")
8444 (match_operand:V2DI 2 "s_register_operand" "w")]
8447 "vstrd.64\t%q2, [%0, %q1]"
8448 [(set_attr "length" "4")])
8451 ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
8453 (define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
8454 [(match_operand:V2DI 0 "mve_scatter_memory")
8455 (match_operand:V2DI 1 "s_register_operand")
8456 (match_operand:V2DI 2 "s_register_operand")
8457 (match_operand:HI 3 "vpr_register_operand")
8458 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8461 rtx ind = XEXP (operands[0], 0);
8462 gcc_assert (REG_P (ind));
8464 gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1],
8470 (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn"
8471 [(set (mem:BLK (scratch))
8473 [(match_operand:SI 0 "register_operand" "r")
8474 (match_operand:V2DI 1 "s_register_operand" "w")
8475 (match_operand:V2DI 2 "s_register_operand" "w")
8476 (match_operand:HI 3 "vpr_register_operand" "Up")]
8479 "vpst\;vstrdt.64\t%q2, [%0, %q1, UXTW #3]"
8480 [(set_attr "length" "8")])
8483 ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
8485 (define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
8486 [(match_operand:V2DI 0 "mve_scatter_memory")
8487 (match_operand:V2DI 1 "s_register_operand")
8488 (match_operand:V2DI 2 "s_register_operand")
8489 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8492 rtx ind = XEXP (operands[0], 0);
8493 gcc_assert (REG_P (ind));
8495 gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1],
8500 (define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn"
8501 [(set (mem:BLK (scratch))
8503 [(match_operand:SI 0 "register_operand" "r")
8504 (match_operand:V2DI 1 "s_register_operand" "w")
8505 (match_operand:V2DI 2 "s_register_operand" "w")]
8508 "vstrd.64\t%q2, [%0, %q1, UXTW #3]"
8509 [(set_attr "length" "4")])
8512 ;; [vstrhq_scatter_offset_f]
8514 (define_expand "mve_vstrhq_scatter_offset_fv8hf"
8515 [(match_operand:V8HI 0 "mve_scatter_memory")
8516 (match_operand:V8HI 1 "s_register_operand")
8517 (match_operand:V8HF 2 "s_register_operand")
8518 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8519 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8521 rtx ind = XEXP (operands[0], 0);
8522 gcc_assert (REG_P (ind));
8523 emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1],
8528 (define_insn "mve_vstrhq_scatter_offset_fv8hf_insn"
8529 [(set (mem:BLK (scratch))
8531 [(match_operand:SI 0 "register_operand" "r")
8532 (match_operand:V8HI 1 "s_register_operand" "w")
8533 (match_operand:V8HF 2 "s_register_operand" "w")]
8535 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8536 "vstrh.16\t%q2, [%0, %q1]"
8537 [(set_attr "length" "4")])
8540 ;; [vstrhq_scatter_offset_p_f]
8542 (define_expand "mve_vstrhq_scatter_offset_p_fv8hf"
8543 [(match_operand:V8HI 0 "mve_scatter_memory")
8544 (match_operand:V8HI 1 "s_register_operand")
8545 (match_operand:V8HF 2 "s_register_operand")
8546 (match_operand:HI 3 "vpr_register_operand")
8547 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8548 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8550 rtx ind = XEXP (operands[0], 0);
8551 gcc_assert (REG_P (ind));
8552 emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1],
8558 (define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn"
8559 [(set (mem:BLK (scratch))
8561 [(match_operand:SI 0 "register_operand" "r")
8562 (match_operand:V8HI 1 "s_register_operand" "w")
8563 (match_operand:V8HF 2 "s_register_operand" "w")
8564 (match_operand:HI 3 "vpr_register_operand" "Up")]
8566 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8567 "vpst\;vstrht.16\t%q2, [%0, %q1]"
8568 [(set_attr "length" "8")])
8571 ;; [vstrhq_scatter_shifted_offset_f]
8573 (define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf"
8574 [(match_operand:V8HI 0 "memory_operand" "=Us")
8575 (match_operand:V8HI 1 "s_register_operand" "w")
8576 (match_operand:V8HF 2 "s_register_operand" "w")
8577 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8578 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8580 rtx ind = XEXP (operands[0], 0);
8581 gcc_assert (REG_P (ind));
8582 emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1],
8587 (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn"
8588 [(set (mem:BLK (scratch))
8590 [(match_operand:SI 0 "register_operand" "r")
8591 (match_operand:V8HI 1 "s_register_operand" "w")
8592 (match_operand:V8HF 2 "s_register_operand" "w")]
8594 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8595 "vstrh.16\t%q2, [%0, %q1, uxtw #1]"
8596 [(set_attr "length" "4")])
8599 ;; [vstrhq_scatter_shifted_offset_p_f]
8601 (define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
8602 [(match_operand:V8HI 0 "memory_operand" "=Us")
8603 (match_operand:V8HI 1 "s_register_operand" "w")
8604 (match_operand:V8HF 2 "s_register_operand" "w")
8605 (match_operand:HI 3 "vpr_register_operand" "Up")
8606 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8607 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8609 rtx ind = XEXP (operands[0], 0);
8610 gcc_assert (REG_P (ind));
8612 gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1],
8618 (define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn"
8619 [(set (mem:BLK (scratch))
8621 [(match_operand:SI 0 "register_operand" "r")
8622 (match_operand:V8HI 1 "s_register_operand" "w")
8623 (match_operand:V8HF 2 "s_register_operand" "w")
8624 (match_operand:HI 3 "vpr_register_operand" "Up")]
8626 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8627 "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]"
8628 [(set_attr "length" "8")])
8631 ;; [vstrwq_scatter_base_f]
8633 (define_insn "mve_vstrwq_scatter_base_fv4sf"
8634 [(set (mem:BLK (scratch))
8636 [(match_operand:V4SI 0 "s_register_operand" "w")
8637 (match_operand:SI 1 "immediate_operand" "i")
8638 (match_operand:V4SF 2 "s_register_operand" "w")]
8641 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8644 ops[0] = operands[0];
8645 ops[1] = operands[1];
8646 ops[2] = operands[2];
8647 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
8650 [(set_attr "length" "4")])
8653 ;; [vstrwq_scatter_base_p_f]
8655 (define_insn "mve_vstrwq_scatter_base_p_fv4sf"
8656 [(set (mem:BLK (scratch))
8658 [(match_operand:V4SI 0 "s_register_operand" "w")
8659 (match_operand:SI 1 "immediate_operand" "i")
8660 (match_operand:V4SF 2 "s_register_operand" "w")
8661 (match_operand:HI 3 "vpr_register_operand" "Up")]
8664 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8667 ops[0] = operands[0];
8668 ops[1] = operands[1];
8669 ops[2] = operands[2];
8670 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
8673 [(set_attr "length" "8")])
8676 ;; [vstrwq_scatter_offset_f]
8678 (define_expand "mve_vstrwq_scatter_offset_fv4sf"
8679 [(match_operand:V4SI 0 "mve_scatter_memory")
8680 (match_operand:V4SI 1 "s_register_operand")
8681 (match_operand:V4SF 2 "s_register_operand")
8682 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
8683 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8685 rtx ind = XEXP (operands[0], 0);
8686 gcc_assert (REG_P (ind));
8687 emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1],
8692 (define_insn "mve_vstrwq_scatter_offset_fv4sf_insn"
8693 [(set (mem:BLK (scratch))
8695 [(match_operand:SI 0 "register_operand" "r")
8696 (match_operand:V4SI 1 "s_register_operand" "w")
8697 (match_operand:V4SF 2 "s_register_operand" "w")]
8699 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8700 "vstrw.32\t%q2, [%0, %q1]"
8701 [(set_attr "length" "4")])
8704 ;; [vstrwq_scatter_offset_p_f]
8706 (define_expand "mve_vstrwq_scatter_offset_p_fv4sf"
8707 [(match_operand:V4SI 0 "mve_scatter_memory")
8708 (match_operand:V4SI 1 "s_register_operand")
8709 (match_operand:V4SF 2 "s_register_operand")
8710 (match_operand:HI 3 "vpr_register_operand")
8711 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
8712 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8714 rtx ind = XEXP (operands[0], 0);
8715 gcc_assert (REG_P (ind));
8716 emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1],
8722 (define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn"
8723 [(set (mem:BLK (scratch))
8725 [(match_operand:SI 0 "register_operand" "r")
8726 (match_operand:V4SI 1 "s_register_operand" "w")
8727 (match_operand:V4SF 2 "s_register_operand" "w")
8728 (match_operand:HI 3 "vpr_register_operand" "Up")]
8730 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8731 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
8732 [(set_attr "length" "8")])
8735 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
8737 (define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si"
8738 [(match_operand:V4SI 0 "mve_scatter_memory")
8739 (match_operand:V4SI 1 "s_register_operand")
8740 (match_operand:V4SI 2 "s_register_operand")
8741 (match_operand:HI 3 "vpr_register_operand")
8742 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
8745 rtx ind = XEXP (operands[0], 0);
8746 gcc_assert (REG_P (ind));
8747 emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1],
8753 (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn"
8754 [(set (mem:BLK (scratch))
8756 [(match_operand:SI 0 "register_operand" "r")
8757 (match_operand:V4SI 1 "s_register_operand" "w")
8758 (match_operand:V4SI 2 "s_register_operand" "w")
8759 (match_operand:HI 3 "vpr_register_operand" "Up")]
8762 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
8763 [(set_attr "length" "8")])
8766 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
8768 (define_expand "mve_vstrwq_scatter_offset_<supf>v4si"
8769 [(match_operand:V4SI 0 "mve_scatter_memory")
8770 (match_operand:V4SI 1 "s_register_operand")
8771 (match_operand:V4SI 2 "s_register_operand")
8772 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
8775 rtx ind = XEXP (operands[0], 0);
8776 gcc_assert (REG_P (ind));
8777 emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1],
8782 (define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn"
8783 [(set (mem:BLK (scratch))
8785 [(match_operand:SI 0 "register_operand" "r")
8786 (match_operand:V4SI 1 "s_register_operand" "w")
8787 (match_operand:V4SI 2 "s_register_operand" "w")]
8790 "vstrw.32\t%q2, [%0, %q1]"
8791 [(set_attr "length" "4")])
8794 ;; [vstrwq_scatter_shifted_offset_f]
8796 (define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf"
8797 [(match_operand:V4SI 0 "mve_scatter_memory")
8798 (match_operand:V4SI 1 "s_register_operand")
8799 (match_operand:V4SF 2 "s_register_operand")
8800 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
8801 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8803 rtx ind = XEXP (operands[0], 0);
8804 gcc_assert (REG_P (ind));
8805 emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1],
8810 (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn"
8811 [(set (mem:BLK (scratch))
8813 [(match_operand:SI 0 "register_operand" "r")
8814 (match_operand:V4SI 1 "s_register_operand" "w")
8815 (match_operand:V4SF 2 "s_register_operand" "w")]
8817 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8818 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
8819 [(set_attr "length" "8")])
8822 ;; [vstrwq_scatter_shifted_offset_p_f]
8824 (define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
8825 [(match_operand:V4SI 0 "mve_scatter_memory")
8826 (match_operand:V4SI 1 "s_register_operand")
8827 (match_operand:V4SF 2 "s_register_operand")
8828 (match_operand:HI 3 "vpr_register_operand")
8829 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
8830 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8832 rtx ind = XEXP (operands[0], 0);
8833 gcc_assert (REG_P (ind));
8835 gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1],
8841 (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn"
8842 [(set (mem:BLK (scratch))
8844 [(match_operand:SI 0 "register_operand" "r")
8845 (match_operand:V4SI 1 "s_register_operand" "w")
8846 (match_operand:V4SF 2 "s_register_operand" "w")
8847 (match_operand:HI 3 "vpr_register_operand" "Up")]
8849 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8850 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
8851 [(set_attr "length" "8")])
8854 ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
8856 (define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
8857 [(match_operand:V4SI 0 "mve_scatter_memory")
8858 (match_operand:V4SI 1 "s_register_operand")
8859 (match_operand:V4SI 2 "s_register_operand")
8860 (match_operand:HI 3 "vpr_register_operand")
8861 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
8864 rtx ind = XEXP (operands[0], 0);
8865 gcc_assert (REG_P (ind));
8867 gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1],
8873 (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn"
8874 [(set (mem:BLK (scratch))
8876 [(match_operand:SI 0 "register_operand" "r")
8877 (match_operand:V4SI 1 "s_register_operand" "w")
8878 (match_operand:V4SI 2 "s_register_operand" "w")
8879 (match_operand:HI 3 "vpr_register_operand" "Up")]
8882 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
8883 [(set_attr "length" "8")])
8886 ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
8888 (define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
8889 [(match_operand:V4SI 0 "mve_scatter_memory")
8890 (match_operand:V4SI 1 "s_register_operand")
8891 (match_operand:V4SI 2 "s_register_operand")
8892 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
8895 rtx ind = XEXP (operands[0], 0);
8896 gcc_assert (REG_P (ind));
8898 gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1],
8903 (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn"
8904 [(set (mem:BLK (scratch))
8906 [(match_operand:SI 0 "register_operand" "r")
8907 (match_operand:V4SI 1 "s_register_operand" "w")
8908 (match_operand:V4SI 2 "s_register_operand" "w")]
8911 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
8912 [(set_attr "length" "4")])
8915 ;; [vaddq_s, vaddq_u])
8917 (define_insn "mve_vaddq<mode>"
8919 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
8920 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
8921 (match_operand:MVE_2 2 "s_register_operand" "w")))
8924 "vadd.i%#<V_sz_elem> %q0, %q1, %q2"
8925 [(set_attr "type" "mve_move")
8931 (define_insn "mve_vaddq_f<mode>"
8933 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
8934 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
8935 (match_operand:MVE_0 2 "s_register_operand" "w")))
8937 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8938 "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
8939 [(set_attr "type" "mve_move")
8945 (define_expand "mve_vidupq_n_u<mode>"
8946 [(match_operand:MVE_2 0 "s_register_operand")
8947 (match_operand:SI 1 "s_register_operand")
8948 (match_operand:SI 2 "mve_imm_selective_upto_8")]
8951 rtx temp = gen_reg_rtx (SImode);
8952 emit_move_insn (temp, operands[1]);
8953 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
8954 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
8962 (define_insn "mve_vidupq_u<mode>_insn"
8963 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
8964 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
8965 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
8967 (set (match_operand:SI 1 "s_register_operand" "=Te")
8968 (plus:SI (match_dup 2)
8969 (match_operand:SI 4 "immediate_operand" "i")))]
8971 "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
8976 (define_expand "mve_vidupq_m_n_u<mode>"
8977 [(match_operand:MVE_2 0 "s_register_operand")
8978 (match_operand:MVE_2 1 "s_register_operand")
8979 (match_operand:SI 2 "s_register_operand")
8980 (match_operand:SI 3 "mve_imm_selective_upto_8")
8981 (match_operand:HI 4 "vpr_register_operand")]
8984 rtx temp = gen_reg_rtx (SImode);
8985 emit_move_insn (temp, operands[2]);
8986 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
8987 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
8988 operands[2], operands[3],
8994 ;; [vidupq_m_wb_u_insn])
8996 (define_insn "mve_vidupq_m_wb_u<mode>_insn"
8997 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
8998 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
8999 (match_operand:SI 3 "s_register_operand" "2")
9000 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9001 (match_operand:HI 5 "vpr_register_operand" "Up")]
9003 (set (match_operand:SI 2 "s_register_operand" "=Te")
9004 (plus:SI (match_dup 3)
9005 (match_operand:SI 6 "immediate_operand" "i")))]
9007 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
9008 [(set_attr "length""8")])
9013 (define_expand "mve_vddupq_n_u<mode>"
9014 [(match_operand:MVE_2 0 "s_register_operand")
9015 (match_operand:SI 1 "s_register_operand")
9016 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9019 rtx temp = gen_reg_rtx (SImode);
9020 emit_move_insn (temp, operands[1]);
9021 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9022 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
9030 (define_insn "mve_vddupq_u<mode>_insn"
9031 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9032 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9033 (match_operand:SI 3 "immediate_operand" "i")]
9035 (set (match_operand:SI 1 "s_register_operand" "=Te")
9036 (minus:SI (match_dup 2)
9037 (match_operand:SI 4 "immediate_operand" "i")))]
9039 "vddup.u%#<V_sz_elem> %q0, %1, %3")
9044 (define_expand "mve_vddupq_m_n_u<mode>"
9045 [(match_operand:MVE_2 0 "s_register_operand")
9046 (match_operand:MVE_2 1 "s_register_operand")
9047 (match_operand:SI 2 "s_register_operand")
9048 (match_operand:SI 3 "mve_imm_selective_upto_8")
9049 (match_operand:HI 4 "vpr_register_operand")]
9052 rtx temp = gen_reg_rtx (SImode);
9053 emit_move_insn (temp, operands[2]);
9054 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9055 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9056 operands[2], operands[3],
9062 ;; [vddupq_m_wb_u_insn])
9064 (define_insn "mve_vddupq_m_wb_u<mode>_insn"
9065 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9066 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9067 (match_operand:SI 3 "s_register_operand" "2")
9068 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9069 (match_operand:HI 5 "vpr_register_operand" "Up")]
9071 (set (match_operand:SI 2 "s_register_operand" "=Te")
9072 (minus:SI (match_dup 3)
9073 (match_operand:SI 6 "immediate_operand" "i")))]
9075 "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
9076 [(set_attr "length""8")])
9081 (define_expand "mve_vdwdupq_n_u<mode>"
9082 [(match_operand:MVE_2 0 "s_register_operand")
9083 (match_operand:SI 1 "s_register_operand")
9084 (match_operand:DI 2 "s_register_operand")
9085 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9088 rtx ignore_wb = gen_reg_rtx (SImode);
9089 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9090 operands[1], operands[2],
9098 (define_expand "mve_vdwdupq_wb_u<mode>"
9099 [(match_operand:SI 0 "s_register_operand")
9100 (match_operand:SI 1 "s_register_operand")
9101 (match_operand:DI 2 "s_register_operand")
9102 (match_operand:SI 3 "mve_imm_selective_upto_8")
9103 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9106 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9107 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9108 operands[1], operands[2],
9114 ;; [vdwdupq_wb_u_insn])
9116 (define_insn "mve_vdwdupq_wb_u<mode>_insn"
9117 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9118 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9119 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9120 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9122 (set (match_operand:SI 1 "s_register_operand" "=Te")
9123 (unspec:SI [(match_dup 2)
9124 (subreg:SI (match_dup 3) 4)
9128 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9134 (define_expand "mve_vdwdupq_m_n_u<mode>"
9135 [(match_operand:MVE_2 0 "s_register_operand")
9136 (match_operand:MVE_2 1 "s_register_operand")
9137 (match_operand:SI 2 "s_register_operand")
9138 (match_operand:DI 3 "s_register_operand")
9139 (match_operand:SI 4 "mve_imm_selective_upto_8")
9140 (match_operand:HI 5 "vpr_register_operand")]
9143 rtx ignore_wb = gen_reg_rtx (SImode);
9144 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9145 operands[1], operands[2],
9146 operands[3], operands[4],
9152 ;; [vdwdupq_m_wb_u])
9154 (define_expand "mve_vdwdupq_m_wb_u<mode>"
9155 [(match_operand:SI 0 "s_register_operand")
9156 (match_operand:MVE_2 1 "s_register_operand")
9157 (match_operand:SI 2 "s_register_operand")
9158 (match_operand:DI 3 "s_register_operand")
9159 (match_operand:SI 4 "mve_imm_selective_upto_8")
9160 (match_operand:HI 5 "vpr_register_operand")]
9163 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9164 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9165 operands[1], operands[2],
9166 operands[3], operands[4],
9172 ;; [vdwdupq_m_wb_u_insn])
9174 (define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
9175 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9176 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9177 (match_operand:SI 3 "s_register_operand" "1")
9178 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9179 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9180 (match_operand:HI 6 "vpr_register_operand" "Up")]
9182 (set (match_operand:SI 1 "s_register_operand" "=Te")
9183 (unspec:SI [(match_dup 2)
9185 (subreg:SI (match_dup 4) 4)
9191 "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9192 [(set_attr "type" "mve_move")
9193 (set_attr "length""8")])
9198 (define_expand "mve_viwdupq_n_u<mode>"
9199 [(match_operand:MVE_2 0 "s_register_operand")
9200 (match_operand:SI 1 "s_register_operand")
9201 (match_operand:DI 2 "s_register_operand")
9202 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9205 rtx ignore_wb = gen_reg_rtx (SImode);
9206 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9207 operands[1], operands[2],
9215 (define_expand "mve_viwdupq_wb_u<mode>"
9216 [(match_operand:SI 0 "s_register_operand")
9217 (match_operand:SI 1 "s_register_operand")
9218 (match_operand:DI 2 "s_register_operand")
9219 (match_operand:SI 3 "mve_imm_selective_upto_8")
9220 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9223 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9224 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9225 operands[1], operands[2],
9231 ;; [viwdupq_wb_u_insn])
9233 (define_insn "mve_viwdupq_wb_u<mode>_insn"
9234 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9235 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9236 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9237 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9239 (set (match_operand:SI 1 "s_register_operand" "=Te")
9240 (unspec:SI [(match_dup 2)
9241 (subreg:SI (match_dup 3) 4)
9245 "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9251 (define_expand "mve_viwdupq_m_n_u<mode>"
9252 [(match_operand:MVE_2 0 "s_register_operand")
9253 (match_operand:MVE_2 1 "s_register_operand")
9254 (match_operand:SI 2 "s_register_operand")
9255 (match_operand:DI 3 "s_register_operand")
9256 (match_operand:SI 4 "mve_imm_selective_upto_8")
9257 (match_operand:HI 5 "vpr_register_operand")]
9260 rtx ignore_wb = gen_reg_rtx (SImode);
9261 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9262 operands[1], operands[2],
9263 operands[3], operands[4],
9269 ;; [viwdupq_m_wb_u])
9271 (define_expand "mve_viwdupq_m_wb_u<mode>"
9272 [(match_operand:SI 0 "s_register_operand")
9273 (match_operand:MVE_2 1 "s_register_operand")
9274 (match_operand:SI 2 "s_register_operand")
9275 (match_operand:DI 3 "s_register_operand")
9276 (match_operand:SI 4 "mve_imm_selective_upto_8")
9277 (match_operand:HI 5 "vpr_register_operand")]
9280 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9281 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9282 operands[1], operands[2],
9283 operands[3], operands[4],
9289 ;; [viwdupq_m_wb_u_insn])
9291 (define_insn "mve_viwdupq_m_wb_u<mode>_insn"
9292 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9293 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9294 (match_operand:SI 3 "s_register_operand" "1")
9295 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9296 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9297 (match_operand:HI 6 "vpr_register_operand" "Up")]
9299 (set (match_operand:SI 1 "s_register_operand" "=Te")
9300 (unspec:SI [(match_dup 2)
9302 (subreg:SI (match_dup 4) 4)
9308 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9309 [(set_attr "type" "mve_move")
9310 (set_attr "length""8")])
9313 ;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u]
9315 (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si"
9316 [(set (mem:BLK (scratch))
9318 [(match_operand:V4SI 1 "s_register_operand" "0")
9319 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9320 (match_operand:V4SI 3 "s_register_operand" "w")]
9322 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9323 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9329 ops[0] = operands[1];
9330 ops[1] = operands[2];
9331 ops[2] = operands[3];
9332 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9335 [(set_attr "length" "4")])
9338 ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
9340 (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
9341 [(set (mem:BLK (scratch))
9343 [(match_operand:V4SI 1 "s_register_operand" "0")
9344 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9345 (match_operand:V4SI 3 "s_register_operand" "w")
9346 (match_operand:HI 4 "vpr_register_operand")]
9348 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9349 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9355 ops[0] = operands[1];
9356 ops[1] = operands[2];
9357 ops[2] = operands[3];
9358 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9361 [(set_attr "length" "8")])
9364 ;; [vstrwq_scatter_base_wb_f]
9366 (define_insn "mve_vstrwq_scatter_base_wb_fv4sf"
9367 [(set (mem:BLK (scratch))
9369 [(match_operand:V4SI 1 "s_register_operand" "0")
9370 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9371 (match_operand:V4SF 3 "s_register_operand" "w")]
9373 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9374 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9377 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9380 ops[0] = operands[1];
9381 ops[1] = operands[2];
9382 ops[2] = operands[3];
9383 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9386 [(set_attr "length" "4")])
9389 ;; [vstrwq_scatter_base_wb_p_f]
9391 (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf"
9392 [(set (mem:BLK (scratch))
9394 [(match_operand:V4SI 1 "s_register_operand" "0")
9395 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9396 (match_operand:V4SF 3 "s_register_operand" "w")
9397 (match_operand:HI 4 "vpr_register_operand")]
9399 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9400 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9403 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9406 ops[0] = operands[1];
9407 ops[1] = operands[2];
9408 ops[2] = operands[3];
9409 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9412 [(set_attr "length" "8")])
9415 ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
9417 (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di"
9418 [(set (mem:BLK (scratch))
9420 [(match_operand:V2DI 1 "s_register_operand" "0")
9421 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9422 (match_operand:V2DI 3 "s_register_operand" "w")]
9424 (set (match_operand:V2DI 0 "s_register_operand" "=&w")
9425 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9431 ops[0] = operands[1];
9432 ops[1] = operands[2];
9433 ops[2] = operands[3];
9434 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
9437 [(set_attr "length" "4")])
9440 ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
9442 (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
9443 [(set (mem:BLK (scratch))
9445 [(match_operand:V2DI 1 "s_register_operand" "0")
9446 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9447 (match_operand:V2DI 3 "s_register_operand" "w")
9448 (match_operand:HI 4 "vpr_register_operand")]
9450 (set (match_operand:V2DI 0 "s_register_operand" "=w")
9451 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9457 ops[0] = operands[1];
9458 ops[1] = operands[2];
9459 ops[2] = operands[3];
9460 output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops);
9463 [(set_attr "length" "8")])
9465 (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
9466 [(match_operand:V4SI 0 "s_register_operand")
9467 (match_operand:V4SI 1 "s_register_operand")
9468 (match_operand:SI 2 "mve_vldrd_immediate")
9469 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9472 rtx ignore_result = gen_reg_rtx (V4SImode);
9474 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0],
9475 operands[1], operands[2]));
9479 (define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si"
9480 [(match_operand:V4SI 0 "s_register_operand")
9481 (match_operand:V4SI 1 "s_register_operand")
9482 (match_operand:SI 2 "mve_vldrd_immediate")
9483 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9486 rtx ignore_wb = gen_reg_rtx (V4SImode);
9488 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
9489 operands[1], operands[2]));
9494 ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
9496 (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
9497 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9498 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9499 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9500 (mem:BLK (scratch))]
9502 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9503 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9509 ops[0] = operands[0];
9510 ops[1] = operands[2];
9511 ops[2] = operands[3];
9512 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9515 [(set_attr "length" "4")])
9517 (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
9518 [(match_operand:V4SI 0 "s_register_operand")
9519 (match_operand:V4SI 1 "s_register_operand")
9520 (match_operand:SI 2 "mve_vldrd_immediate")
9521 (match_operand:HI 3 "vpr_register_operand")
9522 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9525 rtx ignore_result = gen_reg_rtx (V4SImode);
9527 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0],
9528 operands[1], operands[2],
9532 (define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si"
9533 [(match_operand:V4SI 0 "s_register_operand")
9534 (match_operand:V4SI 1 "s_register_operand")
9535 (match_operand:SI 2 "mve_vldrd_immediate")
9536 (match_operand:HI 3 "vpr_register_operand")
9537 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9540 rtx ignore_wb = gen_reg_rtx (V4SImode);
9542 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
9543 operands[1], operands[2],
9549 ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
9551 (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
9552 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9553 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9554 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9555 (match_operand:HI 4 "vpr_register_operand" "Up")
9556 (mem:BLK (scratch))]
9558 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9559 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9565 ops[0] = operands[0];
9566 ops[1] = operands[2];
9567 ops[2] = operands[3];
9568 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
9571 [(set_attr "length" "8")])
9573 (define_expand "mve_vldrwq_gather_base_wb_fv4sf"
9574 [(match_operand:V4SI 0 "s_register_operand")
9575 (match_operand:V4SI 1 "s_register_operand")
9576 (match_operand:SI 2 "mve_vldrd_immediate")
9577 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9578 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9580 rtx ignore_result = gen_reg_rtx (V4SFmode);
9582 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0],
9583 operands[1], operands[2]));
9587 (define_expand "mve_vldrwq_gather_base_nowb_fv4sf"
9588 [(match_operand:V4SF 0 "s_register_operand")
9589 (match_operand:V4SI 1 "s_register_operand")
9590 (match_operand:SI 2 "mve_vldrd_immediate")
9591 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9592 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9594 rtx ignore_wb = gen_reg_rtx (V4SImode);
9596 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
9597 operands[1], operands[2]));
9602 ;; [vldrwq_gather_base_wb_f]
9604 (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
9605 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9606 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
9607 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9608 (mem:BLK (scratch))]
9610 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9611 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9614 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9617 ops[0] = operands[0];
9618 ops[1] = operands[2];
9619 ops[2] = operands[3];
9620 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9623 [(set_attr "length" "4")])
9625 (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
9626 [(match_operand:V4SI 0 "s_register_operand")
9627 (match_operand:V4SI 1 "s_register_operand")
9628 (match_operand:SI 2 "mve_vldrd_immediate")
9629 (match_operand:HI 3 "vpr_register_operand")
9630 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9631 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9633 rtx ignore_result = gen_reg_rtx (V4SFmode);
9635 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0],
9636 operands[1], operands[2],
9641 (define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf"
9642 [(match_operand:V4SF 0 "s_register_operand")
9643 (match_operand:V4SI 1 "s_register_operand")
9644 (match_operand:SI 2 "mve_vldrd_immediate")
9645 (match_operand:HI 3 "vpr_register_operand")
9646 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9647 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9649 rtx ignore_wb = gen_reg_rtx (V4SImode);
9651 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
9652 operands[1], operands[2],
9658 ;; [vldrwq_gather_base_wb_z_f]
9660 (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
9661 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9662 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
9663 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9664 (match_operand:HI 4 "vpr_register_operand" "Up")
9665 (mem:BLK (scratch))]
9667 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9668 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9671 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9674 ops[0] = operands[0];
9675 ops[1] = operands[2];
9676 ops[2] = operands[3];
9677 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
9680 [(set_attr "length" "8")])
9682 (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
9683 [(match_operand:V2DI 0 "s_register_operand")
9684 (match_operand:V2DI 1 "s_register_operand")
9685 (match_operand:SI 2 "mve_vldrd_immediate")
9686 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9689 rtx ignore_result = gen_reg_rtx (V2DImode);
9691 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0],
9692 operands[1], operands[2]));
9696 (define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di"
9697 [(match_operand:V2DI 0 "s_register_operand")
9698 (match_operand:V2DI 1 "s_register_operand")
9699 (match_operand:SI 2 "mve_vldrd_immediate")
9700 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9703 rtx ignore_wb = gen_reg_rtx (V2DImode);
9705 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
9706 operands[1], operands[2]));
9712 ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
9714 (define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn"
9715 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
9716 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
9717 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9718 (mem:BLK (scratch))]
9720 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
9721 (unspec:V2DI [(match_dup 2) (match_dup 3)]
9727 ops[0] = operands[0];
9728 ops[1] = operands[2];
9729 ops[2] = operands[3];
9730 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
9733 [(set_attr "length" "4")])
9735 (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
9736 [(match_operand:V2DI 0 "s_register_operand")
9737 (match_operand:V2DI 1 "s_register_operand")
9738 (match_operand:SI 2 "mve_vldrd_immediate")
9739 (match_operand:HI 3 "vpr_register_operand")
9740 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9743 rtx ignore_result = gen_reg_rtx (V2DImode);
9745 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0],
9746 operands[1], operands[2],
9751 (define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di"
9752 [(match_operand:V2DI 0 "s_register_operand")
9753 (match_operand:V2DI 1 "s_register_operand")
9754 (match_operand:SI 2 "mve_vldrd_immediate")
9755 (match_operand:HI 3 "vpr_register_operand")
9756 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9759 rtx ignore_wb = gen_reg_rtx (V2DImode);
9761 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
9762 operands[1], operands[2],
9767 (define_insn "get_fpscr_nzcvqc"
9768 [(set (match_operand:SI 0 "register_operand" "=r")
9769 (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
9771 "vmrs\\t%0, FPSCR_nzcvqc"
9772 [(set_attr "type" "mve_move")])
9774 (define_insn "set_fpscr_nzcvqc"
9775 [(set (reg:SI VFPCC_REGNUM)
9776 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
9777 VUNSPEC_SET_FPSCR_NZCVQC))]
9779 "vmsr\\tFPSCR_nzcvqc, %0"
9780 [(set_attr "type" "mve_move")])
9783 ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
9785 (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
9786 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
9787 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
9788 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9789 (match_operand:HI 4 "vpr_register_operand" "Up")
9790 (mem:BLK (scratch))]
9792 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
9793 (unspec:V2DI [(match_dup 2) (match_dup 3)]
9799 ops[0] = operands[0];
9800 ops[1] = operands[2];
9801 ops[2] = operands[3];
9802 output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops);
9805 [(set_attr "length" "8")])
9807 ;; [vadciq_m_s, vadciq_m_u])
9809 (define_insn "mve_vadciq_m_<supf>v4si"
9810 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9811 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
9812 (match_operand:V4SI 2 "s_register_operand" "w")
9813 (match_operand:V4SI 3 "s_register_operand" "w")
9814 (match_operand:HI 4 "vpr_register_operand" "Up")]
9816 (set (reg:SI VFPCC_REGNUM)
9817 (unspec:SI [(const_int 0)]
9821 "vpst\;vadcit.i32\t%q0, %q2, %q3"
9822 [(set_attr "type" "mve_move")
9823 (set_attr "length" "8")])
9826 ;; [vadciq_u, vadciq_s])
9828 (define_insn "mve_vadciq_<supf>v4si"
9829 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9830 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9831 (match_operand:V4SI 2 "s_register_operand" "w")]
9833 (set (reg:SI VFPCC_REGNUM)
9834 (unspec:SI [(const_int 0)]
9838 "vadci.i32\t%q0, %q1, %q2"
9839 [(set_attr "type" "mve_move")
9840 (set_attr "length" "4")])
9843 ;; [vadcq_m_s, vadcq_m_u])
9845 (define_insn "mve_vadcq_m_<supf>v4si"
9846 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9847 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
9848 (match_operand:V4SI 2 "s_register_operand" "w")
9849 (match_operand:V4SI 3 "s_register_operand" "w")
9850 (match_operand:HI 4 "vpr_register_operand" "Up")]
9852 (set (reg:SI VFPCC_REGNUM)
9853 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9857 "vpst\;vadct.i32\t%q0, %q2, %q3"
9858 [(set_attr "type" "mve_move")
9859 (set_attr "length" "8")])
9862 ;; [vadcq_u, vadcq_s])
9864 (define_insn "mve_vadcq_<supf>v4si"
9865 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9866 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9867 (match_operand:V4SI 2 "s_register_operand" "w")]
9869 (set (reg:SI VFPCC_REGNUM)
9870 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9874 "vadc.i32\t%q0, %q1, %q2"
9875 [(set_attr "type" "mve_move")
9876 (set_attr "length" "4")
9877 (set_attr "conds" "set")])
9880 ;; [vsbciq_m_u, vsbciq_m_s])
9882 (define_insn "mve_vsbciq_m_<supf>v4si"
9883 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9884 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9885 (match_operand:V4SI 2 "s_register_operand" "w")
9886 (match_operand:V4SI 3 "s_register_operand" "w")
9887 (match_operand:HI 4 "vpr_register_operand" "Up")]
9889 (set (reg:SI VFPCC_REGNUM)
9890 (unspec:SI [(const_int 0)]
9894 "vpst\;vsbcit.i32\t%q0, %q2, %q3"
9895 [(set_attr "type" "mve_move")
9896 (set_attr "length" "8")])
9899 ;; [vsbciq_s, vsbciq_u])
9901 (define_insn "mve_vsbciq_<supf>v4si"
9902 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9903 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9904 (match_operand:V4SI 2 "s_register_operand" "w")]
9906 (set (reg:SI VFPCC_REGNUM)
9907 (unspec:SI [(const_int 0)]
9911 "vsbci.i32\t%q0, %q1, %q2"
9912 [(set_attr "type" "mve_move")
9913 (set_attr "length" "4")])
9916 ;; [vsbcq_m_u, vsbcq_m_s])
9918 (define_insn "mve_vsbcq_m_<supf>v4si"
9919 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9920 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9921 (match_operand:V4SI 2 "s_register_operand" "w")
9922 (match_operand:V4SI 3 "s_register_operand" "w")
9923 (match_operand:HI 4 "vpr_register_operand" "Up")]
9925 (set (reg:SI VFPCC_REGNUM)
9926 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9930 "vpst\;vsbct.i32\t%q0, %q2, %q3"
9931 [(set_attr "type" "mve_move")
9932 (set_attr "length" "8")])
9935 ;; [vsbcq_s, vsbcq_u])
9937 (define_insn "mve_vsbcq_<supf>v4si"
9938 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9939 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9940 (match_operand:V4SI 2 "s_register_operand" "w")]
9942 (set (reg:SI VFPCC_REGNUM)
9943 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9947 "vsbc.i32\t%q0, %q1, %q2"
9948 [(set_attr "type" "mve_move")
9949 (set_attr "length" "4")])
9954 (define_insn "mve_vst2q<mode>"
9955 [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
9956 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
9957 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9960 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
9961 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
9964 int regno = REGNO (operands[1]);
9965 ops[0] = gen_rtx_REG (TImode, regno);
9966 ops[1] = gen_rtx_REG (TImode, regno + 4);
9967 rtx reg = operands[0];
9968 while (reg && !REG_P (reg))
9969 reg = XEXP (reg, 0);
9970 gcc_assert (REG_P (reg));
9972 ops[3] = operands[0];
9973 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
9974 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
9977 [(set_attr "length" "8")])
9982 (define_insn "mve_vld2q<mode>"
9983 [(set (match_operand:OI 0 "s_register_operand" "=w")
9984 (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
9985 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9988 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
9989 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
9992 int regno = REGNO (operands[0]);
9993 ops[0] = gen_rtx_REG (TImode, regno);
9994 ops[1] = gen_rtx_REG (TImode, regno + 4);
9995 rtx reg = operands[1];
9996 while (reg && !REG_P (reg))
9997 reg = XEXP (reg, 0);
9998 gcc_assert (REG_P (reg));
10000 ops[3] = operands[1];
10001 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10002 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10005 [(set_attr "length" "8")])
10010 (define_insn "mve_vld4q<mode>"
10011 [(set (match_operand:XI 0 "s_register_operand" "=w")
10012 (unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
10013 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10016 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10017 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10020 int regno = REGNO (operands[0]);
10021 ops[0] = gen_rtx_REG (TImode, regno);
10022 ops[1] = gen_rtx_REG (TImode, regno+4);
10023 ops[2] = gen_rtx_REG (TImode, regno+8);
10024 ops[3] = gen_rtx_REG (TImode, regno + 12);
10025 rtx reg = operands[1];
10026 while (reg && !REG_P (reg))
10027 reg = XEXP (reg, 0);
10028 gcc_assert (REG_P (reg));
10030 ops[5] = operands[1];
10031 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10032 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10033 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10034 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
10037 [(set_attr "length" "16")])
10039 ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
10041 (define_insn "mve_vec_extract<mode><V_elem_l>"
10042 [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r")
10043 (vec_select:<V_elem>
10044 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
10045 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10046 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10047 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10049 if (BYTES_BIG_ENDIAN)
10051 int elt = INTVAL (operands[2]);
10052 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10053 operands[2] = GEN_INT (elt);
10055 return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
10057 [(set_attr "type" "mve_move")])
10059 (define_insn "mve_vec_extractv2didi"
10060 [(set (match_operand:DI 0 "nonimmediate_operand" "=r")
10062 (match_operand:V2DI 1 "s_register_operand" "w")
10063 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10066 int elt = INTVAL (operands[2]);
10067 if (BYTES_BIG_ENDIAN)
10071 return "vmov\t%Q0, %R0, %e1";
10073 return "vmov\t%Q0, %R0, %f1";
10075 [(set_attr "type" "mve_move")])
10077 (define_insn "*mve_vec_extract_sext_internal<mode>"
10078 [(set (match_operand:SI 0 "s_register_operand" "=r")
10080 (vec_select:<V_elem>
10081 (match_operand:MVE_2 1 "s_register_operand" "w")
10082 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10083 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10084 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10086 if (BYTES_BIG_ENDIAN)
10088 int elt = INTVAL (operands[2]);
10089 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10090 operands[2] = GEN_INT (elt);
10092 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
10094 [(set_attr "type" "mve_move")])
10096 (define_insn "*mve_vec_extract_zext_internal<mode>"
10097 [(set (match_operand:SI 0 "s_register_operand" "=r")
10099 (vec_select:<V_elem>
10100 (match_operand:MVE_2 1 "s_register_operand" "w")
10101 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10102 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10103 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10105 if (BYTES_BIG_ENDIAN)
10107 int elt = INTVAL (operands[2]);
10108 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10109 operands[2] = GEN_INT (elt);
10111 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
10113 [(set_attr "type" "mve_move")])
10116 ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
10118 (define_insn "mve_vec_set<mode>_internal"
10119 [(set (match_operand:VQ2 0 "s_register_operand" "=w")
10122 (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
10123 (match_operand:VQ2 3 "s_register_operand" "0")
10124 (match_operand:SI 2 "immediate_operand" "i")))]
10125 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10126 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10128 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10129 if (BYTES_BIG_ENDIAN)
10130 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10131 operands[2] = GEN_INT (elt);
10133 return "vmov.<V_sz_elem>\t%q0[%c2], %1";
10135 [(set_attr "type" "mve_move")])
10137 (define_insn "mve_vec_setv2di_internal"
10138 [(set (match_operand:V2DI 0 "s_register_operand" "=w")
10140 (vec_duplicate:V2DI
10141 (match_operand:DI 1 "nonimmediate_operand" "r"))
10142 (match_operand:V2DI 3 "s_register_operand" "0")
10143 (match_operand:SI 2 "immediate_operand" "i")))]
10146 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10147 if (BYTES_BIG_ENDIAN)
10151 return "vmov\t%e0, %Q1, %R1";
10153 return "vmov\t%f0, %J1, %K1";
10155 [(set_attr "type" "mve_move")])
10160 (define_insn "mve_uqrshll_sat<supf>_di"
10161 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10162 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10163 (match_operand:SI 2 "register_operand" "r")]
10166 "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
10167 [(set_attr "predicable" "yes")])
10172 (define_insn "mve_sqrshrl_sat<supf>_di"
10173 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10174 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10175 (match_operand:SI 2 "register_operand" "r")]
10178 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
10179 [(set_attr "predicable" "yes")])
10184 (define_insn "mve_uqrshl_si"
10185 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10186 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10187 (match_operand:SI 2 "register_operand" "r")]
10190 "uqrshl%?\\t%1, %2"
10191 [(set_attr "predicable" "yes")])
10196 (define_insn "mve_sqrshr_si"
10197 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10198 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10199 (match_operand:SI 2 "register_operand" "r")]
10202 "sqrshr%?\\t%1, %2"
10203 [(set_attr "predicable" "yes")])
10208 (define_insn "mve_uqshll_di"
10209 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10210 (us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10211 (match_operand:SI 2 "immediate_operand" "Pg")))]
10213 "uqshll%?\\t%Q1, %R1, %2"
10214 [(set_attr "predicable" "yes")])
10219 (define_insn "mve_urshrl_di"
10220 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10221 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10222 (match_operand:SI 2 "immediate_operand" "Pg")]
10225 "urshrl%?\\t%Q1, %R1, %2"
10226 [(set_attr "predicable" "yes")])
10231 (define_insn "mve_uqshl_si"
10232 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10233 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0")
10234 (match_operand:SI 2 "immediate_operand" "Pg")))]
10237 [(set_attr "predicable" "yes")])
10242 (define_insn "mve_urshr_si"
10243 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10244 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10245 (match_operand:SI 2 "immediate_operand" "Pg")]
10249 [(set_attr "predicable" "yes")])
10254 (define_insn "mve_sqshl_si"
10255 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10256 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0")
10257 (match_operand:SI 2 "immediate_operand" "Pg")))]
10260 [(set_attr "predicable" "yes")])
10265 (define_insn "mve_srshr_si"
10266 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10267 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0")
10268 (match_operand:SI 2 "immediate_operand" "Pg")]
10272 [(set_attr "predicable" "yes")])
10277 (define_insn "mve_srshrl_di"
10278 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10279 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10280 (match_operand:SI 2 "immediate_operand" "Pg")]
10283 "srshrl%?\\t%Q1, %R1, %2"
10284 [(set_attr "predicable" "yes")])
10289 (define_insn "mve_sqshll_di"
10290 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10291 (ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10292 (match_operand:SI 2 "immediate_operand" "Pg")))]
10294 "sqshll%?\\t%Q1, %R1, %2"
10295 [(set_attr "predicable" "yes")])
10298 ;; [vshlcq_m_u vshlcq_m_s]
10300 (define_expand "mve_vshlcq_m_vec_<supf><mode>"
10301 [(match_operand:MVE_2 0 "s_register_operand")
10302 (match_operand:MVE_2 1 "s_register_operand")
10303 (match_operand:SI 2 "s_register_operand")
10304 (match_operand:SI 3 "mve_imm_32")
10305 (match_operand:HI 4 "vpr_register_operand")
10306 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10309 rtx ignore_wb = gen_reg_rtx (SImode);
10310 emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1],
10311 operands[2], operands[3],
10316 (define_expand "mve_vshlcq_m_carry_<supf><mode>"
10317 [(match_operand:SI 0 "s_register_operand")
10318 (match_operand:MVE_2 1 "s_register_operand")
10319 (match_operand:SI 2 "s_register_operand")
10320 (match_operand:SI 3 "mve_imm_32")
10321 (match_operand:HI 4 "vpr_register_operand")
10322 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10325 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10326 emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0],
10327 operands[1], operands[2],
10328 operands[3], operands[4]));
10332 (define_insn "mve_vshlcq_m_<supf><mode>"
10333 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10334 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10335 (match_operand:SI 3 "s_register_operand" "1")
10336 (match_operand:SI 4 "mve_imm_32" "Rf")
10337 (match_operand:HI 5 "vpr_register_operand" "Up")]
10339 (set (match_operand:SI 1 "s_register_operand" "=r")
10340 (unspec:SI [(match_dup 2)
10347 "vpst\;vshlct\t%q0, %1, %4"
10348 [(set_attr "type" "mve_move")
10349 (set_attr "length" "8")])
10351 ;; CDE instructions on MVE registers.
10353 (define_insn "arm_vcx1qv16qi"
10354 [(set (match_operand:V16QI 0 "register_operand" "=t")
10355 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10356 (match_operand:SI 2 "const_int_mve_cde1_operand" "i")]
10358 "TARGET_CDE && TARGET_HAVE_MVE"
10359 "vcx1\\tp%c1, %q0, #%c2"
10360 [(set_attr "type" "coproc")]
10363 (define_insn "arm_vcx1qav16qi"
10364 [(set (match_operand:V16QI 0 "register_operand" "=t")
10365 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10366 (match_operand:V16QI 2 "register_operand" "0")
10367 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")]
10369 "TARGET_CDE && TARGET_HAVE_MVE"
10370 "vcx1a\\tp%c1, %q0, #%c3"
10371 [(set_attr "type" "coproc")]
10374 (define_insn "arm_vcx2qv16qi"
10375 [(set (match_operand:V16QI 0 "register_operand" "=t")
10376 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10377 (match_operand:V16QI 2 "register_operand" "t")
10378 (match_operand:SI 3 "const_int_mve_cde2_operand" "i")]
10380 "TARGET_CDE && TARGET_HAVE_MVE"
10381 "vcx2\\tp%c1, %q0, %q2, #%c3"
10382 [(set_attr "type" "coproc")]
10385 (define_insn "arm_vcx2qav16qi"
10386 [(set (match_operand:V16QI 0 "register_operand" "=t")
10387 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10388 (match_operand:V16QI 2 "register_operand" "0")
10389 (match_operand:V16QI 3 "register_operand" "t")
10390 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")]
10392 "TARGET_CDE && TARGET_HAVE_MVE"
10393 "vcx2a\\tp%c1, %q0, %q3, #%c4"
10394 [(set_attr "type" "coproc")]
10397 (define_insn "arm_vcx3qv16qi"
10398 [(set (match_operand:V16QI 0 "register_operand" "=t")
10399 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10400 (match_operand:V16QI 2 "register_operand" "t")
10401 (match_operand:V16QI 3 "register_operand" "t")
10402 (match_operand:SI 4 "const_int_mve_cde3_operand" "i")]
10404 "TARGET_CDE && TARGET_HAVE_MVE"
10405 "vcx3\\tp%c1, %q0, %q2, %q3, #%c4"
10406 [(set_attr "type" "coproc")]
10409 (define_insn "arm_vcx3qav16qi"
10410 [(set (match_operand:V16QI 0 "register_operand" "=t")
10411 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10412 (match_operand:V16QI 2 "register_operand" "0")
10413 (match_operand:V16QI 3 "register_operand" "t")
10414 (match_operand:V16QI 4 "register_operand" "t")
10415 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")]
10417 "TARGET_CDE && TARGET_HAVE_MVE"
10418 "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5"
10419 [(set_attr "type" "coproc")]
10422 (define_insn "arm_vcx1q<a>_p_v16qi"
10423 [(set (match_operand:V16QI 0 "register_operand" "=t")
10424 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10425 (match_operand:V16QI 2 "register_operand" "0")
10426 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")
10427 (match_operand:HI 4 "vpr_register_operand" "Up")]
10429 "TARGET_CDE && TARGET_HAVE_MVE"
10430 "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3"
10431 [(set_attr "type" "coproc")
10432 (set_attr "length" "8")]
10435 (define_insn "arm_vcx2q<a>_p_v16qi"
10436 [(set (match_operand:V16QI 0 "register_operand" "=t")
10437 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10438 (match_operand:V16QI 2 "register_operand" "0")
10439 (match_operand:V16QI 3 "register_operand" "t")
10440 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")
10441 (match_operand:HI 5 "vpr_register_operand" "Up")]
10443 "TARGET_CDE && TARGET_HAVE_MVE"
10444 "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4"
10445 [(set_attr "type" "coproc")
10446 (set_attr "length" "8")]
10449 (define_insn "arm_vcx3q<a>_p_v16qi"
10450 [(set (match_operand:V16QI 0 "register_operand" "=t")
10451 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10452 (match_operand:V16QI 2 "register_operand" "0")
10453 (match_operand:V16QI 3 "register_operand" "t")
10454 (match_operand:V16QI 4 "register_operand" "t")
10455 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")
10456 (match_operand:HI 6 "vpr_register_operand" "Up")]
10458 "TARGET_CDE && TARGET_HAVE_MVE"
10459 "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5"
10460 [(set_attr "type" "coproc")
10461 (set_attr "length" "8")]
10464 (define_insn "*movmisalign<mode>_mve_store"
10465 [(set (match_operand:MVE_VLD_ST 0 "neon_permissive_struct_operand" "=Ux")
10466 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "s_register_operand" " w")]
10467 UNSPEC_MISALIGNED_ACCESS))]
10468 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10469 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))
10470 && !BYTES_BIG_ENDIAN && unaligned_access"
10471 "vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0"
10472 [(set_attr "type" "mve_store")]
10476 (define_insn "*movmisalign<mode>_mve_load"
10477 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
10478 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "neon_permissive_struct_operand" " Ux")]
10479 UNSPEC_MISALIGNED_ACCESS))]
10480 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10481 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))
10482 && !BYTES_BIG_ENDIAN && unaligned_access"
10483 "vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1"
10484 [(set_attr "type" "mve_load")]