1 ;; Arm M-profile Vector Extension Machine Description
2 ;; Copyright (C) 2019-2021 Free Software Foundation, Inc.
4 ;; This file is part of GCC.
6 ;; GCC is free software; you can redistribute it and/or modify it
7 ;; under the terms of the GNU General Public License as published by
8 ;; the Free Software Foundation; either version 3, or (at your option)
11 ;; GCC is distributed in the hope that it will be useful, but
12 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 ;; General Public License for more details.
16 ;; You should have received a copy of the GNU General Public License
17 ;; along with GCC; see the file COPYING3. If not see
18 ;; <http://www.gnu.org/licenses/>.
20 (define_insn "*mve_mov<mode>"
21 [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w,w,r,w,Ux,w")
22 (match_operand:MVE_types 1 "general_operand" "w,r,w,Dn,UxUi,r,Dm,w,Ul"))]
23 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
25 if (which_alternative == 3 || which_alternative == 6)
28 static char templ[40];
30 is_valid = simd_immediate_valid_for_move (operands[1], <MODE>mode,
31 &operands[1], &width);
33 gcc_assert (is_valid != 0);
36 return "vmov.f32\t%q0, %1 @ <mode>";
38 sprintf (templ, "vmov.i%d\t%%q0, %%x1 @ <mode>", width);
42 if (which_alternative == 4 || which_alternative == 7)
44 if (<MODE>mode == V2DFmode || <MODE>mode == V2DImode || <MODE>mode == TImode)
46 if (which_alternative == 7)
47 output_asm_insn ("vstrw.32\t%q1, %E0", operands);
49 output_asm_insn ("vldrw.u32\t%q0, %E1",operands);
53 if (which_alternative == 7)
54 output_asm_insn ("vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0", operands);
56 output_asm_insn ("vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1", operands);
60 switch (which_alternative)
63 return "vmov\t%q0, %q1";
65 return "vmov\t%e0, %Q1, %R1 @ <mode>\;vmov\t%f0, %J1, %K1";
67 return "vmov\t%Q0, %R0, %e1 @ <mode>\;vmov\t%J0, %K0, %f1";
69 return output_move_quad (operands);
71 return output_move_neon (operands);
77 [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_move,mve_store,mve_load")
78 (set_attr "length" "4,8,8,4,8,8,4,4,4")
79 (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*,*")
80 (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*,*")])
82 (define_insn "*mve_vdup<mode>"
83 [(set (match_operand:MVE_vecs 0 "s_register_operand" "=w")
84 (vec_duplicate:MVE_vecs
85 (match_operand:<V_elem> 1 "s_register_operand" "r")))]
86 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
87 "vdup.<V_sz_elem>\t%q0, %1"
88 [(set_attr "length" "4")
89 (set_attr "type" "mve_move")])
94 (define_insn "mve_vst4q<mode>"
95 [(set (match_operand:XI 0 "neon_struct_operand" "=Um")
96 (unspec:XI [(match_operand:XI 1 "s_register_operand" "w")
97 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
103 int regno = REGNO (operands[1]);
104 ops[0] = gen_rtx_REG (TImode, regno);
105 ops[1] = gen_rtx_REG (TImode, regno+4);
106 ops[2] = gen_rtx_REG (TImode, regno+8);
107 ops[3] = gen_rtx_REG (TImode, regno+12);
108 rtx reg = operands[0];
109 while (reg && !REG_P (reg))
111 gcc_assert (REG_P (reg));
113 ops[5] = operands[0];
114 /* Here in first three instructions data is stored to ops[4]'s location but
115 in the fourth instruction data is stored to operands[0], this is to
116 support the writeback. */
117 output_asm_insn ("vst40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
118 "vst41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
119 "vst42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
120 "vst43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
123 [(set_attr "length" "16")])
128 (define_insn "mve_vrndq_m_f<mode>"
130 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
131 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
132 (match_operand:MVE_0 2 "s_register_operand" "w")
133 (match_operand:HI 3 "vpr_register_operand" "Up")]
136 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
137 "vpst\;vrintzt.f%#<V_sz_elem> %q0, %q2"
138 [(set_attr "type" "mve_move")
139 (set_attr "length""8")])
144 (define_insn "mve_vrndxq_f<mode>"
146 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
147 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
150 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
151 "vrintx.f%#<V_sz_elem> %q0, %q1"
152 [(set_attr "type" "mve_move")
158 (define_insn "mve_vrndq_f<mode>"
160 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
161 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
164 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
165 "vrintz.f%#<V_sz_elem> %q0, %q1"
166 [(set_attr "type" "mve_move")
172 (define_insn "mve_vrndpq_f<mode>"
174 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
175 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
178 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
179 "vrintp.f%#<V_sz_elem> %q0, %q1"
180 [(set_attr "type" "mve_move")
186 (define_insn "mve_vrndnq_f<mode>"
188 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
189 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
192 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
193 "vrintn.f%#<V_sz_elem> %q0, %q1"
194 [(set_attr "type" "mve_move")
200 (define_insn "mve_vrndmq_f<mode>"
202 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
203 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
206 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
207 "vrintm.f%#<V_sz_elem> %q0, %q1"
208 [(set_attr "type" "mve_move")
214 (define_insn "mve_vrndaq_f<mode>"
216 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
217 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
220 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
221 "vrinta.f%#<V_sz_elem> %q0, %q1"
222 [(set_attr "type" "mve_move")
228 (define_insn "mve_vrev64q_f<mode>"
230 (set (match_operand:MVE_0 0 "s_register_operand" "=&w")
231 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
234 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
235 "vrev64.%#<V_sz_elem> %q0, %q1"
236 [(set_attr "type" "mve_move")
242 (define_insn "mve_vnegq_f<mode>"
244 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
245 (neg:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")))
247 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
248 "vneg.f%#<V_sz_elem> %q0, %q1"
249 [(set_attr "type" "mve_move")
255 (define_insn "mve_vdupq_n_f<mode>"
257 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
258 (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
261 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
262 "vdup.%#<V_sz_elem> %q0, %1"
263 [(set_attr "type" "mve_move")
269 (define_insn "mve_vabsq_f<mode>"
271 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
272 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
275 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
276 "vabs.f%#<V_sz_elem> %q0, %q1"
277 [(set_attr "type" "mve_move")
283 (define_insn "mve_vrev32q_fv8hf"
285 (set (match_operand:V8HF 0 "s_register_operand" "=w")
286 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")]
289 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
291 [(set_attr "type" "mve_move")
296 (define_insn "mve_vcvttq_f32_f16v4sf"
298 (set (match_operand:V4SF 0 "s_register_operand" "=w")
299 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
302 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
303 "vcvtt.f32.f16 %q0, %q1"
304 [(set_attr "type" "mve_move")
310 (define_insn "mve_vcvtbq_f32_f16v4sf"
312 (set (match_operand:V4SF 0 "s_register_operand" "=w")
313 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
316 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
317 "vcvtb.f32.f16 %q0, %q1"
318 [(set_attr "type" "mve_move")
322 ;; [vcvtq_to_f_s, vcvtq_to_f_u])
324 (define_insn "mve_vcvtq_to_f_<supf><mode>"
326 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
327 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
330 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
331 "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q1"
332 [(set_attr "type" "mve_move")
336 ;; [vrev64q_u, vrev64q_s])
338 (define_insn "mve_vrev64q_<supf><mode>"
340 (set (match_operand:MVE_2 0 "s_register_operand" "=&w")
341 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
345 "vrev64.%#<V_sz_elem> %q0, %q1"
346 [(set_attr "type" "mve_move")
350 ;; [vcvtq_from_f_s, vcvtq_from_f_u])
352 (define_insn "mve_vcvtq_from_f_<supf><mode>"
354 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
355 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
358 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
359 "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
360 [(set_attr "type" "mve_move")
364 (define_insn "mve_vqnegq_s<mode>"
366 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
367 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
371 "vqneg.s%#<V_sz_elem> %q0, %q1"
372 [(set_attr "type" "mve_move")
378 (define_insn "mve_vqabsq_s<mode>"
380 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
381 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
385 "vqabs.s%#<V_sz_elem> %q0, %q1"
386 [(set_attr "type" "mve_move")
392 (define_insn "mve_vnegq_s<mode>"
394 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
395 (neg:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
398 "vneg.s%#<V_sz_elem> %q0, %q1"
399 [(set_attr "type" "mve_move")
403 ;; [vmvnq_u, vmvnq_s])
405 (define_insn "mve_vmvnq_u<mode>"
407 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
408 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
412 [(set_attr "type" "mve_move")
414 (define_expand "mve_vmvnq_s<mode>"
416 (set (match_operand:MVE_2 0 "s_register_operand")
417 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand")))
423 ;; [vdupq_n_u, vdupq_n_s])
425 (define_insn "mve_vdupq_n_<supf><mode>"
427 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
428 (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
432 "vdup.%#<V_sz_elem> %q0, %1"
433 [(set_attr "type" "mve_move")
437 ;; [vclzq_u, vclzq_s])
439 (define_insn "mve_vclzq_<supf><mode>"
441 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
442 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
446 "vclz.i%#<V_sz_elem> %q0, %q1"
447 [(set_attr "type" "mve_move")
453 (define_insn "mve_vclsq_s<mode>"
455 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
456 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
460 "vcls.s%#<V_sz_elem> %q0, %q1"
461 [(set_attr "type" "mve_move")
465 ;; [vaddvq_s, vaddvq_u])
467 (define_insn "mve_vaddvq_<supf><mode>"
469 (set (match_operand:SI 0 "s_register_operand" "=Te")
470 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
474 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
475 [(set_attr "type" "mve_move")
481 (define_insn "mve_vabsq_s<mode>"
483 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
484 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
488 "vabs.s%#<V_sz_elem>\t%q0, %q1"
489 [(set_attr "type" "mve_move")
493 ;; [vrev32q_u, vrev32q_s])
495 (define_insn "mve_vrev32q_<supf><mode>"
497 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
498 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
502 "vrev32.%#<V_sz_elem>\t%q0, %q1"
503 [(set_attr "type" "mve_move")
507 ;; [vmovltq_u, vmovltq_s])
509 (define_insn "mve_vmovltq_<supf><mode>"
511 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
512 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
516 "vmovlt.<supf>%#<V_sz_elem> %q0, %q1"
517 [(set_attr "type" "mve_move")
521 ;; [vmovlbq_s, vmovlbq_u])
523 (define_insn "mve_vmovlbq_<supf><mode>"
525 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
526 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
530 "vmovlb.<supf>%#<V_sz_elem> %q0, %q1"
531 [(set_attr "type" "mve_move")
535 ;; [vcvtpq_s, vcvtpq_u])
537 (define_insn "mve_vcvtpq_<supf><mode>"
539 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
540 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
543 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
544 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
545 [(set_attr "type" "mve_move")
549 ;; [vcvtnq_s, vcvtnq_u])
551 (define_insn "mve_vcvtnq_<supf><mode>"
553 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
554 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
557 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
558 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
559 [(set_attr "type" "mve_move")
563 ;; [vcvtmq_s, vcvtmq_u])
565 (define_insn "mve_vcvtmq_<supf><mode>"
567 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
568 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
571 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
572 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
573 [(set_attr "type" "mve_move")
577 ;; [vcvtaq_u, vcvtaq_s])
579 (define_insn "mve_vcvtaq_<supf><mode>"
581 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
582 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
585 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
586 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
587 [(set_attr "type" "mve_move")
591 ;; [vmvnq_n_u, vmvnq_n_s])
593 (define_insn "mve_vmvnq_n_<supf><mode>"
595 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
596 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
600 "vmvn.i%#<V_sz_elem> %q0, %1"
601 [(set_attr "type" "mve_move")
605 ;; [vrev16q_u, vrev16q_s])
607 (define_insn "mve_vrev16q_<supf>v16qi"
609 (set (match_operand:V16QI 0 "s_register_operand" "=w")
610 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
615 [(set_attr "type" "mve_move")
619 ;; [vaddlvq_s vaddlvq_u])
621 (define_insn "mve_vaddlvq_<supf>v4si"
623 (set (match_operand:DI 0 "s_register_operand" "=r")
624 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
628 "vaddlv.<supf>32 %Q0, %R0, %q1"
629 [(set_attr "type" "mve_move")
633 ;; [vctp8q vctp16q vctp32q vctp64q])
635 (define_insn "mve_vctp<mode1>qhi"
637 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
638 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
643 [(set_attr "type" "mve_move")
649 (define_insn "mve_vpnothi"
651 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
652 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
657 [(set_attr "type" "mve_move")
663 (define_insn "mve_vsubq_n_f<mode>"
665 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
666 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
667 (match_operand:<V_elem> 2 "s_register_operand" "r")]
670 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
671 "vsub.f<V_sz_elem> %q0, %q1, %2"
672 [(set_attr "type" "mve_move")
678 (define_insn "mve_vbrsrq_n_f<mode>"
680 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
681 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
682 (match_operand:SI 2 "s_register_operand" "r")]
685 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
686 "vbrsr.<V_sz_elem> %q0, %q1, %2"
687 [(set_attr "type" "mve_move")
691 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
693 (define_insn "mve_vcvtq_n_to_f_<supf><mode>"
695 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
696 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
697 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
700 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
701 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
702 [(set_attr "type" "mve_move")
707 (define_insn "mve_vcreateq_f<mode>"
709 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
710 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
711 (match_operand:DI 2 "s_register_operand" "r")]
714 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
715 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
716 [(set_attr "type" "mve_move")
717 (set_attr "length""8")])
720 ;; [vcreateq_u, vcreateq_s])
722 (define_insn "mve_vcreateq_<supf><mode>"
724 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
725 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
726 (match_operand:DI 2 "s_register_operand" "r")]
730 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
731 [(set_attr "type" "mve_move")
732 (set_attr "length""8")])
735 ;; [vshrq_n_s, vshrq_n_u])
737 ;; Version that takes an immediate as operand 2.
738 (define_insn "mve_vshrq_n_<supf><mode>"
740 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
741 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
742 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
746 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
747 [(set_attr "type" "mve_move")
750 ;; Versions that take constant vectors as operand 2 (with all elements
752 (define_insn "mve_vshrq_n_s<mode>_imm"
754 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
755 (ashiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
756 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i")))
760 return neon_output_shift_immediate ("vshr", 's', &operands[2],
762 VALID_NEON_QREG_MODE (<MODE>mode),
765 [(set_attr "type" "mve_move")
767 (define_insn "mve_vshrq_n_u<mode>_imm"
769 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
770 (lshiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
771 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i")))
775 return neon_output_shift_immediate ("vshr", 'u', &operands[2],
777 VALID_NEON_QREG_MODE (<MODE>mode),
780 [(set_attr "type" "mve_move")
784 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
786 (define_insn "mve_vcvtq_n_from_f_<supf><mode>"
788 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
789 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
790 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
793 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
794 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
795 [(set_attr "type" "mve_move")
801 (define_insn "mve_vaddlvq_p_<supf>v4si"
803 (set (match_operand:DI 0 "s_register_operand" "=r")
804 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
805 (match_operand:HI 2 "vpr_register_operand" "Up")]
809 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
810 [(set_attr "type" "mve_move")
811 (set_attr "length""8")])
814 ;; [vcmpneq_u, vcmpneq_s])
816 (define_insn "mve_vcmpneq_<supf><mode>"
818 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
819 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
820 (match_operand:MVE_2 2 "s_register_operand" "w")]
824 "vcmp.i%#<V_sz_elem> ne, %q1, %q2"
825 [(set_attr "type" "mve_move")
829 ;; [vshlq_s, vshlq_u])
833 ;; [vabdq_s, vabdq_u])
835 (define_insn "mve_vabdq_<supf><mode>"
837 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
838 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
839 (match_operand:MVE_2 2 "s_register_operand" "w")]
843 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
844 [(set_attr "type" "mve_move")
848 ;; [vaddq_n_s, vaddq_n_u])
850 (define_insn "mve_vaddq_n_<supf><mode>"
852 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
853 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
854 (match_operand:<V_elem> 2 "s_register_operand" "r")]
858 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
859 [(set_attr "type" "mve_move")
863 ;; [vaddvaq_s, vaddvaq_u])
865 (define_insn "mve_vaddvaq_<supf><mode>"
867 (set (match_operand:SI 0 "s_register_operand" "=Te")
868 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
869 (match_operand:MVE_2 2 "s_register_operand" "w")]
873 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
874 [(set_attr "type" "mve_move")
878 ;; [vaddvq_p_u, vaddvq_p_s])
880 (define_insn "mve_vaddvq_p_<supf><mode>"
882 (set (match_operand:SI 0 "s_register_operand" "=Te")
883 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
884 (match_operand:HI 2 "vpr_register_operand" "Up")]
888 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
889 [(set_attr "type" "mve_move")
890 (set_attr "length""8")])
893 ;; [vandq_u, vandq_s])
895 ;; signed and unsigned versions are the same: define the unsigned
896 ;; insn, and use an expander for the signed one as we still reference
897 ;; both names from arm_mve.h.
898 ;; We use the same code as in neon.md (TODO: avoid this duplication).
899 (define_insn "mve_vandq_u<mode>"
901 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
902 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
903 (match_operand:MVE_2 2 "neon_inv_logic_op2" "w,DL")))
908 * return neon_output_logic_immediate (\"vand\", &operands[2], <MODE>mode, 1, VALID_NEON_QREG_MODE (<MODE>mode));"
909 [(set_attr "type" "mve_move")
911 (define_expand "mve_vandq_s<mode>"
913 (set (match_operand:MVE_2 0 "s_register_operand")
914 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
915 (match_operand:MVE_2 2 "neon_inv_logic_op2")))
921 ;; [vbicq_s, vbicq_u])
923 (define_insn "mve_vbicq_u<mode>"
925 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
926 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
927 (match_operand:MVE_2 1 "s_register_operand" "w")))
930 "vbic\t%q0, %q1, %q2"
931 [(set_attr "type" "mve_move")
934 (define_expand "mve_vbicq_s<mode>"
936 (set (match_operand:MVE_2 0 "s_register_operand")
937 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
938 (match_operand:MVE_2 1 "s_register_operand")))
944 ;; [vbrsrq_n_u, vbrsrq_n_s])
946 (define_insn "mve_vbrsrq_n_<supf><mode>"
948 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
949 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
950 (match_operand:SI 2 "s_register_operand" "r")]
954 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
955 [(set_attr "type" "mve_move")
959 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
961 (define_insn "mve_vcaddq<mve_rot><mode>"
963 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
964 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
965 (match_operand:MVE_2 2 "s_register_operand" "w")]
969 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
970 [(set_attr "type" "mve_move")
973 ;; Auto vectorizer pattern for int vcadd
974 (define_expand "cadd<rot><mode>3"
975 [(set (match_operand:MVE_2 0 "register_operand")
976 (unspec:MVE_2 [(match_operand:MVE_2 1 "register_operand")
977 (match_operand:MVE_2 2 "register_operand")]
979 "TARGET_HAVE_MVE && !BYTES_BIG_ENDIAN"
985 (define_insn "mve_vcmpcsq_n_u<mode>"
987 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
988 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
989 (match_operand:<V_elem> 2 "s_register_operand" "r")]
993 "vcmp.u%#<V_sz_elem> cs, %q1, %2"
994 [(set_attr "type" "mve_move")
1000 (define_insn "mve_vcmpcsq_u<mode>"
1002 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1003 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1004 (match_operand:MVE_2 2 "s_register_operand" "w")]
1008 "vcmp.u%#<V_sz_elem> cs, %q1, %q2"
1009 [(set_attr "type" "mve_move")
1013 ;; [vcmpeqq_n_s, vcmpeqq_n_u])
1015 (define_insn "mve_vcmpeqq_n_<supf><mode>"
1017 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1018 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1019 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1023 "vcmp.i%#<V_sz_elem> eq, %q1, %2"
1024 [(set_attr "type" "mve_move")
1028 ;; [vcmpeqq_u, vcmpeqq_s])
1030 (define_insn "mve_vcmpeqq_<supf><mode>"
1032 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1033 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1034 (match_operand:MVE_2 2 "s_register_operand" "w")]
1038 "vcmp.i%#<V_sz_elem> eq, %q1, %q2"
1039 [(set_attr "type" "mve_move")
1045 (define_insn "mve_vcmpgeq_n_s<mode>"
1047 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1048 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1049 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1053 "vcmp.s%#<V_sz_elem> ge, %q1, %2"
1054 [(set_attr "type" "mve_move")
1060 (define_insn "mve_vcmpgeq_s<mode>"
1062 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1063 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1064 (match_operand:MVE_2 2 "s_register_operand" "w")]
1068 "vcmp.s%#<V_sz_elem> ge, %q1, %q2"
1069 [(set_attr "type" "mve_move")
1075 (define_insn "mve_vcmpgtq_n_s<mode>"
1077 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1078 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1079 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1083 "vcmp.s%#<V_sz_elem> gt, %q1, %2"
1084 [(set_attr "type" "mve_move")
1090 (define_insn "mve_vcmpgtq_s<mode>"
1092 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1093 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1094 (match_operand:MVE_2 2 "s_register_operand" "w")]
1098 "vcmp.s%#<V_sz_elem> gt, %q1, %q2"
1099 [(set_attr "type" "mve_move")
1105 (define_insn "mve_vcmphiq_n_u<mode>"
1107 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1108 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1109 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1113 "vcmp.u%#<V_sz_elem> hi, %q1, %2"
1114 [(set_attr "type" "mve_move")
1120 (define_insn "mve_vcmphiq_u<mode>"
1122 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1123 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1124 (match_operand:MVE_2 2 "s_register_operand" "w")]
1128 "vcmp.u%#<V_sz_elem> hi, %q1, %q2"
1129 [(set_attr "type" "mve_move")
1135 (define_insn "mve_vcmpleq_n_s<mode>"
1137 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1138 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1139 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1143 "vcmp.s%#<V_sz_elem> le, %q1, %2"
1144 [(set_attr "type" "mve_move")
1150 (define_insn "mve_vcmpleq_s<mode>"
1152 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1153 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1154 (match_operand:MVE_2 2 "s_register_operand" "w")]
1158 "vcmp.s%#<V_sz_elem> le, %q1, %q2"
1159 [(set_attr "type" "mve_move")
1165 (define_insn "mve_vcmpltq_n_s<mode>"
1167 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1168 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1169 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1173 "vcmp.s%#<V_sz_elem> lt, %q1, %2"
1174 [(set_attr "type" "mve_move")
1180 (define_insn "mve_vcmpltq_s<mode>"
1182 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1183 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1184 (match_operand:MVE_2 2 "s_register_operand" "w")]
1188 "vcmp.s%#<V_sz_elem> lt, %q1, %q2"
1189 [(set_attr "type" "mve_move")
1193 ;; [vcmpneq_n_u, vcmpneq_n_s])
1195 (define_insn "mve_vcmpneq_n_<supf><mode>"
1197 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1198 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1199 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1203 "vcmp.i%#<V_sz_elem> ne, %q1, %2"
1204 [(set_attr "type" "mve_move")
1208 ;; [veorq_u, veorq_s])
1210 (define_insn "mve_veorq_u<mode>"
1212 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1213 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1214 (match_operand:MVE_2 2 "s_register_operand" "w")))
1217 "veor\t%q0, %q1, %q2"
1218 [(set_attr "type" "mve_move")
1220 (define_expand "mve_veorq_s<mode>"
1222 (set (match_operand:MVE_2 0 "s_register_operand")
1223 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1224 (match_operand:MVE_2 2 "s_register_operand")))
1230 ;; [vhaddq_n_u, vhaddq_n_s])
1232 (define_insn "mve_vhaddq_n_<supf><mode>"
1234 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1235 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1236 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1240 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1241 [(set_attr "type" "mve_move")
1245 ;; [vhaddq_s, vhaddq_u])
1247 (define_insn "mve_vhaddq_<supf><mode>"
1249 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1250 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1251 (match_operand:MVE_2 2 "s_register_operand" "w")]
1255 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1256 [(set_attr "type" "mve_move")
1260 ;; [vhcaddq_rot270_s])
1262 (define_insn "mve_vhcaddq_rot270_s<mode>"
1264 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1265 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1266 (match_operand:MVE_2 2 "s_register_operand" "w")]
1270 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1271 [(set_attr "type" "mve_move")
1275 ;; [vhcaddq_rot90_s])
1277 (define_insn "mve_vhcaddq_rot90_s<mode>"
1279 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1280 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1281 (match_operand:MVE_2 2 "s_register_operand" "w")]
1285 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1286 [(set_attr "type" "mve_move")
1290 ;; [vhsubq_n_u, vhsubq_n_s])
1292 (define_insn "mve_vhsubq_n_<supf><mode>"
1294 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1295 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1296 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1300 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1301 [(set_attr "type" "mve_move")
1305 ;; [vhsubq_s, vhsubq_u])
1307 (define_insn "mve_vhsubq_<supf><mode>"
1309 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1310 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1311 (match_operand:MVE_2 2 "s_register_operand" "w")]
1315 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1316 [(set_attr "type" "mve_move")
1322 (define_insn "mve_vmaxaq_s<mode>"
1324 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1325 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1326 (match_operand:MVE_2 2 "s_register_operand" "w")]
1330 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1331 [(set_attr "type" "mve_move")
1337 (define_insn "mve_vmaxavq_s<mode>"
1339 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1340 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1341 (match_operand:MVE_2 2 "s_register_operand" "w")]
1345 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1346 [(set_attr "type" "mve_move")
1350 ;; [vmaxq_u, vmaxq_s])
1352 (define_insn "mve_vmaxq_s<mode>"
1354 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1355 (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1356 (match_operand:MVE_2 2 "s_register_operand" "w")))
1359 "vmax.%#<V_s_elem>\t%q0, %q1, %q2"
1360 [(set_attr "type" "mve_move")
1363 (define_insn "mve_vmaxq_u<mode>"
1365 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1366 (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1367 (match_operand:MVE_2 2 "s_register_operand" "w")))
1370 "vmax.%#<V_u_elem>\t%q0, %q1, %q2"
1371 [(set_attr "type" "mve_move")
1375 ;; [vmaxvq_u, vmaxvq_s])
1377 (define_insn "mve_vmaxvq_<supf><mode>"
1379 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1380 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1381 (match_operand:MVE_2 2 "s_register_operand" "w")]
1385 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1386 [(set_attr "type" "mve_move")
1392 (define_insn "mve_vminaq_s<mode>"
1394 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1395 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1396 (match_operand:MVE_2 2 "s_register_operand" "w")]
1400 "vmina.s%#<V_sz_elem>\t%q0, %q2"
1401 [(set_attr "type" "mve_move")
1407 (define_insn "mve_vminavq_s<mode>"
1409 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1410 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1411 (match_operand:MVE_2 2 "s_register_operand" "w")]
1415 "vminav.s%#<V_sz_elem>\t%0, %q2"
1416 [(set_attr "type" "mve_move")
1420 ;; [vminq_s, vminq_u])
1422 (define_insn "mve_vminq_s<mode>"
1424 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1425 (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1426 (match_operand:MVE_2 2 "s_register_operand" "w")))
1429 "vmin.%#<V_s_elem>\t%q0, %q1, %q2"
1430 [(set_attr "type" "mve_move")
1433 (define_insn "mve_vminq_u<mode>"
1435 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1436 (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1437 (match_operand:MVE_2 2 "s_register_operand" "w")))
1440 "vmin.%#<V_u_elem>\t%q0, %q1, %q2"
1441 [(set_attr "type" "mve_move")
1445 ;; [vminvq_u, vminvq_s])
1447 (define_insn "mve_vminvq_<supf><mode>"
1449 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1450 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1451 (match_operand:MVE_2 2 "s_register_operand" "w")]
1455 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
1456 [(set_attr "type" "mve_move")
1460 ;; [vmladavq_u, vmladavq_s])
1462 (define_insn "mve_vmladavq_<supf><mode>"
1464 (set (match_operand:SI 0 "s_register_operand" "=Te")
1465 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1466 (match_operand:MVE_2 2 "s_register_operand" "w")]
1470 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
1471 [(set_attr "type" "mve_move")
1477 (define_insn "mve_vmladavxq_s<mode>"
1479 (set (match_operand:SI 0 "s_register_operand" "=Te")
1480 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1481 (match_operand:MVE_2 2 "s_register_operand" "w")]
1485 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1486 [(set_attr "type" "mve_move")
1492 (define_insn "mve_vmlsdavq_s<mode>"
1494 (set (match_operand:SI 0 "s_register_operand" "=Te")
1495 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1496 (match_operand:MVE_2 2 "s_register_operand" "w")]
1500 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
1501 [(set_attr "type" "mve_move")
1507 (define_insn "mve_vmlsdavxq_s<mode>"
1509 (set (match_operand:SI 0 "s_register_operand" "=Te")
1510 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1511 (match_operand:MVE_2 2 "s_register_operand" "w")]
1515 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1516 [(set_attr "type" "mve_move")
1520 ;; [vmulhq_s, vmulhq_u])
1522 (define_insn "mve_vmulhq_<supf><mode>"
1524 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1525 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1526 (match_operand:MVE_2 2 "s_register_operand" "w")]
1530 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1531 [(set_attr "type" "mve_move")
1535 ;; [vmullbq_int_u, vmullbq_int_s])
1537 (define_insn "mve_vmullbq_int_<supf><mode>"
1539 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1540 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1541 (match_operand:MVE_2 2 "s_register_operand" "w")]
1545 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1546 [(set_attr "type" "mve_move")
1550 ;; [vmulltq_int_u, vmulltq_int_s])
1552 (define_insn "mve_vmulltq_int_<supf><mode>"
1554 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1555 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1556 (match_operand:MVE_2 2 "s_register_operand" "w")]
1560 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1561 [(set_attr "type" "mve_move")
1565 ;; [vmulq_n_u, vmulq_n_s])
1567 (define_insn "mve_vmulq_n_<supf><mode>"
1569 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1570 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1571 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1575 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
1576 [(set_attr "type" "mve_move")
1580 ;; [vmulq_u, vmulq_s])
1582 (define_insn "mve_vmulq_<supf><mode>"
1584 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1585 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1586 (match_operand:MVE_2 2 "s_register_operand" "w")]
1590 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1591 [(set_attr "type" "mve_move")
1594 (define_insn "mve_vmulq<mode>"
1596 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1597 (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1598 (match_operand:MVE_2 2 "s_register_operand" "w")))
1601 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1602 [(set_attr "type" "mve_move")
1606 ;; [vornq_u, vornq_s])
1608 (define_insn "mve_vornq_s<mode>"
1610 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1611 (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
1612 (match_operand:MVE_2 1 "s_register_operand" "w")))
1615 "vorn\t%q0, %q1, %q2"
1616 [(set_attr "type" "mve_move")
1619 (define_expand "mve_vornq_u<mode>"
1621 (set (match_operand:MVE_2 0 "s_register_operand")
1622 (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
1623 (match_operand:MVE_2 1 "s_register_operand")))
1629 ;; [vorrq_s, vorrq_u])
1631 ;; signed and unsigned versions are the same: define the unsigned
1632 ;; insn, and use an expander for the signed one as we still reference
1633 ;; both names from arm_mve.h.
1634 ;; We use the same code as in neon.md (TODO: avoid this duplication).
1635 (define_insn "mve_vorrq_s<mode>"
1637 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
1638 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
1639 (match_operand:MVE_2 2 "neon_logic_op2" "w,Dl")))
1644 * return neon_output_logic_immediate (\"vorr\", &operands[2], <MODE>mode, 0, VALID_NEON_QREG_MODE (<MODE>mode));"
1645 [(set_attr "type" "mve_move")
1647 (define_expand "mve_vorrq_u<mode>"
1649 (set (match_operand:MVE_2 0 "s_register_operand")
1650 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1651 (match_operand:MVE_2 2 "neon_logic_op2")))
1657 ;; [vqaddq_n_s, vqaddq_n_u])
1659 (define_insn "mve_vqaddq_n_<supf><mode>"
1661 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1662 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1663 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1667 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1668 [(set_attr "type" "mve_move")
1672 ;; [vqaddq_u, vqaddq_s])
1674 (define_insn "mve_vqaddq_<supf><mode>"
1676 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1677 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1678 (match_operand:MVE_2 2 "s_register_operand" "w")]
1682 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1683 [(set_attr "type" "mve_move")
1689 (define_insn "mve_vqdmulhq_n_s<mode>"
1691 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1692 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1693 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1697 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1698 [(set_attr "type" "mve_move")
1704 (define_insn "mve_vqdmulhq_s<mode>"
1706 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1707 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1708 (match_operand:MVE_2 2 "s_register_operand" "w")]
1712 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1713 [(set_attr "type" "mve_move")
1719 (define_insn "mve_vqrdmulhq_n_s<mode>"
1721 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1722 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1723 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1727 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1728 [(set_attr "type" "mve_move")
1734 (define_insn "mve_vqrdmulhq_s<mode>"
1736 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1737 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1738 (match_operand:MVE_2 2 "s_register_operand" "w")]
1742 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1743 [(set_attr "type" "mve_move")
1747 ;; [vqrshlq_n_s, vqrshlq_n_u])
1749 (define_insn "mve_vqrshlq_n_<supf><mode>"
1751 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1752 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1753 (match_operand:SI 2 "s_register_operand" "r")]
1757 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1758 [(set_attr "type" "mve_move")
1762 ;; [vqrshlq_s, vqrshlq_u])
1764 (define_insn "mve_vqrshlq_<supf><mode>"
1766 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1767 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1768 (match_operand:MVE_2 2 "s_register_operand" "w")]
1772 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1773 [(set_attr "type" "mve_move")
1777 ;; [vqshlq_n_s, vqshlq_n_u])
1779 (define_insn "mve_vqshlq_n_<supf><mode>"
1781 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1782 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1783 (match_operand:SI 2 "immediate_operand" "i")]
1787 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1788 [(set_attr "type" "mve_move")
1792 ;; [vqshlq_r_u, vqshlq_r_s])
1794 (define_insn "mve_vqshlq_r_<supf><mode>"
1796 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1797 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1798 (match_operand:SI 2 "s_register_operand" "r")]
1802 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
1803 [(set_attr "type" "mve_move")
1807 ;; [vqshlq_s, vqshlq_u])
1809 (define_insn "mve_vqshlq_<supf><mode>"
1811 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1812 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1813 (match_operand:MVE_2 2 "s_register_operand" "w")]
1817 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1818 [(set_attr "type" "mve_move")
1824 (define_insn "mve_vqshluq_n_s<mode>"
1826 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1827 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1828 (match_operand:SI 2 "mve_imm_7" "Ra")]
1832 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
1833 [(set_attr "type" "mve_move")
1837 ;; [vqsubq_n_s, vqsubq_n_u])
1839 (define_insn "mve_vqsubq_n_<supf><mode>"
1841 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1842 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1843 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1847 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1848 [(set_attr "type" "mve_move")
1852 ;; [vqsubq_u, vqsubq_s])
1854 (define_insn "mve_vqsubq_<supf><mode>"
1856 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1857 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1858 (match_operand:MVE_2 2 "s_register_operand" "w")]
1862 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1863 [(set_attr "type" "mve_move")
1867 ;; [vrhaddq_s, vrhaddq_u])
1869 (define_insn "mve_vrhaddq_<supf><mode>"
1871 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1872 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1873 (match_operand:MVE_2 2 "s_register_operand" "w")]
1877 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1878 [(set_attr "type" "mve_move")
1882 ;; [vrmulhq_s, vrmulhq_u])
1884 (define_insn "mve_vrmulhq_<supf><mode>"
1886 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1887 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1888 (match_operand:MVE_2 2 "s_register_operand" "w")]
1892 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1893 [(set_attr "type" "mve_move")
1897 ;; [vrshlq_n_u, vrshlq_n_s])
1899 (define_insn "mve_vrshlq_n_<supf><mode>"
1901 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1902 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1903 (match_operand:SI 2 "s_register_operand" "r")]
1907 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1908 [(set_attr "type" "mve_move")
1912 ;; [vrshlq_s, vrshlq_u])
1914 (define_insn "mve_vrshlq_<supf><mode>"
1916 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1917 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1918 (match_operand:MVE_2 2 "s_register_operand" "w")]
1922 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1923 [(set_attr "type" "mve_move")
1927 ;; [vrshrq_n_s, vrshrq_n_u])
1929 (define_insn "mve_vrshrq_n_<supf><mode>"
1931 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1932 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1933 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1937 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1938 [(set_attr "type" "mve_move")
1942 ;; [vshlq_n_u, vshlq_n_s])
1944 (define_insn "mve_vshlq_n_<supf><mode>"
1946 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1947 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1948 (match_operand:SI 2 "immediate_operand" "i")]
1952 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1953 [(set_attr "type" "mve_move")
1957 ;; [vshlq_r_s, vshlq_r_u])
1959 (define_insn "mve_vshlq_r_<supf><mode>"
1961 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1962 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1963 (match_operand:SI 2 "s_register_operand" "r")]
1967 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
1968 [(set_attr "type" "mve_move")
1972 ;; [vsubq_n_s, vsubq_n_u])
1974 (define_insn "mve_vsubq_n_<supf><mode>"
1976 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1977 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1978 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1982 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
1983 [(set_attr "type" "mve_move")
1987 ;; [vsubq_s, vsubq_u])
1989 (define_insn "mve_vsubq_<supf><mode>"
1991 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1992 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1993 (match_operand:MVE_2 2 "s_register_operand" "w")]
1997 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1998 [(set_attr "type" "mve_move")
2001 (define_insn "mve_vsubq<mode>"
2003 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2004 (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
2005 (match_operand:MVE_2 2 "s_register_operand" "w")))
2008 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
2009 [(set_attr "type" "mve_move")
2015 (define_insn "mve_vabdq_f<mode>"
2017 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2018 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2019 (match_operand:MVE_0 2 "s_register_operand" "w")]
2022 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2023 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
2024 [(set_attr "type" "mve_move")
2028 ;; [vaddlvaq_s vaddlvaq_u])
2030 (define_insn "mve_vaddlvaq_<supf>v4si"
2032 (set (match_operand:DI 0 "s_register_operand" "=r")
2033 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2034 (match_operand:V4SI 2 "s_register_operand" "w")]
2038 "vaddlva.<supf>32 %Q0, %R0, %q2"
2039 [(set_attr "type" "mve_move")
2045 (define_insn "mve_vaddq_n_f<mode>"
2047 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2048 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2049 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2052 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2053 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
2054 [(set_attr "type" "mve_move")
2060 (define_insn "mve_vandq_f<mode>"
2062 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2063 (and:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2064 (match_operand:MVE_0 2 "s_register_operand" "w")))
2066 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2067 "vand %q0, %q1, %q2"
2068 [(set_attr "type" "mve_move")
2074 (define_insn "mve_vbicq_f<mode>"
2076 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2077 (and:MVE_0 (not:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))
2078 (match_operand:MVE_0 2 "s_register_operand" "w")))
2080 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2081 "vbic %q0, %q1, %q2"
2082 [(set_attr "type" "mve_move")
2086 ;; [vbicq_n_s, vbicq_n_u])
2088 (define_insn "mve_vbicq_n_<supf><mode>"
2090 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2091 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2092 (match_operand:SI 2 "immediate_operand" "i")]
2096 "vbic.i%#<V_sz_elem> %q0, %2"
2097 [(set_attr "type" "mve_move")
2101 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
2103 (define_insn "mve_vcaddq<mve_rot><mode>"
2105 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2106 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2107 (match_operand:MVE_0 2 "s_register_operand" "w")]
2110 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2111 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
2112 [(set_attr "type" "mve_move")
2118 (define_insn "mve_vcmpeqq_f<mode>"
2120 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2121 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2122 (match_operand:MVE_0 2 "s_register_operand" "w")]
2125 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2126 "vcmp.f%#<V_sz_elem> eq, %q1, %q2"
2127 [(set_attr "type" "mve_move")
2133 (define_insn "mve_vcmpeqq_n_f<mode>"
2135 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2136 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2137 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2140 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2141 "vcmp.f%#<V_sz_elem> eq, %q1, %2"
2142 [(set_attr "type" "mve_move")
2148 (define_insn "mve_vcmpgeq_f<mode>"
2150 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2151 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2152 (match_operand:MVE_0 2 "s_register_operand" "w")]
2155 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2156 "vcmp.f%#<V_sz_elem> ge, %q1, %q2"
2157 [(set_attr "type" "mve_move")
2163 (define_insn "mve_vcmpgeq_n_f<mode>"
2165 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2166 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2167 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2170 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2171 "vcmp.f%#<V_sz_elem> ge, %q1, %2"
2172 [(set_attr "type" "mve_move")
2178 (define_insn "mve_vcmpgtq_f<mode>"
2180 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2181 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2182 (match_operand:MVE_0 2 "s_register_operand" "w")]
2185 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2186 "vcmp.f%#<V_sz_elem> gt, %q1, %q2"
2187 [(set_attr "type" "mve_move")
2193 (define_insn "mve_vcmpgtq_n_f<mode>"
2195 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2196 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2197 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2200 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2201 "vcmp.f%#<V_sz_elem> gt, %q1, %2"
2202 [(set_attr "type" "mve_move")
2208 (define_insn "mve_vcmpleq_f<mode>"
2210 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2211 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2212 (match_operand:MVE_0 2 "s_register_operand" "w")]
2215 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2216 "vcmp.f%#<V_sz_elem> le, %q1, %q2"
2217 [(set_attr "type" "mve_move")
2223 (define_insn "mve_vcmpleq_n_f<mode>"
2225 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2226 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2227 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2230 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2231 "vcmp.f%#<V_sz_elem> le, %q1, %2"
2232 [(set_attr "type" "mve_move")
2238 (define_insn "mve_vcmpltq_f<mode>"
2240 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2241 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2242 (match_operand:MVE_0 2 "s_register_operand" "w")]
2245 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2246 "vcmp.f%#<V_sz_elem> lt, %q1, %q2"
2247 [(set_attr "type" "mve_move")
2253 (define_insn "mve_vcmpltq_n_f<mode>"
2255 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2256 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2257 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2260 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2261 "vcmp.f%#<V_sz_elem> lt, %q1, %2"
2262 [(set_attr "type" "mve_move")
2268 (define_insn "mve_vcmpneq_f<mode>"
2270 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2271 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2272 (match_operand:MVE_0 2 "s_register_operand" "w")]
2275 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2276 "vcmp.f%#<V_sz_elem> ne, %q1, %q2"
2277 [(set_attr "type" "mve_move")
2283 (define_insn "mve_vcmpneq_n_f<mode>"
2285 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2286 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2287 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2290 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2291 "vcmp.f%#<V_sz_elem> ne, %q1, %2"
2292 [(set_attr "type" "mve_move")
2296 ;; [vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270])
2298 (define_insn "mve_vcmulq<mve_rot><mode>"
2300 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2301 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2302 (match_operand:MVE_0 2 "s_register_operand" "w")]
2305 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2306 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
2307 [(set_attr "type" "mve_move")
2311 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
2313 (define_insn "mve_vctp<mode1>q_mhi"
2315 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2316 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
2317 (match_operand:HI 2 "vpr_register_operand" "Up")]
2321 "vpst\;vctpt.<mode1> %1"
2322 [(set_attr "type" "mve_move")
2323 (set_attr "length""8")])
2326 ;; [vcvtbq_f16_f32])
2328 (define_insn "mve_vcvtbq_f16_f32v8hf"
2330 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2331 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2332 (match_operand:V4SF 2 "s_register_operand" "w")]
2335 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2336 "vcvtb.f16.f32 %q0, %q2"
2337 [(set_attr "type" "mve_move")
2341 ;; [vcvttq_f16_f32])
2343 (define_insn "mve_vcvttq_f16_f32v8hf"
2345 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2346 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2347 (match_operand:V4SF 2 "s_register_operand" "w")]
2350 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2351 "vcvtt.f16.f32 %q0, %q2"
2352 [(set_attr "type" "mve_move")
2358 (define_insn "mve_veorq_f<mode>"
2360 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2361 (xor:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2362 (match_operand:MVE_0 2 "s_register_operand" "w")))
2364 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2365 "veor %q0, %q1, %q2"
2366 [(set_attr "type" "mve_move")
2372 (define_insn "mve_vmaxnmaq_f<mode>"
2374 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2375 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2376 (match_operand:MVE_0 2 "s_register_operand" "w")]
2379 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2380 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
2381 [(set_attr "type" "mve_move")
2387 (define_insn "mve_vmaxnmavq_f<mode>"
2389 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2390 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2391 (match_operand:MVE_0 2 "s_register_operand" "w")]
2394 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2395 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
2396 [(set_attr "type" "mve_move")
2402 (define_insn "mve_vmaxnmq_f<mode>"
2404 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2405 (smax:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2406 (match_operand:MVE_0 2 "s_register_operand" "w")))
2408 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2409 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
2410 [(set_attr "type" "mve_move")
2416 (define_insn "mve_vmaxnmvq_f<mode>"
2418 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2419 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2420 (match_operand:MVE_0 2 "s_register_operand" "w")]
2423 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2424 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
2425 [(set_attr "type" "mve_move")
2431 (define_insn "mve_vminnmaq_f<mode>"
2433 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2434 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2435 (match_operand:MVE_0 2 "s_register_operand" "w")]
2438 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2439 "vminnma.f%#<V_sz_elem> %q0, %q2"
2440 [(set_attr "type" "mve_move")
2446 (define_insn "mve_vminnmavq_f<mode>"
2448 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2449 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2450 (match_operand:MVE_0 2 "s_register_operand" "w")]
2453 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2454 "vminnmav.f%#<V_sz_elem> %0, %q2"
2455 [(set_attr "type" "mve_move")
2461 (define_insn "mve_vminnmq_f<mode>"
2463 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2464 (smin:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2465 (match_operand:MVE_0 2 "s_register_operand" "w")))
2467 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2468 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
2469 [(set_attr "type" "mve_move")
2475 (define_insn "mve_vminnmvq_f<mode>"
2477 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2478 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2479 (match_operand:MVE_0 2 "s_register_operand" "w")]
2482 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2483 "vminnmv.f%#<V_sz_elem> %0, %q2"
2484 [(set_attr "type" "mve_move")
2488 ;; [vmlaldavq_u, vmlaldavq_s])
2490 (define_insn "mve_vmlaldavq_<supf><mode>"
2492 (set (match_operand:DI 0 "s_register_operand" "=r")
2493 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2494 (match_operand:MVE_5 2 "s_register_operand" "w")]
2498 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2499 [(set_attr "type" "mve_move")
2505 (define_insn "mve_vmlaldavxq_s<mode>"
2507 (set (match_operand:DI 0 "s_register_operand" "=r")
2508 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2509 (match_operand:MVE_5 2 "s_register_operand" "w")]
2513 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2514 [(set_attr "type" "mve_move")
2520 (define_insn "mve_vmlsldavq_s<mode>"
2522 (set (match_operand:DI 0 "s_register_operand" "=r")
2523 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2524 (match_operand:MVE_5 2 "s_register_operand" "w")]
2528 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2529 [(set_attr "type" "mve_move")
2535 (define_insn "mve_vmlsldavxq_s<mode>"
2537 (set (match_operand:DI 0 "s_register_operand" "=r")
2538 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2539 (match_operand:MVE_5 2 "s_register_operand" "w")]
2543 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2544 [(set_attr "type" "mve_move")
2548 ;; [vmovnbq_u, vmovnbq_s])
2550 (define_insn "mve_vmovnbq_<supf><mode>"
2552 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2553 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2554 (match_operand:MVE_5 2 "s_register_operand" "w")]
2558 "vmovnb.i%#<V_sz_elem> %q0, %q2"
2559 [(set_attr "type" "mve_move")
2563 ;; [vmovntq_s, vmovntq_u])
2565 (define_insn "mve_vmovntq_<supf><mode>"
2567 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2568 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2569 (match_operand:MVE_5 2 "s_register_operand" "w")]
2573 "vmovnt.i%#<V_sz_elem> %q0, %q2"
2574 [(set_attr "type" "mve_move")
2580 (define_insn "mve_vmulq_f<mode>"
2582 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2583 (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2584 (match_operand:MVE_0 2 "s_register_operand" "w")))
2586 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2587 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
2588 [(set_attr "type" "mve_move")
2594 (define_insn "mve_vmulq_n_f<mode>"
2596 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2597 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2598 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2601 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2602 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
2603 [(set_attr "type" "mve_move")
2609 (define_insn "mve_vornq_f<mode>"
2611 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2612 (ior:MVE_0 (not:MVE_0 (match_operand:MVE_0 2 "s_register_operand" "w"))
2613 (match_operand:MVE_0 1 "s_register_operand" "w")))
2615 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2616 "vorn %q0, %q1, %q2"
2617 [(set_attr "type" "mve_move")
2623 (define_insn "mve_vorrq_f<mode>"
2625 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2626 (ior:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2627 (match_operand:MVE_0 2 "s_register_operand" "w")))
2629 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2630 "vorr %q0, %q1, %q2"
2631 [(set_attr "type" "mve_move")
2635 ;; [vorrq_n_u, vorrq_n_s])
2637 (define_insn "mve_vorrq_n_<supf><mode>"
2639 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2640 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2641 (match_operand:SI 2 "immediate_operand" "i")]
2645 "vorr.i%#<V_sz_elem> %q0, %2"
2646 [(set_attr "type" "mve_move")
2652 (define_insn "mve_vqdmullbq_n_s<mode>"
2654 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2655 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2656 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2660 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
2661 [(set_attr "type" "mve_move")
2667 (define_insn "mve_vqdmullbq_s<mode>"
2669 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2670 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2671 (match_operand:MVE_5 2 "s_register_operand" "w")]
2675 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
2676 [(set_attr "type" "mve_move")
2682 (define_insn "mve_vqdmulltq_n_s<mode>"
2684 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2685 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2686 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2690 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
2691 [(set_attr "type" "mve_move")
2697 (define_insn "mve_vqdmulltq_s<mode>"
2699 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2700 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2701 (match_operand:MVE_5 2 "s_register_operand" "w")]
2705 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
2706 [(set_attr "type" "mve_move")
2710 ;; [vqmovnbq_u, vqmovnbq_s])
2712 (define_insn "mve_vqmovnbq_<supf><mode>"
2714 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2715 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2716 (match_operand:MVE_5 2 "s_register_operand" "w")]
2720 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
2721 [(set_attr "type" "mve_move")
2725 ;; [vqmovntq_u, vqmovntq_s])
2727 (define_insn "mve_vqmovntq_<supf><mode>"
2729 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2730 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2731 (match_operand:MVE_5 2 "s_register_operand" "w")]
2735 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
2736 [(set_attr "type" "mve_move")
2742 (define_insn "mve_vqmovunbq_s<mode>"
2744 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2745 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2746 (match_operand:MVE_5 2 "s_register_operand" "w")]
2750 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
2751 [(set_attr "type" "mve_move")
2757 (define_insn "mve_vqmovuntq_s<mode>"
2759 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2760 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2761 (match_operand:MVE_5 2 "s_register_operand" "w")]
2765 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
2766 [(set_attr "type" "mve_move")
2770 ;; [vrmlaldavhxq_s])
2772 (define_insn "mve_vrmlaldavhxq_sv4si"
2774 (set (match_operand:DI 0 "s_register_operand" "=r")
2775 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2776 (match_operand:V4SI 2 "s_register_operand" "w")]
2780 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
2781 [(set_attr "type" "mve_move")
2787 (define_insn "mve_vrmlsldavhq_sv4si"
2789 (set (match_operand:DI 0 "s_register_operand" "=r")
2790 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2791 (match_operand:V4SI 2 "s_register_operand" "w")]
2795 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
2796 [(set_attr "type" "mve_move")
2800 ;; [vrmlsldavhxq_s])
2802 (define_insn "mve_vrmlsldavhxq_sv4si"
2804 (set (match_operand:DI 0 "s_register_operand" "=r")
2805 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2806 (match_operand:V4SI 2 "s_register_operand" "w")]
2810 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
2811 [(set_attr "type" "mve_move")
2815 ;; [vshllbq_n_s, vshllbq_n_u])
2817 (define_insn "mve_vshllbq_n_<supf><mode>"
2819 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2820 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2821 (match_operand:SI 2 "immediate_operand" "i")]
2825 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2826 [(set_attr "type" "mve_move")
2830 ;; [vshlltq_n_u, vshlltq_n_s])
2832 (define_insn "mve_vshlltq_n_<supf><mode>"
2834 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2835 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2836 (match_operand:SI 2 "immediate_operand" "i")]
2840 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2841 [(set_attr "type" "mve_move")
2847 (define_insn "mve_vsubq_f<mode>"
2849 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2850 (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2851 (match_operand:MVE_0 2 "s_register_operand" "w")))
2853 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2854 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
2855 [(set_attr "type" "mve_move")
2859 ;; [vmulltq_poly_p])
2861 (define_insn "mve_vmulltq_poly_p<mode>"
2863 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2864 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2865 (match_operand:MVE_3 2 "s_register_operand" "w")]
2869 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
2870 [(set_attr "type" "mve_move")
2874 ;; [vmullbq_poly_p])
2876 (define_insn "mve_vmullbq_poly_p<mode>"
2878 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2879 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2880 (match_operand:MVE_3 2 "s_register_operand" "w")]
2884 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
2885 [(set_attr "type" "mve_move")
2889 ;; [vrmlaldavhq_u vrmlaldavhq_s])
2891 (define_insn "mve_vrmlaldavhq_<supf>v4si"
2893 (set (match_operand:DI 0 "s_register_operand" "=r")
2894 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2895 (match_operand:V4SI 2 "s_register_operand" "w")]
2899 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
2900 [(set_attr "type" "mve_move")
2904 ;; [vbicq_m_n_s, vbicq_m_n_u])
2906 (define_insn "mve_vbicq_m_n_<supf><mode>"
2908 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2909 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2910 (match_operand:SI 2 "immediate_operand" "i")
2911 (match_operand:HI 3 "vpr_register_operand" "Up")]
2915 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
2916 [(set_attr "type" "mve_move")
2917 (set_attr "length""8")])
2921 (define_insn "mve_vcmpeqq_m_f<mode>"
2923 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2924 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2925 (match_operand:MVE_0 2 "s_register_operand" "w")
2926 (match_operand:HI 3 "vpr_register_operand" "Up")]
2929 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2930 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
2931 [(set_attr "type" "mve_move")
2932 (set_attr "length""8")])
2934 ;; [vcvtaq_m_u, vcvtaq_m_s])
2936 (define_insn "mve_vcvtaq_m_<supf><mode>"
2938 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2939 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2940 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2941 (match_operand:HI 3 "vpr_register_operand" "Up")]
2944 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2945 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
2946 [(set_attr "type" "mve_move")
2947 (set_attr "length""8")])
2949 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
2951 (define_insn "mve_vcvtq_m_to_f_<supf><mode>"
2953 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2954 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2955 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2956 (match_operand:HI 3 "vpr_register_operand" "Up")]
2959 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2960 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
2961 [(set_attr "type" "mve_move")
2962 (set_attr "length""8")])
2964 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
2966 (define_insn "mve_vqrshrnbq_n_<supf><mode>"
2968 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2969 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2970 (match_operand:MVE_5 2 "s_register_operand" "w")
2971 (match_operand:SI 3 "mve_imm_8" "Rb")]
2975 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
2976 [(set_attr "type" "mve_move")
2979 ;; [vqrshrunbq_n_s])
2981 (define_insn "mve_vqrshrunbq_n_s<mode>"
2983 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2984 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2985 (match_operand:MVE_5 2 "s_register_operand" "w")
2986 (match_operand:SI 3 "mve_imm_8" "Rb")]
2990 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
2991 [(set_attr "type" "mve_move")
2994 ;; [vrmlaldavhaq_s vrmlaldavhaq_u])
2996 (define_insn "mve_vrmlaldavhaq_<supf>v4si"
2998 (set (match_operand:DI 0 "s_register_operand" "=r")
2999 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
3000 (match_operand:V4SI 2 "s_register_operand" "w")
3001 (match_operand:V4SI 3 "s_register_operand" "w")]
3005 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
3006 [(set_attr "type" "mve_move")
3010 ;; [vabavq_s, vabavq_u])
3012 (define_insn "mve_vabavq_<supf><mode>"
3014 (set (match_operand:SI 0 "s_register_operand" "=r")
3015 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3016 (match_operand:MVE_2 2 "s_register_operand" "w")
3017 (match_operand:MVE_2 3 "s_register_operand" "w")]
3021 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
3022 [(set_attr "type" "mve_move")
3026 ;; [vshlcq_u vshlcq_s]
3028 (define_expand "mve_vshlcq_vec_<supf><mode>"
3029 [(match_operand:MVE_2 0 "s_register_operand")
3030 (match_operand:MVE_2 1 "s_register_operand")
3031 (match_operand:SI 2 "s_register_operand")
3032 (match_operand:SI 3 "mve_imm_32")
3033 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3036 rtx ignore_wb = gen_reg_rtx (SImode);
3037 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
3038 operands[2], operands[3]));
3042 (define_expand "mve_vshlcq_carry_<supf><mode>"
3043 [(match_operand:SI 0 "s_register_operand")
3044 (match_operand:MVE_2 1 "s_register_operand")
3045 (match_operand:SI 2 "s_register_operand")
3046 (match_operand:SI 3 "mve_imm_32")
3047 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3050 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
3051 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
3052 operands[2], operands[3]));
3056 (define_insn "mve_vshlcq_<supf><mode>"
3057 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
3058 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
3059 (match_operand:SI 3 "s_register_operand" "1")
3060 (match_operand:SI 4 "mve_imm_32" "Rf")]
3062 (set (match_operand:SI 1 "s_register_operand" "=r")
3063 (unspec:SI [(match_dup 2)
3068 "vshlc %q0, %1, %4")
3073 (define_insn "mve_vabsq_m_s<mode>"
3075 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3076 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3077 (match_operand:MVE_2 2 "s_register_operand" "w")
3078 (match_operand:HI 3 "vpr_register_operand" "Up")]
3082 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
3083 [(set_attr "type" "mve_move")
3084 (set_attr "length""8")])
3087 ;; [vaddvaq_p_u, vaddvaq_p_s])
3089 (define_insn "mve_vaddvaq_p_<supf><mode>"
3091 (set (match_operand:SI 0 "s_register_operand" "=Te")
3092 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3093 (match_operand:MVE_2 2 "s_register_operand" "w")
3094 (match_operand:HI 3 "vpr_register_operand" "Up")]
3098 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
3099 [(set_attr "type" "mve_move")
3100 (set_attr "length""8")])
3105 (define_insn "mve_vclsq_m_s<mode>"
3107 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3108 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3109 (match_operand:MVE_2 2 "s_register_operand" "w")
3110 (match_operand:HI 3 "vpr_register_operand" "Up")]
3114 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
3115 [(set_attr "type" "mve_move")
3116 (set_attr "length""8")])
3119 ;; [vclzq_m_s, vclzq_m_u])
3121 (define_insn "mve_vclzq_m_<supf><mode>"
3123 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3124 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3125 (match_operand:MVE_2 2 "s_register_operand" "w")
3126 (match_operand:HI 3 "vpr_register_operand" "Up")]
3130 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
3131 [(set_attr "type" "mve_move")
3132 (set_attr "length""8")])
3137 (define_insn "mve_vcmpcsq_m_n_u<mode>"
3139 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3140 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3141 (match_operand:<V_elem> 2 "s_register_operand" "r")
3142 (match_operand:HI 3 "vpr_register_operand" "Up")]
3146 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
3147 [(set_attr "type" "mve_move")
3148 (set_attr "length""8")])
3153 (define_insn "mve_vcmpcsq_m_u<mode>"
3155 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3156 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3157 (match_operand:MVE_2 2 "s_register_operand" "w")
3158 (match_operand:HI 3 "vpr_register_operand" "Up")]
3162 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
3163 [(set_attr "type" "mve_move")
3164 (set_attr "length""8")])
3167 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
3169 (define_insn "mve_vcmpeqq_m_n_<supf><mode>"
3171 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3172 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3173 (match_operand:<V_elem> 2 "s_register_operand" "r")
3174 (match_operand:HI 3 "vpr_register_operand" "Up")]
3178 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
3179 [(set_attr "type" "mve_move")
3180 (set_attr "length""8")])
3183 ;; [vcmpeqq_m_u, vcmpeqq_m_s])
3185 (define_insn "mve_vcmpeqq_m_<supf><mode>"
3187 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3188 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3189 (match_operand:MVE_2 2 "s_register_operand" "w")
3190 (match_operand:HI 3 "vpr_register_operand" "Up")]
3194 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
3195 [(set_attr "type" "mve_move")
3196 (set_attr "length""8")])
3201 (define_insn "mve_vcmpgeq_m_n_s<mode>"
3203 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3204 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3205 (match_operand:<V_elem> 2 "s_register_operand" "r")
3206 (match_operand:HI 3 "vpr_register_operand" "Up")]
3210 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
3211 [(set_attr "type" "mve_move")
3212 (set_attr "length""8")])
3217 (define_insn "mve_vcmpgeq_m_s<mode>"
3219 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3220 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3221 (match_operand:MVE_2 2 "s_register_operand" "w")
3222 (match_operand:HI 3 "vpr_register_operand" "Up")]
3226 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
3227 [(set_attr "type" "mve_move")
3228 (set_attr "length""8")])
3233 (define_insn "mve_vcmpgtq_m_n_s<mode>"
3235 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3236 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3237 (match_operand:<V_elem> 2 "s_register_operand" "r")
3238 (match_operand:HI 3 "vpr_register_operand" "Up")]
3242 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
3243 [(set_attr "type" "mve_move")
3244 (set_attr "length""8")])
3249 (define_insn "mve_vcmpgtq_m_s<mode>"
3251 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3252 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3253 (match_operand:MVE_2 2 "s_register_operand" "w")
3254 (match_operand:HI 3 "vpr_register_operand" "Up")]
3258 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
3259 [(set_attr "type" "mve_move")
3260 (set_attr "length""8")])
3265 (define_insn "mve_vcmphiq_m_n_u<mode>"
3267 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3268 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3269 (match_operand:<V_elem> 2 "s_register_operand" "r")
3270 (match_operand:HI 3 "vpr_register_operand" "Up")]
3274 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
3275 [(set_attr "type" "mve_move")
3276 (set_attr "length""8")])
3281 (define_insn "mve_vcmphiq_m_u<mode>"
3283 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3284 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3285 (match_operand:MVE_2 2 "s_register_operand" "w")
3286 (match_operand:HI 3 "vpr_register_operand" "Up")]
3290 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
3291 [(set_attr "type" "mve_move")
3292 (set_attr "length""8")])
3297 (define_insn "mve_vcmpleq_m_n_s<mode>"
3299 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3300 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3301 (match_operand:<V_elem> 2 "s_register_operand" "r")
3302 (match_operand:HI 3 "vpr_register_operand" "Up")]
3306 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
3307 [(set_attr "type" "mve_move")
3308 (set_attr "length""8")])
3313 (define_insn "mve_vcmpleq_m_s<mode>"
3315 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3316 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3317 (match_operand:MVE_2 2 "s_register_operand" "w")
3318 (match_operand:HI 3 "vpr_register_operand" "Up")]
3322 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
3323 [(set_attr "type" "mve_move")
3324 (set_attr "length""8")])
3329 (define_insn "mve_vcmpltq_m_n_s<mode>"
3331 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3332 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3333 (match_operand:<V_elem> 2 "s_register_operand" "r")
3334 (match_operand:HI 3 "vpr_register_operand" "Up")]
3338 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
3339 [(set_attr "type" "mve_move")
3340 (set_attr "length""8")])
3345 (define_insn "mve_vcmpltq_m_s<mode>"
3347 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3348 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3349 (match_operand:MVE_2 2 "s_register_operand" "w")
3350 (match_operand:HI 3 "vpr_register_operand" "Up")]
3354 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
3355 [(set_attr "type" "mve_move")
3356 (set_attr "length""8")])
3359 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3361 (define_insn "mve_vcmpneq_m_n_<supf><mode>"
3363 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3364 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3365 (match_operand:<V_elem> 2 "s_register_operand" "r")
3366 (match_operand:HI 3 "vpr_register_operand" "Up")]
3370 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
3371 [(set_attr "type" "mve_move")
3372 (set_attr "length""8")])
3375 ;; [vcmpneq_m_s, vcmpneq_m_u])
3377 (define_insn "mve_vcmpneq_m_<supf><mode>"
3379 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3380 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3381 (match_operand:MVE_2 2 "s_register_operand" "w")
3382 (match_operand:HI 3 "vpr_register_operand" "Up")]
3386 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
3387 [(set_attr "type" "mve_move")
3388 (set_attr "length""8")])
3391 ;; [vdupq_m_n_s, vdupq_m_n_u])
3393 (define_insn "mve_vdupq_m_n_<supf><mode>"
3395 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3396 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3397 (match_operand:<V_elem> 2 "s_register_operand" "r")
3398 (match_operand:HI 3 "vpr_register_operand" "Up")]
3402 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3403 [(set_attr "type" "mve_move")
3404 (set_attr "length""8")])
3409 (define_insn "mve_vmaxaq_m_s<mode>"
3411 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3412 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3413 (match_operand:MVE_2 2 "s_register_operand" "w")
3414 (match_operand:HI 3 "vpr_register_operand" "Up")]
3418 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
3419 [(set_attr "type" "mve_move")
3420 (set_attr "length""8")])
3425 (define_insn "mve_vmaxavq_p_s<mode>"
3427 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3428 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3429 (match_operand:MVE_2 2 "s_register_operand" "w")
3430 (match_operand:HI 3 "vpr_register_operand" "Up")]
3434 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
3435 [(set_attr "type" "mve_move")
3436 (set_attr "length""8")])
3439 ;; [vmaxvq_p_u, vmaxvq_p_s])
3441 (define_insn "mve_vmaxvq_p_<supf><mode>"
3443 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3444 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3445 (match_operand:MVE_2 2 "s_register_operand" "w")
3446 (match_operand:HI 3 "vpr_register_operand" "Up")]
3450 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
3451 [(set_attr "type" "mve_move")
3452 (set_attr "length""8")])
3457 (define_insn "mve_vminaq_m_s<mode>"
3459 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3460 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3461 (match_operand:MVE_2 2 "s_register_operand" "w")
3462 (match_operand:HI 3 "vpr_register_operand" "Up")]
3466 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
3467 [(set_attr "type" "mve_move")
3468 (set_attr "length""8")])
3473 (define_insn "mve_vminavq_p_s<mode>"
3475 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3476 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3477 (match_operand:MVE_2 2 "s_register_operand" "w")
3478 (match_operand:HI 3 "vpr_register_operand" "Up")]
3482 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
3483 [(set_attr "type" "mve_move")
3484 (set_attr "length""8")])
3487 ;; [vminvq_p_s, vminvq_p_u])
3489 (define_insn "mve_vminvq_p_<supf><mode>"
3491 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3492 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3493 (match_operand:MVE_2 2 "s_register_operand" "w")
3494 (match_operand:HI 3 "vpr_register_operand" "Up")]
3498 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
3499 [(set_attr "type" "mve_move")
3500 (set_attr "length""8")])
3503 ;; [vmladavaq_u, vmladavaq_s])
3505 (define_insn "mve_vmladavaq_<supf><mode>"
3507 (set (match_operand:SI 0 "s_register_operand" "=Te")
3508 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3509 (match_operand:MVE_2 2 "s_register_operand" "w")
3510 (match_operand:MVE_2 3 "s_register_operand" "w")]
3514 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
3515 [(set_attr "type" "mve_move")
3519 ;; [vmladavq_p_u, vmladavq_p_s])
3521 (define_insn "mve_vmladavq_p_<supf><mode>"
3523 (set (match_operand:SI 0 "s_register_operand" "=Te")
3524 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3525 (match_operand:MVE_2 2 "s_register_operand" "w")
3526 (match_operand:HI 3 "vpr_register_operand" "Up")]
3530 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
3531 [(set_attr "type" "mve_move")
3532 (set_attr "length""8")])
3537 (define_insn "mve_vmladavxq_p_s<mode>"
3539 (set (match_operand:SI 0 "s_register_operand" "=Te")
3540 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3541 (match_operand:MVE_2 2 "s_register_operand" "w")
3542 (match_operand:HI 3 "vpr_register_operand" "Up")]
3546 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
3547 [(set_attr "type" "mve_move")
3548 (set_attr "length""8")])
3551 ;; [vmlaq_n_u, vmlaq_n_s])
3553 (define_insn "mve_vmlaq_n_<supf><mode>"
3555 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3556 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3557 (match_operand:MVE_2 2 "s_register_operand" "w")
3558 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3562 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
3563 [(set_attr "type" "mve_move")
3567 ;; [vmlasq_n_u, vmlasq_n_s])
3569 (define_insn "mve_vmlasq_n_<supf><mode>"
3571 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3572 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3573 (match_operand:MVE_2 2 "s_register_operand" "w")
3574 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3578 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
3579 [(set_attr "type" "mve_move")
3585 (define_insn "mve_vmlsdavq_p_s<mode>"
3587 (set (match_operand:SI 0 "s_register_operand" "=Te")
3588 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3589 (match_operand:MVE_2 2 "s_register_operand" "w")
3590 (match_operand:HI 3 "vpr_register_operand" "Up")]
3594 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
3595 [(set_attr "type" "mve_move")
3596 (set_attr "length""8")])
3601 (define_insn "mve_vmlsdavxq_p_s<mode>"
3603 (set (match_operand:SI 0 "s_register_operand" "=Te")
3604 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3605 (match_operand:MVE_2 2 "s_register_operand" "w")
3606 (match_operand:HI 3 "vpr_register_operand" "Up")]
3610 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
3611 [(set_attr "type" "mve_move")
3612 (set_attr "length""8")])
3615 ;; [vmvnq_m_s, vmvnq_m_u])
3617 (define_insn "mve_vmvnq_m_<supf><mode>"
3619 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3620 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3621 (match_operand:MVE_2 2 "s_register_operand" "w")
3622 (match_operand:HI 3 "vpr_register_operand" "Up")]
3626 "vpst\;vmvnt %q0, %q2"
3627 [(set_attr "type" "mve_move")
3628 (set_attr "length""8")])
3633 (define_insn "mve_vnegq_m_s<mode>"
3635 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3636 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3637 (match_operand:MVE_2 2 "s_register_operand" "w")
3638 (match_operand:HI 3 "vpr_register_operand" "Up")]
3642 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
3643 [(set_attr "type" "mve_move")
3644 (set_attr "length""8")])
3647 ;; [vpselq_u, vpselq_s])
3649 (define_insn "mve_vpselq_<supf><mode>"
3651 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
3652 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
3653 (match_operand:MVE_1 2 "s_register_operand" "w")
3654 (match_operand:HI 3 "vpr_register_operand" "Up")]
3658 "vpsel %q0, %q1, %q2"
3659 [(set_attr "type" "mve_move")
3665 (define_insn "mve_vqabsq_m_s<mode>"
3667 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3668 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3669 (match_operand:MVE_2 2 "s_register_operand" "w")
3670 (match_operand:HI 3 "vpr_register_operand" "Up")]
3674 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
3675 [(set_attr "type" "mve_move")
3676 (set_attr "length""8")])
3681 (define_insn "mve_vqdmlahq_n_<supf><mode>"
3683 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3684 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3685 (match_operand:MVE_2 2 "s_register_operand" "w")
3686 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3690 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3691 [(set_attr "type" "mve_move")
3697 (define_insn "mve_vqdmlashq_n_<supf><mode>"
3699 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3700 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3701 (match_operand:MVE_2 2 "s_register_operand" "w")
3702 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3706 "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3707 [(set_attr "type" "mve_move")
3713 (define_insn "mve_vqnegq_m_s<mode>"
3715 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3716 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3717 (match_operand:MVE_2 2 "s_register_operand" "w")
3718 (match_operand:HI 3 "vpr_register_operand" "Up")]
3722 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
3723 [(set_attr "type" "mve_move")
3724 (set_attr "length""8")])
3729 (define_insn "mve_vqrdmladhq_s<mode>"
3731 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3732 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3733 (match_operand:MVE_2 2 "s_register_operand" "w")
3734 (match_operand:MVE_2 3 "s_register_operand" "w")]
3738 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3739 [(set_attr "type" "mve_move")
3745 (define_insn "mve_vqrdmladhxq_s<mode>"
3747 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3748 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3749 (match_operand:MVE_2 2 "s_register_operand" "w")
3750 (match_operand:MVE_2 3 "s_register_operand" "w")]
3754 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3755 [(set_attr "type" "mve_move")
3761 (define_insn "mve_vqrdmlahq_n_<supf><mode>"
3763 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3764 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3765 (match_operand:MVE_2 2 "s_register_operand" "w")
3766 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3770 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3771 [(set_attr "type" "mve_move")
3775 ;; [vqrdmlashq_n_s])
3777 (define_insn "mve_vqrdmlashq_n_<supf><mode>"
3779 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3780 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3781 (match_operand:MVE_2 2 "s_register_operand" "w")
3782 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3786 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3787 [(set_attr "type" "mve_move")
3793 (define_insn "mve_vqrdmlsdhq_s<mode>"
3795 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3796 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3797 (match_operand:MVE_2 2 "s_register_operand" "w")
3798 (match_operand:MVE_2 3 "s_register_operand" "w")]
3802 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3803 [(set_attr "type" "mve_move")
3809 (define_insn "mve_vqrdmlsdhxq_s<mode>"
3811 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3812 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3813 (match_operand:MVE_2 2 "s_register_operand" "w")
3814 (match_operand:MVE_2 3 "s_register_operand" "w")]
3818 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3819 [(set_attr "type" "mve_move")
3823 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
3825 (define_insn "mve_vqrshlq_m_n_<supf><mode>"
3827 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3828 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3829 (match_operand:SI 2 "s_register_operand" "r")
3830 (match_operand:HI 3 "vpr_register_operand" "Up")]
3834 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
3835 [(set_attr "type" "mve_move")
3836 (set_attr "length""8")])
3839 ;; [vqshlq_m_r_u, vqshlq_m_r_s])
3841 (define_insn "mve_vqshlq_m_r_<supf><mode>"
3843 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3844 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3845 (match_operand:SI 2 "s_register_operand" "r")
3846 (match_operand:HI 3 "vpr_register_operand" "Up")]
3850 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3851 [(set_attr "type" "mve_move")
3852 (set_attr "length""8")])
3855 ;; [vrev64q_m_u, vrev64q_m_s])
3857 (define_insn "mve_vrev64q_m_<supf><mode>"
3859 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3860 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3861 (match_operand:MVE_2 2 "s_register_operand" "w")
3862 (match_operand:HI 3 "vpr_register_operand" "Up")]
3866 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
3867 [(set_attr "type" "mve_move")
3868 (set_attr "length""8")])
3871 ;; [vrshlq_m_n_s, vrshlq_m_n_u])
3873 (define_insn "mve_vrshlq_m_n_<supf><mode>"
3875 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3876 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3877 (match_operand:SI 2 "s_register_operand" "r")
3878 (match_operand:HI 3 "vpr_register_operand" "Up")]
3882 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3883 [(set_attr "type" "mve_move")
3884 (set_attr "length""8")])
3887 ;; [vshlq_m_r_u, vshlq_m_r_s])
3889 (define_insn "mve_vshlq_m_r_<supf><mode>"
3891 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3892 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3893 (match_operand:SI 2 "s_register_operand" "r")
3894 (match_operand:HI 3 "vpr_register_operand" "Up")]
3898 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3899 [(set_attr "type" "mve_move")
3900 (set_attr "length""8")])
3903 ;; [vsliq_n_u, vsliq_n_s])
3905 (define_insn "mve_vsliq_n_<supf><mode>"
3907 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3908 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3909 (match_operand:MVE_2 2 "s_register_operand" "w")
3910 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
3914 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
3915 [(set_attr "type" "mve_move")
3919 ;; [vsriq_n_u, vsriq_n_s])
3921 (define_insn "mve_vsriq_n_<supf><mode>"
3923 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3924 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3925 (match_operand:MVE_2 2 "s_register_operand" "w")
3926 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
3930 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
3931 [(set_attr "type" "mve_move")
3937 (define_insn "mve_vqdmlsdhxq_s<mode>"
3939 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3940 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3941 (match_operand:MVE_2 2 "s_register_operand" "w")
3942 (match_operand:MVE_2 3 "s_register_operand" "w")]
3946 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3947 [(set_attr "type" "mve_move")
3953 (define_insn "mve_vqdmlsdhq_s<mode>"
3955 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3956 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3957 (match_operand:MVE_2 2 "s_register_operand" "w")
3958 (match_operand:MVE_2 3 "s_register_operand" "w")]
3962 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3963 [(set_attr "type" "mve_move")
3969 (define_insn "mve_vqdmladhxq_s<mode>"
3971 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3972 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3973 (match_operand:MVE_2 2 "s_register_operand" "w")
3974 (match_operand:MVE_2 3 "s_register_operand" "w")]
3978 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3979 [(set_attr "type" "mve_move")
3985 (define_insn "mve_vqdmladhq_s<mode>"
3987 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3988 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3989 (match_operand:MVE_2 2 "s_register_operand" "w")
3990 (match_operand:MVE_2 3 "s_register_operand" "w")]
3994 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3995 [(set_attr "type" "mve_move")
4001 (define_insn "mve_vmlsdavaxq_s<mode>"
4003 (set (match_operand:SI 0 "s_register_operand" "=Te")
4004 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4005 (match_operand:MVE_2 2 "s_register_operand" "w")
4006 (match_operand:MVE_2 3 "s_register_operand" "w")]
4010 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4011 [(set_attr "type" "mve_move")
4017 (define_insn "mve_vmlsdavaq_s<mode>"
4019 (set (match_operand:SI 0 "s_register_operand" "=Te")
4020 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4021 (match_operand:MVE_2 2 "s_register_operand" "w")
4022 (match_operand:MVE_2 3 "s_register_operand" "w")]
4026 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
4027 [(set_attr "type" "mve_move")
4033 (define_insn "mve_vmladavaxq_s<mode>"
4035 (set (match_operand:SI 0 "s_register_operand" "=Te")
4036 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4037 (match_operand:MVE_2 2 "s_register_operand" "w")
4038 (match_operand:MVE_2 3 "s_register_operand" "w")]
4042 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4043 [(set_attr "type" "mve_move")
4048 (define_insn "mve_vabsq_m_f<mode>"
4050 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4051 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4052 (match_operand:MVE_0 2 "s_register_operand" "w")
4053 (match_operand:HI 3 "vpr_register_operand" "Up")]
4056 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4057 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
4058 [(set_attr "type" "mve_move")
4059 (set_attr "length""8")])
4062 ;; [vaddlvaq_p_s vaddlvaq_p_u])
4064 (define_insn "mve_vaddlvaq_p_<supf>v4si"
4066 (set (match_operand:DI 0 "s_register_operand" "=r")
4067 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4068 (match_operand:V4SI 2 "s_register_operand" "w")
4069 (match_operand:HI 3 "vpr_register_operand" "Up")]
4073 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
4074 [(set_attr "type" "mve_move")
4075 (set_attr "length""8")])
4077 ;; [vcmlaq, vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270])
4079 (define_insn "mve_vcmlaq<mve_rot><mode>"
4081 (set (match_operand:MVE_0 0 "s_register_operand" "=w,w")
4082 (plus:MVE_0 (match_operand:MVE_0 1 "reg_or_zero_operand" "Dz,0")
4084 [(match_operand:MVE_0 2 "s_register_operand" "w,w")
4085 (match_operand:MVE_0 3 "s_register_operand" "w,w")]
4088 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4090 vcmul.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>
4091 vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>"
4092 [(set_attr "type" "mve_move")
4098 (define_insn "mve_vcmpeqq_m_n_f<mode>"
4100 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4101 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4102 (match_operand:<V_elem> 2 "s_register_operand" "r")
4103 (match_operand:HI 3 "vpr_register_operand" "Up")]
4106 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4107 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
4108 [(set_attr "type" "mve_move")
4109 (set_attr "length""8")])
4114 (define_insn "mve_vcmpgeq_m_f<mode>"
4116 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4117 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4118 (match_operand:MVE_0 2 "s_register_operand" "w")
4119 (match_operand:HI 3 "vpr_register_operand" "Up")]
4122 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4123 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
4124 [(set_attr "type" "mve_move")
4125 (set_attr "length""8")])
4130 (define_insn "mve_vcmpgeq_m_n_f<mode>"
4132 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4133 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4134 (match_operand:<V_elem> 2 "s_register_operand" "r")
4135 (match_operand:HI 3 "vpr_register_operand" "Up")]
4138 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4139 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
4140 [(set_attr "type" "mve_move")
4141 (set_attr "length""8")])
4146 (define_insn "mve_vcmpgtq_m_f<mode>"
4148 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4149 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4150 (match_operand:MVE_0 2 "s_register_operand" "w")
4151 (match_operand:HI 3 "vpr_register_operand" "Up")]
4154 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4155 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
4156 [(set_attr "type" "mve_move")
4157 (set_attr "length""8")])
4162 (define_insn "mve_vcmpgtq_m_n_f<mode>"
4164 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4165 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4166 (match_operand:<V_elem> 2 "s_register_operand" "r")
4167 (match_operand:HI 3 "vpr_register_operand" "Up")]
4170 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4171 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
4172 [(set_attr "type" "mve_move")
4173 (set_attr "length""8")])
4178 (define_insn "mve_vcmpleq_m_f<mode>"
4180 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4181 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4182 (match_operand:MVE_0 2 "s_register_operand" "w")
4183 (match_operand:HI 3 "vpr_register_operand" "Up")]
4186 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4187 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
4188 [(set_attr "type" "mve_move")
4189 (set_attr "length""8")])
4194 (define_insn "mve_vcmpleq_m_n_f<mode>"
4196 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4197 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4198 (match_operand:<V_elem> 2 "s_register_operand" "r")
4199 (match_operand:HI 3 "vpr_register_operand" "Up")]
4202 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4203 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
4204 [(set_attr "type" "mve_move")
4205 (set_attr "length""8")])
4210 (define_insn "mve_vcmpltq_m_f<mode>"
4212 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4213 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4214 (match_operand:MVE_0 2 "s_register_operand" "w")
4215 (match_operand:HI 3 "vpr_register_operand" "Up")]
4218 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4219 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
4220 [(set_attr "type" "mve_move")
4221 (set_attr "length""8")])
4226 (define_insn "mve_vcmpltq_m_n_f<mode>"
4228 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4229 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4230 (match_operand:<V_elem> 2 "s_register_operand" "r")
4231 (match_operand:HI 3 "vpr_register_operand" "Up")]
4234 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4235 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
4236 [(set_attr "type" "mve_move")
4237 (set_attr "length""8")])
4242 (define_insn "mve_vcmpneq_m_f<mode>"
4244 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4245 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4246 (match_operand:MVE_0 2 "s_register_operand" "w")
4247 (match_operand:HI 3 "vpr_register_operand" "Up")]
4250 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4251 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
4252 [(set_attr "type" "mve_move")
4253 (set_attr "length""8")])
4258 (define_insn "mve_vcmpneq_m_n_f<mode>"
4260 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4261 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4262 (match_operand:<V_elem> 2 "s_register_operand" "r")
4263 (match_operand:HI 3 "vpr_register_operand" "Up")]
4266 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4267 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
4268 [(set_attr "type" "mve_move")
4269 (set_attr "length""8")])
4272 ;; [vcvtbq_m_f16_f32])
4274 (define_insn "mve_vcvtbq_m_f16_f32v8hf"
4276 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4277 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4278 (match_operand:V4SF 2 "s_register_operand" "w")
4279 (match_operand:HI 3 "vpr_register_operand" "Up")]
4282 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4283 "vpst\;vcvtbt.f16.f32 %q0, %q2"
4284 [(set_attr "type" "mve_move")
4285 (set_attr "length""8")])
4288 ;; [vcvtbq_m_f32_f16])
4290 (define_insn "mve_vcvtbq_m_f32_f16v4sf"
4292 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4293 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4294 (match_operand:V8HF 2 "s_register_operand" "w")
4295 (match_operand:HI 3 "vpr_register_operand" "Up")]
4298 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4299 "vpst\;vcvtbt.f32.f16 %q0, %q2"
4300 [(set_attr "type" "mve_move")
4301 (set_attr "length""8")])
4304 ;; [vcvttq_m_f16_f32])
4306 (define_insn "mve_vcvttq_m_f16_f32v8hf"
4308 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4309 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4310 (match_operand:V4SF 2 "s_register_operand" "w")
4311 (match_operand:HI 3 "vpr_register_operand" "Up")]
4314 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4315 "vpst\;vcvttt.f16.f32 %q0, %q2"
4316 [(set_attr "type" "mve_move")
4317 (set_attr "length""8")])
4320 ;; [vcvttq_m_f32_f16])
4322 (define_insn "mve_vcvttq_m_f32_f16v4sf"
4324 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4325 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4326 (match_operand:V8HF 2 "s_register_operand" "w")
4327 (match_operand:HI 3 "vpr_register_operand" "Up")]
4330 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4331 "vpst\;vcvttt.f32.f16 %q0, %q2"
4332 [(set_attr "type" "mve_move")
4333 (set_attr "length""8")])
4338 (define_insn "mve_vdupq_m_n_f<mode>"
4340 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4341 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4342 (match_operand:<V_elem> 2 "s_register_operand" "r")
4343 (match_operand:HI 3 "vpr_register_operand" "Up")]
4346 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4347 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
4348 [(set_attr "type" "mve_move")
4349 (set_attr "length""8")])
4354 (define_insn "mve_vfmaq_f<mode>"
4356 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4357 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4358 (match_operand:MVE_0 2 "s_register_operand" "w")
4359 (match_operand:MVE_0 3 "s_register_operand" "w")]
4362 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4363 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
4364 [(set_attr "type" "mve_move")
4370 (define_insn "mve_vfmaq_n_f<mode>"
4372 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4373 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4374 (match_operand:MVE_0 2 "s_register_operand" "w")
4375 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4378 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4379 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
4380 [(set_attr "type" "mve_move")
4386 (define_insn "mve_vfmasq_n_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:<V_elem> 3 "s_register_operand" "r")]
4394 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4395 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
4396 [(set_attr "type" "mve_move")
4401 (define_insn "mve_vfmsq_f<mode>"
4403 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4404 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4405 (match_operand:MVE_0 2 "s_register_operand" "w")
4406 (match_operand:MVE_0 3 "s_register_operand" "w")]
4409 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4410 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
4411 [(set_attr "type" "mve_move")
4417 (define_insn "mve_vmaxnmaq_m_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" "0")
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 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
4427 [(set_attr "type" "mve_move")
4428 (set_attr "length""8")])
4432 (define_insn "mve_vmaxnmavq_p_f<mode>"
4434 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4435 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4436 (match_operand:MVE_0 2 "s_register_operand" "w")
4437 (match_operand:HI 3 "vpr_register_operand" "Up")]
4440 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4441 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
4442 [(set_attr "type" "mve_move")
4443 (set_attr "length""8")])
4448 (define_insn "mve_vmaxnmvq_p_f<mode>"
4450 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4451 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4452 (match_operand:MVE_0 2 "s_register_operand" "w")
4453 (match_operand:HI 3 "vpr_register_operand" "Up")]
4456 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4457 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
4458 [(set_attr "type" "mve_move")
4459 (set_attr "length""8")])
4463 (define_insn "mve_vminnmaq_m_f<mode>"
4465 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4466 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4467 (match_operand:MVE_0 2 "s_register_operand" "w")
4468 (match_operand:HI 3 "vpr_register_operand" "Up")]
4471 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4472 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
4473 [(set_attr "type" "mve_move")
4474 (set_attr "length""8")])
4479 (define_insn "mve_vminnmavq_p_f<mode>"
4481 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4482 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4483 (match_operand:MVE_0 2 "s_register_operand" "w")
4484 (match_operand:HI 3 "vpr_register_operand" "Up")]
4487 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4488 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
4489 [(set_attr "type" "mve_move")
4490 (set_attr "length""8")])
4494 (define_insn "mve_vminnmvq_p_f<mode>"
4496 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4497 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4498 (match_operand:MVE_0 2 "s_register_operand" "w")
4499 (match_operand:HI 3 "vpr_register_operand" "Up")]
4502 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4503 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
4504 [(set_attr "type" "mve_move")
4505 (set_attr "length""8")])
4508 ;; [vmlaldavaq_s, vmlaldavaq_u])
4510 (define_insn "mve_vmlaldavaq_<supf><mode>"
4512 (set (match_operand:DI 0 "s_register_operand" "=r")
4513 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4514 (match_operand:MVE_5 2 "s_register_operand" "w")
4515 (match_operand:MVE_5 3 "s_register_operand" "w")]
4519 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4520 [(set_attr "type" "mve_move")
4526 (define_insn "mve_vmlaldavaxq_s<mode>"
4528 (set (match_operand:DI 0 "s_register_operand" "=r")
4529 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4530 (match_operand:MVE_5 2 "s_register_operand" "w")
4531 (match_operand:MVE_5 3 "s_register_operand" "w")]
4535 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4536 [(set_attr "type" "mve_move")
4540 ;; [vmlaldavq_p_u, vmlaldavq_p_s])
4542 (define_insn "mve_vmlaldavq_p_<supf><mode>"
4544 (set (match_operand:DI 0 "s_register_operand" "=r")
4545 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4546 (match_operand:MVE_5 2 "s_register_operand" "w")
4547 (match_operand:HI 3 "vpr_register_operand" "Up")]
4551 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4552 [(set_attr "type" "mve_move")
4553 (set_attr "length""8")])
4556 ;; [vmlaldavxq_p_s])
4558 (define_insn "mve_vmlaldavxq_p_s<mode>"
4560 (set (match_operand:DI 0 "s_register_operand" "=r")
4561 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4562 (match_operand:MVE_5 2 "s_register_operand" "w")
4563 (match_operand:HI 3 "vpr_register_operand" "Up")]
4567 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
4568 [(set_attr "type" "mve_move")
4569 (set_attr "length""8")])
4573 (define_insn "mve_vmlsldavaq_s<mode>"
4575 (set (match_operand:DI 0 "s_register_operand" "=r")
4576 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4577 (match_operand:MVE_5 2 "s_register_operand" "w")
4578 (match_operand:MVE_5 3 "s_register_operand" "w")]
4582 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4583 [(set_attr "type" "mve_move")
4589 (define_insn "mve_vmlsldavaxq_s<mode>"
4591 (set (match_operand:DI 0 "s_register_operand" "=r")
4592 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4593 (match_operand:MVE_5 2 "s_register_operand" "w")
4594 (match_operand:MVE_5 3 "s_register_operand" "w")]
4598 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4599 [(set_attr "type" "mve_move")
4605 (define_insn "mve_vmlsldavq_p_s<mode>"
4607 (set (match_operand:DI 0 "s_register_operand" "=r")
4608 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4609 (match_operand:MVE_5 2 "s_register_operand" "w")
4610 (match_operand:HI 3 "vpr_register_operand" "Up")]
4614 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4615 [(set_attr "type" "mve_move")
4616 (set_attr "length""8")])
4619 ;; [vmlsldavxq_p_s])
4621 (define_insn "mve_vmlsldavxq_p_s<mode>"
4623 (set (match_operand:DI 0 "s_register_operand" "=r")
4624 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4625 (match_operand:MVE_5 2 "s_register_operand" "w")
4626 (match_operand:HI 3 "vpr_register_operand" "Up")]
4630 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4631 [(set_attr "type" "mve_move")
4632 (set_attr "length""8")])
4634 ;; [vmovlbq_m_u, vmovlbq_m_s])
4636 (define_insn "mve_vmovlbq_m_<supf><mode>"
4638 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4639 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4640 (match_operand:MVE_3 2 "s_register_operand" "w")
4641 (match_operand:HI 3 "vpr_register_operand" "Up")]
4645 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
4646 [(set_attr "type" "mve_move")
4647 (set_attr "length""8")])
4649 ;; [vmovltq_m_u, vmovltq_m_s])
4651 (define_insn "mve_vmovltq_m_<supf><mode>"
4653 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4654 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4655 (match_operand:MVE_3 2 "s_register_operand" "w")
4656 (match_operand:HI 3 "vpr_register_operand" "Up")]
4660 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
4661 [(set_attr "type" "mve_move")
4662 (set_attr "length""8")])
4664 ;; [vmovnbq_m_u, vmovnbq_m_s])
4666 (define_insn "mve_vmovnbq_m_<supf><mode>"
4668 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4669 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4670 (match_operand:MVE_5 2 "s_register_operand" "w")
4671 (match_operand:HI 3 "vpr_register_operand" "Up")]
4675 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
4676 [(set_attr "type" "mve_move")
4677 (set_attr "length""8")])
4680 ;; [vmovntq_m_u, vmovntq_m_s])
4682 (define_insn "mve_vmovntq_m_<supf><mode>"
4684 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4685 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4686 (match_operand:MVE_5 2 "s_register_operand" "w")
4687 (match_operand:HI 3 "vpr_register_operand" "Up")]
4691 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
4692 [(set_attr "type" "mve_move")
4693 (set_attr "length""8")])
4696 ;; [vmvnq_m_n_u, vmvnq_m_n_s])
4698 (define_insn "mve_vmvnq_m_n_<supf><mode>"
4700 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4701 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4702 (match_operand:SI 2 "immediate_operand" "i")
4703 (match_operand:HI 3 "vpr_register_operand" "Up")]
4707 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
4708 [(set_attr "type" "mve_move")
4709 (set_attr "length""8")])
4713 (define_insn "mve_vnegq_m_f<mode>"
4715 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4716 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4717 (match_operand:MVE_0 2 "s_register_operand" "w")
4718 (match_operand:HI 3 "vpr_register_operand" "Up")]
4721 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4722 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
4723 [(set_attr "type" "mve_move")
4724 (set_attr "length""8")])
4727 ;; [vorrq_m_n_s, vorrq_m_n_u])
4729 (define_insn "mve_vorrq_m_n_<supf><mode>"
4731 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4732 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4733 (match_operand:SI 2 "immediate_operand" "i")
4734 (match_operand:HI 3 "vpr_register_operand" "Up")]
4738 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
4739 [(set_attr "type" "mve_move")
4740 (set_attr "length""8")])
4744 (define_insn "mve_vpselq_f<mode>"
4746 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4747 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
4748 (match_operand:MVE_0 2 "s_register_operand" "w")
4749 (match_operand:HI 3 "vpr_register_operand" "Up")]
4752 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4753 "vpsel %q0, %q1, %q2"
4754 [(set_attr "type" "mve_move")
4758 ;; [vqmovnbq_m_s, vqmovnbq_m_u])
4760 (define_insn "mve_vqmovnbq_m_<supf><mode>"
4762 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4763 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4764 (match_operand:MVE_5 2 "s_register_operand" "w")
4765 (match_operand:HI 3 "vpr_register_operand" "Up")]
4769 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
4770 [(set_attr "type" "mve_move")
4771 (set_attr "length""8")])
4774 ;; [vqmovntq_m_u, vqmovntq_m_s])
4776 (define_insn "mve_vqmovntq_m_<supf><mode>"
4778 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4779 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4780 (match_operand:MVE_5 2 "s_register_operand" "w")
4781 (match_operand:HI 3 "vpr_register_operand" "Up")]
4785 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
4786 [(set_attr "type" "mve_move")
4787 (set_attr "length""8")])
4792 (define_insn "mve_vqmovunbq_m_s<mode>"
4794 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4795 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4796 (match_operand:MVE_5 2 "s_register_operand" "w")
4797 (match_operand:HI 3 "vpr_register_operand" "Up")]
4801 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
4802 [(set_attr "type" "mve_move")
4803 (set_attr "length""8")])
4808 (define_insn "mve_vqmovuntq_m_s<mode>"
4810 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4811 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4812 (match_operand:MVE_5 2 "s_register_operand" "w")
4813 (match_operand:HI 3 "vpr_register_operand" "Up")]
4817 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
4818 [(set_attr "type" "mve_move")
4819 (set_attr "length""8")])
4822 ;; [vqrshrntq_n_u, vqrshrntq_n_s])
4824 (define_insn "mve_vqrshrntq_n_<supf><mode>"
4826 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4827 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4828 (match_operand:MVE_5 2 "s_register_operand" "w")
4829 (match_operand:SI 3 "mve_imm_8" "Rb")]
4833 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4834 [(set_attr "type" "mve_move")
4838 ;; [vqrshruntq_n_s])
4840 (define_insn "mve_vqrshruntq_n_s<mode>"
4842 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4843 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4844 (match_operand:MVE_5 2 "s_register_operand" "w")
4845 (match_operand:SI 3 "mve_imm_8" "Rb")]
4849 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4850 [(set_attr "type" "mve_move")
4854 ;; [vqshrnbq_n_u, vqshrnbq_n_s])
4856 (define_insn "mve_vqshrnbq_n_<supf><mode>"
4858 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4859 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4860 (match_operand:MVE_5 2 "s_register_operand" "w")
4861 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4865 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4866 [(set_attr "type" "mve_move")
4870 ;; [vqshrntq_n_u, vqshrntq_n_s])
4872 (define_insn "mve_vqshrntq_n_<supf><mode>"
4874 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4875 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4876 (match_operand:MVE_5 2 "s_register_operand" "w")
4877 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4881 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4882 [(set_attr "type" "mve_move")
4888 (define_insn "mve_vqshrunbq_n_s<mode>"
4890 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4891 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4892 (match_operand:MVE_5 2 "s_register_operand" "w")
4893 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4897 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
4898 [(set_attr "type" "mve_move")
4904 (define_insn "mve_vqshruntq_n_s<mode>"
4906 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4907 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4908 (match_operand:MVE_5 2 "s_register_operand" "w")
4909 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4913 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4914 [(set_attr "type" "mve_move")
4920 (define_insn "mve_vrev32q_m_fv8hf"
4922 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4923 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4924 (match_operand:V8HF 2 "s_register_operand" "w")
4925 (match_operand:HI 3 "vpr_register_operand" "Up")]
4928 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4929 "vpst\;vrev32t.16 %q0, %q2"
4930 [(set_attr "type" "mve_move")
4931 (set_attr "length""8")])
4934 ;; [vrev32q_m_s, vrev32q_m_u])
4936 (define_insn "mve_vrev32q_m_<supf><mode>"
4938 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
4939 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
4940 (match_operand:MVE_3 2 "s_register_operand" "w")
4941 (match_operand:HI 3 "vpr_register_operand" "Up")]
4945 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
4946 [(set_attr "type" "mve_move")
4947 (set_attr "length""8")])
4952 (define_insn "mve_vrev64q_m_f<mode>"
4954 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4955 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4956 (match_operand:MVE_0 2 "s_register_operand" "w")
4957 (match_operand:HI 3 "vpr_register_operand" "Up")]
4960 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4961 "vpst\;vrev64t.%#<V_sz_elem> %q0, %q2"
4962 [(set_attr "type" "mve_move")
4963 (set_attr "length""8")])
4966 ;; [vrmlaldavhaxq_s])
4968 (define_insn "mve_vrmlaldavhaxq_sv4si"
4970 (set (match_operand:DI 0 "s_register_operand" "=r")
4971 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4972 (match_operand:V4SI 2 "s_register_operand" "w")
4973 (match_operand:V4SI 3 "s_register_operand" "w")]
4977 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
4978 [(set_attr "type" "mve_move")
4982 ;; [vrmlaldavhxq_p_s])
4984 (define_insn "mve_vrmlaldavhxq_p_sv4si"
4986 (set (match_operand:DI 0 "s_register_operand" "=r")
4987 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4988 (match_operand:V4SI 2 "s_register_operand" "w")
4989 (match_operand:HI 3 "vpr_register_operand" "Up")]
4993 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
4994 [(set_attr "type" "mve_move")
4995 (set_attr "length""8")])
4998 ;; [vrmlsldavhaxq_s])
5000 (define_insn "mve_vrmlsldavhaxq_sv4si"
5002 (set (match_operand:DI 0 "s_register_operand" "=r")
5003 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5004 (match_operand:V4SI 2 "s_register_operand" "w")
5005 (match_operand:V4SI 3 "s_register_operand" "w")]
5009 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
5010 [(set_attr "type" "mve_move")
5014 ;; [vrmlsldavhq_p_s])
5016 (define_insn "mve_vrmlsldavhq_p_sv4si"
5018 (set (match_operand:DI 0 "s_register_operand" "=r")
5019 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5020 (match_operand:V4SI 2 "s_register_operand" "w")
5021 (match_operand:HI 3 "vpr_register_operand" "Up")]
5025 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
5026 [(set_attr "type" "mve_move")
5027 (set_attr "length""8")])
5030 ;; [vrmlsldavhxq_p_s])
5032 (define_insn "mve_vrmlsldavhxq_p_sv4si"
5034 (set (match_operand:DI 0 "s_register_operand" "=r")
5035 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5036 (match_operand:V4SI 2 "s_register_operand" "w")
5037 (match_operand:HI 3 "vpr_register_operand" "Up")]
5041 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
5042 [(set_attr "type" "mve_move")
5043 (set_attr "length""8")])
5048 (define_insn "mve_vrndaq_m_f<mode>"
5050 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5051 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5052 (match_operand:MVE_0 2 "s_register_operand" "w")
5053 (match_operand:HI 3 "vpr_register_operand" "Up")]
5056 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5057 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
5058 [(set_attr "type" "mve_move")
5059 (set_attr "length""8")])
5064 (define_insn "mve_vrndmq_m_f<mode>"
5066 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5067 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5068 (match_operand:MVE_0 2 "s_register_operand" "w")
5069 (match_operand:HI 3 "vpr_register_operand" "Up")]
5072 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5073 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
5074 [(set_attr "type" "mve_move")
5075 (set_attr "length""8")])
5080 (define_insn "mve_vrndnq_m_f<mode>"
5082 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5083 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5084 (match_operand:MVE_0 2 "s_register_operand" "w")
5085 (match_operand:HI 3 "vpr_register_operand" "Up")]
5088 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5089 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
5090 [(set_attr "type" "mve_move")
5091 (set_attr "length""8")])
5096 (define_insn "mve_vrndpq_m_f<mode>"
5098 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5099 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5100 (match_operand:MVE_0 2 "s_register_operand" "w")
5101 (match_operand:HI 3 "vpr_register_operand" "Up")]
5104 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5105 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
5106 [(set_attr "type" "mve_move")
5107 (set_attr "length""8")])
5112 (define_insn "mve_vrndxq_m_f<mode>"
5114 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5115 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5116 (match_operand:MVE_0 2 "s_register_operand" "w")
5117 (match_operand:HI 3 "vpr_register_operand" "Up")]
5120 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5121 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
5122 [(set_attr "type" "mve_move")
5123 (set_attr "length""8")])
5126 ;; [vrshrnbq_n_s, vrshrnbq_n_u])
5128 (define_insn "mve_vrshrnbq_n_<supf><mode>"
5130 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5131 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5132 (match_operand:MVE_5 2 "s_register_operand" "w")
5133 (match_operand:SI 3 "mve_imm_8" "Rb")]
5137 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5138 [(set_attr "type" "mve_move")
5142 ;; [vrshrntq_n_u, vrshrntq_n_s])
5144 (define_insn "mve_vrshrntq_n_<supf><mode>"
5146 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5147 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5148 (match_operand:MVE_5 2 "s_register_operand" "w")
5149 (match_operand:SI 3 "mve_imm_8" "Rb")]
5153 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
5154 [(set_attr "type" "mve_move")
5158 ;; [vshrnbq_n_u, vshrnbq_n_s])
5160 (define_insn "mve_vshrnbq_n_<supf><mode>"
5162 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5163 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5164 (match_operand:MVE_5 2 "s_register_operand" "w")
5165 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5169 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5170 [(set_attr "type" "mve_move")
5174 ;; [vshrntq_n_s, vshrntq_n_u])
5176 (define_insn "mve_vshrntq_n_<supf><mode>"
5178 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5179 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5180 (match_operand:MVE_5 2 "s_register_operand" "w")
5181 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5185 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
5186 [(set_attr "type" "mve_move")
5190 ;; [vcvtmq_m_s, vcvtmq_m_u])
5192 (define_insn "mve_vcvtmq_m_<supf><mode>"
5194 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5195 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5196 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5197 (match_operand:HI 3 "vpr_register_operand" "Up")]
5200 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5201 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5202 [(set_attr "type" "mve_move")
5203 (set_attr "length""8")])
5206 ;; [vcvtpq_m_u, vcvtpq_m_s])
5208 (define_insn "mve_vcvtpq_m_<supf><mode>"
5210 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5211 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5212 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5213 (match_operand:HI 3 "vpr_register_operand" "Up")]
5216 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5217 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5218 [(set_attr "type" "mve_move")
5219 (set_attr "length""8")])
5222 ;; [vcvtnq_m_s, vcvtnq_m_u])
5224 (define_insn "mve_vcvtnq_m_<supf><mode>"
5226 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5227 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5228 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5229 (match_operand:HI 3 "vpr_register_operand" "Up")]
5232 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5233 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5234 [(set_attr "type" "mve_move")
5235 (set_attr "length""8")])
5238 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
5240 (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
5242 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5243 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5244 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5245 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5246 (match_operand:HI 4 "vpr_register_operand" "Up")]
5249 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5250 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
5251 [(set_attr "type" "mve_move")
5252 (set_attr "length""8")])
5255 ;; [vrev16q_m_u, vrev16q_m_s])
5257 (define_insn "mve_vrev16q_m_<supf>v16qi"
5259 (set (match_operand:V16QI 0 "s_register_operand" "=w")
5260 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
5261 (match_operand:V16QI 2 "s_register_operand" "w")
5262 (match_operand:HI 3 "vpr_register_operand" "Up")]
5266 "vpst\;vrev16t.8 %q0, %q2"
5267 [(set_attr "type" "mve_move")
5268 (set_attr "length""8")])
5271 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
5273 (define_insn "mve_vcvtq_m_from_f_<supf><mode>"
5275 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5276 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5277 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5278 (match_operand:HI 3 "vpr_register_operand" "Up")]
5281 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5282 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5283 [(set_attr "type" "mve_move")
5284 (set_attr "length""8")])
5287 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
5289 (define_insn "mve_vrmlaldavhq_p_<supf>v4si"
5291 (set (match_operand:DI 0 "s_register_operand" "=r")
5292 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5293 (match_operand:V4SI 2 "s_register_operand" "w")
5294 (match_operand:HI 3 "vpr_register_operand" "Up")]
5298 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
5299 [(set_attr "type" "mve_move")
5300 (set_attr "length""8")])
5303 ;; [vrmlsldavhaq_s])
5305 (define_insn "mve_vrmlsldavhaq_sv4si"
5307 (set (match_operand:DI 0 "s_register_operand" "=r")
5308 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5309 (match_operand:V4SI 2 "s_register_operand" "w")
5310 (match_operand:V4SI 3 "s_register_operand" "w")]
5314 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
5315 [(set_attr "type" "mve_move")
5319 ;; [vabavq_p_s, vabavq_p_u])
5321 (define_insn "mve_vabavq_p_<supf><mode>"
5323 (set (match_operand:SI 0 "s_register_operand" "=r")
5324 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5325 (match_operand:MVE_2 2 "s_register_operand" "w")
5326 (match_operand:MVE_2 3 "s_register_operand" "w")
5327 (match_operand:HI 4 "vpr_register_operand" "Up")]
5331 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
5332 [(set_attr "type" "mve_move")
5338 (define_insn "mve_vqshluq_m_n_s<mode>"
5340 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5341 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5342 (match_operand:MVE_2 2 "s_register_operand" "w")
5343 (match_operand:SI 3 "mve_imm_7" "Ra")
5344 (match_operand:HI 4 "vpr_register_operand" "Up")]
5348 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
5349 [(set_attr "type" "mve_move")])
5352 ;; [vshlq_m_s, vshlq_m_u])
5354 (define_insn "mve_vshlq_m_<supf><mode>"
5356 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5357 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5358 (match_operand:MVE_2 2 "s_register_operand" "w")
5359 (match_operand:MVE_2 3 "s_register_operand" "w")
5360 (match_operand:HI 4 "vpr_register_operand" "Up")]
5364 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5365 [(set_attr "type" "mve_move")])
5368 ;; [vsriq_m_n_s, vsriq_m_n_u])
5370 (define_insn "mve_vsriq_m_n_<supf><mode>"
5372 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5373 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5374 (match_operand:MVE_2 2 "s_register_operand" "w")
5375 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
5376 (match_operand:HI 4 "vpr_register_operand" "Up")]
5380 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
5381 [(set_attr "type" "mve_move")])
5384 ;; [vsubq_m_u, vsubq_m_s])
5386 (define_insn "mve_vsubq_m_<supf><mode>"
5388 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5389 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5390 (match_operand:MVE_2 2 "s_register_operand" "w")
5391 (match_operand:MVE_2 3 "s_register_operand" "w")
5392 (match_operand:HI 4 "vpr_register_operand" "Up")]
5396 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
5397 [(set_attr "type" "mve_move")])
5400 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
5402 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
5404 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5405 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5406 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5407 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5408 (match_operand:HI 4 "vpr_register_operand" "Up")]
5411 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5412 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5413 [(set_attr "type" "mve_move")
5414 (set_attr "length""8")])
5416 ;; [vabdq_m_s, vabdq_m_u])
5418 (define_insn "mve_vabdq_m_<supf><mode>"
5420 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5421 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5422 (match_operand:MVE_2 2 "s_register_operand" "w")
5423 (match_operand:MVE_2 3 "s_register_operand" "w")
5424 (match_operand:HI 4 "vpr_register_operand" "Up")]
5428 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5429 [(set_attr "type" "mve_move")
5430 (set_attr "length""8")])
5433 ;; [vaddq_m_n_s, vaddq_m_n_u])
5435 (define_insn "mve_vaddq_m_n_<supf><mode>"
5437 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5438 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5439 (match_operand:MVE_2 2 "s_register_operand" "w")
5440 (match_operand:<V_elem> 3 "s_register_operand" "r")
5441 (match_operand:HI 4 "vpr_register_operand" "Up")]
5445 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3"
5446 [(set_attr "type" "mve_move")
5447 (set_attr "length""8")])
5450 ;; [vaddq_m_u, vaddq_m_s])
5452 (define_insn "mve_vaddq_m_<supf><mode>"
5454 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5455 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5456 (match_operand:MVE_2 2 "s_register_operand" "w")
5457 (match_operand:MVE_2 3 "s_register_operand" "w")
5458 (match_operand:HI 4 "vpr_register_operand" "Up")]
5462 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3"
5463 [(set_attr "type" "mve_move")
5464 (set_attr "length""8")])
5467 ;; [vandq_m_u, vandq_m_s])
5469 (define_insn "mve_vandq_m_<supf><mode>"
5471 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5472 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5473 (match_operand:MVE_2 2 "s_register_operand" "w")
5474 (match_operand:MVE_2 3 "s_register_operand" "w")
5475 (match_operand:HI 4 "vpr_register_operand" "Up")]
5479 "vpst\;vandt %q0, %q2, %q3"
5480 [(set_attr "type" "mve_move")
5481 (set_attr "length""8")])
5484 ;; [vbicq_m_u, vbicq_m_s])
5486 (define_insn "mve_vbicq_m_<supf><mode>"
5488 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5489 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5490 (match_operand:MVE_2 2 "s_register_operand" "w")
5491 (match_operand:MVE_2 3 "s_register_operand" "w")
5492 (match_operand:HI 4 "vpr_register_operand" "Up")]
5496 "vpst\;vbict %q0, %q2, %q3"
5497 [(set_attr "type" "mve_move")
5498 (set_attr "length""8")])
5501 ;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
5503 (define_insn "mve_vbrsrq_m_n_<supf><mode>"
5505 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5506 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5507 (match_operand:MVE_2 2 "s_register_operand" "w")
5508 (match_operand:SI 3 "s_register_operand" "r")
5509 (match_operand:HI 4 "vpr_register_operand" "Up")]
5513 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
5514 [(set_attr "type" "mve_move")
5515 (set_attr "length""8")])
5518 ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
5520 (define_insn "mve_vcaddq_rot270_m_<supf><mode>"
5522 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5523 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5524 (match_operand:MVE_2 2 "s_register_operand" "w")
5525 (match_operand:MVE_2 3 "s_register_operand" "w")
5526 (match_operand:HI 4 "vpr_register_operand" "Up")]
5530 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270"
5531 [(set_attr "type" "mve_move")
5532 (set_attr "length""8")])
5535 ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
5537 (define_insn "mve_vcaddq_rot90_m_<supf><mode>"
5539 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5540 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5541 (match_operand:MVE_2 2 "s_register_operand" "w")
5542 (match_operand:MVE_2 3 "s_register_operand" "w")
5543 (match_operand:HI 4 "vpr_register_operand" "Up")]
5547 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90"
5548 [(set_attr "type" "mve_move")
5549 (set_attr "length""8")])
5552 ;; [veorq_m_s, veorq_m_u])
5554 (define_insn "mve_veorq_m_<supf><mode>"
5556 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5557 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5558 (match_operand:MVE_2 2 "s_register_operand" "w")
5559 (match_operand:MVE_2 3 "s_register_operand" "w")
5560 (match_operand:HI 4 "vpr_register_operand" "Up")]
5564 "vpst\;veort %q0, %q2, %q3"
5565 [(set_attr "type" "mve_move")
5566 (set_attr "length""8")])
5569 ;; [vhaddq_m_n_s, vhaddq_m_n_u])
5571 (define_insn "mve_vhaddq_m_n_<supf><mode>"
5573 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5574 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5575 (match_operand:MVE_2 2 "s_register_operand" "w")
5576 (match_operand:<V_elem> 3 "s_register_operand" "r")
5577 (match_operand:HI 4 "vpr_register_operand" "Up")]
5581 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5582 [(set_attr "type" "mve_move")
5583 (set_attr "length""8")])
5586 ;; [vhaddq_m_s, vhaddq_m_u])
5588 (define_insn "mve_vhaddq_m_<supf><mode>"
5590 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5591 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5592 (match_operand:MVE_2 2 "s_register_operand" "w")
5593 (match_operand:MVE_2 3 "s_register_operand" "w")
5594 (match_operand:HI 4 "vpr_register_operand" "Up")]
5598 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5599 [(set_attr "type" "mve_move")
5600 (set_attr "length""8")])
5603 ;; [vhsubq_m_n_s, vhsubq_m_n_u])
5605 (define_insn "mve_vhsubq_m_n_<supf><mode>"
5607 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5608 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5609 (match_operand:MVE_2 2 "s_register_operand" "w")
5610 (match_operand:<V_elem> 3 "s_register_operand" "r")
5611 (match_operand:HI 4 "vpr_register_operand" "Up")]
5615 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5616 [(set_attr "type" "mve_move")
5617 (set_attr "length""8")])
5620 ;; [vhsubq_m_s, vhsubq_m_u])
5622 (define_insn "mve_vhsubq_m_<supf><mode>"
5624 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5625 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5626 (match_operand:MVE_2 2 "s_register_operand" "w")
5627 (match_operand:MVE_2 3 "s_register_operand" "w")
5628 (match_operand:HI 4 "vpr_register_operand" "Up")]
5632 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5633 [(set_attr "type" "mve_move")
5634 (set_attr "length""8")])
5637 ;; [vmaxq_m_s, vmaxq_m_u])
5639 (define_insn "mve_vmaxq_m_<supf><mode>"
5641 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5642 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5643 (match_operand:MVE_2 2 "s_register_operand" "w")
5644 (match_operand:MVE_2 3 "s_register_operand" "w")
5645 (match_operand:HI 4 "vpr_register_operand" "Up")]
5649 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5650 [(set_attr "type" "mve_move")
5651 (set_attr "length""8")])
5654 ;; [vminq_m_s, vminq_m_u])
5656 (define_insn "mve_vminq_m_<supf><mode>"
5658 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5659 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5660 (match_operand:MVE_2 2 "s_register_operand" "w")
5661 (match_operand:MVE_2 3 "s_register_operand" "w")
5662 (match_operand:HI 4 "vpr_register_operand" "Up")]
5666 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5667 [(set_attr "type" "mve_move")
5668 (set_attr "length""8")])
5671 ;; [vmladavaq_p_u, vmladavaq_p_s])
5673 (define_insn "mve_vmladavaq_p_<supf><mode>"
5675 (set (match_operand:SI 0 "s_register_operand" "=Te")
5676 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5677 (match_operand:MVE_2 2 "s_register_operand" "w")
5678 (match_operand:MVE_2 3 "s_register_operand" "w")
5679 (match_operand:HI 4 "vpr_register_operand" "Up")]
5683 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3"
5684 [(set_attr "type" "mve_move")
5685 (set_attr "length""8")])
5688 ;; [vmlaq_m_n_s, vmlaq_m_n_u])
5690 (define_insn "mve_vmlaq_m_n_<supf><mode>"
5692 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5693 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5694 (match_operand:MVE_2 2 "s_register_operand" "w")
5695 (match_operand:<V_elem> 3 "s_register_operand" "r")
5696 (match_operand:HI 4 "vpr_register_operand" "Up")]
5700 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3"
5701 [(set_attr "type" "mve_move")
5702 (set_attr "length""8")])
5705 ;; [vmlasq_m_n_u, vmlasq_m_n_s])
5707 (define_insn "mve_vmlasq_m_n_<supf><mode>"
5709 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5710 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5711 (match_operand:MVE_2 2 "s_register_operand" "w")
5712 (match_operand:<V_elem> 3 "s_register_operand" "r")
5713 (match_operand:HI 4 "vpr_register_operand" "Up")]
5717 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3"
5718 [(set_attr "type" "mve_move")
5719 (set_attr "length""8")])
5722 ;; [vmulhq_m_s, vmulhq_m_u])
5724 (define_insn "mve_vmulhq_m_<supf><mode>"
5726 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5727 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5728 (match_operand:MVE_2 2 "s_register_operand" "w")
5729 (match_operand:MVE_2 3 "s_register_operand" "w")
5730 (match_operand:HI 4 "vpr_register_operand" "Up")]
5734 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5735 [(set_attr "type" "mve_move")
5736 (set_attr "length""8")])
5739 ;; [vmullbq_int_m_u, vmullbq_int_m_s])
5741 (define_insn "mve_vmullbq_int_m_<supf><mode>"
5743 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5744 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5745 (match_operand:MVE_2 2 "s_register_operand" "w")
5746 (match_operand:MVE_2 3 "s_register_operand" "w")
5747 (match_operand:HI 4 "vpr_register_operand" "Up")]
5751 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5752 [(set_attr "type" "mve_move")
5753 (set_attr "length""8")])
5756 ;; [vmulltq_int_m_s, vmulltq_int_m_u])
5758 (define_insn "mve_vmulltq_int_m_<supf><mode>"
5760 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5761 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5762 (match_operand:MVE_2 2 "s_register_operand" "w")
5763 (match_operand:MVE_2 3 "s_register_operand" "w")
5764 (match_operand:HI 4 "vpr_register_operand" "Up")]
5768 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5769 [(set_attr "type" "mve_move")
5770 (set_attr "length""8")])
5773 ;; [vmulq_m_n_u, vmulq_m_n_s])
5775 (define_insn "mve_vmulq_m_n_<supf><mode>"
5777 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5778 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5779 (match_operand:MVE_2 2 "s_register_operand" "w")
5780 (match_operand:<V_elem> 3 "s_register_operand" "r")
5781 (match_operand:HI 4 "vpr_register_operand" "Up")]
5785 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3"
5786 [(set_attr "type" "mve_move")
5787 (set_attr "length""8")])
5790 ;; [vmulq_m_s, vmulq_m_u])
5792 (define_insn "mve_vmulq_m_<supf><mode>"
5794 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5795 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5796 (match_operand:MVE_2 2 "s_register_operand" "w")
5797 (match_operand:MVE_2 3 "s_register_operand" "w")
5798 (match_operand:HI 4 "vpr_register_operand" "Up")]
5802 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3"
5803 [(set_attr "type" "mve_move")
5804 (set_attr "length""8")])
5807 ;; [vornq_m_u, vornq_m_s])
5809 (define_insn "mve_vornq_m_<supf><mode>"
5811 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5812 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5813 (match_operand:MVE_2 2 "s_register_operand" "w")
5814 (match_operand:MVE_2 3 "s_register_operand" "w")
5815 (match_operand:HI 4 "vpr_register_operand" "Up")]
5819 "vpst\;vornt %q0, %q2, %q3"
5820 [(set_attr "type" "mve_move")
5821 (set_attr "length""8")])
5824 ;; [vorrq_m_s, vorrq_m_u])
5826 (define_insn "mve_vorrq_m_<supf><mode>"
5828 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5829 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5830 (match_operand:MVE_2 2 "s_register_operand" "w")
5831 (match_operand:MVE_2 3 "s_register_operand" "w")
5832 (match_operand:HI 4 "vpr_register_operand" "Up")]
5836 "vpst\;vorrt %q0, %q2, %q3"
5837 [(set_attr "type" "mve_move")
5838 (set_attr "length""8")])
5841 ;; [vqaddq_m_n_u, vqaddq_m_n_s])
5843 (define_insn "mve_vqaddq_m_n_<supf><mode>"
5845 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5846 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5847 (match_operand:MVE_2 2 "s_register_operand" "w")
5848 (match_operand:<V_elem> 3 "s_register_operand" "r")
5849 (match_operand:HI 4 "vpr_register_operand" "Up")]
5853 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5854 [(set_attr "type" "mve_move")
5855 (set_attr "length""8")])
5858 ;; [vqaddq_m_u, vqaddq_m_s])
5860 (define_insn "mve_vqaddq_m_<supf><mode>"
5862 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5863 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5864 (match_operand:MVE_2 2 "s_register_operand" "w")
5865 (match_operand:MVE_2 3 "s_register_operand" "w")
5866 (match_operand:HI 4 "vpr_register_operand" "Up")]
5870 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5871 [(set_attr "type" "mve_move")
5872 (set_attr "length""8")])
5875 ;; [vqdmlahq_m_n_s])
5877 (define_insn "mve_vqdmlahq_m_n_s<mode>"
5879 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5880 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5881 (match_operand:MVE_2 2 "s_register_operand" "w")
5882 (match_operand:<V_elem> 3 "s_register_operand" "r")
5883 (match_operand:HI 4 "vpr_register_operand" "Up")]
5887 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5888 [(set_attr "type" "mve_move")
5889 (set_attr "length""8")])
5892 ;; [vqdmlashq_m_n_s])
5894 (define_insn "mve_vqdmlashq_m_n_s<mode>"
5896 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5897 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5898 (match_operand:MVE_2 2 "s_register_operand" "w")
5899 (match_operand:<V_elem> 3 "s_register_operand" "r")
5900 (match_operand:HI 4 "vpr_register_operand" "Up")]
5904 "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5905 [(set_attr "type" "mve_move")
5906 (set_attr "length""8")])
5909 ;; [vqrdmlahq_m_n_s])
5911 (define_insn "mve_vqrdmlahq_m_n_s<mode>"
5913 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5914 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5915 (match_operand:MVE_2 2 "s_register_operand" "w")
5916 (match_operand:<V_elem> 3 "s_register_operand" "r")
5917 (match_operand:HI 4 "vpr_register_operand" "Up")]
5921 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5922 [(set_attr "type" "mve_move")
5923 (set_attr "length""8")])
5926 ;; [vqrdmlashq_m_n_s])
5928 (define_insn "mve_vqrdmlashq_m_n_s<mode>"
5930 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5931 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5932 (match_operand:MVE_2 2 "s_register_operand" "w")
5933 (match_operand:<V_elem> 3 "s_register_operand" "r")
5934 (match_operand:HI 4 "vpr_register_operand" "Up")]
5938 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5939 [(set_attr "type" "mve_move")
5940 (set_attr "length""8")])
5943 ;; [vqrshlq_m_u, vqrshlq_m_s])
5945 (define_insn "mve_vqrshlq_m_<supf><mode>"
5947 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5948 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5949 (match_operand:MVE_2 2 "s_register_operand" "w")
5950 (match_operand:MVE_2 3 "s_register_operand" "w")
5951 (match_operand:HI 4 "vpr_register_operand" "Up")]
5955 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5956 [(set_attr "type" "mve_move")
5957 (set_attr "length""8")])
5960 ;; [vqshlq_m_n_s, vqshlq_m_n_u])
5962 (define_insn "mve_vqshlq_m_n_<supf><mode>"
5964 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5965 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5966 (match_operand:MVE_2 2 "s_register_operand" "w")
5967 (match_operand:SI 3 "immediate_operand" "i")
5968 (match_operand:HI 4 "vpr_register_operand" "Up")]
5972 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5973 [(set_attr "type" "mve_move")
5974 (set_attr "length""8")])
5977 ;; [vqshlq_m_u, vqshlq_m_s])
5979 (define_insn "mve_vqshlq_m_<supf><mode>"
5981 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5982 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5983 (match_operand:MVE_2 2 "s_register_operand" "w")
5984 (match_operand:MVE_2 3 "s_register_operand" "w")
5985 (match_operand:HI 4 "vpr_register_operand" "Up")]
5989 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5990 [(set_attr "type" "mve_move")
5991 (set_attr "length""8")])
5994 ;; [vqsubq_m_n_u, vqsubq_m_n_s])
5996 (define_insn "mve_vqsubq_m_n_<supf><mode>"
5998 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5999 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6000 (match_operand:MVE_2 2 "s_register_operand" "w")
6001 (match_operand:<V_elem> 3 "s_register_operand" "r")
6002 (match_operand:HI 4 "vpr_register_operand" "Up")]
6006 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6007 [(set_attr "type" "mve_move")
6008 (set_attr "length""8")])
6011 ;; [vqsubq_m_u, vqsubq_m_s])
6013 (define_insn "mve_vqsubq_m_<supf><mode>"
6015 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6016 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6017 (match_operand:MVE_2 2 "s_register_operand" "w")
6018 (match_operand:MVE_2 3 "s_register_operand" "w")
6019 (match_operand:HI 4 "vpr_register_operand" "Up")]
6023 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6024 [(set_attr "type" "mve_move")
6025 (set_attr "length""8")])
6028 ;; [vrhaddq_m_u, vrhaddq_m_s])
6030 (define_insn "mve_vrhaddq_m_<supf><mode>"
6032 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6033 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6034 (match_operand:MVE_2 2 "s_register_operand" "w")
6035 (match_operand:MVE_2 3 "s_register_operand" "w")
6036 (match_operand:HI 4 "vpr_register_operand" "Up")]
6040 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6041 [(set_attr "type" "mve_move")
6042 (set_attr "length""8")])
6045 ;; [vrmulhq_m_u, vrmulhq_m_s])
6047 (define_insn "mve_vrmulhq_m_<supf><mode>"
6049 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6050 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6051 (match_operand:MVE_2 2 "s_register_operand" "w")
6052 (match_operand:MVE_2 3 "s_register_operand" "w")
6053 (match_operand:HI 4 "vpr_register_operand" "Up")]
6057 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6058 [(set_attr "type" "mve_move")
6059 (set_attr "length""8")])
6062 ;; [vrshlq_m_s, vrshlq_m_u])
6064 (define_insn "mve_vrshlq_m_<supf><mode>"
6066 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6067 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6068 (match_operand:MVE_2 2 "s_register_operand" "w")
6069 (match_operand:MVE_2 3 "s_register_operand" "w")
6070 (match_operand:HI 4 "vpr_register_operand" "Up")]
6074 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6075 [(set_attr "type" "mve_move")
6076 (set_attr "length""8")])
6079 ;; [vrshrq_m_n_s, vrshrq_m_n_u])
6081 (define_insn "mve_vrshrq_m_n_<supf><mode>"
6083 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6084 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6085 (match_operand:MVE_2 2 "s_register_operand" "w")
6086 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6087 (match_operand:HI 4 "vpr_register_operand" "Up")]
6091 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6092 [(set_attr "type" "mve_move")
6093 (set_attr "length""8")])
6096 ;; [vshlq_m_n_s, vshlq_m_n_u])
6098 (define_insn "mve_vshlq_m_n_<supf><mode>"
6100 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6101 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6102 (match_operand:MVE_2 2 "s_register_operand" "w")
6103 (match_operand:SI 3 "immediate_operand" "i")
6104 (match_operand:HI 4 "vpr_register_operand" "Up")]
6108 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6109 [(set_attr "type" "mve_move")
6110 (set_attr "length""8")])
6113 ;; [vshrq_m_n_s, vshrq_m_n_u])
6115 (define_insn "mve_vshrq_m_n_<supf><mode>"
6117 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6118 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6119 (match_operand:MVE_2 2 "s_register_operand" "w")
6120 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6121 (match_operand:HI 4 "vpr_register_operand" "Up")]
6125 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6126 [(set_attr "type" "mve_move")
6127 (set_attr "length""8")])
6130 ;; [vsliq_m_n_u, vsliq_m_n_s])
6132 (define_insn "mve_vsliq_m_n_<supf><mode>"
6134 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6135 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6136 (match_operand:MVE_2 2 "s_register_operand" "w")
6137 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
6138 (match_operand:HI 4 "vpr_register_operand" "Up")]
6142 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
6143 [(set_attr "type" "mve_move")
6144 (set_attr "length""8")])
6147 ;; [vsubq_m_n_s, vsubq_m_n_u])
6149 (define_insn "mve_vsubq_m_n_<supf><mode>"
6151 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6152 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6153 (match_operand:MVE_2 2 "s_register_operand" "w")
6154 (match_operand:<V_elem> 3 "s_register_operand" "r")
6155 (match_operand:HI 4 "vpr_register_operand" "Up")]
6159 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
6160 [(set_attr "type" "mve_move")
6161 (set_attr "length""8")])
6164 ;; [vhcaddq_rot270_m_s])
6166 (define_insn "mve_vhcaddq_rot270_m_s<mode>"
6168 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6169 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6170 (match_operand:MVE_2 2 "s_register_operand" "w")
6171 (match_operand:MVE_2 3 "s_register_operand" "w")
6172 (match_operand:HI 4 "vpr_register_operand" "Up")]
6173 VHCADDQ_ROT270_M_S))
6176 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
6177 [(set_attr "type" "mve_move")
6178 (set_attr "length""8")])
6181 ;; [vhcaddq_rot90_m_s])
6183 (define_insn "mve_vhcaddq_rot90_m_s<mode>"
6185 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6186 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6187 (match_operand:MVE_2 2 "s_register_operand" "w")
6188 (match_operand:MVE_2 3 "s_register_operand" "w")
6189 (match_operand:HI 4 "vpr_register_operand" "Up")]
6193 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
6194 [(set_attr "type" "mve_move")
6195 (set_attr "length""8")])
6198 ;; [vmladavaxq_p_s])
6200 (define_insn "mve_vmladavaxq_p_s<mode>"
6202 (set (match_operand:SI 0 "s_register_operand" "=Te")
6203 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6204 (match_operand:MVE_2 2 "s_register_operand" "w")
6205 (match_operand:MVE_2 3 "s_register_operand" "w")
6206 (match_operand:HI 4 "vpr_register_operand" "Up")]
6210 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6211 [(set_attr "type" "mve_move")
6212 (set_attr "length""8")])
6217 (define_insn "mve_vmlsdavaq_p_s<mode>"
6219 (set (match_operand:SI 0 "s_register_operand" "=Te")
6220 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6221 (match_operand:MVE_2 2 "s_register_operand" "w")
6222 (match_operand:MVE_2 3 "s_register_operand" "w")
6223 (match_operand:HI 4 "vpr_register_operand" "Up")]
6227 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
6228 [(set_attr "type" "mve_move")
6229 (set_attr "length""8")])
6232 ;; [vmlsdavaxq_p_s])
6234 (define_insn "mve_vmlsdavaxq_p_s<mode>"
6236 (set (match_operand:SI 0 "s_register_operand" "=Te")
6237 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6238 (match_operand:MVE_2 2 "s_register_operand" "w")
6239 (match_operand:MVE_2 3 "s_register_operand" "w")
6240 (match_operand:HI 4 "vpr_register_operand" "Up")]
6244 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6245 [(set_attr "type" "mve_move")
6246 (set_attr "length""8")])
6251 (define_insn "mve_vqdmladhq_m_s<mode>"
6253 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6254 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6255 (match_operand:MVE_2 2 "s_register_operand" "w")
6256 (match_operand:MVE_2 3 "s_register_operand" "w")
6257 (match_operand:HI 4 "vpr_register_operand" "Up")]
6261 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6262 [(set_attr "type" "mve_move")
6263 (set_attr "length""8")])
6266 ;; [vqdmladhxq_m_s])
6268 (define_insn "mve_vqdmladhxq_m_s<mode>"
6270 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6271 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6272 (match_operand:MVE_2 2 "s_register_operand" "w")
6273 (match_operand:MVE_2 3 "s_register_operand" "w")
6274 (match_operand:HI 4 "vpr_register_operand" "Up")]
6278 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6279 [(set_attr "type" "mve_move")
6280 (set_attr "length""8")])
6285 (define_insn "mve_vqdmlsdhq_m_s<mode>"
6287 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6288 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6289 (match_operand:MVE_2 2 "s_register_operand" "w")
6290 (match_operand:MVE_2 3 "s_register_operand" "w")
6291 (match_operand:HI 4 "vpr_register_operand" "Up")]
6295 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6296 [(set_attr "type" "mve_move")
6297 (set_attr "length""8")])
6300 ;; [vqdmlsdhxq_m_s])
6302 (define_insn "mve_vqdmlsdhxq_m_s<mode>"
6304 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6305 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6306 (match_operand:MVE_2 2 "s_register_operand" "w")
6307 (match_operand:MVE_2 3 "s_register_operand" "w")
6308 (match_operand:HI 4 "vpr_register_operand" "Up")]
6312 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6313 [(set_attr "type" "mve_move")
6314 (set_attr "length""8")])
6317 ;; [vqdmulhq_m_n_s])
6319 (define_insn "mve_vqdmulhq_m_n_s<mode>"
6321 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6322 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6323 (match_operand:MVE_2 2 "s_register_operand" "w")
6324 (match_operand:<V_elem> 3 "s_register_operand" "r")
6325 (match_operand:HI 4 "vpr_register_operand" "Up")]
6329 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6330 [(set_attr "type" "mve_move")
6331 (set_attr "length""8")])
6336 (define_insn "mve_vqdmulhq_m_s<mode>"
6338 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6339 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6340 (match_operand:MVE_2 2 "s_register_operand" "w")
6341 (match_operand:MVE_2 3 "s_register_operand" "w")
6342 (match_operand:HI 4 "vpr_register_operand" "Up")]
6346 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6347 [(set_attr "type" "mve_move")
6348 (set_attr "length""8")])
6351 ;; [vqrdmladhq_m_s])
6353 (define_insn "mve_vqrdmladhq_m_s<mode>"
6355 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6356 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6357 (match_operand:MVE_2 2 "s_register_operand" "w")
6358 (match_operand:MVE_2 3 "s_register_operand" "w")
6359 (match_operand:HI 4 "vpr_register_operand" "Up")]
6363 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6364 [(set_attr "type" "mve_move")
6365 (set_attr "length""8")])
6368 ;; [vqrdmladhxq_m_s])
6370 (define_insn "mve_vqrdmladhxq_m_s<mode>"
6372 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6373 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6374 (match_operand:MVE_2 2 "s_register_operand" "w")
6375 (match_operand:MVE_2 3 "s_register_operand" "w")
6376 (match_operand:HI 4 "vpr_register_operand" "Up")]
6380 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6381 [(set_attr "type" "mve_move")
6382 (set_attr "length""8")])
6385 ;; [vqrdmlsdhq_m_s])
6387 (define_insn "mve_vqrdmlsdhq_m_s<mode>"
6389 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6390 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6391 (match_operand:MVE_2 2 "s_register_operand" "w")
6392 (match_operand:MVE_2 3 "s_register_operand" "w")
6393 (match_operand:HI 4 "vpr_register_operand" "Up")]
6397 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6398 [(set_attr "type" "mve_move")
6399 (set_attr "length""8")])
6402 ;; [vqrdmlsdhxq_m_s])
6404 (define_insn "mve_vqrdmlsdhxq_m_s<mode>"
6406 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6407 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6408 (match_operand:MVE_2 2 "s_register_operand" "w")
6409 (match_operand:MVE_2 3 "s_register_operand" "w")
6410 (match_operand:HI 4 "vpr_register_operand" "Up")]
6414 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6415 [(set_attr "type" "mve_move")
6416 (set_attr "length""8")])
6419 ;; [vqrdmulhq_m_n_s])
6421 (define_insn "mve_vqrdmulhq_m_n_s<mode>"
6423 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6424 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6425 (match_operand:MVE_2 2 "s_register_operand" "w")
6426 (match_operand:<V_elem> 3 "s_register_operand" "r")
6427 (match_operand:HI 4 "vpr_register_operand" "Up")]
6431 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6432 [(set_attr "type" "mve_move")
6433 (set_attr "length""8")])
6438 (define_insn "mve_vqrdmulhq_m_s<mode>"
6440 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6441 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6442 (match_operand:MVE_2 2 "s_register_operand" "w")
6443 (match_operand:MVE_2 3 "s_register_operand" "w")
6444 (match_operand:HI 4 "vpr_register_operand" "Up")]
6448 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6449 [(set_attr "type" "mve_move")
6450 (set_attr "length""8")])
6453 ;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
6455 (define_insn "mve_vmlaldavaq_p_<supf><mode>"
6457 (set (match_operand:DI 0 "s_register_operand" "=r")
6458 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6459 (match_operand:MVE_5 2 "s_register_operand" "w")
6460 (match_operand:MVE_5 3 "s_register_operand" "w")
6461 (match_operand:HI 4 "vpr_register_operand" "Up")]
6465 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6466 [(set_attr "type" "mve_move")
6467 (set_attr "length""8")])
6470 ;; [vmlaldavaxq_p_s])
6472 (define_insn "mve_vmlaldavaxq_p_<supf><mode>"
6474 (set (match_operand:DI 0 "s_register_operand" "=r")
6475 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6476 (match_operand:MVE_5 2 "s_register_operand" "w")
6477 (match_operand:MVE_5 3 "s_register_operand" "w")
6478 (match_operand:HI 4 "vpr_register_operand" "Up")]
6482 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6483 [(set_attr "type" "mve_move")
6484 (set_attr "length""8")])
6487 ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
6489 (define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
6491 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6492 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6493 (match_operand:MVE_5 2 "s_register_operand" "w")
6494 (match_operand:SI 3 "mve_imm_8" "Rb")
6495 (match_operand:HI 4 "vpr_register_operand" "Up")]
6499 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6500 [(set_attr "type" "mve_move")
6501 (set_attr "length""8")])
6504 ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
6506 (define_insn "mve_vqrshrntq_m_n_<supf><mode>"
6508 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6509 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6510 (match_operand:MVE_5 2 "s_register_operand" "w")
6511 (match_operand:SI 3 "mve_imm_8" "Rb")
6512 (match_operand:HI 4 "vpr_register_operand" "Up")]
6516 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6517 [(set_attr "type" "mve_move")
6518 (set_attr "length""8")])
6521 ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
6523 (define_insn "mve_vqshrnbq_m_n_<supf><mode>"
6525 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6526 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6527 (match_operand:MVE_5 2 "s_register_operand" "w")
6528 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6529 (match_operand:HI 4 "vpr_register_operand" "Up")]
6533 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6534 [(set_attr "type" "mve_move")
6535 (set_attr "length""8")])
6538 ;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
6540 (define_insn "mve_vqshrntq_m_n_<supf><mode>"
6542 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6543 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6544 (match_operand:MVE_5 2 "s_register_operand" "w")
6545 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6546 (match_operand:HI 4 "vpr_register_operand" "Up")]
6550 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6551 [(set_attr "type" "mve_move")
6552 (set_attr "length""8")])
6555 ;; [vrmlaldavhaq_p_s])
6557 (define_insn "mve_vrmlaldavhaq_p_sv4si"
6559 (set (match_operand:DI 0 "s_register_operand" "=r")
6560 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6561 (match_operand:V4SI 2 "s_register_operand" "w")
6562 (match_operand:V4SI 3 "s_register_operand" "w")
6563 (match_operand:HI 4 "vpr_register_operand" "Up")]
6567 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
6568 [(set_attr "type" "mve_move")
6569 (set_attr "length""8")])
6572 ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
6574 (define_insn "mve_vrshrnbq_m_n_<supf><mode>"
6576 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6577 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6578 (match_operand:MVE_5 2 "s_register_operand" "w")
6579 (match_operand:SI 3 "mve_imm_8" "Rb")
6580 (match_operand:HI 4 "vpr_register_operand" "Up")]
6584 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6585 [(set_attr "type" "mve_move")
6586 (set_attr "length""8")])
6589 ;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
6591 (define_insn "mve_vrshrntq_m_n_<supf><mode>"
6593 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6594 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6595 (match_operand:MVE_5 2 "s_register_operand" "w")
6596 (match_operand:SI 3 "mve_imm_8" "Rb")
6597 (match_operand:HI 4 "vpr_register_operand" "Up")]
6601 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6602 [(set_attr "type" "mve_move")
6603 (set_attr "length""8")])
6606 ;; [vshllbq_m_n_u, vshllbq_m_n_s])
6608 (define_insn "mve_vshllbq_m_n_<supf><mode>"
6610 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6611 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6612 (match_operand:MVE_3 2 "s_register_operand" "w")
6613 (match_operand:SI 3 "immediate_operand" "i")
6614 (match_operand:HI 4 "vpr_register_operand" "Up")]
6618 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6619 [(set_attr "type" "mve_move")
6620 (set_attr "length""8")])
6623 ;; [vshlltq_m_n_u, vshlltq_m_n_s])
6625 (define_insn "mve_vshlltq_m_n_<supf><mode>"
6627 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6628 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6629 (match_operand:MVE_3 2 "s_register_operand" "w")
6630 (match_operand:SI 3 "immediate_operand" "i")
6631 (match_operand:HI 4 "vpr_register_operand" "Up")]
6635 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6636 [(set_attr "type" "mve_move")
6637 (set_attr "length""8")])
6640 ;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
6642 (define_insn "mve_vshrnbq_m_n_<supf><mode>"
6644 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6645 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6646 (match_operand:MVE_5 2 "s_register_operand" "w")
6647 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6648 (match_operand:HI 4 "vpr_register_operand" "Up")]
6652 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6653 [(set_attr "type" "mve_move")
6654 (set_attr "length""8")])
6657 ;; [vshrntq_m_n_s, vshrntq_m_n_u])
6659 (define_insn "mve_vshrntq_m_n_<supf><mode>"
6661 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6662 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6663 (match_operand:MVE_5 2 "s_register_operand" "w")
6664 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6665 (match_operand:HI 4 "vpr_register_operand" "Up")]
6669 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6670 [(set_attr "type" "mve_move")
6671 (set_attr "length""8")])
6674 ;; [vmlsldavaq_p_s])
6676 (define_insn "mve_vmlsldavaq_p_s<mode>"
6678 (set (match_operand:DI 0 "s_register_operand" "=r")
6679 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6680 (match_operand:MVE_5 2 "s_register_operand" "w")
6681 (match_operand:MVE_5 3 "s_register_operand" "w")
6682 (match_operand:HI 4 "vpr_register_operand" "Up")]
6686 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6687 [(set_attr "type" "mve_move")
6688 (set_attr "length""8")])
6691 ;; [vmlsldavaxq_p_s])
6693 (define_insn "mve_vmlsldavaxq_p_s<mode>"
6695 (set (match_operand:DI 0 "s_register_operand" "=r")
6696 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6697 (match_operand:MVE_5 2 "s_register_operand" "w")
6698 (match_operand:MVE_5 3 "s_register_operand" "w")
6699 (match_operand:HI 4 "vpr_register_operand" "Up")]
6703 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6704 [(set_attr "type" "mve_move")
6705 (set_attr "length""8")])
6708 ;; [vmullbq_poly_m_p])
6710 (define_insn "mve_vmullbq_poly_m_p<mode>"
6712 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6713 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6714 (match_operand:MVE_3 2 "s_register_operand" "w")
6715 (match_operand:MVE_3 3 "s_register_operand" "w")
6716 (match_operand:HI 4 "vpr_register_operand" "Up")]
6720 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6721 [(set_attr "type" "mve_move")
6722 (set_attr "length""8")])
6725 ;; [vmulltq_poly_m_p])
6727 (define_insn "mve_vmulltq_poly_m_p<mode>"
6729 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6730 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6731 (match_operand:MVE_3 2 "s_register_operand" "w")
6732 (match_operand:MVE_3 3 "s_register_operand" "w")
6733 (match_operand:HI 4 "vpr_register_operand" "Up")]
6737 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6738 [(set_attr "type" "mve_move")
6739 (set_attr "length""8")])
6742 ;; [vqdmullbq_m_n_s])
6744 (define_insn "mve_vqdmullbq_m_n_s<mode>"
6746 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6747 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6748 (match_operand:MVE_5 2 "s_register_operand" "w")
6749 (match_operand:<V_elem> 3 "s_register_operand" "r")
6750 (match_operand:HI 4 "vpr_register_operand" "Up")]
6754 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6755 [(set_attr "type" "mve_move")
6756 (set_attr "length""8")])
6761 (define_insn "mve_vqdmullbq_m_s<mode>"
6763 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6764 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6765 (match_operand:MVE_5 2 "s_register_operand" "w")
6766 (match_operand:MVE_5 3 "s_register_operand" "w")
6767 (match_operand:HI 4 "vpr_register_operand" "Up")]
6771 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6772 [(set_attr "type" "mve_move")
6773 (set_attr "length""8")])
6776 ;; [vqdmulltq_m_n_s])
6778 (define_insn "mve_vqdmulltq_m_n_s<mode>"
6780 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6781 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6782 (match_operand:MVE_5 2 "s_register_operand" "w")
6783 (match_operand:<V_elem> 3 "s_register_operand" "r")
6784 (match_operand:HI 4 "vpr_register_operand" "Up")]
6788 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
6789 [(set_attr "type" "mve_move")
6790 (set_attr "length""8")])
6795 (define_insn "mve_vqdmulltq_m_s<mode>"
6797 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6798 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6799 (match_operand:MVE_5 2 "s_register_operand" "w")
6800 (match_operand:MVE_5 3 "s_register_operand" "w")
6801 (match_operand:HI 4 "vpr_register_operand" "Up")]
6805 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6806 [(set_attr "type" "mve_move")
6807 (set_attr "length""8")])
6810 ;; [vqrshrunbq_m_n_s])
6812 (define_insn "mve_vqrshrunbq_m_n_s<mode>"
6814 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6815 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6816 (match_operand:MVE_5 2 "s_register_operand" "w")
6817 (match_operand:SI 3 "mve_imm_8" "Rb")
6818 (match_operand:HI 4 "vpr_register_operand" "Up")]
6822 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6823 [(set_attr "type" "mve_move")
6824 (set_attr "length""8")])
6827 ;; [vqrshruntq_m_n_s])
6829 (define_insn "mve_vqrshruntq_m_n_s<mode>"
6831 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6832 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6833 (match_operand:MVE_5 2 "s_register_operand" "w")
6834 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6835 (match_operand:HI 4 "vpr_register_operand" "Up")]
6839 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6840 [(set_attr "type" "mve_move")
6841 (set_attr "length""8")])
6844 ;; [vqshrunbq_m_n_s])
6846 (define_insn "mve_vqshrunbq_m_n_s<mode>"
6848 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6849 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6850 (match_operand:MVE_5 2 "s_register_operand" "w")
6851 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6852 (match_operand:HI 4 "vpr_register_operand" "Up")]
6856 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6857 [(set_attr "type" "mve_move")
6858 (set_attr "length""8")])
6861 ;; [vqshruntq_m_n_s])
6863 (define_insn "mve_vqshruntq_m_n_s<mode>"
6865 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6866 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6867 (match_operand:MVE_5 2 "s_register_operand" "w")
6868 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6869 (match_operand:HI 4 "vpr_register_operand" "Up")]
6873 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6874 [(set_attr "type" "mve_move")
6875 (set_attr "length""8")])
6878 ;; [vrmlaldavhaq_p_u])
6880 (define_insn "mve_vrmlaldavhaq_p_uv4si"
6882 (set (match_operand:DI 0 "s_register_operand" "=r")
6883 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6884 (match_operand:V4SI 2 "s_register_operand" "w")
6885 (match_operand:V4SI 3 "s_register_operand" "w")
6886 (match_operand:HI 4 "vpr_register_operand" "Up")]
6890 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
6891 [(set_attr "type" "mve_move")
6892 (set_attr "length""8")])
6895 ;; [vrmlaldavhaxq_p_s])
6897 (define_insn "mve_vrmlaldavhaxq_p_sv4si"
6899 (set (match_operand:DI 0 "s_register_operand" "=r")
6900 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6901 (match_operand:V4SI 2 "s_register_operand" "w")
6902 (match_operand:V4SI 3 "s_register_operand" "w")
6903 (match_operand:HI 4 "vpr_register_operand" "Up")]
6907 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6908 [(set_attr "type" "mve_move")
6909 (set_attr "length""8")])
6912 ;; [vrmlsldavhaq_p_s])
6914 (define_insn "mve_vrmlsldavhaq_p_sv4si"
6916 (set (match_operand:DI 0 "s_register_operand" "=r")
6917 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6918 (match_operand:V4SI 2 "s_register_operand" "w")
6919 (match_operand:V4SI 3 "s_register_operand" "w")
6920 (match_operand:HI 4 "vpr_register_operand" "Up")]
6924 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
6925 [(set_attr "type" "mve_move")
6926 (set_attr "length""8")])
6929 ;; [vrmlsldavhaxq_p_s])
6931 (define_insn "mve_vrmlsldavhaxq_p_sv4si"
6933 (set (match_operand:DI 0 "s_register_operand" "=r")
6934 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6935 (match_operand:V4SI 2 "s_register_operand" "w")
6936 (match_operand:V4SI 3 "s_register_operand" "w")
6937 (match_operand:HI 4 "vpr_register_operand" "Up")]
6941 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6942 [(set_attr "type" "mve_move")
6943 (set_attr "length""8")])
6947 (define_insn "mve_vabdq_m_f<mode>"
6949 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6950 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6951 (match_operand:MVE_0 2 "s_register_operand" "w")
6952 (match_operand:MVE_0 3 "s_register_operand" "w")
6953 (match_operand:HI 4 "vpr_register_operand" "Up")]
6956 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6957 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3"
6958 [(set_attr "type" "mve_move")
6959 (set_attr "length""8")])
6964 (define_insn "mve_vaddq_m_f<mode>"
6966 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6967 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6968 (match_operand:MVE_0 2 "s_register_operand" "w")
6969 (match_operand:MVE_0 3 "s_register_operand" "w")
6970 (match_operand:HI 4 "vpr_register_operand" "Up")]
6973 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6974 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3"
6975 [(set_attr "type" "mve_move")
6976 (set_attr "length""8")])
6981 (define_insn "mve_vaddq_m_n_f<mode>"
6983 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6984 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6985 (match_operand:MVE_0 2 "s_register_operand" "w")
6986 (match_operand:<V_elem> 3 "s_register_operand" "r")
6987 (match_operand:HI 4 "vpr_register_operand" "Up")]
6990 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6991 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3"
6992 [(set_attr "type" "mve_move")
6993 (set_attr "length""8")])
6998 (define_insn "mve_vandq_m_f<mode>"
7000 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7001 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7002 (match_operand:MVE_0 2 "s_register_operand" "w")
7003 (match_operand:MVE_0 3 "s_register_operand" "w")
7004 (match_operand:HI 4 "vpr_register_operand" "Up")]
7007 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7008 "vpst\;vandt %q0, %q2, %q3"
7009 [(set_attr "type" "mve_move")
7010 (set_attr "length""8")])
7015 (define_insn "mve_vbicq_m_f<mode>"
7017 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7018 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7019 (match_operand:MVE_0 2 "s_register_operand" "w")
7020 (match_operand:MVE_0 3 "s_register_operand" "w")
7021 (match_operand:HI 4 "vpr_register_operand" "Up")]
7024 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7025 "vpst\;vbict %q0, %q2, %q3"
7026 [(set_attr "type" "mve_move")
7027 (set_attr "length""8")])
7032 (define_insn "mve_vbrsrq_m_n_f<mode>"
7034 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7035 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7036 (match_operand:MVE_0 2 "s_register_operand" "w")
7037 (match_operand:SI 3 "s_register_operand" "r")
7038 (match_operand:HI 4 "vpr_register_operand" "Up")]
7041 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7042 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
7043 [(set_attr "type" "mve_move")
7044 (set_attr "length""8")])
7047 ;; [vcaddq_rot270_m_f])
7049 (define_insn "mve_vcaddq_rot270_m_f<mode>"
7051 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7052 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7053 (match_operand:MVE_0 2 "s_register_operand" "w")
7054 (match_operand:MVE_0 3 "s_register_operand" "w")
7055 (match_operand:HI 4 "vpr_register_operand" "Up")]
7058 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7059 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7060 [(set_attr "type" "mve_move")
7061 (set_attr "length""8")])
7064 ;; [vcaddq_rot90_m_f])
7066 (define_insn "mve_vcaddq_rot90_m_f<mode>"
7068 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7069 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7070 (match_operand:MVE_0 2 "s_register_operand" "w")
7071 (match_operand:MVE_0 3 "s_register_operand" "w")
7072 (match_operand:HI 4 "vpr_register_operand" "Up")]
7075 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7076 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7077 [(set_attr "type" "mve_move")
7078 (set_attr "length""8")])
7083 (define_insn "mve_vcmlaq_m_f<mode>"
7085 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7086 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7087 (match_operand:MVE_0 2 "s_register_operand" "w")
7088 (match_operand:MVE_0 3 "s_register_operand" "w")
7089 (match_operand:HI 4 "vpr_register_operand" "Up")]
7092 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7093 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7094 [(set_attr "type" "mve_move")
7095 (set_attr "length""8")])
7098 ;; [vcmlaq_rot180_m_f])
7100 (define_insn "mve_vcmlaq_rot180_m_f<mode>"
7102 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7103 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7104 (match_operand:MVE_0 2 "s_register_operand" "w")
7105 (match_operand:MVE_0 3 "s_register_operand" "w")
7106 (match_operand:HI 4 "vpr_register_operand" "Up")]
7109 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7110 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7111 [(set_attr "type" "mve_move")
7112 (set_attr "length""8")])
7115 ;; [vcmlaq_rot270_m_f])
7117 (define_insn "mve_vcmlaq_rot270_m_f<mode>"
7119 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7120 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7121 (match_operand:MVE_0 2 "s_register_operand" "w")
7122 (match_operand:MVE_0 3 "s_register_operand" "w")
7123 (match_operand:HI 4 "vpr_register_operand" "Up")]
7126 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7127 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7128 [(set_attr "type" "mve_move")
7129 (set_attr "length""8")])
7132 ;; [vcmlaq_rot90_m_f])
7134 (define_insn "mve_vcmlaq_rot90_m_f<mode>"
7136 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7137 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7138 (match_operand:MVE_0 2 "s_register_operand" "w")
7139 (match_operand:MVE_0 3 "s_register_operand" "w")
7140 (match_operand:HI 4 "vpr_register_operand" "Up")]
7143 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7144 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7145 [(set_attr "type" "mve_move")
7146 (set_attr "length""8")])
7151 (define_insn "mve_vcmulq_m_f<mode>"
7153 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7154 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7155 (match_operand:MVE_0 2 "s_register_operand" "w")
7156 (match_operand:MVE_0 3 "s_register_operand" "w")
7157 (match_operand:HI 4 "vpr_register_operand" "Up")]
7160 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7161 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7162 [(set_attr "type" "mve_move")
7163 (set_attr "length""8")])
7166 ;; [vcmulq_rot180_m_f])
7168 (define_insn "mve_vcmulq_rot180_m_f<mode>"
7170 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7171 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7172 (match_operand:MVE_0 2 "s_register_operand" "w")
7173 (match_operand:MVE_0 3 "s_register_operand" "w")
7174 (match_operand:HI 4 "vpr_register_operand" "Up")]
7177 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7178 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7179 [(set_attr "type" "mve_move")
7180 (set_attr "length""8")])
7183 ;; [vcmulq_rot270_m_f])
7185 (define_insn "mve_vcmulq_rot270_m_f<mode>"
7187 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7188 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7189 (match_operand:MVE_0 2 "s_register_operand" "w")
7190 (match_operand:MVE_0 3 "s_register_operand" "w")
7191 (match_operand:HI 4 "vpr_register_operand" "Up")]
7194 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7195 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7196 [(set_attr "type" "mve_move")
7197 (set_attr "length""8")])
7200 ;; [vcmulq_rot90_m_f])
7202 (define_insn "mve_vcmulq_rot90_m_f<mode>"
7204 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7205 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7206 (match_operand:MVE_0 2 "s_register_operand" "w")
7207 (match_operand:MVE_0 3 "s_register_operand" "w")
7208 (match_operand:HI 4 "vpr_register_operand" "Up")]
7211 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7212 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7213 [(set_attr "type" "mve_move")
7214 (set_attr "length""8")])
7219 (define_insn "mve_veorq_m_f<mode>"
7221 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7222 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7223 (match_operand:MVE_0 2 "s_register_operand" "w")
7224 (match_operand:MVE_0 3 "s_register_operand" "w")
7225 (match_operand:HI 4 "vpr_register_operand" "Up")]
7228 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7229 "vpst\;veort %q0, %q2, %q3"
7230 [(set_attr "type" "mve_move")
7231 (set_attr "length""8")])
7236 (define_insn "mve_vfmaq_m_f<mode>"
7238 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7239 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7240 (match_operand:MVE_0 2 "s_register_operand" "w")
7241 (match_operand:MVE_0 3 "s_register_operand" "w")
7242 (match_operand:HI 4 "vpr_register_operand" "Up")]
7245 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7246 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3"
7247 [(set_attr "type" "mve_move")
7248 (set_attr "length""8")])
7253 (define_insn "mve_vfmaq_m_n_f<mode>"
7255 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7256 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7257 (match_operand:MVE_0 2 "s_register_operand" "w")
7258 (match_operand:<V_elem> 3 "s_register_operand" "r")
7259 (match_operand:HI 4 "vpr_register_operand" "Up")]
7262 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7263 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3"
7264 [(set_attr "type" "mve_move")
7265 (set_attr "length""8")])
7270 (define_insn "mve_vfmasq_m_n_f<mode>"
7272 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7273 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7274 (match_operand:MVE_0 2 "s_register_operand" "w")
7275 (match_operand:<V_elem> 3 "s_register_operand" "r")
7276 (match_operand:HI 4 "vpr_register_operand" "Up")]
7279 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7280 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3"
7281 [(set_attr "type" "mve_move")
7282 (set_attr "length""8")])
7287 (define_insn "mve_vfmsq_m_f<mode>"
7289 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7290 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7291 (match_operand:MVE_0 2 "s_register_operand" "w")
7292 (match_operand:MVE_0 3 "s_register_operand" "w")
7293 (match_operand:HI 4 "vpr_register_operand" "Up")]
7296 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7297 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3"
7298 [(set_attr "type" "mve_move")
7299 (set_attr "length""8")])
7304 (define_insn "mve_vmaxnmq_m_f<mode>"
7306 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7307 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7308 (match_operand:MVE_0 2 "s_register_operand" "w")
7309 (match_operand:MVE_0 3 "s_register_operand" "w")
7310 (match_operand:HI 4 "vpr_register_operand" "Up")]
7313 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7314 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7315 [(set_attr "type" "mve_move")
7316 (set_attr "length""8")])
7321 (define_insn "mve_vminnmq_m_f<mode>"
7323 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7324 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7325 (match_operand:MVE_0 2 "s_register_operand" "w")
7326 (match_operand:MVE_0 3 "s_register_operand" "w")
7327 (match_operand:HI 4 "vpr_register_operand" "Up")]
7330 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7331 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7332 [(set_attr "type" "mve_move")
7333 (set_attr "length""8")])
7338 (define_insn "mve_vmulq_m_f<mode>"
7340 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7341 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7342 (match_operand:MVE_0 2 "s_register_operand" "w")
7343 (match_operand:MVE_0 3 "s_register_operand" "w")
7344 (match_operand:HI 4 "vpr_register_operand" "Up")]
7347 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7348 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3"
7349 [(set_attr "type" "mve_move")
7350 (set_attr "length""8")])
7355 (define_insn "mve_vmulq_m_n_f<mode>"
7357 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7358 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7359 (match_operand:MVE_0 2 "s_register_operand" "w")
7360 (match_operand:<V_elem> 3 "s_register_operand" "r")
7361 (match_operand:HI 4 "vpr_register_operand" "Up")]
7364 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7365 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3"
7366 [(set_attr "type" "mve_move")
7367 (set_attr "length""8")])
7372 (define_insn "mve_vornq_m_f<mode>"
7374 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7375 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7376 (match_operand:MVE_0 2 "s_register_operand" "w")
7377 (match_operand:MVE_0 3 "s_register_operand" "w")
7378 (match_operand:HI 4 "vpr_register_operand" "Up")]
7381 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7382 "vpst\;vornt %q0, %q2, %q3"
7383 [(set_attr "type" "mve_move")
7384 (set_attr "length""8")])
7389 (define_insn "mve_vorrq_m_f<mode>"
7391 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7392 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7393 (match_operand:MVE_0 2 "s_register_operand" "w")
7394 (match_operand:MVE_0 3 "s_register_operand" "w")
7395 (match_operand:HI 4 "vpr_register_operand" "Up")]
7398 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7399 "vpst\;vorrt %q0, %q2, %q3"
7400 [(set_attr "type" "mve_move")
7401 (set_attr "length""8")])
7406 (define_insn "mve_vsubq_m_f<mode>"
7408 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7409 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7410 (match_operand:MVE_0 2 "s_register_operand" "w")
7411 (match_operand:MVE_0 3 "s_register_operand" "w")
7412 (match_operand:HI 4 "vpr_register_operand" "Up")]
7415 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7416 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
7417 [(set_attr "type" "mve_move")
7418 (set_attr "length""8")])
7423 (define_insn "mve_vsubq_m_n_f<mode>"
7425 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7426 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7427 (match_operand:MVE_0 2 "s_register_operand" "w")
7428 (match_operand:<V_elem> 3 "s_register_operand" "r")
7429 (match_operand:HI 4 "vpr_register_operand" "Up")]
7432 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7433 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
7434 [(set_attr "type" "mve_move")
7435 (set_attr "length""8")])
7438 ;; [vstrbq_s vstrbq_u]
7440 (define_insn "mve_vstrbq_<supf><mode>"
7441 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7442 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
7448 int regno = REGNO (operands[1]);
7449 ops[1] = gen_rtx_REG (TImode, regno);
7450 ops[0] = operands[0];
7451 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
7454 [(set_attr "length" "4")])
7457 ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
7459 (define_expand "mve_vstrbq_scatter_offset_<supf><mode>"
7460 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7461 (match_operand:MVE_2 1 "s_register_operand")
7462 (match_operand:MVE_2 2 "s_register_operand")
7463 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7466 rtx ind = XEXP (operands[0], 0);
7467 gcc_assert (REG_P (ind));
7468 emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1],
7473 (define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn"
7474 [(set (mem:BLK (scratch))
7476 [(match_operand:SI 0 "register_operand" "r")
7477 (match_operand:MVE_2 1 "s_register_operand" "w")
7478 (match_operand:MVE_2 2 "s_register_operand" "w")]
7481 "vstrb.<V_sz_elem>\t%q2, [%0, %q1]"
7482 [(set_attr "length" "4")])
7485 ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
7487 (define_insn "mve_vstrwq_scatter_base_<supf>v4si"
7488 [(set (mem:BLK (scratch))
7490 [(match_operand:V4SI 0 "s_register_operand" "w")
7491 (match_operand:SI 1 "immediate_operand" "i")
7492 (match_operand:V4SI 2 "s_register_operand" "w")]
7498 ops[0] = operands[0];
7499 ops[1] = operands[1];
7500 ops[2] = operands[2];
7501 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
7504 [(set_attr "length" "4")])
7507 ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
7509 (define_insn "mve_vldrbq_gather_offset_<supf><mode>"
7510 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7511 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7512 (match_operand:MVE_2 2 "s_register_operand" "w")]
7518 ops[0] = operands[0];
7519 ops[1] = operands[1];
7520 ops[2] = operands[2];
7521 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7522 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
7524 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7527 [(set_attr "length" "4")])
7530 ;; [vldrbq_s vldrbq_u]
7532 (define_insn "mve_vldrbq_<supf><mode>"
7533 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7534 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")]
7540 int regno = REGNO (operands[0]);
7541 ops[0] = gen_rtx_REG (TImode, regno);
7542 ops[1] = operands[1];
7543 if (<V_sz_elem> == 8)
7544 output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops);
7546 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
7549 [(set_attr "length" "4")])
7552 ;; [vldrwq_gather_base_s vldrwq_gather_base_u]
7554 (define_insn "mve_vldrwq_gather_base_<supf>v4si"
7555 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7556 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7557 (match_operand:SI 2 "immediate_operand" "i")]
7563 ops[0] = operands[0];
7564 ops[1] = operands[1];
7565 ops[2] = operands[2];
7566 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7569 [(set_attr "length" "4")])
7572 ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
7574 (define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>"
7575 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7576 (match_operand:MVE_2 1 "s_register_operand")
7577 (match_operand:MVE_2 2 "s_register_operand")
7578 (match_operand:HI 3 "vpr_register_operand" "Up")
7579 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7582 rtx ind = XEXP (operands[0], 0);
7583 gcc_assert (REG_P (ind));
7585 gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
7591 (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn"
7592 [(set (mem:BLK (scratch))
7594 [(match_operand:SI 0 "register_operand" "r")
7595 (match_operand:MVE_2 1 "s_register_operand" "w")
7596 (match_operand:MVE_2 2 "s_register_operand" "w")
7597 (match_operand:HI 3 "vpr_register_operand" "Up")]
7600 "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]"
7601 [(set_attr "length" "8")])
7604 ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
7606 (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
7607 [(set (mem:BLK (scratch))
7609 [(match_operand:V4SI 0 "s_register_operand" "w")
7610 (match_operand:SI 1 "immediate_operand" "i")
7611 (match_operand:V4SI 2 "s_register_operand" "w")
7612 (match_operand:HI 3 "vpr_register_operand" "Up")]
7618 ops[0] = operands[0];
7619 ops[1] = operands[1];
7620 ops[2] = operands[2];
7621 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
7624 [(set_attr "length" "8")])
7627 ;; [vstrbq_p_s vstrbq_p_u]
7629 (define_insn "mve_vstrbq_p_<supf><mode>"
7630 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7631 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
7632 (match_operand:HI 2 "vpr_register_operand" "Up")]
7638 int regno = REGNO (operands[1]);
7639 ops[1] = gen_rtx_REG (TImode, regno);
7640 ops[0] = operands[0];
7641 output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops);
7644 [(set_attr "length" "8")])
7647 ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
7649 (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
7650 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7651 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7652 (match_operand:MVE_2 2 "s_register_operand" "w")
7653 (match_operand:HI 3 "vpr_register_operand" "Up")]
7659 ops[0] = operands[0];
7660 ops[1] = operands[1];
7661 ops[2] = operands[2];
7662 ops[3] = operands[3];
7663 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7664 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
7666 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7669 [(set_attr "length" "8")])
7672 ;; [vldrbq_z_s vldrbq_z_u]
7674 (define_insn "mve_vldrbq_z_<supf><mode>"
7675 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7676 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")
7677 (match_operand:HI 2 "vpr_register_operand" "Up")]
7683 int regno = REGNO (operands[0]);
7684 ops[0] = gen_rtx_REG (TImode, regno);
7685 ops[1] = operands[1];
7686 if (<V_sz_elem> == 8)
7687 output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops);
7689 output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
7692 [(set_attr "length" "8")])
7695 ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
7697 (define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
7698 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7699 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7700 (match_operand:SI 2 "immediate_operand" "i")
7701 (match_operand:HI 3 "vpr_register_operand" "Up")]
7707 ops[0] = operands[0];
7708 ops[1] = operands[1];
7709 ops[2] = operands[2];
7710 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7713 [(set_attr "length" "8")])
7718 (define_insn "mve_vldrhq_fv8hf"
7719 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7720 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")]
7723 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7726 int regno = REGNO (operands[0]);
7727 ops[0] = gen_rtx_REG (TImode, regno);
7728 ops[1] = operands[1];
7729 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7732 [(set_attr "length" "4")])
7735 ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
7737 (define_insn "mve_vldrhq_gather_offset_<supf><mode>"
7738 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7739 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7740 (match_operand:MVE_6 2 "s_register_operand" "w")]
7746 ops[0] = operands[0];
7747 ops[1] = operands[1];
7748 ops[2] = operands[2];
7749 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7750 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
7752 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7755 [(set_attr "length" "4")])
7758 ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
7760 (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
7761 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7762 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7763 (match_operand:MVE_6 2 "s_register_operand" "w")
7764 (match_operand:HI 3 "vpr_register_operand" "Up")
7770 ops[0] = operands[0];
7771 ops[1] = operands[1];
7772 ops[2] = operands[2];
7773 ops[3] = operands[3];
7774 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7775 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
7777 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7780 [(set_attr "length" "8")])
7783 ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
7785 (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
7786 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7787 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7788 (match_operand:MVE_6 2 "s_register_operand" "w")]
7794 ops[0] = operands[0];
7795 ops[1] = operands[1];
7796 ops[2] = operands[2];
7797 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7798 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7800 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7803 [(set_attr "length" "4")])
7806 ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
7808 (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
7809 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7810 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7811 (match_operand:MVE_6 2 "s_register_operand" "w")
7812 (match_operand:HI 3 "vpr_register_operand" "Up")
7818 ops[0] = operands[0];
7819 ops[1] = operands[1];
7820 ops[2] = operands[2];
7821 ops[3] = operands[3];
7822 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7823 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7825 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7828 [(set_attr "length" "8")])
7831 ;; [vldrhq_s, vldrhq_u]
7833 (define_insn "mve_vldrhq_<supf><mode>"
7834 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7835 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")]
7841 int regno = REGNO (operands[0]);
7842 ops[0] = gen_rtx_REG (TImode, regno);
7843 ops[1] = operands[1];
7844 if (<V_sz_elem> == 16)
7845 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7847 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
7850 [(set_attr "length" "4")])
7855 (define_insn "mve_vldrhq_z_fv8hf"
7856 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7857 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")
7858 (match_operand:HI 2 "vpr_register_operand" "Up")]
7861 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7864 int regno = REGNO (operands[0]);
7865 ops[0] = gen_rtx_REG (TImode, regno);
7866 ops[1] = operands[1];
7867 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7870 [(set_attr "length" "8")])
7873 ;; [vldrhq_z_s vldrhq_z_u]
7875 (define_insn "mve_vldrhq_z_<supf><mode>"
7876 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7877 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")
7878 (match_operand:HI 2 "vpr_register_operand" "Up")]
7884 int regno = REGNO (operands[0]);
7885 ops[0] = gen_rtx_REG (TImode, regno);
7886 ops[1] = operands[1];
7887 if (<V_sz_elem> == 16)
7888 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7890 output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
7893 [(set_attr "length" "8")])
7898 (define_insn "mve_vldrwq_fv4sf"
7899 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7900 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")]
7903 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7906 int regno = REGNO (operands[0]);
7907 ops[0] = gen_rtx_REG (TImode, regno);
7908 ops[1] = operands[1];
7909 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7912 [(set_attr "length" "4")])
7915 ;; [vldrwq_s vldrwq_u]
7917 (define_insn "mve_vldrwq_<supf>v4si"
7918 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7919 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")]
7925 int regno = REGNO (operands[0]);
7926 ops[0] = gen_rtx_REG (TImode, regno);
7927 ops[1] = operands[1];
7928 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7931 [(set_attr "length" "4")])
7936 (define_insn "mve_vldrwq_z_fv4sf"
7937 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7938 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")
7939 (match_operand:HI 2 "vpr_register_operand" "Up")]
7942 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7945 int regno = REGNO (operands[0]);
7946 ops[0] = gen_rtx_REG (TImode, regno);
7947 ops[1] = operands[1];
7948 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7951 [(set_attr "length" "8")])
7954 ;; [vldrwq_z_s vldrwq_z_u]
7956 (define_insn "mve_vldrwq_z_<supf>v4si"
7957 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7958 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")
7959 (match_operand:HI 2 "vpr_register_operand" "Up")]
7965 int regno = REGNO (operands[0]);
7966 ops[0] = gen_rtx_REG (TImode, regno);
7967 ops[1] = operands[1];
7968 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7971 [(set_attr "length" "8")])
7973 (define_expand "mve_vld1q_f<mode>"
7974 [(match_operand:MVE_0 0 "s_register_operand")
7975 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F)
7977 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
7979 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
7983 (define_expand "mve_vld1q_<supf><mode>"
7984 [(match_operand:MVE_2 0 "s_register_operand")
7985 (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q)
7989 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
7994 ;; [vldrdq_gather_base_s vldrdq_gather_base_u]
7996 (define_insn "mve_vldrdq_gather_base_<supf>v2di"
7997 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7998 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
7999 (match_operand:SI 2 "immediate_operand" "i")]
8005 ops[0] = operands[0];
8006 ops[1] = operands[1];
8007 ops[2] = operands[2];
8008 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
8011 [(set_attr "length" "4")])
8014 ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
8016 (define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
8017 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8018 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8019 (match_operand:SI 2 "immediate_operand" "i")
8020 (match_operand:HI 3 "vpr_register_operand" "Up")]
8026 ops[0] = operands[0];
8027 ops[1] = operands[1];
8028 ops[2] = operands[2];
8029 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
8032 [(set_attr "length" "8")])
8035 ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
8037 (define_insn "mve_vldrdq_gather_offset_<supf>v2di"
8038 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8039 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8040 (match_operand:V2DI 2 "s_register_operand" "w")]
8046 ops[0] = operands[0];
8047 ops[1] = operands[1];
8048 ops[2] = operands[2];
8049 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
8052 [(set_attr "length" "4")])
8055 ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
8057 (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
8058 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8059 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8060 (match_operand:V2DI 2 "s_register_operand" "w")
8061 (match_operand:HI 3 "vpr_register_operand" "Up")]
8067 ops[0] = operands[0];
8068 ops[1] = operands[1];
8069 ops[2] = operands[2];
8070 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
8073 [(set_attr "length" "8")])
8076 ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
8078 (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
8079 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8080 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8081 (match_operand:V2DI 2 "s_register_operand" "w")]
8087 ops[0] = operands[0];
8088 ops[1] = operands[1];
8089 ops[2] = operands[2];
8090 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8093 [(set_attr "length" "4")])
8096 ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
8098 (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
8099 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8100 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8101 (match_operand:V2DI 2 "s_register_operand" "w")
8102 (match_operand:HI 3 "vpr_register_operand" "Up")]
8108 ops[0] = operands[0];
8109 ops[1] = operands[1];
8110 ops[2] = operands[2];
8111 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8114 [(set_attr "length" "8")])
8117 ;; [vldrhq_gather_offset_f]
8119 (define_insn "mve_vldrhq_gather_offset_fv8hf"
8120 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8121 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8122 (match_operand:V8HI 2 "s_register_operand" "w")]
8125 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8128 ops[0] = operands[0];
8129 ops[1] = operands[1];
8130 ops[2] = operands[2];
8131 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
8134 [(set_attr "length" "4")])
8137 ;; [vldrhq_gather_offset_z_f]
8139 (define_insn "mve_vldrhq_gather_offset_z_fv8hf"
8140 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8141 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8142 (match_operand:V8HI 2 "s_register_operand" "w")
8143 (match_operand:HI 3 "vpr_register_operand" "Up")]
8146 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8149 ops[0] = operands[0];
8150 ops[1] = operands[1];
8151 ops[2] = operands[2];
8152 ops[3] = operands[3];
8153 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
8156 [(set_attr "length" "8")])
8159 ;; [vldrhq_gather_shifted_offset_f]
8161 (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
8162 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8163 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8164 (match_operand:V8HI 2 "s_register_operand" "w")]
8167 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8170 ops[0] = operands[0];
8171 ops[1] = operands[1];
8172 ops[2] = operands[2];
8173 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8176 [(set_attr "length" "4")])
8179 ;; [vldrhq_gather_shifted_offset_z_f]
8181 (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
8182 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8183 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8184 (match_operand:V8HI 2 "s_register_operand" "w")
8185 (match_operand:HI 3 "vpr_register_operand" "Up")]
8188 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8191 ops[0] = operands[0];
8192 ops[1] = operands[1];
8193 ops[2] = operands[2];
8194 ops[3] = operands[3];
8195 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8198 [(set_attr "length" "8")])
8201 ;; [vldrwq_gather_base_f]
8203 (define_insn "mve_vldrwq_gather_base_fv4sf"
8204 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8205 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8206 (match_operand:SI 2 "immediate_operand" "i")]
8209 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8212 ops[0] = operands[0];
8213 ops[1] = operands[1];
8214 ops[2] = operands[2];
8215 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
8218 [(set_attr "length" "4")])
8221 ;; [vldrwq_gather_base_z_f]
8223 (define_insn "mve_vldrwq_gather_base_z_fv4sf"
8224 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8225 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8226 (match_operand:SI 2 "immediate_operand" "i")
8227 (match_operand:HI 3 "vpr_register_operand" "Up")]
8230 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8233 ops[0] = operands[0];
8234 ops[1] = operands[1];
8235 ops[2] = operands[2];
8236 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
8239 [(set_attr "length" "8")])
8242 ;; [vldrwq_gather_offset_f]
8244 (define_insn "mve_vldrwq_gather_offset_fv4sf"
8245 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8246 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8247 (match_operand:V4SI 2 "s_register_operand" "w")]
8250 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8253 ops[0] = operands[0];
8254 ops[1] = operands[1];
8255 ops[2] = operands[2];
8256 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8259 [(set_attr "length" "4")])
8262 ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
8264 (define_insn "mve_vldrwq_gather_offset_<supf>v4si"
8265 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8266 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8267 (match_operand:V4SI 2 "s_register_operand" "w")]
8273 ops[0] = operands[0];
8274 ops[1] = operands[1];
8275 ops[2] = operands[2];
8276 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8279 [(set_attr "length" "4")])
8282 ;; [vldrwq_gather_offset_z_f]
8284 (define_insn "mve_vldrwq_gather_offset_z_fv4sf"
8285 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8286 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8287 (match_operand:V4SI 2 "s_register_operand" "w")
8288 (match_operand:HI 3 "vpr_register_operand" "Up")]
8291 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8294 ops[0] = operands[0];
8295 ops[1] = operands[1];
8296 ops[2] = operands[2];
8297 ops[3] = operands[3];
8298 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8301 [(set_attr "length" "8")])
8304 ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
8306 (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
8307 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8308 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8309 (match_operand:V4SI 2 "s_register_operand" "w")
8310 (match_operand:HI 3 "vpr_register_operand" "Up")]
8316 ops[0] = operands[0];
8317 ops[1] = operands[1];
8318 ops[2] = operands[2];
8319 ops[3] = operands[3];
8320 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8323 [(set_attr "length" "8")])
8326 ;; [vldrwq_gather_shifted_offset_f]
8328 (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
8329 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8330 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8331 (match_operand:V4SI 2 "s_register_operand" "w")]
8334 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8337 ops[0] = operands[0];
8338 ops[1] = operands[1];
8339 ops[2] = operands[2];
8340 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8343 [(set_attr "length" "4")])
8346 ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
8348 (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
8349 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8350 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8351 (match_operand:V4SI 2 "s_register_operand" "w")]
8357 ops[0] = operands[0];
8358 ops[1] = operands[1];
8359 ops[2] = operands[2];
8360 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8363 [(set_attr "length" "4")])
8366 ;; [vldrwq_gather_shifted_offset_z_f]
8368 (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
8369 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8370 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8371 (match_operand:V4SI 2 "s_register_operand" "w")
8372 (match_operand:HI 3 "vpr_register_operand" "Up")]
8375 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8378 ops[0] = operands[0];
8379 ops[1] = operands[1];
8380 ops[2] = operands[2];
8381 ops[3] = operands[3];
8382 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8385 [(set_attr "length" "8")])
8388 ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
8390 (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
8391 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8392 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8393 (match_operand:V4SI 2 "s_register_operand" "w")
8394 (match_operand:HI 3 "vpr_register_operand" "Up")]
8400 ops[0] = operands[0];
8401 ops[1] = operands[1];
8402 ops[2] = operands[2];
8403 ops[3] = operands[3];
8404 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8407 [(set_attr "length" "8")])
8412 (define_insn "mve_vstrhq_fv8hf"
8413 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8414 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
8417 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8420 int regno = REGNO (operands[1]);
8421 ops[1] = gen_rtx_REG (TImode, regno);
8422 ops[0] = operands[0];
8423 output_asm_insn ("vstrh.16\t%q1, %E0",ops);
8426 [(set_attr "length" "4")])
8431 (define_insn "mve_vstrhq_p_fv8hf"
8432 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8433 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
8434 (match_operand:HI 2 "vpr_register_operand" "Up")]
8437 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8440 int regno = REGNO (operands[1]);
8441 ops[1] = gen_rtx_REG (TImode, regno);
8442 ops[0] = operands[0];
8443 output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops);
8446 [(set_attr "length" "8")])
8449 ;; [vstrhq_p_s vstrhq_p_u]
8451 (define_insn "mve_vstrhq_p_<supf><mode>"
8452 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8453 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
8454 (match_operand:HI 2 "vpr_register_operand" "Up")]
8460 int regno = REGNO (operands[1]);
8461 ops[1] = gen_rtx_REG (TImode, regno);
8462 ops[0] = operands[0];
8463 output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops);
8466 [(set_attr "length" "8")])
8469 ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
8471 (define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>"
8472 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8473 (match_operand:MVE_6 1 "s_register_operand")
8474 (match_operand:MVE_6 2 "s_register_operand")
8475 (match_operand:HI 3 "vpr_register_operand")
8476 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8479 rtx ind = XEXP (operands[0], 0);
8480 gcc_assert (REG_P (ind));
8482 gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
8488 (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn"
8489 [(set (mem:BLK (scratch))
8491 [(match_operand:SI 0 "register_operand" "r")
8492 (match_operand:MVE_6 1 "s_register_operand" "w")
8493 (match_operand:MVE_6 2 "s_register_operand" "w")
8494 (match_operand:HI 3 "vpr_register_operand" "Up")]
8497 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]"
8498 [(set_attr "length" "8")])
8501 ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
8503 (define_expand "mve_vstrhq_scatter_offset_<supf><mode>"
8504 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8505 (match_operand:MVE_6 1 "s_register_operand")
8506 (match_operand:MVE_6 2 "s_register_operand")
8507 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8510 rtx ind = XEXP (operands[0], 0);
8511 gcc_assert (REG_P (ind));
8512 emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1],
8517 (define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn"
8518 [(set (mem:BLK (scratch))
8520 [(match_operand:SI 0 "register_operand" "r")
8521 (match_operand:MVE_6 1 "s_register_operand" "w")
8522 (match_operand:MVE_6 2 "s_register_operand" "w")]
8525 "vstrh.<V_sz_elem>\t%q2, [%0, %q1]"
8526 [(set_attr "length" "4")])
8529 ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
8531 (define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
8532 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8533 (match_operand:MVE_6 1 "s_register_operand")
8534 (match_operand:MVE_6 2 "s_register_operand")
8535 (match_operand:HI 3 "vpr_register_operand")
8536 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8539 rtx ind = XEXP (operands[0], 0);
8540 gcc_assert (REG_P (ind));
8542 gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1],
8548 (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn"
8549 [(set (mem:BLK (scratch))
8551 [(match_operand:SI 0 "register_operand" "r")
8552 (match_operand:MVE_6 1 "s_register_operand" "w")
8553 (match_operand:MVE_6 2 "s_register_operand" "w")
8554 (match_operand:HI 3 "vpr_register_operand" "Up")]
8557 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8558 [(set_attr "length" "8")])
8561 ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
8563 (define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
8564 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8565 (match_operand:MVE_6 1 "s_register_operand")
8566 (match_operand:MVE_6 2 "s_register_operand")
8567 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8570 rtx ind = XEXP (operands[0], 0);
8571 gcc_assert (REG_P (ind));
8573 gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1],
8578 (define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn"
8579 [(set (mem:BLK (scratch))
8581 [(match_operand:SI 0 "register_operand" "r")
8582 (match_operand:MVE_6 1 "s_register_operand" "w")
8583 (match_operand:MVE_6 2 "s_register_operand" "w")]
8586 "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8587 [(set_attr "length" "4")])
8590 ;; [vstrhq_s, vstrhq_u]
8592 (define_insn "mve_vstrhq_<supf><mode>"
8593 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8594 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
8600 int regno = REGNO (operands[1]);
8601 ops[1] = gen_rtx_REG (TImode, regno);
8602 ops[0] = operands[0];
8603 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
8606 [(set_attr "length" "4")])
8611 (define_insn "mve_vstrwq_fv4sf"
8612 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8613 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
8616 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8619 int regno = REGNO (operands[1]);
8620 ops[1] = gen_rtx_REG (TImode, regno);
8621 ops[0] = operands[0];
8622 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8625 [(set_attr "length" "4")])
8630 (define_insn "mve_vstrwq_p_fv4sf"
8631 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8632 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
8633 (match_operand:HI 2 "vpr_register_operand" "Up")]
8636 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8639 int regno = REGNO (operands[1]);
8640 ops[1] = gen_rtx_REG (TImode, regno);
8641 ops[0] = operands[0];
8642 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8645 [(set_attr "length" "8")])
8648 ;; [vstrwq_p_s vstrwq_p_u]
8650 (define_insn "mve_vstrwq_p_<supf>v4si"
8651 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8652 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8653 (match_operand:HI 2 "vpr_register_operand" "Up")]
8659 int regno = REGNO (operands[1]);
8660 ops[1] = gen_rtx_REG (TImode, regno);
8661 ops[0] = operands[0];
8662 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8665 [(set_attr "length" "8")])
8668 ;; [vstrwq_s vstrwq_u]
8670 (define_insn "mve_vstrwq_<supf>v4si"
8671 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8672 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
8678 int regno = REGNO (operands[1]);
8679 ops[1] = gen_rtx_REG (TImode, regno);
8680 ops[0] = operands[0];
8681 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8684 [(set_attr "length" "4")])
8686 (define_expand "mve_vst1q_f<mode>"
8687 [(match_operand:<MVE_CNVT> 0 "mve_memory_operand")
8688 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
8690 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8692 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8696 (define_expand "mve_vst1q_<supf><mode>"
8697 [(match_operand:MVE_2 0 "mve_memory_operand")
8698 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
8702 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8707 ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
8709 (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
8710 [(set (mem:BLK (scratch))
8712 [(match_operand:V2DI 0 "s_register_operand" "w")
8713 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8714 (match_operand:V2DI 2 "s_register_operand" "w")
8715 (match_operand:HI 3 "vpr_register_operand" "Up")]
8721 ops[0] = operands[0];
8722 ops[1] = operands[1];
8723 ops[2] = operands[2];
8724 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
8727 [(set_attr "length" "8")])
8730 ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
8732 (define_insn "mve_vstrdq_scatter_base_<supf>v2di"
8733 [(set (mem:BLK (scratch))
8735 [(match_operand:V2DI 0 "s_register_operand" "=w")
8736 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8737 (match_operand:V2DI 2 "s_register_operand" "w")]
8743 ops[0] = operands[0];
8744 ops[1] = operands[1];
8745 ops[2] = operands[2];
8746 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
8749 [(set_attr "length" "4")])
8752 ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
8754 (define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di"
8755 [(match_operand:V2DI 0 "mve_scatter_memory")
8756 (match_operand:V2DI 1 "s_register_operand")
8757 (match_operand:V2DI 2 "s_register_operand")
8758 (match_operand:HI 3 "vpr_register_operand")
8759 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8762 rtx ind = XEXP (operands[0], 0);
8763 gcc_assert (REG_P (ind));
8764 emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1],
8770 (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn"
8771 [(set (mem:BLK (scratch))
8773 [(match_operand:SI 0 "register_operand" "r")
8774 (match_operand:V2DI 1 "s_register_operand" "w")
8775 (match_operand:V2DI 2 "s_register_operand" "w")
8776 (match_operand:HI 3 "vpr_register_operand" "Up")]
8779 "vpst\;vstrdt.64\t%q2, [%0, %q1]"
8780 [(set_attr "length" "8")])
8783 ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
8785 (define_expand "mve_vstrdq_scatter_offset_<supf>v2di"
8786 [(match_operand:V2DI 0 "mve_scatter_memory")
8787 (match_operand:V2DI 1 "s_register_operand")
8788 (match_operand:V2DI 2 "s_register_operand")
8789 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8792 rtx ind = XEXP (operands[0], 0);
8793 gcc_assert (REG_P (ind));
8794 emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1],
8799 (define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn"
8800 [(set (mem:BLK (scratch))
8802 [(match_operand:SI 0 "register_operand" "r")
8803 (match_operand:V2DI 1 "s_register_operand" "w")
8804 (match_operand:V2DI 2 "s_register_operand" "w")]
8807 "vstrd.64\t%q2, [%0, %q1]"
8808 [(set_attr "length" "4")])
8811 ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
8813 (define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
8814 [(match_operand:V2DI 0 "mve_scatter_memory")
8815 (match_operand:V2DI 1 "s_register_operand")
8816 (match_operand:V2DI 2 "s_register_operand")
8817 (match_operand:HI 3 "vpr_register_operand")
8818 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8821 rtx ind = XEXP (operands[0], 0);
8822 gcc_assert (REG_P (ind));
8824 gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1],
8830 (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn"
8831 [(set (mem:BLK (scratch))
8833 [(match_operand:SI 0 "register_operand" "r")
8834 (match_operand:V2DI 1 "s_register_operand" "w")
8835 (match_operand:V2DI 2 "s_register_operand" "w")
8836 (match_operand:HI 3 "vpr_register_operand" "Up")]
8839 "vpst\;vstrdt.64\t%q2, [%0, %q1, UXTW #3]"
8840 [(set_attr "length" "8")])
8843 ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
8845 (define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
8846 [(match_operand:V2DI 0 "mve_scatter_memory")
8847 (match_operand:V2DI 1 "s_register_operand")
8848 (match_operand:V2DI 2 "s_register_operand")
8849 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8852 rtx ind = XEXP (operands[0], 0);
8853 gcc_assert (REG_P (ind));
8855 gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1],
8860 (define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn"
8861 [(set (mem:BLK (scratch))
8863 [(match_operand:SI 0 "register_operand" "r")
8864 (match_operand:V2DI 1 "s_register_operand" "w")
8865 (match_operand:V2DI 2 "s_register_operand" "w")]
8868 "vstrd.64\t%q2, [%0, %q1, UXTW #3]"
8869 [(set_attr "length" "4")])
8872 ;; [vstrhq_scatter_offset_f]
8874 (define_expand "mve_vstrhq_scatter_offset_fv8hf"
8875 [(match_operand:V8HI 0 "mve_scatter_memory")
8876 (match_operand:V8HI 1 "s_register_operand")
8877 (match_operand:V8HF 2 "s_register_operand")
8878 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8879 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8881 rtx ind = XEXP (operands[0], 0);
8882 gcc_assert (REG_P (ind));
8883 emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1],
8888 (define_insn "mve_vstrhq_scatter_offset_fv8hf_insn"
8889 [(set (mem:BLK (scratch))
8891 [(match_operand:SI 0 "register_operand" "r")
8892 (match_operand:V8HI 1 "s_register_operand" "w")
8893 (match_operand:V8HF 2 "s_register_operand" "w")]
8895 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8896 "vstrh.16\t%q2, [%0, %q1]"
8897 [(set_attr "length" "4")])
8900 ;; [vstrhq_scatter_offset_p_f]
8902 (define_expand "mve_vstrhq_scatter_offset_p_fv8hf"
8903 [(match_operand:V8HI 0 "mve_scatter_memory")
8904 (match_operand:V8HI 1 "s_register_operand")
8905 (match_operand:V8HF 2 "s_register_operand")
8906 (match_operand:HI 3 "vpr_register_operand")
8907 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8908 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8910 rtx ind = XEXP (operands[0], 0);
8911 gcc_assert (REG_P (ind));
8912 emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1],
8918 (define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn"
8919 [(set (mem:BLK (scratch))
8921 [(match_operand:SI 0 "register_operand" "r")
8922 (match_operand:V8HI 1 "s_register_operand" "w")
8923 (match_operand:V8HF 2 "s_register_operand" "w")
8924 (match_operand:HI 3 "vpr_register_operand" "Up")]
8926 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8927 "vpst\;vstrht.16\t%q2, [%0, %q1]"
8928 [(set_attr "length" "8")])
8931 ;; [vstrhq_scatter_shifted_offset_f]
8933 (define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf"
8934 [(match_operand:V8HI 0 "memory_operand" "=Us")
8935 (match_operand:V8HI 1 "s_register_operand" "w")
8936 (match_operand:V8HF 2 "s_register_operand" "w")
8937 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8938 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8940 rtx ind = XEXP (operands[0], 0);
8941 gcc_assert (REG_P (ind));
8942 emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1],
8947 (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn"
8948 [(set (mem:BLK (scratch))
8950 [(match_operand:SI 0 "register_operand" "r")
8951 (match_operand:V8HI 1 "s_register_operand" "w")
8952 (match_operand:V8HF 2 "s_register_operand" "w")]
8954 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8955 "vstrh.16\t%q2, [%0, %q1, uxtw #1]"
8956 [(set_attr "length" "4")])
8959 ;; [vstrhq_scatter_shifted_offset_p_f]
8961 (define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
8962 [(match_operand:V8HI 0 "memory_operand" "=Us")
8963 (match_operand:V8HI 1 "s_register_operand" "w")
8964 (match_operand:V8HF 2 "s_register_operand" "w")
8965 (match_operand:HI 3 "vpr_register_operand" "Up")
8966 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8967 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8969 rtx ind = XEXP (operands[0], 0);
8970 gcc_assert (REG_P (ind));
8972 gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1],
8978 (define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn"
8979 [(set (mem:BLK (scratch))
8981 [(match_operand:SI 0 "register_operand" "r")
8982 (match_operand:V8HI 1 "s_register_operand" "w")
8983 (match_operand:V8HF 2 "s_register_operand" "w")
8984 (match_operand:HI 3 "vpr_register_operand" "Up")]
8986 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8987 "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]"
8988 [(set_attr "length" "8")])
8991 ;; [vstrwq_scatter_base_f]
8993 (define_insn "mve_vstrwq_scatter_base_fv4sf"
8994 [(set (mem:BLK (scratch))
8996 [(match_operand:V4SI 0 "s_register_operand" "w")
8997 (match_operand:SI 1 "immediate_operand" "i")
8998 (match_operand:V4SF 2 "s_register_operand" "w")]
9001 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9004 ops[0] = operands[0];
9005 ops[1] = operands[1];
9006 ops[2] = operands[2];
9007 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
9010 [(set_attr "length" "4")])
9013 ;; [vstrwq_scatter_base_p_f]
9015 (define_insn "mve_vstrwq_scatter_base_p_fv4sf"
9016 [(set (mem:BLK (scratch))
9018 [(match_operand:V4SI 0 "s_register_operand" "w")
9019 (match_operand:SI 1 "immediate_operand" "i")
9020 (match_operand:V4SF 2 "s_register_operand" "w")
9021 (match_operand:HI 3 "vpr_register_operand" "Up")]
9024 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9027 ops[0] = operands[0];
9028 ops[1] = operands[1];
9029 ops[2] = operands[2];
9030 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
9033 [(set_attr "length" "8")])
9036 ;; [vstrwq_scatter_offset_f]
9038 (define_expand "mve_vstrwq_scatter_offset_fv4sf"
9039 [(match_operand:V4SI 0 "mve_scatter_memory")
9040 (match_operand:V4SI 1 "s_register_operand")
9041 (match_operand:V4SF 2 "s_register_operand")
9042 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9043 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9045 rtx ind = XEXP (operands[0], 0);
9046 gcc_assert (REG_P (ind));
9047 emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1],
9052 (define_insn "mve_vstrwq_scatter_offset_fv4sf_insn"
9053 [(set (mem:BLK (scratch))
9055 [(match_operand:SI 0 "register_operand" "r")
9056 (match_operand:V4SI 1 "s_register_operand" "w")
9057 (match_operand:V4SF 2 "s_register_operand" "w")]
9059 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9060 "vstrw.32\t%q2, [%0, %q1]"
9061 [(set_attr "length" "4")])
9064 ;; [vstrwq_scatter_offset_p_f]
9066 (define_expand "mve_vstrwq_scatter_offset_p_fv4sf"
9067 [(match_operand:V4SI 0 "mve_scatter_memory")
9068 (match_operand:V4SI 1 "s_register_operand")
9069 (match_operand:V4SF 2 "s_register_operand")
9070 (match_operand:HI 3 "vpr_register_operand")
9071 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9072 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9074 rtx ind = XEXP (operands[0], 0);
9075 gcc_assert (REG_P (ind));
9076 emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1],
9082 (define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn"
9083 [(set (mem:BLK (scratch))
9085 [(match_operand:SI 0 "register_operand" "r")
9086 (match_operand:V4SI 1 "s_register_operand" "w")
9087 (match_operand:V4SF 2 "s_register_operand" "w")
9088 (match_operand:HI 3 "vpr_register_operand" "Up")]
9090 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9091 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9092 [(set_attr "length" "8")])
9095 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9097 (define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si"
9098 [(match_operand:V4SI 0 "mve_scatter_memory")
9099 (match_operand:V4SI 1 "s_register_operand")
9100 (match_operand:V4SI 2 "s_register_operand")
9101 (match_operand:HI 3 "vpr_register_operand")
9102 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9105 rtx ind = XEXP (operands[0], 0);
9106 gcc_assert (REG_P (ind));
9107 emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1],
9113 (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn"
9114 [(set (mem:BLK (scratch))
9116 [(match_operand:SI 0 "register_operand" "r")
9117 (match_operand:V4SI 1 "s_register_operand" "w")
9118 (match_operand:V4SI 2 "s_register_operand" "w")
9119 (match_operand:HI 3 "vpr_register_operand" "Up")]
9122 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9123 [(set_attr "length" "8")])
9126 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9128 (define_expand "mve_vstrwq_scatter_offset_<supf>v4si"
9129 [(match_operand:V4SI 0 "mve_scatter_memory")
9130 (match_operand:V4SI 1 "s_register_operand")
9131 (match_operand:V4SI 2 "s_register_operand")
9132 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9135 rtx ind = XEXP (operands[0], 0);
9136 gcc_assert (REG_P (ind));
9137 emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1],
9142 (define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn"
9143 [(set (mem:BLK (scratch))
9145 [(match_operand:SI 0 "register_operand" "r")
9146 (match_operand:V4SI 1 "s_register_operand" "w")
9147 (match_operand:V4SI 2 "s_register_operand" "w")]
9150 "vstrw.32\t%q2, [%0, %q1]"
9151 [(set_attr "length" "4")])
9154 ;; [vstrwq_scatter_shifted_offset_f]
9156 (define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf"
9157 [(match_operand:V4SI 0 "mve_scatter_memory")
9158 (match_operand:V4SI 1 "s_register_operand")
9159 (match_operand:V4SF 2 "s_register_operand")
9160 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9161 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9163 rtx ind = XEXP (operands[0], 0);
9164 gcc_assert (REG_P (ind));
9165 emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1],
9170 (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn"
9171 [(set (mem:BLK (scratch))
9173 [(match_operand:SI 0 "register_operand" "r")
9174 (match_operand:V4SI 1 "s_register_operand" "w")
9175 (match_operand:V4SF 2 "s_register_operand" "w")]
9177 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9178 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9179 [(set_attr "length" "8")])
9182 ;; [vstrwq_scatter_shifted_offset_p_f]
9184 (define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
9185 [(match_operand:V4SI 0 "mve_scatter_memory")
9186 (match_operand:V4SI 1 "s_register_operand")
9187 (match_operand:V4SF 2 "s_register_operand")
9188 (match_operand:HI 3 "vpr_register_operand")
9189 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9190 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9192 rtx ind = XEXP (operands[0], 0);
9193 gcc_assert (REG_P (ind));
9195 gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1],
9201 (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn"
9202 [(set (mem:BLK (scratch))
9204 [(match_operand:SI 0 "register_operand" "r")
9205 (match_operand:V4SI 1 "s_register_operand" "w")
9206 (match_operand:V4SF 2 "s_register_operand" "w")
9207 (match_operand:HI 3 "vpr_register_operand" "Up")]
9209 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9210 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9211 [(set_attr "length" "8")])
9214 ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
9216 (define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
9217 [(match_operand:V4SI 0 "mve_scatter_memory")
9218 (match_operand:V4SI 1 "s_register_operand")
9219 (match_operand:V4SI 2 "s_register_operand")
9220 (match_operand:HI 3 "vpr_register_operand")
9221 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9224 rtx ind = XEXP (operands[0], 0);
9225 gcc_assert (REG_P (ind));
9227 gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1],
9233 (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn"
9234 [(set (mem:BLK (scratch))
9236 [(match_operand:SI 0 "register_operand" "r")
9237 (match_operand:V4SI 1 "s_register_operand" "w")
9238 (match_operand:V4SI 2 "s_register_operand" "w")
9239 (match_operand:HI 3 "vpr_register_operand" "Up")]
9242 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9243 [(set_attr "length" "8")])
9246 ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
9248 (define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
9249 [(match_operand:V4SI 0 "mve_scatter_memory")
9250 (match_operand:V4SI 1 "s_register_operand")
9251 (match_operand:V4SI 2 "s_register_operand")
9252 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9255 rtx ind = XEXP (operands[0], 0);
9256 gcc_assert (REG_P (ind));
9258 gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1],
9263 (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn"
9264 [(set (mem:BLK (scratch))
9266 [(match_operand:SI 0 "register_operand" "r")
9267 (match_operand:V4SI 1 "s_register_operand" "w")
9268 (match_operand:V4SI 2 "s_register_operand" "w")]
9271 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9272 [(set_attr "length" "4")])
9275 ;; [vaddq_s, vaddq_u])
9277 (define_insn "mve_vaddq<mode>"
9279 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
9280 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
9281 (match_operand:MVE_2 2 "s_register_operand" "w")))
9284 "vadd.i%#<V_sz_elem> %q0, %q1, %q2"
9285 [(set_attr "type" "mve_move")
9291 (define_insn "mve_vaddq_f<mode>"
9293 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
9294 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
9295 (match_operand:MVE_0 2 "s_register_operand" "w")))
9297 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9298 "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
9299 [(set_attr "type" "mve_move")
9305 (define_expand "mve_vidupq_n_u<mode>"
9306 [(match_operand:MVE_2 0 "s_register_operand")
9307 (match_operand:SI 1 "s_register_operand")
9308 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9311 rtx temp = gen_reg_rtx (SImode);
9312 emit_move_insn (temp, operands[1]);
9313 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9314 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
9322 (define_insn "mve_vidupq_u<mode>_insn"
9323 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9324 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9325 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
9327 (set (match_operand:SI 1 "s_register_operand" "=Te")
9328 (plus:SI (match_dup 2)
9329 (match_operand:SI 4 "immediate_operand" "i")))]
9331 "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
9336 (define_expand "mve_vidupq_m_n_u<mode>"
9337 [(match_operand:MVE_2 0 "s_register_operand")
9338 (match_operand:MVE_2 1 "s_register_operand")
9339 (match_operand:SI 2 "s_register_operand")
9340 (match_operand:SI 3 "mve_imm_selective_upto_8")
9341 (match_operand:HI 4 "vpr_register_operand")]
9344 rtx temp = gen_reg_rtx (SImode);
9345 emit_move_insn (temp, operands[2]);
9346 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9347 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9348 operands[2], operands[3],
9354 ;; [vidupq_m_wb_u_insn])
9356 (define_insn "mve_vidupq_m_wb_u<mode>_insn"
9357 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9358 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9359 (match_operand:SI 3 "s_register_operand" "2")
9360 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9361 (match_operand:HI 5 "vpr_register_operand" "Up")]
9363 (set (match_operand:SI 2 "s_register_operand" "=Te")
9364 (plus:SI (match_dup 3)
9365 (match_operand:SI 6 "immediate_operand" "i")))]
9367 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
9368 [(set_attr "length""8")])
9373 (define_expand "mve_vddupq_n_u<mode>"
9374 [(match_operand:MVE_2 0 "s_register_operand")
9375 (match_operand:SI 1 "s_register_operand")
9376 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9379 rtx temp = gen_reg_rtx (SImode);
9380 emit_move_insn (temp, operands[1]);
9381 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9382 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
9390 (define_insn "mve_vddupq_u<mode>_insn"
9391 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9392 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9393 (match_operand:SI 3 "immediate_operand" "i")]
9395 (set (match_operand:SI 1 "s_register_operand" "=Te")
9396 (minus:SI (match_dup 2)
9397 (match_operand:SI 4 "immediate_operand" "i")))]
9399 "vddup.u%#<V_sz_elem> %q0, %1, %3")
9404 (define_expand "mve_vddupq_m_n_u<mode>"
9405 [(match_operand:MVE_2 0 "s_register_operand")
9406 (match_operand:MVE_2 1 "s_register_operand")
9407 (match_operand:SI 2 "s_register_operand")
9408 (match_operand:SI 3 "mve_imm_selective_upto_8")
9409 (match_operand:HI 4 "vpr_register_operand")]
9412 rtx temp = gen_reg_rtx (SImode);
9413 emit_move_insn (temp, operands[2]);
9414 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9415 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9416 operands[2], operands[3],
9422 ;; [vddupq_m_wb_u_insn])
9424 (define_insn "mve_vddupq_m_wb_u<mode>_insn"
9425 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9426 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9427 (match_operand:SI 3 "s_register_operand" "2")
9428 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9429 (match_operand:HI 5 "vpr_register_operand" "Up")]
9431 (set (match_operand:SI 2 "s_register_operand" "=Te")
9432 (minus:SI (match_dup 3)
9433 (match_operand:SI 6 "immediate_operand" "i")))]
9435 "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
9436 [(set_attr "length""8")])
9441 (define_expand "mve_vdwdupq_n_u<mode>"
9442 [(match_operand:MVE_2 0 "s_register_operand")
9443 (match_operand:SI 1 "s_register_operand")
9444 (match_operand:DI 2 "s_register_operand")
9445 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9448 rtx ignore_wb = gen_reg_rtx (SImode);
9449 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9450 operands[1], operands[2],
9458 (define_expand "mve_vdwdupq_wb_u<mode>"
9459 [(match_operand:SI 0 "s_register_operand")
9460 (match_operand:SI 1 "s_register_operand")
9461 (match_operand:DI 2 "s_register_operand")
9462 (match_operand:SI 3 "mve_imm_selective_upto_8")
9463 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9466 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9467 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9468 operands[1], operands[2],
9474 ;; [vdwdupq_wb_u_insn])
9476 (define_insn "mve_vdwdupq_wb_u<mode>_insn"
9477 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9478 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9479 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9480 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9482 (set (match_operand:SI 1 "s_register_operand" "=Te")
9483 (unspec:SI [(match_dup 2)
9484 (subreg:SI (match_dup 3) 4)
9488 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9494 (define_expand "mve_vdwdupq_m_n_u<mode>"
9495 [(match_operand:MVE_2 0 "s_register_operand")
9496 (match_operand:MVE_2 1 "s_register_operand")
9497 (match_operand:SI 2 "s_register_operand")
9498 (match_operand:DI 3 "s_register_operand")
9499 (match_operand:SI 4 "mve_imm_selective_upto_8")
9500 (match_operand:HI 5 "vpr_register_operand")]
9503 rtx ignore_wb = gen_reg_rtx (SImode);
9504 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9505 operands[1], operands[2],
9506 operands[3], operands[4],
9512 ;; [vdwdupq_m_wb_u])
9514 (define_expand "mve_vdwdupq_m_wb_u<mode>"
9515 [(match_operand:SI 0 "s_register_operand")
9516 (match_operand:MVE_2 1 "s_register_operand")
9517 (match_operand:SI 2 "s_register_operand")
9518 (match_operand:DI 3 "s_register_operand")
9519 (match_operand:SI 4 "mve_imm_selective_upto_8")
9520 (match_operand:HI 5 "vpr_register_operand")]
9523 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9524 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9525 operands[1], operands[2],
9526 operands[3], operands[4],
9532 ;; [vdwdupq_m_wb_u_insn])
9534 (define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
9535 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9536 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9537 (match_operand:SI 3 "s_register_operand" "1")
9538 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9539 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9540 (match_operand:HI 6 "vpr_register_operand" "Up")]
9542 (set (match_operand:SI 1 "s_register_operand" "=Te")
9543 (unspec:SI [(match_dup 2)
9545 (subreg:SI (match_dup 4) 4)
9551 "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9552 [(set_attr "type" "mve_move")
9553 (set_attr "length""8")])
9558 (define_expand "mve_viwdupq_n_u<mode>"
9559 [(match_operand:MVE_2 0 "s_register_operand")
9560 (match_operand:SI 1 "s_register_operand")
9561 (match_operand:DI 2 "s_register_operand")
9562 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9565 rtx ignore_wb = gen_reg_rtx (SImode);
9566 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9567 operands[1], operands[2],
9575 (define_expand "mve_viwdupq_wb_u<mode>"
9576 [(match_operand:SI 0 "s_register_operand")
9577 (match_operand:SI 1 "s_register_operand")
9578 (match_operand:DI 2 "s_register_operand")
9579 (match_operand:SI 3 "mve_imm_selective_upto_8")
9580 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9583 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9584 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9585 operands[1], operands[2],
9591 ;; [viwdupq_wb_u_insn])
9593 (define_insn "mve_viwdupq_wb_u<mode>_insn"
9594 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9595 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9596 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9597 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9599 (set (match_operand:SI 1 "s_register_operand" "=Te")
9600 (unspec:SI [(match_dup 2)
9601 (subreg:SI (match_dup 3) 4)
9605 "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9611 (define_expand "mve_viwdupq_m_n_u<mode>"
9612 [(match_operand:MVE_2 0 "s_register_operand")
9613 (match_operand:MVE_2 1 "s_register_operand")
9614 (match_operand:SI 2 "s_register_operand")
9615 (match_operand:DI 3 "s_register_operand")
9616 (match_operand:SI 4 "mve_imm_selective_upto_8")
9617 (match_operand:HI 5 "vpr_register_operand")]
9620 rtx ignore_wb = gen_reg_rtx (SImode);
9621 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9622 operands[1], operands[2],
9623 operands[3], operands[4],
9629 ;; [viwdupq_m_wb_u])
9631 (define_expand "mve_viwdupq_m_wb_u<mode>"
9632 [(match_operand:SI 0 "s_register_operand")
9633 (match_operand:MVE_2 1 "s_register_operand")
9634 (match_operand:SI 2 "s_register_operand")
9635 (match_operand:DI 3 "s_register_operand")
9636 (match_operand:SI 4 "mve_imm_selective_upto_8")
9637 (match_operand:HI 5 "vpr_register_operand")]
9640 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9641 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9642 operands[1], operands[2],
9643 operands[3], operands[4],
9649 ;; [viwdupq_m_wb_u_insn])
9651 (define_insn "mve_viwdupq_m_wb_u<mode>_insn"
9652 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9653 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9654 (match_operand:SI 3 "s_register_operand" "1")
9655 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9656 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9657 (match_operand:HI 6 "vpr_register_operand" "Up")]
9659 (set (match_operand:SI 1 "s_register_operand" "=Te")
9660 (unspec:SI [(match_dup 2)
9662 (subreg:SI (match_dup 4) 4)
9668 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9669 [(set_attr "type" "mve_move")
9670 (set_attr "length""8")])
9673 ;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u]
9675 (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si"
9676 [(set (mem:BLK (scratch))
9678 [(match_operand:V4SI 1 "s_register_operand" "0")
9679 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9680 (match_operand:V4SI 3 "s_register_operand" "w")]
9682 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9683 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9689 ops[0] = operands[1];
9690 ops[1] = operands[2];
9691 ops[2] = operands[3];
9692 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9695 [(set_attr "length" "4")])
9698 ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
9700 (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
9701 [(set (mem:BLK (scratch))
9703 [(match_operand:V4SI 1 "s_register_operand" "0")
9704 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9705 (match_operand:V4SI 3 "s_register_operand" "w")
9706 (match_operand:HI 4 "vpr_register_operand")]
9708 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9709 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9715 ops[0] = operands[1];
9716 ops[1] = operands[2];
9717 ops[2] = operands[3];
9718 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9721 [(set_attr "length" "8")])
9724 ;; [vstrwq_scatter_base_wb_f]
9726 (define_insn "mve_vstrwq_scatter_base_wb_fv4sf"
9727 [(set (mem:BLK (scratch))
9729 [(match_operand:V4SI 1 "s_register_operand" "0")
9730 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9731 (match_operand:V4SF 3 "s_register_operand" "w")]
9733 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9734 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9737 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9740 ops[0] = operands[1];
9741 ops[1] = operands[2];
9742 ops[2] = operands[3];
9743 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9746 [(set_attr "length" "4")])
9749 ;; [vstrwq_scatter_base_wb_p_f]
9751 (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf"
9752 [(set (mem:BLK (scratch))
9754 [(match_operand:V4SI 1 "s_register_operand" "0")
9755 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9756 (match_operand:V4SF 3 "s_register_operand" "w")
9757 (match_operand:HI 4 "vpr_register_operand")]
9759 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9760 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9763 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9766 ops[0] = operands[1];
9767 ops[1] = operands[2];
9768 ops[2] = operands[3];
9769 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9772 [(set_attr "length" "8")])
9775 ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
9777 (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di"
9778 [(set (mem:BLK (scratch))
9780 [(match_operand:V2DI 1 "s_register_operand" "0")
9781 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9782 (match_operand:V2DI 3 "s_register_operand" "w")]
9784 (set (match_operand:V2DI 0 "s_register_operand" "=&w")
9785 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9791 ops[0] = operands[1];
9792 ops[1] = operands[2];
9793 ops[2] = operands[3];
9794 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
9797 [(set_attr "length" "4")])
9800 ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
9802 (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
9803 [(set (mem:BLK (scratch))
9805 [(match_operand:V2DI 1 "s_register_operand" "0")
9806 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9807 (match_operand:V2DI 3 "s_register_operand" "w")
9808 (match_operand:HI 4 "vpr_register_operand")]
9810 (set (match_operand:V2DI 0 "s_register_operand" "=w")
9811 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9817 ops[0] = operands[1];
9818 ops[1] = operands[2];
9819 ops[2] = operands[3];
9820 output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops);
9823 [(set_attr "length" "8")])
9825 (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
9826 [(match_operand:V4SI 0 "s_register_operand")
9827 (match_operand:V4SI 1 "s_register_operand")
9828 (match_operand:SI 2 "mve_vldrd_immediate")
9829 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9832 rtx ignore_result = gen_reg_rtx (V4SImode);
9834 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0],
9835 operands[1], operands[2]));
9839 (define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si"
9840 [(match_operand:V4SI 0 "s_register_operand")
9841 (match_operand:V4SI 1 "s_register_operand")
9842 (match_operand:SI 2 "mve_vldrd_immediate")
9843 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9846 rtx ignore_wb = gen_reg_rtx (V4SImode);
9848 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
9849 operands[1], operands[2]));
9854 ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
9856 (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
9857 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9858 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9859 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9860 (mem:BLK (scratch))]
9862 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9863 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9869 ops[0] = operands[0];
9870 ops[1] = operands[2];
9871 ops[2] = operands[3];
9872 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9875 [(set_attr "length" "4")])
9877 (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
9878 [(match_operand:V4SI 0 "s_register_operand")
9879 (match_operand:V4SI 1 "s_register_operand")
9880 (match_operand:SI 2 "mve_vldrd_immediate")
9881 (match_operand:HI 3 "vpr_register_operand")
9882 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9885 rtx ignore_result = gen_reg_rtx (V4SImode);
9887 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0],
9888 operands[1], operands[2],
9892 (define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si"
9893 [(match_operand:V4SI 0 "s_register_operand")
9894 (match_operand:V4SI 1 "s_register_operand")
9895 (match_operand:SI 2 "mve_vldrd_immediate")
9896 (match_operand:HI 3 "vpr_register_operand")
9897 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9900 rtx ignore_wb = gen_reg_rtx (V4SImode);
9902 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
9903 operands[1], operands[2],
9909 ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
9911 (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
9912 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9913 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9914 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9915 (match_operand:HI 4 "vpr_register_operand" "Up")
9916 (mem:BLK (scratch))]
9918 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9919 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9925 ops[0] = operands[0];
9926 ops[1] = operands[2];
9927 ops[2] = operands[3];
9928 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
9931 [(set_attr "length" "8")])
9933 (define_expand "mve_vldrwq_gather_base_wb_fv4sf"
9934 [(match_operand:V4SI 0 "s_register_operand")
9935 (match_operand:V4SI 1 "s_register_operand")
9936 (match_operand:SI 2 "mve_vldrd_immediate")
9937 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9938 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9940 rtx ignore_result = gen_reg_rtx (V4SFmode);
9942 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0],
9943 operands[1], operands[2]));
9947 (define_expand "mve_vldrwq_gather_base_nowb_fv4sf"
9948 [(match_operand:V4SF 0 "s_register_operand")
9949 (match_operand:V4SI 1 "s_register_operand")
9950 (match_operand:SI 2 "mve_vldrd_immediate")
9951 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9952 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9954 rtx ignore_wb = gen_reg_rtx (V4SImode);
9956 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
9957 operands[1], operands[2]));
9962 ;; [vldrwq_gather_base_wb_f]
9964 (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
9965 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9966 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
9967 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9968 (mem:BLK (scratch))]
9970 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9971 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9974 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9977 ops[0] = operands[0];
9978 ops[1] = operands[2];
9979 ops[2] = operands[3];
9980 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9983 [(set_attr "length" "4")])
9985 (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
9986 [(match_operand:V4SI 0 "s_register_operand")
9987 (match_operand:V4SI 1 "s_register_operand")
9988 (match_operand:SI 2 "mve_vldrd_immediate")
9989 (match_operand:HI 3 "vpr_register_operand")
9990 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9991 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9993 rtx ignore_result = gen_reg_rtx (V4SFmode);
9995 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0],
9996 operands[1], operands[2],
10001 (define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf"
10002 [(match_operand:V4SF 0 "s_register_operand")
10003 (match_operand:V4SI 1 "s_register_operand")
10004 (match_operand:SI 2 "mve_vldrd_immediate")
10005 (match_operand:HI 3 "vpr_register_operand")
10006 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10007 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10009 rtx ignore_wb = gen_reg_rtx (V4SImode);
10011 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
10012 operands[1], operands[2],
10018 ;; [vldrwq_gather_base_wb_z_f]
10020 (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
10021 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10022 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10023 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10024 (match_operand:HI 4 "vpr_register_operand" "Up")
10025 (mem:BLK (scratch))]
10027 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10028 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10031 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10034 ops[0] = operands[0];
10035 ops[1] = operands[2];
10036 ops[2] = operands[3];
10037 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
10040 [(set_attr "length" "8")])
10042 (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
10043 [(match_operand:V2DI 0 "s_register_operand")
10044 (match_operand:V2DI 1 "s_register_operand")
10045 (match_operand:SI 2 "mve_vldrd_immediate")
10046 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10049 rtx ignore_result = gen_reg_rtx (V2DImode);
10051 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0],
10052 operands[1], operands[2]));
10056 (define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di"
10057 [(match_operand:V2DI 0 "s_register_operand")
10058 (match_operand:V2DI 1 "s_register_operand")
10059 (match_operand:SI 2 "mve_vldrd_immediate")
10060 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10063 rtx ignore_wb = gen_reg_rtx (V2DImode);
10065 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
10066 operands[1], operands[2]));
10072 ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
10074 (define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn"
10075 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10076 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10077 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10078 (mem:BLK (scratch))]
10080 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10081 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10087 ops[0] = operands[0];
10088 ops[1] = operands[2];
10089 ops[2] = operands[3];
10090 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
10093 [(set_attr "length" "4")])
10095 (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
10096 [(match_operand:V2DI 0 "s_register_operand")
10097 (match_operand:V2DI 1 "s_register_operand")
10098 (match_operand:SI 2 "mve_vldrd_immediate")
10099 (match_operand:HI 3 "vpr_register_operand")
10100 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10103 rtx ignore_result = gen_reg_rtx (V2DImode);
10105 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0],
10106 operands[1], operands[2],
10111 (define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di"
10112 [(match_operand:V2DI 0 "s_register_operand")
10113 (match_operand:V2DI 1 "s_register_operand")
10114 (match_operand:SI 2 "mve_vldrd_immediate")
10115 (match_operand:HI 3 "vpr_register_operand")
10116 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10119 rtx ignore_wb = gen_reg_rtx (V2DImode);
10121 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
10122 operands[1], operands[2],
10127 (define_insn "get_fpscr_nzcvqc"
10128 [(set (match_operand:SI 0 "register_operand" "=r")
10129 (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
10131 "vmrs\\t%0, FPSCR_nzcvqc"
10132 [(set_attr "type" "mve_move")])
10134 (define_insn "set_fpscr_nzcvqc"
10135 [(set (reg:SI VFPCC_REGNUM)
10136 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
10137 VUNSPEC_SET_FPSCR_NZCVQC))]
10139 "vmsr\\tFPSCR_nzcvqc, %0"
10140 [(set_attr "type" "mve_move")])
10143 ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
10145 (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
10146 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10147 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10148 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10149 (match_operand:HI 4 "vpr_register_operand" "Up")
10150 (mem:BLK (scratch))]
10152 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10153 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10159 ops[0] = operands[0];
10160 ops[1] = operands[2];
10161 ops[2] = operands[3];
10162 output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops);
10165 [(set_attr "length" "8")])
10167 ;; [vadciq_m_s, vadciq_m_u])
10169 (define_insn "mve_vadciq_m_<supf>v4si"
10170 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10171 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10172 (match_operand:V4SI 2 "s_register_operand" "w")
10173 (match_operand:V4SI 3 "s_register_operand" "w")
10174 (match_operand:HI 4 "vpr_register_operand" "Up")]
10176 (set (reg:SI VFPCC_REGNUM)
10177 (unspec:SI [(const_int 0)]
10181 "vpst\;vadcit.i32\t%q0, %q2, %q3"
10182 [(set_attr "type" "mve_move")
10183 (set_attr "length" "8")])
10186 ;; [vadciq_u, vadciq_s])
10188 (define_insn "mve_vadciq_<supf>v4si"
10189 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10190 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10191 (match_operand:V4SI 2 "s_register_operand" "w")]
10193 (set (reg:SI VFPCC_REGNUM)
10194 (unspec:SI [(const_int 0)]
10198 "vadci.i32\t%q0, %q1, %q2"
10199 [(set_attr "type" "mve_move")
10200 (set_attr "length" "4")])
10203 ;; [vadcq_m_s, vadcq_m_u])
10205 (define_insn "mve_vadcq_m_<supf>v4si"
10206 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10207 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10208 (match_operand:V4SI 2 "s_register_operand" "w")
10209 (match_operand:V4SI 3 "s_register_operand" "w")
10210 (match_operand:HI 4 "vpr_register_operand" "Up")]
10212 (set (reg:SI VFPCC_REGNUM)
10213 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10217 "vpst\;vadct.i32\t%q0, %q2, %q3"
10218 [(set_attr "type" "mve_move")
10219 (set_attr "length" "8")])
10222 ;; [vadcq_u, vadcq_s])
10224 (define_insn "mve_vadcq_<supf>v4si"
10225 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10226 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10227 (match_operand:V4SI 2 "s_register_operand" "w")]
10229 (set (reg:SI VFPCC_REGNUM)
10230 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10234 "vadc.i32\t%q0, %q1, %q2"
10235 [(set_attr "type" "mve_move")
10236 (set_attr "length" "4")
10237 (set_attr "conds" "set")])
10240 ;; [vsbciq_m_u, vsbciq_m_s])
10242 (define_insn "mve_vsbciq_m_<supf>v4si"
10243 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10244 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10245 (match_operand:V4SI 2 "s_register_operand" "w")
10246 (match_operand:V4SI 3 "s_register_operand" "w")
10247 (match_operand:HI 4 "vpr_register_operand" "Up")]
10249 (set (reg:SI VFPCC_REGNUM)
10250 (unspec:SI [(const_int 0)]
10254 "vpst\;vsbcit.i32\t%q0, %q2, %q3"
10255 [(set_attr "type" "mve_move")
10256 (set_attr "length" "8")])
10259 ;; [vsbciq_s, vsbciq_u])
10261 (define_insn "mve_vsbciq_<supf>v4si"
10262 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10263 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10264 (match_operand:V4SI 2 "s_register_operand" "w")]
10266 (set (reg:SI VFPCC_REGNUM)
10267 (unspec:SI [(const_int 0)]
10271 "vsbci.i32\t%q0, %q1, %q2"
10272 [(set_attr "type" "mve_move")
10273 (set_attr "length" "4")])
10276 ;; [vsbcq_m_u, vsbcq_m_s])
10278 (define_insn "mve_vsbcq_m_<supf>v4si"
10279 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10280 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10281 (match_operand:V4SI 2 "s_register_operand" "w")
10282 (match_operand:V4SI 3 "s_register_operand" "w")
10283 (match_operand:HI 4 "vpr_register_operand" "Up")]
10285 (set (reg:SI VFPCC_REGNUM)
10286 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10290 "vpst\;vsbct.i32\t%q0, %q2, %q3"
10291 [(set_attr "type" "mve_move")
10292 (set_attr "length" "8")])
10295 ;; [vsbcq_s, vsbcq_u])
10297 (define_insn "mve_vsbcq_<supf>v4si"
10298 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10299 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10300 (match_operand:V4SI 2 "s_register_operand" "w")]
10302 (set (reg:SI VFPCC_REGNUM)
10303 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10307 "vsbc.i32\t%q0, %q1, %q2"
10308 [(set_attr "type" "mve_move")
10309 (set_attr "length" "4")])
10314 (define_insn "mve_vst2q<mode>"
10315 [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
10316 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
10317 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10320 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10321 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10324 int regno = REGNO (operands[1]);
10325 ops[0] = gen_rtx_REG (TImode, regno);
10326 ops[1] = gen_rtx_REG (TImode, regno + 4);
10327 rtx reg = operands[0];
10328 while (reg && !REG_P (reg))
10329 reg = XEXP (reg, 0);
10330 gcc_assert (REG_P (reg));
10332 ops[3] = operands[0];
10333 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10334 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10337 [(set_attr "length" "8")])
10342 (define_insn "mve_vld2q<mode>"
10343 [(set (match_operand:OI 0 "s_register_operand" "=w")
10344 (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
10345 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10348 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10349 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10352 int regno = REGNO (operands[0]);
10353 ops[0] = gen_rtx_REG (TImode, regno);
10354 ops[1] = gen_rtx_REG (TImode, regno + 4);
10355 rtx reg = operands[1];
10356 while (reg && !REG_P (reg))
10357 reg = XEXP (reg, 0);
10358 gcc_assert (REG_P (reg));
10360 ops[3] = operands[1];
10361 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10362 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10365 [(set_attr "length" "8")])
10370 (define_insn "mve_vld4q<mode>"
10371 [(set (match_operand:XI 0 "s_register_operand" "=w")
10372 (unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
10373 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10376 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10377 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10380 int regno = REGNO (operands[0]);
10381 ops[0] = gen_rtx_REG (TImode, regno);
10382 ops[1] = gen_rtx_REG (TImode, regno+4);
10383 ops[2] = gen_rtx_REG (TImode, regno+8);
10384 ops[3] = gen_rtx_REG (TImode, regno + 12);
10385 rtx reg = operands[1];
10386 while (reg && !REG_P (reg))
10387 reg = XEXP (reg, 0);
10388 gcc_assert (REG_P (reg));
10390 ops[5] = operands[1];
10391 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10392 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10393 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10394 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
10397 [(set_attr "length" "16")])
10399 ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
10401 (define_insn "mve_vec_extract<mode><V_elem_l>"
10402 [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r")
10403 (vec_select:<V_elem>
10404 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
10405 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10406 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10407 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10409 if (BYTES_BIG_ENDIAN)
10411 int elt = INTVAL (operands[2]);
10412 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10413 operands[2] = GEN_INT (elt);
10415 return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
10417 [(set_attr "type" "mve_move")])
10419 (define_insn "mve_vec_extractv2didi"
10420 [(set (match_operand:DI 0 "nonimmediate_operand" "=r")
10422 (match_operand:V2DI 1 "s_register_operand" "w")
10423 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10426 int elt = INTVAL (operands[2]);
10427 if (BYTES_BIG_ENDIAN)
10431 return "vmov\t%Q0, %R0, %e1";
10433 return "vmov\t%Q0, %R0, %f1";
10435 [(set_attr "type" "mve_move")])
10437 (define_insn "*mve_vec_extract_sext_internal<mode>"
10438 [(set (match_operand:SI 0 "s_register_operand" "=r")
10440 (vec_select:<V_elem>
10441 (match_operand:MVE_2 1 "s_register_operand" "w")
10442 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10443 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10444 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10446 if (BYTES_BIG_ENDIAN)
10448 int elt = INTVAL (operands[2]);
10449 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10450 operands[2] = GEN_INT (elt);
10452 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
10454 [(set_attr "type" "mve_move")])
10456 (define_insn "*mve_vec_extract_zext_internal<mode>"
10457 [(set (match_operand:SI 0 "s_register_operand" "=r")
10459 (vec_select:<V_elem>
10460 (match_operand:MVE_2 1 "s_register_operand" "w")
10461 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10462 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10463 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10465 if (BYTES_BIG_ENDIAN)
10467 int elt = INTVAL (operands[2]);
10468 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10469 operands[2] = GEN_INT (elt);
10471 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
10473 [(set_attr "type" "mve_move")])
10476 ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
10478 (define_insn "mve_vec_set<mode>_internal"
10479 [(set (match_operand:VQ2 0 "s_register_operand" "=w")
10482 (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
10483 (match_operand:VQ2 3 "s_register_operand" "0")
10484 (match_operand:SI 2 "immediate_operand" "i")))]
10485 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10486 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10488 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10489 if (BYTES_BIG_ENDIAN)
10490 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10491 operands[2] = GEN_INT (elt);
10493 return "vmov.<V_sz_elem>\t%q0[%c2], %1";
10495 [(set_attr "type" "mve_move")])
10497 (define_insn "mve_vec_setv2di_internal"
10498 [(set (match_operand:V2DI 0 "s_register_operand" "=w")
10500 (vec_duplicate:V2DI
10501 (match_operand:DI 1 "nonimmediate_operand" "r"))
10502 (match_operand:V2DI 3 "s_register_operand" "0")
10503 (match_operand:SI 2 "immediate_operand" "i")))]
10506 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10507 if (BYTES_BIG_ENDIAN)
10511 return "vmov\t%e0, %Q1, %R1";
10513 return "vmov\t%f0, %J1, %K1";
10515 [(set_attr "type" "mve_move")])
10520 (define_insn "mve_uqrshll_sat<supf>_di"
10521 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10522 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10523 (match_operand:SI 2 "register_operand" "r")]
10526 "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
10527 [(set_attr "predicable" "yes")])
10532 (define_insn "mve_sqrshrl_sat<supf>_di"
10533 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10534 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10535 (match_operand:SI 2 "register_operand" "r")]
10538 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
10539 [(set_attr "predicable" "yes")])
10544 (define_insn "mve_uqrshl_si"
10545 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10546 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10547 (match_operand:SI 2 "register_operand" "r")]
10550 "uqrshl%?\\t%1, %2"
10551 [(set_attr "predicable" "yes")])
10556 (define_insn "mve_sqrshr_si"
10557 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10558 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10559 (match_operand:SI 2 "register_operand" "r")]
10562 "sqrshr%?\\t%1, %2"
10563 [(set_attr "predicable" "yes")])
10568 (define_insn "mve_uqshll_di"
10569 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10570 (us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10571 (match_operand:SI 2 "immediate_operand" "Pg")))]
10573 "uqshll%?\\t%Q1, %R1, %2"
10574 [(set_attr "predicable" "yes")])
10579 (define_insn "mve_urshrl_di"
10580 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10581 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10582 (match_operand:SI 2 "immediate_operand" "Pg")]
10585 "urshrl%?\\t%Q1, %R1, %2"
10586 [(set_attr "predicable" "yes")])
10591 (define_insn "mve_uqshl_si"
10592 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10593 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0")
10594 (match_operand:SI 2 "immediate_operand" "Pg")))]
10597 [(set_attr "predicable" "yes")])
10602 (define_insn "mve_urshr_si"
10603 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10604 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10605 (match_operand:SI 2 "immediate_operand" "Pg")]
10609 [(set_attr "predicable" "yes")])
10614 (define_insn "mve_sqshl_si"
10615 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10616 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0")
10617 (match_operand:SI 2 "immediate_operand" "Pg")))]
10620 [(set_attr "predicable" "yes")])
10625 (define_insn "mve_srshr_si"
10626 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10627 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0")
10628 (match_operand:SI 2 "immediate_operand" "Pg")]
10632 [(set_attr "predicable" "yes")])
10637 (define_insn "mve_srshrl_di"
10638 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10639 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10640 (match_operand:SI 2 "immediate_operand" "Pg")]
10643 "srshrl%?\\t%Q1, %R1, %2"
10644 [(set_attr "predicable" "yes")])
10649 (define_insn "mve_sqshll_di"
10650 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10651 (ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10652 (match_operand:SI 2 "immediate_operand" "Pg")))]
10654 "sqshll%?\\t%Q1, %R1, %2"
10655 [(set_attr "predicable" "yes")])
10658 ;; [vshlcq_m_u vshlcq_m_s]
10660 (define_expand "mve_vshlcq_m_vec_<supf><mode>"
10661 [(match_operand:MVE_2 0 "s_register_operand")
10662 (match_operand:MVE_2 1 "s_register_operand")
10663 (match_operand:SI 2 "s_register_operand")
10664 (match_operand:SI 3 "mve_imm_32")
10665 (match_operand:HI 4 "vpr_register_operand")
10666 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10669 rtx ignore_wb = gen_reg_rtx (SImode);
10670 emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1],
10671 operands[2], operands[3],
10676 (define_expand "mve_vshlcq_m_carry_<supf><mode>"
10677 [(match_operand:SI 0 "s_register_operand")
10678 (match_operand:MVE_2 1 "s_register_operand")
10679 (match_operand:SI 2 "s_register_operand")
10680 (match_operand:SI 3 "mve_imm_32")
10681 (match_operand:HI 4 "vpr_register_operand")
10682 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10685 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10686 emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0],
10687 operands[1], operands[2],
10688 operands[3], operands[4]));
10692 (define_insn "mve_vshlcq_m_<supf><mode>"
10693 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10694 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10695 (match_operand:SI 3 "s_register_operand" "1")
10696 (match_operand:SI 4 "mve_imm_32" "Rf")
10697 (match_operand:HI 5 "vpr_register_operand" "Up")]
10699 (set (match_operand:SI 1 "s_register_operand" "=r")
10700 (unspec:SI [(match_dup 2)
10707 "vpst\;vshlct\t%q0, %1, %4"
10708 [(set_attr "type" "mve_move")
10709 (set_attr "length" "8")])
10711 ;; CDE instructions on MVE registers.
10713 (define_insn "arm_vcx1qv16qi"
10714 [(set (match_operand:V16QI 0 "register_operand" "=t")
10715 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10716 (match_operand:SI 2 "const_int_mve_cde1_operand" "i")]
10718 "TARGET_CDE && TARGET_HAVE_MVE"
10719 "vcx1\\tp%c1, %q0, #%c2"
10720 [(set_attr "type" "coproc")]
10723 (define_insn "arm_vcx1qav16qi"
10724 [(set (match_operand:V16QI 0 "register_operand" "=t")
10725 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10726 (match_operand:V16QI 2 "register_operand" "0")
10727 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")]
10729 "TARGET_CDE && TARGET_HAVE_MVE"
10730 "vcx1a\\tp%c1, %q0, #%c3"
10731 [(set_attr "type" "coproc")]
10734 (define_insn "arm_vcx2qv16qi"
10735 [(set (match_operand:V16QI 0 "register_operand" "=t")
10736 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10737 (match_operand:V16QI 2 "register_operand" "t")
10738 (match_operand:SI 3 "const_int_mve_cde2_operand" "i")]
10740 "TARGET_CDE && TARGET_HAVE_MVE"
10741 "vcx2\\tp%c1, %q0, %q2, #%c3"
10742 [(set_attr "type" "coproc")]
10745 (define_insn "arm_vcx2qav16qi"
10746 [(set (match_operand:V16QI 0 "register_operand" "=t")
10747 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10748 (match_operand:V16QI 2 "register_operand" "0")
10749 (match_operand:V16QI 3 "register_operand" "t")
10750 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")]
10752 "TARGET_CDE && TARGET_HAVE_MVE"
10753 "vcx2a\\tp%c1, %q0, %q3, #%c4"
10754 [(set_attr "type" "coproc")]
10757 (define_insn "arm_vcx3qv16qi"
10758 [(set (match_operand:V16QI 0 "register_operand" "=t")
10759 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10760 (match_operand:V16QI 2 "register_operand" "t")
10761 (match_operand:V16QI 3 "register_operand" "t")
10762 (match_operand:SI 4 "const_int_mve_cde3_operand" "i")]
10764 "TARGET_CDE && TARGET_HAVE_MVE"
10765 "vcx3\\tp%c1, %q0, %q2, %q3, #%c4"
10766 [(set_attr "type" "coproc")]
10769 (define_insn "arm_vcx3qav16qi"
10770 [(set (match_operand:V16QI 0 "register_operand" "=t")
10771 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10772 (match_operand:V16QI 2 "register_operand" "0")
10773 (match_operand:V16QI 3 "register_operand" "t")
10774 (match_operand:V16QI 4 "register_operand" "t")
10775 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")]
10777 "TARGET_CDE && TARGET_HAVE_MVE"
10778 "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5"
10779 [(set_attr "type" "coproc")]
10782 (define_insn "arm_vcx1q<a>_p_v16qi"
10783 [(set (match_operand:V16QI 0 "register_operand" "=t")
10784 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10785 (match_operand:V16QI 2 "register_operand" "0")
10786 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")
10787 (match_operand:HI 4 "vpr_register_operand" "Up")]
10789 "TARGET_CDE && TARGET_HAVE_MVE"
10790 "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3"
10791 [(set_attr "type" "coproc")
10792 (set_attr "length" "8")]
10795 (define_insn "arm_vcx2q<a>_p_v16qi"
10796 [(set (match_operand:V16QI 0 "register_operand" "=t")
10797 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10798 (match_operand:V16QI 2 "register_operand" "0")
10799 (match_operand:V16QI 3 "register_operand" "t")
10800 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")
10801 (match_operand:HI 5 "vpr_register_operand" "Up")]
10803 "TARGET_CDE && TARGET_HAVE_MVE"
10804 "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4"
10805 [(set_attr "type" "coproc")
10806 (set_attr "length" "8")]
10809 (define_insn "arm_vcx3q<a>_p_v16qi"
10810 [(set (match_operand:V16QI 0 "register_operand" "=t")
10811 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10812 (match_operand:V16QI 2 "register_operand" "0")
10813 (match_operand:V16QI 3 "register_operand" "t")
10814 (match_operand:V16QI 4 "register_operand" "t")
10815 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")
10816 (match_operand:HI 6 "vpr_register_operand" "Up")]
10818 "TARGET_CDE && TARGET_HAVE_MVE"
10819 "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5"
10820 [(set_attr "type" "coproc")
10821 (set_attr "length" "8")]
10824 (define_insn "*movmisalign<mode>_mve_store"
10825 [(set (match_operand:MVE_VLD_ST 0 "neon_permissive_struct_operand" "=Ux")
10826 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "s_register_operand" " w")]
10827 UNSPEC_MISALIGNED_ACCESS))]
10828 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10829 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))
10830 && !BYTES_BIG_ENDIAN && unaligned_access"
10831 "vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0"
10832 [(set_attr "type" "mve_store")]
10836 (define_insn "*movmisalign<mode>_mve_load"
10837 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
10838 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "neon_permissive_struct_operand" " Ux")]
10839 UNSPEC_MISALIGNED_ACCESS))]
10840 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10841 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))
10842 && !BYTES_BIG_ENDIAN && unaligned_access"
10843 "vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1"
10844 [(set_attr "type" "mve_load")]