1 ;; Arm M-profile Vector Extension Machine Description
2 ;; Copyright (C) 2019-2022 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")
538 (define_insn "mve_vec_unpack<US>_lo_<mode>"
539 [(set (match_operand:<V_unpack> 0 "register_operand" "=w")
540 (SE:<V_unpack> (vec_select:<V_HALF>
541 (match_operand:MVE_3 1 "register_operand" "w")
542 (match_operand:MVE_3 2 "vect_par_constant_low" ""))))]
544 "vmovlb.<US>%#<V_sz_elem> %q0, %q1"
545 [(set_attr "type" "mve_move")]
548 (define_insn "mve_vec_unpack<US>_hi_<mode>"
549 [(set (match_operand:<V_unpack> 0 "register_operand" "=w")
550 (SE:<V_unpack> (vec_select:<V_HALF>
551 (match_operand:MVE_3 1 "register_operand" "w")
552 (match_operand:MVE_3 2 "vect_par_constant_high" ""))))]
554 "vmovlt.<US>%#<V_sz_elem> %q0, %q1"
555 [(set_attr "type" "mve_move")]
559 ;; [vcvtpq_s, vcvtpq_u])
561 (define_insn "mve_vcvtpq_<supf><mode>"
563 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
564 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
567 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
568 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
569 [(set_attr "type" "mve_move")
573 ;; [vcvtnq_s, vcvtnq_u])
575 (define_insn "mve_vcvtnq_<supf><mode>"
577 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
578 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
581 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
582 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
583 [(set_attr "type" "mve_move")
587 ;; [vcvtmq_s, vcvtmq_u])
589 (define_insn "mve_vcvtmq_<supf><mode>"
591 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
592 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
595 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
596 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
597 [(set_attr "type" "mve_move")
601 ;; [vcvtaq_u, vcvtaq_s])
603 (define_insn "mve_vcvtaq_<supf><mode>"
605 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
606 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
609 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
610 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
611 [(set_attr "type" "mve_move")
615 ;; [vmvnq_n_u, vmvnq_n_s])
617 (define_insn "mve_vmvnq_n_<supf><mode>"
619 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
620 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
624 "vmvn.i%#<V_sz_elem> %q0, %1"
625 [(set_attr "type" "mve_move")
629 ;; [vrev16q_u, vrev16q_s])
631 (define_insn "mve_vrev16q_<supf>v16qi"
633 (set (match_operand:V16QI 0 "s_register_operand" "=w")
634 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
639 [(set_attr "type" "mve_move")
643 ;; [vaddlvq_s vaddlvq_u])
645 (define_insn "mve_vaddlvq_<supf>v4si"
647 (set (match_operand:DI 0 "s_register_operand" "=r")
648 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
652 "vaddlv.<supf>32 %Q0, %R0, %q1"
653 [(set_attr "type" "mve_move")
657 ;; [vctp8q vctp16q vctp32q vctp64q])
659 (define_insn "mve_vctp<mode1>qhi"
661 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
662 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
667 [(set_attr "type" "mve_move")
673 (define_insn "mve_vpnothi"
675 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
676 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
681 [(set_attr "type" "mve_move")
687 (define_insn "mve_vsubq_n_f<mode>"
689 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
690 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
691 (match_operand:<V_elem> 2 "s_register_operand" "r")]
694 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
695 "vsub.f<V_sz_elem> %q0, %q1, %2"
696 [(set_attr "type" "mve_move")
702 (define_insn "mve_vbrsrq_n_f<mode>"
704 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
705 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
706 (match_operand:SI 2 "s_register_operand" "r")]
709 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
710 "vbrsr.<V_sz_elem> %q0, %q1, %2"
711 [(set_attr "type" "mve_move")
715 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
717 (define_insn "mve_vcvtq_n_to_f_<supf><mode>"
719 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
720 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
721 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
724 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
725 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
726 [(set_attr "type" "mve_move")
731 (define_insn "mve_vcreateq_f<mode>"
733 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
734 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
735 (match_operand:DI 2 "s_register_operand" "r")]
738 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
739 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
740 [(set_attr "type" "mve_move")
741 (set_attr "length""8")])
744 ;; [vcreateq_u, vcreateq_s])
746 (define_insn "mve_vcreateq_<supf><mode>"
748 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
749 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
750 (match_operand:DI 2 "s_register_operand" "r")]
754 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
755 [(set_attr "type" "mve_move")
756 (set_attr "length""8")])
759 ;; [vshrq_n_s, vshrq_n_u])
761 ;; Version that takes an immediate as operand 2.
762 (define_insn "mve_vshrq_n_<supf><mode>"
764 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
765 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
766 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
770 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
771 [(set_attr "type" "mve_move")
774 ;; Versions that take constant vectors as operand 2 (with all elements
776 (define_insn "mve_vshrq_n_s<mode>_imm"
778 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
779 (ashiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
780 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i")))
784 return neon_output_shift_immediate ("vshr", 's', &operands[2],
786 VALID_NEON_QREG_MODE (<MODE>mode),
789 [(set_attr "type" "mve_move")
791 (define_insn "mve_vshrq_n_u<mode>_imm"
793 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
794 (lshiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
795 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i")))
799 return neon_output_shift_immediate ("vshr", 'u', &operands[2],
801 VALID_NEON_QREG_MODE (<MODE>mode),
804 [(set_attr "type" "mve_move")
808 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
810 (define_insn "mve_vcvtq_n_from_f_<supf><mode>"
812 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
813 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
814 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
817 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
818 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
819 [(set_attr "type" "mve_move")
825 (define_insn "mve_vaddlvq_p_<supf>v4si"
827 (set (match_operand:DI 0 "s_register_operand" "=r")
828 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
829 (match_operand:HI 2 "vpr_register_operand" "Up")]
833 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
834 [(set_attr "type" "mve_move")
835 (set_attr "length""8")])
838 ;; [vcmpneq_, vcmpcsq_, vcmpeqq_, vcmpgeq_, vcmpgtq_, vcmphiq_, vcmpleq_, vcmpltq_])
840 (define_insn "@mve_vcmp<mve_cmp_op>q_<mode>"
842 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
843 (MVE_COMPARISONS:HI (match_operand:MVE_2 1 "s_register_operand" "w")
844 (match_operand:MVE_2 2 "s_register_operand" "w")))
847 "vcmp.<mve_cmp_type>%#<V_sz_elem> <mve_cmp_op>, %q1, %q2"
848 [(set_attr "type" "mve_move")
852 ;; [vcmpcsq_n_, vcmpeqq_n_, vcmpgeq_n_, vcmpgtq_n_, vcmphiq_n_, vcmpleq_n_, vcmpltq_n_, vcmpneq_n_])
854 (define_insn "mve_vcmp<mve_cmp_op>q_n_<mode>"
856 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
857 (MVE_COMPARISONS:HI (match_operand:MVE_2 1 "s_register_operand" "w")
858 (match_operand:<V_elem> 2 "s_register_operand" "r")))
861 "vcmp.<mve_cmp_type>%#<V_sz_elem> <mve_cmp_op>, %q1, %2"
862 [(set_attr "type" "mve_move")
866 ;; [vshlq_s, vshlq_u])
870 ;; [vabdq_s, vabdq_u])
872 (define_insn "mve_vabdq_<supf><mode>"
874 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
875 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
876 (match_operand:MVE_2 2 "s_register_operand" "w")]
880 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
881 [(set_attr "type" "mve_move")
885 ;; [vaddq_n_s, vaddq_n_u])
887 (define_insn "mve_vaddq_n_<supf><mode>"
889 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
890 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
891 (match_operand:<V_elem> 2 "s_register_operand" "r")]
895 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
896 [(set_attr "type" "mve_move")
900 ;; [vaddvaq_s, vaddvaq_u])
902 (define_insn "mve_vaddvaq_<supf><mode>"
904 (set (match_operand:SI 0 "s_register_operand" "=Te")
905 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
906 (match_operand:MVE_2 2 "s_register_operand" "w")]
910 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
911 [(set_attr "type" "mve_move")
915 ;; [vaddvq_p_u, vaddvq_p_s])
917 (define_insn "mve_vaddvq_p_<supf><mode>"
919 (set (match_operand:SI 0 "s_register_operand" "=Te")
920 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
921 (match_operand:HI 2 "vpr_register_operand" "Up")]
925 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
926 [(set_attr "type" "mve_move")
927 (set_attr "length""8")])
930 ;; [vandq_u, vandq_s])
932 ;; signed and unsigned versions are the same: define the unsigned
933 ;; insn, and use an expander for the signed one as we still reference
934 ;; both names from arm_mve.h.
935 ;; We use the same code as in neon.md (TODO: avoid this duplication).
936 (define_insn "mve_vandq_u<mode>"
938 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
939 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
940 (match_operand:MVE_2 2 "neon_inv_logic_op2" "w,DL")))
945 * return neon_output_logic_immediate (\"vand\", &operands[2], <MODE>mode, 1, VALID_NEON_QREG_MODE (<MODE>mode));"
946 [(set_attr "type" "mve_move")
948 (define_expand "mve_vandq_s<mode>"
950 (set (match_operand:MVE_2 0 "s_register_operand")
951 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
952 (match_operand:MVE_2 2 "neon_inv_logic_op2")))
958 ;; [vbicq_s, vbicq_u])
960 (define_insn "mve_vbicq_u<mode>"
962 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
963 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
964 (match_operand:MVE_2 1 "s_register_operand" "w")))
967 "vbic\t%q0, %q1, %q2"
968 [(set_attr "type" "mve_move")
971 (define_expand "mve_vbicq_s<mode>"
973 (set (match_operand:MVE_2 0 "s_register_operand")
974 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
975 (match_operand:MVE_2 1 "s_register_operand")))
981 ;; [vbrsrq_n_u, vbrsrq_n_s])
983 (define_insn "mve_vbrsrq_n_<supf><mode>"
985 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
986 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
987 (match_operand:SI 2 "s_register_operand" "r")]
991 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
992 [(set_attr "type" "mve_move")
996 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
998 (define_insn "mve_vcaddq<mve_rot><mode>"
1000 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1001 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1002 (match_operand:MVE_2 2 "s_register_operand" "w")]
1006 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
1007 [(set_attr "type" "mve_move")
1010 ;; Auto vectorizer pattern for int vcadd
1011 (define_expand "cadd<rot><mode>3"
1012 [(set (match_operand:MVE_2 0 "register_operand")
1013 (unspec:MVE_2 [(match_operand:MVE_2 1 "register_operand")
1014 (match_operand:MVE_2 2 "register_operand")]
1016 "TARGET_HAVE_MVE && !BYTES_BIG_ENDIAN"
1020 ;; [veorq_u, veorq_s])
1022 (define_insn "mve_veorq_u<mode>"
1024 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1025 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1026 (match_operand:MVE_2 2 "s_register_operand" "w")))
1029 "veor\t%q0, %q1, %q2"
1030 [(set_attr "type" "mve_move")
1032 (define_expand "mve_veorq_s<mode>"
1034 (set (match_operand:MVE_2 0 "s_register_operand")
1035 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1036 (match_operand:MVE_2 2 "s_register_operand")))
1042 ;; [vhaddq_n_u, vhaddq_n_s])
1044 (define_insn "mve_vhaddq_n_<supf><mode>"
1046 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1047 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1048 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1052 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1053 [(set_attr "type" "mve_move")
1057 ;; [vhaddq_s, vhaddq_u])
1059 (define_insn "@mve_vhaddq_<supf><mode>"
1061 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1062 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1063 (match_operand:MVE_2 2 "s_register_operand" "w")]
1067 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1068 [(set_attr "type" "mve_move")
1072 ;; [vhcaddq_rot270_s])
1074 (define_insn "mve_vhcaddq_rot270_s<mode>"
1076 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1077 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1078 (match_operand:MVE_2 2 "s_register_operand" "w")]
1082 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1083 [(set_attr "type" "mve_move")
1087 ;; [vhcaddq_rot90_s])
1089 (define_insn "mve_vhcaddq_rot90_s<mode>"
1091 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1092 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1093 (match_operand:MVE_2 2 "s_register_operand" "w")]
1097 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1098 [(set_attr "type" "mve_move")
1102 ;; [vhsubq_n_u, vhsubq_n_s])
1104 (define_insn "mve_vhsubq_n_<supf><mode>"
1106 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1107 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1108 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1112 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1113 [(set_attr "type" "mve_move")
1117 ;; [vhsubq_s, vhsubq_u])
1119 (define_insn "mve_vhsubq_<supf><mode>"
1121 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1122 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1123 (match_operand:MVE_2 2 "s_register_operand" "w")]
1127 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1128 [(set_attr "type" "mve_move")
1134 (define_insn "mve_vmaxaq_s<mode>"
1136 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1137 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1138 (match_operand:MVE_2 2 "s_register_operand" "w")]
1142 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1143 [(set_attr "type" "mve_move")
1149 (define_insn "mve_vmaxavq_s<mode>"
1151 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1152 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1153 (match_operand:MVE_2 2 "s_register_operand" "w")]
1157 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1158 [(set_attr "type" "mve_move")
1162 ;; [vmaxq_u, vmaxq_s])
1164 (define_insn "mve_vmaxq_s<mode>"
1166 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1167 (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1168 (match_operand:MVE_2 2 "s_register_operand" "w")))
1171 "vmax.%#<V_s_elem>\t%q0, %q1, %q2"
1172 [(set_attr "type" "mve_move")
1175 (define_insn "mve_vmaxq_u<mode>"
1177 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1178 (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1179 (match_operand:MVE_2 2 "s_register_operand" "w")))
1182 "vmax.%#<V_u_elem>\t%q0, %q1, %q2"
1183 [(set_attr "type" "mve_move")
1187 ;; [vmaxvq_u, vmaxvq_s])
1189 (define_insn "mve_vmaxvq_<supf><mode>"
1191 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1192 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1193 (match_operand:MVE_2 2 "s_register_operand" "w")]
1197 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1198 [(set_attr "type" "mve_move")
1204 (define_insn "mve_vminaq_s<mode>"
1206 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1207 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1208 (match_operand:MVE_2 2 "s_register_operand" "w")]
1212 "vmina.s%#<V_sz_elem>\t%q0, %q2"
1213 [(set_attr "type" "mve_move")
1219 (define_insn "mve_vminavq_s<mode>"
1221 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1222 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1223 (match_operand:MVE_2 2 "s_register_operand" "w")]
1227 "vminav.s%#<V_sz_elem>\t%0, %q2"
1228 [(set_attr "type" "mve_move")
1232 ;; [vminq_s, vminq_u])
1234 (define_insn "mve_vminq_s<mode>"
1236 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1237 (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1238 (match_operand:MVE_2 2 "s_register_operand" "w")))
1241 "vmin.%#<V_s_elem>\t%q0, %q1, %q2"
1242 [(set_attr "type" "mve_move")
1245 (define_insn "mve_vminq_u<mode>"
1247 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1248 (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1249 (match_operand:MVE_2 2 "s_register_operand" "w")))
1252 "vmin.%#<V_u_elem>\t%q0, %q1, %q2"
1253 [(set_attr "type" "mve_move")
1257 ;; [vminvq_u, vminvq_s])
1259 (define_insn "mve_vminvq_<supf><mode>"
1261 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1262 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1263 (match_operand:MVE_2 2 "s_register_operand" "w")]
1267 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
1268 [(set_attr "type" "mve_move")
1272 ;; [vmladavq_u, vmladavq_s])
1274 (define_insn "mve_vmladavq_<supf><mode>"
1276 (set (match_operand:SI 0 "s_register_operand" "=Te")
1277 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1278 (match_operand:MVE_2 2 "s_register_operand" "w")]
1282 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
1283 [(set_attr "type" "mve_move")
1289 (define_insn "mve_vmladavxq_s<mode>"
1291 (set (match_operand:SI 0 "s_register_operand" "=Te")
1292 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1293 (match_operand:MVE_2 2 "s_register_operand" "w")]
1297 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1298 [(set_attr "type" "mve_move")
1304 (define_insn "mve_vmlsdavq_s<mode>"
1306 (set (match_operand:SI 0 "s_register_operand" "=Te")
1307 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1308 (match_operand:MVE_2 2 "s_register_operand" "w")]
1312 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
1313 [(set_attr "type" "mve_move")
1319 (define_insn "mve_vmlsdavxq_s<mode>"
1321 (set (match_operand:SI 0 "s_register_operand" "=Te")
1322 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1323 (match_operand:MVE_2 2 "s_register_operand" "w")]
1327 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1328 [(set_attr "type" "mve_move")
1332 ;; [vmulhq_s, vmulhq_u])
1334 (define_insn "mve_vmulhq_<supf><mode>"
1336 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1337 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1338 (match_operand:MVE_2 2 "s_register_operand" "w")]
1342 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1343 [(set_attr "type" "mve_move")
1347 ;; [vmullbq_int_u, vmullbq_int_s])
1349 (define_insn "mve_vmullbq_int_<supf><mode>"
1351 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1352 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1353 (match_operand:MVE_2 2 "s_register_operand" "w")]
1357 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1358 [(set_attr "type" "mve_move")
1362 ;; [vmulltq_int_u, vmulltq_int_s])
1364 (define_insn "mve_vmulltq_int_<supf><mode>"
1366 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1367 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1368 (match_operand:MVE_2 2 "s_register_operand" "w")]
1372 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1373 [(set_attr "type" "mve_move")
1377 ;; [vmulq_n_u, vmulq_n_s])
1379 (define_insn "mve_vmulq_n_<supf><mode>"
1381 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1382 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1383 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1387 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
1388 [(set_attr "type" "mve_move")
1392 ;; [vmulq_u, vmulq_s])
1394 (define_insn "mve_vmulq_<supf><mode>"
1396 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1397 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1398 (match_operand:MVE_2 2 "s_register_operand" "w")]
1402 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1403 [(set_attr "type" "mve_move")
1406 (define_insn "mve_vmulq<mode>"
1408 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1409 (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1410 (match_operand:MVE_2 2 "s_register_operand" "w")))
1413 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1414 [(set_attr "type" "mve_move")
1418 ;; [vornq_u, vornq_s])
1420 (define_insn "mve_vornq_s<mode>"
1422 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1423 (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
1424 (match_operand:MVE_2 1 "s_register_operand" "w")))
1427 "vorn\t%q0, %q1, %q2"
1428 [(set_attr "type" "mve_move")
1431 (define_expand "mve_vornq_u<mode>"
1433 (set (match_operand:MVE_2 0 "s_register_operand")
1434 (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
1435 (match_operand:MVE_2 1 "s_register_operand")))
1441 ;; [vorrq_s, vorrq_u])
1443 ;; signed and unsigned versions are the same: define the unsigned
1444 ;; insn, and use an expander for the signed one as we still reference
1445 ;; both names from arm_mve.h.
1446 ;; We use the same code as in neon.md (TODO: avoid this duplication).
1447 (define_insn "mve_vorrq_s<mode>"
1449 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
1450 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
1451 (match_operand:MVE_2 2 "neon_logic_op2" "w,Dl")))
1456 * return neon_output_logic_immediate (\"vorr\", &operands[2], <MODE>mode, 0, VALID_NEON_QREG_MODE (<MODE>mode));"
1457 [(set_attr "type" "mve_move")
1459 (define_expand "mve_vorrq_u<mode>"
1461 (set (match_operand:MVE_2 0 "s_register_operand")
1462 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1463 (match_operand:MVE_2 2 "neon_logic_op2")))
1469 ;; [vqaddq_n_s, vqaddq_n_u])
1471 (define_insn "mve_vqaddq_n_<supf><mode>"
1473 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1474 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1475 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1479 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1480 [(set_attr "type" "mve_move")
1484 ;; [vqaddq_u, vqaddq_s])
1486 (define_insn "mve_vqaddq_<supf><mode>"
1488 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1489 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1490 (match_operand:MVE_2 2 "s_register_operand" "w")]
1494 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1495 [(set_attr "type" "mve_move")
1501 (define_insn "mve_vqdmulhq_n_s<mode>"
1503 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1504 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1505 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1509 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1510 [(set_attr "type" "mve_move")
1516 (define_insn "mve_vqdmulhq_s<mode>"
1518 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1519 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1520 (match_operand:MVE_2 2 "s_register_operand" "w")]
1524 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1525 [(set_attr "type" "mve_move")
1531 (define_insn "mve_vqrdmulhq_n_s<mode>"
1533 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1534 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1535 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1539 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1540 [(set_attr "type" "mve_move")
1546 (define_insn "mve_vqrdmulhq_s<mode>"
1548 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1549 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1550 (match_operand:MVE_2 2 "s_register_operand" "w")]
1554 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1555 [(set_attr "type" "mve_move")
1559 ;; [vqrshlq_n_s, vqrshlq_n_u])
1561 (define_insn "mve_vqrshlq_n_<supf><mode>"
1563 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1564 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1565 (match_operand:SI 2 "s_register_operand" "r")]
1569 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1570 [(set_attr "type" "mve_move")
1574 ;; [vqrshlq_s, vqrshlq_u])
1576 (define_insn "mve_vqrshlq_<supf><mode>"
1578 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1579 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1580 (match_operand:MVE_2 2 "s_register_operand" "w")]
1584 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1585 [(set_attr "type" "mve_move")
1589 ;; [vqshlq_n_s, vqshlq_n_u])
1591 (define_insn "mve_vqshlq_n_<supf><mode>"
1593 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1594 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1595 (match_operand:SI 2 "immediate_operand" "i")]
1599 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1600 [(set_attr "type" "mve_move")
1604 ;; [vqshlq_r_u, vqshlq_r_s])
1606 (define_insn "mve_vqshlq_r_<supf><mode>"
1608 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1609 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1610 (match_operand:SI 2 "s_register_operand" "r")]
1614 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
1615 [(set_attr "type" "mve_move")
1619 ;; [vqshlq_s, vqshlq_u])
1621 (define_insn "mve_vqshlq_<supf><mode>"
1623 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1624 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1625 (match_operand:MVE_2 2 "s_register_operand" "w")]
1629 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1630 [(set_attr "type" "mve_move")
1636 (define_insn "mve_vqshluq_n_s<mode>"
1638 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1639 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1640 (match_operand:SI 2 "mve_imm_7" "Ra")]
1644 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
1645 [(set_attr "type" "mve_move")
1649 ;; [vqsubq_n_s, vqsubq_n_u])
1651 (define_insn "mve_vqsubq_n_<supf><mode>"
1653 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1654 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1655 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1659 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1660 [(set_attr "type" "mve_move")
1664 ;; [vqsubq_u, vqsubq_s])
1666 (define_insn "mve_vqsubq_<supf><mode>"
1668 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1669 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1670 (match_operand:MVE_2 2 "s_register_operand" "w")]
1674 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1675 [(set_attr "type" "mve_move")
1679 ;; [vrhaddq_s, vrhaddq_u])
1681 (define_insn "@mve_vrhaddq_<supf><mode>"
1683 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1684 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1685 (match_operand:MVE_2 2 "s_register_operand" "w")]
1689 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1690 [(set_attr "type" "mve_move")
1694 ;; [vrmulhq_s, vrmulhq_u])
1696 (define_insn "mve_vrmulhq_<supf><mode>"
1698 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1699 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1700 (match_operand:MVE_2 2 "s_register_operand" "w")]
1704 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1705 [(set_attr "type" "mve_move")
1709 ;; [vrshlq_n_u, vrshlq_n_s])
1711 (define_insn "mve_vrshlq_n_<supf><mode>"
1713 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1714 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1715 (match_operand:SI 2 "s_register_operand" "r")]
1719 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1720 [(set_attr "type" "mve_move")
1724 ;; [vrshlq_s, vrshlq_u])
1726 (define_insn "mve_vrshlq_<supf><mode>"
1728 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1729 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1730 (match_operand:MVE_2 2 "s_register_operand" "w")]
1734 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1735 [(set_attr "type" "mve_move")
1739 ;; [vrshrq_n_s, vrshrq_n_u])
1741 (define_insn "mve_vrshrq_n_<supf><mode>"
1743 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1744 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1745 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1749 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1750 [(set_attr "type" "mve_move")
1754 ;; [vshlq_n_u, vshlq_n_s])
1756 (define_insn "mve_vshlq_n_<supf><mode>"
1758 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1759 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1760 (match_operand:SI 2 "immediate_operand" "i")]
1764 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1765 [(set_attr "type" "mve_move")
1769 ;; [vshlq_r_s, vshlq_r_u])
1771 (define_insn "mve_vshlq_r_<supf><mode>"
1773 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1774 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1775 (match_operand:SI 2 "s_register_operand" "r")]
1779 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
1780 [(set_attr "type" "mve_move")
1784 ;; [vsubq_n_s, vsubq_n_u])
1786 (define_insn "mve_vsubq_n_<supf><mode>"
1788 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1789 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1790 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1794 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
1795 [(set_attr "type" "mve_move")
1799 ;; [vsubq_s, vsubq_u])
1801 (define_insn "mve_vsubq_<supf><mode>"
1803 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1804 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1805 (match_operand:MVE_2 2 "s_register_operand" "w")]
1809 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1810 [(set_attr "type" "mve_move")
1813 (define_insn "mve_vsubq<mode>"
1815 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1816 (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1817 (match_operand:MVE_2 2 "s_register_operand" "w")))
1820 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1821 [(set_attr "type" "mve_move")
1827 (define_insn "mve_vabdq_f<mode>"
1829 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1830 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1831 (match_operand:MVE_0 2 "s_register_operand" "w")]
1834 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1835 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
1836 [(set_attr "type" "mve_move")
1840 ;; [vaddlvaq_s vaddlvaq_u])
1842 (define_insn "mve_vaddlvaq_<supf>v4si"
1844 (set (match_operand:DI 0 "s_register_operand" "=r")
1845 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
1846 (match_operand:V4SI 2 "s_register_operand" "w")]
1850 "vaddlva.<supf>32 %Q0, %R0, %q2"
1851 [(set_attr "type" "mve_move")
1857 (define_insn "mve_vaddq_n_f<mode>"
1859 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1860 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1861 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1864 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1865 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
1866 [(set_attr "type" "mve_move")
1872 (define_insn "mve_vandq_f<mode>"
1874 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1875 (and:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
1876 (match_operand:MVE_0 2 "s_register_operand" "w")))
1878 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1879 "vand %q0, %q1, %q2"
1880 [(set_attr "type" "mve_move")
1886 (define_insn "mve_vbicq_f<mode>"
1888 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1889 (and:MVE_0 (not:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))
1890 (match_operand:MVE_0 2 "s_register_operand" "w")))
1892 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1893 "vbic %q0, %q1, %q2"
1894 [(set_attr "type" "mve_move")
1898 ;; [vbicq_n_s, vbicq_n_u])
1900 (define_insn "mve_vbicq_n_<supf><mode>"
1902 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1903 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
1904 (match_operand:SI 2 "immediate_operand" "i")]
1908 "vbic.i%#<V_sz_elem> %q0, %2"
1909 [(set_attr "type" "mve_move")
1913 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
1915 (define_insn "mve_vcaddq<mve_rot><mode>"
1917 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
1918 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1919 (match_operand:MVE_0 2 "s_register_operand" "w")]
1922 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1923 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
1924 [(set_attr "type" "mve_move")
1928 ;; [vcmpeqq_f, vcmpgeq_f, vcmpgtq_f, vcmpleq_f, vcmpltq_f, vcmpneq_f])
1930 (define_insn "@mve_vcmp<mve_cmp_op>q_f<mode>"
1932 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1933 (MVE_FP_COMPARISONS:HI (match_operand:MVE_0 1 "s_register_operand" "w")
1934 (match_operand:MVE_0 2 "s_register_operand" "w")))
1936 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1937 "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %q2"
1938 [(set_attr "type" "mve_move")
1942 ;; [vcmpeqq_n_f, vcmpgeq_n_f, vcmpgtq_n_f, vcmpleq_n_f, vcmpltq_n_f, vcmpneq_n_f])
1944 (define_insn "@mve_vcmp<mve_cmp_op>q_n_f<mode>"
1946 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1947 (MVE_FP_COMPARISONS:HI (match_operand:MVE_0 1 "s_register_operand" "w")
1948 (match_operand:<V_elem> 2 "s_register_operand" "r")))
1950 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1951 "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %2"
1952 [(set_attr "type" "mve_move")
1956 ;; [vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270])
1958 (define_insn "mve_vcmulq<mve_rot><mode>"
1960 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
1961 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1962 (match_operand:MVE_0 2 "s_register_operand" "w")]
1965 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1966 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
1967 [(set_attr "type" "mve_move")
1971 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
1973 (define_insn "mve_vctp<mode1>q_mhi"
1975 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1976 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
1977 (match_operand:HI 2 "vpr_register_operand" "Up")]
1981 "vpst\;vctpt.<mode1> %1"
1982 [(set_attr "type" "mve_move")
1983 (set_attr "length""8")])
1986 ;; [vcvtbq_f16_f32])
1988 (define_insn "mve_vcvtbq_f16_f32v8hf"
1990 (set (match_operand:V8HF 0 "s_register_operand" "=w")
1991 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
1992 (match_operand:V4SF 2 "s_register_operand" "w")]
1995 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1996 "vcvtb.f16.f32 %q0, %q2"
1997 [(set_attr "type" "mve_move")
2001 ;; [vcvttq_f16_f32])
2003 (define_insn "mve_vcvttq_f16_f32v8hf"
2005 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2006 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2007 (match_operand:V4SF 2 "s_register_operand" "w")]
2010 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2011 "vcvtt.f16.f32 %q0, %q2"
2012 [(set_attr "type" "mve_move")
2018 (define_insn "mve_veorq_f<mode>"
2020 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2021 (xor:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2022 (match_operand:MVE_0 2 "s_register_operand" "w")))
2024 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2025 "veor %q0, %q1, %q2"
2026 [(set_attr "type" "mve_move")
2032 (define_insn "mve_vmaxnmaq_f<mode>"
2034 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2035 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2036 (match_operand:MVE_0 2 "s_register_operand" "w")]
2039 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2040 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
2041 [(set_attr "type" "mve_move")
2047 (define_insn "mve_vmaxnmavq_f<mode>"
2049 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2050 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2051 (match_operand:MVE_0 2 "s_register_operand" "w")]
2054 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2055 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
2056 [(set_attr "type" "mve_move")
2062 (define_insn "mve_vmaxnmq_f<mode>"
2064 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2065 (smax:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2066 (match_operand:MVE_0 2 "s_register_operand" "w")))
2068 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2069 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
2070 [(set_attr "type" "mve_move")
2076 (define_insn "mve_vmaxnmvq_f<mode>"
2078 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2079 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2080 (match_operand:MVE_0 2 "s_register_operand" "w")]
2083 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2084 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
2085 [(set_attr "type" "mve_move")
2091 (define_insn "mve_vminnmaq_f<mode>"
2093 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2094 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2095 (match_operand:MVE_0 2 "s_register_operand" "w")]
2098 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2099 "vminnma.f%#<V_sz_elem> %q0, %q2"
2100 [(set_attr "type" "mve_move")
2106 (define_insn "mve_vminnmavq_f<mode>"
2108 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2109 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2110 (match_operand:MVE_0 2 "s_register_operand" "w")]
2113 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2114 "vminnmav.f%#<V_sz_elem> %0, %q2"
2115 [(set_attr "type" "mve_move")
2121 (define_insn "mve_vminnmq_f<mode>"
2123 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2124 (smin:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2125 (match_operand:MVE_0 2 "s_register_operand" "w")))
2127 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2128 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
2129 [(set_attr "type" "mve_move")
2135 (define_insn "mve_vminnmvq_f<mode>"
2137 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2138 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2139 (match_operand:MVE_0 2 "s_register_operand" "w")]
2142 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2143 "vminnmv.f%#<V_sz_elem> %0, %q2"
2144 [(set_attr "type" "mve_move")
2148 ;; [vmlaldavq_u, vmlaldavq_s])
2150 (define_insn "mve_vmlaldavq_<supf><mode>"
2152 (set (match_operand:DI 0 "s_register_operand" "=r")
2153 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2154 (match_operand:MVE_5 2 "s_register_operand" "w")]
2158 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2159 [(set_attr "type" "mve_move")
2165 (define_insn "mve_vmlaldavxq_s<mode>"
2167 (set (match_operand:DI 0 "s_register_operand" "=r")
2168 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2169 (match_operand:MVE_5 2 "s_register_operand" "w")]
2173 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2174 [(set_attr "type" "mve_move")
2180 (define_insn "mve_vmlsldavq_s<mode>"
2182 (set (match_operand:DI 0 "s_register_operand" "=r")
2183 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2184 (match_operand:MVE_5 2 "s_register_operand" "w")]
2188 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2189 [(set_attr "type" "mve_move")
2195 (define_insn "mve_vmlsldavxq_s<mode>"
2197 (set (match_operand:DI 0 "s_register_operand" "=r")
2198 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2199 (match_operand:MVE_5 2 "s_register_operand" "w")]
2203 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2204 [(set_attr "type" "mve_move")
2208 ;; [vmovnbq_u, vmovnbq_s])
2210 (define_insn "mve_vmovnbq_<supf><mode>"
2212 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2213 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2214 (match_operand:MVE_5 2 "s_register_operand" "w")]
2218 "vmovnb.i%#<V_sz_elem> %q0, %q2"
2219 [(set_attr "type" "mve_move")
2222 ;; vmovnb pattern used by the vec_pack_trunc expander to avoid the
2223 ;; need for an uninitialized input operand.
2224 (define_insn "@mve_vec_pack_trunc_lo_<mode>"
2226 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2227 (unspec:<V_narrow_pack> [(match_operand:MVE_5 1 "s_register_operand" "w")]
2231 "vmovnb.i%#<V_sz_elem> %q0, %q1"
2232 [(set_attr "type" "mve_move")
2236 ;; [vmovntq_s, vmovntq_u])
2238 (define_insn "@mve_vmovntq_<supf><mode>"
2240 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2241 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2242 (match_operand:MVE_5 2 "s_register_operand" "w")]
2246 "vmovnt.i%#<V_sz_elem> %q0, %q2"
2247 [(set_attr "type" "mve_move")
2253 (define_insn "mve_vmulq_f<mode>"
2255 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2256 (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2257 (match_operand:MVE_0 2 "s_register_operand" "w")))
2259 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2260 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
2261 [(set_attr "type" "mve_move")
2267 (define_insn "mve_vmulq_n_f<mode>"
2269 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2270 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2271 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2274 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2275 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
2276 [(set_attr "type" "mve_move")
2282 (define_insn "mve_vornq_f<mode>"
2284 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2285 (ior:MVE_0 (not:MVE_0 (match_operand:MVE_0 2 "s_register_operand" "w"))
2286 (match_operand:MVE_0 1 "s_register_operand" "w")))
2288 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2289 "vorn %q0, %q1, %q2"
2290 [(set_attr "type" "mve_move")
2296 (define_insn "mve_vorrq_f<mode>"
2298 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2299 (ior:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2300 (match_operand:MVE_0 2 "s_register_operand" "w")))
2302 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2303 "vorr %q0, %q1, %q2"
2304 [(set_attr "type" "mve_move")
2308 ;; [vorrq_n_u, vorrq_n_s])
2310 (define_insn "mve_vorrq_n_<supf><mode>"
2312 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2313 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2314 (match_operand:SI 2 "immediate_operand" "i")]
2318 "vorr.i%#<V_sz_elem> %q0, %2"
2319 [(set_attr "type" "mve_move")
2325 (define_insn "mve_vqdmullbq_n_s<mode>"
2327 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2328 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2329 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2333 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
2334 [(set_attr "type" "mve_move")
2340 (define_insn "mve_vqdmullbq_s<mode>"
2342 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2343 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2344 (match_operand:MVE_5 2 "s_register_operand" "w")]
2348 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
2349 [(set_attr "type" "mve_move")
2355 (define_insn "mve_vqdmulltq_n_s<mode>"
2357 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2358 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2359 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2363 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
2364 [(set_attr "type" "mve_move")
2370 (define_insn "mve_vqdmulltq_s<mode>"
2372 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2373 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2374 (match_operand:MVE_5 2 "s_register_operand" "w")]
2378 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
2379 [(set_attr "type" "mve_move")
2383 ;; [vqmovnbq_u, vqmovnbq_s])
2385 (define_insn "mve_vqmovnbq_<supf><mode>"
2387 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2388 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2389 (match_operand:MVE_5 2 "s_register_operand" "w")]
2393 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
2394 [(set_attr "type" "mve_move")
2398 ;; [vqmovntq_u, vqmovntq_s])
2400 (define_insn "mve_vqmovntq_<supf><mode>"
2402 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2403 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2404 (match_operand:MVE_5 2 "s_register_operand" "w")]
2408 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
2409 [(set_attr "type" "mve_move")
2415 (define_insn "mve_vqmovunbq_s<mode>"
2417 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2418 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2419 (match_operand:MVE_5 2 "s_register_operand" "w")]
2423 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
2424 [(set_attr "type" "mve_move")
2430 (define_insn "mve_vqmovuntq_s<mode>"
2432 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2433 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2434 (match_operand:MVE_5 2 "s_register_operand" "w")]
2438 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
2439 [(set_attr "type" "mve_move")
2443 ;; [vrmlaldavhxq_s])
2445 (define_insn "mve_vrmlaldavhxq_sv4si"
2447 (set (match_operand:DI 0 "s_register_operand" "=r")
2448 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2449 (match_operand:V4SI 2 "s_register_operand" "w")]
2453 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
2454 [(set_attr "type" "mve_move")
2460 (define_insn "mve_vrmlsldavhq_sv4si"
2462 (set (match_operand:DI 0 "s_register_operand" "=r")
2463 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2464 (match_operand:V4SI 2 "s_register_operand" "w")]
2468 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
2469 [(set_attr "type" "mve_move")
2473 ;; [vrmlsldavhxq_s])
2475 (define_insn "mve_vrmlsldavhxq_sv4si"
2477 (set (match_operand:DI 0 "s_register_operand" "=r")
2478 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2479 (match_operand:V4SI 2 "s_register_operand" "w")]
2483 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
2484 [(set_attr "type" "mve_move")
2488 ;; [vshllbq_n_s, vshllbq_n_u])
2490 (define_insn "mve_vshllbq_n_<supf><mode>"
2492 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2493 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2494 (match_operand:SI 2 "immediate_operand" "i")]
2498 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2499 [(set_attr "type" "mve_move")
2503 ;; [vshlltq_n_u, vshlltq_n_s])
2505 (define_insn "mve_vshlltq_n_<supf><mode>"
2507 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2508 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2509 (match_operand:SI 2 "immediate_operand" "i")]
2513 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2514 [(set_attr "type" "mve_move")
2520 (define_insn "mve_vsubq_f<mode>"
2522 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2523 (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2524 (match_operand:MVE_0 2 "s_register_operand" "w")))
2526 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2527 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
2528 [(set_attr "type" "mve_move")
2532 ;; [vmulltq_poly_p])
2534 (define_insn "mve_vmulltq_poly_p<mode>"
2536 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2537 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2538 (match_operand:MVE_3 2 "s_register_operand" "w")]
2542 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
2543 [(set_attr "type" "mve_move")
2547 ;; [vmullbq_poly_p])
2549 (define_insn "mve_vmullbq_poly_p<mode>"
2551 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2552 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2553 (match_operand:MVE_3 2 "s_register_operand" "w")]
2557 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
2558 [(set_attr "type" "mve_move")
2562 ;; [vrmlaldavhq_u vrmlaldavhq_s])
2564 (define_insn "mve_vrmlaldavhq_<supf>v4si"
2566 (set (match_operand:DI 0 "s_register_operand" "=r")
2567 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2568 (match_operand:V4SI 2 "s_register_operand" "w")]
2572 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
2573 [(set_attr "type" "mve_move")
2577 ;; [vbicq_m_n_s, vbicq_m_n_u])
2579 (define_insn "mve_vbicq_m_n_<supf><mode>"
2581 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2582 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2583 (match_operand:SI 2 "immediate_operand" "i")
2584 (match_operand:HI 3 "vpr_register_operand" "Up")]
2588 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
2589 [(set_attr "type" "mve_move")
2590 (set_attr "length""8")])
2594 (define_insn "mve_vcmpeqq_m_f<mode>"
2596 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2597 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2598 (match_operand:MVE_0 2 "s_register_operand" "w")
2599 (match_operand:HI 3 "vpr_register_operand" "Up")]
2602 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2603 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
2604 [(set_attr "type" "mve_move")
2605 (set_attr "length""8")])
2607 ;; [vcvtaq_m_u, vcvtaq_m_s])
2609 (define_insn "mve_vcvtaq_m_<supf><mode>"
2611 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2612 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2613 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2614 (match_operand:HI 3 "vpr_register_operand" "Up")]
2617 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2618 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
2619 [(set_attr "type" "mve_move")
2620 (set_attr "length""8")])
2622 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
2624 (define_insn "mve_vcvtq_m_to_f_<supf><mode>"
2626 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2627 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2628 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2629 (match_operand:HI 3 "vpr_register_operand" "Up")]
2632 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2633 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
2634 [(set_attr "type" "mve_move")
2635 (set_attr "length""8")])
2637 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
2639 (define_insn "mve_vqrshrnbq_n_<supf><mode>"
2641 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2642 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2643 (match_operand:MVE_5 2 "s_register_operand" "w")
2644 (match_operand:SI 3 "mve_imm_8" "Rb")]
2648 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
2649 [(set_attr "type" "mve_move")
2652 ;; [vqrshrunbq_n_s])
2654 (define_insn "mve_vqrshrunbq_n_s<mode>"
2656 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2657 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2658 (match_operand:MVE_5 2 "s_register_operand" "w")
2659 (match_operand:SI 3 "mve_imm_8" "Rb")]
2663 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
2664 [(set_attr "type" "mve_move")
2667 ;; [vrmlaldavhaq_s vrmlaldavhaq_u])
2669 (define_insn "mve_vrmlaldavhaq_<supf>v4si"
2671 (set (match_operand:DI 0 "s_register_operand" "=r")
2672 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2673 (match_operand:V4SI 2 "s_register_operand" "w")
2674 (match_operand:V4SI 3 "s_register_operand" "w")]
2678 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
2679 [(set_attr "type" "mve_move")
2683 ;; [vabavq_s, vabavq_u])
2685 (define_insn "mve_vabavq_<supf><mode>"
2687 (set (match_operand:SI 0 "s_register_operand" "=r")
2688 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
2689 (match_operand:MVE_2 2 "s_register_operand" "w")
2690 (match_operand:MVE_2 3 "s_register_operand" "w")]
2694 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
2695 [(set_attr "type" "mve_move")
2699 ;; [vshlcq_u vshlcq_s]
2701 (define_expand "mve_vshlcq_vec_<supf><mode>"
2702 [(match_operand:MVE_2 0 "s_register_operand")
2703 (match_operand:MVE_2 1 "s_register_operand")
2704 (match_operand:SI 2 "s_register_operand")
2705 (match_operand:SI 3 "mve_imm_32")
2706 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
2709 rtx ignore_wb = gen_reg_rtx (SImode);
2710 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
2711 operands[2], operands[3]));
2715 (define_expand "mve_vshlcq_carry_<supf><mode>"
2716 [(match_operand:SI 0 "s_register_operand")
2717 (match_operand:MVE_2 1 "s_register_operand")
2718 (match_operand:SI 2 "s_register_operand")
2719 (match_operand:SI 3 "mve_imm_32")
2720 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
2723 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
2724 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
2725 operands[2], operands[3]));
2729 (define_insn "mve_vshlcq_<supf><mode>"
2730 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
2731 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
2732 (match_operand:SI 3 "s_register_operand" "1")
2733 (match_operand:SI 4 "mve_imm_32" "Rf")]
2735 (set (match_operand:SI 1 "s_register_operand" "=r")
2736 (unspec:SI [(match_dup 2)
2741 "vshlc %q0, %1, %4")
2746 (define_insn "mve_vabsq_m_s<mode>"
2748 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2749 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2750 (match_operand:MVE_2 2 "s_register_operand" "w")
2751 (match_operand:HI 3 "vpr_register_operand" "Up")]
2755 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
2756 [(set_attr "type" "mve_move")
2757 (set_attr "length""8")])
2760 ;; [vaddvaq_p_u, vaddvaq_p_s])
2762 (define_insn "mve_vaddvaq_p_<supf><mode>"
2764 (set (match_operand:SI 0 "s_register_operand" "=Te")
2765 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
2766 (match_operand:MVE_2 2 "s_register_operand" "w")
2767 (match_operand:HI 3 "vpr_register_operand" "Up")]
2771 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
2772 [(set_attr "type" "mve_move")
2773 (set_attr "length""8")])
2778 (define_insn "mve_vclsq_m_s<mode>"
2780 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2781 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2782 (match_operand:MVE_2 2 "s_register_operand" "w")
2783 (match_operand:HI 3 "vpr_register_operand" "Up")]
2787 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
2788 [(set_attr "type" "mve_move")
2789 (set_attr "length""8")])
2792 ;; [vclzq_m_s, vclzq_m_u])
2794 (define_insn "mve_vclzq_m_<supf><mode>"
2796 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2797 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2798 (match_operand:MVE_2 2 "s_register_operand" "w")
2799 (match_operand:HI 3 "vpr_register_operand" "Up")]
2803 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
2804 [(set_attr "type" "mve_move")
2805 (set_attr "length""8")])
2810 (define_insn "mve_vcmpcsq_m_n_u<mode>"
2812 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2813 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2814 (match_operand:<V_elem> 2 "s_register_operand" "r")
2815 (match_operand:HI 3 "vpr_register_operand" "Up")]
2819 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
2820 [(set_attr "type" "mve_move")
2821 (set_attr "length""8")])
2826 (define_insn "mve_vcmpcsq_m_u<mode>"
2828 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2829 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2830 (match_operand:MVE_2 2 "s_register_operand" "w")
2831 (match_operand:HI 3 "vpr_register_operand" "Up")]
2835 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
2836 [(set_attr "type" "mve_move")
2837 (set_attr "length""8")])
2840 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
2842 (define_insn "mve_vcmpeqq_m_n_<supf><mode>"
2844 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2845 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2846 (match_operand:<V_elem> 2 "s_register_operand" "r")
2847 (match_operand:HI 3 "vpr_register_operand" "Up")]
2851 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
2852 [(set_attr "type" "mve_move")
2853 (set_attr "length""8")])
2856 ;; [vcmpeqq_m_u, vcmpeqq_m_s])
2858 (define_insn "mve_vcmpeqq_m_<supf><mode>"
2860 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2861 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2862 (match_operand:MVE_2 2 "s_register_operand" "w")
2863 (match_operand:HI 3 "vpr_register_operand" "Up")]
2867 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
2868 [(set_attr "type" "mve_move")
2869 (set_attr "length""8")])
2874 (define_insn "mve_vcmpgeq_m_n_s<mode>"
2876 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2877 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2878 (match_operand:<V_elem> 2 "s_register_operand" "r")
2879 (match_operand:HI 3 "vpr_register_operand" "Up")]
2883 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
2884 [(set_attr "type" "mve_move")
2885 (set_attr "length""8")])
2890 (define_insn "mve_vcmpgeq_m_s<mode>"
2892 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2893 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2894 (match_operand:MVE_2 2 "s_register_operand" "w")
2895 (match_operand:HI 3 "vpr_register_operand" "Up")]
2899 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
2900 [(set_attr "type" "mve_move")
2901 (set_attr "length""8")])
2906 (define_insn "mve_vcmpgtq_m_n_s<mode>"
2908 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2909 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2910 (match_operand:<V_elem> 2 "s_register_operand" "r")
2911 (match_operand:HI 3 "vpr_register_operand" "Up")]
2915 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
2916 [(set_attr "type" "mve_move")
2917 (set_attr "length""8")])
2922 (define_insn "mve_vcmpgtq_m_s<mode>"
2924 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2925 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2926 (match_operand:MVE_2 2 "s_register_operand" "w")
2927 (match_operand:HI 3 "vpr_register_operand" "Up")]
2931 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
2932 [(set_attr "type" "mve_move")
2933 (set_attr "length""8")])
2938 (define_insn "mve_vcmphiq_m_n_u<mode>"
2940 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2941 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2942 (match_operand:<V_elem> 2 "s_register_operand" "r")
2943 (match_operand:HI 3 "vpr_register_operand" "Up")]
2947 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
2948 [(set_attr "type" "mve_move")
2949 (set_attr "length""8")])
2954 (define_insn "mve_vcmphiq_m_u<mode>"
2956 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2957 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2958 (match_operand:MVE_2 2 "s_register_operand" "w")
2959 (match_operand:HI 3 "vpr_register_operand" "Up")]
2963 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
2964 [(set_attr "type" "mve_move")
2965 (set_attr "length""8")])
2970 (define_insn "mve_vcmpleq_m_n_s<mode>"
2972 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2973 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2974 (match_operand:<V_elem> 2 "s_register_operand" "r")
2975 (match_operand:HI 3 "vpr_register_operand" "Up")]
2979 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
2980 [(set_attr "type" "mve_move")
2981 (set_attr "length""8")])
2986 (define_insn "mve_vcmpleq_m_s<mode>"
2988 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2989 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
2990 (match_operand:MVE_2 2 "s_register_operand" "w")
2991 (match_operand:HI 3 "vpr_register_operand" "Up")]
2995 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
2996 [(set_attr "type" "mve_move")
2997 (set_attr "length""8")])
3002 (define_insn "mve_vcmpltq_m_n_s<mode>"
3004 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3005 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3006 (match_operand:<V_elem> 2 "s_register_operand" "r")
3007 (match_operand:HI 3 "vpr_register_operand" "Up")]
3011 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
3012 [(set_attr "type" "mve_move")
3013 (set_attr "length""8")])
3018 (define_insn "mve_vcmpltq_m_s<mode>"
3020 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3021 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3022 (match_operand:MVE_2 2 "s_register_operand" "w")
3023 (match_operand:HI 3 "vpr_register_operand" "Up")]
3027 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
3028 [(set_attr "type" "mve_move")
3029 (set_attr "length""8")])
3032 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3034 (define_insn "mve_vcmpneq_m_n_<supf><mode>"
3036 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3037 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3038 (match_operand:<V_elem> 2 "s_register_operand" "r")
3039 (match_operand:HI 3 "vpr_register_operand" "Up")]
3043 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
3044 [(set_attr "type" "mve_move")
3045 (set_attr "length""8")])
3048 ;; [vcmpneq_m_s, vcmpneq_m_u])
3050 (define_insn "mve_vcmpneq_m_<supf><mode>"
3052 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3053 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3054 (match_operand:MVE_2 2 "s_register_operand" "w")
3055 (match_operand:HI 3 "vpr_register_operand" "Up")]
3059 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
3060 [(set_attr "type" "mve_move")
3061 (set_attr "length""8")])
3064 ;; [vdupq_m_n_s, vdupq_m_n_u])
3066 (define_insn "mve_vdupq_m_n_<supf><mode>"
3068 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3069 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3070 (match_operand:<V_elem> 2 "s_register_operand" "r")
3071 (match_operand:HI 3 "vpr_register_operand" "Up")]
3075 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3076 [(set_attr "type" "mve_move")
3077 (set_attr "length""8")])
3082 (define_insn "mve_vmaxaq_m_s<mode>"
3084 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3085 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3086 (match_operand:MVE_2 2 "s_register_operand" "w")
3087 (match_operand:HI 3 "vpr_register_operand" "Up")]
3091 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
3092 [(set_attr "type" "mve_move")
3093 (set_attr "length""8")])
3098 (define_insn "mve_vmaxavq_p_s<mode>"
3100 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3101 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3102 (match_operand:MVE_2 2 "s_register_operand" "w")
3103 (match_operand:HI 3 "vpr_register_operand" "Up")]
3107 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
3108 [(set_attr "type" "mve_move")
3109 (set_attr "length""8")])
3112 ;; [vmaxvq_p_u, vmaxvq_p_s])
3114 (define_insn "mve_vmaxvq_p_<supf><mode>"
3116 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3117 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3118 (match_operand:MVE_2 2 "s_register_operand" "w")
3119 (match_operand:HI 3 "vpr_register_operand" "Up")]
3123 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
3124 [(set_attr "type" "mve_move")
3125 (set_attr "length""8")])
3130 (define_insn "mve_vminaq_m_s<mode>"
3132 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3133 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3134 (match_operand:MVE_2 2 "s_register_operand" "w")
3135 (match_operand:HI 3 "vpr_register_operand" "Up")]
3139 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
3140 [(set_attr "type" "mve_move")
3141 (set_attr "length""8")])
3146 (define_insn "mve_vminavq_p_s<mode>"
3148 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3149 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3150 (match_operand:MVE_2 2 "s_register_operand" "w")
3151 (match_operand:HI 3 "vpr_register_operand" "Up")]
3155 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
3156 [(set_attr "type" "mve_move")
3157 (set_attr "length""8")])
3160 ;; [vminvq_p_s, vminvq_p_u])
3162 (define_insn "mve_vminvq_p_<supf><mode>"
3164 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3165 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3166 (match_operand:MVE_2 2 "s_register_operand" "w")
3167 (match_operand:HI 3 "vpr_register_operand" "Up")]
3171 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
3172 [(set_attr "type" "mve_move")
3173 (set_attr "length""8")])
3176 ;; [vmladavaq_u, vmladavaq_s])
3178 (define_insn "mve_vmladavaq_<supf><mode>"
3180 (set (match_operand:SI 0 "s_register_operand" "=Te")
3181 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3182 (match_operand:MVE_2 2 "s_register_operand" "w")
3183 (match_operand:MVE_2 3 "s_register_operand" "w")]
3187 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
3188 [(set_attr "type" "mve_move")
3192 ;; [vmladavq_p_u, vmladavq_p_s])
3194 (define_insn "mve_vmladavq_p_<supf><mode>"
3196 (set (match_operand:SI 0 "s_register_operand" "=Te")
3197 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3198 (match_operand:MVE_2 2 "s_register_operand" "w")
3199 (match_operand:HI 3 "vpr_register_operand" "Up")]
3203 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
3204 [(set_attr "type" "mve_move")
3205 (set_attr "length""8")])
3210 (define_insn "mve_vmladavxq_p_s<mode>"
3212 (set (match_operand:SI 0 "s_register_operand" "=Te")
3213 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3214 (match_operand:MVE_2 2 "s_register_operand" "w")
3215 (match_operand:HI 3 "vpr_register_operand" "Up")]
3219 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
3220 [(set_attr "type" "mve_move")
3221 (set_attr "length""8")])
3224 ;; [vmlaq_n_u, vmlaq_n_s])
3226 (define_insn "mve_vmlaq_n_<supf><mode>"
3228 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3229 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3230 (match_operand:MVE_2 2 "s_register_operand" "w")
3231 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3235 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
3236 [(set_attr "type" "mve_move")
3240 ;; [vmlasq_n_u, vmlasq_n_s])
3242 (define_insn "mve_vmlasq_n_<supf><mode>"
3244 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3245 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3246 (match_operand:MVE_2 2 "s_register_operand" "w")
3247 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3251 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
3252 [(set_attr "type" "mve_move")
3258 (define_insn "mve_vmlsdavq_p_s<mode>"
3260 (set (match_operand:SI 0 "s_register_operand" "=Te")
3261 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3262 (match_operand:MVE_2 2 "s_register_operand" "w")
3263 (match_operand:HI 3 "vpr_register_operand" "Up")]
3267 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
3268 [(set_attr "type" "mve_move")
3269 (set_attr "length""8")])
3274 (define_insn "mve_vmlsdavxq_p_s<mode>"
3276 (set (match_operand:SI 0 "s_register_operand" "=Te")
3277 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3278 (match_operand:MVE_2 2 "s_register_operand" "w")
3279 (match_operand:HI 3 "vpr_register_operand" "Up")]
3283 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
3284 [(set_attr "type" "mve_move")
3285 (set_attr "length""8")])
3288 ;; [vmvnq_m_s, vmvnq_m_u])
3290 (define_insn "mve_vmvnq_m_<supf><mode>"
3292 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3293 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3294 (match_operand:MVE_2 2 "s_register_operand" "w")
3295 (match_operand:HI 3 "vpr_register_operand" "Up")]
3299 "vpst\;vmvnt %q0, %q2"
3300 [(set_attr "type" "mve_move")
3301 (set_attr "length""8")])
3306 (define_insn "mve_vnegq_m_s<mode>"
3308 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3309 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3310 (match_operand:MVE_2 2 "s_register_operand" "w")
3311 (match_operand:HI 3 "vpr_register_operand" "Up")]
3315 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
3316 [(set_attr "type" "mve_move")
3317 (set_attr "length""8")])
3320 ;; [vpselq_u, vpselq_s])
3322 (define_insn "@mve_vpselq_<supf><mode>"
3324 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
3325 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
3326 (match_operand:MVE_1 2 "s_register_operand" "w")
3327 (match_operand:HI 3 "vpr_register_operand" "Up")]
3331 "vpsel %q0, %q1, %q2"
3332 [(set_attr "type" "mve_move")
3338 (define_insn "mve_vqabsq_m_s<mode>"
3340 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3341 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3342 (match_operand:MVE_2 2 "s_register_operand" "w")
3343 (match_operand:HI 3 "vpr_register_operand" "Up")]
3347 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
3348 [(set_attr "type" "mve_move")
3349 (set_attr "length""8")])
3354 (define_insn "mve_vqdmlahq_n_<supf><mode>"
3356 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3357 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3358 (match_operand:MVE_2 2 "s_register_operand" "w")
3359 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3363 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3364 [(set_attr "type" "mve_move")
3370 (define_insn "mve_vqdmlashq_n_<supf><mode>"
3372 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3373 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3374 (match_operand:MVE_2 2 "s_register_operand" "w")
3375 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3379 "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3380 [(set_attr "type" "mve_move")
3386 (define_insn "mve_vqnegq_m_s<mode>"
3388 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3389 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3390 (match_operand:MVE_2 2 "s_register_operand" "w")
3391 (match_operand:HI 3 "vpr_register_operand" "Up")]
3395 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
3396 [(set_attr "type" "mve_move")
3397 (set_attr "length""8")])
3402 (define_insn "mve_vqrdmladhq_s<mode>"
3404 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3405 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3406 (match_operand:MVE_2 2 "s_register_operand" "w")
3407 (match_operand:MVE_2 3 "s_register_operand" "w")]
3411 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3412 [(set_attr "type" "mve_move")
3418 (define_insn "mve_vqrdmladhxq_s<mode>"
3420 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3421 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3422 (match_operand:MVE_2 2 "s_register_operand" "w")
3423 (match_operand:MVE_2 3 "s_register_operand" "w")]
3427 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3428 [(set_attr "type" "mve_move")
3434 (define_insn "mve_vqrdmlahq_n_<supf><mode>"
3436 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3437 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3438 (match_operand:MVE_2 2 "s_register_operand" "w")
3439 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3443 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3444 [(set_attr "type" "mve_move")
3448 ;; [vqrdmlashq_n_s])
3450 (define_insn "mve_vqrdmlashq_n_<supf><mode>"
3452 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3453 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3454 (match_operand:MVE_2 2 "s_register_operand" "w")
3455 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3459 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3460 [(set_attr "type" "mve_move")
3466 (define_insn "mve_vqrdmlsdhq_s<mode>"
3468 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3469 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3470 (match_operand:MVE_2 2 "s_register_operand" "w")
3471 (match_operand:MVE_2 3 "s_register_operand" "w")]
3475 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3476 [(set_attr "type" "mve_move")
3482 (define_insn "mve_vqrdmlsdhxq_s<mode>"
3484 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3485 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3486 (match_operand:MVE_2 2 "s_register_operand" "w")
3487 (match_operand:MVE_2 3 "s_register_operand" "w")]
3491 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3492 [(set_attr "type" "mve_move")
3496 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
3498 (define_insn "mve_vqrshlq_m_n_<supf><mode>"
3500 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3501 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3502 (match_operand:SI 2 "s_register_operand" "r")
3503 (match_operand:HI 3 "vpr_register_operand" "Up")]
3507 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
3508 [(set_attr "type" "mve_move")
3509 (set_attr "length""8")])
3512 ;; [vqshlq_m_r_u, vqshlq_m_r_s])
3514 (define_insn "mve_vqshlq_m_r_<supf><mode>"
3516 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3517 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3518 (match_operand:SI 2 "s_register_operand" "r")
3519 (match_operand:HI 3 "vpr_register_operand" "Up")]
3523 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3524 [(set_attr "type" "mve_move")
3525 (set_attr "length""8")])
3528 ;; [vrev64q_m_u, vrev64q_m_s])
3530 (define_insn "mve_vrev64q_m_<supf><mode>"
3532 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3533 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3534 (match_operand:MVE_2 2 "s_register_operand" "w")
3535 (match_operand:HI 3 "vpr_register_operand" "Up")]
3539 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
3540 [(set_attr "type" "mve_move")
3541 (set_attr "length""8")])
3544 ;; [vrshlq_m_n_s, vrshlq_m_n_u])
3546 (define_insn "mve_vrshlq_m_n_<supf><mode>"
3548 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3549 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3550 (match_operand:SI 2 "s_register_operand" "r")
3551 (match_operand:HI 3 "vpr_register_operand" "Up")]
3555 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3556 [(set_attr "type" "mve_move")
3557 (set_attr "length""8")])
3560 ;; [vshlq_m_r_u, vshlq_m_r_s])
3562 (define_insn "mve_vshlq_m_r_<supf><mode>"
3564 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3565 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3566 (match_operand:SI 2 "s_register_operand" "r")
3567 (match_operand:HI 3 "vpr_register_operand" "Up")]
3571 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3572 [(set_attr "type" "mve_move")
3573 (set_attr "length""8")])
3576 ;; [vsliq_n_u, vsliq_n_s])
3578 (define_insn "mve_vsliq_n_<supf><mode>"
3580 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3581 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3582 (match_operand:MVE_2 2 "s_register_operand" "w")
3583 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
3587 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
3588 [(set_attr "type" "mve_move")
3592 ;; [vsriq_n_u, vsriq_n_s])
3594 (define_insn "mve_vsriq_n_<supf><mode>"
3596 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3597 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3598 (match_operand:MVE_2 2 "s_register_operand" "w")
3599 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
3603 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
3604 [(set_attr "type" "mve_move")
3610 (define_insn "mve_vqdmlsdhxq_s<mode>"
3612 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3613 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3614 (match_operand:MVE_2 2 "s_register_operand" "w")
3615 (match_operand:MVE_2 3 "s_register_operand" "w")]
3619 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3620 [(set_attr "type" "mve_move")
3626 (define_insn "mve_vqdmlsdhq_s<mode>"
3628 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3629 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3630 (match_operand:MVE_2 2 "s_register_operand" "w")
3631 (match_operand:MVE_2 3 "s_register_operand" "w")]
3635 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3636 [(set_attr "type" "mve_move")
3642 (define_insn "mve_vqdmladhxq_s<mode>"
3644 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3645 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3646 (match_operand:MVE_2 2 "s_register_operand" "w")
3647 (match_operand:MVE_2 3 "s_register_operand" "w")]
3651 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3652 [(set_attr "type" "mve_move")
3658 (define_insn "mve_vqdmladhq_s<mode>"
3660 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3661 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3662 (match_operand:MVE_2 2 "s_register_operand" "w")
3663 (match_operand:MVE_2 3 "s_register_operand" "w")]
3667 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3668 [(set_attr "type" "mve_move")
3674 (define_insn "mve_vmlsdavaxq_s<mode>"
3676 (set (match_operand:SI 0 "s_register_operand" "=Te")
3677 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3678 (match_operand:MVE_2 2 "s_register_operand" "w")
3679 (match_operand:MVE_2 3 "s_register_operand" "w")]
3683 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
3684 [(set_attr "type" "mve_move")
3690 (define_insn "mve_vmlsdavaq_s<mode>"
3692 (set (match_operand:SI 0 "s_register_operand" "=Te")
3693 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3694 (match_operand:MVE_2 2 "s_register_operand" "w")
3695 (match_operand:MVE_2 3 "s_register_operand" "w")]
3699 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
3700 [(set_attr "type" "mve_move")
3706 (define_insn "mve_vmladavaxq_s<mode>"
3708 (set (match_operand:SI 0 "s_register_operand" "=Te")
3709 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3710 (match_operand:MVE_2 2 "s_register_operand" "w")
3711 (match_operand:MVE_2 3 "s_register_operand" "w")]
3715 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
3716 [(set_attr "type" "mve_move")
3721 (define_insn "mve_vabsq_m_f<mode>"
3723 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3724 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3725 (match_operand:MVE_0 2 "s_register_operand" "w")
3726 (match_operand:HI 3 "vpr_register_operand" "Up")]
3729 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3730 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
3731 [(set_attr "type" "mve_move")
3732 (set_attr "length""8")])
3735 ;; [vaddlvaq_p_s vaddlvaq_p_u])
3737 (define_insn "mve_vaddlvaq_p_<supf>v4si"
3739 (set (match_operand:DI 0 "s_register_operand" "=r")
3740 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
3741 (match_operand:V4SI 2 "s_register_operand" "w")
3742 (match_operand:HI 3 "vpr_register_operand" "Up")]
3746 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
3747 [(set_attr "type" "mve_move")
3748 (set_attr "length""8")])
3750 ;; [vcmlaq, vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270])
3752 (define_insn "mve_vcmlaq<mve_rot><mode>"
3754 (set (match_operand:MVE_0 0 "s_register_operand" "=w,w")
3755 (plus:MVE_0 (match_operand:MVE_0 1 "reg_or_zero_operand" "Dz,0")
3757 [(match_operand:MVE_0 2 "s_register_operand" "w,w")
3758 (match_operand:MVE_0 3 "s_register_operand" "w,w")]
3761 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3763 vcmul.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>
3764 vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>"
3765 [(set_attr "type" "mve_move")
3771 (define_insn "mve_vcmpeqq_m_n_f<mode>"
3773 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3774 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3775 (match_operand:<V_elem> 2 "s_register_operand" "r")
3776 (match_operand:HI 3 "vpr_register_operand" "Up")]
3779 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3780 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
3781 [(set_attr "type" "mve_move")
3782 (set_attr "length""8")])
3787 (define_insn "mve_vcmpgeq_m_f<mode>"
3789 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3790 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3791 (match_operand:MVE_0 2 "s_register_operand" "w")
3792 (match_operand:HI 3 "vpr_register_operand" "Up")]
3795 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3796 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
3797 [(set_attr "type" "mve_move")
3798 (set_attr "length""8")])
3803 (define_insn "mve_vcmpgeq_m_n_f<mode>"
3805 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3806 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3807 (match_operand:<V_elem> 2 "s_register_operand" "r")
3808 (match_operand:HI 3 "vpr_register_operand" "Up")]
3811 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3812 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
3813 [(set_attr "type" "mve_move")
3814 (set_attr "length""8")])
3819 (define_insn "mve_vcmpgtq_m_f<mode>"
3821 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3822 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3823 (match_operand:MVE_0 2 "s_register_operand" "w")
3824 (match_operand:HI 3 "vpr_register_operand" "Up")]
3827 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3828 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
3829 [(set_attr "type" "mve_move")
3830 (set_attr "length""8")])
3835 (define_insn "mve_vcmpgtq_m_n_f<mode>"
3837 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3838 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3839 (match_operand:<V_elem> 2 "s_register_operand" "r")
3840 (match_operand:HI 3 "vpr_register_operand" "Up")]
3843 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3844 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
3845 [(set_attr "type" "mve_move")
3846 (set_attr "length""8")])
3851 (define_insn "mve_vcmpleq_m_f<mode>"
3853 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3854 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3855 (match_operand:MVE_0 2 "s_register_operand" "w")
3856 (match_operand:HI 3 "vpr_register_operand" "Up")]
3859 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3860 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
3861 [(set_attr "type" "mve_move")
3862 (set_attr "length""8")])
3867 (define_insn "mve_vcmpleq_m_n_f<mode>"
3869 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3870 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3871 (match_operand:<V_elem> 2 "s_register_operand" "r")
3872 (match_operand:HI 3 "vpr_register_operand" "Up")]
3875 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3876 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
3877 [(set_attr "type" "mve_move")
3878 (set_attr "length""8")])
3883 (define_insn "mve_vcmpltq_m_f<mode>"
3885 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3886 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3887 (match_operand:MVE_0 2 "s_register_operand" "w")
3888 (match_operand:HI 3 "vpr_register_operand" "Up")]
3891 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3892 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
3893 [(set_attr "type" "mve_move")
3894 (set_attr "length""8")])
3899 (define_insn "mve_vcmpltq_m_n_f<mode>"
3901 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3902 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3903 (match_operand:<V_elem> 2 "s_register_operand" "r")
3904 (match_operand:HI 3 "vpr_register_operand" "Up")]
3907 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3908 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
3909 [(set_attr "type" "mve_move")
3910 (set_attr "length""8")])
3915 (define_insn "mve_vcmpneq_m_f<mode>"
3917 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3918 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3919 (match_operand:MVE_0 2 "s_register_operand" "w")
3920 (match_operand:HI 3 "vpr_register_operand" "Up")]
3923 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3924 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
3925 [(set_attr "type" "mve_move")
3926 (set_attr "length""8")])
3931 (define_insn "mve_vcmpneq_m_n_f<mode>"
3933 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3934 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3935 (match_operand:<V_elem> 2 "s_register_operand" "r")
3936 (match_operand:HI 3 "vpr_register_operand" "Up")]
3939 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3940 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
3941 [(set_attr "type" "mve_move")
3942 (set_attr "length""8")])
3945 ;; [vcvtbq_m_f16_f32])
3947 (define_insn "mve_vcvtbq_m_f16_f32v8hf"
3949 (set (match_operand:V8HF 0 "s_register_operand" "=w")
3950 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
3951 (match_operand:V4SF 2 "s_register_operand" "w")
3952 (match_operand:HI 3 "vpr_register_operand" "Up")]
3955 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3956 "vpst\;vcvtbt.f16.f32 %q0, %q2"
3957 [(set_attr "type" "mve_move")
3958 (set_attr "length""8")])
3961 ;; [vcvtbq_m_f32_f16])
3963 (define_insn "mve_vcvtbq_m_f32_f16v4sf"
3965 (set (match_operand:V4SF 0 "s_register_operand" "=w")
3966 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
3967 (match_operand:V8HF 2 "s_register_operand" "w")
3968 (match_operand:HI 3 "vpr_register_operand" "Up")]
3971 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3972 "vpst\;vcvtbt.f32.f16 %q0, %q2"
3973 [(set_attr "type" "mve_move")
3974 (set_attr "length""8")])
3977 ;; [vcvttq_m_f16_f32])
3979 (define_insn "mve_vcvttq_m_f16_f32v8hf"
3981 (set (match_operand:V8HF 0 "s_register_operand" "=w")
3982 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
3983 (match_operand:V4SF 2 "s_register_operand" "w")
3984 (match_operand:HI 3 "vpr_register_operand" "Up")]
3987 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3988 "vpst\;vcvttt.f16.f32 %q0, %q2"
3989 [(set_attr "type" "mve_move")
3990 (set_attr "length""8")])
3993 ;; [vcvttq_m_f32_f16])
3995 (define_insn "mve_vcvttq_m_f32_f16v4sf"
3997 (set (match_operand:V4SF 0 "s_register_operand" "=w")
3998 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
3999 (match_operand:V8HF 2 "s_register_operand" "w")
4000 (match_operand:HI 3 "vpr_register_operand" "Up")]
4003 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4004 "vpst\;vcvttt.f32.f16 %q0, %q2"
4005 [(set_attr "type" "mve_move")
4006 (set_attr "length""8")])
4011 (define_insn "mve_vdupq_m_n_f<mode>"
4013 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4014 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4015 (match_operand:<V_elem> 2 "s_register_operand" "r")
4016 (match_operand:HI 3 "vpr_register_operand" "Up")]
4019 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4020 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
4021 [(set_attr "type" "mve_move")
4022 (set_attr "length""8")])
4027 (define_insn "mve_vfmaq_f<mode>"
4029 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4030 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4031 (match_operand:MVE_0 2 "s_register_operand" "w")
4032 (match_operand:MVE_0 3 "s_register_operand" "w")]
4035 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4036 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
4037 [(set_attr "type" "mve_move")
4043 (define_insn "mve_vfmaq_n_f<mode>"
4045 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4046 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4047 (match_operand:MVE_0 2 "s_register_operand" "w")
4048 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4051 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4052 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
4053 [(set_attr "type" "mve_move")
4059 (define_insn "mve_vfmasq_n_f<mode>"
4061 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4062 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4063 (match_operand:MVE_0 2 "s_register_operand" "w")
4064 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4067 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4068 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
4069 [(set_attr "type" "mve_move")
4074 (define_insn "mve_vfmsq_f<mode>"
4076 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4077 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4078 (match_operand:MVE_0 2 "s_register_operand" "w")
4079 (match_operand:MVE_0 3 "s_register_operand" "w")]
4082 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4083 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
4084 [(set_attr "type" "mve_move")
4090 (define_insn "mve_vmaxnmaq_m_f<mode>"
4092 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4093 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4094 (match_operand:MVE_0 2 "s_register_operand" "w")
4095 (match_operand:HI 3 "vpr_register_operand" "Up")]
4098 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4099 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
4100 [(set_attr "type" "mve_move")
4101 (set_attr "length""8")])
4105 (define_insn "mve_vmaxnmavq_p_f<mode>"
4107 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4108 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4109 (match_operand:MVE_0 2 "s_register_operand" "w")
4110 (match_operand:HI 3 "vpr_register_operand" "Up")]
4113 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4114 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
4115 [(set_attr "type" "mve_move")
4116 (set_attr "length""8")])
4121 (define_insn "mve_vmaxnmvq_p_f<mode>"
4123 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4124 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4125 (match_operand:MVE_0 2 "s_register_operand" "w")
4126 (match_operand:HI 3 "vpr_register_operand" "Up")]
4129 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4130 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
4131 [(set_attr "type" "mve_move")
4132 (set_attr "length""8")])
4136 (define_insn "mve_vminnmaq_m_f<mode>"
4138 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4139 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4140 (match_operand:MVE_0 2 "s_register_operand" "w")
4141 (match_operand:HI 3 "vpr_register_operand" "Up")]
4144 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4145 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
4146 [(set_attr "type" "mve_move")
4147 (set_attr "length""8")])
4152 (define_insn "mve_vminnmavq_p_f<mode>"
4154 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4155 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4156 (match_operand:MVE_0 2 "s_register_operand" "w")
4157 (match_operand:HI 3 "vpr_register_operand" "Up")]
4160 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4161 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
4162 [(set_attr "type" "mve_move")
4163 (set_attr "length""8")])
4167 (define_insn "mve_vminnmvq_p_f<mode>"
4169 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4170 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4171 (match_operand:MVE_0 2 "s_register_operand" "w")
4172 (match_operand:HI 3 "vpr_register_operand" "Up")]
4175 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4176 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
4177 [(set_attr "type" "mve_move")
4178 (set_attr "length""8")])
4181 ;; [vmlaldavaq_s, vmlaldavaq_u])
4183 (define_insn "mve_vmlaldavaq_<supf><mode>"
4185 (set (match_operand:DI 0 "s_register_operand" "=r")
4186 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4187 (match_operand:MVE_5 2 "s_register_operand" "w")
4188 (match_operand:MVE_5 3 "s_register_operand" "w")]
4192 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4193 [(set_attr "type" "mve_move")
4199 (define_insn "mve_vmlaldavaxq_s<mode>"
4201 (set (match_operand:DI 0 "s_register_operand" "=r")
4202 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4203 (match_operand:MVE_5 2 "s_register_operand" "w")
4204 (match_operand:MVE_5 3 "s_register_operand" "w")]
4208 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4209 [(set_attr "type" "mve_move")
4213 ;; [vmlaldavq_p_u, vmlaldavq_p_s])
4215 (define_insn "mve_vmlaldavq_p_<supf><mode>"
4217 (set (match_operand:DI 0 "s_register_operand" "=r")
4218 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4219 (match_operand:MVE_5 2 "s_register_operand" "w")
4220 (match_operand:HI 3 "vpr_register_operand" "Up")]
4224 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4225 [(set_attr "type" "mve_move")
4226 (set_attr "length""8")])
4229 ;; [vmlaldavxq_p_s])
4231 (define_insn "mve_vmlaldavxq_p_s<mode>"
4233 (set (match_operand:DI 0 "s_register_operand" "=r")
4234 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4235 (match_operand:MVE_5 2 "s_register_operand" "w")
4236 (match_operand:HI 3 "vpr_register_operand" "Up")]
4240 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
4241 [(set_attr "type" "mve_move")
4242 (set_attr "length""8")])
4246 (define_insn "mve_vmlsldavaq_s<mode>"
4248 (set (match_operand:DI 0 "s_register_operand" "=r")
4249 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4250 (match_operand:MVE_5 2 "s_register_operand" "w")
4251 (match_operand:MVE_5 3 "s_register_operand" "w")]
4255 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4256 [(set_attr "type" "mve_move")
4262 (define_insn "mve_vmlsldavaxq_s<mode>"
4264 (set (match_operand:DI 0 "s_register_operand" "=r")
4265 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4266 (match_operand:MVE_5 2 "s_register_operand" "w")
4267 (match_operand:MVE_5 3 "s_register_operand" "w")]
4271 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4272 [(set_attr "type" "mve_move")
4278 (define_insn "mve_vmlsldavq_p_s<mode>"
4280 (set (match_operand:DI 0 "s_register_operand" "=r")
4281 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4282 (match_operand:MVE_5 2 "s_register_operand" "w")
4283 (match_operand:HI 3 "vpr_register_operand" "Up")]
4287 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4288 [(set_attr "type" "mve_move")
4289 (set_attr "length""8")])
4292 ;; [vmlsldavxq_p_s])
4294 (define_insn "mve_vmlsldavxq_p_s<mode>"
4296 (set (match_operand:DI 0 "s_register_operand" "=r")
4297 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4298 (match_operand:MVE_5 2 "s_register_operand" "w")
4299 (match_operand:HI 3 "vpr_register_operand" "Up")]
4303 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4304 [(set_attr "type" "mve_move")
4305 (set_attr "length""8")])
4307 ;; [vmovlbq_m_u, vmovlbq_m_s])
4309 (define_insn "mve_vmovlbq_m_<supf><mode>"
4311 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4312 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4313 (match_operand:MVE_3 2 "s_register_operand" "w")
4314 (match_operand:HI 3 "vpr_register_operand" "Up")]
4318 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
4319 [(set_attr "type" "mve_move")
4320 (set_attr "length""8")])
4322 ;; [vmovltq_m_u, vmovltq_m_s])
4324 (define_insn "mve_vmovltq_m_<supf><mode>"
4326 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4327 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4328 (match_operand:MVE_3 2 "s_register_operand" "w")
4329 (match_operand:HI 3 "vpr_register_operand" "Up")]
4333 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
4334 [(set_attr "type" "mve_move")
4335 (set_attr "length""8")])
4337 ;; [vmovnbq_m_u, vmovnbq_m_s])
4339 (define_insn "mve_vmovnbq_m_<supf><mode>"
4341 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4342 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4343 (match_operand:MVE_5 2 "s_register_operand" "w")
4344 (match_operand:HI 3 "vpr_register_operand" "Up")]
4348 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
4349 [(set_attr "type" "mve_move")
4350 (set_attr "length""8")])
4353 ;; [vmovntq_m_u, vmovntq_m_s])
4355 (define_insn "mve_vmovntq_m_<supf><mode>"
4357 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4358 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4359 (match_operand:MVE_5 2 "s_register_operand" "w")
4360 (match_operand:HI 3 "vpr_register_operand" "Up")]
4364 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
4365 [(set_attr "type" "mve_move")
4366 (set_attr "length""8")])
4369 ;; [vmvnq_m_n_u, vmvnq_m_n_s])
4371 (define_insn "mve_vmvnq_m_n_<supf><mode>"
4373 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4374 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4375 (match_operand:SI 2 "immediate_operand" "i")
4376 (match_operand:HI 3 "vpr_register_operand" "Up")]
4380 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
4381 [(set_attr "type" "mve_move")
4382 (set_attr "length""8")])
4386 (define_insn "mve_vnegq_m_f<mode>"
4388 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4389 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4390 (match_operand:MVE_0 2 "s_register_operand" "w")
4391 (match_operand:HI 3 "vpr_register_operand" "Up")]
4394 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4395 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
4396 [(set_attr "type" "mve_move")
4397 (set_attr "length""8")])
4400 ;; [vorrq_m_n_s, vorrq_m_n_u])
4402 (define_insn "mve_vorrq_m_n_<supf><mode>"
4404 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4405 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4406 (match_operand:SI 2 "immediate_operand" "i")
4407 (match_operand:HI 3 "vpr_register_operand" "Up")]
4411 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
4412 [(set_attr "type" "mve_move")
4413 (set_attr "length""8")])
4417 (define_insn "@mve_vpselq_f<mode>"
4419 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4420 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
4421 (match_operand:MVE_0 2 "s_register_operand" "w")
4422 (match_operand:HI 3 "vpr_register_operand" "Up")]
4425 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4426 "vpsel %q0, %q1, %q2"
4427 [(set_attr "type" "mve_move")
4431 ;; [vqmovnbq_m_s, vqmovnbq_m_u])
4433 (define_insn "mve_vqmovnbq_m_<supf><mode>"
4435 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4436 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4437 (match_operand:MVE_5 2 "s_register_operand" "w")
4438 (match_operand:HI 3 "vpr_register_operand" "Up")]
4442 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
4443 [(set_attr "type" "mve_move")
4444 (set_attr "length""8")])
4447 ;; [vqmovntq_m_u, vqmovntq_m_s])
4449 (define_insn "mve_vqmovntq_m_<supf><mode>"
4451 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4452 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4453 (match_operand:MVE_5 2 "s_register_operand" "w")
4454 (match_operand:HI 3 "vpr_register_operand" "Up")]
4458 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
4459 [(set_attr "type" "mve_move")
4460 (set_attr "length""8")])
4465 (define_insn "mve_vqmovunbq_m_s<mode>"
4467 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4468 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4469 (match_operand:MVE_5 2 "s_register_operand" "w")
4470 (match_operand:HI 3 "vpr_register_operand" "Up")]
4474 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
4475 [(set_attr "type" "mve_move")
4476 (set_attr "length""8")])
4481 (define_insn "mve_vqmovuntq_m_s<mode>"
4483 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4484 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4485 (match_operand:MVE_5 2 "s_register_operand" "w")
4486 (match_operand:HI 3 "vpr_register_operand" "Up")]
4490 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
4491 [(set_attr "type" "mve_move")
4492 (set_attr "length""8")])
4495 ;; [vqrshrntq_n_u, vqrshrntq_n_s])
4497 (define_insn "mve_vqrshrntq_n_<supf><mode>"
4499 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4500 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4501 (match_operand:MVE_5 2 "s_register_operand" "w")
4502 (match_operand:SI 3 "mve_imm_8" "Rb")]
4506 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4507 [(set_attr "type" "mve_move")
4511 ;; [vqrshruntq_n_s])
4513 (define_insn "mve_vqrshruntq_n_s<mode>"
4515 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4516 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4517 (match_operand:MVE_5 2 "s_register_operand" "w")
4518 (match_operand:SI 3 "mve_imm_8" "Rb")]
4522 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4523 [(set_attr "type" "mve_move")
4527 ;; [vqshrnbq_n_u, vqshrnbq_n_s])
4529 (define_insn "mve_vqshrnbq_n_<supf><mode>"
4531 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4532 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4533 (match_operand:MVE_5 2 "s_register_operand" "w")
4534 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4538 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4539 [(set_attr "type" "mve_move")
4543 ;; [vqshrntq_n_u, vqshrntq_n_s])
4545 (define_insn "mve_vqshrntq_n_<supf><mode>"
4547 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4548 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4549 (match_operand:MVE_5 2 "s_register_operand" "w")
4550 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4554 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4555 [(set_attr "type" "mve_move")
4561 (define_insn "mve_vqshrunbq_n_s<mode>"
4563 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4564 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4565 (match_operand:MVE_5 2 "s_register_operand" "w")
4566 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4570 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
4571 [(set_attr "type" "mve_move")
4577 (define_insn "mve_vqshruntq_n_s<mode>"
4579 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4580 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4581 (match_operand:MVE_5 2 "s_register_operand" "w")
4582 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4586 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4587 [(set_attr "type" "mve_move")
4593 (define_insn "mve_vrev32q_m_fv8hf"
4595 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4596 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4597 (match_operand:V8HF 2 "s_register_operand" "w")
4598 (match_operand:HI 3 "vpr_register_operand" "Up")]
4601 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4602 "vpst\;vrev32t.16 %q0, %q2"
4603 [(set_attr "type" "mve_move")
4604 (set_attr "length""8")])
4607 ;; [vrev32q_m_s, vrev32q_m_u])
4609 (define_insn "mve_vrev32q_m_<supf><mode>"
4611 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
4612 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
4613 (match_operand:MVE_3 2 "s_register_operand" "w")
4614 (match_operand:HI 3 "vpr_register_operand" "Up")]
4618 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
4619 [(set_attr "type" "mve_move")
4620 (set_attr "length""8")])
4625 (define_insn "mve_vrev64q_m_f<mode>"
4627 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4628 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4629 (match_operand:MVE_0 2 "s_register_operand" "w")
4630 (match_operand:HI 3 "vpr_register_operand" "Up")]
4633 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4634 "vpst\;vrev64t.%#<V_sz_elem> %q0, %q2"
4635 [(set_attr "type" "mve_move")
4636 (set_attr "length""8")])
4639 ;; [vrmlaldavhaxq_s])
4641 (define_insn "mve_vrmlaldavhaxq_sv4si"
4643 (set (match_operand:DI 0 "s_register_operand" "=r")
4644 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4645 (match_operand:V4SI 2 "s_register_operand" "w")
4646 (match_operand:V4SI 3 "s_register_operand" "w")]
4650 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
4651 [(set_attr "type" "mve_move")
4655 ;; [vrmlaldavhxq_p_s])
4657 (define_insn "mve_vrmlaldavhxq_p_sv4si"
4659 (set (match_operand:DI 0 "s_register_operand" "=r")
4660 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4661 (match_operand:V4SI 2 "s_register_operand" "w")
4662 (match_operand:HI 3 "vpr_register_operand" "Up")]
4666 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
4667 [(set_attr "type" "mve_move")
4668 (set_attr "length""8")])
4671 ;; [vrmlsldavhaxq_s])
4673 (define_insn "mve_vrmlsldavhaxq_sv4si"
4675 (set (match_operand:DI 0 "s_register_operand" "=r")
4676 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4677 (match_operand:V4SI 2 "s_register_operand" "w")
4678 (match_operand:V4SI 3 "s_register_operand" "w")]
4682 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
4683 [(set_attr "type" "mve_move")
4687 ;; [vrmlsldavhq_p_s])
4689 (define_insn "mve_vrmlsldavhq_p_sv4si"
4691 (set (match_operand:DI 0 "s_register_operand" "=r")
4692 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4693 (match_operand:V4SI 2 "s_register_operand" "w")
4694 (match_operand:HI 3 "vpr_register_operand" "Up")]
4698 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
4699 [(set_attr "type" "mve_move")
4700 (set_attr "length""8")])
4703 ;; [vrmlsldavhxq_p_s])
4705 (define_insn "mve_vrmlsldavhxq_p_sv4si"
4707 (set (match_operand:DI 0 "s_register_operand" "=r")
4708 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4709 (match_operand:V4SI 2 "s_register_operand" "w")
4710 (match_operand:HI 3 "vpr_register_operand" "Up")]
4714 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
4715 [(set_attr "type" "mve_move")
4716 (set_attr "length""8")])
4721 (define_insn "mve_vrndaq_m_f<mode>"
4723 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4724 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4725 (match_operand:MVE_0 2 "s_register_operand" "w")
4726 (match_operand:HI 3 "vpr_register_operand" "Up")]
4729 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4730 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
4731 [(set_attr "type" "mve_move")
4732 (set_attr "length""8")])
4737 (define_insn "mve_vrndmq_m_f<mode>"
4739 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4740 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4741 (match_operand:MVE_0 2 "s_register_operand" "w")
4742 (match_operand:HI 3 "vpr_register_operand" "Up")]
4745 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4746 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
4747 [(set_attr "type" "mve_move")
4748 (set_attr "length""8")])
4753 (define_insn "mve_vrndnq_m_f<mode>"
4755 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4756 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4757 (match_operand:MVE_0 2 "s_register_operand" "w")
4758 (match_operand:HI 3 "vpr_register_operand" "Up")]
4761 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4762 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
4763 [(set_attr "type" "mve_move")
4764 (set_attr "length""8")])
4769 (define_insn "mve_vrndpq_m_f<mode>"
4771 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4772 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4773 (match_operand:MVE_0 2 "s_register_operand" "w")
4774 (match_operand:HI 3 "vpr_register_operand" "Up")]
4777 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4778 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
4779 [(set_attr "type" "mve_move")
4780 (set_attr "length""8")])
4785 (define_insn "mve_vrndxq_m_f<mode>"
4787 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4788 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4789 (match_operand:MVE_0 2 "s_register_operand" "w")
4790 (match_operand:HI 3 "vpr_register_operand" "Up")]
4793 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4794 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
4795 [(set_attr "type" "mve_move")
4796 (set_attr "length""8")])
4799 ;; [vrshrnbq_n_s, vrshrnbq_n_u])
4801 (define_insn "mve_vrshrnbq_n_<supf><mode>"
4803 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4804 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4805 (match_operand:MVE_5 2 "s_register_operand" "w")
4806 (match_operand:SI 3 "mve_imm_8" "Rb")]
4810 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
4811 [(set_attr "type" "mve_move")
4815 ;; [vrshrntq_n_u, vrshrntq_n_s])
4817 (define_insn "mve_vrshrntq_n_<supf><mode>"
4819 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4820 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4821 (match_operand:MVE_5 2 "s_register_operand" "w")
4822 (match_operand:SI 3 "mve_imm_8" "Rb")]
4826 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
4827 [(set_attr "type" "mve_move")
4831 ;; [vshrnbq_n_u, vshrnbq_n_s])
4833 (define_insn "mve_vshrnbq_n_<supf><mode>"
4835 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4836 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4837 (match_operand:MVE_5 2 "s_register_operand" "w")
4838 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4842 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
4843 [(set_attr "type" "mve_move")
4847 ;; [vshrntq_n_s, vshrntq_n_u])
4849 (define_insn "mve_vshrntq_n_<supf><mode>"
4851 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4852 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4853 (match_operand:MVE_5 2 "s_register_operand" "w")
4854 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4858 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
4859 [(set_attr "type" "mve_move")
4863 ;; [vcvtmq_m_s, vcvtmq_m_u])
4865 (define_insn "mve_vcvtmq_m_<supf><mode>"
4867 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4868 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4869 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4870 (match_operand:HI 3 "vpr_register_operand" "Up")]
4873 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4874 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4875 [(set_attr "type" "mve_move")
4876 (set_attr "length""8")])
4879 ;; [vcvtpq_m_u, vcvtpq_m_s])
4881 (define_insn "mve_vcvtpq_m_<supf><mode>"
4883 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4884 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4885 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4886 (match_operand:HI 3 "vpr_register_operand" "Up")]
4889 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4890 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4891 [(set_attr "type" "mve_move")
4892 (set_attr "length""8")])
4895 ;; [vcvtnq_m_s, vcvtnq_m_u])
4897 (define_insn "mve_vcvtnq_m_<supf><mode>"
4899 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4900 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4901 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4902 (match_operand:HI 3 "vpr_register_operand" "Up")]
4905 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4906 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4907 [(set_attr "type" "mve_move")
4908 (set_attr "length""8")])
4911 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
4913 (define_insn "mve_vcvtq_m_n_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:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
4919 (match_operand:HI 4 "vpr_register_operand" "Up")]
4922 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4923 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
4924 [(set_attr "type" "mve_move")
4925 (set_attr "length""8")])
4928 ;; [vrev16q_m_u, vrev16q_m_s])
4930 (define_insn "mve_vrev16q_m_<supf>v16qi"
4932 (set (match_operand:V16QI 0 "s_register_operand" "=w")
4933 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
4934 (match_operand:V16QI 2 "s_register_operand" "w")
4935 (match_operand:HI 3 "vpr_register_operand" "Up")]
4939 "vpst\;vrev16t.8 %q0, %q2"
4940 [(set_attr "type" "mve_move")
4941 (set_attr "length""8")])
4944 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
4946 (define_insn "mve_vcvtq_m_from_f_<supf><mode>"
4948 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4949 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4950 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
4951 (match_operand:HI 3 "vpr_register_operand" "Up")]
4954 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4955 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
4956 [(set_attr "type" "mve_move")
4957 (set_attr "length""8")])
4960 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
4962 (define_insn "mve_vrmlaldavhq_p_<supf>v4si"
4964 (set (match_operand:DI 0 "s_register_operand" "=r")
4965 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4966 (match_operand:V4SI 2 "s_register_operand" "w")
4967 (match_operand:HI 3 "vpr_register_operand" "Up")]
4971 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
4972 [(set_attr "type" "mve_move")
4973 (set_attr "length""8")])
4976 ;; [vrmlsldavhaq_s])
4978 (define_insn "mve_vrmlsldavhaq_sv4si"
4980 (set (match_operand:DI 0 "s_register_operand" "=r")
4981 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4982 (match_operand:V4SI 2 "s_register_operand" "w")
4983 (match_operand:V4SI 3 "s_register_operand" "w")]
4987 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
4988 [(set_attr "type" "mve_move")
4992 ;; [vabavq_p_s, vabavq_p_u])
4994 (define_insn "mve_vabavq_p_<supf><mode>"
4996 (set (match_operand:SI 0 "s_register_operand" "=r")
4997 (unspec:SI [(match_operand:SI 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\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
5005 [(set_attr "type" "mve_move")
5011 (define_insn "mve_vqshluq_m_n_s<mode>"
5013 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5014 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5015 (match_operand:MVE_2 2 "s_register_operand" "w")
5016 (match_operand:SI 3 "mve_imm_7" "Ra")
5017 (match_operand:HI 4 "vpr_register_operand" "Up")]
5021 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
5022 [(set_attr "type" "mve_move")])
5025 ;; [vshlq_m_s, vshlq_m_u])
5027 (define_insn "mve_vshlq_m_<supf><mode>"
5029 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5030 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5031 (match_operand:MVE_2 2 "s_register_operand" "w")
5032 (match_operand:MVE_2 3 "s_register_operand" "w")
5033 (match_operand:HI 4 "vpr_register_operand" "Up")]
5037 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5038 [(set_attr "type" "mve_move")])
5041 ;; [vsriq_m_n_s, vsriq_m_n_u])
5043 (define_insn "mve_vsriq_m_n_<supf><mode>"
5045 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5046 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5047 (match_operand:MVE_2 2 "s_register_operand" "w")
5048 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
5049 (match_operand:HI 4 "vpr_register_operand" "Up")]
5053 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
5054 [(set_attr "type" "mve_move")])
5057 ;; [vsubq_m_u, vsubq_m_s])
5059 (define_insn "mve_vsubq_m_<supf><mode>"
5061 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5062 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5063 (match_operand:MVE_2 2 "s_register_operand" "w")
5064 (match_operand:MVE_2 3 "s_register_operand" "w")
5065 (match_operand:HI 4 "vpr_register_operand" "Up")]
5069 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
5070 [(set_attr "type" "mve_move")])
5073 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
5075 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
5077 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5078 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5079 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5080 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5081 (match_operand:HI 4 "vpr_register_operand" "Up")]
5084 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5085 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5086 [(set_attr "type" "mve_move")
5087 (set_attr "length""8")])
5089 ;; [vabdq_m_s, vabdq_m_u])
5091 (define_insn "mve_vabdq_m_<supf><mode>"
5093 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5094 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5095 (match_operand:MVE_2 2 "s_register_operand" "w")
5096 (match_operand:MVE_2 3 "s_register_operand" "w")
5097 (match_operand:HI 4 "vpr_register_operand" "Up")]
5101 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5102 [(set_attr "type" "mve_move")
5103 (set_attr "length""8")])
5106 ;; [vaddq_m_n_s, vaddq_m_n_u])
5108 (define_insn "mve_vaddq_m_n_<supf><mode>"
5110 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5111 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5112 (match_operand:MVE_2 2 "s_register_operand" "w")
5113 (match_operand:<V_elem> 3 "s_register_operand" "r")
5114 (match_operand:HI 4 "vpr_register_operand" "Up")]
5118 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3"
5119 [(set_attr "type" "mve_move")
5120 (set_attr "length""8")])
5123 ;; [vaddq_m_u, vaddq_m_s])
5125 (define_insn "mve_vaddq_m_<supf><mode>"
5127 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5128 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5129 (match_operand:MVE_2 2 "s_register_operand" "w")
5130 (match_operand:MVE_2 3 "s_register_operand" "w")
5131 (match_operand:HI 4 "vpr_register_operand" "Up")]
5135 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3"
5136 [(set_attr "type" "mve_move")
5137 (set_attr "length""8")])
5140 ;; [vandq_m_u, vandq_m_s])
5142 (define_insn "mve_vandq_m_<supf><mode>"
5144 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5145 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5146 (match_operand:MVE_2 2 "s_register_operand" "w")
5147 (match_operand:MVE_2 3 "s_register_operand" "w")
5148 (match_operand:HI 4 "vpr_register_operand" "Up")]
5152 "vpst\;vandt %q0, %q2, %q3"
5153 [(set_attr "type" "mve_move")
5154 (set_attr "length""8")])
5157 ;; [vbicq_m_u, vbicq_m_s])
5159 (define_insn "mve_vbicq_m_<supf><mode>"
5161 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5162 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5163 (match_operand:MVE_2 2 "s_register_operand" "w")
5164 (match_operand:MVE_2 3 "s_register_operand" "w")
5165 (match_operand:HI 4 "vpr_register_operand" "Up")]
5169 "vpst\;vbict %q0, %q2, %q3"
5170 [(set_attr "type" "mve_move")
5171 (set_attr "length""8")])
5174 ;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
5176 (define_insn "mve_vbrsrq_m_n_<supf><mode>"
5178 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5179 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5180 (match_operand:MVE_2 2 "s_register_operand" "w")
5181 (match_operand:SI 3 "s_register_operand" "r")
5182 (match_operand:HI 4 "vpr_register_operand" "Up")]
5186 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
5187 [(set_attr "type" "mve_move")
5188 (set_attr "length""8")])
5191 ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
5193 (define_insn "mve_vcaddq_rot270_m_<supf><mode>"
5195 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5196 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5197 (match_operand:MVE_2 2 "s_register_operand" "w")
5198 (match_operand:MVE_2 3 "s_register_operand" "w")
5199 (match_operand:HI 4 "vpr_register_operand" "Up")]
5203 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270"
5204 [(set_attr "type" "mve_move")
5205 (set_attr "length""8")])
5208 ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
5210 (define_insn "mve_vcaddq_rot90_m_<supf><mode>"
5212 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5213 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5214 (match_operand:MVE_2 2 "s_register_operand" "w")
5215 (match_operand:MVE_2 3 "s_register_operand" "w")
5216 (match_operand:HI 4 "vpr_register_operand" "Up")]
5220 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90"
5221 [(set_attr "type" "mve_move")
5222 (set_attr "length""8")])
5225 ;; [veorq_m_s, veorq_m_u])
5227 (define_insn "mve_veorq_m_<supf><mode>"
5229 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5230 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5231 (match_operand:MVE_2 2 "s_register_operand" "w")
5232 (match_operand:MVE_2 3 "s_register_operand" "w")
5233 (match_operand:HI 4 "vpr_register_operand" "Up")]
5237 "vpst\;veort %q0, %q2, %q3"
5238 [(set_attr "type" "mve_move")
5239 (set_attr "length""8")])
5242 ;; [vhaddq_m_n_s, vhaddq_m_n_u])
5244 (define_insn "mve_vhaddq_m_n_<supf><mode>"
5246 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5247 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5248 (match_operand:MVE_2 2 "s_register_operand" "w")
5249 (match_operand:<V_elem> 3 "s_register_operand" "r")
5250 (match_operand:HI 4 "vpr_register_operand" "Up")]
5254 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5255 [(set_attr "type" "mve_move")
5256 (set_attr "length""8")])
5259 ;; [vhaddq_m_s, vhaddq_m_u])
5261 (define_insn "mve_vhaddq_m_<supf><mode>"
5263 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5264 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5265 (match_operand:MVE_2 2 "s_register_operand" "w")
5266 (match_operand:MVE_2 3 "s_register_operand" "w")
5267 (match_operand:HI 4 "vpr_register_operand" "Up")]
5271 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5272 [(set_attr "type" "mve_move")
5273 (set_attr "length""8")])
5276 ;; [vhsubq_m_n_s, vhsubq_m_n_u])
5278 (define_insn "mve_vhsubq_m_n_<supf><mode>"
5280 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5281 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5282 (match_operand:MVE_2 2 "s_register_operand" "w")
5283 (match_operand:<V_elem> 3 "s_register_operand" "r")
5284 (match_operand:HI 4 "vpr_register_operand" "Up")]
5288 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5289 [(set_attr "type" "mve_move")
5290 (set_attr "length""8")])
5293 ;; [vhsubq_m_s, vhsubq_m_u])
5295 (define_insn "mve_vhsubq_m_<supf><mode>"
5297 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5298 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5299 (match_operand:MVE_2 2 "s_register_operand" "w")
5300 (match_operand:MVE_2 3 "s_register_operand" "w")
5301 (match_operand:HI 4 "vpr_register_operand" "Up")]
5305 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5306 [(set_attr "type" "mve_move")
5307 (set_attr "length""8")])
5310 ;; [vmaxq_m_s, vmaxq_m_u])
5312 (define_insn "mve_vmaxq_m_<supf><mode>"
5314 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5315 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5316 (match_operand:MVE_2 2 "s_register_operand" "w")
5317 (match_operand:MVE_2 3 "s_register_operand" "w")
5318 (match_operand:HI 4 "vpr_register_operand" "Up")]
5322 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5323 [(set_attr "type" "mve_move")
5324 (set_attr "length""8")])
5327 ;; [vminq_m_s, vminq_m_u])
5329 (define_insn "mve_vminq_m_<supf><mode>"
5331 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5332 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5333 (match_operand:MVE_2 2 "s_register_operand" "w")
5334 (match_operand:MVE_2 3 "s_register_operand" "w")
5335 (match_operand:HI 4 "vpr_register_operand" "Up")]
5339 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5340 [(set_attr "type" "mve_move")
5341 (set_attr "length""8")])
5344 ;; [vmladavaq_p_u, vmladavaq_p_s])
5346 (define_insn "mve_vmladavaq_p_<supf><mode>"
5348 (set (match_operand:SI 0 "s_register_operand" "=Te")
5349 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5350 (match_operand:MVE_2 2 "s_register_operand" "w")
5351 (match_operand:MVE_2 3 "s_register_operand" "w")
5352 (match_operand:HI 4 "vpr_register_operand" "Up")]
5356 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3"
5357 [(set_attr "type" "mve_move")
5358 (set_attr "length""8")])
5361 ;; [vmlaq_m_n_s, vmlaq_m_n_u])
5363 (define_insn "mve_vmlaq_m_n_<supf><mode>"
5365 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5366 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5367 (match_operand:MVE_2 2 "s_register_operand" "w")
5368 (match_operand:<V_elem> 3 "s_register_operand" "r")
5369 (match_operand:HI 4 "vpr_register_operand" "Up")]
5373 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3"
5374 [(set_attr "type" "mve_move")
5375 (set_attr "length""8")])
5378 ;; [vmlasq_m_n_u, vmlasq_m_n_s])
5380 (define_insn "mve_vmlasq_m_n_<supf><mode>"
5382 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5383 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5384 (match_operand:MVE_2 2 "s_register_operand" "w")
5385 (match_operand:<V_elem> 3 "s_register_operand" "r")
5386 (match_operand:HI 4 "vpr_register_operand" "Up")]
5390 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3"
5391 [(set_attr "type" "mve_move")
5392 (set_attr "length""8")])
5395 ;; [vmulhq_m_s, vmulhq_m_u])
5397 (define_insn "mve_vmulhq_m_<supf><mode>"
5399 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5400 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5401 (match_operand:MVE_2 2 "s_register_operand" "w")
5402 (match_operand:MVE_2 3 "s_register_operand" "w")
5403 (match_operand:HI 4 "vpr_register_operand" "Up")]
5407 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5408 [(set_attr "type" "mve_move")
5409 (set_attr "length""8")])
5412 ;; [vmullbq_int_m_u, vmullbq_int_m_s])
5414 (define_insn "mve_vmullbq_int_m_<supf><mode>"
5416 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5417 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5418 (match_operand:MVE_2 2 "s_register_operand" "w")
5419 (match_operand:MVE_2 3 "s_register_operand" "w")
5420 (match_operand:HI 4 "vpr_register_operand" "Up")]
5424 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5425 [(set_attr "type" "mve_move")
5426 (set_attr "length""8")])
5429 ;; [vmulltq_int_m_s, vmulltq_int_m_u])
5431 (define_insn "mve_vmulltq_int_m_<supf><mode>"
5433 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5434 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5435 (match_operand:MVE_2 2 "s_register_operand" "w")
5436 (match_operand:MVE_2 3 "s_register_operand" "w")
5437 (match_operand:HI 4 "vpr_register_operand" "Up")]
5441 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5442 [(set_attr "type" "mve_move")
5443 (set_attr "length""8")])
5446 ;; [vmulq_m_n_u, vmulq_m_n_s])
5448 (define_insn "mve_vmulq_m_n_<supf><mode>"
5450 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5451 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5452 (match_operand:MVE_2 2 "s_register_operand" "w")
5453 (match_operand:<V_elem> 3 "s_register_operand" "r")
5454 (match_operand:HI 4 "vpr_register_operand" "Up")]
5458 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3"
5459 [(set_attr "type" "mve_move")
5460 (set_attr "length""8")])
5463 ;; [vmulq_m_s, vmulq_m_u])
5465 (define_insn "mve_vmulq_m_<supf><mode>"
5467 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5468 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5469 (match_operand:MVE_2 2 "s_register_operand" "w")
5470 (match_operand:MVE_2 3 "s_register_operand" "w")
5471 (match_operand:HI 4 "vpr_register_operand" "Up")]
5475 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3"
5476 [(set_attr "type" "mve_move")
5477 (set_attr "length""8")])
5480 ;; [vornq_m_u, vornq_m_s])
5482 (define_insn "mve_vornq_m_<supf><mode>"
5484 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5485 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5486 (match_operand:MVE_2 2 "s_register_operand" "w")
5487 (match_operand:MVE_2 3 "s_register_operand" "w")
5488 (match_operand:HI 4 "vpr_register_operand" "Up")]
5492 "vpst\;vornt %q0, %q2, %q3"
5493 [(set_attr "type" "mve_move")
5494 (set_attr "length""8")])
5497 ;; [vorrq_m_s, vorrq_m_u])
5499 (define_insn "mve_vorrq_m_<supf><mode>"
5501 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5502 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5503 (match_operand:MVE_2 2 "s_register_operand" "w")
5504 (match_operand:MVE_2 3 "s_register_operand" "w")
5505 (match_operand:HI 4 "vpr_register_operand" "Up")]
5509 "vpst\;vorrt %q0, %q2, %q3"
5510 [(set_attr "type" "mve_move")
5511 (set_attr "length""8")])
5514 ;; [vqaddq_m_n_u, vqaddq_m_n_s])
5516 (define_insn "mve_vqaddq_m_n_<supf><mode>"
5518 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5519 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5520 (match_operand:MVE_2 2 "s_register_operand" "w")
5521 (match_operand:<V_elem> 3 "s_register_operand" "r")
5522 (match_operand:HI 4 "vpr_register_operand" "Up")]
5526 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5527 [(set_attr "type" "mve_move")
5528 (set_attr "length""8")])
5531 ;; [vqaddq_m_u, vqaddq_m_s])
5533 (define_insn "mve_vqaddq_m_<supf><mode>"
5535 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5536 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5537 (match_operand:MVE_2 2 "s_register_operand" "w")
5538 (match_operand:MVE_2 3 "s_register_operand" "w")
5539 (match_operand:HI 4 "vpr_register_operand" "Up")]
5543 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5544 [(set_attr "type" "mve_move")
5545 (set_attr "length""8")])
5548 ;; [vqdmlahq_m_n_s])
5550 (define_insn "mve_vqdmlahq_m_n_s<mode>"
5552 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5553 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5554 (match_operand:MVE_2 2 "s_register_operand" "w")
5555 (match_operand:<V_elem> 3 "s_register_operand" "r")
5556 (match_operand:HI 4 "vpr_register_operand" "Up")]
5560 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5561 [(set_attr "type" "mve_move")
5562 (set_attr "length""8")])
5565 ;; [vqdmlashq_m_n_s])
5567 (define_insn "mve_vqdmlashq_m_n_s<mode>"
5569 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5570 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5571 (match_operand:MVE_2 2 "s_register_operand" "w")
5572 (match_operand:<V_elem> 3 "s_register_operand" "r")
5573 (match_operand:HI 4 "vpr_register_operand" "Up")]
5577 "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5578 [(set_attr "type" "mve_move")
5579 (set_attr "length""8")])
5582 ;; [vqrdmlahq_m_n_s])
5584 (define_insn "mve_vqrdmlahq_m_n_s<mode>"
5586 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5587 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5588 (match_operand:MVE_2 2 "s_register_operand" "w")
5589 (match_operand:<V_elem> 3 "s_register_operand" "r")
5590 (match_operand:HI 4 "vpr_register_operand" "Up")]
5594 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5595 [(set_attr "type" "mve_move")
5596 (set_attr "length""8")])
5599 ;; [vqrdmlashq_m_n_s])
5601 (define_insn "mve_vqrdmlashq_m_n_s<mode>"
5603 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5604 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5605 (match_operand:MVE_2 2 "s_register_operand" "w")
5606 (match_operand:<V_elem> 3 "s_register_operand" "r")
5607 (match_operand:HI 4 "vpr_register_operand" "Up")]
5611 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5612 [(set_attr "type" "mve_move")
5613 (set_attr "length""8")])
5616 ;; [vqrshlq_m_u, vqrshlq_m_s])
5618 (define_insn "mve_vqrshlq_m_<supf><mode>"
5620 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5621 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5622 (match_operand:MVE_2 2 "s_register_operand" "w")
5623 (match_operand:MVE_2 3 "s_register_operand" "w")
5624 (match_operand:HI 4 "vpr_register_operand" "Up")]
5628 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5629 [(set_attr "type" "mve_move")
5630 (set_attr "length""8")])
5633 ;; [vqshlq_m_n_s, vqshlq_m_n_u])
5635 (define_insn "mve_vqshlq_m_n_<supf><mode>"
5637 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5638 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5639 (match_operand:MVE_2 2 "s_register_operand" "w")
5640 (match_operand:SI 3 "immediate_operand" "i")
5641 (match_operand:HI 4 "vpr_register_operand" "Up")]
5645 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5646 [(set_attr "type" "mve_move")
5647 (set_attr "length""8")])
5650 ;; [vqshlq_m_u, vqshlq_m_s])
5652 (define_insn "mve_vqshlq_m_<supf><mode>"
5654 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5655 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5656 (match_operand:MVE_2 2 "s_register_operand" "w")
5657 (match_operand:MVE_2 3 "s_register_operand" "w")
5658 (match_operand:HI 4 "vpr_register_operand" "Up")]
5662 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5663 [(set_attr "type" "mve_move")
5664 (set_attr "length""8")])
5667 ;; [vqsubq_m_n_u, vqsubq_m_n_s])
5669 (define_insn "mve_vqsubq_m_n_<supf><mode>"
5671 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5672 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5673 (match_operand:MVE_2 2 "s_register_operand" "w")
5674 (match_operand:<V_elem> 3 "s_register_operand" "r")
5675 (match_operand:HI 4 "vpr_register_operand" "Up")]
5679 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5680 [(set_attr "type" "mve_move")
5681 (set_attr "length""8")])
5684 ;; [vqsubq_m_u, vqsubq_m_s])
5686 (define_insn "mve_vqsubq_m_<supf><mode>"
5688 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5689 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5690 (match_operand:MVE_2 2 "s_register_operand" "w")
5691 (match_operand:MVE_2 3 "s_register_operand" "w")
5692 (match_operand:HI 4 "vpr_register_operand" "Up")]
5696 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5697 [(set_attr "type" "mve_move")
5698 (set_attr "length""8")])
5701 ;; [vrhaddq_m_u, vrhaddq_m_s])
5703 (define_insn "mve_vrhaddq_m_<supf><mode>"
5705 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5706 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5707 (match_operand:MVE_2 2 "s_register_operand" "w")
5708 (match_operand:MVE_2 3 "s_register_operand" "w")
5709 (match_operand:HI 4 "vpr_register_operand" "Up")]
5713 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5714 [(set_attr "type" "mve_move")
5715 (set_attr "length""8")])
5718 ;; [vrmulhq_m_u, vrmulhq_m_s])
5720 (define_insn "mve_vrmulhq_m_<supf><mode>"
5722 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5723 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5724 (match_operand:MVE_2 2 "s_register_operand" "w")
5725 (match_operand:MVE_2 3 "s_register_operand" "w")
5726 (match_operand:HI 4 "vpr_register_operand" "Up")]
5730 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5731 [(set_attr "type" "mve_move")
5732 (set_attr "length""8")])
5735 ;; [vrshlq_m_s, vrshlq_m_u])
5737 (define_insn "mve_vrshlq_m_<supf><mode>"
5739 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5740 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5741 (match_operand:MVE_2 2 "s_register_operand" "w")
5742 (match_operand:MVE_2 3 "s_register_operand" "w")
5743 (match_operand:HI 4 "vpr_register_operand" "Up")]
5747 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5748 [(set_attr "type" "mve_move")
5749 (set_attr "length""8")])
5752 ;; [vrshrq_m_n_s, vrshrq_m_n_u])
5754 (define_insn "mve_vrshrq_m_n_<supf><mode>"
5756 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5757 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5758 (match_operand:MVE_2 2 "s_register_operand" "w")
5759 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5760 (match_operand:HI 4 "vpr_register_operand" "Up")]
5764 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5765 [(set_attr "type" "mve_move")
5766 (set_attr "length""8")])
5769 ;; [vshlq_m_n_s, vshlq_m_n_u])
5771 (define_insn "mve_vshlq_m_n_<supf><mode>"
5773 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5774 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5775 (match_operand:MVE_2 2 "s_register_operand" "w")
5776 (match_operand:SI 3 "immediate_operand" "i")
5777 (match_operand:HI 4 "vpr_register_operand" "Up")]
5781 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5782 [(set_attr "type" "mve_move")
5783 (set_attr "length""8")])
5786 ;; [vshrq_m_n_s, vshrq_m_n_u])
5788 (define_insn "mve_vshrq_m_n_<supf><mode>"
5790 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5791 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5792 (match_operand:MVE_2 2 "s_register_operand" "w")
5793 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5794 (match_operand:HI 4 "vpr_register_operand" "Up")]
5798 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5799 [(set_attr "type" "mve_move")
5800 (set_attr "length""8")])
5803 ;; [vsliq_m_n_u, vsliq_m_n_s])
5805 (define_insn "mve_vsliq_m_n_<supf><mode>"
5807 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5808 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5809 (match_operand:MVE_2 2 "s_register_operand" "w")
5810 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
5811 (match_operand:HI 4 "vpr_register_operand" "Up")]
5815 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
5816 [(set_attr "type" "mve_move")
5817 (set_attr "length""8")])
5820 ;; [vsubq_m_n_s, vsubq_m_n_u])
5822 (define_insn "mve_vsubq_m_n_<supf><mode>"
5824 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5825 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5826 (match_operand:MVE_2 2 "s_register_operand" "w")
5827 (match_operand:<V_elem> 3 "s_register_operand" "r")
5828 (match_operand:HI 4 "vpr_register_operand" "Up")]
5832 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
5833 [(set_attr "type" "mve_move")
5834 (set_attr "length""8")])
5837 ;; [vhcaddq_rot270_m_s])
5839 (define_insn "mve_vhcaddq_rot270_m_s<mode>"
5841 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5842 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5843 (match_operand:MVE_2 2 "s_register_operand" "w")
5844 (match_operand:MVE_2 3 "s_register_operand" "w")
5845 (match_operand:HI 4 "vpr_register_operand" "Up")]
5846 VHCADDQ_ROT270_M_S))
5849 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
5850 [(set_attr "type" "mve_move")
5851 (set_attr "length""8")])
5854 ;; [vhcaddq_rot90_m_s])
5856 (define_insn "mve_vhcaddq_rot90_m_s<mode>"
5858 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5859 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5860 (match_operand:MVE_2 2 "s_register_operand" "w")
5861 (match_operand:MVE_2 3 "s_register_operand" "w")
5862 (match_operand:HI 4 "vpr_register_operand" "Up")]
5866 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
5867 [(set_attr "type" "mve_move")
5868 (set_attr "length""8")])
5871 ;; [vmladavaxq_p_s])
5873 (define_insn "mve_vmladavaxq_p_s<mode>"
5875 (set (match_operand:SI 0 "s_register_operand" "=Te")
5876 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5877 (match_operand:MVE_2 2 "s_register_operand" "w")
5878 (match_operand:MVE_2 3 "s_register_operand" "w")
5879 (match_operand:HI 4 "vpr_register_operand" "Up")]
5883 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
5884 [(set_attr "type" "mve_move")
5885 (set_attr "length""8")])
5890 (define_insn "mve_vmlsdavaq_p_s<mode>"
5892 (set (match_operand:SI 0 "s_register_operand" "=Te")
5893 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5894 (match_operand:MVE_2 2 "s_register_operand" "w")
5895 (match_operand:MVE_2 3 "s_register_operand" "w")
5896 (match_operand:HI 4 "vpr_register_operand" "Up")]
5900 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
5901 [(set_attr "type" "mve_move")
5902 (set_attr "length""8")])
5905 ;; [vmlsdavaxq_p_s])
5907 (define_insn "mve_vmlsdavaxq_p_s<mode>"
5909 (set (match_operand:SI 0 "s_register_operand" "=Te")
5910 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5911 (match_operand:MVE_2 2 "s_register_operand" "w")
5912 (match_operand:MVE_2 3 "s_register_operand" "w")
5913 (match_operand:HI 4 "vpr_register_operand" "Up")]
5917 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
5918 [(set_attr "type" "mve_move")
5919 (set_attr "length""8")])
5924 (define_insn "mve_vqdmladhq_m_s<mode>"
5926 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5927 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5928 (match_operand:MVE_2 2 "s_register_operand" "w")
5929 (match_operand:MVE_2 3 "s_register_operand" "w")
5930 (match_operand:HI 4 "vpr_register_operand" "Up")]
5934 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
5935 [(set_attr "type" "mve_move")
5936 (set_attr "length""8")])
5939 ;; [vqdmladhxq_m_s])
5941 (define_insn "mve_vqdmladhxq_m_s<mode>"
5943 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5944 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5945 (match_operand:MVE_2 2 "s_register_operand" "w")
5946 (match_operand:MVE_2 3 "s_register_operand" "w")
5947 (match_operand:HI 4 "vpr_register_operand" "Up")]
5951 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
5952 [(set_attr "type" "mve_move")
5953 (set_attr "length""8")])
5958 (define_insn "mve_vqdmlsdhq_m_s<mode>"
5960 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5961 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5962 (match_operand:MVE_2 2 "s_register_operand" "w")
5963 (match_operand:MVE_2 3 "s_register_operand" "w")
5964 (match_operand:HI 4 "vpr_register_operand" "Up")]
5968 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
5969 [(set_attr "type" "mve_move")
5970 (set_attr "length""8")])
5973 ;; [vqdmlsdhxq_m_s])
5975 (define_insn "mve_vqdmlsdhxq_m_s<mode>"
5977 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5978 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5979 (match_operand:MVE_2 2 "s_register_operand" "w")
5980 (match_operand:MVE_2 3 "s_register_operand" "w")
5981 (match_operand:HI 4 "vpr_register_operand" "Up")]
5985 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
5986 [(set_attr "type" "mve_move")
5987 (set_attr "length""8")])
5990 ;; [vqdmulhq_m_n_s])
5992 (define_insn "mve_vqdmulhq_m_n_s<mode>"
5994 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5995 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5996 (match_operand:MVE_2 2 "s_register_operand" "w")
5997 (match_operand:<V_elem> 3 "s_register_operand" "r")
5998 (match_operand:HI 4 "vpr_register_operand" "Up")]
6002 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6003 [(set_attr "type" "mve_move")
6004 (set_attr "length""8")])
6009 (define_insn "mve_vqdmulhq_m_s<mode>"
6011 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6012 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6013 (match_operand:MVE_2 2 "s_register_operand" "w")
6014 (match_operand:MVE_2 3 "s_register_operand" "w")
6015 (match_operand:HI 4 "vpr_register_operand" "Up")]
6019 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6020 [(set_attr "type" "mve_move")
6021 (set_attr "length""8")])
6024 ;; [vqrdmladhq_m_s])
6026 (define_insn "mve_vqrdmladhq_m_s<mode>"
6028 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6029 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6030 (match_operand:MVE_2 2 "s_register_operand" "w")
6031 (match_operand:MVE_2 3 "s_register_operand" "w")
6032 (match_operand:HI 4 "vpr_register_operand" "Up")]
6036 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6037 [(set_attr "type" "mve_move")
6038 (set_attr "length""8")])
6041 ;; [vqrdmladhxq_m_s])
6043 (define_insn "mve_vqrdmladhxq_m_s<mode>"
6045 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6046 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6047 (match_operand:MVE_2 2 "s_register_operand" "w")
6048 (match_operand:MVE_2 3 "s_register_operand" "w")
6049 (match_operand:HI 4 "vpr_register_operand" "Up")]
6053 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6054 [(set_attr "type" "mve_move")
6055 (set_attr "length""8")])
6058 ;; [vqrdmlsdhq_m_s])
6060 (define_insn "mve_vqrdmlsdhq_m_s<mode>"
6062 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6063 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6064 (match_operand:MVE_2 2 "s_register_operand" "w")
6065 (match_operand:MVE_2 3 "s_register_operand" "w")
6066 (match_operand:HI 4 "vpr_register_operand" "Up")]
6070 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6071 [(set_attr "type" "mve_move")
6072 (set_attr "length""8")])
6075 ;; [vqrdmlsdhxq_m_s])
6077 (define_insn "mve_vqrdmlsdhxq_m_s<mode>"
6079 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6080 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6081 (match_operand:MVE_2 2 "s_register_operand" "w")
6082 (match_operand:MVE_2 3 "s_register_operand" "w")
6083 (match_operand:HI 4 "vpr_register_operand" "Up")]
6087 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6088 [(set_attr "type" "mve_move")
6089 (set_attr "length""8")])
6092 ;; [vqrdmulhq_m_n_s])
6094 (define_insn "mve_vqrdmulhq_m_n_s<mode>"
6096 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6097 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6098 (match_operand:MVE_2 2 "s_register_operand" "w")
6099 (match_operand:<V_elem> 3 "s_register_operand" "r")
6100 (match_operand:HI 4 "vpr_register_operand" "Up")]
6104 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6105 [(set_attr "type" "mve_move")
6106 (set_attr "length""8")])
6111 (define_insn "mve_vqrdmulhq_m_s<mode>"
6113 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6114 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6115 (match_operand:MVE_2 2 "s_register_operand" "w")
6116 (match_operand:MVE_2 3 "s_register_operand" "w")
6117 (match_operand:HI 4 "vpr_register_operand" "Up")]
6121 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6122 [(set_attr "type" "mve_move")
6123 (set_attr "length""8")])
6126 ;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
6128 (define_insn "mve_vmlaldavaq_p_<supf><mode>"
6130 (set (match_operand:DI 0 "s_register_operand" "=r")
6131 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6132 (match_operand:MVE_5 2 "s_register_operand" "w")
6133 (match_operand:MVE_5 3 "s_register_operand" "w")
6134 (match_operand:HI 4 "vpr_register_operand" "Up")]
6138 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6139 [(set_attr "type" "mve_move")
6140 (set_attr "length""8")])
6143 ;; [vmlaldavaxq_p_s])
6145 (define_insn "mve_vmlaldavaxq_p_<supf><mode>"
6147 (set (match_operand:DI 0 "s_register_operand" "=r")
6148 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6149 (match_operand:MVE_5 2 "s_register_operand" "w")
6150 (match_operand:MVE_5 3 "s_register_operand" "w")
6151 (match_operand:HI 4 "vpr_register_operand" "Up")]
6155 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6156 [(set_attr "type" "mve_move")
6157 (set_attr "length""8")])
6160 ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
6162 (define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
6164 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6165 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6166 (match_operand:MVE_5 2 "s_register_operand" "w")
6167 (match_operand:SI 3 "mve_imm_8" "Rb")
6168 (match_operand:HI 4 "vpr_register_operand" "Up")]
6172 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6173 [(set_attr "type" "mve_move")
6174 (set_attr "length""8")])
6177 ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
6179 (define_insn "mve_vqrshrntq_m_n_<supf><mode>"
6181 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6182 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6183 (match_operand:MVE_5 2 "s_register_operand" "w")
6184 (match_operand:SI 3 "mve_imm_8" "Rb")
6185 (match_operand:HI 4 "vpr_register_operand" "Up")]
6189 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6190 [(set_attr "type" "mve_move")
6191 (set_attr "length""8")])
6194 ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
6196 (define_insn "mve_vqshrnbq_m_n_<supf><mode>"
6198 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6199 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6200 (match_operand:MVE_5 2 "s_register_operand" "w")
6201 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6202 (match_operand:HI 4 "vpr_register_operand" "Up")]
6206 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6207 [(set_attr "type" "mve_move")
6208 (set_attr "length""8")])
6211 ;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
6213 (define_insn "mve_vqshrntq_m_n_<supf><mode>"
6215 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6216 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6217 (match_operand:MVE_5 2 "s_register_operand" "w")
6218 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6219 (match_operand:HI 4 "vpr_register_operand" "Up")]
6223 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6224 [(set_attr "type" "mve_move")
6225 (set_attr "length""8")])
6228 ;; [vrmlaldavhaq_p_s])
6230 (define_insn "mve_vrmlaldavhaq_p_sv4si"
6232 (set (match_operand:DI 0 "s_register_operand" "=r")
6233 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6234 (match_operand:V4SI 2 "s_register_operand" "w")
6235 (match_operand:V4SI 3 "s_register_operand" "w")
6236 (match_operand:HI 4 "vpr_register_operand" "Up")]
6240 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
6241 [(set_attr "type" "mve_move")
6242 (set_attr "length""8")])
6245 ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
6247 (define_insn "mve_vrshrnbq_m_n_<supf><mode>"
6249 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6250 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6251 (match_operand:MVE_5 2 "s_register_operand" "w")
6252 (match_operand:SI 3 "mve_imm_8" "Rb")
6253 (match_operand:HI 4 "vpr_register_operand" "Up")]
6257 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6258 [(set_attr "type" "mve_move")
6259 (set_attr "length""8")])
6262 ;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
6264 (define_insn "mve_vrshrntq_m_n_<supf><mode>"
6266 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6267 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6268 (match_operand:MVE_5 2 "s_register_operand" "w")
6269 (match_operand:SI 3 "mve_imm_8" "Rb")
6270 (match_operand:HI 4 "vpr_register_operand" "Up")]
6274 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6275 [(set_attr "type" "mve_move")
6276 (set_attr "length""8")])
6279 ;; [vshllbq_m_n_u, vshllbq_m_n_s])
6281 (define_insn "mve_vshllbq_m_n_<supf><mode>"
6283 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6284 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6285 (match_operand:MVE_3 2 "s_register_operand" "w")
6286 (match_operand:SI 3 "immediate_operand" "i")
6287 (match_operand:HI 4 "vpr_register_operand" "Up")]
6291 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6292 [(set_attr "type" "mve_move")
6293 (set_attr "length""8")])
6296 ;; [vshlltq_m_n_u, vshlltq_m_n_s])
6298 (define_insn "mve_vshlltq_m_n_<supf><mode>"
6300 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6301 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6302 (match_operand:MVE_3 2 "s_register_operand" "w")
6303 (match_operand:SI 3 "immediate_operand" "i")
6304 (match_operand:HI 4 "vpr_register_operand" "Up")]
6308 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6309 [(set_attr "type" "mve_move")
6310 (set_attr "length""8")])
6313 ;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
6315 (define_insn "mve_vshrnbq_m_n_<supf><mode>"
6317 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6318 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6319 (match_operand:MVE_5 2 "s_register_operand" "w")
6320 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6321 (match_operand:HI 4 "vpr_register_operand" "Up")]
6325 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6326 [(set_attr "type" "mve_move")
6327 (set_attr "length""8")])
6330 ;; [vshrntq_m_n_s, vshrntq_m_n_u])
6332 (define_insn "mve_vshrntq_m_n_<supf><mode>"
6334 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6335 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6336 (match_operand:MVE_5 2 "s_register_operand" "w")
6337 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6338 (match_operand:HI 4 "vpr_register_operand" "Up")]
6342 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6343 [(set_attr "type" "mve_move")
6344 (set_attr "length""8")])
6347 ;; [vmlsldavaq_p_s])
6349 (define_insn "mve_vmlsldavaq_p_s<mode>"
6351 (set (match_operand:DI 0 "s_register_operand" "=r")
6352 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6353 (match_operand:MVE_5 2 "s_register_operand" "w")
6354 (match_operand:MVE_5 3 "s_register_operand" "w")
6355 (match_operand:HI 4 "vpr_register_operand" "Up")]
6359 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6360 [(set_attr "type" "mve_move")
6361 (set_attr "length""8")])
6364 ;; [vmlsldavaxq_p_s])
6366 (define_insn "mve_vmlsldavaxq_p_s<mode>"
6368 (set (match_operand:DI 0 "s_register_operand" "=r")
6369 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6370 (match_operand:MVE_5 2 "s_register_operand" "w")
6371 (match_operand:MVE_5 3 "s_register_operand" "w")
6372 (match_operand:HI 4 "vpr_register_operand" "Up")]
6376 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6377 [(set_attr "type" "mve_move")
6378 (set_attr "length""8")])
6381 ;; [vmullbq_poly_m_p])
6383 (define_insn "mve_vmullbq_poly_m_p<mode>"
6385 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6386 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6387 (match_operand:MVE_3 2 "s_register_operand" "w")
6388 (match_operand:MVE_3 3 "s_register_operand" "w")
6389 (match_operand:HI 4 "vpr_register_operand" "Up")]
6393 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6394 [(set_attr "type" "mve_move")
6395 (set_attr "length""8")])
6398 ;; [vmulltq_poly_m_p])
6400 (define_insn "mve_vmulltq_poly_m_p<mode>"
6402 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6403 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6404 (match_operand:MVE_3 2 "s_register_operand" "w")
6405 (match_operand:MVE_3 3 "s_register_operand" "w")
6406 (match_operand:HI 4 "vpr_register_operand" "Up")]
6410 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6411 [(set_attr "type" "mve_move")
6412 (set_attr "length""8")])
6415 ;; [vqdmullbq_m_n_s])
6417 (define_insn "mve_vqdmullbq_m_n_s<mode>"
6419 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6420 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6421 (match_operand:MVE_5 2 "s_register_operand" "w")
6422 (match_operand:<V_elem> 3 "s_register_operand" "r")
6423 (match_operand:HI 4 "vpr_register_operand" "Up")]
6427 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6428 [(set_attr "type" "mve_move")
6429 (set_attr "length""8")])
6434 (define_insn "mve_vqdmullbq_m_s<mode>"
6436 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6437 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6438 (match_operand:MVE_5 2 "s_register_operand" "w")
6439 (match_operand:MVE_5 3 "s_register_operand" "w")
6440 (match_operand:HI 4 "vpr_register_operand" "Up")]
6444 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6445 [(set_attr "type" "mve_move")
6446 (set_attr "length""8")])
6449 ;; [vqdmulltq_m_n_s])
6451 (define_insn "mve_vqdmulltq_m_n_s<mode>"
6453 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6454 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6455 (match_operand:MVE_5 2 "s_register_operand" "w")
6456 (match_operand:<V_elem> 3 "s_register_operand" "r")
6457 (match_operand:HI 4 "vpr_register_operand" "Up")]
6461 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
6462 [(set_attr "type" "mve_move")
6463 (set_attr "length""8")])
6468 (define_insn "mve_vqdmulltq_m_s<mode>"
6470 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6471 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6472 (match_operand:MVE_5 2 "s_register_operand" "w")
6473 (match_operand:MVE_5 3 "s_register_operand" "w")
6474 (match_operand:HI 4 "vpr_register_operand" "Up")]
6478 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6479 [(set_attr "type" "mve_move")
6480 (set_attr "length""8")])
6483 ;; [vqrshrunbq_m_n_s])
6485 (define_insn "mve_vqrshrunbq_m_n_s<mode>"
6487 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6488 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6489 (match_operand:MVE_5 2 "s_register_operand" "w")
6490 (match_operand:SI 3 "mve_imm_8" "Rb")
6491 (match_operand:HI 4 "vpr_register_operand" "Up")]
6495 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6496 [(set_attr "type" "mve_move")
6497 (set_attr "length""8")])
6500 ;; [vqrshruntq_m_n_s])
6502 (define_insn "mve_vqrshruntq_m_n_s<mode>"
6504 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6505 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6506 (match_operand:MVE_5 2 "s_register_operand" "w")
6507 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6508 (match_operand:HI 4 "vpr_register_operand" "Up")]
6512 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6513 [(set_attr "type" "mve_move")
6514 (set_attr "length""8")])
6517 ;; [vqshrunbq_m_n_s])
6519 (define_insn "mve_vqshrunbq_m_n_s<mode>"
6521 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6522 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6523 (match_operand:MVE_5 2 "s_register_operand" "w")
6524 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6525 (match_operand:HI 4 "vpr_register_operand" "Up")]
6529 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6530 [(set_attr "type" "mve_move")
6531 (set_attr "length""8")])
6534 ;; [vqshruntq_m_n_s])
6536 (define_insn "mve_vqshruntq_m_n_s<mode>"
6538 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6539 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6540 (match_operand:MVE_5 2 "s_register_operand" "w")
6541 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6542 (match_operand:HI 4 "vpr_register_operand" "Up")]
6546 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6547 [(set_attr "type" "mve_move")
6548 (set_attr "length""8")])
6551 ;; [vrmlaldavhaq_p_u])
6553 (define_insn "mve_vrmlaldavhaq_p_uv4si"
6555 (set (match_operand:DI 0 "s_register_operand" "=r")
6556 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6557 (match_operand:V4SI 2 "s_register_operand" "w")
6558 (match_operand:V4SI 3 "s_register_operand" "w")
6559 (match_operand:HI 4 "vpr_register_operand" "Up")]
6563 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
6564 [(set_attr "type" "mve_move")
6565 (set_attr "length""8")])
6568 ;; [vrmlaldavhaxq_p_s])
6570 (define_insn "mve_vrmlaldavhaxq_p_sv4si"
6572 (set (match_operand:DI 0 "s_register_operand" "=r")
6573 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6574 (match_operand:V4SI 2 "s_register_operand" "w")
6575 (match_operand:V4SI 3 "s_register_operand" "w")
6576 (match_operand:HI 4 "vpr_register_operand" "Up")]
6580 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6581 [(set_attr "type" "mve_move")
6582 (set_attr "length""8")])
6585 ;; [vrmlsldavhaq_p_s])
6587 (define_insn "mve_vrmlsldavhaq_p_sv4si"
6589 (set (match_operand:DI 0 "s_register_operand" "=r")
6590 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6591 (match_operand:V4SI 2 "s_register_operand" "w")
6592 (match_operand:V4SI 3 "s_register_operand" "w")
6593 (match_operand:HI 4 "vpr_register_operand" "Up")]
6597 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
6598 [(set_attr "type" "mve_move")
6599 (set_attr "length""8")])
6602 ;; [vrmlsldavhaxq_p_s])
6604 (define_insn "mve_vrmlsldavhaxq_p_sv4si"
6606 (set (match_operand:DI 0 "s_register_operand" "=r")
6607 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6608 (match_operand:V4SI 2 "s_register_operand" "w")
6609 (match_operand:V4SI 3 "s_register_operand" "w")
6610 (match_operand:HI 4 "vpr_register_operand" "Up")]
6614 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6615 [(set_attr "type" "mve_move")
6616 (set_attr "length""8")])
6620 (define_insn "mve_vabdq_m_f<mode>"
6622 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6623 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6624 (match_operand:MVE_0 2 "s_register_operand" "w")
6625 (match_operand:MVE_0 3 "s_register_operand" "w")
6626 (match_operand:HI 4 "vpr_register_operand" "Up")]
6629 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6630 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3"
6631 [(set_attr "type" "mve_move")
6632 (set_attr "length""8")])
6637 (define_insn "mve_vaddq_m_f<mode>"
6639 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6640 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6641 (match_operand:MVE_0 2 "s_register_operand" "w")
6642 (match_operand:MVE_0 3 "s_register_operand" "w")
6643 (match_operand:HI 4 "vpr_register_operand" "Up")]
6646 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6647 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3"
6648 [(set_attr "type" "mve_move")
6649 (set_attr "length""8")])
6654 (define_insn "mve_vaddq_m_n_f<mode>"
6656 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6657 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6658 (match_operand:MVE_0 2 "s_register_operand" "w")
6659 (match_operand:<V_elem> 3 "s_register_operand" "r")
6660 (match_operand:HI 4 "vpr_register_operand" "Up")]
6663 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6664 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3"
6665 [(set_attr "type" "mve_move")
6666 (set_attr "length""8")])
6671 (define_insn "mve_vandq_m_f<mode>"
6673 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6674 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6675 (match_operand:MVE_0 2 "s_register_operand" "w")
6676 (match_operand:MVE_0 3 "s_register_operand" "w")
6677 (match_operand:HI 4 "vpr_register_operand" "Up")]
6680 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6681 "vpst\;vandt %q0, %q2, %q3"
6682 [(set_attr "type" "mve_move")
6683 (set_attr "length""8")])
6688 (define_insn "mve_vbicq_m_f<mode>"
6690 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6691 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6692 (match_operand:MVE_0 2 "s_register_operand" "w")
6693 (match_operand:MVE_0 3 "s_register_operand" "w")
6694 (match_operand:HI 4 "vpr_register_operand" "Up")]
6697 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6698 "vpst\;vbict %q0, %q2, %q3"
6699 [(set_attr "type" "mve_move")
6700 (set_attr "length""8")])
6705 (define_insn "mve_vbrsrq_m_n_f<mode>"
6707 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6708 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6709 (match_operand:MVE_0 2 "s_register_operand" "w")
6710 (match_operand:SI 3 "s_register_operand" "r")
6711 (match_operand:HI 4 "vpr_register_operand" "Up")]
6714 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6715 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
6716 [(set_attr "type" "mve_move")
6717 (set_attr "length""8")])
6720 ;; [vcaddq_rot270_m_f])
6722 (define_insn "mve_vcaddq_rot270_m_f<mode>"
6724 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6725 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6726 (match_operand:MVE_0 2 "s_register_operand" "w")
6727 (match_operand:MVE_0 3 "s_register_operand" "w")
6728 (match_operand:HI 4 "vpr_register_operand" "Up")]
6731 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6732 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270"
6733 [(set_attr "type" "mve_move")
6734 (set_attr "length""8")])
6737 ;; [vcaddq_rot90_m_f])
6739 (define_insn "mve_vcaddq_rot90_m_f<mode>"
6741 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6742 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6743 (match_operand:MVE_0 2 "s_register_operand" "w")
6744 (match_operand:MVE_0 3 "s_register_operand" "w")
6745 (match_operand:HI 4 "vpr_register_operand" "Up")]
6748 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6749 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90"
6750 [(set_attr "type" "mve_move")
6751 (set_attr "length""8")])
6756 (define_insn "mve_vcmlaq_m_f<mode>"
6758 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6759 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6760 (match_operand:MVE_0 2 "s_register_operand" "w")
6761 (match_operand:MVE_0 3 "s_register_operand" "w")
6762 (match_operand:HI 4 "vpr_register_operand" "Up")]
6765 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6766 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0"
6767 [(set_attr "type" "mve_move")
6768 (set_attr "length""8")])
6771 ;; [vcmlaq_rot180_m_f])
6773 (define_insn "mve_vcmlaq_rot180_m_f<mode>"
6775 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6776 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6777 (match_operand:MVE_0 2 "s_register_operand" "w")
6778 (match_operand:MVE_0 3 "s_register_operand" "w")
6779 (match_operand:HI 4 "vpr_register_operand" "Up")]
6782 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6783 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180"
6784 [(set_attr "type" "mve_move")
6785 (set_attr "length""8")])
6788 ;; [vcmlaq_rot270_m_f])
6790 (define_insn "mve_vcmlaq_rot270_m_f<mode>"
6792 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6793 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6794 (match_operand:MVE_0 2 "s_register_operand" "w")
6795 (match_operand:MVE_0 3 "s_register_operand" "w")
6796 (match_operand:HI 4 "vpr_register_operand" "Up")]
6799 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6800 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270"
6801 [(set_attr "type" "mve_move")
6802 (set_attr "length""8")])
6805 ;; [vcmlaq_rot90_m_f])
6807 (define_insn "mve_vcmlaq_rot90_m_f<mode>"
6809 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6810 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6811 (match_operand:MVE_0 2 "s_register_operand" "w")
6812 (match_operand:MVE_0 3 "s_register_operand" "w")
6813 (match_operand:HI 4 "vpr_register_operand" "Up")]
6816 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6817 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90"
6818 [(set_attr "type" "mve_move")
6819 (set_attr "length""8")])
6824 (define_insn "mve_vcmulq_m_f<mode>"
6826 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6827 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6828 (match_operand:MVE_0 2 "s_register_operand" "w")
6829 (match_operand:MVE_0 3 "s_register_operand" "w")
6830 (match_operand:HI 4 "vpr_register_operand" "Up")]
6833 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6834 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0"
6835 [(set_attr "type" "mve_move")
6836 (set_attr "length""8")])
6839 ;; [vcmulq_rot180_m_f])
6841 (define_insn "mve_vcmulq_rot180_m_f<mode>"
6843 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6844 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6845 (match_operand:MVE_0 2 "s_register_operand" "w")
6846 (match_operand:MVE_0 3 "s_register_operand" "w")
6847 (match_operand:HI 4 "vpr_register_operand" "Up")]
6850 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6851 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180"
6852 [(set_attr "type" "mve_move")
6853 (set_attr "length""8")])
6856 ;; [vcmulq_rot270_m_f])
6858 (define_insn "mve_vcmulq_rot270_m_f<mode>"
6860 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6861 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6862 (match_operand:MVE_0 2 "s_register_operand" "w")
6863 (match_operand:MVE_0 3 "s_register_operand" "w")
6864 (match_operand:HI 4 "vpr_register_operand" "Up")]
6867 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6868 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270"
6869 [(set_attr "type" "mve_move")
6870 (set_attr "length""8")])
6873 ;; [vcmulq_rot90_m_f])
6875 (define_insn "mve_vcmulq_rot90_m_f<mode>"
6877 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
6878 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6879 (match_operand:MVE_0 2 "s_register_operand" "w")
6880 (match_operand:MVE_0 3 "s_register_operand" "w")
6881 (match_operand:HI 4 "vpr_register_operand" "Up")]
6884 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6885 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90"
6886 [(set_attr "type" "mve_move")
6887 (set_attr "length""8")])
6892 (define_insn "mve_veorq_m_f<mode>"
6894 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6895 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6896 (match_operand:MVE_0 2 "s_register_operand" "w")
6897 (match_operand:MVE_0 3 "s_register_operand" "w")
6898 (match_operand:HI 4 "vpr_register_operand" "Up")]
6901 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6902 "vpst\;veort %q0, %q2, %q3"
6903 [(set_attr "type" "mve_move")
6904 (set_attr "length""8")])
6909 (define_insn "mve_vfmaq_m_f<mode>"
6911 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6912 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6913 (match_operand:MVE_0 2 "s_register_operand" "w")
6914 (match_operand:MVE_0 3 "s_register_operand" "w")
6915 (match_operand:HI 4 "vpr_register_operand" "Up")]
6918 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6919 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3"
6920 [(set_attr "type" "mve_move")
6921 (set_attr "length""8")])
6926 (define_insn "mve_vfmaq_m_n_f<mode>"
6928 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6929 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6930 (match_operand:MVE_0 2 "s_register_operand" "w")
6931 (match_operand:<V_elem> 3 "s_register_operand" "r")
6932 (match_operand:HI 4 "vpr_register_operand" "Up")]
6935 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6936 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3"
6937 [(set_attr "type" "mve_move")
6938 (set_attr "length""8")])
6943 (define_insn "mve_vfmasq_m_n_f<mode>"
6945 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6946 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6947 (match_operand:MVE_0 2 "s_register_operand" "w")
6948 (match_operand:<V_elem> 3 "s_register_operand" "r")
6949 (match_operand:HI 4 "vpr_register_operand" "Up")]
6952 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6953 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3"
6954 [(set_attr "type" "mve_move")
6955 (set_attr "length""8")])
6960 (define_insn "mve_vfmsq_m_f<mode>"
6962 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6963 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6964 (match_operand:MVE_0 2 "s_register_operand" "w")
6965 (match_operand:MVE_0 3 "s_register_operand" "w")
6966 (match_operand:HI 4 "vpr_register_operand" "Up")]
6969 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6970 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3"
6971 [(set_attr "type" "mve_move")
6972 (set_attr "length""8")])
6977 (define_insn "mve_vmaxnmq_m_f<mode>"
6979 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6980 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6981 (match_operand:MVE_0 2 "s_register_operand" "w")
6982 (match_operand:MVE_0 3 "s_register_operand" "w")
6983 (match_operand:HI 4 "vpr_register_operand" "Up")]
6986 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6987 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3"
6988 [(set_attr "type" "mve_move")
6989 (set_attr "length""8")])
6994 (define_insn "mve_vminnmq_m_f<mode>"
6996 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6997 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6998 (match_operand:MVE_0 2 "s_register_operand" "w")
6999 (match_operand:MVE_0 3 "s_register_operand" "w")
7000 (match_operand:HI 4 "vpr_register_operand" "Up")]
7003 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7004 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7005 [(set_attr "type" "mve_move")
7006 (set_attr "length""8")])
7011 (define_insn "mve_vmulq_m_f<mode>"
7013 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7014 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7015 (match_operand:MVE_0 2 "s_register_operand" "w")
7016 (match_operand:MVE_0 3 "s_register_operand" "w")
7017 (match_operand:HI 4 "vpr_register_operand" "Up")]
7020 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7021 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3"
7022 [(set_attr "type" "mve_move")
7023 (set_attr "length""8")])
7028 (define_insn "mve_vmulq_m_n_f<mode>"
7030 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7031 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7032 (match_operand:MVE_0 2 "s_register_operand" "w")
7033 (match_operand:<V_elem> 3 "s_register_operand" "r")
7034 (match_operand:HI 4 "vpr_register_operand" "Up")]
7037 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7038 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3"
7039 [(set_attr "type" "mve_move")
7040 (set_attr "length""8")])
7045 (define_insn "mve_vornq_m_f<mode>"
7047 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7048 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7049 (match_operand:MVE_0 2 "s_register_operand" "w")
7050 (match_operand:MVE_0 3 "s_register_operand" "w")
7051 (match_operand:HI 4 "vpr_register_operand" "Up")]
7054 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7055 "vpst\;vornt %q0, %q2, %q3"
7056 [(set_attr "type" "mve_move")
7057 (set_attr "length""8")])
7062 (define_insn "mve_vorrq_m_f<mode>"
7064 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7065 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7066 (match_operand:MVE_0 2 "s_register_operand" "w")
7067 (match_operand:MVE_0 3 "s_register_operand" "w")
7068 (match_operand:HI 4 "vpr_register_operand" "Up")]
7071 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7072 "vpst\;vorrt %q0, %q2, %q3"
7073 [(set_attr "type" "mve_move")
7074 (set_attr "length""8")])
7079 (define_insn "mve_vsubq_m_f<mode>"
7081 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7082 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7083 (match_operand:MVE_0 2 "s_register_operand" "w")
7084 (match_operand:MVE_0 3 "s_register_operand" "w")
7085 (match_operand:HI 4 "vpr_register_operand" "Up")]
7088 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7089 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
7090 [(set_attr "type" "mve_move")
7091 (set_attr "length""8")])
7096 (define_insn "mve_vsubq_m_n_f<mode>"
7098 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7099 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7100 (match_operand:MVE_0 2 "s_register_operand" "w")
7101 (match_operand:<V_elem> 3 "s_register_operand" "r")
7102 (match_operand:HI 4 "vpr_register_operand" "Up")]
7105 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7106 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
7107 [(set_attr "type" "mve_move")
7108 (set_attr "length""8")])
7111 ;; [vstrbq_s vstrbq_u]
7113 (define_insn "mve_vstrbq_<supf><mode>"
7114 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7115 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
7121 int regno = REGNO (operands[1]);
7122 ops[1] = gen_rtx_REG (TImode, regno);
7123 ops[0] = operands[0];
7124 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
7127 [(set_attr "length" "4")])
7130 ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
7132 (define_expand "mve_vstrbq_scatter_offset_<supf><mode>"
7133 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7134 (match_operand:MVE_2 1 "s_register_operand")
7135 (match_operand:MVE_2 2 "s_register_operand")
7136 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7139 rtx ind = XEXP (operands[0], 0);
7140 gcc_assert (REG_P (ind));
7141 emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1],
7146 (define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn"
7147 [(set (mem:BLK (scratch))
7149 [(match_operand:SI 0 "register_operand" "r")
7150 (match_operand:MVE_2 1 "s_register_operand" "w")
7151 (match_operand:MVE_2 2 "s_register_operand" "w")]
7154 "vstrb.<V_sz_elem>\t%q2, [%0, %q1]"
7155 [(set_attr "length" "4")])
7158 ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
7160 (define_insn "mve_vstrwq_scatter_base_<supf>v4si"
7161 [(set (mem:BLK (scratch))
7163 [(match_operand:V4SI 0 "s_register_operand" "w")
7164 (match_operand:SI 1 "immediate_operand" "i")
7165 (match_operand:V4SI 2 "s_register_operand" "w")]
7171 ops[0] = operands[0];
7172 ops[1] = operands[1];
7173 ops[2] = operands[2];
7174 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
7177 [(set_attr "length" "4")])
7180 ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
7182 (define_insn "mve_vldrbq_gather_offset_<supf><mode>"
7183 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7184 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7185 (match_operand:MVE_2 2 "s_register_operand" "w")]
7191 ops[0] = operands[0];
7192 ops[1] = operands[1];
7193 ops[2] = operands[2];
7194 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7195 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
7197 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7200 [(set_attr "length" "4")])
7203 ;; [vldrbq_s vldrbq_u]
7205 (define_insn "mve_vldrbq_<supf><mode>"
7206 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7207 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")]
7213 int regno = REGNO (operands[0]);
7214 ops[0] = gen_rtx_REG (TImode, regno);
7215 ops[1] = operands[1];
7216 if (<V_sz_elem> == 8)
7217 output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops);
7219 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
7222 [(set_attr "length" "4")])
7225 ;; [vldrwq_gather_base_s vldrwq_gather_base_u]
7227 (define_insn "mve_vldrwq_gather_base_<supf>v4si"
7228 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7229 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7230 (match_operand:SI 2 "immediate_operand" "i")]
7236 ops[0] = operands[0];
7237 ops[1] = operands[1];
7238 ops[2] = operands[2];
7239 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7242 [(set_attr "length" "4")])
7245 ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
7247 (define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>"
7248 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7249 (match_operand:MVE_2 1 "s_register_operand")
7250 (match_operand:MVE_2 2 "s_register_operand")
7251 (match_operand:HI 3 "vpr_register_operand" "Up")
7252 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7255 rtx ind = XEXP (operands[0], 0);
7256 gcc_assert (REG_P (ind));
7258 gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
7264 (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn"
7265 [(set (mem:BLK (scratch))
7267 [(match_operand:SI 0 "register_operand" "r")
7268 (match_operand:MVE_2 1 "s_register_operand" "w")
7269 (match_operand:MVE_2 2 "s_register_operand" "w")
7270 (match_operand:HI 3 "vpr_register_operand" "Up")]
7273 "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]"
7274 [(set_attr "length" "8")])
7277 ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
7279 (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
7280 [(set (mem:BLK (scratch))
7282 [(match_operand:V4SI 0 "s_register_operand" "w")
7283 (match_operand:SI 1 "immediate_operand" "i")
7284 (match_operand:V4SI 2 "s_register_operand" "w")
7285 (match_operand:HI 3 "vpr_register_operand" "Up")]
7291 ops[0] = operands[0];
7292 ops[1] = operands[1];
7293 ops[2] = operands[2];
7294 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
7297 [(set_attr "length" "8")])
7300 ;; [vstrbq_p_s vstrbq_p_u]
7302 (define_insn "mve_vstrbq_p_<supf><mode>"
7303 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7304 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
7305 (match_operand:HI 2 "vpr_register_operand" "Up")]
7311 int regno = REGNO (operands[1]);
7312 ops[1] = gen_rtx_REG (TImode, regno);
7313 ops[0] = operands[0];
7314 output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops);
7317 [(set_attr "length" "8")])
7320 ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
7322 (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
7323 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7324 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7325 (match_operand:MVE_2 2 "s_register_operand" "w")
7326 (match_operand:HI 3 "vpr_register_operand" "Up")]
7332 ops[0] = operands[0];
7333 ops[1] = operands[1];
7334 ops[2] = operands[2];
7335 ops[3] = operands[3];
7336 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7337 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
7339 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7342 [(set_attr "length" "8")])
7345 ;; [vldrbq_z_s vldrbq_z_u]
7347 (define_insn "mve_vldrbq_z_<supf><mode>"
7348 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7349 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")
7350 (match_operand:HI 2 "vpr_register_operand" "Up")]
7356 int regno = REGNO (operands[0]);
7357 ops[0] = gen_rtx_REG (TImode, regno);
7358 ops[1] = operands[1];
7359 if (<V_sz_elem> == 8)
7360 output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops);
7362 output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
7365 [(set_attr "length" "8")])
7368 ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
7370 (define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
7371 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7372 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7373 (match_operand:SI 2 "immediate_operand" "i")
7374 (match_operand:HI 3 "vpr_register_operand" "Up")]
7380 ops[0] = operands[0];
7381 ops[1] = operands[1];
7382 ops[2] = operands[2];
7383 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7386 [(set_attr "length" "8")])
7391 (define_insn "mve_vldrhq_fv8hf"
7392 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7393 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")]
7396 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7399 int regno = REGNO (operands[0]);
7400 ops[0] = gen_rtx_REG (TImode, regno);
7401 ops[1] = operands[1];
7402 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7405 [(set_attr "length" "4")])
7408 ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
7410 (define_insn "mve_vldrhq_gather_offset_<supf><mode>"
7411 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7412 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7413 (match_operand:MVE_6 2 "s_register_operand" "w")]
7419 ops[0] = operands[0];
7420 ops[1] = operands[1];
7421 ops[2] = operands[2];
7422 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7423 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
7425 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7428 [(set_attr "length" "4")])
7431 ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
7433 (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
7434 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7435 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7436 (match_operand:MVE_6 2 "s_register_operand" "w")
7437 (match_operand:HI 3 "vpr_register_operand" "Up")
7443 ops[0] = operands[0];
7444 ops[1] = operands[1];
7445 ops[2] = operands[2];
7446 ops[3] = operands[3];
7447 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7448 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
7450 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7453 [(set_attr "length" "8")])
7456 ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
7458 (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
7459 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7460 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7461 (match_operand:MVE_6 2 "s_register_operand" "w")]
7467 ops[0] = operands[0];
7468 ops[1] = operands[1];
7469 ops[2] = operands[2];
7470 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7471 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7473 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7476 [(set_attr "length" "4")])
7479 ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
7481 (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
7482 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7483 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7484 (match_operand:MVE_6 2 "s_register_operand" "w")
7485 (match_operand:HI 3 "vpr_register_operand" "Up")
7491 ops[0] = operands[0];
7492 ops[1] = operands[1];
7493 ops[2] = operands[2];
7494 ops[3] = operands[3];
7495 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7496 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7498 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7501 [(set_attr "length" "8")])
7504 ;; [vldrhq_s, vldrhq_u]
7506 (define_insn "mve_vldrhq_<supf><mode>"
7507 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7508 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")]
7514 int regno = REGNO (operands[0]);
7515 ops[0] = gen_rtx_REG (TImode, regno);
7516 ops[1] = operands[1];
7517 if (<V_sz_elem> == 16)
7518 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7520 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
7523 [(set_attr "length" "4")])
7528 (define_insn "mve_vldrhq_z_fv8hf"
7529 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7530 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")
7531 (match_operand:HI 2 "vpr_register_operand" "Up")]
7534 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7537 int regno = REGNO (operands[0]);
7538 ops[0] = gen_rtx_REG (TImode, regno);
7539 ops[1] = operands[1];
7540 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7543 [(set_attr "length" "8")])
7546 ;; [vldrhq_z_s vldrhq_z_u]
7548 (define_insn "mve_vldrhq_z_<supf><mode>"
7549 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7550 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")
7551 (match_operand:HI 2 "vpr_register_operand" "Up")]
7557 int regno = REGNO (operands[0]);
7558 ops[0] = gen_rtx_REG (TImode, regno);
7559 ops[1] = operands[1];
7560 if (<V_sz_elem> == 16)
7561 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7563 output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
7566 [(set_attr "length" "8")])
7571 (define_insn "mve_vldrwq_fv4sf"
7572 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7573 (unspec:V4SF [(match_operand:V4SI 1 "mve_memory_operand" "Ux")]
7576 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7579 int regno = REGNO (operands[0]);
7580 ops[0] = gen_rtx_REG (TImode, regno);
7581 ops[1] = operands[1];
7582 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7585 [(set_attr "length" "4")])
7588 ;; [vldrwq_s vldrwq_u]
7590 (define_insn "mve_vldrwq_<supf>v4si"
7591 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7592 (unspec:V4SI [(match_operand:V4SI 1 "mve_memory_operand" "Ux")]
7598 int regno = REGNO (operands[0]);
7599 ops[0] = gen_rtx_REG (TImode, regno);
7600 ops[1] = operands[1];
7601 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7604 [(set_attr "length" "4")])
7609 (define_insn "mve_vldrwq_z_fv4sf"
7610 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7611 (unspec:V4SF [(match_operand:V4SI 1 "mve_memory_operand" "Ux")
7612 (match_operand:HI 2 "vpr_register_operand" "Up")]
7615 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7618 int regno = REGNO (operands[0]);
7619 ops[0] = gen_rtx_REG (TImode, regno);
7620 ops[1] = operands[1];
7621 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7624 [(set_attr "length" "8")])
7627 ;; [vldrwq_z_s vldrwq_z_u]
7629 (define_insn "mve_vldrwq_z_<supf>v4si"
7630 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7631 (unspec:V4SI [(match_operand:V4SI 1 "mve_memory_operand" "Ux")
7632 (match_operand:HI 2 "vpr_register_operand" "Up")]
7638 int regno = REGNO (operands[0]);
7639 ops[0] = gen_rtx_REG (TImode, regno);
7640 ops[1] = operands[1];
7641 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7644 [(set_attr "length" "8")])
7646 (define_expand "mve_vld1q_f<mode>"
7647 [(match_operand:MVE_0 0 "s_register_operand")
7648 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F)
7650 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
7652 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
7656 (define_expand "mve_vld1q_<supf><mode>"
7657 [(match_operand:MVE_2 0 "s_register_operand")
7658 (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q)
7662 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
7667 ;; [vldrdq_gather_base_s vldrdq_gather_base_u]
7669 (define_insn "mve_vldrdq_gather_base_<supf>v2di"
7670 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7671 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
7672 (match_operand:SI 2 "immediate_operand" "i")]
7678 ops[0] = operands[0];
7679 ops[1] = operands[1];
7680 ops[2] = operands[2];
7681 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
7684 [(set_attr "length" "4")])
7687 ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
7689 (define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
7690 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7691 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
7692 (match_operand:SI 2 "immediate_operand" "i")
7693 (match_operand:HI 3 "vpr_register_operand" "Up")]
7699 ops[0] = operands[0];
7700 ops[1] = operands[1];
7701 ops[2] = operands[2];
7702 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
7705 [(set_attr "length" "8")])
7708 ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
7710 (define_insn "mve_vldrdq_gather_offset_<supf>v2di"
7711 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7712 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7713 (match_operand:V2DI 2 "s_register_operand" "w")]
7719 ops[0] = operands[0];
7720 ops[1] = operands[1];
7721 ops[2] = operands[2];
7722 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
7725 [(set_attr "length" "4")])
7728 ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
7730 (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
7731 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7732 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7733 (match_operand:V2DI 2 "s_register_operand" "w")
7734 (match_operand:HI 3 "vpr_register_operand" "Up")]
7740 ops[0] = operands[0];
7741 ops[1] = operands[1];
7742 ops[2] = operands[2];
7743 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
7746 [(set_attr "length" "8")])
7749 ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
7751 (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
7752 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7753 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7754 (match_operand:V2DI 2 "s_register_operand" "w")]
7760 ops[0] = operands[0];
7761 ops[1] = operands[1];
7762 ops[2] = operands[2];
7763 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
7766 [(set_attr "length" "4")])
7769 ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
7771 (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
7772 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7773 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
7774 (match_operand:V2DI 2 "s_register_operand" "w")
7775 (match_operand:HI 3 "vpr_register_operand" "Up")]
7781 ops[0] = operands[0];
7782 ops[1] = operands[1];
7783 ops[2] = operands[2];
7784 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
7787 [(set_attr "length" "8")])
7790 ;; [vldrhq_gather_offset_f]
7792 (define_insn "mve_vldrhq_gather_offset_fv8hf"
7793 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7794 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7795 (match_operand:V8HI 2 "s_register_operand" "w")]
7798 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7801 ops[0] = operands[0];
7802 ops[1] = operands[1];
7803 ops[2] = operands[2];
7804 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
7807 [(set_attr "length" "4")])
7810 ;; [vldrhq_gather_offset_z_f]
7812 (define_insn "mve_vldrhq_gather_offset_z_fv8hf"
7813 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7814 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7815 (match_operand:V8HI 2 "s_register_operand" "w")
7816 (match_operand:HI 3 "vpr_register_operand" "Up")]
7819 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7822 ops[0] = operands[0];
7823 ops[1] = operands[1];
7824 ops[2] = operands[2];
7825 ops[3] = operands[3];
7826 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
7829 [(set_attr "length" "8")])
7832 ;; [vldrhq_gather_shifted_offset_f]
7834 (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
7835 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7836 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7837 (match_operand:V8HI 2 "s_register_operand" "w")]
7840 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7843 ops[0] = operands[0];
7844 ops[1] = operands[1];
7845 ops[2] = operands[2];
7846 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
7849 [(set_attr "length" "4")])
7852 ;; [vldrhq_gather_shifted_offset_z_f]
7854 (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
7855 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
7856 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
7857 (match_operand:V8HI 2 "s_register_operand" "w")
7858 (match_operand:HI 3 "vpr_register_operand" "Up")]
7861 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7864 ops[0] = operands[0];
7865 ops[1] = operands[1];
7866 ops[2] = operands[2];
7867 ops[3] = operands[3];
7868 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
7871 [(set_attr "length" "8")])
7874 ;; [vldrwq_gather_base_f]
7876 (define_insn "mve_vldrwq_gather_base_fv4sf"
7877 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7878 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
7879 (match_operand:SI 2 "immediate_operand" "i")]
7882 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7885 ops[0] = operands[0];
7886 ops[1] = operands[1];
7887 ops[2] = operands[2];
7888 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7891 [(set_attr "length" "4")])
7894 ;; [vldrwq_gather_base_z_f]
7896 (define_insn "mve_vldrwq_gather_base_z_fv4sf"
7897 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7898 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
7899 (match_operand:SI 2 "immediate_operand" "i")
7900 (match_operand:HI 3 "vpr_register_operand" "Up")]
7903 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7906 ops[0] = operands[0];
7907 ops[1] = operands[1];
7908 ops[2] = operands[2];
7909 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7912 [(set_attr "length" "8")])
7915 ;; [vldrwq_gather_offset_f]
7917 (define_insn "mve_vldrwq_gather_offset_fv4sf"
7918 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7919 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
7920 (match_operand:V4SI 2 "s_register_operand" "w")]
7923 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7926 ops[0] = operands[0];
7927 ops[1] = operands[1];
7928 ops[2] = operands[2];
7929 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
7932 [(set_attr "length" "4")])
7935 ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
7937 (define_insn "mve_vldrwq_gather_offset_<supf>v4si"
7938 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7939 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
7940 (match_operand:V4SI 2 "s_register_operand" "w")]
7946 ops[0] = operands[0];
7947 ops[1] = operands[1];
7948 ops[2] = operands[2];
7949 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
7952 [(set_attr "length" "4")])
7955 ;; [vldrwq_gather_offset_z_f]
7957 (define_insn "mve_vldrwq_gather_offset_z_fv4sf"
7958 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
7959 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
7960 (match_operand:V4SI 2 "s_register_operand" "w")
7961 (match_operand:HI 3 "vpr_register_operand" "Up")]
7964 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7967 ops[0] = operands[0];
7968 ops[1] = operands[1];
7969 ops[2] = operands[2];
7970 ops[3] = operands[3];
7971 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
7974 [(set_attr "length" "8")])
7977 ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
7979 (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
7980 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7981 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
7982 (match_operand:V4SI 2 "s_register_operand" "w")
7983 (match_operand:HI 3 "vpr_register_operand" "Up")]
7989 ops[0] = operands[0];
7990 ops[1] = operands[1];
7991 ops[2] = operands[2];
7992 ops[3] = operands[3];
7993 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
7996 [(set_attr "length" "8")])
7999 ;; [vldrwq_gather_shifted_offset_f]
8001 (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
8002 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8003 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8004 (match_operand:V4SI 2 "s_register_operand" "w")]
8007 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8010 ops[0] = operands[0];
8011 ops[1] = operands[1];
8012 ops[2] = operands[2];
8013 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8016 [(set_attr "length" "4")])
8019 ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
8021 (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
8022 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8023 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8024 (match_operand:V4SI 2 "s_register_operand" "w")]
8030 ops[0] = operands[0];
8031 ops[1] = operands[1];
8032 ops[2] = operands[2];
8033 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8036 [(set_attr "length" "4")])
8039 ;; [vldrwq_gather_shifted_offset_z_f]
8041 (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
8042 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8043 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8044 (match_operand:V4SI 2 "s_register_operand" "w")
8045 (match_operand:HI 3 "vpr_register_operand" "Up")]
8048 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8051 ops[0] = operands[0];
8052 ops[1] = operands[1];
8053 ops[2] = operands[2];
8054 ops[3] = operands[3];
8055 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8058 [(set_attr "length" "8")])
8061 ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
8063 (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
8064 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8065 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8066 (match_operand:V4SI 2 "s_register_operand" "w")
8067 (match_operand:HI 3 "vpr_register_operand" "Up")]
8073 ops[0] = operands[0];
8074 ops[1] = operands[1];
8075 ops[2] = operands[2];
8076 ops[3] = operands[3];
8077 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8080 [(set_attr "length" "8")])
8085 (define_insn "mve_vstrhq_fv8hf"
8086 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8087 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
8090 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8093 int regno = REGNO (operands[1]);
8094 ops[1] = gen_rtx_REG (TImode, regno);
8095 ops[0] = operands[0];
8096 output_asm_insn ("vstrh.16\t%q1, %E0",ops);
8099 [(set_attr "length" "4")])
8104 (define_insn "mve_vstrhq_p_fv8hf"
8105 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8106 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
8107 (match_operand:HI 2 "vpr_register_operand" "Up")]
8110 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8113 int regno = REGNO (operands[1]);
8114 ops[1] = gen_rtx_REG (TImode, regno);
8115 ops[0] = operands[0];
8116 output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops);
8119 [(set_attr "length" "8")])
8122 ;; [vstrhq_p_s vstrhq_p_u]
8124 (define_insn "mve_vstrhq_p_<supf><mode>"
8125 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8126 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
8127 (match_operand:HI 2 "vpr_register_operand" "Up")]
8133 int regno = REGNO (operands[1]);
8134 ops[1] = gen_rtx_REG (TImode, regno);
8135 ops[0] = operands[0];
8136 output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops);
8139 [(set_attr "length" "8")])
8142 ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
8144 (define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>"
8145 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8146 (match_operand:MVE_6 1 "s_register_operand")
8147 (match_operand:MVE_6 2 "s_register_operand")
8148 (match_operand:HI 3 "vpr_register_operand")
8149 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8152 rtx ind = XEXP (operands[0], 0);
8153 gcc_assert (REG_P (ind));
8155 gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
8161 (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn"
8162 [(set (mem:BLK (scratch))
8164 [(match_operand:SI 0 "register_operand" "r")
8165 (match_operand:MVE_6 1 "s_register_operand" "w")
8166 (match_operand:MVE_6 2 "s_register_operand" "w")
8167 (match_operand:HI 3 "vpr_register_operand" "Up")]
8170 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]"
8171 [(set_attr "length" "8")])
8174 ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
8176 (define_expand "mve_vstrhq_scatter_offset_<supf><mode>"
8177 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8178 (match_operand:MVE_6 1 "s_register_operand")
8179 (match_operand:MVE_6 2 "s_register_operand")
8180 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8183 rtx ind = XEXP (operands[0], 0);
8184 gcc_assert (REG_P (ind));
8185 emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1],
8190 (define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn"
8191 [(set (mem:BLK (scratch))
8193 [(match_operand:SI 0 "register_operand" "r")
8194 (match_operand:MVE_6 1 "s_register_operand" "w")
8195 (match_operand:MVE_6 2 "s_register_operand" "w")]
8198 "vstrh.<V_sz_elem>\t%q2, [%0, %q1]"
8199 [(set_attr "length" "4")])
8202 ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
8204 (define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
8205 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8206 (match_operand:MVE_6 1 "s_register_operand")
8207 (match_operand:MVE_6 2 "s_register_operand")
8208 (match_operand:HI 3 "vpr_register_operand")
8209 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8212 rtx ind = XEXP (operands[0], 0);
8213 gcc_assert (REG_P (ind));
8215 gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1],
8221 (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn"
8222 [(set (mem:BLK (scratch))
8224 [(match_operand:SI 0 "register_operand" "r")
8225 (match_operand:MVE_6 1 "s_register_operand" "w")
8226 (match_operand:MVE_6 2 "s_register_operand" "w")
8227 (match_operand:HI 3 "vpr_register_operand" "Up")]
8230 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8231 [(set_attr "length" "8")])
8234 ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
8236 (define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
8237 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8238 (match_operand:MVE_6 1 "s_register_operand")
8239 (match_operand:MVE_6 2 "s_register_operand")
8240 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8243 rtx ind = XEXP (operands[0], 0);
8244 gcc_assert (REG_P (ind));
8246 gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1],
8251 (define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn"
8252 [(set (mem:BLK (scratch))
8254 [(match_operand:SI 0 "register_operand" "r")
8255 (match_operand:MVE_6 1 "s_register_operand" "w")
8256 (match_operand:MVE_6 2 "s_register_operand" "w")]
8259 "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8260 [(set_attr "length" "4")])
8263 ;; [vstrhq_s, vstrhq_u]
8265 (define_insn "mve_vstrhq_<supf><mode>"
8266 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8267 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
8273 int regno = REGNO (operands[1]);
8274 ops[1] = gen_rtx_REG (TImode, regno);
8275 ops[0] = operands[0];
8276 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
8279 [(set_attr "length" "4")])
8284 (define_insn "mve_vstrwq_fv4sf"
8285 [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux")
8286 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
8289 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8292 int regno = REGNO (operands[1]);
8293 ops[1] = gen_rtx_REG (TImode, regno);
8294 ops[0] = operands[0];
8295 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8298 [(set_attr "length" "4")])
8303 (define_insn "mve_vstrwq_p_fv4sf"
8304 [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux")
8305 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
8306 (match_operand:HI 2 "vpr_register_operand" "Up")]
8309 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8312 int regno = REGNO (operands[1]);
8313 ops[1] = gen_rtx_REG (TImode, regno);
8314 ops[0] = operands[0];
8315 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8318 [(set_attr "length" "8")])
8321 ;; [vstrwq_p_s vstrwq_p_u]
8323 (define_insn "mve_vstrwq_p_<supf>v4si"
8324 [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux")
8325 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8326 (match_operand:HI 2 "vpr_register_operand" "Up")]
8332 int regno = REGNO (operands[1]);
8333 ops[1] = gen_rtx_REG (TImode, regno);
8334 ops[0] = operands[0];
8335 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8338 [(set_attr "length" "8")])
8341 ;; [vstrwq_s vstrwq_u]
8343 (define_insn "mve_vstrwq_<supf>v4si"
8344 [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux")
8345 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
8351 int regno = REGNO (operands[1]);
8352 ops[1] = gen_rtx_REG (TImode, regno);
8353 ops[0] = operands[0];
8354 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8357 [(set_attr "length" "4")])
8359 (define_expand "mve_vst1q_f<mode>"
8360 [(match_operand:<MVE_CNVT> 0 "mve_memory_operand")
8361 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
8363 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8365 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8369 (define_expand "mve_vst1q_<supf><mode>"
8370 [(match_operand:MVE_2 0 "mve_memory_operand")
8371 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
8375 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8380 ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
8382 (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
8383 [(set (mem:BLK (scratch))
8385 [(match_operand:V2DI 0 "s_register_operand" "w")
8386 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8387 (match_operand:V2DI 2 "s_register_operand" "w")
8388 (match_operand:HI 3 "vpr_register_operand" "Up")]
8394 ops[0] = operands[0];
8395 ops[1] = operands[1];
8396 ops[2] = operands[2];
8397 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
8400 [(set_attr "length" "8")])
8403 ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
8405 (define_insn "mve_vstrdq_scatter_base_<supf>v2di"
8406 [(set (mem:BLK (scratch))
8408 [(match_operand:V2DI 0 "s_register_operand" "=w")
8409 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8410 (match_operand:V2DI 2 "s_register_operand" "w")]
8416 ops[0] = operands[0];
8417 ops[1] = operands[1];
8418 ops[2] = operands[2];
8419 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
8422 [(set_attr "length" "4")])
8425 ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
8427 (define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di"
8428 [(match_operand:V2DI 0 "mve_scatter_memory")
8429 (match_operand:V2DI 1 "s_register_operand")
8430 (match_operand:V2DI 2 "s_register_operand")
8431 (match_operand:HI 3 "vpr_register_operand")
8432 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8435 rtx ind = XEXP (operands[0], 0);
8436 gcc_assert (REG_P (ind));
8437 emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1],
8443 (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn"
8444 [(set (mem:BLK (scratch))
8446 [(match_operand:SI 0 "register_operand" "r")
8447 (match_operand:V2DI 1 "s_register_operand" "w")
8448 (match_operand:V2DI 2 "s_register_operand" "w")
8449 (match_operand:HI 3 "vpr_register_operand" "Up")]
8452 "vpst\;vstrdt.64\t%q2, [%0, %q1]"
8453 [(set_attr "length" "8")])
8456 ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
8458 (define_expand "mve_vstrdq_scatter_offset_<supf>v2di"
8459 [(match_operand:V2DI 0 "mve_scatter_memory")
8460 (match_operand:V2DI 1 "s_register_operand")
8461 (match_operand:V2DI 2 "s_register_operand")
8462 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8465 rtx ind = XEXP (operands[0], 0);
8466 gcc_assert (REG_P (ind));
8467 emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1],
8472 (define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn"
8473 [(set (mem:BLK (scratch))
8475 [(match_operand:SI 0 "register_operand" "r")
8476 (match_operand:V2DI 1 "s_register_operand" "w")
8477 (match_operand:V2DI 2 "s_register_operand" "w")]
8480 "vstrd.64\t%q2, [%0, %q1]"
8481 [(set_attr "length" "4")])
8484 ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
8486 (define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
8487 [(match_operand:V2DI 0 "mve_scatter_memory")
8488 (match_operand:V2DI 1 "s_register_operand")
8489 (match_operand:V2DI 2 "s_register_operand")
8490 (match_operand:HI 3 "vpr_register_operand")
8491 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8494 rtx ind = XEXP (operands[0], 0);
8495 gcc_assert (REG_P (ind));
8497 gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1],
8503 (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn"
8504 [(set (mem:BLK (scratch))
8506 [(match_operand:SI 0 "register_operand" "r")
8507 (match_operand:V2DI 1 "s_register_operand" "w")
8508 (match_operand:V2DI 2 "s_register_operand" "w")
8509 (match_operand:HI 3 "vpr_register_operand" "Up")]
8512 "vpst\;vstrdt.64\t%q2, [%0, %q1, UXTW #3]"
8513 [(set_attr "length" "8")])
8516 ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
8518 (define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
8519 [(match_operand:V2DI 0 "mve_scatter_memory")
8520 (match_operand:V2DI 1 "s_register_operand")
8521 (match_operand:V2DI 2 "s_register_operand")
8522 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8525 rtx ind = XEXP (operands[0], 0);
8526 gcc_assert (REG_P (ind));
8528 gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1],
8533 (define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn"
8534 [(set (mem:BLK (scratch))
8536 [(match_operand:SI 0 "register_operand" "r")
8537 (match_operand:V2DI 1 "s_register_operand" "w")
8538 (match_operand:V2DI 2 "s_register_operand" "w")]
8541 "vstrd.64\t%q2, [%0, %q1, UXTW #3]"
8542 [(set_attr "length" "4")])
8545 ;; [vstrhq_scatter_offset_f]
8547 (define_expand "mve_vstrhq_scatter_offset_fv8hf"
8548 [(match_operand:V8HI 0 "mve_scatter_memory")
8549 (match_operand:V8HI 1 "s_register_operand")
8550 (match_operand:V8HF 2 "s_register_operand")
8551 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8552 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8554 rtx ind = XEXP (operands[0], 0);
8555 gcc_assert (REG_P (ind));
8556 emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1],
8561 (define_insn "mve_vstrhq_scatter_offset_fv8hf_insn"
8562 [(set (mem:BLK (scratch))
8564 [(match_operand:SI 0 "register_operand" "r")
8565 (match_operand:V8HI 1 "s_register_operand" "w")
8566 (match_operand:V8HF 2 "s_register_operand" "w")]
8568 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8569 "vstrh.16\t%q2, [%0, %q1]"
8570 [(set_attr "length" "4")])
8573 ;; [vstrhq_scatter_offset_p_f]
8575 (define_expand "mve_vstrhq_scatter_offset_p_fv8hf"
8576 [(match_operand:V8HI 0 "mve_scatter_memory")
8577 (match_operand:V8HI 1 "s_register_operand")
8578 (match_operand:V8HF 2 "s_register_operand")
8579 (match_operand:HI 3 "vpr_register_operand")
8580 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8581 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8583 rtx ind = XEXP (operands[0], 0);
8584 gcc_assert (REG_P (ind));
8585 emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1],
8591 (define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn"
8592 [(set (mem:BLK (scratch))
8594 [(match_operand:SI 0 "register_operand" "r")
8595 (match_operand:V8HI 1 "s_register_operand" "w")
8596 (match_operand:V8HF 2 "s_register_operand" "w")
8597 (match_operand:HI 3 "vpr_register_operand" "Up")]
8599 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8600 "vpst\;vstrht.16\t%q2, [%0, %q1]"
8601 [(set_attr "length" "8")])
8604 ;; [vstrhq_scatter_shifted_offset_f]
8606 (define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf"
8607 [(match_operand:V8HI 0 "memory_operand" "=Us")
8608 (match_operand:V8HI 1 "s_register_operand" "w")
8609 (match_operand:V8HF 2 "s_register_operand" "w")
8610 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8611 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8613 rtx ind = XEXP (operands[0], 0);
8614 gcc_assert (REG_P (ind));
8615 emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1],
8620 (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn"
8621 [(set (mem:BLK (scratch))
8623 [(match_operand:SI 0 "register_operand" "r")
8624 (match_operand:V8HI 1 "s_register_operand" "w")
8625 (match_operand:V8HF 2 "s_register_operand" "w")]
8627 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8628 "vstrh.16\t%q2, [%0, %q1, uxtw #1]"
8629 [(set_attr "length" "4")])
8632 ;; [vstrhq_scatter_shifted_offset_p_f]
8634 (define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
8635 [(match_operand:V8HI 0 "memory_operand" "=Us")
8636 (match_operand:V8HI 1 "s_register_operand" "w")
8637 (match_operand:V8HF 2 "s_register_operand" "w")
8638 (match_operand:HI 3 "vpr_register_operand" "Up")
8639 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8640 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8642 rtx ind = XEXP (operands[0], 0);
8643 gcc_assert (REG_P (ind));
8645 gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1],
8651 (define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn"
8652 [(set (mem:BLK (scratch))
8654 [(match_operand:SI 0 "register_operand" "r")
8655 (match_operand:V8HI 1 "s_register_operand" "w")
8656 (match_operand:V8HF 2 "s_register_operand" "w")
8657 (match_operand:HI 3 "vpr_register_operand" "Up")]
8659 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8660 "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]"
8661 [(set_attr "length" "8")])
8664 ;; [vstrwq_scatter_base_f]
8666 (define_insn "mve_vstrwq_scatter_base_fv4sf"
8667 [(set (mem:BLK (scratch))
8669 [(match_operand:V4SI 0 "s_register_operand" "w")
8670 (match_operand:SI 1 "immediate_operand" "i")
8671 (match_operand:V4SF 2 "s_register_operand" "w")]
8674 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8677 ops[0] = operands[0];
8678 ops[1] = operands[1];
8679 ops[2] = operands[2];
8680 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
8683 [(set_attr "length" "4")])
8686 ;; [vstrwq_scatter_base_p_f]
8688 (define_insn "mve_vstrwq_scatter_base_p_fv4sf"
8689 [(set (mem:BLK (scratch))
8691 [(match_operand:V4SI 0 "s_register_operand" "w")
8692 (match_operand:SI 1 "immediate_operand" "i")
8693 (match_operand:V4SF 2 "s_register_operand" "w")
8694 (match_operand:HI 3 "vpr_register_operand" "Up")]
8697 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8700 ops[0] = operands[0];
8701 ops[1] = operands[1];
8702 ops[2] = operands[2];
8703 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
8706 [(set_attr "length" "8")])
8709 ;; [vstrwq_scatter_offset_f]
8711 (define_expand "mve_vstrwq_scatter_offset_fv4sf"
8712 [(match_operand:V4SI 0 "mve_scatter_memory")
8713 (match_operand:V4SI 1 "s_register_operand")
8714 (match_operand:V4SF 2 "s_register_operand")
8715 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
8716 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8718 rtx ind = XEXP (operands[0], 0);
8719 gcc_assert (REG_P (ind));
8720 emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1],
8725 (define_insn "mve_vstrwq_scatter_offset_fv4sf_insn"
8726 [(set (mem:BLK (scratch))
8728 [(match_operand:SI 0 "register_operand" "r")
8729 (match_operand:V4SI 1 "s_register_operand" "w")
8730 (match_operand:V4SF 2 "s_register_operand" "w")]
8732 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8733 "vstrw.32\t%q2, [%0, %q1]"
8734 [(set_attr "length" "4")])
8737 ;; [vstrwq_scatter_offset_p_f]
8739 (define_expand "mve_vstrwq_scatter_offset_p_fv4sf"
8740 [(match_operand:V4SI 0 "mve_scatter_memory")
8741 (match_operand:V4SI 1 "s_register_operand")
8742 (match_operand:V4SF 2 "s_register_operand")
8743 (match_operand:HI 3 "vpr_register_operand")
8744 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
8745 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8747 rtx ind = XEXP (operands[0], 0);
8748 gcc_assert (REG_P (ind));
8749 emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1],
8755 (define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn"
8756 [(set (mem:BLK (scratch))
8758 [(match_operand:SI 0 "register_operand" "r")
8759 (match_operand:V4SI 1 "s_register_operand" "w")
8760 (match_operand:V4SF 2 "s_register_operand" "w")
8761 (match_operand:HI 3 "vpr_register_operand" "Up")]
8763 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8764 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
8765 [(set_attr "length" "8")])
8768 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
8770 (define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si"
8771 [(match_operand:V4SI 0 "mve_scatter_memory")
8772 (match_operand:V4SI 1 "s_register_operand")
8773 (match_operand:V4SI 2 "s_register_operand")
8774 (match_operand:HI 3 "vpr_register_operand")
8775 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
8778 rtx ind = XEXP (operands[0], 0);
8779 gcc_assert (REG_P (ind));
8780 emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1],
8786 (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn"
8787 [(set (mem:BLK (scratch))
8789 [(match_operand:SI 0 "register_operand" "r")
8790 (match_operand:V4SI 1 "s_register_operand" "w")
8791 (match_operand:V4SI 2 "s_register_operand" "w")
8792 (match_operand:HI 3 "vpr_register_operand" "Up")]
8795 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
8796 [(set_attr "length" "8")])
8799 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
8801 (define_expand "mve_vstrwq_scatter_offset_<supf>v4si"
8802 [(match_operand:V4SI 0 "mve_scatter_memory")
8803 (match_operand:V4SI 1 "s_register_operand")
8804 (match_operand:V4SI 2 "s_register_operand")
8805 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
8808 rtx ind = XEXP (operands[0], 0);
8809 gcc_assert (REG_P (ind));
8810 emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1],
8815 (define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn"
8816 [(set (mem:BLK (scratch))
8818 [(match_operand:SI 0 "register_operand" "r")
8819 (match_operand:V4SI 1 "s_register_operand" "w")
8820 (match_operand:V4SI 2 "s_register_operand" "w")]
8823 "vstrw.32\t%q2, [%0, %q1]"
8824 [(set_attr "length" "4")])
8827 ;; [vstrwq_scatter_shifted_offset_f]
8829 (define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf"
8830 [(match_operand:V4SI 0 "mve_scatter_memory")
8831 (match_operand:V4SI 1 "s_register_operand")
8832 (match_operand:V4SF 2 "s_register_operand")
8833 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
8834 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8836 rtx ind = XEXP (operands[0], 0);
8837 gcc_assert (REG_P (ind));
8838 emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1],
8843 (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn"
8844 [(set (mem:BLK (scratch))
8846 [(match_operand:SI 0 "register_operand" "r")
8847 (match_operand:V4SI 1 "s_register_operand" "w")
8848 (match_operand:V4SF 2 "s_register_operand" "w")]
8850 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8851 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
8852 [(set_attr "length" "8")])
8855 ;; [vstrwq_scatter_shifted_offset_p_f]
8857 (define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
8858 [(match_operand:V4SI 0 "mve_scatter_memory")
8859 (match_operand:V4SI 1 "s_register_operand")
8860 (match_operand:V4SF 2 "s_register_operand")
8861 (match_operand:HI 3 "vpr_register_operand")
8862 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
8863 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8865 rtx ind = XEXP (operands[0], 0);
8866 gcc_assert (REG_P (ind));
8868 gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1],
8874 (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn"
8875 [(set (mem:BLK (scratch))
8877 [(match_operand:SI 0 "register_operand" "r")
8878 (match_operand:V4SI 1 "s_register_operand" "w")
8879 (match_operand:V4SF 2 "s_register_operand" "w")
8880 (match_operand:HI 3 "vpr_register_operand" "Up")]
8882 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8883 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
8884 [(set_attr "length" "8")])
8887 ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
8889 (define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
8890 [(match_operand:V4SI 0 "mve_scatter_memory")
8891 (match_operand:V4SI 1 "s_register_operand")
8892 (match_operand:V4SI 2 "s_register_operand")
8893 (match_operand:HI 3 "vpr_register_operand")
8894 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
8897 rtx ind = XEXP (operands[0], 0);
8898 gcc_assert (REG_P (ind));
8900 gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1],
8906 (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn"
8907 [(set (mem:BLK (scratch))
8909 [(match_operand:SI 0 "register_operand" "r")
8910 (match_operand:V4SI 1 "s_register_operand" "w")
8911 (match_operand:V4SI 2 "s_register_operand" "w")
8912 (match_operand:HI 3 "vpr_register_operand" "Up")]
8915 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
8916 [(set_attr "length" "8")])
8919 ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
8921 (define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
8922 [(match_operand:V4SI 0 "mve_scatter_memory")
8923 (match_operand:V4SI 1 "s_register_operand")
8924 (match_operand:V4SI 2 "s_register_operand")
8925 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
8928 rtx ind = XEXP (operands[0], 0);
8929 gcc_assert (REG_P (ind));
8931 gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1],
8936 (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn"
8937 [(set (mem:BLK (scratch))
8939 [(match_operand:SI 0 "register_operand" "r")
8940 (match_operand:V4SI 1 "s_register_operand" "w")
8941 (match_operand:V4SI 2 "s_register_operand" "w")]
8944 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
8945 [(set_attr "length" "4")])
8948 ;; [vaddq_s, vaddq_u])
8950 (define_insn "mve_vaddq<mode>"
8952 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
8953 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
8954 (match_operand:MVE_2 2 "s_register_operand" "w")))
8957 "vadd.i%#<V_sz_elem> %q0, %q1, %q2"
8958 [(set_attr "type" "mve_move")
8964 (define_insn "mve_vaddq_f<mode>"
8966 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
8967 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
8968 (match_operand:MVE_0 2 "s_register_operand" "w")))
8970 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8971 "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
8972 [(set_attr "type" "mve_move")
8978 (define_expand "mve_vidupq_n_u<mode>"
8979 [(match_operand:MVE_2 0 "s_register_operand")
8980 (match_operand:SI 1 "s_register_operand")
8981 (match_operand:SI 2 "mve_imm_selective_upto_8")]
8984 rtx temp = gen_reg_rtx (SImode);
8985 emit_move_insn (temp, operands[1]);
8986 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
8987 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
8995 (define_insn "mve_vidupq_u<mode>_insn"
8996 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
8997 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
8998 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
9000 (set (match_operand:SI 1 "s_register_operand" "=Te")
9001 (plus:SI (match_dup 2)
9002 (match_operand:SI 4 "immediate_operand" "i")))]
9004 "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
9009 (define_expand "mve_vidupq_m_n_u<mode>"
9010 [(match_operand:MVE_2 0 "s_register_operand")
9011 (match_operand:MVE_2 1 "s_register_operand")
9012 (match_operand:SI 2 "s_register_operand")
9013 (match_operand:SI 3 "mve_imm_selective_upto_8")
9014 (match_operand:HI 4 "vpr_register_operand")]
9017 rtx temp = gen_reg_rtx (SImode);
9018 emit_move_insn (temp, operands[2]);
9019 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9020 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9021 operands[2], operands[3],
9027 ;; [vidupq_m_wb_u_insn])
9029 (define_insn "mve_vidupq_m_wb_u<mode>_insn"
9030 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9031 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9032 (match_operand:SI 3 "s_register_operand" "2")
9033 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9034 (match_operand:HI 5 "vpr_register_operand" "Up")]
9036 (set (match_operand:SI 2 "s_register_operand" "=Te")
9037 (plus:SI (match_dup 3)
9038 (match_operand:SI 6 "immediate_operand" "i")))]
9040 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
9041 [(set_attr "length""8")])
9046 (define_expand "mve_vddupq_n_u<mode>"
9047 [(match_operand:MVE_2 0 "s_register_operand")
9048 (match_operand:SI 1 "s_register_operand")
9049 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9052 rtx temp = gen_reg_rtx (SImode);
9053 emit_move_insn (temp, operands[1]);
9054 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9055 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
9063 (define_insn "mve_vddupq_u<mode>_insn"
9064 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9065 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9066 (match_operand:SI 3 "immediate_operand" "i")]
9068 (set (match_operand:SI 1 "s_register_operand" "=Te")
9069 (minus:SI (match_dup 2)
9070 (match_operand:SI 4 "immediate_operand" "i")))]
9072 "vddup.u%#<V_sz_elem> %q0, %1, %3")
9077 (define_expand "mve_vddupq_m_n_u<mode>"
9078 [(match_operand:MVE_2 0 "s_register_operand")
9079 (match_operand:MVE_2 1 "s_register_operand")
9080 (match_operand:SI 2 "s_register_operand")
9081 (match_operand:SI 3 "mve_imm_selective_upto_8")
9082 (match_operand:HI 4 "vpr_register_operand")]
9085 rtx temp = gen_reg_rtx (SImode);
9086 emit_move_insn (temp, operands[2]);
9087 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9088 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9089 operands[2], operands[3],
9095 ;; [vddupq_m_wb_u_insn])
9097 (define_insn "mve_vddupq_m_wb_u<mode>_insn"
9098 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9099 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9100 (match_operand:SI 3 "s_register_operand" "2")
9101 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9102 (match_operand:HI 5 "vpr_register_operand" "Up")]
9104 (set (match_operand:SI 2 "s_register_operand" "=Te")
9105 (minus:SI (match_dup 3)
9106 (match_operand:SI 6 "immediate_operand" "i")))]
9108 "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
9109 [(set_attr "length""8")])
9114 (define_expand "mve_vdwdupq_n_u<mode>"
9115 [(match_operand:MVE_2 0 "s_register_operand")
9116 (match_operand:SI 1 "s_register_operand")
9117 (match_operand:DI 2 "s_register_operand")
9118 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9121 rtx ignore_wb = gen_reg_rtx (SImode);
9122 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9123 operands[1], operands[2],
9131 (define_expand "mve_vdwdupq_wb_u<mode>"
9132 [(match_operand:SI 0 "s_register_operand")
9133 (match_operand:SI 1 "s_register_operand")
9134 (match_operand:DI 2 "s_register_operand")
9135 (match_operand:SI 3 "mve_imm_selective_upto_8")
9136 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9139 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9140 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9141 operands[1], operands[2],
9147 ;; [vdwdupq_wb_u_insn])
9149 (define_insn "mve_vdwdupq_wb_u<mode>_insn"
9150 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9151 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9152 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9153 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9155 (set (match_operand:SI 1 "s_register_operand" "=Te")
9156 (unspec:SI [(match_dup 2)
9157 (subreg:SI (match_dup 3) 4)
9161 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9167 (define_expand "mve_vdwdupq_m_n_u<mode>"
9168 [(match_operand:MVE_2 0 "s_register_operand")
9169 (match_operand:MVE_2 1 "s_register_operand")
9170 (match_operand:SI 2 "s_register_operand")
9171 (match_operand:DI 3 "s_register_operand")
9172 (match_operand:SI 4 "mve_imm_selective_upto_8")
9173 (match_operand:HI 5 "vpr_register_operand")]
9176 rtx ignore_wb = gen_reg_rtx (SImode);
9177 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9178 operands[1], operands[2],
9179 operands[3], operands[4],
9185 ;; [vdwdupq_m_wb_u])
9187 (define_expand "mve_vdwdupq_m_wb_u<mode>"
9188 [(match_operand:SI 0 "s_register_operand")
9189 (match_operand:MVE_2 1 "s_register_operand")
9190 (match_operand:SI 2 "s_register_operand")
9191 (match_operand:DI 3 "s_register_operand")
9192 (match_operand:SI 4 "mve_imm_selective_upto_8")
9193 (match_operand:HI 5 "vpr_register_operand")]
9196 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9197 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9198 operands[1], operands[2],
9199 operands[3], operands[4],
9205 ;; [vdwdupq_m_wb_u_insn])
9207 (define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
9208 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9209 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9210 (match_operand:SI 3 "s_register_operand" "1")
9211 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9212 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9213 (match_operand:HI 6 "vpr_register_operand" "Up")]
9215 (set (match_operand:SI 1 "s_register_operand" "=Te")
9216 (unspec:SI [(match_dup 2)
9218 (subreg:SI (match_dup 4) 4)
9224 "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9225 [(set_attr "type" "mve_move")
9226 (set_attr "length""8")])
9231 (define_expand "mve_viwdupq_n_u<mode>"
9232 [(match_operand:MVE_2 0 "s_register_operand")
9233 (match_operand:SI 1 "s_register_operand")
9234 (match_operand:DI 2 "s_register_operand")
9235 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9238 rtx ignore_wb = gen_reg_rtx (SImode);
9239 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9240 operands[1], operands[2],
9248 (define_expand "mve_viwdupq_wb_u<mode>"
9249 [(match_operand:SI 0 "s_register_operand")
9250 (match_operand:SI 1 "s_register_operand")
9251 (match_operand:DI 2 "s_register_operand")
9252 (match_operand:SI 3 "mve_imm_selective_upto_8")
9253 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9256 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9257 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9258 operands[1], operands[2],
9264 ;; [viwdupq_wb_u_insn])
9266 (define_insn "mve_viwdupq_wb_u<mode>_insn"
9267 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9268 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9269 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9270 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9272 (set (match_operand:SI 1 "s_register_operand" "=Te")
9273 (unspec:SI [(match_dup 2)
9274 (subreg:SI (match_dup 3) 4)
9278 "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9284 (define_expand "mve_viwdupq_m_n_u<mode>"
9285 [(match_operand:MVE_2 0 "s_register_operand")
9286 (match_operand:MVE_2 1 "s_register_operand")
9287 (match_operand:SI 2 "s_register_operand")
9288 (match_operand:DI 3 "s_register_operand")
9289 (match_operand:SI 4 "mve_imm_selective_upto_8")
9290 (match_operand:HI 5 "vpr_register_operand")]
9293 rtx ignore_wb = gen_reg_rtx (SImode);
9294 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9295 operands[1], operands[2],
9296 operands[3], operands[4],
9302 ;; [viwdupq_m_wb_u])
9304 (define_expand "mve_viwdupq_m_wb_u<mode>"
9305 [(match_operand:SI 0 "s_register_operand")
9306 (match_operand:MVE_2 1 "s_register_operand")
9307 (match_operand:SI 2 "s_register_operand")
9308 (match_operand:DI 3 "s_register_operand")
9309 (match_operand:SI 4 "mve_imm_selective_upto_8")
9310 (match_operand:HI 5 "vpr_register_operand")]
9313 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9314 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9315 operands[1], operands[2],
9316 operands[3], operands[4],
9322 ;; [viwdupq_m_wb_u_insn])
9324 (define_insn "mve_viwdupq_m_wb_u<mode>_insn"
9325 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9326 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9327 (match_operand:SI 3 "s_register_operand" "1")
9328 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9329 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9330 (match_operand:HI 6 "vpr_register_operand" "Up")]
9332 (set (match_operand:SI 1 "s_register_operand" "=Te")
9333 (unspec:SI [(match_dup 2)
9335 (subreg:SI (match_dup 4) 4)
9341 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9342 [(set_attr "type" "mve_move")
9343 (set_attr "length""8")])
9346 ;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u]
9348 (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si"
9349 [(set (mem:BLK (scratch))
9351 [(match_operand:V4SI 1 "s_register_operand" "0")
9352 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9353 (match_operand:V4SI 3 "s_register_operand" "w")]
9355 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9356 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9362 ops[0] = operands[1];
9363 ops[1] = operands[2];
9364 ops[2] = operands[3];
9365 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9368 [(set_attr "length" "4")])
9371 ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
9373 (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
9374 [(set (mem:BLK (scratch))
9376 [(match_operand:V4SI 1 "s_register_operand" "0")
9377 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9378 (match_operand:V4SI 3 "s_register_operand" "w")
9379 (match_operand:HI 4 "vpr_register_operand")]
9381 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9382 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9388 ops[0] = operands[1];
9389 ops[1] = operands[2];
9390 ops[2] = operands[3];
9391 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9394 [(set_attr "length" "8")])
9397 ;; [vstrwq_scatter_base_wb_f]
9399 (define_insn "mve_vstrwq_scatter_base_wb_fv4sf"
9400 [(set (mem:BLK (scratch))
9402 [(match_operand:V4SI 1 "s_register_operand" "0")
9403 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9404 (match_operand:V4SF 3 "s_register_operand" "w")]
9406 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9407 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9410 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9413 ops[0] = operands[1];
9414 ops[1] = operands[2];
9415 ops[2] = operands[3];
9416 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9419 [(set_attr "length" "4")])
9422 ;; [vstrwq_scatter_base_wb_p_f]
9424 (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf"
9425 [(set (mem:BLK (scratch))
9427 [(match_operand:V4SI 1 "s_register_operand" "0")
9428 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9429 (match_operand:V4SF 3 "s_register_operand" "w")
9430 (match_operand:HI 4 "vpr_register_operand")]
9432 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9433 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9436 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9439 ops[0] = operands[1];
9440 ops[1] = operands[2];
9441 ops[2] = operands[3];
9442 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9445 [(set_attr "length" "8")])
9448 ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
9450 (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di"
9451 [(set (mem:BLK (scratch))
9453 [(match_operand:V2DI 1 "s_register_operand" "0")
9454 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9455 (match_operand:V2DI 3 "s_register_operand" "w")]
9457 (set (match_operand:V2DI 0 "s_register_operand" "=&w")
9458 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9464 ops[0] = operands[1];
9465 ops[1] = operands[2];
9466 ops[2] = operands[3];
9467 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
9470 [(set_attr "length" "4")])
9473 ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
9475 (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
9476 [(set (mem:BLK (scratch))
9478 [(match_operand:V2DI 1 "s_register_operand" "0")
9479 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9480 (match_operand:V2DI 3 "s_register_operand" "w")
9481 (match_operand:HI 4 "vpr_register_operand")]
9483 (set (match_operand:V2DI 0 "s_register_operand" "=w")
9484 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9490 ops[0] = operands[1];
9491 ops[1] = operands[2];
9492 ops[2] = operands[3];
9493 output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops);
9496 [(set_attr "length" "8")])
9498 (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
9499 [(match_operand:V4SI 0 "s_register_operand")
9500 (match_operand:V4SI 1 "s_register_operand")
9501 (match_operand:SI 2 "mve_vldrd_immediate")
9502 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9505 rtx ignore_result = gen_reg_rtx (V4SImode);
9507 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0],
9508 operands[1], operands[2]));
9512 (define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si"
9513 [(match_operand:V4SI 0 "s_register_operand")
9514 (match_operand:V4SI 1 "s_register_operand")
9515 (match_operand:SI 2 "mve_vldrd_immediate")
9516 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9519 rtx ignore_wb = gen_reg_rtx (V4SImode);
9521 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
9522 operands[1], operands[2]));
9527 ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
9529 (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
9530 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9531 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9532 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9533 (mem:BLK (scratch))]
9535 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9536 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9542 ops[0] = operands[0];
9543 ops[1] = operands[2];
9544 ops[2] = operands[3];
9545 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9548 [(set_attr "length" "4")])
9550 (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
9551 [(match_operand:V4SI 0 "s_register_operand")
9552 (match_operand:V4SI 1 "s_register_operand")
9553 (match_operand:SI 2 "mve_vldrd_immediate")
9554 (match_operand:HI 3 "vpr_register_operand")
9555 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9558 rtx ignore_result = gen_reg_rtx (V4SImode);
9560 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0],
9561 operands[1], operands[2],
9565 (define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si"
9566 [(match_operand:V4SI 0 "s_register_operand")
9567 (match_operand:V4SI 1 "s_register_operand")
9568 (match_operand:SI 2 "mve_vldrd_immediate")
9569 (match_operand:HI 3 "vpr_register_operand")
9570 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9573 rtx ignore_wb = gen_reg_rtx (V4SImode);
9575 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
9576 operands[1], operands[2],
9582 ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
9584 (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
9585 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9586 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9587 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9588 (match_operand:HI 4 "vpr_register_operand" "Up")
9589 (mem:BLK (scratch))]
9591 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9592 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9598 ops[0] = operands[0];
9599 ops[1] = operands[2];
9600 ops[2] = operands[3];
9601 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
9604 [(set_attr "length" "8")])
9606 (define_expand "mve_vldrwq_gather_base_wb_fv4sf"
9607 [(match_operand:V4SI 0 "s_register_operand")
9608 (match_operand:V4SI 1 "s_register_operand")
9609 (match_operand:SI 2 "mve_vldrd_immediate")
9610 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9611 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9613 rtx ignore_result = gen_reg_rtx (V4SFmode);
9615 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0],
9616 operands[1], operands[2]));
9620 (define_expand "mve_vldrwq_gather_base_nowb_fv4sf"
9621 [(match_operand:V4SF 0 "s_register_operand")
9622 (match_operand:V4SI 1 "s_register_operand")
9623 (match_operand:SI 2 "mve_vldrd_immediate")
9624 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9625 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9627 rtx ignore_wb = gen_reg_rtx (V4SImode);
9629 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
9630 operands[1], operands[2]));
9635 ;; [vldrwq_gather_base_wb_f]
9637 (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
9638 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9639 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
9640 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9641 (mem:BLK (scratch))]
9643 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9644 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9647 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9650 ops[0] = operands[0];
9651 ops[1] = operands[2];
9652 ops[2] = operands[3];
9653 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9656 [(set_attr "length" "4")])
9658 (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
9659 [(match_operand:V4SI 0 "s_register_operand")
9660 (match_operand:V4SI 1 "s_register_operand")
9661 (match_operand:SI 2 "mve_vldrd_immediate")
9662 (match_operand:HI 3 "vpr_register_operand")
9663 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9664 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9666 rtx ignore_result = gen_reg_rtx (V4SFmode);
9668 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0],
9669 operands[1], operands[2],
9674 (define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf"
9675 [(match_operand:V4SF 0 "s_register_operand")
9676 (match_operand:V4SI 1 "s_register_operand")
9677 (match_operand:SI 2 "mve_vldrd_immediate")
9678 (match_operand:HI 3 "vpr_register_operand")
9679 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9680 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9682 rtx ignore_wb = gen_reg_rtx (V4SImode);
9684 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
9685 operands[1], operands[2],
9691 ;; [vldrwq_gather_base_wb_z_f]
9693 (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
9694 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9695 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
9696 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9697 (match_operand:HI 4 "vpr_register_operand" "Up")
9698 (mem:BLK (scratch))]
9700 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9701 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9704 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9707 ops[0] = operands[0];
9708 ops[1] = operands[2];
9709 ops[2] = operands[3];
9710 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
9713 [(set_attr "length" "8")])
9715 (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
9716 [(match_operand:V2DI 0 "s_register_operand")
9717 (match_operand:V2DI 1 "s_register_operand")
9718 (match_operand:SI 2 "mve_vldrd_immediate")
9719 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9722 rtx ignore_result = gen_reg_rtx (V2DImode);
9724 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0],
9725 operands[1], operands[2]));
9729 (define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di"
9730 [(match_operand:V2DI 0 "s_register_operand")
9731 (match_operand:V2DI 1 "s_register_operand")
9732 (match_operand:SI 2 "mve_vldrd_immediate")
9733 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9736 rtx ignore_wb = gen_reg_rtx (V2DImode);
9738 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
9739 operands[1], operands[2]));
9745 ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
9747 (define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn"
9748 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
9749 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
9750 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9751 (mem:BLK (scratch))]
9753 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
9754 (unspec:V2DI [(match_dup 2) (match_dup 3)]
9760 ops[0] = operands[0];
9761 ops[1] = operands[2];
9762 ops[2] = operands[3];
9763 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
9766 [(set_attr "length" "4")])
9768 (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
9769 [(match_operand:V2DI 0 "s_register_operand")
9770 (match_operand:V2DI 1 "s_register_operand")
9771 (match_operand:SI 2 "mve_vldrd_immediate")
9772 (match_operand:HI 3 "vpr_register_operand")
9773 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9776 rtx ignore_result = gen_reg_rtx (V2DImode);
9778 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0],
9779 operands[1], operands[2],
9784 (define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di"
9785 [(match_operand:V2DI 0 "s_register_operand")
9786 (match_operand:V2DI 1 "s_register_operand")
9787 (match_operand:SI 2 "mve_vldrd_immediate")
9788 (match_operand:HI 3 "vpr_register_operand")
9789 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
9792 rtx ignore_wb = gen_reg_rtx (V2DImode);
9794 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
9795 operands[1], operands[2],
9800 (define_insn "get_fpscr_nzcvqc"
9801 [(set (match_operand:SI 0 "register_operand" "=r")
9802 (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
9804 "vmrs\\t%0, FPSCR_nzcvqc"
9805 [(set_attr "type" "mve_move")])
9807 (define_insn "set_fpscr_nzcvqc"
9808 [(set (reg:SI VFPCC_REGNUM)
9809 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
9810 VUNSPEC_SET_FPSCR_NZCVQC))]
9812 "vmsr\\tFPSCR_nzcvqc, %0"
9813 [(set_attr "type" "mve_move")])
9816 ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
9818 (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
9819 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
9820 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
9821 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9822 (match_operand:HI 4 "vpr_register_operand" "Up")
9823 (mem:BLK (scratch))]
9825 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
9826 (unspec:V2DI [(match_dup 2) (match_dup 3)]
9832 ops[0] = operands[0];
9833 ops[1] = operands[2];
9834 ops[2] = operands[3];
9835 output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops);
9838 [(set_attr "length" "8")])
9840 ;; [vadciq_m_s, vadciq_m_u])
9842 (define_insn "mve_vadciq_m_<supf>v4si"
9843 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9844 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
9845 (match_operand:V4SI 2 "s_register_operand" "w")
9846 (match_operand:V4SI 3 "s_register_operand" "w")
9847 (match_operand:HI 4 "vpr_register_operand" "Up")]
9849 (set (reg:SI VFPCC_REGNUM)
9850 (unspec:SI [(const_int 0)]
9854 "vpst\;vadcit.i32\t%q0, %q2, %q3"
9855 [(set_attr "type" "mve_move")
9856 (set_attr "length" "8")])
9859 ;; [vadciq_u, vadciq_s])
9861 (define_insn "mve_vadciq_<supf>v4si"
9862 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9863 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9864 (match_operand:V4SI 2 "s_register_operand" "w")]
9866 (set (reg:SI VFPCC_REGNUM)
9867 (unspec:SI [(const_int 0)]
9871 "vadci.i32\t%q0, %q1, %q2"
9872 [(set_attr "type" "mve_move")
9873 (set_attr "length" "4")])
9876 ;; [vadcq_m_s, vadcq_m_u])
9878 (define_insn "mve_vadcq_m_<supf>v4si"
9879 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9880 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
9881 (match_operand:V4SI 2 "s_register_operand" "w")
9882 (match_operand:V4SI 3 "s_register_operand" "w")
9883 (match_operand:HI 4 "vpr_register_operand" "Up")]
9885 (set (reg:SI VFPCC_REGNUM)
9886 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9890 "vpst\;vadct.i32\t%q0, %q2, %q3"
9891 [(set_attr "type" "mve_move")
9892 (set_attr "length" "8")])
9895 ;; [vadcq_u, vadcq_s])
9897 (define_insn "mve_vadcq_<supf>v4si"
9898 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9899 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9900 (match_operand:V4SI 2 "s_register_operand" "w")]
9902 (set (reg:SI VFPCC_REGNUM)
9903 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9907 "vadc.i32\t%q0, %q1, %q2"
9908 [(set_attr "type" "mve_move")
9909 (set_attr "length" "4")
9910 (set_attr "conds" "set")])
9913 ;; [vsbciq_m_u, vsbciq_m_s])
9915 (define_insn "mve_vsbciq_m_<supf>v4si"
9916 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9917 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9918 (match_operand:V4SI 2 "s_register_operand" "w")
9919 (match_operand:V4SI 3 "s_register_operand" "w")
9920 (match_operand:HI 4 "vpr_register_operand" "Up")]
9922 (set (reg:SI VFPCC_REGNUM)
9923 (unspec:SI [(const_int 0)]
9927 "vpst\;vsbcit.i32\t%q0, %q2, %q3"
9928 [(set_attr "type" "mve_move")
9929 (set_attr "length" "8")])
9932 ;; [vsbciq_s, vsbciq_u])
9934 (define_insn "mve_vsbciq_<supf>v4si"
9935 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9936 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9937 (match_operand:V4SI 2 "s_register_operand" "w")]
9939 (set (reg:SI VFPCC_REGNUM)
9940 (unspec:SI [(const_int 0)]
9944 "vsbci.i32\t%q0, %q1, %q2"
9945 [(set_attr "type" "mve_move")
9946 (set_attr "length" "4")])
9949 ;; [vsbcq_m_u, vsbcq_m_s])
9951 (define_insn "mve_vsbcq_m_<supf>v4si"
9952 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9953 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9954 (match_operand:V4SI 2 "s_register_operand" "w")
9955 (match_operand:V4SI 3 "s_register_operand" "w")
9956 (match_operand:HI 4 "vpr_register_operand" "Up")]
9958 (set (reg:SI VFPCC_REGNUM)
9959 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9963 "vpst\;vsbct.i32\t%q0, %q2, %q3"
9964 [(set_attr "type" "mve_move")
9965 (set_attr "length" "8")])
9968 ;; [vsbcq_s, vsbcq_u])
9970 (define_insn "mve_vsbcq_<supf>v4si"
9971 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
9972 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9973 (match_operand:V4SI 2 "s_register_operand" "w")]
9975 (set (reg:SI VFPCC_REGNUM)
9976 (unspec:SI [(reg:SI VFPCC_REGNUM)]
9980 "vsbc.i32\t%q0, %q1, %q2"
9981 [(set_attr "type" "mve_move")
9982 (set_attr "length" "4")])
9987 (define_insn "mve_vst2q<mode>"
9988 [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
9989 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
9990 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9993 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
9994 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
9997 int regno = REGNO (operands[1]);
9998 ops[0] = gen_rtx_REG (TImode, regno);
9999 ops[1] = gen_rtx_REG (TImode, regno + 4);
10000 rtx reg = operands[0];
10001 while (reg && !REG_P (reg))
10002 reg = XEXP (reg, 0);
10003 gcc_assert (REG_P (reg));
10005 ops[3] = operands[0];
10006 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10007 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10010 [(set_attr "length" "8")])
10015 (define_insn "mve_vld2q<mode>"
10016 [(set (match_operand:OI 0 "s_register_operand" "=w")
10017 (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
10018 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10021 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10022 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10025 int regno = REGNO (operands[0]);
10026 ops[0] = gen_rtx_REG (TImode, regno);
10027 ops[1] = gen_rtx_REG (TImode, regno + 4);
10028 rtx reg = operands[1];
10029 while (reg && !REG_P (reg))
10030 reg = XEXP (reg, 0);
10031 gcc_assert (REG_P (reg));
10033 ops[3] = operands[1];
10034 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10035 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10038 [(set_attr "length" "8")])
10043 (define_insn "mve_vld4q<mode>"
10044 [(set (match_operand:XI 0 "s_register_operand" "=w")
10045 (unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
10046 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10049 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10050 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10053 int regno = REGNO (operands[0]);
10054 ops[0] = gen_rtx_REG (TImode, regno);
10055 ops[1] = gen_rtx_REG (TImode, regno+4);
10056 ops[2] = gen_rtx_REG (TImode, regno+8);
10057 ops[3] = gen_rtx_REG (TImode, regno + 12);
10058 rtx reg = operands[1];
10059 while (reg && !REG_P (reg))
10060 reg = XEXP (reg, 0);
10061 gcc_assert (REG_P (reg));
10063 ops[5] = operands[1];
10064 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10065 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10066 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10067 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
10070 [(set_attr "length" "16")])
10072 ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
10074 (define_insn "mve_vec_extract<mode><V_elem_l>"
10075 [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r")
10076 (vec_select:<V_elem>
10077 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
10078 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10079 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10080 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10082 if (BYTES_BIG_ENDIAN)
10084 int elt = INTVAL (operands[2]);
10085 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10086 operands[2] = GEN_INT (elt);
10088 return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
10090 [(set_attr "type" "mve_move")])
10092 (define_insn "mve_vec_extractv2didi"
10093 [(set (match_operand:DI 0 "nonimmediate_operand" "=r")
10095 (match_operand:V2DI 1 "s_register_operand" "w")
10096 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10099 int elt = INTVAL (operands[2]);
10100 if (BYTES_BIG_ENDIAN)
10104 return "vmov\t%Q0, %R0, %e1";
10106 return "vmov\t%Q0, %R0, %f1";
10108 [(set_attr "type" "mve_move")])
10110 (define_insn "*mve_vec_extract_sext_internal<mode>"
10111 [(set (match_operand:SI 0 "s_register_operand" "=r")
10113 (vec_select:<V_elem>
10114 (match_operand:MVE_2 1 "s_register_operand" "w")
10115 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10116 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10117 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10119 if (BYTES_BIG_ENDIAN)
10121 int elt = INTVAL (operands[2]);
10122 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10123 operands[2] = GEN_INT (elt);
10125 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
10127 [(set_attr "type" "mve_move")])
10129 (define_insn "*mve_vec_extract_zext_internal<mode>"
10130 [(set (match_operand:SI 0 "s_register_operand" "=r")
10132 (vec_select:<V_elem>
10133 (match_operand:MVE_2 1 "s_register_operand" "w")
10134 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10135 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10136 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10138 if (BYTES_BIG_ENDIAN)
10140 int elt = INTVAL (operands[2]);
10141 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10142 operands[2] = GEN_INT (elt);
10144 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
10146 [(set_attr "type" "mve_move")])
10149 ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
10151 (define_insn "mve_vec_set<mode>_internal"
10152 [(set (match_operand:VQ2 0 "s_register_operand" "=w")
10155 (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
10156 (match_operand:VQ2 3 "s_register_operand" "0")
10157 (match_operand:SI 2 "immediate_operand" "i")))]
10158 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10159 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10161 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10162 if (BYTES_BIG_ENDIAN)
10163 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10164 operands[2] = GEN_INT (elt);
10166 return "vmov.<V_sz_elem>\t%q0[%c2], %1";
10168 [(set_attr "type" "mve_move")])
10170 (define_insn "mve_vec_setv2di_internal"
10171 [(set (match_operand:V2DI 0 "s_register_operand" "=w")
10173 (vec_duplicate:V2DI
10174 (match_operand:DI 1 "nonimmediate_operand" "r"))
10175 (match_operand:V2DI 3 "s_register_operand" "0")
10176 (match_operand:SI 2 "immediate_operand" "i")))]
10179 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10180 if (BYTES_BIG_ENDIAN)
10184 return "vmov\t%e0, %Q1, %R1";
10186 return "vmov\t%f0, %J1, %K1";
10188 [(set_attr "type" "mve_move")])
10193 (define_insn "mve_uqrshll_sat<supf>_di"
10194 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10195 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10196 (match_operand:SI 2 "register_operand" "r")]
10199 "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
10200 [(set_attr "predicable" "yes")])
10205 (define_insn "mve_sqrshrl_sat<supf>_di"
10206 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10207 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10208 (match_operand:SI 2 "register_operand" "r")]
10211 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
10212 [(set_attr "predicable" "yes")])
10217 (define_insn "mve_uqrshl_si"
10218 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10219 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10220 (match_operand:SI 2 "register_operand" "r")]
10223 "uqrshl%?\\t%1, %2"
10224 [(set_attr "predicable" "yes")])
10229 (define_insn "mve_sqrshr_si"
10230 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10231 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10232 (match_operand:SI 2 "register_operand" "r")]
10235 "sqrshr%?\\t%1, %2"
10236 [(set_attr "predicable" "yes")])
10241 (define_insn "mve_uqshll_di"
10242 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10243 (us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10244 (match_operand:SI 2 "immediate_operand" "Pg")))]
10246 "uqshll%?\\t%Q1, %R1, %2"
10247 [(set_attr "predicable" "yes")])
10252 (define_insn "mve_urshrl_di"
10253 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10254 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10255 (match_operand:SI 2 "immediate_operand" "Pg")]
10258 "urshrl%?\\t%Q1, %R1, %2"
10259 [(set_attr "predicable" "yes")])
10264 (define_insn "mve_uqshl_si"
10265 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10266 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0")
10267 (match_operand:SI 2 "immediate_operand" "Pg")))]
10270 [(set_attr "predicable" "yes")])
10275 (define_insn "mve_urshr_si"
10276 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10277 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10278 (match_operand:SI 2 "immediate_operand" "Pg")]
10282 [(set_attr "predicable" "yes")])
10287 (define_insn "mve_sqshl_si"
10288 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10289 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0")
10290 (match_operand:SI 2 "immediate_operand" "Pg")))]
10293 [(set_attr "predicable" "yes")])
10298 (define_insn "mve_srshr_si"
10299 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10300 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0")
10301 (match_operand:SI 2 "immediate_operand" "Pg")]
10305 [(set_attr "predicable" "yes")])
10310 (define_insn "mve_srshrl_di"
10311 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10312 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10313 (match_operand:SI 2 "immediate_operand" "Pg")]
10316 "srshrl%?\\t%Q1, %R1, %2"
10317 [(set_attr "predicable" "yes")])
10322 (define_insn "mve_sqshll_di"
10323 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10324 (ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10325 (match_operand:SI 2 "immediate_operand" "Pg")))]
10327 "sqshll%?\\t%Q1, %R1, %2"
10328 [(set_attr "predicable" "yes")])
10331 ;; [vshlcq_m_u vshlcq_m_s]
10333 (define_expand "mve_vshlcq_m_vec_<supf><mode>"
10334 [(match_operand:MVE_2 0 "s_register_operand")
10335 (match_operand:MVE_2 1 "s_register_operand")
10336 (match_operand:SI 2 "s_register_operand")
10337 (match_operand:SI 3 "mve_imm_32")
10338 (match_operand:HI 4 "vpr_register_operand")
10339 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10342 rtx ignore_wb = gen_reg_rtx (SImode);
10343 emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1],
10344 operands[2], operands[3],
10349 (define_expand "mve_vshlcq_m_carry_<supf><mode>"
10350 [(match_operand:SI 0 "s_register_operand")
10351 (match_operand:MVE_2 1 "s_register_operand")
10352 (match_operand:SI 2 "s_register_operand")
10353 (match_operand:SI 3 "mve_imm_32")
10354 (match_operand:HI 4 "vpr_register_operand")
10355 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10358 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10359 emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0],
10360 operands[1], operands[2],
10361 operands[3], operands[4]));
10365 (define_insn "mve_vshlcq_m_<supf><mode>"
10366 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10367 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10368 (match_operand:SI 3 "s_register_operand" "1")
10369 (match_operand:SI 4 "mve_imm_32" "Rf")
10370 (match_operand:HI 5 "vpr_register_operand" "Up")]
10372 (set (match_operand:SI 1 "s_register_operand" "=r")
10373 (unspec:SI [(match_dup 2)
10380 "vpst\;vshlct\t%q0, %1, %4"
10381 [(set_attr "type" "mve_move")
10382 (set_attr "length" "8")])
10384 ;; CDE instructions on MVE registers.
10386 (define_insn "arm_vcx1qv16qi"
10387 [(set (match_operand:V16QI 0 "register_operand" "=t")
10388 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10389 (match_operand:SI 2 "const_int_mve_cde1_operand" "i")]
10391 "TARGET_CDE && TARGET_HAVE_MVE"
10392 "vcx1\\tp%c1, %q0, #%c2"
10393 [(set_attr "type" "coproc")]
10396 (define_insn "arm_vcx1qav16qi"
10397 [(set (match_operand:V16QI 0 "register_operand" "=t")
10398 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10399 (match_operand:V16QI 2 "register_operand" "0")
10400 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")]
10402 "TARGET_CDE && TARGET_HAVE_MVE"
10403 "vcx1a\\tp%c1, %q0, #%c3"
10404 [(set_attr "type" "coproc")]
10407 (define_insn "arm_vcx2qv16qi"
10408 [(set (match_operand:V16QI 0 "register_operand" "=t")
10409 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10410 (match_operand:V16QI 2 "register_operand" "t")
10411 (match_operand:SI 3 "const_int_mve_cde2_operand" "i")]
10413 "TARGET_CDE && TARGET_HAVE_MVE"
10414 "vcx2\\tp%c1, %q0, %q2, #%c3"
10415 [(set_attr "type" "coproc")]
10418 (define_insn "arm_vcx2qav16qi"
10419 [(set (match_operand:V16QI 0 "register_operand" "=t")
10420 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10421 (match_operand:V16QI 2 "register_operand" "0")
10422 (match_operand:V16QI 3 "register_operand" "t")
10423 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")]
10425 "TARGET_CDE && TARGET_HAVE_MVE"
10426 "vcx2a\\tp%c1, %q0, %q3, #%c4"
10427 [(set_attr "type" "coproc")]
10430 (define_insn "arm_vcx3qv16qi"
10431 [(set (match_operand:V16QI 0 "register_operand" "=t")
10432 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10433 (match_operand:V16QI 2 "register_operand" "t")
10434 (match_operand:V16QI 3 "register_operand" "t")
10435 (match_operand:SI 4 "const_int_mve_cde3_operand" "i")]
10437 "TARGET_CDE && TARGET_HAVE_MVE"
10438 "vcx3\\tp%c1, %q0, %q2, %q3, #%c4"
10439 [(set_attr "type" "coproc")]
10442 (define_insn "arm_vcx3qav16qi"
10443 [(set (match_operand:V16QI 0 "register_operand" "=t")
10444 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10445 (match_operand:V16QI 2 "register_operand" "0")
10446 (match_operand:V16QI 3 "register_operand" "t")
10447 (match_operand:V16QI 4 "register_operand" "t")
10448 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")]
10450 "TARGET_CDE && TARGET_HAVE_MVE"
10451 "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5"
10452 [(set_attr "type" "coproc")]
10455 (define_insn "arm_vcx1q<a>_p_v16qi"
10456 [(set (match_operand:V16QI 0 "register_operand" "=t")
10457 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10458 (match_operand:V16QI 2 "register_operand" "0")
10459 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")
10460 (match_operand:HI 4 "vpr_register_operand" "Up")]
10462 "TARGET_CDE && TARGET_HAVE_MVE"
10463 "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3"
10464 [(set_attr "type" "coproc")
10465 (set_attr "length" "8")]
10468 (define_insn "arm_vcx2q<a>_p_v16qi"
10469 [(set (match_operand:V16QI 0 "register_operand" "=t")
10470 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10471 (match_operand:V16QI 2 "register_operand" "0")
10472 (match_operand:V16QI 3 "register_operand" "t")
10473 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")
10474 (match_operand:HI 5 "vpr_register_operand" "Up")]
10476 "TARGET_CDE && TARGET_HAVE_MVE"
10477 "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4"
10478 [(set_attr "type" "coproc")
10479 (set_attr "length" "8")]
10482 (define_insn "arm_vcx3q<a>_p_v16qi"
10483 [(set (match_operand:V16QI 0 "register_operand" "=t")
10484 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10485 (match_operand:V16QI 2 "register_operand" "0")
10486 (match_operand:V16QI 3 "register_operand" "t")
10487 (match_operand:V16QI 4 "register_operand" "t")
10488 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")
10489 (match_operand:HI 6 "vpr_register_operand" "Up")]
10491 "TARGET_CDE && TARGET_HAVE_MVE"
10492 "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5"
10493 [(set_attr "type" "coproc")
10494 (set_attr "length" "8")]
10497 (define_insn "*movmisalign<mode>_mve_store"
10498 [(set (match_operand:MVE_VLD_ST 0 "neon_permissive_struct_operand" "=Ux")
10499 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "s_register_operand" " w")]
10500 UNSPEC_MISALIGNED_ACCESS))]
10501 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10502 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))
10503 && !BYTES_BIG_ENDIAN && unaligned_access"
10504 "vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0"
10505 [(set_attr "type" "mve_store")]
10509 (define_insn "*movmisalign<mode>_mve_load"
10510 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
10511 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "neon_permissive_struct_operand" " Ux")]
10512 UNSPEC_MISALIGNED_ACCESS))]
10513 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10514 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))
10515 && !BYTES_BIG_ENDIAN && unaligned_access"
10516 "vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1"
10517 [(set_attr "type" "mve_load")]