1 ;; Arm M-profile Vector Extension Machine Description
2 ;; Copyright (C) 2019-2020 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,Uxi,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)
45 int regno = (which_alternative == 7)
46 ? REGNO (operands[1]) : REGNO (operands[0]);
50 if (<MODE>mode == V2DFmode || <MODE>mode == V2DImode)
52 if (which_alternative == 7)
54 ops[1] = gen_rtx_REG (DImode, regno);
55 output_asm_insn ("vstr.64\t%P1, %E0",ops);
59 ops[0] = gen_rtx_REG (DImode, regno);
60 output_asm_insn ("vldr.64\t%P0, %E1",ops);
63 else if (<MODE>mode == TImode)
65 if (which_alternative == 7)
66 output_asm_insn ("vstr.64\t%q1, %E0",ops);
68 output_asm_insn ("vldr.64\t%q0, %E1",ops);
72 if (which_alternative == 7)
74 ops[1] = gen_rtx_REG (TImode, regno);
75 output_asm_insn ("vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0",ops);
79 ops[0] = gen_rtx_REG (TImode, regno);
80 output_asm_insn ("vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1",ops);
85 switch (which_alternative)
88 return "vmov\t%q0, %q1";
90 return "vmov\t%e0, %Q1, %R1 @ <mode>\;vmov\t%f0, %J1, %K1";
92 return "vmov\t%Q0, %R0, %e1 @ <mode>\;vmov\t%J0, %K0, %f1";
94 return output_move_quad (operands);
96 return output_move_neon (operands);
102 [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_move,mve_store,mve_load")
103 (set_attr "length" "4,8,8,4,8,8,4,4,4")
104 (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*,*")
105 (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*,*")])
107 (define_insn "*mve_mov<mode>"
108 [(set (match_operand:MVE_types 0 "s_register_operand" "=w,w")
109 (vec_duplicate:MVE_types
110 (match_operand:SI 1 "nonmemory_operand" "r,i")))]
111 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
113 if (which_alternative == 0)
114 return "vdup.<V_sz_elem>\t%q0, %1";
115 return "vmov.<V_sz_elem>\t%q0, %1";
117 [(set_attr "length" "4,4")
118 (set_attr "type" "mve_move,mve_move")])
123 (define_insn "mve_vst4q<mode>"
124 [(set (match_operand:XI 0 "neon_struct_operand" "=Um")
125 (unspec:XI [(match_operand:XI 1 "s_register_operand" "w")
126 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
132 int regno = REGNO (operands[1]);
133 ops[0] = gen_rtx_REG (TImode, regno);
134 ops[1] = gen_rtx_REG (TImode, regno+4);
135 ops[2] = gen_rtx_REG (TImode, regno+8);
136 ops[3] = gen_rtx_REG (TImode, regno+12);
137 rtx reg = operands[0];
138 while (reg && !REG_P (reg))
140 gcc_assert (REG_P (reg));
142 ops[5] = operands[0];
143 /* Here in first three instructions data is stored to ops[4]'s location but
144 in the fourth instruction data is stored to operands[0], this is to
145 support the writeback. */
146 output_asm_insn ("vst40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
147 "vst41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
148 "vst42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
149 "vst43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
152 [(set_attr "length" "16")])
157 (define_insn "mve_vrndq_m_f<mode>"
159 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
160 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
161 (match_operand:MVE_0 2 "s_register_operand" "w")
162 (match_operand:HI 3 "vpr_register_operand" "Up")]
165 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
166 "vpst\;vrintzt.f%#<V_sz_elem> %q0, %q2"
167 [(set_attr "type" "mve_move")
168 (set_attr "length""8")])
173 (define_insn "mve_vrndxq_f<mode>"
175 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
176 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
179 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
180 "vrintx.f%#<V_sz_elem> %q0, %q1"
181 [(set_attr "type" "mve_move")
187 (define_insn "mve_vrndq_f<mode>"
189 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
190 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
193 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
194 "vrintz.f%#<V_sz_elem> %q0, %q1"
195 [(set_attr "type" "mve_move")
201 (define_insn "mve_vrndpq_f<mode>"
203 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
204 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
207 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
208 "vrintp.f%#<V_sz_elem> %q0, %q1"
209 [(set_attr "type" "mve_move")
215 (define_insn "mve_vrndnq_f<mode>"
217 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
218 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
221 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
222 "vrintn.f%#<V_sz_elem> %q0, %q1"
223 [(set_attr "type" "mve_move")
229 (define_insn "mve_vrndmq_f<mode>"
231 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
232 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
235 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
236 "vrintm.f%#<V_sz_elem> %q0, %q1"
237 [(set_attr "type" "mve_move")
243 (define_insn "mve_vrndaq_f<mode>"
245 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
246 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
249 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
250 "vrinta.f%#<V_sz_elem> %q0, %q1"
251 [(set_attr "type" "mve_move")
257 (define_insn "mve_vrev64q_f<mode>"
259 (set (match_operand:MVE_0 0 "s_register_operand" "=&w")
260 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
263 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
264 "vrev64.%#<V_sz_elem> %q0, %q1"
265 [(set_attr "type" "mve_move")
271 (define_insn "mve_vnegq_f<mode>"
273 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
274 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
277 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
278 "vneg.f%#<V_sz_elem> %q0, %q1"
279 [(set_attr "type" "mve_move")
285 (define_insn "mve_vdupq_n_f<mode>"
287 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
288 (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
291 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
292 "vdup.%#<V_sz_elem> %q0, %1"
293 [(set_attr "type" "mve_move")
299 (define_insn "mve_vabsq_f<mode>"
301 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
302 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
305 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
306 "vabs.f%#<V_sz_elem> %q0, %q1"
307 [(set_attr "type" "mve_move")
313 (define_insn "mve_vrev32q_fv8hf"
315 (set (match_operand:V8HF 0 "s_register_operand" "=w")
316 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")]
319 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
321 [(set_attr "type" "mve_move")
326 (define_insn "mve_vcvttq_f32_f16v4sf"
328 (set (match_operand:V4SF 0 "s_register_operand" "=w")
329 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
332 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
333 "vcvtt.f32.f16 %q0, %q1"
334 [(set_attr "type" "mve_move")
340 (define_insn "mve_vcvtbq_f32_f16v4sf"
342 (set (match_operand:V4SF 0 "s_register_operand" "=w")
343 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
346 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
347 "vcvtb.f32.f16 %q0, %q1"
348 [(set_attr "type" "mve_move")
352 ;; [vcvtq_to_f_s, vcvtq_to_f_u])
354 (define_insn "mve_vcvtq_to_f_<supf><mode>"
356 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
357 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
360 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
361 "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q1"
362 [(set_attr "type" "mve_move")
366 ;; [vrev64q_u, vrev64q_s])
368 (define_insn "mve_vrev64q_<supf><mode>"
370 (set (match_operand:MVE_2 0 "s_register_operand" "=&w")
371 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
375 "vrev64.%#<V_sz_elem> %q0, %q1"
376 [(set_attr "type" "mve_move")
380 ;; [vcvtq_from_f_s, vcvtq_from_f_u])
382 (define_insn "mve_vcvtq_from_f_<supf><mode>"
384 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
385 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
388 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
389 "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
390 [(set_attr "type" "mve_move")
394 (define_insn "mve_vqnegq_s<mode>"
396 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
397 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
401 "vqneg.s%#<V_sz_elem> %q0, %q1"
402 [(set_attr "type" "mve_move")
408 (define_insn "mve_vqabsq_s<mode>"
410 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
411 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
415 "vqabs.s%#<V_sz_elem> %q0, %q1"
416 [(set_attr "type" "mve_move")
422 (define_insn "mve_vnegq_s<mode>"
424 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
425 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
429 "vneg.s%#<V_sz_elem> %q0, %q1"
430 [(set_attr "type" "mve_move")
434 ;; [vmvnq_u, vmvnq_s])
436 (define_insn "mve_vmvnq_u<mode>"
438 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
439 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
443 [(set_attr "type" "mve_move")
445 (define_expand "mve_vmvnq_s<mode>"
447 (set (match_operand:MVE_2 0 "s_register_operand")
448 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand")))
454 ;; [vdupq_n_u, vdupq_n_s])
456 (define_insn "mve_vdupq_n_<supf><mode>"
458 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
459 (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
463 "vdup.%#<V_sz_elem> %q0, %1"
464 [(set_attr "type" "mve_move")
468 ;; [vclzq_u, vclzq_s])
470 (define_insn "mve_vclzq_<supf><mode>"
472 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
473 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
477 "vclz.i%#<V_sz_elem> %q0, %q1"
478 [(set_attr "type" "mve_move")
484 (define_insn "mve_vclsq_s<mode>"
486 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
487 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
491 "vcls.s%#<V_sz_elem> %q0, %q1"
492 [(set_attr "type" "mve_move")
496 ;; [vaddvq_s, vaddvq_u])
498 (define_insn "mve_vaddvq_<supf><mode>"
500 (set (match_operand:SI 0 "s_register_operand" "=Te")
501 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
505 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
506 [(set_attr "type" "mve_move")
512 (define_insn "mve_vabsq_s<mode>"
514 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
515 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
519 "vabs.s%#<V_sz_elem>\t%q0, %q1"
520 [(set_attr "type" "mve_move")
524 ;; [vrev32q_u, vrev32q_s])
526 (define_insn "mve_vrev32q_<supf><mode>"
528 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
529 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
533 "vrev32.%#<V_sz_elem>\t%q0, %q1"
534 [(set_attr "type" "mve_move")
538 ;; [vmovltq_u, vmovltq_s])
540 (define_insn "mve_vmovltq_<supf><mode>"
542 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
543 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
547 "vmovlt.<supf>%#<V_sz_elem> %q0, %q1"
548 [(set_attr "type" "mve_move")
552 ;; [vmovlbq_s, vmovlbq_u])
554 (define_insn "mve_vmovlbq_<supf><mode>"
556 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
557 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
561 "vmovlb.<supf>%#<V_sz_elem> %q0, %q1"
562 [(set_attr "type" "mve_move")
566 ;; [vcvtpq_s, vcvtpq_u])
568 (define_insn "mve_vcvtpq_<supf><mode>"
570 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
571 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
574 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
575 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
576 [(set_attr "type" "mve_move")
580 ;; [vcvtnq_s, vcvtnq_u])
582 (define_insn "mve_vcvtnq_<supf><mode>"
584 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
585 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
588 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
589 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
590 [(set_attr "type" "mve_move")
594 ;; [vcvtmq_s, vcvtmq_u])
596 (define_insn "mve_vcvtmq_<supf><mode>"
598 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
599 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
602 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
603 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
604 [(set_attr "type" "mve_move")
608 ;; [vcvtaq_u, vcvtaq_s])
610 (define_insn "mve_vcvtaq_<supf><mode>"
612 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
613 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
616 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
617 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
618 [(set_attr "type" "mve_move")
622 ;; [vmvnq_n_u, vmvnq_n_s])
624 (define_insn "mve_vmvnq_n_<supf><mode>"
626 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
627 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
631 "vmvn.i%#<V_sz_elem> %q0, %1"
632 [(set_attr "type" "mve_move")
636 ;; [vrev16q_u, vrev16q_s])
638 (define_insn "mve_vrev16q_<supf>v16qi"
640 (set (match_operand:V16QI 0 "s_register_operand" "=w")
641 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
646 [(set_attr "type" "mve_move")
650 ;; [vaddlvq_s vaddlvq_u])
652 (define_insn "mve_vaddlvq_<supf>v4si"
654 (set (match_operand:DI 0 "s_register_operand" "=r")
655 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
659 "vaddlv.<supf>32 %Q0, %R0, %q1"
660 [(set_attr "type" "mve_move")
664 ;; [vctp8q vctp16q vctp32q vctp64q])
666 (define_insn "mve_vctp<mode1>qhi"
668 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
669 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
674 [(set_attr "type" "mve_move")
680 (define_insn "mve_vpnothi"
682 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
683 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
688 [(set_attr "type" "mve_move")
694 (define_insn "mve_vsubq_n_f<mode>"
696 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
697 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
698 (match_operand:<V_elem> 2 "s_register_operand" "r")]
701 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
702 "vsub.f<V_sz_elem> %q0, %q1, %2"
703 [(set_attr "type" "mve_move")
709 (define_insn "mve_vbrsrq_n_f<mode>"
711 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
712 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
713 (match_operand:SI 2 "s_register_operand" "r")]
716 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
717 "vbrsr.<V_sz_elem> %q0, %q1, %2"
718 [(set_attr "type" "mve_move")
722 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
724 (define_insn "mve_vcvtq_n_to_f_<supf><mode>"
726 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
727 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
728 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
731 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
732 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
733 [(set_attr "type" "mve_move")
738 (define_insn "mve_vcreateq_f<mode>"
740 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
741 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
742 (match_operand:DI 2 "s_register_operand" "r")]
745 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
746 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
747 [(set_attr "type" "mve_move")
748 (set_attr "length""8")])
751 ;; [vcreateq_u, vcreateq_s])
753 (define_insn "mve_vcreateq_<supf><mode>"
755 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
756 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
757 (match_operand:DI 2 "s_register_operand" "r")]
761 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
762 [(set_attr "type" "mve_move")
763 (set_attr "length""8")])
766 ;; [vshrq_n_s, vshrq_n_u])
768 (define_insn "mve_vshrq_n_<supf><mode>"
770 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
771 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
772 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
776 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
777 [(set_attr "type" "mve_move")
781 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
783 (define_insn "mve_vcvtq_n_from_f_<supf><mode>"
785 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
786 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
787 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
790 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
791 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
792 [(set_attr "type" "mve_move")
798 (define_insn "mve_vaddlvq_p_<supf>v4si"
800 (set (match_operand:DI 0 "s_register_operand" "=r")
801 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
802 (match_operand:HI 2 "vpr_register_operand" "Up")]
806 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
807 [(set_attr "type" "mve_move")
808 (set_attr "length""8")])
811 ;; [vcmpneq_u, vcmpneq_s])
813 (define_insn "mve_vcmpneq_<supf><mode>"
815 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
816 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
817 (match_operand:MVE_2 2 "s_register_operand" "w")]
821 "vcmp.i%#<V_sz_elem> ne, %q1, %q2"
822 [(set_attr "type" "mve_move")
826 ;; [vshlq_s, vshlq_u])
828 (define_insn "mve_vshlq_<supf><mode>"
830 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
831 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
832 (match_operand:MVE_2 2 "s_register_operand" "w")]
836 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
837 [(set_attr "type" "mve_move")
841 ;; [vabdq_s, vabdq_u])
843 (define_insn "mve_vabdq_<supf><mode>"
845 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
846 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
847 (match_operand:MVE_2 2 "s_register_operand" "w")]
851 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
852 [(set_attr "type" "mve_move")
856 ;; [vaddq_n_s, vaddq_n_u])
858 (define_insn "mve_vaddq_n_<supf><mode>"
860 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
861 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
862 (match_operand:<V_elem> 2 "s_register_operand" "r")]
866 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
867 [(set_attr "type" "mve_move")
871 ;; [vaddvaq_s, vaddvaq_u])
873 (define_insn "mve_vaddvaq_<supf><mode>"
875 (set (match_operand:SI 0 "s_register_operand" "=Te")
876 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
877 (match_operand:MVE_2 2 "s_register_operand" "w")]
881 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
882 [(set_attr "type" "mve_move")
886 ;; [vaddvq_p_u, vaddvq_p_s])
888 (define_insn "mve_vaddvq_p_<supf><mode>"
890 (set (match_operand:SI 0 "s_register_operand" "=Te")
891 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
892 (match_operand:HI 2 "vpr_register_operand" "Up")]
896 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
897 [(set_attr "type" "mve_move")
898 (set_attr "length""8")])
901 ;; [vandq_u, vandq_s])
903 ;; signed and unsigned versions are the same: define the unsigned
904 ;; insn, and use an expander for the signed one as we still reference
905 ;; both names from arm_mve.h.
906 ;; We use the same code as in neon.md (TODO: avoid this duplication).
907 (define_insn "mve_vandq_u<mode>"
909 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
910 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
911 (match_operand:MVE_2 2 "neon_inv_logic_op2" "w,DL")))
916 * return neon_output_logic_immediate (\"vand\", &operands[2], <MODE>mode, 1, VALID_NEON_QREG_MODE (<MODE>mode));"
917 [(set_attr "type" "mve_move")
919 (define_expand "mve_vandq_s<mode>"
921 (set (match_operand:MVE_2 0 "s_register_operand")
922 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
923 (match_operand:MVE_2 2 "neon_inv_logic_op2")))
929 ;; [vbicq_s, vbicq_u])
931 (define_insn "mve_vbicq_u<mode>"
933 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
934 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
935 (match_operand:MVE_2 1 "s_register_operand" "w")))
938 "vbic\t%q0, %q1, %q2"
939 [(set_attr "type" "mve_move")
942 (define_expand "mve_vbicq_s<mode>"
944 (set (match_operand:MVE_2 0 "s_register_operand")
945 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
946 (match_operand:MVE_2 1 "s_register_operand")))
952 ;; [vbrsrq_n_u, vbrsrq_n_s])
954 (define_insn "mve_vbrsrq_n_<supf><mode>"
956 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
957 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
958 (match_operand:SI 2 "s_register_operand" "r")]
962 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
963 [(set_attr "type" "mve_move")
967 ;; [vcaddq_rot270_s, vcaddq_rot270_u])
969 (define_insn "mve_vcaddq_rot270_<supf><mode>"
971 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
972 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
973 (match_operand:MVE_2 2 "s_register_operand" "w")]
977 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #270"
978 [(set_attr "type" "mve_move")
982 ;; [vcaddq_rot90_u, vcaddq_rot90_s])
984 (define_insn "mve_vcaddq_rot90_<supf><mode>"
986 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
987 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
988 (match_operand:MVE_2 2 "s_register_operand" "w")]
992 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #90"
993 [(set_attr "type" "mve_move")
999 (define_insn "mve_vcmpcsq_n_u<mode>"
1001 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1002 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1003 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1007 "vcmp.u%#<V_sz_elem> cs, %q1, %2"
1008 [(set_attr "type" "mve_move")
1014 (define_insn "mve_vcmpcsq_u<mode>"
1016 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1017 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1018 (match_operand:MVE_2 2 "s_register_operand" "w")]
1022 "vcmp.u%#<V_sz_elem> cs, %q1, %q2"
1023 [(set_attr "type" "mve_move")
1027 ;; [vcmpeqq_n_s, vcmpeqq_n_u])
1029 (define_insn "mve_vcmpeqq_n_<supf><mode>"
1031 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1032 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1033 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1037 "vcmp.i%#<V_sz_elem> eq, %q1, %2"
1038 [(set_attr "type" "mve_move")
1042 ;; [vcmpeqq_u, vcmpeqq_s])
1044 (define_insn "mve_vcmpeqq_<supf><mode>"
1046 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1047 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1048 (match_operand:MVE_2 2 "s_register_operand" "w")]
1052 "vcmp.i%#<V_sz_elem> eq, %q1, %q2"
1053 [(set_attr "type" "mve_move")
1059 (define_insn "mve_vcmpgeq_n_s<mode>"
1061 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1062 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1063 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1067 "vcmp.s%#<V_sz_elem> ge, %q1, %2"
1068 [(set_attr "type" "mve_move")
1074 (define_insn "mve_vcmpgeq_s<mode>"
1076 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1077 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1078 (match_operand:MVE_2 2 "s_register_operand" "w")]
1082 "vcmp.s%#<V_sz_elem> ge, %q1, %q2"
1083 [(set_attr "type" "mve_move")
1089 (define_insn "mve_vcmpgtq_n_s<mode>"
1091 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1092 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1093 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1097 "vcmp.s%#<V_sz_elem> gt, %q1, %2"
1098 [(set_attr "type" "mve_move")
1104 (define_insn "mve_vcmpgtq_s<mode>"
1106 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1107 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1108 (match_operand:MVE_2 2 "s_register_operand" "w")]
1112 "vcmp.s%#<V_sz_elem> gt, %q1, %q2"
1113 [(set_attr "type" "mve_move")
1119 (define_insn "mve_vcmphiq_n_u<mode>"
1121 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1122 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1123 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1127 "vcmp.u%#<V_sz_elem> hi, %q1, %2"
1128 [(set_attr "type" "mve_move")
1134 (define_insn "mve_vcmphiq_u<mode>"
1136 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1137 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1138 (match_operand:MVE_2 2 "s_register_operand" "w")]
1142 "vcmp.u%#<V_sz_elem> hi, %q1, %q2"
1143 [(set_attr "type" "mve_move")
1149 (define_insn "mve_vcmpleq_n_s<mode>"
1151 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1152 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1153 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1157 "vcmp.s%#<V_sz_elem> le, %q1, %2"
1158 [(set_attr "type" "mve_move")
1164 (define_insn "mve_vcmpleq_s<mode>"
1166 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1167 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1168 (match_operand:MVE_2 2 "s_register_operand" "w")]
1172 "vcmp.s%#<V_sz_elem> le, %q1, %q2"
1173 [(set_attr "type" "mve_move")
1179 (define_insn "mve_vcmpltq_n_s<mode>"
1181 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1182 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1183 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1187 "vcmp.s%#<V_sz_elem> lt, %q1, %2"
1188 [(set_attr "type" "mve_move")
1194 (define_insn "mve_vcmpltq_s<mode>"
1196 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1197 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1198 (match_operand:MVE_2 2 "s_register_operand" "w")]
1202 "vcmp.s%#<V_sz_elem> lt, %q1, %q2"
1203 [(set_attr "type" "mve_move")
1207 ;; [vcmpneq_n_u, vcmpneq_n_s])
1209 (define_insn "mve_vcmpneq_n_<supf><mode>"
1211 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1212 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1213 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1217 "vcmp.i%#<V_sz_elem> ne, %q1, %2"
1218 [(set_attr "type" "mve_move")
1222 ;; [veorq_u, veorq_s])
1224 (define_insn "mve_veorq_u<mode>"
1226 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1227 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1228 (match_operand:MVE_2 2 "s_register_operand" "w")))
1231 "veor\t%q0, %q1, %q2"
1232 [(set_attr "type" "mve_move")
1234 (define_expand "mve_veorq_s<mode>"
1236 (set (match_operand:MVE_2 0 "s_register_operand")
1237 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1238 (match_operand:MVE_2 2 "s_register_operand")))
1244 ;; [vhaddq_n_u, vhaddq_n_s])
1246 (define_insn "mve_vhaddq_n_<supf><mode>"
1248 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1249 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1250 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1254 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1255 [(set_attr "type" "mve_move")
1259 ;; [vhaddq_s, vhaddq_u])
1261 (define_insn "mve_vhaddq_<supf><mode>"
1263 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1264 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1265 (match_operand:MVE_2 2 "s_register_operand" "w")]
1269 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1270 [(set_attr "type" "mve_move")
1274 ;; [vhcaddq_rot270_s])
1276 (define_insn "mve_vhcaddq_rot270_s<mode>"
1278 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1279 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1280 (match_operand:MVE_2 2 "s_register_operand" "w")]
1284 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1285 [(set_attr "type" "mve_move")
1289 ;; [vhcaddq_rot90_s])
1291 (define_insn "mve_vhcaddq_rot90_s<mode>"
1293 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1294 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1295 (match_operand:MVE_2 2 "s_register_operand" "w")]
1299 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1300 [(set_attr "type" "mve_move")
1304 ;; [vhsubq_n_u, vhsubq_n_s])
1306 (define_insn "mve_vhsubq_n_<supf><mode>"
1308 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1309 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1310 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1314 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1315 [(set_attr "type" "mve_move")
1319 ;; [vhsubq_s, vhsubq_u])
1321 (define_insn "mve_vhsubq_<supf><mode>"
1323 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1324 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1325 (match_operand:MVE_2 2 "s_register_operand" "w")]
1329 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1330 [(set_attr "type" "mve_move")
1336 (define_insn "mve_vmaxaq_s<mode>"
1338 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1339 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1340 (match_operand:MVE_2 2 "s_register_operand" "w")]
1344 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1345 [(set_attr "type" "mve_move")
1351 (define_insn "mve_vmaxavq_s<mode>"
1353 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1354 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1355 (match_operand:MVE_2 2 "s_register_operand" "w")]
1359 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1360 [(set_attr "type" "mve_move")
1364 ;; [vmaxq_u, vmaxq_s])
1366 (define_insn "mve_vmaxq_s<mode>"
1368 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1369 (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1370 (match_operand:MVE_2 2 "s_register_operand" "w")))
1373 "vmax.%#<V_s_elem>\t%q0, %q1, %q2"
1374 [(set_attr "type" "mve_move")
1377 (define_insn "mve_vmaxq_u<mode>"
1379 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1380 (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1381 (match_operand:MVE_2 2 "s_register_operand" "w")))
1384 "vmax.%#<V_u_elem>\t%q0, %q1, %q2"
1385 [(set_attr "type" "mve_move")
1389 ;; [vmaxvq_u, vmaxvq_s])
1391 (define_insn "mve_vmaxvq_<supf><mode>"
1393 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1394 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1395 (match_operand:MVE_2 2 "s_register_operand" "w")]
1399 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1400 [(set_attr "type" "mve_move")
1406 (define_insn "mve_vminaq_s<mode>"
1408 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1409 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1410 (match_operand:MVE_2 2 "s_register_operand" "w")]
1414 "vmina.s%#<V_sz_elem>\t%q0, %q2"
1415 [(set_attr "type" "mve_move")
1421 (define_insn "mve_vminavq_s<mode>"
1423 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1424 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1425 (match_operand:MVE_2 2 "s_register_operand" "w")]
1429 "vminav.s%#<V_sz_elem>\t%0, %q2"
1430 [(set_attr "type" "mve_move")
1434 ;; [vminq_s, vminq_u])
1436 (define_insn "mve_vminq_s<mode>"
1438 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1439 (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1440 (match_operand:MVE_2 2 "s_register_operand" "w")))
1443 "vmin.%#<V_s_elem>\t%q0, %q1, %q2"
1444 [(set_attr "type" "mve_move")
1447 (define_insn "mve_vminq_u<mode>"
1449 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1450 (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1451 (match_operand:MVE_2 2 "s_register_operand" "w")))
1454 "vmin.%#<V_u_elem>\t%q0, %q1, %q2"
1455 [(set_attr "type" "mve_move")
1459 ;; [vminvq_u, vminvq_s])
1461 (define_insn "mve_vminvq_<supf><mode>"
1463 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1464 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1465 (match_operand:MVE_2 2 "s_register_operand" "w")]
1469 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
1470 [(set_attr "type" "mve_move")
1474 ;; [vmladavq_u, vmladavq_s])
1476 (define_insn "mve_vmladavq_<supf><mode>"
1478 (set (match_operand:SI 0 "s_register_operand" "=Te")
1479 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1480 (match_operand:MVE_2 2 "s_register_operand" "w")]
1484 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
1485 [(set_attr "type" "mve_move")
1491 (define_insn "mve_vmladavxq_s<mode>"
1493 (set (match_operand:SI 0 "s_register_operand" "=Te")
1494 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1495 (match_operand:MVE_2 2 "s_register_operand" "w")]
1499 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1500 [(set_attr "type" "mve_move")
1506 (define_insn "mve_vmlsdavq_s<mode>"
1508 (set (match_operand:SI 0 "s_register_operand" "=Te")
1509 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1510 (match_operand:MVE_2 2 "s_register_operand" "w")]
1514 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
1515 [(set_attr "type" "mve_move")
1521 (define_insn "mve_vmlsdavxq_s<mode>"
1523 (set (match_operand:SI 0 "s_register_operand" "=Te")
1524 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1525 (match_operand:MVE_2 2 "s_register_operand" "w")]
1529 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1530 [(set_attr "type" "mve_move")
1534 ;; [vmulhq_s, vmulhq_u])
1536 (define_insn "mve_vmulhq_<supf><mode>"
1538 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1539 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1540 (match_operand:MVE_2 2 "s_register_operand" "w")]
1544 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1545 [(set_attr "type" "mve_move")
1549 ;; [vmullbq_int_u, vmullbq_int_s])
1551 (define_insn "mve_vmullbq_int_<supf><mode>"
1553 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1554 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1555 (match_operand:MVE_2 2 "s_register_operand" "w")]
1559 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1560 [(set_attr "type" "mve_move")
1564 ;; [vmulltq_int_u, vmulltq_int_s])
1566 (define_insn "mve_vmulltq_int_<supf><mode>"
1568 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1569 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1570 (match_operand:MVE_2 2 "s_register_operand" "w")]
1574 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1575 [(set_attr "type" "mve_move")
1579 ;; [vmulq_n_u, vmulq_n_s])
1581 (define_insn "mve_vmulq_n_<supf><mode>"
1583 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1584 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1585 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1589 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
1590 [(set_attr "type" "mve_move")
1594 ;; [vmulq_u, vmulq_s])
1596 (define_insn "mve_vmulq_<supf><mode>"
1598 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1599 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1600 (match_operand:MVE_2 2 "s_register_operand" "w")]
1604 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1605 [(set_attr "type" "mve_move")
1608 (define_insn "mve_vmulq<mode>"
1610 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1611 (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1612 (match_operand:MVE_2 2 "s_register_operand" "w")))
1615 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1616 [(set_attr "type" "mve_move")
1620 ;; [vornq_u, vornq_s])
1622 (define_insn "mve_vornq_<supf><mode>"
1624 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1625 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1626 (match_operand:MVE_2 2 "s_register_operand" "w")]
1630 "vorn %q0, %q1, %q2"
1631 [(set_attr "type" "mve_move")
1635 ;; [vorrq_s, vorrq_u])
1637 ;; signed and unsigned versions are the same: define the unsigned
1638 ;; insn, and use an expander for the signed one as we still reference
1639 ;; both names from arm_mve.h.
1640 ;; We use the same code as in neon.md (TODO: avoid this duplication).
1641 (define_insn "mve_vorrq_s<mode>"
1643 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
1644 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
1645 (match_operand:MVE_2 2 "neon_logic_op2" "w,Dl")))
1650 * return neon_output_logic_immediate (\"vorr\", &operands[2], <MODE>mode, 0, VALID_NEON_QREG_MODE (<MODE>mode));"
1651 [(set_attr "type" "mve_move")
1653 (define_expand "mve_vorrq_u<mode>"
1655 (set (match_operand:MVE_2 0 "s_register_operand")
1656 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1657 (match_operand:MVE_2 2 "neon_logic_op2")))
1663 ;; [vqaddq_n_s, vqaddq_n_u])
1665 (define_insn "mve_vqaddq_n_<supf><mode>"
1667 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1668 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1669 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1673 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1674 [(set_attr "type" "mve_move")
1678 ;; [vqaddq_u, vqaddq_s])
1680 (define_insn "mve_vqaddq_<supf><mode>"
1682 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1683 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1684 (match_operand:MVE_2 2 "s_register_operand" "w")]
1688 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1689 [(set_attr "type" "mve_move")
1695 (define_insn "mve_vqdmulhq_n_s<mode>"
1697 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1698 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1699 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1703 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1704 [(set_attr "type" "mve_move")
1710 (define_insn "mve_vqdmulhq_s<mode>"
1712 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1713 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1714 (match_operand:MVE_2 2 "s_register_operand" "w")]
1718 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1719 [(set_attr "type" "mve_move")
1725 (define_insn "mve_vqrdmulhq_n_s<mode>"
1727 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1728 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1729 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1733 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1734 [(set_attr "type" "mve_move")
1740 (define_insn "mve_vqrdmulhq_s<mode>"
1742 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1743 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1744 (match_operand:MVE_2 2 "s_register_operand" "w")]
1748 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1749 [(set_attr "type" "mve_move")
1753 ;; [vqrshlq_n_s, vqrshlq_n_u])
1755 (define_insn "mve_vqrshlq_n_<supf><mode>"
1757 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1758 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1759 (match_operand:SI 2 "s_register_operand" "r")]
1763 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1764 [(set_attr "type" "mve_move")
1768 ;; [vqrshlq_s, vqrshlq_u])
1770 (define_insn "mve_vqrshlq_<supf><mode>"
1772 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1773 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1774 (match_operand:MVE_2 2 "s_register_operand" "w")]
1778 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1779 [(set_attr "type" "mve_move")
1783 ;; [vqshlq_n_s, vqshlq_n_u])
1785 (define_insn "mve_vqshlq_n_<supf><mode>"
1787 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1788 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1789 (match_operand:SI 2 "immediate_operand" "i")]
1793 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1794 [(set_attr "type" "mve_move")
1798 ;; [vqshlq_r_u, vqshlq_r_s])
1800 (define_insn "mve_vqshlq_r_<supf><mode>"
1802 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1803 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1804 (match_operand:SI 2 "s_register_operand" "r")]
1808 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
1809 [(set_attr "type" "mve_move")
1813 ;; [vqshlq_s, vqshlq_u])
1815 (define_insn "mve_vqshlq_<supf><mode>"
1817 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1818 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1819 (match_operand:MVE_2 2 "s_register_operand" "w")]
1823 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1824 [(set_attr "type" "mve_move")
1830 (define_insn "mve_vqshluq_n_s<mode>"
1832 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1833 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1834 (match_operand:SI 2 "mve_imm_7" "Ra")]
1838 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
1839 [(set_attr "type" "mve_move")
1843 ;; [vqsubq_n_s, vqsubq_n_u])
1845 (define_insn "mve_vqsubq_n_<supf><mode>"
1847 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1848 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1849 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1853 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1854 [(set_attr "type" "mve_move")
1858 ;; [vqsubq_u, vqsubq_s])
1860 (define_insn "mve_vqsubq_<supf><mode>"
1862 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1863 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1864 (match_operand:MVE_2 2 "s_register_operand" "w")]
1868 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1869 [(set_attr "type" "mve_move")
1873 ;; [vrhaddq_s, vrhaddq_u])
1875 (define_insn "mve_vrhaddq_<supf><mode>"
1877 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1878 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1879 (match_operand:MVE_2 2 "s_register_operand" "w")]
1883 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1884 [(set_attr "type" "mve_move")
1888 ;; [vrmulhq_s, vrmulhq_u])
1890 (define_insn "mve_vrmulhq_<supf><mode>"
1892 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1893 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1894 (match_operand:MVE_2 2 "s_register_operand" "w")]
1898 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1899 [(set_attr "type" "mve_move")
1903 ;; [vrshlq_n_u, vrshlq_n_s])
1905 (define_insn "mve_vrshlq_n_<supf><mode>"
1907 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1908 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1909 (match_operand:SI 2 "s_register_operand" "r")]
1913 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1914 [(set_attr "type" "mve_move")
1918 ;; [vrshlq_s, vrshlq_u])
1920 (define_insn "mve_vrshlq_<supf><mode>"
1922 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1923 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1924 (match_operand:MVE_2 2 "s_register_operand" "w")]
1928 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1929 [(set_attr "type" "mve_move")
1933 ;; [vrshrq_n_s, vrshrq_n_u])
1935 (define_insn "mve_vrshrq_n_<supf><mode>"
1937 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1938 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1939 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1943 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1944 [(set_attr "type" "mve_move")
1948 ;; [vshlq_n_u, vshlq_n_s])
1950 (define_insn "mve_vshlq_n_<supf><mode>"
1952 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1953 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1954 (match_operand:SI 2 "immediate_operand" "i")]
1958 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1959 [(set_attr "type" "mve_move")
1963 ;; [vshlq_r_s, vshlq_r_u])
1965 (define_insn "mve_vshlq_r_<supf><mode>"
1967 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1968 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1969 (match_operand:SI 2 "s_register_operand" "r")]
1973 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
1974 [(set_attr "type" "mve_move")
1978 ;; [vsubq_n_s, vsubq_n_u])
1980 (define_insn "mve_vsubq_n_<supf><mode>"
1982 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1983 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1984 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1988 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
1989 [(set_attr "type" "mve_move")
1993 ;; [vsubq_s, vsubq_u])
1995 (define_insn "mve_vsubq_<supf><mode>"
1997 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1998 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1999 (match_operand:MVE_2 2 "s_register_operand" "w")]
2003 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
2004 [(set_attr "type" "mve_move")
2007 (define_insn "mve_vsubq<mode>"
2009 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2010 (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
2011 (match_operand:MVE_2 2 "s_register_operand" "w")))
2014 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
2015 [(set_attr "type" "mve_move")
2021 (define_insn "mve_vabdq_f<mode>"
2023 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2024 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2025 (match_operand:MVE_0 2 "s_register_operand" "w")]
2028 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2029 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
2030 [(set_attr "type" "mve_move")
2034 ;; [vaddlvaq_s vaddlvaq_u])
2036 (define_insn "mve_vaddlvaq_<supf>v4si"
2038 (set (match_operand:DI 0 "s_register_operand" "=r")
2039 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2040 (match_operand:V4SI 2 "s_register_operand" "w")]
2044 "vaddlva.<supf>32 %Q0, %R0, %q2"
2045 [(set_attr "type" "mve_move")
2051 (define_insn "mve_vaddq_n_f<mode>"
2053 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2054 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2055 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2058 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2059 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
2060 [(set_attr "type" "mve_move")
2066 (define_insn "mve_vandq_f<mode>"
2068 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2069 (and:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2070 (match_operand:MVE_0 2 "s_register_operand" "w")))
2072 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2073 "vand %q0, %q1, %q2"
2074 [(set_attr "type" "mve_move")
2080 (define_insn "mve_vbicq_f<mode>"
2082 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2083 (and:MVE_0 (not:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))
2084 (match_operand:MVE_0 2 "s_register_operand" "w")))
2086 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2087 "vbic %q0, %q1, %q2"
2088 [(set_attr "type" "mve_move")
2092 ;; [vbicq_n_s, vbicq_n_u])
2094 (define_insn "mve_vbicq_n_<supf><mode>"
2096 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2097 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2098 (match_operand:SI 2 "immediate_operand" "i")]
2102 "vbic.i%#<V_sz_elem> %q0, %2"
2103 [(set_attr "type" "mve_move")
2107 ;; [vcaddq_rot270_f])
2109 (define_insn "mve_vcaddq_rot270_f<mode>"
2111 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2112 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2113 (match_operand:MVE_0 2 "s_register_operand" "w")]
2116 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2117 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #270"
2118 [(set_attr "type" "mve_move")
2122 ;; [vcaddq_rot90_f])
2124 (define_insn "mve_vcaddq_rot90_f<mode>"
2126 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2127 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2128 (match_operand:MVE_0 2 "s_register_operand" "w")]
2131 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2132 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #90"
2133 [(set_attr "type" "mve_move")
2139 (define_insn "mve_vcmpeqq_f<mode>"
2141 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2142 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2143 (match_operand:MVE_0 2 "s_register_operand" "w")]
2146 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2147 "vcmp.f%#<V_sz_elem> eq, %q1, %q2"
2148 [(set_attr "type" "mve_move")
2154 (define_insn "mve_vcmpeqq_n_f<mode>"
2156 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2157 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2158 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2161 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2162 "vcmp.f%#<V_sz_elem> eq, %q1, %2"
2163 [(set_attr "type" "mve_move")
2169 (define_insn "mve_vcmpgeq_f<mode>"
2171 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2172 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2173 (match_operand:MVE_0 2 "s_register_operand" "w")]
2176 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2177 "vcmp.f%#<V_sz_elem> ge, %q1, %q2"
2178 [(set_attr "type" "mve_move")
2184 (define_insn "mve_vcmpgeq_n_f<mode>"
2186 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2187 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2188 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2191 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2192 "vcmp.f%#<V_sz_elem> ge, %q1, %2"
2193 [(set_attr "type" "mve_move")
2199 (define_insn "mve_vcmpgtq_f<mode>"
2201 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2202 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2203 (match_operand:MVE_0 2 "s_register_operand" "w")]
2206 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2207 "vcmp.f%#<V_sz_elem> gt, %q1, %q2"
2208 [(set_attr "type" "mve_move")
2214 (define_insn "mve_vcmpgtq_n_f<mode>"
2216 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2217 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2218 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2221 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2222 "vcmp.f%#<V_sz_elem> gt, %q1, %2"
2223 [(set_attr "type" "mve_move")
2229 (define_insn "mve_vcmpleq_f<mode>"
2231 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2232 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2233 (match_operand:MVE_0 2 "s_register_operand" "w")]
2236 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2237 "vcmp.f%#<V_sz_elem> le, %q1, %q2"
2238 [(set_attr "type" "mve_move")
2244 (define_insn "mve_vcmpleq_n_f<mode>"
2246 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2247 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2248 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2251 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2252 "vcmp.f%#<V_sz_elem> le, %q1, %2"
2253 [(set_attr "type" "mve_move")
2259 (define_insn "mve_vcmpltq_f<mode>"
2261 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2262 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2263 (match_operand:MVE_0 2 "s_register_operand" "w")]
2266 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2267 "vcmp.f%#<V_sz_elem> lt, %q1, %q2"
2268 [(set_attr "type" "mve_move")
2274 (define_insn "mve_vcmpltq_n_f<mode>"
2276 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2277 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2278 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2281 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2282 "vcmp.f%#<V_sz_elem> lt, %q1, %2"
2283 [(set_attr "type" "mve_move")
2289 (define_insn "mve_vcmpneq_f<mode>"
2291 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2292 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2293 (match_operand:MVE_0 2 "s_register_operand" "w")]
2296 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2297 "vcmp.f%#<V_sz_elem> ne, %q1, %q2"
2298 [(set_attr "type" "mve_move")
2304 (define_insn "mve_vcmpneq_n_f<mode>"
2306 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2307 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2308 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2311 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2312 "vcmp.f%#<V_sz_elem> ne, %q1, %2"
2313 [(set_attr "type" "mve_move")
2319 (define_insn "mve_vcmulq_f<mode>"
2321 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2322 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2323 (match_operand:MVE_0 2 "s_register_operand" "w")]
2326 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2327 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #0"
2328 [(set_attr "type" "mve_move")
2332 ;; [vcmulq_rot180_f])
2334 (define_insn "mve_vcmulq_rot180_f<mode>"
2336 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2337 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2338 (match_operand:MVE_0 2 "s_register_operand" "w")]
2341 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2342 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #180"
2343 [(set_attr "type" "mve_move")
2347 ;; [vcmulq_rot270_f])
2349 (define_insn "mve_vcmulq_rot270_f<mode>"
2351 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2352 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2353 (match_operand:MVE_0 2 "s_register_operand" "w")]
2356 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2357 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #270"
2358 [(set_attr "type" "mve_move")
2362 ;; [vcmulq_rot90_f])
2364 (define_insn "mve_vcmulq_rot90_f<mode>"
2366 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2367 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2368 (match_operand:MVE_0 2 "s_register_operand" "w")]
2371 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2372 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #90"
2373 [(set_attr "type" "mve_move")
2377 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
2379 (define_insn "mve_vctp<mode1>q_mhi"
2381 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2382 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
2383 (match_operand:HI 2 "vpr_register_operand" "Up")]
2387 "vpst\;vctpt.<mode1> %1"
2388 [(set_attr "type" "mve_move")
2389 (set_attr "length""8")])
2392 ;; [vcvtbq_f16_f32])
2394 (define_insn "mve_vcvtbq_f16_f32v8hf"
2396 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2397 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2398 (match_operand:V4SF 2 "s_register_operand" "w")]
2401 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2402 "vcvtb.f16.f32 %q0, %q2"
2403 [(set_attr "type" "mve_move")
2407 ;; [vcvttq_f16_f32])
2409 (define_insn "mve_vcvttq_f16_f32v8hf"
2411 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2412 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2413 (match_operand:V4SF 2 "s_register_operand" "w")]
2416 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2417 "vcvtt.f16.f32 %q0, %q2"
2418 [(set_attr "type" "mve_move")
2424 (define_insn "mve_veorq_f<mode>"
2426 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2427 (xor:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2428 (match_operand:MVE_0 2 "s_register_operand" "w")))
2430 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2431 "veor %q0, %q1, %q2"
2432 [(set_attr "type" "mve_move")
2438 (define_insn "mve_vmaxnmaq_f<mode>"
2440 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2441 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2442 (match_operand:MVE_0 2 "s_register_operand" "w")]
2445 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2446 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
2447 [(set_attr "type" "mve_move")
2453 (define_insn "mve_vmaxnmavq_f<mode>"
2455 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2456 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2457 (match_operand:MVE_0 2 "s_register_operand" "w")]
2460 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2461 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
2462 [(set_attr "type" "mve_move")
2468 (define_insn "mve_vmaxnmq_f<mode>"
2470 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2471 (smax:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2472 (match_operand:MVE_0 2 "s_register_operand" "w")))
2474 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2475 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
2476 [(set_attr "type" "mve_move")
2482 (define_insn "mve_vmaxnmvq_f<mode>"
2484 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2485 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2486 (match_operand:MVE_0 2 "s_register_operand" "w")]
2489 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2490 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
2491 [(set_attr "type" "mve_move")
2497 (define_insn "mve_vminnmaq_f<mode>"
2499 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2500 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2501 (match_operand:MVE_0 2 "s_register_operand" "w")]
2504 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2505 "vminnma.f%#<V_sz_elem> %q0, %q2"
2506 [(set_attr "type" "mve_move")
2512 (define_insn "mve_vminnmavq_f<mode>"
2514 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2515 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2516 (match_operand:MVE_0 2 "s_register_operand" "w")]
2519 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2520 "vminnmav.f%#<V_sz_elem> %0, %q2"
2521 [(set_attr "type" "mve_move")
2527 (define_insn "mve_vminnmq_f<mode>"
2529 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2530 (smin:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2531 (match_operand:MVE_0 2 "s_register_operand" "w")))
2533 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2534 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
2535 [(set_attr "type" "mve_move")
2541 (define_insn "mve_vminnmvq_f<mode>"
2543 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2544 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2545 (match_operand:MVE_0 2 "s_register_operand" "w")]
2548 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2549 "vminnmv.f%#<V_sz_elem> %0, %q2"
2550 [(set_attr "type" "mve_move")
2554 ;; [vmlaldavq_u, vmlaldavq_s])
2556 (define_insn "mve_vmlaldavq_<supf><mode>"
2558 (set (match_operand:DI 0 "s_register_operand" "=r")
2559 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2560 (match_operand:MVE_5 2 "s_register_operand" "w")]
2564 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2565 [(set_attr "type" "mve_move")
2571 (define_insn "mve_vmlaldavxq_s<mode>"
2573 (set (match_operand:DI 0 "s_register_operand" "=r")
2574 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2575 (match_operand:MVE_5 2 "s_register_operand" "w")]
2579 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2580 [(set_attr "type" "mve_move")
2586 (define_insn "mve_vmlsldavq_s<mode>"
2588 (set (match_operand:DI 0 "s_register_operand" "=r")
2589 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2590 (match_operand:MVE_5 2 "s_register_operand" "w")]
2594 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2595 [(set_attr "type" "mve_move")
2601 (define_insn "mve_vmlsldavxq_s<mode>"
2603 (set (match_operand:DI 0 "s_register_operand" "=r")
2604 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2605 (match_operand:MVE_5 2 "s_register_operand" "w")]
2609 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2610 [(set_attr "type" "mve_move")
2614 ;; [vmovnbq_u, vmovnbq_s])
2616 (define_insn "mve_vmovnbq_<supf><mode>"
2618 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2619 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2620 (match_operand:MVE_5 2 "s_register_operand" "w")]
2624 "vmovnb.i%#<V_sz_elem> %q0, %q2"
2625 [(set_attr "type" "mve_move")
2629 ;; [vmovntq_s, vmovntq_u])
2631 (define_insn "mve_vmovntq_<supf><mode>"
2633 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2634 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2635 (match_operand:MVE_5 2 "s_register_operand" "w")]
2639 "vmovnt.i%#<V_sz_elem> %q0, %q2"
2640 [(set_attr "type" "mve_move")
2646 (define_insn "mve_vmulq_f<mode>"
2648 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2649 (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2650 (match_operand:MVE_0 2 "s_register_operand" "w")))
2652 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2653 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
2654 [(set_attr "type" "mve_move")
2660 (define_insn "mve_vmulq_n_f<mode>"
2662 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2663 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2664 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2667 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2668 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
2669 [(set_attr "type" "mve_move")
2675 (define_insn "mve_vornq_f<mode>"
2677 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2678 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2679 (match_operand:MVE_0 2 "s_register_operand" "w")]
2682 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2683 "vorn %q0, %q1, %q2"
2684 [(set_attr "type" "mve_move")
2690 (define_insn "mve_vorrq_f<mode>"
2692 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2693 (ior:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2694 (match_operand:MVE_0 2 "s_register_operand" "w")))
2696 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2697 "vorr %q0, %q1, %q2"
2698 [(set_attr "type" "mve_move")
2702 ;; [vorrq_n_u, vorrq_n_s])
2704 (define_insn "mve_vorrq_n_<supf><mode>"
2706 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2707 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2708 (match_operand:SI 2 "immediate_operand" "i")]
2712 "vorr.i%#<V_sz_elem> %q0, %2"
2713 [(set_attr "type" "mve_move")
2719 (define_insn "mve_vqdmullbq_n_s<mode>"
2721 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2722 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2723 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2727 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
2728 [(set_attr "type" "mve_move")
2734 (define_insn "mve_vqdmullbq_s<mode>"
2736 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2737 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2738 (match_operand:MVE_5 2 "s_register_operand" "w")]
2742 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
2743 [(set_attr "type" "mve_move")
2749 (define_insn "mve_vqdmulltq_n_s<mode>"
2751 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2752 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2753 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2757 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
2758 [(set_attr "type" "mve_move")
2764 (define_insn "mve_vqdmulltq_s<mode>"
2766 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2767 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2768 (match_operand:MVE_5 2 "s_register_operand" "w")]
2772 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
2773 [(set_attr "type" "mve_move")
2777 ;; [vqmovnbq_u, vqmovnbq_s])
2779 (define_insn "mve_vqmovnbq_<supf><mode>"
2781 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2782 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2783 (match_operand:MVE_5 2 "s_register_operand" "w")]
2787 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
2788 [(set_attr "type" "mve_move")
2792 ;; [vqmovntq_u, vqmovntq_s])
2794 (define_insn "mve_vqmovntq_<supf><mode>"
2796 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2797 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2798 (match_operand:MVE_5 2 "s_register_operand" "w")]
2802 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
2803 [(set_attr "type" "mve_move")
2809 (define_insn "mve_vqmovunbq_s<mode>"
2811 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2812 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2813 (match_operand:MVE_5 2 "s_register_operand" "w")]
2817 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
2818 [(set_attr "type" "mve_move")
2824 (define_insn "mve_vqmovuntq_s<mode>"
2826 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2827 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2828 (match_operand:MVE_5 2 "s_register_operand" "w")]
2832 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
2833 [(set_attr "type" "mve_move")
2837 ;; [vrmlaldavhxq_s])
2839 (define_insn "mve_vrmlaldavhxq_sv4si"
2841 (set (match_operand:DI 0 "s_register_operand" "=r")
2842 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2843 (match_operand:V4SI 2 "s_register_operand" "w")]
2847 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
2848 [(set_attr "type" "mve_move")
2854 (define_insn "mve_vrmlsldavhq_sv4si"
2856 (set (match_operand:DI 0 "s_register_operand" "=r")
2857 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2858 (match_operand:V4SI 2 "s_register_operand" "w")]
2862 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
2863 [(set_attr "type" "mve_move")
2867 ;; [vrmlsldavhxq_s])
2869 (define_insn "mve_vrmlsldavhxq_sv4si"
2871 (set (match_operand:DI 0 "s_register_operand" "=r")
2872 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2873 (match_operand:V4SI 2 "s_register_operand" "w")]
2877 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
2878 [(set_attr "type" "mve_move")
2882 ;; [vshllbq_n_s, vshllbq_n_u])
2884 (define_insn "mve_vshllbq_n_<supf><mode>"
2886 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2887 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2888 (match_operand:SI 2 "immediate_operand" "i")]
2892 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2893 [(set_attr "type" "mve_move")
2897 ;; [vshlltq_n_u, vshlltq_n_s])
2899 (define_insn "mve_vshlltq_n_<supf><mode>"
2901 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2902 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2903 (match_operand:SI 2 "immediate_operand" "i")]
2907 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2908 [(set_attr "type" "mve_move")
2914 (define_insn "mve_vsubq_f<mode>"
2916 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2917 (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2918 (match_operand:MVE_0 2 "s_register_operand" "w")))
2920 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2921 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
2922 [(set_attr "type" "mve_move")
2926 ;; [vmulltq_poly_p])
2928 (define_insn "mve_vmulltq_poly_p<mode>"
2930 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2931 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2932 (match_operand:MVE_3 2 "s_register_operand" "w")]
2936 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
2937 [(set_attr "type" "mve_move")
2941 ;; [vmullbq_poly_p])
2943 (define_insn "mve_vmullbq_poly_p<mode>"
2945 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2946 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2947 (match_operand:MVE_3 2 "s_register_operand" "w")]
2951 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
2952 [(set_attr "type" "mve_move")
2956 ;; [vrmlaldavhq_u vrmlaldavhq_s])
2958 (define_insn "mve_vrmlaldavhq_<supf>v4si"
2960 (set (match_operand:DI 0 "s_register_operand" "=r")
2961 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2962 (match_operand:V4SI 2 "s_register_operand" "w")]
2966 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
2967 [(set_attr "type" "mve_move")
2971 ;; [vbicq_m_n_s, vbicq_m_n_u])
2973 (define_insn "mve_vbicq_m_n_<supf><mode>"
2975 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2976 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2977 (match_operand:SI 2 "immediate_operand" "i")
2978 (match_operand:HI 3 "vpr_register_operand" "Up")]
2982 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
2983 [(set_attr "type" "mve_move")
2984 (set_attr "length""8")])
2988 (define_insn "mve_vcmpeqq_m_f<mode>"
2990 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2991 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2992 (match_operand:MVE_0 2 "s_register_operand" "w")
2993 (match_operand:HI 3 "vpr_register_operand" "Up")]
2996 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2997 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
2998 [(set_attr "type" "mve_move")
2999 (set_attr "length""8")])
3001 ;; [vcvtaq_m_u, vcvtaq_m_s])
3003 (define_insn "mve_vcvtaq_m_<supf><mode>"
3005 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
3006 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
3007 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
3008 (match_operand:HI 3 "vpr_register_operand" "Up")]
3011 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3012 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
3013 [(set_attr "type" "mve_move")
3014 (set_attr "length""8")])
3016 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
3018 (define_insn "mve_vcvtq_m_to_f_<supf><mode>"
3020 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3021 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3022 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
3023 (match_operand:HI 3 "vpr_register_operand" "Up")]
3026 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3027 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
3028 [(set_attr "type" "mve_move")
3029 (set_attr "length""8")])
3031 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
3033 (define_insn "mve_vqrshrnbq_n_<supf><mode>"
3035 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3036 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3037 (match_operand:MVE_5 2 "s_register_operand" "w")
3038 (match_operand:SI 3 "mve_imm_8" "Rb")]
3042 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
3043 [(set_attr "type" "mve_move")
3046 ;; [vqrshrunbq_n_s])
3048 (define_insn "mve_vqrshrunbq_n_s<mode>"
3050 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3051 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3052 (match_operand:MVE_5 2 "s_register_operand" "w")
3053 (match_operand:SI 3 "mve_imm_8" "Rb")]
3057 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
3058 [(set_attr "type" "mve_move")
3061 ;; [vrmlaldavhaq_s vrmlaldavhaq_u])
3063 (define_insn "mve_vrmlaldavhaq_<supf>v4si"
3065 (set (match_operand:DI 0 "s_register_operand" "=r")
3066 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
3067 (match_operand:V4SI 2 "s_register_operand" "w")
3068 (match_operand:V4SI 3 "s_register_operand" "w")]
3072 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
3073 [(set_attr "type" "mve_move")
3077 ;; [vabavq_s, vabavq_u])
3079 (define_insn "mve_vabavq_<supf><mode>"
3081 (set (match_operand:SI 0 "s_register_operand" "=r")
3082 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3083 (match_operand:MVE_2 2 "s_register_operand" "w")
3084 (match_operand:MVE_2 3 "s_register_operand" "w")]
3088 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
3089 [(set_attr "type" "mve_move")
3093 ;; [vshlcq_u vshlcq_s]
3095 (define_expand "mve_vshlcq_vec_<supf><mode>"
3096 [(match_operand:MVE_2 0 "s_register_operand")
3097 (match_operand:MVE_2 1 "s_register_operand")
3098 (match_operand:SI 2 "s_register_operand")
3099 (match_operand:SI 3 "mve_imm_32")
3100 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3103 rtx ignore_wb = gen_reg_rtx (SImode);
3104 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
3105 operands[2], operands[3]));
3109 (define_expand "mve_vshlcq_carry_<supf><mode>"
3110 [(match_operand:SI 0 "s_register_operand")
3111 (match_operand:MVE_2 1 "s_register_operand")
3112 (match_operand:SI 2 "s_register_operand")
3113 (match_operand:SI 3 "mve_imm_32")
3114 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3117 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
3118 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
3119 operands[2], operands[3]));
3123 (define_insn "mve_vshlcq_<supf><mode>"
3124 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
3125 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
3126 (match_operand:SI 3 "s_register_operand" "1")
3127 (match_operand:SI 4 "mve_imm_32" "Rf")]
3129 (set (match_operand:SI 1 "s_register_operand" "=r")
3130 (unspec:SI [(match_dup 2)
3135 "vshlc %q0, %1, %4")
3140 (define_insn "mve_vabsq_m_s<mode>"
3142 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3143 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3144 (match_operand:MVE_2 2 "s_register_operand" "w")
3145 (match_operand:HI 3 "vpr_register_operand" "Up")]
3149 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
3150 [(set_attr "type" "mve_move")
3151 (set_attr "length""8")])
3154 ;; [vaddvaq_p_u, vaddvaq_p_s])
3156 (define_insn "mve_vaddvaq_p_<supf><mode>"
3158 (set (match_operand:SI 0 "s_register_operand" "=Te")
3159 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3160 (match_operand:MVE_2 2 "s_register_operand" "w")
3161 (match_operand:HI 3 "vpr_register_operand" "Up")]
3165 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
3166 [(set_attr "type" "mve_move")
3167 (set_attr "length""8")])
3172 (define_insn "mve_vclsq_m_s<mode>"
3174 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3175 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3176 (match_operand:MVE_2 2 "s_register_operand" "w")
3177 (match_operand:HI 3 "vpr_register_operand" "Up")]
3181 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
3182 [(set_attr "type" "mve_move")
3183 (set_attr "length""8")])
3186 ;; [vclzq_m_s, vclzq_m_u])
3188 (define_insn "mve_vclzq_m_<supf><mode>"
3190 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3191 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3192 (match_operand:MVE_2 2 "s_register_operand" "w")
3193 (match_operand:HI 3 "vpr_register_operand" "Up")]
3197 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
3198 [(set_attr "type" "mve_move")
3199 (set_attr "length""8")])
3204 (define_insn "mve_vcmpcsq_m_n_u<mode>"
3206 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3207 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3208 (match_operand:<V_elem> 2 "s_register_operand" "r")
3209 (match_operand:HI 3 "vpr_register_operand" "Up")]
3213 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
3214 [(set_attr "type" "mve_move")
3215 (set_attr "length""8")])
3220 (define_insn "mve_vcmpcsq_m_u<mode>"
3222 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3223 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3224 (match_operand:MVE_2 2 "s_register_operand" "w")
3225 (match_operand:HI 3 "vpr_register_operand" "Up")]
3229 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
3230 [(set_attr "type" "mve_move")
3231 (set_attr "length""8")])
3234 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
3236 (define_insn "mve_vcmpeqq_m_n_<supf><mode>"
3238 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3239 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3240 (match_operand:<V_elem> 2 "s_register_operand" "r")
3241 (match_operand:HI 3 "vpr_register_operand" "Up")]
3245 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
3246 [(set_attr "type" "mve_move")
3247 (set_attr "length""8")])
3250 ;; [vcmpeqq_m_u, vcmpeqq_m_s])
3252 (define_insn "mve_vcmpeqq_m_<supf><mode>"
3254 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3255 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3256 (match_operand:MVE_2 2 "s_register_operand" "w")
3257 (match_operand:HI 3 "vpr_register_operand" "Up")]
3261 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
3262 [(set_attr "type" "mve_move")
3263 (set_attr "length""8")])
3268 (define_insn "mve_vcmpgeq_m_n_s<mode>"
3270 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3271 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3272 (match_operand:<V_elem> 2 "s_register_operand" "r")
3273 (match_operand:HI 3 "vpr_register_operand" "Up")]
3277 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
3278 [(set_attr "type" "mve_move")
3279 (set_attr "length""8")])
3284 (define_insn "mve_vcmpgeq_m_s<mode>"
3286 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3287 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3288 (match_operand:MVE_2 2 "s_register_operand" "w")
3289 (match_operand:HI 3 "vpr_register_operand" "Up")]
3293 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
3294 [(set_attr "type" "mve_move")
3295 (set_attr "length""8")])
3300 (define_insn "mve_vcmpgtq_m_n_s<mode>"
3302 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3303 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3304 (match_operand:<V_elem> 2 "s_register_operand" "r")
3305 (match_operand:HI 3 "vpr_register_operand" "Up")]
3309 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
3310 [(set_attr "type" "mve_move")
3311 (set_attr "length""8")])
3316 (define_insn "mve_vcmpgtq_m_s<mode>"
3318 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3319 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3320 (match_operand:MVE_2 2 "s_register_operand" "w")
3321 (match_operand:HI 3 "vpr_register_operand" "Up")]
3325 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
3326 [(set_attr "type" "mve_move")
3327 (set_attr "length""8")])
3332 (define_insn "mve_vcmphiq_m_n_u<mode>"
3334 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3335 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3336 (match_operand:<V_elem> 2 "s_register_operand" "r")
3337 (match_operand:HI 3 "vpr_register_operand" "Up")]
3341 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
3342 [(set_attr "type" "mve_move")
3343 (set_attr "length""8")])
3348 (define_insn "mve_vcmphiq_m_u<mode>"
3350 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3351 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3352 (match_operand:MVE_2 2 "s_register_operand" "w")
3353 (match_operand:HI 3 "vpr_register_operand" "Up")]
3357 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
3358 [(set_attr "type" "mve_move")
3359 (set_attr "length""8")])
3364 (define_insn "mve_vcmpleq_m_n_s<mode>"
3366 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3367 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3368 (match_operand:<V_elem> 2 "s_register_operand" "r")
3369 (match_operand:HI 3 "vpr_register_operand" "Up")]
3373 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
3374 [(set_attr "type" "mve_move")
3375 (set_attr "length""8")])
3380 (define_insn "mve_vcmpleq_m_s<mode>"
3382 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3383 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3384 (match_operand:MVE_2 2 "s_register_operand" "w")
3385 (match_operand:HI 3 "vpr_register_operand" "Up")]
3389 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
3390 [(set_attr "type" "mve_move")
3391 (set_attr "length""8")])
3396 (define_insn "mve_vcmpltq_m_n_s<mode>"
3398 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3399 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3400 (match_operand:<V_elem> 2 "s_register_operand" "r")
3401 (match_operand:HI 3 "vpr_register_operand" "Up")]
3405 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
3406 [(set_attr "type" "mve_move")
3407 (set_attr "length""8")])
3412 (define_insn "mve_vcmpltq_m_s<mode>"
3414 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3415 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3416 (match_operand:MVE_2 2 "s_register_operand" "w")
3417 (match_operand:HI 3 "vpr_register_operand" "Up")]
3421 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
3422 [(set_attr "type" "mve_move")
3423 (set_attr "length""8")])
3426 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3428 (define_insn "mve_vcmpneq_m_n_<supf><mode>"
3430 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3431 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3432 (match_operand:<V_elem> 2 "s_register_operand" "r")
3433 (match_operand:HI 3 "vpr_register_operand" "Up")]
3437 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
3438 [(set_attr "type" "mve_move")
3439 (set_attr "length""8")])
3442 ;; [vcmpneq_m_s, vcmpneq_m_u])
3444 (define_insn "mve_vcmpneq_m_<supf><mode>"
3446 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3447 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3448 (match_operand:MVE_2 2 "s_register_operand" "w")
3449 (match_operand:HI 3 "vpr_register_operand" "Up")]
3453 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
3454 [(set_attr "type" "mve_move")
3455 (set_attr "length""8")])
3458 ;; [vdupq_m_n_s, vdupq_m_n_u])
3460 (define_insn "mve_vdupq_m_n_<supf><mode>"
3462 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3463 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3464 (match_operand:<V_elem> 2 "s_register_operand" "r")
3465 (match_operand:HI 3 "vpr_register_operand" "Up")]
3469 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3470 [(set_attr "type" "mve_move")
3471 (set_attr "length""8")])
3476 (define_insn "mve_vmaxaq_m_s<mode>"
3478 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3479 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3480 (match_operand:MVE_2 2 "s_register_operand" "w")
3481 (match_operand:HI 3 "vpr_register_operand" "Up")]
3485 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
3486 [(set_attr "type" "mve_move")
3487 (set_attr "length""8")])
3492 (define_insn "mve_vmaxavq_p_s<mode>"
3494 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3495 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3496 (match_operand:MVE_2 2 "s_register_operand" "w")
3497 (match_operand:HI 3 "vpr_register_operand" "Up")]
3501 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
3502 [(set_attr "type" "mve_move")
3503 (set_attr "length""8")])
3506 ;; [vmaxvq_p_u, vmaxvq_p_s])
3508 (define_insn "mve_vmaxvq_p_<supf><mode>"
3510 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3511 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3512 (match_operand:MVE_2 2 "s_register_operand" "w")
3513 (match_operand:HI 3 "vpr_register_operand" "Up")]
3517 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
3518 [(set_attr "type" "mve_move")
3519 (set_attr "length""8")])
3524 (define_insn "mve_vminaq_m_s<mode>"
3526 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3527 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3528 (match_operand:MVE_2 2 "s_register_operand" "w")
3529 (match_operand:HI 3 "vpr_register_operand" "Up")]
3533 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
3534 [(set_attr "type" "mve_move")
3535 (set_attr "length""8")])
3540 (define_insn "mve_vminavq_p_s<mode>"
3542 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3543 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3544 (match_operand:MVE_2 2 "s_register_operand" "w")
3545 (match_operand:HI 3 "vpr_register_operand" "Up")]
3549 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
3550 [(set_attr "type" "mve_move")
3551 (set_attr "length""8")])
3554 ;; [vminvq_p_s, vminvq_p_u])
3556 (define_insn "mve_vminvq_p_<supf><mode>"
3558 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3559 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3560 (match_operand:MVE_2 2 "s_register_operand" "w")
3561 (match_operand:HI 3 "vpr_register_operand" "Up")]
3565 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
3566 [(set_attr "type" "mve_move")
3567 (set_attr "length""8")])
3570 ;; [vmladavaq_u, vmladavaq_s])
3572 (define_insn "mve_vmladavaq_<supf><mode>"
3574 (set (match_operand:SI 0 "s_register_operand" "=Te")
3575 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3576 (match_operand:MVE_2 2 "s_register_operand" "w")
3577 (match_operand:MVE_2 3 "s_register_operand" "w")]
3581 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
3582 [(set_attr "type" "mve_move")
3586 ;; [vmladavq_p_u, vmladavq_p_s])
3588 (define_insn "mve_vmladavq_p_<supf><mode>"
3590 (set (match_operand:SI 0 "s_register_operand" "=Te")
3591 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3592 (match_operand:MVE_2 2 "s_register_operand" "w")
3593 (match_operand:HI 3 "vpr_register_operand" "Up")]
3597 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
3598 [(set_attr "type" "mve_move")
3599 (set_attr "length""8")])
3604 (define_insn "mve_vmladavxq_p_s<mode>"
3606 (set (match_operand:SI 0 "s_register_operand" "=Te")
3607 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3608 (match_operand:MVE_2 2 "s_register_operand" "w")
3609 (match_operand:HI 3 "vpr_register_operand" "Up")]
3613 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
3614 [(set_attr "type" "mve_move")
3615 (set_attr "length""8")])
3618 ;; [vmlaq_n_u, vmlaq_n_s])
3620 (define_insn "mve_vmlaq_n_<supf><mode>"
3622 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3623 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3624 (match_operand:MVE_2 2 "s_register_operand" "w")
3625 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3629 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
3630 [(set_attr "type" "mve_move")
3634 ;; [vmlasq_n_u, vmlasq_n_s])
3636 (define_insn "mve_vmlasq_n_<supf><mode>"
3638 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3639 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3640 (match_operand:MVE_2 2 "s_register_operand" "w")
3641 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3645 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
3646 [(set_attr "type" "mve_move")
3652 (define_insn "mve_vmlsdavq_p_s<mode>"
3654 (set (match_operand:SI 0 "s_register_operand" "=Te")
3655 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3656 (match_operand:MVE_2 2 "s_register_operand" "w")
3657 (match_operand:HI 3 "vpr_register_operand" "Up")]
3661 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
3662 [(set_attr "type" "mve_move")
3663 (set_attr "length""8")])
3668 (define_insn "mve_vmlsdavxq_p_s<mode>"
3670 (set (match_operand:SI 0 "s_register_operand" "=Te")
3671 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3672 (match_operand:MVE_2 2 "s_register_operand" "w")
3673 (match_operand:HI 3 "vpr_register_operand" "Up")]
3677 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
3678 [(set_attr "type" "mve_move")
3679 (set_attr "length""8")])
3682 ;; [vmvnq_m_s, vmvnq_m_u])
3684 (define_insn "mve_vmvnq_m_<supf><mode>"
3686 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3687 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3688 (match_operand:MVE_2 2 "s_register_operand" "w")
3689 (match_operand:HI 3 "vpr_register_operand" "Up")]
3693 "vpst\;vmvnt %q0, %q2"
3694 [(set_attr "type" "mve_move")
3695 (set_attr "length""8")])
3700 (define_insn "mve_vnegq_m_s<mode>"
3702 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3703 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3704 (match_operand:MVE_2 2 "s_register_operand" "w")
3705 (match_operand:HI 3 "vpr_register_operand" "Up")]
3709 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
3710 [(set_attr "type" "mve_move")
3711 (set_attr "length""8")])
3714 ;; [vpselq_u, vpselq_s])
3716 (define_insn "mve_vpselq_<supf><mode>"
3718 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
3719 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
3720 (match_operand:MVE_1 2 "s_register_operand" "w")
3721 (match_operand:HI 3 "vpr_register_operand" "Up")]
3725 "vpsel %q0, %q1, %q2"
3726 [(set_attr "type" "mve_move")
3732 (define_insn "mve_vqabsq_m_s<mode>"
3734 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3735 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3736 (match_operand:MVE_2 2 "s_register_operand" "w")
3737 (match_operand:HI 3 "vpr_register_operand" "Up")]
3741 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
3742 [(set_attr "type" "mve_move")
3743 (set_attr "length""8")])
3748 (define_insn "mve_vqdmlahq_n_<supf><mode>"
3750 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3751 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3752 (match_operand:MVE_2 2 "s_register_operand" "w")
3753 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3757 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3758 [(set_attr "type" "mve_move")
3764 (define_insn "mve_vqdmlashq_n_<supf><mode>"
3766 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3767 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3768 (match_operand:MVE_2 2 "s_register_operand" "w")
3769 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3773 "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3774 [(set_attr "type" "mve_move")
3780 (define_insn "mve_vqnegq_m_s<mode>"
3782 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3783 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3784 (match_operand:MVE_2 2 "s_register_operand" "w")
3785 (match_operand:HI 3 "vpr_register_operand" "Up")]
3789 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
3790 [(set_attr "type" "mve_move")
3791 (set_attr "length""8")])
3796 (define_insn "mve_vqrdmladhq_s<mode>"
3798 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3799 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3800 (match_operand:MVE_2 2 "s_register_operand" "w")
3801 (match_operand:MVE_2 3 "s_register_operand" "w")]
3805 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3806 [(set_attr "type" "mve_move")
3812 (define_insn "mve_vqrdmladhxq_s<mode>"
3814 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3815 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3816 (match_operand:MVE_2 2 "s_register_operand" "w")
3817 (match_operand:MVE_2 3 "s_register_operand" "w")]
3821 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3822 [(set_attr "type" "mve_move")
3828 (define_insn "mve_vqrdmlahq_n_<supf><mode>"
3830 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3831 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3832 (match_operand:MVE_2 2 "s_register_operand" "w")
3833 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3837 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3838 [(set_attr "type" "mve_move")
3842 ;; [vqrdmlashq_n_s])
3844 (define_insn "mve_vqrdmlashq_n_<supf><mode>"
3846 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3847 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3848 (match_operand:MVE_2 2 "s_register_operand" "w")
3849 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3853 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3854 [(set_attr "type" "mve_move")
3860 (define_insn "mve_vqrdmlsdhq_s<mode>"
3862 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3863 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3864 (match_operand:MVE_2 2 "s_register_operand" "w")
3865 (match_operand:MVE_2 3 "s_register_operand" "w")]
3869 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3870 [(set_attr "type" "mve_move")
3876 (define_insn "mve_vqrdmlsdhxq_s<mode>"
3878 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3879 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3880 (match_operand:MVE_2 2 "s_register_operand" "w")
3881 (match_operand:MVE_2 3 "s_register_operand" "w")]
3885 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3886 [(set_attr "type" "mve_move")
3890 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
3892 (define_insn "mve_vqrshlq_m_n_<supf><mode>"
3894 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3895 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3896 (match_operand:SI 2 "s_register_operand" "r")
3897 (match_operand:HI 3 "vpr_register_operand" "Up")]
3901 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
3902 [(set_attr "type" "mve_move")
3903 (set_attr "length""8")])
3906 ;; [vqshlq_m_r_u, vqshlq_m_r_s])
3908 (define_insn "mve_vqshlq_m_r_<supf><mode>"
3910 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3911 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3912 (match_operand:SI 2 "s_register_operand" "r")
3913 (match_operand:HI 3 "vpr_register_operand" "Up")]
3917 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3918 [(set_attr "type" "mve_move")
3919 (set_attr "length""8")])
3922 ;; [vrev64q_m_u, vrev64q_m_s])
3924 (define_insn "mve_vrev64q_m_<supf><mode>"
3926 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3927 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3928 (match_operand:MVE_2 2 "s_register_operand" "w")
3929 (match_operand:HI 3 "vpr_register_operand" "Up")]
3933 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
3934 [(set_attr "type" "mve_move")
3935 (set_attr "length""8")])
3938 ;; [vrshlq_m_n_s, vrshlq_m_n_u])
3940 (define_insn "mve_vrshlq_m_n_<supf><mode>"
3942 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3943 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3944 (match_operand:SI 2 "s_register_operand" "r")
3945 (match_operand:HI 3 "vpr_register_operand" "Up")]
3949 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3950 [(set_attr "type" "mve_move")
3951 (set_attr "length""8")])
3954 ;; [vshlq_m_r_u, vshlq_m_r_s])
3956 (define_insn "mve_vshlq_m_r_<supf><mode>"
3958 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3959 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3960 (match_operand:SI 2 "s_register_operand" "r")
3961 (match_operand:HI 3 "vpr_register_operand" "Up")]
3965 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3966 [(set_attr "type" "mve_move")
3967 (set_attr "length""8")])
3970 ;; [vsliq_n_u, vsliq_n_s])
3972 (define_insn "mve_vsliq_n_<supf><mode>"
3974 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3975 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3976 (match_operand:MVE_2 2 "s_register_operand" "w")
3977 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
3981 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
3982 [(set_attr "type" "mve_move")
3986 ;; [vsriq_n_u, vsriq_n_s])
3988 (define_insn "mve_vsriq_n_<supf><mode>"
3990 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3991 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3992 (match_operand:MVE_2 2 "s_register_operand" "w")
3993 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
3997 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
3998 [(set_attr "type" "mve_move")
4004 (define_insn "mve_vqdmlsdhxq_s<mode>"
4006 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4007 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4008 (match_operand:MVE_2 2 "s_register_operand" "w")
4009 (match_operand:MVE_2 3 "s_register_operand" "w")]
4013 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4014 [(set_attr "type" "mve_move")
4020 (define_insn "mve_vqdmlsdhq_s<mode>"
4022 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4023 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4024 (match_operand:MVE_2 2 "s_register_operand" "w")
4025 (match_operand:MVE_2 3 "s_register_operand" "w")]
4029 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4030 [(set_attr "type" "mve_move")
4036 (define_insn "mve_vqdmladhxq_s<mode>"
4038 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4039 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4040 (match_operand:MVE_2 2 "s_register_operand" "w")
4041 (match_operand:MVE_2 3 "s_register_operand" "w")]
4045 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4046 [(set_attr "type" "mve_move")
4052 (define_insn "mve_vqdmladhq_s<mode>"
4054 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4055 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4056 (match_operand:MVE_2 2 "s_register_operand" "w")
4057 (match_operand:MVE_2 3 "s_register_operand" "w")]
4061 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4062 [(set_attr "type" "mve_move")
4068 (define_insn "mve_vmlsdavaxq_s<mode>"
4070 (set (match_operand:SI 0 "s_register_operand" "=Te")
4071 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4072 (match_operand:MVE_2 2 "s_register_operand" "w")
4073 (match_operand:MVE_2 3 "s_register_operand" "w")]
4077 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4078 [(set_attr "type" "mve_move")
4084 (define_insn "mve_vmlsdavaq_s<mode>"
4086 (set (match_operand:SI 0 "s_register_operand" "=Te")
4087 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4088 (match_operand:MVE_2 2 "s_register_operand" "w")
4089 (match_operand:MVE_2 3 "s_register_operand" "w")]
4093 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
4094 [(set_attr "type" "mve_move")
4100 (define_insn "mve_vmladavaxq_s<mode>"
4102 (set (match_operand:SI 0 "s_register_operand" "=Te")
4103 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4104 (match_operand:MVE_2 2 "s_register_operand" "w")
4105 (match_operand:MVE_2 3 "s_register_operand" "w")]
4109 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4110 [(set_attr "type" "mve_move")
4115 (define_insn "mve_vabsq_m_f<mode>"
4117 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4118 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4119 (match_operand:MVE_0 2 "s_register_operand" "w")
4120 (match_operand:HI 3 "vpr_register_operand" "Up")]
4123 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4124 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
4125 [(set_attr "type" "mve_move")
4126 (set_attr "length""8")])
4129 ;; [vaddlvaq_p_s vaddlvaq_p_u])
4131 (define_insn "mve_vaddlvaq_p_<supf>v4si"
4133 (set (match_operand:DI 0 "s_register_operand" "=r")
4134 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4135 (match_operand:V4SI 2 "s_register_operand" "w")
4136 (match_operand:HI 3 "vpr_register_operand" "Up")]
4140 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
4141 [(set_attr "type" "mve_move")
4142 (set_attr "length""8")])
4146 (define_insn "mve_vcmlaq_f<mode>"
4148 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4149 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4150 (match_operand:MVE_0 2 "s_register_operand" "w")
4151 (match_operand:MVE_0 3 "s_register_operand" "w")]
4154 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4155 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #0"
4156 [(set_attr "type" "mve_move")
4160 ;; [vcmlaq_rot180_f])
4162 (define_insn "mve_vcmlaq_rot180_f<mode>"
4164 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4165 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4166 (match_operand:MVE_0 2 "s_register_operand" "w")
4167 (match_operand:MVE_0 3 "s_register_operand" "w")]
4170 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4171 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #180"
4172 [(set_attr "type" "mve_move")
4176 ;; [vcmlaq_rot270_f])
4178 (define_insn "mve_vcmlaq_rot270_f<mode>"
4180 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4181 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4182 (match_operand:MVE_0 2 "s_register_operand" "w")
4183 (match_operand:MVE_0 3 "s_register_operand" "w")]
4186 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4187 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #270"
4188 [(set_attr "type" "mve_move")
4192 ;; [vcmlaq_rot90_f])
4194 (define_insn "mve_vcmlaq_rot90_f<mode>"
4196 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4197 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4198 (match_operand:MVE_0 2 "s_register_operand" "w")
4199 (match_operand:MVE_0 3 "s_register_operand" "w")]
4202 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4203 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #90"
4204 [(set_attr "type" "mve_move")
4210 (define_insn "mve_vcmpeqq_m_n_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:<V_elem> 2 "s_register_operand" "r")
4215 (match_operand:HI 3 "vpr_register_operand" "Up")]
4218 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4219 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
4220 [(set_attr "type" "mve_move")
4221 (set_attr "length""8")])
4226 (define_insn "mve_vcmpgeq_m_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:MVE_0 2 "s_register_operand" "w")
4231 (match_operand:HI 3 "vpr_register_operand" "Up")]
4234 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4235 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
4236 [(set_attr "type" "mve_move")
4237 (set_attr "length""8")])
4242 (define_insn "mve_vcmpgeq_m_n_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:<V_elem> 2 "s_register_operand" "r")
4247 (match_operand:HI 3 "vpr_register_operand" "Up")]
4250 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4251 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
4252 [(set_attr "type" "mve_move")
4253 (set_attr "length""8")])
4258 (define_insn "mve_vcmpgtq_m_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:MVE_0 2 "s_register_operand" "w")
4263 (match_operand:HI 3 "vpr_register_operand" "Up")]
4266 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4267 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
4268 [(set_attr "type" "mve_move")
4269 (set_attr "length""8")])
4274 (define_insn "mve_vcmpgtq_m_n_f<mode>"
4276 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4277 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4278 (match_operand:<V_elem> 2 "s_register_operand" "r")
4279 (match_operand:HI 3 "vpr_register_operand" "Up")]
4282 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4283 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
4284 [(set_attr "type" "mve_move")
4285 (set_attr "length""8")])
4290 (define_insn "mve_vcmpleq_m_f<mode>"
4292 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4293 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4294 (match_operand:MVE_0 2 "s_register_operand" "w")
4295 (match_operand:HI 3 "vpr_register_operand" "Up")]
4298 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4299 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
4300 [(set_attr "type" "mve_move")
4301 (set_attr "length""8")])
4306 (define_insn "mve_vcmpleq_m_n_f<mode>"
4308 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4309 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4310 (match_operand:<V_elem> 2 "s_register_operand" "r")
4311 (match_operand:HI 3 "vpr_register_operand" "Up")]
4314 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4315 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
4316 [(set_attr "type" "mve_move")
4317 (set_attr "length""8")])
4322 (define_insn "mve_vcmpltq_m_f<mode>"
4324 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4325 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4326 (match_operand:MVE_0 2 "s_register_operand" "w")
4327 (match_operand:HI 3 "vpr_register_operand" "Up")]
4330 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4331 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
4332 [(set_attr "type" "mve_move")
4333 (set_attr "length""8")])
4338 (define_insn "mve_vcmpltq_m_n_f<mode>"
4340 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4341 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
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\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
4348 [(set_attr "type" "mve_move")
4349 (set_attr "length""8")])
4354 (define_insn "mve_vcmpneq_m_f<mode>"
4356 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4357 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4358 (match_operand:MVE_0 2 "s_register_operand" "w")
4359 (match_operand:HI 3 "vpr_register_operand" "Up")]
4362 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4363 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
4364 [(set_attr "type" "mve_move")
4365 (set_attr "length""8")])
4370 (define_insn "mve_vcmpneq_m_n_f<mode>"
4372 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4373 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4374 (match_operand:<V_elem> 2 "s_register_operand" "r")
4375 (match_operand:HI 3 "vpr_register_operand" "Up")]
4378 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4379 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
4380 [(set_attr "type" "mve_move")
4381 (set_attr "length""8")])
4384 ;; [vcvtbq_m_f16_f32])
4386 (define_insn "mve_vcvtbq_m_f16_f32v8hf"
4388 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4389 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4390 (match_operand:V4SF 2 "s_register_operand" "w")
4391 (match_operand:HI 3 "vpr_register_operand" "Up")]
4394 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4395 "vpst\;vcvtbt.f16.f32 %q0, %q2"
4396 [(set_attr "type" "mve_move")
4397 (set_attr "length""8")])
4400 ;; [vcvtbq_m_f32_f16])
4402 (define_insn "mve_vcvtbq_m_f32_f16v4sf"
4404 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4405 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4406 (match_operand:V8HF 2 "s_register_operand" "w")
4407 (match_operand:HI 3 "vpr_register_operand" "Up")]
4410 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4411 "vpst\;vcvtbt.f32.f16 %q0, %q2"
4412 [(set_attr "type" "mve_move")
4413 (set_attr "length""8")])
4416 ;; [vcvttq_m_f16_f32])
4418 (define_insn "mve_vcvttq_m_f16_f32v8hf"
4420 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4421 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4422 (match_operand:V4SF 2 "s_register_operand" "w")
4423 (match_operand:HI 3 "vpr_register_operand" "Up")]
4426 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4427 "vpst\;vcvttt.f16.f32 %q0, %q2"
4428 [(set_attr "type" "mve_move")
4429 (set_attr "length""8")])
4432 ;; [vcvttq_m_f32_f16])
4434 (define_insn "mve_vcvttq_m_f32_f16v4sf"
4436 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4437 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4438 (match_operand:V8HF 2 "s_register_operand" "w")
4439 (match_operand:HI 3 "vpr_register_operand" "Up")]
4442 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4443 "vpst\;vcvttt.f32.f16 %q0, %q2"
4444 [(set_attr "type" "mve_move")
4445 (set_attr "length""8")])
4450 (define_insn "mve_vdupq_m_n_f<mode>"
4452 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4453 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4454 (match_operand:<V_elem> 2 "s_register_operand" "r")
4455 (match_operand:HI 3 "vpr_register_operand" "Up")]
4458 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4459 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
4460 [(set_attr "type" "mve_move")
4461 (set_attr "length""8")])
4466 (define_insn "mve_vfmaq_f<mode>"
4468 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4469 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4470 (match_operand:MVE_0 2 "s_register_operand" "w")
4471 (match_operand:MVE_0 3 "s_register_operand" "w")]
4474 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4475 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
4476 [(set_attr "type" "mve_move")
4482 (define_insn "mve_vfmaq_n_f<mode>"
4484 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4485 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4486 (match_operand:MVE_0 2 "s_register_operand" "w")
4487 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4490 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4491 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
4492 [(set_attr "type" "mve_move")
4498 (define_insn "mve_vfmasq_n_f<mode>"
4500 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4501 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4502 (match_operand:MVE_0 2 "s_register_operand" "w")
4503 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4506 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4507 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
4508 [(set_attr "type" "mve_move")
4513 (define_insn "mve_vfmsq_f<mode>"
4515 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4516 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4517 (match_operand:MVE_0 2 "s_register_operand" "w")
4518 (match_operand:MVE_0 3 "s_register_operand" "w")]
4521 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4522 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
4523 [(set_attr "type" "mve_move")
4529 (define_insn "mve_vmaxnmaq_m_f<mode>"
4531 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4532 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4533 (match_operand:MVE_0 2 "s_register_operand" "w")
4534 (match_operand:HI 3 "vpr_register_operand" "Up")]
4537 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4538 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
4539 [(set_attr "type" "mve_move")
4540 (set_attr "length""8")])
4544 (define_insn "mve_vmaxnmavq_p_f<mode>"
4546 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4547 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4548 (match_operand:MVE_0 2 "s_register_operand" "w")
4549 (match_operand:HI 3 "vpr_register_operand" "Up")]
4552 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4553 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
4554 [(set_attr "type" "mve_move")
4555 (set_attr "length""8")])
4560 (define_insn "mve_vmaxnmvq_p_f<mode>"
4562 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4563 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4564 (match_operand:MVE_0 2 "s_register_operand" "w")
4565 (match_operand:HI 3 "vpr_register_operand" "Up")]
4568 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4569 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
4570 [(set_attr "type" "mve_move")
4571 (set_attr "length""8")])
4575 (define_insn "mve_vminnmaq_m_f<mode>"
4577 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4578 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4579 (match_operand:MVE_0 2 "s_register_operand" "w")
4580 (match_operand:HI 3 "vpr_register_operand" "Up")]
4583 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4584 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
4585 [(set_attr "type" "mve_move")
4586 (set_attr "length""8")])
4591 (define_insn "mve_vminnmavq_p_f<mode>"
4593 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4594 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4595 (match_operand:MVE_0 2 "s_register_operand" "w")
4596 (match_operand:HI 3 "vpr_register_operand" "Up")]
4599 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4600 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
4601 [(set_attr "type" "mve_move")
4602 (set_attr "length""8")])
4606 (define_insn "mve_vminnmvq_p_f<mode>"
4608 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4609 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4610 (match_operand:MVE_0 2 "s_register_operand" "w")
4611 (match_operand:HI 3 "vpr_register_operand" "Up")]
4614 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4615 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
4616 [(set_attr "type" "mve_move")
4617 (set_attr "length""8")])
4620 ;; [vmlaldavaq_s, vmlaldavaq_u])
4622 (define_insn "mve_vmlaldavaq_<supf><mode>"
4624 (set (match_operand:DI 0 "s_register_operand" "=r")
4625 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4626 (match_operand:MVE_5 2 "s_register_operand" "w")
4627 (match_operand:MVE_5 3 "s_register_operand" "w")]
4631 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4632 [(set_attr "type" "mve_move")
4638 (define_insn "mve_vmlaldavaxq_s<mode>"
4640 (set (match_operand:DI 0 "s_register_operand" "=r")
4641 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4642 (match_operand:MVE_5 2 "s_register_operand" "w")
4643 (match_operand:MVE_5 3 "s_register_operand" "w")]
4647 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4648 [(set_attr "type" "mve_move")
4652 ;; [vmlaldavq_p_u, vmlaldavq_p_s])
4654 (define_insn "mve_vmlaldavq_p_<supf><mode>"
4656 (set (match_operand:DI 0 "s_register_operand" "=r")
4657 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4658 (match_operand:MVE_5 2 "s_register_operand" "w")
4659 (match_operand:HI 3 "vpr_register_operand" "Up")]
4663 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4664 [(set_attr "type" "mve_move")
4665 (set_attr "length""8")])
4668 ;; [vmlaldavxq_p_s])
4670 (define_insn "mve_vmlaldavxq_p_s<mode>"
4672 (set (match_operand:DI 0 "s_register_operand" "=r")
4673 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4674 (match_operand:MVE_5 2 "s_register_operand" "w")
4675 (match_operand:HI 3 "vpr_register_operand" "Up")]
4679 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
4680 [(set_attr "type" "mve_move")
4681 (set_attr "length""8")])
4685 (define_insn "mve_vmlsldavaq_s<mode>"
4687 (set (match_operand:DI 0 "s_register_operand" "=r")
4688 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4689 (match_operand:MVE_5 2 "s_register_operand" "w")
4690 (match_operand:MVE_5 3 "s_register_operand" "w")]
4694 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4695 [(set_attr "type" "mve_move")
4701 (define_insn "mve_vmlsldavaxq_s<mode>"
4703 (set (match_operand:DI 0 "s_register_operand" "=r")
4704 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4705 (match_operand:MVE_5 2 "s_register_operand" "w")
4706 (match_operand:MVE_5 3 "s_register_operand" "w")]
4710 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4711 [(set_attr "type" "mve_move")
4717 (define_insn "mve_vmlsldavq_p_s<mode>"
4719 (set (match_operand:DI 0 "s_register_operand" "=r")
4720 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4721 (match_operand:MVE_5 2 "s_register_operand" "w")
4722 (match_operand:HI 3 "vpr_register_operand" "Up")]
4726 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4727 [(set_attr "type" "mve_move")
4728 (set_attr "length""8")])
4731 ;; [vmlsldavxq_p_s])
4733 (define_insn "mve_vmlsldavxq_p_s<mode>"
4735 (set (match_operand:DI 0 "s_register_operand" "=r")
4736 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4737 (match_operand:MVE_5 2 "s_register_operand" "w")
4738 (match_operand:HI 3 "vpr_register_operand" "Up")]
4742 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4743 [(set_attr "type" "mve_move")
4744 (set_attr "length""8")])
4746 ;; [vmovlbq_m_u, vmovlbq_m_s])
4748 (define_insn "mve_vmovlbq_m_<supf><mode>"
4750 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4751 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4752 (match_operand:MVE_3 2 "s_register_operand" "w")
4753 (match_operand:HI 3 "vpr_register_operand" "Up")]
4757 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
4758 [(set_attr "type" "mve_move")
4759 (set_attr "length""8")])
4761 ;; [vmovltq_m_u, vmovltq_m_s])
4763 (define_insn "mve_vmovltq_m_<supf><mode>"
4765 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4766 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4767 (match_operand:MVE_3 2 "s_register_operand" "w")
4768 (match_operand:HI 3 "vpr_register_operand" "Up")]
4772 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
4773 [(set_attr "type" "mve_move")
4774 (set_attr "length""8")])
4776 ;; [vmovnbq_m_u, vmovnbq_m_s])
4778 (define_insn "mve_vmovnbq_m_<supf><mode>"
4780 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4781 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4782 (match_operand:MVE_5 2 "s_register_operand" "w")
4783 (match_operand:HI 3 "vpr_register_operand" "Up")]
4787 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
4788 [(set_attr "type" "mve_move")
4789 (set_attr "length""8")])
4792 ;; [vmovntq_m_u, vmovntq_m_s])
4794 (define_insn "mve_vmovntq_m_<supf><mode>"
4796 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4797 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4798 (match_operand:MVE_5 2 "s_register_operand" "w")
4799 (match_operand:HI 3 "vpr_register_operand" "Up")]
4803 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
4804 [(set_attr "type" "mve_move")
4805 (set_attr "length""8")])
4808 ;; [vmvnq_m_n_u, vmvnq_m_n_s])
4810 (define_insn "mve_vmvnq_m_n_<supf><mode>"
4812 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4813 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4814 (match_operand:SI 2 "immediate_operand" "i")
4815 (match_operand:HI 3 "vpr_register_operand" "Up")]
4819 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
4820 [(set_attr "type" "mve_move")
4821 (set_attr "length""8")])
4825 (define_insn "mve_vnegq_m_f<mode>"
4827 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4828 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4829 (match_operand:MVE_0 2 "s_register_operand" "w")
4830 (match_operand:HI 3 "vpr_register_operand" "Up")]
4833 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4834 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
4835 [(set_attr "type" "mve_move")
4836 (set_attr "length""8")])
4839 ;; [vorrq_m_n_s, vorrq_m_n_u])
4841 (define_insn "mve_vorrq_m_n_<supf><mode>"
4843 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4844 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4845 (match_operand:SI 2 "immediate_operand" "i")
4846 (match_operand:HI 3 "vpr_register_operand" "Up")]
4850 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
4851 [(set_attr "type" "mve_move")
4852 (set_attr "length""8")])
4856 (define_insn "mve_vpselq_f<mode>"
4858 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4859 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
4860 (match_operand:MVE_0 2 "s_register_operand" "w")
4861 (match_operand:HI 3 "vpr_register_operand" "Up")]
4864 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4865 "vpsel %q0, %q1, %q2"
4866 [(set_attr "type" "mve_move")
4870 ;; [vqmovnbq_m_s, vqmovnbq_m_u])
4872 (define_insn "mve_vqmovnbq_m_<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:HI 3 "vpr_register_operand" "Up")]
4881 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
4882 [(set_attr "type" "mve_move")
4883 (set_attr "length""8")])
4886 ;; [vqmovntq_m_u, vqmovntq_m_s])
4888 (define_insn "mve_vqmovntq_m_<supf><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:HI 3 "vpr_register_operand" "Up")]
4897 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
4898 [(set_attr "type" "mve_move")
4899 (set_attr "length""8")])
4904 (define_insn "mve_vqmovunbq_m_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:HI 3 "vpr_register_operand" "Up")]
4913 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
4914 [(set_attr "type" "mve_move")
4915 (set_attr "length""8")])
4920 (define_insn "mve_vqmovuntq_m_s<mode>"
4922 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4923 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4924 (match_operand:MVE_5 2 "s_register_operand" "w")
4925 (match_operand:HI 3 "vpr_register_operand" "Up")]
4929 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
4930 [(set_attr "type" "mve_move")
4931 (set_attr "length""8")])
4934 ;; [vqrshrntq_n_u, vqrshrntq_n_s])
4936 (define_insn "mve_vqrshrntq_n_<supf><mode>"
4938 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4939 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4940 (match_operand:MVE_5 2 "s_register_operand" "w")
4941 (match_operand:SI 3 "mve_imm_8" "Rb")]
4945 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4946 [(set_attr "type" "mve_move")
4950 ;; [vqrshruntq_n_s])
4952 (define_insn "mve_vqrshruntq_n_s<mode>"
4954 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4955 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4956 (match_operand:MVE_5 2 "s_register_operand" "w")
4957 (match_operand:SI 3 "mve_imm_8" "Rb")]
4961 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4962 [(set_attr "type" "mve_move")
4966 ;; [vqshrnbq_n_u, vqshrnbq_n_s])
4968 (define_insn "mve_vqshrnbq_n_<supf><mode>"
4970 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4971 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4972 (match_operand:MVE_5 2 "s_register_operand" "w")
4973 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4977 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4978 [(set_attr "type" "mve_move")
4982 ;; [vqshrntq_n_u, vqshrntq_n_s])
4984 (define_insn "mve_vqshrntq_n_<supf><mode>"
4986 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4987 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4988 (match_operand:MVE_5 2 "s_register_operand" "w")
4989 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4993 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4994 [(set_attr "type" "mve_move")
5000 (define_insn "mve_vqshrunbq_n_s<mode>"
5002 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5003 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5004 (match_operand:MVE_5 2 "s_register_operand" "w")
5005 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5009 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
5010 [(set_attr "type" "mve_move")
5016 (define_insn "mve_vqshruntq_n_s<mode>"
5018 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5019 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5020 (match_operand:MVE_5 2 "s_register_operand" "w")
5021 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5025 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
5026 [(set_attr "type" "mve_move")
5032 (define_insn "mve_vrev32q_m_fv8hf"
5034 (set (match_operand:V8HF 0 "s_register_operand" "=w")
5035 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
5036 (match_operand:V8HF 2 "s_register_operand" "w")
5037 (match_operand:HI 3 "vpr_register_operand" "Up")]
5040 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5041 "vpst\;vrev32t.16 %q0, %q2"
5042 [(set_attr "type" "mve_move")
5043 (set_attr "length""8")])
5046 ;; [vrev32q_m_s, vrev32q_m_u])
5048 (define_insn "mve_vrev32q_m_<supf><mode>"
5050 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
5051 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
5052 (match_operand:MVE_3 2 "s_register_operand" "w")
5053 (match_operand:HI 3 "vpr_register_operand" "Up")]
5057 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
5058 [(set_attr "type" "mve_move")
5059 (set_attr "length""8")])
5064 (define_insn "mve_vrev64q_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\;vrev64t.%#<V_sz_elem> %q0, %q2"
5074 [(set_attr "type" "mve_move")
5075 (set_attr "length""8")])
5078 ;; [vrmlaldavhaxq_s])
5080 (define_insn "mve_vrmlaldavhaxq_sv4si"
5082 (set (match_operand:DI 0 "s_register_operand" "=r")
5083 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5084 (match_operand:V4SI 2 "s_register_operand" "w")
5085 (match_operand:V4SI 3 "s_register_operand" "w")]
5089 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
5090 [(set_attr "type" "mve_move")
5094 ;; [vrmlaldavhxq_p_s])
5096 (define_insn "mve_vrmlaldavhxq_p_sv4si"
5098 (set (match_operand:DI 0 "s_register_operand" "=r")
5099 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5100 (match_operand:V4SI 2 "s_register_operand" "w")
5101 (match_operand:HI 3 "vpr_register_operand" "Up")]
5105 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
5106 [(set_attr "type" "mve_move")
5107 (set_attr "length""8")])
5110 ;; [vrmlsldavhaxq_s])
5112 (define_insn "mve_vrmlsldavhaxq_sv4si"
5114 (set (match_operand:DI 0 "s_register_operand" "=r")
5115 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5116 (match_operand:V4SI 2 "s_register_operand" "w")
5117 (match_operand:V4SI 3 "s_register_operand" "w")]
5121 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
5122 [(set_attr "type" "mve_move")
5126 ;; [vrmlsldavhq_p_s])
5128 (define_insn "mve_vrmlsldavhq_p_sv4si"
5130 (set (match_operand:DI 0 "s_register_operand" "=r")
5131 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5132 (match_operand:V4SI 2 "s_register_operand" "w")
5133 (match_operand:HI 3 "vpr_register_operand" "Up")]
5137 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
5138 [(set_attr "type" "mve_move")
5139 (set_attr "length""8")])
5142 ;; [vrmlsldavhxq_p_s])
5144 (define_insn "mve_vrmlsldavhxq_p_sv4si"
5146 (set (match_operand:DI 0 "s_register_operand" "=r")
5147 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5148 (match_operand:V4SI 2 "s_register_operand" "w")
5149 (match_operand:HI 3 "vpr_register_operand" "Up")]
5153 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
5154 [(set_attr "type" "mve_move")
5155 (set_attr "length""8")])
5160 (define_insn "mve_vrndaq_m_f<mode>"
5162 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5163 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5164 (match_operand:MVE_0 2 "s_register_operand" "w")
5165 (match_operand:HI 3 "vpr_register_operand" "Up")]
5168 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5169 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
5170 [(set_attr "type" "mve_move")
5171 (set_attr "length""8")])
5176 (define_insn "mve_vrndmq_m_f<mode>"
5178 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5179 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5180 (match_operand:MVE_0 2 "s_register_operand" "w")
5181 (match_operand:HI 3 "vpr_register_operand" "Up")]
5184 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5185 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
5186 [(set_attr "type" "mve_move")
5187 (set_attr "length""8")])
5192 (define_insn "mve_vrndnq_m_f<mode>"
5194 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5195 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5196 (match_operand:MVE_0 2 "s_register_operand" "w")
5197 (match_operand:HI 3 "vpr_register_operand" "Up")]
5200 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5201 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
5202 [(set_attr "type" "mve_move")
5203 (set_attr "length""8")])
5208 (define_insn "mve_vrndpq_m_f<mode>"
5210 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5211 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5212 (match_operand:MVE_0 2 "s_register_operand" "w")
5213 (match_operand:HI 3 "vpr_register_operand" "Up")]
5216 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5217 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
5218 [(set_attr "type" "mve_move")
5219 (set_attr "length""8")])
5224 (define_insn "mve_vrndxq_m_f<mode>"
5226 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5227 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5228 (match_operand:MVE_0 2 "s_register_operand" "w")
5229 (match_operand:HI 3 "vpr_register_operand" "Up")]
5232 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5233 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
5234 [(set_attr "type" "mve_move")
5235 (set_attr "length""8")])
5238 ;; [vrshrnbq_n_s, vrshrnbq_n_u])
5240 (define_insn "mve_vrshrnbq_n_<supf><mode>"
5242 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5243 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5244 (match_operand:MVE_5 2 "s_register_operand" "w")
5245 (match_operand:SI 3 "mve_imm_8" "Rb")]
5249 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5250 [(set_attr "type" "mve_move")
5254 ;; [vrshrntq_n_u, vrshrntq_n_s])
5256 (define_insn "mve_vrshrntq_n_<supf><mode>"
5258 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5259 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5260 (match_operand:MVE_5 2 "s_register_operand" "w")
5261 (match_operand:SI 3 "mve_imm_8" "Rb")]
5265 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
5266 [(set_attr "type" "mve_move")
5270 ;; [vshrnbq_n_u, vshrnbq_n_s])
5272 (define_insn "mve_vshrnbq_n_<supf><mode>"
5274 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5275 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5276 (match_operand:MVE_5 2 "s_register_operand" "w")
5277 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5281 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5282 [(set_attr "type" "mve_move")
5286 ;; [vshrntq_n_s, vshrntq_n_u])
5288 (define_insn "mve_vshrntq_n_<supf><mode>"
5290 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5291 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5292 (match_operand:MVE_5 2 "s_register_operand" "w")
5293 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5297 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
5298 [(set_attr "type" "mve_move")
5302 ;; [vcvtmq_m_s, vcvtmq_m_u])
5304 (define_insn "mve_vcvtmq_m_<supf><mode>"
5306 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5307 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5308 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5309 (match_operand:HI 3 "vpr_register_operand" "Up")]
5312 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5313 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5314 [(set_attr "type" "mve_move")
5315 (set_attr "length""8")])
5318 ;; [vcvtpq_m_u, vcvtpq_m_s])
5320 (define_insn "mve_vcvtpq_m_<supf><mode>"
5322 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5323 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5324 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5325 (match_operand:HI 3 "vpr_register_operand" "Up")]
5328 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5329 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5330 [(set_attr "type" "mve_move")
5331 (set_attr "length""8")])
5334 ;; [vcvtnq_m_s, vcvtnq_m_u])
5336 (define_insn "mve_vcvtnq_m_<supf><mode>"
5338 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5339 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5340 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5341 (match_operand:HI 3 "vpr_register_operand" "Up")]
5344 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5345 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5346 [(set_attr "type" "mve_move")
5347 (set_attr "length""8")])
5350 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
5352 (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
5354 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5355 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5356 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5357 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5358 (match_operand:HI 4 "vpr_register_operand" "Up")]
5361 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5362 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
5363 [(set_attr "type" "mve_move")
5364 (set_attr "length""8")])
5367 ;; [vrev16q_m_u, vrev16q_m_s])
5369 (define_insn "mve_vrev16q_m_<supf>v16qi"
5371 (set (match_operand:V16QI 0 "s_register_operand" "=w")
5372 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
5373 (match_operand:V16QI 2 "s_register_operand" "w")
5374 (match_operand:HI 3 "vpr_register_operand" "Up")]
5378 "vpst\;vrev16t.8 %q0, %q2"
5379 [(set_attr "type" "mve_move")
5380 (set_attr "length""8")])
5383 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
5385 (define_insn "mve_vcvtq_m_from_f_<supf><mode>"
5387 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5388 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5389 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5390 (match_operand:HI 3 "vpr_register_operand" "Up")]
5393 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5394 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5395 [(set_attr "type" "mve_move")
5396 (set_attr "length""8")])
5399 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
5401 (define_insn "mve_vrmlaldavhq_p_<supf>v4si"
5403 (set (match_operand:DI 0 "s_register_operand" "=r")
5404 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5405 (match_operand:V4SI 2 "s_register_operand" "w")
5406 (match_operand:HI 3 "vpr_register_operand" "Up")]
5410 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
5411 [(set_attr "type" "mve_move")
5412 (set_attr "length""8")])
5415 ;; [vrmlsldavhaq_s])
5417 (define_insn "mve_vrmlsldavhaq_sv4si"
5419 (set (match_operand:DI 0 "s_register_operand" "=r")
5420 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5421 (match_operand:V4SI 2 "s_register_operand" "w")
5422 (match_operand:V4SI 3 "s_register_operand" "w")]
5426 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
5427 [(set_attr "type" "mve_move")
5431 ;; [vabavq_p_s, vabavq_p_u])
5433 (define_insn "mve_vabavq_p_<supf><mode>"
5435 (set (match_operand:SI 0 "s_register_operand" "=r")
5436 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5437 (match_operand:MVE_2 2 "s_register_operand" "w")
5438 (match_operand:MVE_2 3 "s_register_operand" "w")
5439 (match_operand:HI 4 "vpr_register_operand" "Up")]
5443 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
5444 [(set_attr "type" "mve_move")
5450 (define_insn "mve_vqshluq_m_n_s<mode>"
5452 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5453 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5454 (match_operand:MVE_2 2 "s_register_operand" "w")
5455 (match_operand:SI 3 "mve_imm_7" "Ra")
5456 (match_operand:HI 4 "vpr_register_operand" "Up")]
5460 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
5461 [(set_attr "type" "mve_move")])
5464 ;; [vshlq_m_s, vshlq_m_u])
5466 (define_insn "mve_vshlq_m_<supf><mode>"
5468 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5469 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5470 (match_operand:MVE_2 2 "s_register_operand" "w")
5471 (match_operand:MVE_2 3 "s_register_operand" "w")
5472 (match_operand:HI 4 "vpr_register_operand" "Up")]
5476 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5477 [(set_attr "type" "mve_move")])
5480 ;; [vsriq_m_n_s, vsriq_m_n_u])
5482 (define_insn "mve_vsriq_m_n_<supf><mode>"
5484 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5485 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5486 (match_operand:MVE_2 2 "s_register_operand" "w")
5487 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
5488 (match_operand:HI 4 "vpr_register_operand" "Up")]
5492 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
5493 [(set_attr "type" "mve_move")])
5496 ;; [vsubq_m_u, vsubq_m_s])
5498 (define_insn "mve_vsubq_m_<supf><mode>"
5500 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5501 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5502 (match_operand:MVE_2 2 "s_register_operand" "w")
5503 (match_operand:MVE_2 3 "s_register_operand" "w")
5504 (match_operand:HI 4 "vpr_register_operand" "Up")]
5508 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
5509 [(set_attr "type" "mve_move")])
5512 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
5514 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
5516 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5517 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5518 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5519 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5520 (match_operand:HI 4 "vpr_register_operand" "Up")]
5523 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5524 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5525 [(set_attr "type" "mve_move")
5526 (set_attr "length""8")])
5528 ;; [vabdq_m_s, vabdq_m_u])
5530 (define_insn "mve_vabdq_m_<supf><mode>"
5532 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5533 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5534 (match_operand:MVE_2 2 "s_register_operand" "w")
5535 (match_operand:MVE_2 3 "s_register_operand" "w")
5536 (match_operand:HI 4 "vpr_register_operand" "Up")]
5540 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5541 [(set_attr "type" "mve_move")
5542 (set_attr "length""8")])
5545 ;; [vaddq_m_n_s, vaddq_m_n_u])
5547 (define_insn "mve_vaddq_m_n_<supf><mode>"
5549 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5550 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5551 (match_operand:MVE_2 2 "s_register_operand" "w")
5552 (match_operand:<V_elem> 3 "s_register_operand" "r")
5553 (match_operand:HI 4 "vpr_register_operand" "Up")]
5557 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3"
5558 [(set_attr "type" "mve_move")
5559 (set_attr "length""8")])
5562 ;; [vaddq_m_u, vaddq_m_s])
5564 (define_insn "mve_vaddq_m_<supf><mode>"
5566 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5567 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5568 (match_operand:MVE_2 2 "s_register_operand" "w")
5569 (match_operand:MVE_2 3 "s_register_operand" "w")
5570 (match_operand:HI 4 "vpr_register_operand" "Up")]
5574 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3"
5575 [(set_attr "type" "mve_move")
5576 (set_attr "length""8")])
5579 ;; [vandq_m_u, vandq_m_s])
5581 (define_insn "mve_vandq_m_<supf><mode>"
5583 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5584 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5585 (match_operand:MVE_2 2 "s_register_operand" "w")
5586 (match_operand:MVE_2 3 "s_register_operand" "w")
5587 (match_operand:HI 4 "vpr_register_operand" "Up")]
5591 "vpst\;vandt %q0, %q2, %q3"
5592 [(set_attr "type" "mve_move")
5593 (set_attr "length""8")])
5596 ;; [vbicq_m_u, vbicq_m_s])
5598 (define_insn "mve_vbicq_m_<supf><mode>"
5600 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5601 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5602 (match_operand:MVE_2 2 "s_register_operand" "w")
5603 (match_operand:MVE_2 3 "s_register_operand" "w")
5604 (match_operand:HI 4 "vpr_register_operand" "Up")]
5608 "vpst\;vbict %q0, %q2, %q3"
5609 [(set_attr "type" "mve_move")
5610 (set_attr "length""8")])
5613 ;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
5615 (define_insn "mve_vbrsrq_m_n_<supf><mode>"
5617 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5618 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5619 (match_operand:MVE_2 2 "s_register_operand" "w")
5620 (match_operand:SI 3 "s_register_operand" "r")
5621 (match_operand:HI 4 "vpr_register_operand" "Up")]
5625 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
5626 [(set_attr "type" "mve_move")
5627 (set_attr "length""8")])
5630 ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
5632 (define_insn "mve_vcaddq_rot270_m_<supf><mode>"
5634 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5635 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5636 (match_operand:MVE_2 2 "s_register_operand" "w")
5637 (match_operand:MVE_2 3 "s_register_operand" "w")
5638 (match_operand:HI 4 "vpr_register_operand" "Up")]
5642 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270"
5643 [(set_attr "type" "mve_move")
5644 (set_attr "length""8")])
5647 ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
5649 (define_insn "mve_vcaddq_rot90_m_<supf><mode>"
5651 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5652 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5653 (match_operand:MVE_2 2 "s_register_operand" "w")
5654 (match_operand:MVE_2 3 "s_register_operand" "w")
5655 (match_operand:HI 4 "vpr_register_operand" "Up")]
5659 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90"
5660 [(set_attr "type" "mve_move")
5661 (set_attr "length""8")])
5664 ;; [veorq_m_s, veorq_m_u])
5666 (define_insn "mve_veorq_m_<supf><mode>"
5668 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5669 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5670 (match_operand:MVE_2 2 "s_register_operand" "w")
5671 (match_operand:MVE_2 3 "s_register_operand" "w")
5672 (match_operand:HI 4 "vpr_register_operand" "Up")]
5676 "vpst\;veort %q0, %q2, %q3"
5677 [(set_attr "type" "mve_move")
5678 (set_attr "length""8")])
5681 ;; [vhaddq_m_n_s, vhaddq_m_n_u])
5683 (define_insn "mve_vhaddq_m_n_<supf><mode>"
5685 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5686 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5687 (match_operand:MVE_2 2 "s_register_operand" "w")
5688 (match_operand:<V_elem> 3 "s_register_operand" "r")
5689 (match_operand:HI 4 "vpr_register_operand" "Up")]
5693 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5694 [(set_attr "type" "mve_move")
5695 (set_attr "length""8")])
5698 ;; [vhaddq_m_s, vhaddq_m_u])
5700 (define_insn "mve_vhaddq_m_<supf><mode>"
5702 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5703 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5704 (match_operand:MVE_2 2 "s_register_operand" "w")
5705 (match_operand:MVE_2 3 "s_register_operand" "w")
5706 (match_operand:HI 4 "vpr_register_operand" "Up")]
5710 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5711 [(set_attr "type" "mve_move")
5712 (set_attr "length""8")])
5715 ;; [vhsubq_m_n_s, vhsubq_m_n_u])
5717 (define_insn "mve_vhsubq_m_n_<supf><mode>"
5719 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5720 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5721 (match_operand:MVE_2 2 "s_register_operand" "w")
5722 (match_operand:<V_elem> 3 "s_register_operand" "r")
5723 (match_operand:HI 4 "vpr_register_operand" "Up")]
5727 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5728 [(set_attr "type" "mve_move")
5729 (set_attr "length""8")])
5732 ;; [vhsubq_m_s, vhsubq_m_u])
5734 (define_insn "mve_vhsubq_m_<supf><mode>"
5736 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5737 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5738 (match_operand:MVE_2 2 "s_register_operand" "w")
5739 (match_operand:MVE_2 3 "s_register_operand" "w")
5740 (match_operand:HI 4 "vpr_register_operand" "Up")]
5744 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5745 [(set_attr "type" "mve_move")
5746 (set_attr "length""8")])
5749 ;; [vmaxq_m_s, vmaxq_m_u])
5751 (define_insn "mve_vmaxq_m_<supf><mode>"
5753 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5754 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5755 (match_operand:MVE_2 2 "s_register_operand" "w")
5756 (match_operand:MVE_2 3 "s_register_operand" "w")
5757 (match_operand:HI 4 "vpr_register_operand" "Up")]
5761 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5762 [(set_attr "type" "mve_move")
5763 (set_attr "length""8")])
5766 ;; [vminq_m_s, vminq_m_u])
5768 (define_insn "mve_vminq_m_<supf><mode>"
5770 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5771 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5772 (match_operand:MVE_2 2 "s_register_operand" "w")
5773 (match_operand:MVE_2 3 "s_register_operand" "w")
5774 (match_operand:HI 4 "vpr_register_operand" "Up")]
5778 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5779 [(set_attr "type" "mve_move")
5780 (set_attr "length""8")])
5783 ;; [vmladavaq_p_u, vmladavaq_p_s])
5785 (define_insn "mve_vmladavaq_p_<supf><mode>"
5787 (set (match_operand:SI 0 "s_register_operand" "=Te")
5788 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5789 (match_operand:MVE_2 2 "s_register_operand" "w")
5790 (match_operand:MVE_2 3 "s_register_operand" "w")
5791 (match_operand:HI 4 "vpr_register_operand" "Up")]
5795 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3"
5796 [(set_attr "type" "mve_move")
5797 (set_attr "length""8")])
5800 ;; [vmlaq_m_n_s, vmlaq_m_n_u])
5802 (define_insn "mve_vmlaq_m_n_<supf><mode>"
5804 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5805 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5806 (match_operand:MVE_2 2 "s_register_operand" "w")
5807 (match_operand:<V_elem> 3 "s_register_operand" "r")
5808 (match_operand:HI 4 "vpr_register_operand" "Up")]
5812 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3"
5813 [(set_attr "type" "mve_move")
5814 (set_attr "length""8")])
5817 ;; [vmlasq_m_n_u, vmlasq_m_n_s])
5819 (define_insn "mve_vmlasq_m_n_<supf><mode>"
5821 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5822 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5823 (match_operand:MVE_2 2 "s_register_operand" "w")
5824 (match_operand:<V_elem> 3 "s_register_operand" "r")
5825 (match_operand:HI 4 "vpr_register_operand" "Up")]
5829 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3"
5830 [(set_attr "type" "mve_move")
5831 (set_attr "length""8")])
5834 ;; [vmulhq_m_s, vmulhq_m_u])
5836 (define_insn "mve_vmulhq_m_<supf><mode>"
5838 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5839 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5840 (match_operand:MVE_2 2 "s_register_operand" "w")
5841 (match_operand:MVE_2 3 "s_register_operand" "w")
5842 (match_operand:HI 4 "vpr_register_operand" "Up")]
5846 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5847 [(set_attr "type" "mve_move")
5848 (set_attr "length""8")])
5851 ;; [vmullbq_int_m_u, vmullbq_int_m_s])
5853 (define_insn "mve_vmullbq_int_m_<supf><mode>"
5855 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5856 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5857 (match_operand:MVE_2 2 "s_register_operand" "w")
5858 (match_operand:MVE_2 3 "s_register_operand" "w")
5859 (match_operand:HI 4 "vpr_register_operand" "Up")]
5863 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5864 [(set_attr "type" "mve_move")
5865 (set_attr "length""8")])
5868 ;; [vmulltq_int_m_s, vmulltq_int_m_u])
5870 (define_insn "mve_vmulltq_int_m_<supf><mode>"
5872 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5873 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5874 (match_operand:MVE_2 2 "s_register_operand" "w")
5875 (match_operand:MVE_2 3 "s_register_operand" "w")
5876 (match_operand:HI 4 "vpr_register_operand" "Up")]
5880 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5881 [(set_attr "type" "mve_move")
5882 (set_attr "length""8")])
5885 ;; [vmulq_m_n_u, vmulq_m_n_s])
5887 (define_insn "mve_vmulq_m_n_<supf><mode>"
5889 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5890 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5891 (match_operand:MVE_2 2 "s_register_operand" "w")
5892 (match_operand:<V_elem> 3 "s_register_operand" "r")
5893 (match_operand:HI 4 "vpr_register_operand" "Up")]
5897 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3"
5898 [(set_attr "type" "mve_move")
5899 (set_attr "length""8")])
5902 ;; [vmulq_m_s, vmulq_m_u])
5904 (define_insn "mve_vmulq_m_<supf><mode>"
5906 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5907 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5908 (match_operand:MVE_2 2 "s_register_operand" "w")
5909 (match_operand:MVE_2 3 "s_register_operand" "w")
5910 (match_operand:HI 4 "vpr_register_operand" "Up")]
5914 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3"
5915 [(set_attr "type" "mve_move")
5916 (set_attr "length""8")])
5919 ;; [vornq_m_u, vornq_m_s])
5921 (define_insn "mve_vornq_m_<supf><mode>"
5923 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5924 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5925 (match_operand:MVE_2 2 "s_register_operand" "w")
5926 (match_operand:MVE_2 3 "s_register_operand" "w")
5927 (match_operand:HI 4 "vpr_register_operand" "Up")]
5931 "vpst\;vornt %q0, %q2, %q3"
5932 [(set_attr "type" "mve_move")
5933 (set_attr "length""8")])
5936 ;; [vorrq_m_s, vorrq_m_u])
5938 (define_insn "mve_vorrq_m_<supf><mode>"
5940 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5941 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5942 (match_operand:MVE_2 2 "s_register_operand" "w")
5943 (match_operand:MVE_2 3 "s_register_operand" "w")
5944 (match_operand:HI 4 "vpr_register_operand" "Up")]
5948 "vpst\;vorrt %q0, %q2, %q3"
5949 [(set_attr "type" "mve_move")
5950 (set_attr "length""8")])
5953 ;; [vqaddq_m_n_u, vqaddq_m_n_s])
5955 (define_insn "mve_vqaddq_m_n_<supf><mode>"
5957 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5958 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5959 (match_operand:MVE_2 2 "s_register_operand" "w")
5960 (match_operand:<V_elem> 3 "s_register_operand" "r")
5961 (match_operand:HI 4 "vpr_register_operand" "Up")]
5965 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5966 [(set_attr "type" "mve_move")
5967 (set_attr "length""8")])
5970 ;; [vqaddq_m_u, vqaddq_m_s])
5972 (define_insn "mve_vqaddq_m_<supf><mode>"
5974 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5975 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5976 (match_operand:MVE_2 2 "s_register_operand" "w")
5977 (match_operand:MVE_2 3 "s_register_operand" "w")
5978 (match_operand:HI 4 "vpr_register_operand" "Up")]
5982 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5983 [(set_attr "type" "mve_move")
5984 (set_attr "length""8")])
5987 ;; [vqdmlahq_m_n_s])
5989 (define_insn "mve_vqdmlahq_m_n_s<mode>"
5991 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5992 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5993 (match_operand:MVE_2 2 "s_register_operand" "w")
5994 (match_operand:<V_elem> 3 "s_register_operand" "r")
5995 (match_operand:HI 4 "vpr_register_operand" "Up")]
5999 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
6000 [(set_attr "type" "mve_move")
6001 (set_attr "length""8")])
6004 ;; [vqdmlashq_m_n_s])
6006 (define_insn "mve_vqdmlashq_m_n_s<mode>"
6008 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6009 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6010 (match_operand:MVE_2 2 "s_register_operand" "w")
6011 (match_operand:<V_elem> 3 "s_register_operand" "r")
6012 (match_operand:HI 4 "vpr_register_operand" "Up")]
6016 "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
6017 [(set_attr "type" "mve_move")
6018 (set_attr "length""8")])
6021 ;; [vqrdmlahq_m_n_s])
6023 (define_insn "mve_vqrdmlahq_m_n_s<mode>"
6025 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6026 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6027 (match_operand:MVE_2 2 "s_register_operand" "w")
6028 (match_operand:<V_elem> 3 "s_register_operand" "r")
6029 (match_operand:HI 4 "vpr_register_operand" "Up")]
6033 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
6034 [(set_attr "type" "mve_move")
6035 (set_attr "length""8")])
6038 ;; [vqrdmlashq_m_n_s])
6040 (define_insn "mve_vqrdmlashq_m_n_s<mode>"
6042 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6043 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6044 (match_operand:MVE_2 2 "s_register_operand" "w")
6045 (match_operand:<V_elem> 3 "s_register_operand" "r")
6046 (match_operand:HI 4 "vpr_register_operand" "Up")]
6050 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
6051 [(set_attr "type" "mve_move")
6052 (set_attr "length""8")])
6055 ;; [vqrshlq_m_u, vqrshlq_m_s])
6057 (define_insn "mve_vqrshlq_m_<supf><mode>"
6059 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6060 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6061 (match_operand:MVE_2 2 "s_register_operand" "w")
6062 (match_operand:MVE_2 3 "s_register_operand" "w")
6063 (match_operand:HI 4 "vpr_register_operand" "Up")]
6067 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6068 [(set_attr "type" "mve_move")
6069 (set_attr "length""8")])
6072 ;; [vqshlq_m_n_s, vqshlq_m_n_u])
6074 (define_insn "mve_vqshlq_m_n_<supf><mode>"
6076 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6077 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6078 (match_operand:MVE_2 2 "s_register_operand" "w")
6079 (match_operand:SI 3 "immediate_operand" "i")
6080 (match_operand:HI 4 "vpr_register_operand" "Up")]
6084 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6085 [(set_attr "type" "mve_move")
6086 (set_attr "length""8")])
6089 ;; [vqshlq_m_u, vqshlq_m_s])
6091 (define_insn "mve_vqshlq_m_<supf><mode>"
6093 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6094 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6095 (match_operand:MVE_2 2 "s_register_operand" "w")
6096 (match_operand:MVE_2 3 "s_register_operand" "w")
6097 (match_operand:HI 4 "vpr_register_operand" "Up")]
6101 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6102 [(set_attr "type" "mve_move")
6103 (set_attr "length""8")])
6106 ;; [vqsubq_m_n_u, vqsubq_m_n_s])
6108 (define_insn "mve_vqsubq_m_n_<supf><mode>"
6110 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6111 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6112 (match_operand:MVE_2 2 "s_register_operand" "w")
6113 (match_operand:<V_elem> 3 "s_register_operand" "r")
6114 (match_operand:HI 4 "vpr_register_operand" "Up")]
6118 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6119 [(set_attr "type" "mve_move")
6120 (set_attr "length""8")])
6123 ;; [vqsubq_m_u, vqsubq_m_s])
6125 (define_insn "mve_vqsubq_m_<supf><mode>"
6127 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6128 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6129 (match_operand:MVE_2 2 "s_register_operand" "w")
6130 (match_operand:MVE_2 3 "s_register_operand" "w")
6131 (match_operand:HI 4 "vpr_register_operand" "Up")]
6135 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6136 [(set_attr "type" "mve_move")
6137 (set_attr "length""8")])
6140 ;; [vrhaddq_m_u, vrhaddq_m_s])
6142 (define_insn "mve_vrhaddq_m_<supf><mode>"
6144 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6145 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6146 (match_operand:MVE_2 2 "s_register_operand" "w")
6147 (match_operand:MVE_2 3 "s_register_operand" "w")
6148 (match_operand:HI 4 "vpr_register_operand" "Up")]
6152 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6153 [(set_attr "type" "mve_move")
6154 (set_attr "length""8")])
6157 ;; [vrmulhq_m_u, vrmulhq_m_s])
6159 (define_insn "mve_vrmulhq_m_<supf><mode>"
6161 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6162 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6163 (match_operand:MVE_2 2 "s_register_operand" "w")
6164 (match_operand:MVE_2 3 "s_register_operand" "w")
6165 (match_operand:HI 4 "vpr_register_operand" "Up")]
6169 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6170 [(set_attr "type" "mve_move")
6171 (set_attr "length""8")])
6174 ;; [vrshlq_m_s, vrshlq_m_u])
6176 (define_insn "mve_vrshlq_m_<supf><mode>"
6178 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6179 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6180 (match_operand:MVE_2 2 "s_register_operand" "w")
6181 (match_operand:MVE_2 3 "s_register_operand" "w")
6182 (match_operand:HI 4 "vpr_register_operand" "Up")]
6186 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6187 [(set_attr "type" "mve_move")
6188 (set_attr "length""8")])
6191 ;; [vrshrq_m_n_s, vrshrq_m_n_u])
6193 (define_insn "mve_vrshrq_m_n_<supf><mode>"
6195 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6196 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6197 (match_operand:MVE_2 2 "s_register_operand" "w")
6198 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6199 (match_operand:HI 4 "vpr_register_operand" "Up")]
6203 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6204 [(set_attr "type" "mve_move")
6205 (set_attr "length""8")])
6208 ;; [vshlq_m_n_s, vshlq_m_n_u])
6210 (define_insn "mve_vshlq_m_n_<supf><mode>"
6212 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6213 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6214 (match_operand:MVE_2 2 "s_register_operand" "w")
6215 (match_operand:SI 3 "immediate_operand" "i")
6216 (match_operand:HI 4 "vpr_register_operand" "Up")]
6220 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6221 [(set_attr "type" "mve_move")
6222 (set_attr "length""8")])
6225 ;; [vshrq_m_n_s, vshrq_m_n_u])
6227 (define_insn "mve_vshrq_m_n_<supf><mode>"
6229 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6230 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6231 (match_operand:MVE_2 2 "s_register_operand" "w")
6232 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6233 (match_operand:HI 4 "vpr_register_operand" "Up")]
6237 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6238 [(set_attr "type" "mve_move")
6239 (set_attr "length""8")])
6242 ;; [vsliq_m_n_u, vsliq_m_n_s])
6244 (define_insn "mve_vsliq_m_n_<supf><mode>"
6246 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6247 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6248 (match_operand:MVE_2 2 "s_register_operand" "w")
6249 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
6250 (match_operand:HI 4 "vpr_register_operand" "Up")]
6254 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
6255 [(set_attr "type" "mve_move")
6256 (set_attr "length""8")])
6259 ;; [vsubq_m_n_s, vsubq_m_n_u])
6261 (define_insn "mve_vsubq_m_n_<supf><mode>"
6263 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6264 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6265 (match_operand:MVE_2 2 "s_register_operand" "w")
6266 (match_operand:<V_elem> 3 "s_register_operand" "r")
6267 (match_operand:HI 4 "vpr_register_operand" "Up")]
6271 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
6272 [(set_attr "type" "mve_move")
6273 (set_attr "length""8")])
6276 ;; [vhcaddq_rot270_m_s])
6278 (define_insn "mve_vhcaddq_rot270_m_s<mode>"
6280 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6281 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6282 (match_operand:MVE_2 2 "s_register_operand" "w")
6283 (match_operand:MVE_2 3 "s_register_operand" "w")
6284 (match_operand:HI 4 "vpr_register_operand" "Up")]
6285 VHCADDQ_ROT270_M_S))
6288 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
6289 [(set_attr "type" "mve_move")
6290 (set_attr "length""8")])
6293 ;; [vhcaddq_rot90_m_s])
6295 (define_insn "mve_vhcaddq_rot90_m_s<mode>"
6297 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6298 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6299 (match_operand:MVE_2 2 "s_register_operand" "w")
6300 (match_operand:MVE_2 3 "s_register_operand" "w")
6301 (match_operand:HI 4 "vpr_register_operand" "Up")]
6305 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
6306 [(set_attr "type" "mve_move")
6307 (set_attr "length""8")])
6310 ;; [vmladavaxq_p_s])
6312 (define_insn "mve_vmladavaxq_p_s<mode>"
6314 (set (match_operand:SI 0 "s_register_operand" "=Te")
6315 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6316 (match_operand:MVE_2 2 "s_register_operand" "w")
6317 (match_operand:MVE_2 3 "s_register_operand" "w")
6318 (match_operand:HI 4 "vpr_register_operand" "Up")]
6322 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6323 [(set_attr "type" "mve_move")
6324 (set_attr "length""8")])
6329 (define_insn "mve_vmlsdavaq_p_s<mode>"
6331 (set (match_operand:SI 0 "s_register_operand" "=Te")
6332 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6333 (match_operand:MVE_2 2 "s_register_operand" "w")
6334 (match_operand:MVE_2 3 "s_register_operand" "w")
6335 (match_operand:HI 4 "vpr_register_operand" "Up")]
6339 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
6340 [(set_attr "type" "mve_move")
6341 (set_attr "length""8")])
6344 ;; [vmlsdavaxq_p_s])
6346 (define_insn "mve_vmlsdavaxq_p_s<mode>"
6348 (set (match_operand:SI 0 "s_register_operand" "=Te")
6349 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6350 (match_operand:MVE_2 2 "s_register_operand" "w")
6351 (match_operand:MVE_2 3 "s_register_operand" "w")
6352 (match_operand:HI 4 "vpr_register_operand" "Up")]
6356 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6357 [(set_attr "type" "mve_move")
6358 (set_attr "length""8")])
6363 (define_insn "mve_vqdmladhq_m_s<mode>"
6365 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6366 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6367 (match_operand:MVE_2 2 "s_register_operand" "w")
6368 (match_operand:MVE_2 3 "s_register_operand" "w")
6369 (match_operand:HI 4 "vpr_register_operand" "Up")]
6373 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6374 [(set_attr "type" "mve_move")
6375 (set_attr "length""8")])
6378 ;; [vqdmladhxq_m_s])
6380 (define_insn "mve_vqdmladhxq_m_s<mode>"
6382 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6383 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6384 (match_operand:MVE_2 2 "s_register_operand" "w")
6385 (match_operand:MVE_2 3 "s_register_operand" "w")
6386 (match_operand:HI 4 "vpr_register_operand" "Up")]
6390 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6391 [(set_attr "type" "mve_move")
6392 (set_attr "length""8")])
6397 (define_insn "mve_vqdmlsdhq_m_s<mode>"
6399 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6400 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6401 (match_operand:MVE_2 2 "s_register_operand" "w")
6402 (match_operand:MVE_2 3 "s_register_operand" "w")
6403 (match_operand:HI 4 "vpr_register_operand" "Up")]
6407 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6408 [(set_attr "type" "mve_move")
6409 (set_attr "length""8")])
6412 ;; [vqdmlsdhxq_m_s])
6414 (define_insn "mve_vqdmlsdhxq_m_s<mode>"
6416 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6417 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6418 (match_operand:MVE_2 2 "s_register_operand" "w")
6419 (match_operand:MVE_2 3 "s_register_operand" "w")
6420 (match_operand:HI 4 "vpr_register_operand" "Up")]
6424 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6425 [(set_attr "type" "mve_move")
6426 (set_attr "length""8")])
6429 ;; [vqdmulhq_m_n_s])
6431 (define_insn "mve_vqdmulhq_m_n_s<mode>"
6433 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6434 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6435 (match_operand:MVE_2 2 "s_register_operand" "w")
6436 (match_operand:<V_elem> 3 "s_register_operand" "r")
6437 (match_operand:HI 4 "vpr_register_operand" "Up")]
6441 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6442 [(set_attr "type" "mve_move")
6443 (set_attr "length""8")])
6448 (define_insn "mve_vqdmulhq_m_s<mode>"
6450 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6451 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6452 (match_operand:MVE_2 2 "s_register_operand" "w")
6453 (match_operand:MVE_2 3 "s_register_operand" "w")
6454 (match_operand:HI 4 "vpr_register_operand" "Up")]
6458 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6459 [(set_attr "type" "mve_move")
6460 (set_attr "length""8")])
6463 ;; [vqrdmladhq_m_s])
6465 (define_insn "mve_vqrdmladhq_m_s<mode>"
6467 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6468 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6469 (match_operand:MVE_2 2 "s_register_operand" "w")
6470 (match_operand:MVE_2 3 "s_register_operand" "w")
6471 (match_operand:HI 4 "vpr_register_operand" "Up")]
6475 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6476 [(set_attr "type" "mve_move")
6477 (set_attr "length""8")])
6480 ;; [vqrdmladhxq_m_s])
6482 (define_insn "mve_vqrdmladhxq_m_s<mode>"
6484 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6485 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6486 (match_operand:MVE_2 2 "s_register_operand" "w")
6487 (match_operand:MVE_2 3 "s_register_operand" "w")
6488 (match_operand:HI 4 "vpr_register_operand" "Up")]
6492 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6493 [(set_attr "type" "mve_move")
6494 (set_attr "length""8")])
6497 ;; [vqrdmlsdhq_m_s])
6499 (define_insn "mve_vqrdmlsdhq_m_s<mode>"
6501 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6502 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6503 (match_operand:MVE_2 2 "s_register_operand" "w")
6504 (match_operand:MVE_2 3 "s_register_operand" "w")
6505 (match_operand:HI 4 "vpr_register_operand" "Up")]
6509 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6510 [(set_attr "type" "mve_move")
6511 (set_attr "length""8")])
6514 ;; [vqrdmlsdhxq_m_s])
6516 (define_insn "mve_vqrdmlsdhxq_m_s<mode>"
6518 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6519 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6520 (match_operand:MVE_2 2 "s_register_operand" "w")
6521 (match_operand:MVE_2 3 "s_register_operand" "w")
6522 (match_operand:HI 4 "vpr_register_operand" "Up")]
6526 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6527 [(set_attr "type" "mve_move")
6528 (set_attr "length""8")])
6531 ;; [vqrdmulhq_m_n_s])
6533 (define_insn "mve_vqrdmulhq_m_n_s<mode>"
6535 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6536 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6537 (match_operand:MVE_2 2 "s_register_operand" "w")
6538 (match_operand:<V_elem> 3 "s_register_operand" "r")
6539 (match_operand:HI 4 "vpr_register_operand" "Up")]
6543 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6544 [(set_attr "type" "mve_move")
6545 (set_attr "length""8")])
6550 (define_insn "mve_vqrdmulhq_m_s<mode>"
6552 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6553 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6554 (match_operand:MVE_2 2 "s_register_operand" "w")
6555 (match_operand:MVE_2 3 "s_register_operand" "w")
6556 (match_operand:HI 4 "vpr_register_operand" "Up")]
6560 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6561 [(set_attr "type" "mve_move")
6562 (set_attr "length""8")])
6565 ;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
6567 (define_insn "mve_vmlaldavaq_p_<supf><mode>"
6569 (set (match_operand:DI 0 "s_register_operand" "=r")
6570 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6571 (match_operand:MVE_5 2 "s_register_operand" "w")
6572 (match_operand:MVE_5 3 "s_register_operand" "w")
6573 (match_operand:HI 4 "vpr_register_operand" "Up")]
6577 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6578 [(set_attr "type" "mve_move")
6579 (set_attr "length""8")])
6582 ;; [vmlaldavaxq_p_s])
6584 (define_insn "mve_vmlaldavaxq_p_<supf><mode>"
6586 (set (match_operand:DI 0 "s_register_operand" "=r")
6587 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6588 (match_operand:MVE_5 2 "s_register_operand" "w")
6589 (match_operand:MVE_5 3 "s_register_operand" "w")
6590 (match_operand:HI 4 "vpr_register_operand" "Up")]
6594 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6595 [(set_attr "type" "mve_move")
6596 (set_attr "length""8")])
6599 ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
6601 (define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
6603 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6604 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6605 (match_operand:MVE_5 2 "s_register_operand" "w")
6606 (match_operand:SI 3 "mve_imm_8" "Rb")
6607 (match_operand:HI 4 "vpr_register_operand" "Up")]
6611 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6612 [(set_attr "type" "mve_move")
6613 (set_attr "length""8")])
6616 ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
6618 (define_insn "mve_vqrshrntq_m_n_<supf><mode>"
6620 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6621 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6622 (match_operand:MVE_5 2 "s_register_operand" "w")
6623 (match_operand:SI 3 "mve_imm_8" "Rb")
6624 (match_operand:HI 4 "vpr_register_operand" "Up")]
6628 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6629 [(set_attr "type" "mve_move")
6630 (set_attr "length""8")])
6633 ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
6635 (define_insn "mve_vqshrnbq_m_n_<supf><mode>"
6637 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6638 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6639 (match_operand:MVE_5 2 "s_register_operand" "w")
6640 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6641 (match_operand:HI 4 "vpr_register_operand" "Up")]
6645 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6646 [(set_attr "type" "mve_move")
6647 (set_attr "length""8")])
6650 ;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
6652 (define_insn "mve_vqshrntq_m_n_<supf><mode>"
6654 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6655 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6656 (match_operand:MVE_5 2 "s_register_operand" "w")
6657 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6658 (match_operand:HI 4 "vpr_register_operand" "Up")]
6662 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6663 [(set_attr "type" "mve_move")
6664 (set_attr "length""8")])
6667 ;; [vrmlaldavhaq_p_s])
6669 (define_insn "mve_vrmlaldavhaq_p_sv4si"
6671 (set (match_operand:DI 0 "s_register_operand" "=r")
6672 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6673 (match_operand:V4SI 2 "s_register_operand" "w")
6674 (match_operand:V4SI 3 "s_register_operand" "w")
6675 (match_operand:HI 4 "vpr_register_operand" "Up")]
6679 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
6680 [(set_attr "type" "mve_move")
6681 (set_attr "length""8")])
6684 ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
6686 (define_insn "mve_vrshrnbq_m_n_<supf><mode>"
6688 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6689 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6690 (match_operand:MVE_5 2 "s_register_operand" "w")
6691 (match_operand:SI 3 "mve_imm_8" "Rb")
6692 (match_operand:HI 4 "vpr_register_operand" "Up")]
6696 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6697 [(set_attr "type" "mve_move")
6698 (set_attr "length""8")])
6701 ;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
6703 (define_insn "mve_vrshrntq_m_n_<supf><mode>"
6705 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6706 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6707 (match_operand:MVE_5 2 "s_register_operand" "w")
6708 (match_operand:SI 3 "mve_imm_8" "Rb")
6709 (match_operand:HI 4 "vpr_register_operand" "Up")]
6713 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6714 [(set_attr "type" "mve_move")
6715 (set_attr "length""8")])
6718 ;; [vshllbq_m_n_u, vshllbq_m_n_s])
6720 (define_insn "mve_vshllbq_m_n_<supf><mode>"
6722 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6723 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6724 (match_operand:MVE_3 2 "s_register_operand" "w")
6725 (match_operand:SI 3 "immediate_operand" "i")
6726 (match_operand:HI 4 "vpr_register_operand" "Up")]
6730 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6731 [(set_attr "type" "mve_move")
6732 (set_attr "length""8")])
6735 ;; [vshlltq_m_n_u, vshlltq_m_n_s])
6737 (define_insn "mve_vshlltq_m_n_<supf><mode>"
6739 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6740 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6741 (match_operand:MVE_3 2 "s_register_operand" "w")
6742 (match_operand:SI 3 "immediate_operand" "i")
6743 (match_operand:HI 4 "vpr_register_operand" "Up")]
6747 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6748 [(set_attr "type" "mve_move")
6749 (set_attr "length""8")])
6752 ;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
6754 (define_insn "mve_vshrnbq_m_n_<supf><mode>"
6756 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6757 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6758 (match_operand:MVE_5 2 "s_register_operand" "w")
6759 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6760 (match_operand:HI 4 "vpr_register_operand" "Up")]
6764 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6765 [(set_attr "type" "mve_move")
6766 (set_attr "length""8")])
6769 ;; [vshrntq_m_n_s, vshrntq_m_n_u])
6771 (define_insn "mve_vshrntq_m_n_<supf><mode>"
6773 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6774 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6775 (match_operand:MVE_5 2 "s_register_operand" "w")
6776 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6777 (match_operand:HI 4 "vpr_register_operand" "Up")]
6781 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6782 [(set_attr "type" "mve_move")
6783 (set_attr "length""8")])
6786 ;; [vmlsldavaq_p_s])
6788 (define_insn "mve_vmlsldavaq_p_s<mode>"
6790 (set (match_operand:DI 0 "s_register_operand" "=r")
6791 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6792 (match_operand:MVE_5 2 "s_register_operand" "w")
6793 (match_operand:MVE_5 3 "s_register_operand" "w")
6794 (match_operand:HI 4 "vpr_register_operand" "Up")]
6798 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6799 [(set_attr "type" "mve_move")
6800 (set_attr "length""8")])
6803 ;; [vmlsldavaxq_p_s])
6805 (define_insn "mve_vmlsldavaxq_p_s<mode>"
6807 (set (match_operand:DI 0 "s_register_operand" "=r")
6808 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6809 (match_operand:MVE_5 2 "s_register_operand" "w")
6810 (match_operand:MVE_5 3 "s_register_operand" "w")
6811 (match_operand:HI 4 "vpr_register_operand" "Up")]
6815 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6816 [(set_attr "type" "mve_move")
6817 (set_attr "length""8")])
6820 ;; [vmullbq_poly_m_p])
6822 (define_insn "mve_vmullbq_poly_m_p<mode>"
6824 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6825 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6826 (match_operand:MVE_3 2 "s_register_operand" "w")
6827 (match_operand:MVE_3 3 "s_register_operand" "w")
6828 (match_operand:HI 4 "vpr_register_operand" "Up")]
6832 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6833 [(set_attr "type" "mve_move")
6834 (set_attr "length""8")])
6837 ;; [vmulltq_poly_m_p])
6839 (define_insn "mve_vmulltq_poly_m_p<mode>"
6841 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6842 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6843 (match_operand:MVE_3 2 "s_register_operand" "w")
6844 (match_operand:MVE_3 3 "s_register_operand" "w")
6845 (match_operand:HI 4 "vpr_register_operand" "Up")]
6849 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6850 [(set_attr "type" "mve_move")
6851 (set_attr "length""8")])
6854 ;; [vqdmullbq_m_n_s])
6856 (define_insn "mve_vqdmullbq_m_n_s<mode>"
6858 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6859 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6860 (match_operand:MVE_5 2 "s_register_operand" "w")
6861 (match_operand:<V_elem> 3 "s_register_operand" "r")
6862 (match_operand:HI 4 "vpr_register_operand" "Up")]
6866 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6867 [(set_attr "type" "mve_move")
6868 (set_attr "length""8")])
6873 (define_insn "mve_vqdmullbq_m_s<mode>"
6875 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6876 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6877 (match_operand:MVE_5 2 "s_register_operand" "w")
6878 (match_operand:MVE_5 3 "s_register_operand" "w")
6879 (match_operand:HI 4 "vpr_register_operand" "Up")]
6883 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6884 [(set_attr "type" "mve_move")
6885 (set_attr "length""8")])
6888 ;; [vqdmulltq_m_n_s])
6890 (define_insn "mve_vqdmulltq_m_n_s<mode>"
6892 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6893 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6894 (match_operand:MVE_5 2 "s_register_operand" "w")
6895 (match_operand:<V_elem> 3 "s_register_operand" "r")
6896 (match_operand:HI 4 "vpr_register_operand" "Up")]
6900 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
6901 [(set_attr "type" "mve_move")
6902 (set_attr "length""8")])
6907 (define_insn "mve_vqdmulltq_m_s<mode>"
6909 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6910 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6911 (match_operand:MVE_5 2 "s_register_operand" "w")
6912 (match_operand:MVE_5 3 "s_register_operand" "w")
6913 (match_operand:HI 4 "vpr_register_operand" "Up")]
6917 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6918 [(set_attr "type" "mve_move")
6919 (set_attr "length""8")])
6922 ;; [vqrshrunbq_m_n_s])
6924 (define_insn "mve_vqrshrunbq_m_n_s<mode>"
6926 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6927 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6928 (match_operand:MVE_5 2 "s_register_operand" "w")
6929 (match_operand:SI 3 "mve_imm_8" "Rb")
6930 (match_operand:HI 4 "vpr_register_operand" "Up")]
6934 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6935 [(set_attr "type" "mve_move")
6936 (set_attr "length""8")])
6939 ;; [vqrshruntq_m_n_s])
6941 (define_insn "mve_vqrshruntq_m_n_s<mode>"
6943 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6944 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6945 (match_operand:MVE_5 2 "s_register_operand" "w")
6946 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6947 (match_operand:HI 4 "vpr_register_operand" "Up")]
6951 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6952 [(set_attr "type" "mve_move")
6953 (set_attr "length""8")])
6956 ;; [vqshrunbq_m_n_s])
6958 (define_insn "mve_vqshrunbq_m_n_s<mode>"
6960 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6961 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6962 (match_operand:MVE_5 2 "s_register_operand" "w")
6963 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6964 (match_operand:HI 4 "vpr_register_operand" "Up")]
6968 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6969 [(set_attr "type" "mve_move")
6970 (set_attr "length""8")])
6973 ;; [vqshruntq_m_n_s])
6975 (define_insn "mve_vqshruntq_m_n_s<mode>"
6977 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6978 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6979 (match_operand:MVE_5 2 "s_register_operand" "w")
6980 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6981 (match_operand:HI 4 "vpr_register_operand" "Up")]
6985 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6986 [(set_attr "type" "mve_move")
6987 (set_attr "length""8")])
6990 ;; [vrmlaldavhaq_p_u])
6992 (define_insn "mve_vrmlaldavhaq_p_uv4si"
6994 (set (match_operand:DI 0 "s_register_operand" "=r")
6995 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6996 (match_operand:V4SI 2 "s_register_operand" "w")
6997 (match_operand:V4SI 3 "s_register_operand" "w")
6998 (match_operand:HI 4 "vpr_register_operand" "Up")]
7002 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
7003 [(set_attr "type" "mve_move")
7004 (set_attr "length""8")])
7007 ;; [vrmlaldavhaxq_p_s])
7009 (define_insn "mve_vrmlaldavhaxq_p_sv4si"
7011 (set (match_operand:DI 0 "s_register_operand" "=r")
7012 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7013 (match_operand:V4SI 2 "s_register_operand" "w")
7014 (match_operand:V4SI 3 "s_register_operand" "w")
7015 (match_operand:HI 4 "vpr_register_operand" "Up")]
7019 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
7020 [(set_attr "type" "mve_move")
7021 (set_attr "length""8")])
7024 ;; [vrmlsldavhaq_p_s])
7026 (define_insn "mve_vrmlsldavhaq_p_sv4si"
7028 (set (match_operand:DI 0 "s_register_operand" "=r")
7029 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7030 (match_operand:V4SI 2 "s_register_operand" "w")
7031 (match_operand:V4SI 3 "s_register_operand" "w")
7032 (match_operand:HI 4 "vpr_register_operand" "Up")]
7036 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
7037 [(set_attr "type" "mve_move")
7038 (set_attr "length""8")])
7041 ;; [vrmlsldavhaxq_p_s])
7043 (define_insn "mve_vrmlsldavhaxq_p_sv4si"
7045 (set (match_operand:DI 0 "s_register_operand" "=r")
7046 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7047 (match_operand:V4SI 2 "s_register_operand" "w")
7048 (match_operand:V4SI 3 "s_register_operand" "w")
7049 (match_operand:HI 4 "vpr_register_operand" "Up")]
7053 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
7054 [(set_attr "type" "mve_move")
7055 (set_attr "length""8")])
7059 (define_insn "mve_vabdq_m_f<mode>"
7061 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7062 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7063 (match_operand:MVE_0 2 "s_register_operand" "w")
7064 (match_operand:MVE_0 3 "s_register_operand" "w")
7065 (match_operand:HI 4 "vpr_register_operand" "Up")]
7068 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7069 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3"
7070 [(set_attr "type" "mve_move")
7071 (set_attr "length""8")])
7076 (define_insn "mve_vaddq_m_f<mode>"
7078 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7079 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7080 (match_operand:MVE_0 2 "s_register_operand" "w")
7081 (match_operand:MVE_0 3 "s_register_operand" "w")
7082 (match_operand:HI 4 "vpr_register_operand" "Up")]
7085 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7086 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3"
7087 [(set_attr "type" "mve_move")
7088 (set_attr "length""8")])
7093 (define_insn "mve_vaddq_m_n_f<mode>"
7095 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7096 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7097 (match_operand:MVE_0 2 "s_register_operand" "w")
7098 (match_operand:<V_elem> 3 "s_register_operand" "r")
7099 (match_operand:HI 4 "vpr_register_operand" "Up")]
7102 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7103 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3"
7104 [(set_attr "type" "mve_move")
7105 (set_attr "length""8")])
7110 (define_insn "mve_vandq_m_f<mode>"
7112 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7113 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7114 (match_operand:MVE_0 2 "s_register_operand" "w")
7115 (match_operand:MVE_0 3 "s_register_operand" "w")
7116 (match_operand:HI 4 "vpr_register_operand" "Up")]
7119 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7120 "vpst\;vandt %q0, %q2, %q3"
7121 [(set_attr "type" "mve_move")
7122 (set_attr "length""8")])
7127 (define_insn "mve_vbicq_m_f<mode>"
7129 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7130 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7131 (match_operand:MVE_0 2 "s_register_operand" "w")
7132 (match_operand:MVE_0 3 "s_register_operand" "w")
7133 (match_operand:HI 4 "vpr_register_operand" "Up")]
7136 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7137 "vpst\;vbict %q0, %q2, %q3"
7138 [(set_attr "type" "mve_move")
7139 (set_attr "length""8")])
7144 (define_insn "mve_vbrsrq_m_n_f<mode>"
7146 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7147 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7148 (match_operand:MVE_0 2 "s_register_operand" "w")
7149 (match_operand:SI 3 "s_register_operand" "r")
7150 (match_operand:HI 4 "vpr_register_operand" "Up")]
7153 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7154 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
7155 [(set_attr "type" "mve_move")
7156 (set_attr "length""8")])
7159 ;; [vcaddq_rot270_m_f])
7161 (define_insn "mve_vcaddq_rot270_m_f<mode>"
7163 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7164 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7165 (match_operand:MVE_0 2 "s_register_operand" "w")
7166 (match_operand:MVE_0 3 "s_register_operand" "w")
7167 (match_operand:HI 4 "vpr_register_operand" "Up")]
7170 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7171 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7172 [(set_attr "type" "mve_move")
7173 (set_attr "length""8")])
7176 ;; [vcaddq_rot90_m_f])
7178 (define_insn "mve_vcaddq_rot90_m_f<mode>"
7180 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7181 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7182 (match_operand:MVE_0 2 "s_register_operand" "w")
7183 (match_operand:MVE_0 3 "s_register_operand" "w")
7184 (match_operand:HI 4 "vpr_register_operand" "Up")]
7187 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7188 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7189 [(set_attr "type" "mve_move")
7190 (set_attr "length""8")])
7195 (define_insn "mve_vcmlaq_m_f<mode>"
7197 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7198 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7199 (match_operand:MVE_0 2 "s_register_operand" "w")
7200 (match_operand:MVE_0 3 "s_register_operand" "w")
7201 (match_operand:HI 4 "vpr_register_operand" "Up")]
7204 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7205 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7206 [(set_attr "type" "mve_move")
7207 (set_attr "length""8")])
7210 ;; [vcmlaq_rot180_m_f])
7212 (define_insn "mve_vcmlaq_rot180_m_f<mode>"
7214 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7215 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7216 (match_operand:MVE_0 2 "s_register_operand" "w")
7217 (match_operand:MVE_0 3 "s_register_operand" "w")
7218 (match_operand:HI 4 "vpr_register_operand" "Up")]
7221 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7222 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7223 [(set_attr "type" "mve_move")
7224 (set_attr "length""8")])
7227 ;; [vcmlaq_rot270_m_f])
7229 (define_insn "mve_vcmlaq_rot270_m_f<mode>"
7231 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7232 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7233 (match_operand:MVE_0 2 "s_register_operand" "w")
7234 (match_operand:MVE_0 3 "s_register_operand" "w")
7235 (match_operand:HI 4 "vpr_register_operand" "Up")]
7238 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7239 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7240 [(set_attr "type" "mve_move")
7241 (set_attr "length""8")])
7244 ;; [vcmlaq_rot90_m_f])
7246 (define_insn "mve_vcmlaq_rot90_m_f<mode>"
7248 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7249 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7250 (match_operand:MVE_0 2 "s_register_operand" "w")
7251 (match_operand:MVE_0 3 "s_register_operand" "w")
7252 (match_operand:HI 4 "vpr_register_operand" "Up")]
7255 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7256 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7257 [(set_attr "type" "mve_move")
7258 (set_attr "length""8")])
7263 (define_insn "mve_vcmulq_m_f<mode>"
7265 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7266 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7267 (match_operand:MVE_0 2 "s_register_operand" "w")
7268 (match_operand:MVE_0 3 "s_register_operand" "w")
7269 (match_operand:HI 4 "vpr_register_operand" "Up")]
7272 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7273 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7274 [(set_attr "type" "mve_move")
7275 (set_attr "length""8")])
7278 ;; [vcmulq_rot180_m_f])
7280 (define_insn "mve_vcmulq_rot180_m_f<mode>"
7282 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7283 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7284 (match_operand:MVE_0 2 "s_register_operand" "w")
7285 (match_operand:MVE_0 3 "s_register_operand" "w")
7286 (match_operand:HI 4 "vpr_register_operand" "Up")]
7289 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7290 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7291 [(set_attr "type" "mve_move")
7292 (set_attr "length""8")])
7295 ;; [vcmulq_rot270_m_f])
7297 (define_insn "mve_vcmulq_rot270_m_f<mode>"
7299 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7300 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7301 (match_operand:MVE_0 2 "s_register_operand" "w")
7302 (match_operand:MVE_0 3 "s_register_operand" "w")
7303 (match_operand:HI 4 "vpr_register_operand" "Up")]
7306 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7307 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7308 [(set_attr "type" "mve_move")
7309 (set_attr "length""8")])
7312 ;; [vcmulq_rot90_m_f])
7314 (define_insn "mve_vcmulq_rot90_m_f<mode>"
7316 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7317 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7318 (match_operand:MVE_0 2 "s_register_operand" "w")
7319 (match_operand:MVE_0 3 "s_register_operand" "w")
7320 (match_operand:HI 4 "vpr_register_operand" "Up")]
7323 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7324 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7325 [(set_attr "type" "mve_move")
7326 (set_attr "length""8")])
7331 (define_insn "mve_veorq_m_f<mode>"
7333 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7334 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7335 (match_operand:MVE_0 2 "s_register_operand" "w")
7336 (match_operand:MVE_0 3 "s_register_operand" "w")
7337 (match_operand:HI 4 "vpr_register_operand" "Up")]
7340 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7341 "vpst\;veort %q0, %q2, %q3"
7342 [(set_attr "type" "mve_move")
7343 (set_attr "length""8")])
7348 (define_insn "mve_vfmaq_m_f<mode>"
7350 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7351 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7352 (match_operand:MVE_0 2 "s_register_operand" "w")
7353 (match_operand:MVE_0 3 "s_register_operand" "w")
7354 (match_operand:HI 4 "vpr_register_operand" "Up")]
7357 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7358 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3"
7359 [(set_attr "type" "mve_move")
7360 (set_attr "length""8")])
7365 (define_insn "mve_vfmaq_m_n_f<mode>"
7367 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7368 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7369 (match_operand:MVE_0 2 "s_register_operand" "w")
7370 (match_operand:<V_elem> 3 "s_register_operand" "r")
7371 (match_operand:HI 4 "vpr_register_operand" "Up")]
7374 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7375 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3"
7376 [(set_attr "type" "mve_move")
7377 (set_attr "length""8")])
7382 (define_insn "mve_vfmasq_m_n_f<mode>"
7384 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7385 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7386 (match_operand:MVE_0 2 "s_register_operand" "w")
7387 (match_operand:<V_elem> 3 "s_register_operand" "r")
7388 (match_operand:HI 4 "vpr_register_operand" "Up")]
7391 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7392 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3"
7393 [(set_attr "type" "mve_move")
7394 (set_attr "length""8")])
7399 (define_insn "mve_vfmsq_m_f<mode>"
7401 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7402 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7403 (match_operand:MVE_0 2 "s_register_operand" "w")
7404 (match_operand:MVE_0 3 "s_register_operand" "w")
7405 (match_operand:HI 4 "vpr_register_operand" "Up")]
7408 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7409 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3"
7410 [(set_attr "type" "mve_move")
7411 (set_attr "length""8")])
7416 (define_insn "mve_vmaxnmq_m_f<mode>"
7418 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7419 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7420 (match_operand:MVE_0 2 "s_register_operand" "w")
7421 (match_operand:MVE_0 3 "s_register_operand" "w")
7422 (match_operand:HI 4 "vpr_register_operand" "Up")]
7425 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7426 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7427 [(set_attr "type" "mve_move")
7428 (set_attr "length""8")])
7433 (define_insn "mve_vminnmq_m_f<mode>"
7435 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7436 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7437 (match_operand:MVE_0 2 "s_register_operand" "w")
7438 (match_operand:MVE_0 3 "s_register_operand" "w")
7439 (match_operand:HI 4 "vpr_register_operand" "Up")]
7442 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7443 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7444 [(set_attr "type" "mve_move")
7445 (set_attr "length""8")])
7450 (define_insn "mve_vmulq_m_f<mode>"
7452 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7453 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7454 (match_operand:MVE_0 2 "s_register_operand" "w")
7455 (match_operand:MVE_0 3 "s_register_operand" "w")
7456 (match_operand:HI 4 "vpr_register_operand" "Up")]
7459 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7460 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3"
7461 [(set_attr "type" "mve_move")
7462 (set_attr "length""8")])
7467 (define_insn "mve_vmulq_m_n_f<mode>"
7469 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7470 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7471 (match_operand:MVE_0 2 "s_register_operand" "w")
7472 (match_operand:<V_elem> 3 "s_register_operand" "r")
7473 (match_operand:HI 4 "vpr_register_operand" "Up")]
7476 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7477 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3"
7478 [(set_attr "type" "mve_move")
7479 (set_attr "length""8")])
7484 (define_insn "mve_vornq_m_f<mode>"
7486 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7487 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7488 (match_operand:MVE_0 2 "s_register_operand" "w")
7489 (match_operand:MVE_0 3 "s_register_operand" "w")
7490 (match_operand:HI 4 "vpr_register_operand" "Up")]
7493 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7494 "vpst\;vornt %q0, %q2, %q3"
7495 [(set_attr "type" "mve_move")
7496 (set_attr "length""8")])
7501 (define_insn "mve_vorrq_m_f<mode>"
7503 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7504 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7505 (match_operand:MVE_0 2 "s_register_operand" "w")
7506 (match_operand:MVE_0 3 "s_register_operand" "w")
7507 (match_operand:HI 4 "vpr_register_operand" "Up")]
7510 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7511 "vpst\;vorrt %q0, %q2, %q3"
7512 [(set_attr "type" "mve_move")
7513 (set_attr "length""8")])
7518 (define_insn "mve_vsubq_m_f<mode>"
7520 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7521 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7522 (match_operand:MVE_0 2 "s_register_operand" "w")
7523 (match_operand:MVE_0 3 "s_register_operand" "w")
7524 (match_operand:HI 4 "vpr_register_operand" "Up")]
7527 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7528 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
7529 [(set_attr "type" "mve_move")
7530 (set_attr "length""8")])
7535 (define_insn "mve_vsubq_m_n_f<mode>"
7537 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7538 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7539 (match_operand:MVE_0 2 "s_register_operand" "w")
7540 (match_operand:<V_elem> 3 "s_register_operand" "r")
7541 (match_operand:HI 4 "vpr_register_operand" "Up")]
7544 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7545 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
7546 [(set_attr "type" "mve_move")
7547 (set_attr "length""8")])
7550 ;; [vstrbq_s vstrbq_u]
7552 (define_insn "mve_vstrbq_<supf><mode>"
7553 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7554 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
7560 int regno = REGNO (operands[1]);
7561 ops[1] = gen_rtx_REG (TImode, regno);
7562 ops[0] = operands[0];
7563 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
7566 [(set_attr "length" "4")])
7569 ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
7571 (define_expand "mve_vstrbq_scatter_offset_<supf><mode>"
7572 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7573 (match_operand:MVE_2 1 "s_register_operand")
7574 (match_operand:MVE_2 2 "s_register_operand")
7575 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7578 rtx ind = XEXP (operands[0], 0);
7579 gcc_assert (REG_P (ind));
7580 emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1],
7585 (define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn"
7586 [(set (mem:BLK (scratch))
7588 [(match_operand:SI 0 "register_operand" "r")
7589 (match_operand:MVE_2 1 "s_register_operand" "w")
7590 (match_operand:MVE_2 2 "s_register_operand" "w")]
7593 "vstrb.<V_sz_elem>\t%q2, [%0, %q1]"
7594 [(set_attr "length" "4")])
7597 ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
7599 (define_insn "mve_vstrwq_scatter_base_<supf>v4si"
7600 [(set (mem:BLK (scratch))
7602 [(match_operand:V4SI 0 "s_register_operand" "w")
7603 (match_operand:SI 1 "immediate_operand" "i")
7604 (match_operand:V4SI 2 "s_register_operand" "w")]
7610 ops[0] = operands[0];
7611 ops[1] = operands[1];
7612 ops[2] = operands[2];
7613 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
7616 [(set_attr "length" "4")])
7619 ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
7621 (define_insn "mve_vldrbq_gather_offset_<supf><mode>"
7622 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7623 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7624 (match_operand:MVE_2 2 "s_register_operand" "w")]
7630 ops[0] = operands[0];
7631 ops[1] = operands[1];
7632 ops[2] = operands[2];
7633 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7634 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
7636 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7639 [(set_attr "length" "4")])
7642 ;; [vldrbq_s vldrbq_u]
7644 (define_insn "mve_vldrbq_<supf><mode>"
7645 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7646 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")]
7652 int regno = REGNO (operands[0]);
7653 ops[0] = gen_rtx_REG (TImode, regno);
7654 ops[1] = operands[1];
7655 if (<V_sz_elem> == 8)
7656 output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops);
7658 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
7661 [(set_attr "length" "4")])
7664 ;; [vldrwq_gather_base_s vldrwq_gather_base_u]
7666 (define_insn "mve_vldrwq_gather_base_<supf>v4si"
7667 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7668 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7669 (match_operand:SI 2 "immediate_operand" "i")]
7675 ops[0] = operands[0];
7676 ops[1] = operands[1];
7677 ops[2] = operands[2];
7678 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7681 [(set_attr "length" "4")])
7684 ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
7686 (define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>"
7687 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7688 (match_operand:MVE_2 1 "s_register_operand")
7689 (match_operand:MVE_2 2 "s_register_operand")
7690 (match_operand:HI 3 "vpr_register_operand" "Up")
7691 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7694 rtx ind = XEXP (operands[0], 0);
7695 gcc_assert (REG_P (ind));
7697 gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
7703 (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn"
7704 [(set (mem:BLK (scratch))
7706 [(match_operand:SI 0 "register_operand" "r")
7707 (match_operand:MVE_2 1 "s_register_operand" "w")
7708 (match_operand:MVE_2 2 "s_register_operand" "w")
7709 (match_operand:HI 3 "vpr_register_operand" "Up")]
7712 "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]"
7713 [(set_attr "length" "8")])
7716 ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
7718 (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
7719 [(set (mem:BLK (scratch))
7721 [(match_operand:V4SI 0 "s_register_operand" "w")
7722 (match_operand:SI 1 "immediate_operand" "i")
7723 (match_operand:V4SI 2 "s_register_operand" "w")
7724 (match_operand:HI 3 "vpr_register_operand" "Up")]
7730 ops[0] = operands[0];
7731 ops[1] = operands[1];
7732 ops[2] = operands[2];
7733 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
7736 [(set_attr "length" "8")])
7739 ;; [vstrbq_p_s vstrbq_p_u]
7741 (define_insn "mve_vstrbq_p_<supf><mode>"
7742 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7743 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
7744 (match_operand:HI 2 "vpr_register_operand" "Up")]
7750 int regno = REGNO (operands[1]);
7751 ops[1] = gen_rtx_REG (TImode, regno);
7752 ops[0] = operands[0];
7753 output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops);
7756 [(set_attr "length" "8")])
7759 ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
7761 (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
7762 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7763 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7764 (match_operand:MVE_2 2 "s_register_operand" "w")
7765 (match_operand:HI 3 "vpr_register_operand" "Up")]
7771 ops[0] = operands[0];
7772 ops[1] = operands[1];
7773 ops[2] = operands[2];
7774 ops[3] = operands[3];
7775 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7776 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
7778 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7781 [(set_attr "length" "8")])
7784 ;; [vldrbq_z_s vldrbq_z_u]
7786 (define_insn "mve_vldrbq_z_<supf><mode>"
7787 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7788 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")
7789 (match_operand:HI 2 "vpr_register_operand" "Up")]
7795 int regno = REGNO (operands[0]);
7796 ops[0] = gen_rtx_REG (TImode, regno);
7797 ops[1] = operands[1];
7798 if (<V_sz_elem> == 8)
7799 output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops);
7801 output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
7804 [(set_attr "length" "8")])
7807 ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
7809 (define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
7810 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7811 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7812 (match_operand:SI 2 "immediate_operand" "i")
7813 (match_operand:HI 3 "vpr_register_operand" "Up")]
7819 ops[0] = operands[0];
7820 ops[1] = operands[1];
7821 ops[2] = operands[2];
7822 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7825 [(set_attr "length" "8")])
7830 (define_insn "mve_vldrhq_fv8hf"
7831 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7832 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")]
7835 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7838 int regno = REGNO (operands[0]);
7839 ops[0] = gen_rtx_REG (TImode, regno);
7840 ops[1] = operands[1];
7841 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7844 [(set_attr "length" "4")])
7847 ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
7849 (define_insn "mve_vldrhq_gather_offset_<supf><mode>"
7850 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7851 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7852 (match_operand:MVE_6 2 "s_register_operand" "w")]
7858 ops[0] = operands[0];
7859 ops[1] = operands[1];
7860 ops[2] = operands[2];
7861 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7862 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
7864 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7867 [(set_attr "length" "4")])
7870 ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
7872 (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
7873 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7874 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7875 (match_operand:MVE_6 2 "s_register_operand" "w")
7876 (match_operand:HI 3 "vpr_register_operand" "Up")
7882 ops[0] = operands[0];
7883 ops[1] = operands[1];
7884 ops[2] = operands[2];
7885 ops[3] = operands[3];
7886 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7887 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
7889 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7892 [(set_attr "length" "8")])
7895 ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
7897 (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
7898 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7899 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7900 (match_operand:MVE_6 2 "s_register_operand" "w")]
7906 ops[0] = operands[0];
7907 ops[1] = operands[1];
7908 ops[2] = operands[2];
7909 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7910 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7912 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7915 [(set_attr "length" "4")])
7918 ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
7920 (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
7921 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7922 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7923 (match_operand:MVE_6 2 "s_register_operand" "w")
7924 (match_operand:HI 3 "vpr_register_operand" "Up")
7930 ops[0] = operands[0];
7931 ops[1] = operands[1];
7932 ops[2] = operands[2];
7933 ops[3] = operands[3];
7934 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7935 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7937 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7940 [(set_attr "length" "8")])
7943 ;; [vldrhq_s, vldrhq_u]
7945 (define_insn "mve_vldrhq_<supf><mode>"
7946 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7947 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")]
7953 int regno = REGNO (operands[0]);
7954 ops[0] = gen_rtx_REG (TImode, regno);
7955 ops[1] = operands[1];
7956 if (<V_sz_elem> == 16)
7957 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7959 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
7962 [(set_attr "length" "4")])
7967 (define_insn "mve_vldrhq_z_fv8hf"
7968 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7969 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")
7970 (match_operand:HI 2 "vpr_register_operand" "Up")]
7973 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7976 int regno = REGNO (operands[0]);
7977 ops[0] = gen_rtx_REG (TImode, regno);
7978 ops[1] = operands[1];
7979 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7982 [(set_attr "length" "8")])
7985 ;; [vldrhq_z_s vldrhq_z_u]
7987 (define_insn "mve_vldrhq_z_<supf><mode>"
7988 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7989 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")
7990 (match_operand:HI 2 "vpr_register_operand" "Up")]
7996 int regno = REGNO (operands[0]);
7997 ops[0] = gen_rtx_REG (TImode, regno);
7998 ops[1] = operands[1];
7999 if (<V_sz_elem> == 16)
8000 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
8002 output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
8005 [(set_attr "length" "8")])
8010 (define_insn "mve_vldrwq_fv4sf"
8011 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
8012 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")]
8015 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8018 int regno = REGNO (operands[0]);
8019 ops[0] = gen_rtx_REG (TImode, regno);
8020 ops[1] = operands[1];
8021 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
8024 [(set_attr "length" "4")])
8027 ;; [vldrwq_s vldrwq_u]
8029 (define_insn "mve_vldrwq_<supf>v4si"
8030 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
8031 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")]
8037 int regno = REGNO (operands[0]);
8038 ops[0] = gen_rtx_REG (TImode, regno);
8039 ops[1] = operands[1];
8040 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
8043 [(set_attr "length" "4")])
8048 (define_insn "mve_vldrwq_z_fv4sf"
8049 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
8050 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")
8051 (match_operand:HI 2 "vpr_register_operand" "Up")]
8054 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8057 int regno = REGNO (operands[0]);
8058 ops[0] = gen_rtx_REG (TImode, regno);
8059 ops[1] = operands[1];
8060 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
8063 [(set_attr "length" "8")])
8066 ;; [vldrwq_z_s vldrwq_z_u]
8068 (define_insn "mve_vldrwq_z_<supf>v4si"
8069 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
8070 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")
8071 (match_operand:HI 2 "vpr_register_operand" "Up")]
8077 int regno = REGNO (operands[0]);
8078 ops[0] = gen_rtx_REG (TImode, regno);
8079 ops[1] = operands[1];
8080 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
8083 [(set_attr "length" "8")])
8085 (define_expand "mve_vld1q_f<mode>"
8086 [(match_operand:MVE_0 0 "s_register_operand")
8087 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F)
8089 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8091 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8095 (define_expand "mve_vld1q_<supf><mode>"
8096 [(match_operand:MVE_2 0 "s_register_operand")
8097 (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q)
8101 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8106 ;; [vldrdq_gather_base_s vldrdq_gather_base_u]
8108 (define_insn "mve_vldrdq_gather_base_<supf>v2di"
8109 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8110 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8111 (match_operand:SI 2 "immediate_operand" "i")]
8117 ops[0] = operands[0];
8118 ops[1] = operands[1];
8119 ops[2] = operands[2];
8120 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
8123 [(set_attr "length" "4")])
8126 ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
8128 (define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
8129 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8130 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8131 (match_operand:SI 2 "immediate_operand" "i")
8132 (match_operand:HI 3 "vpr_register_operand" "Up")]
8138 ops[0] = operands[0];
8139 ops[1] = operands[1];
8140 ops[2] = operands[2];
8141 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
8144 [(set_attr "length" "8")])
8147 ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
8149 (define_insn "mve_vldrdq_gather_offset_<supf>v2di"
8150 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8151 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8152 (match_operand:V2DI 2 "s_register_operand" "w")]
8158 ops[0] = operands[0];
8159 ops[1] = operands[1];
8160 ops[2] = operands[2];
8161 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
8164 [(set_attr "length" "4")])
8167 ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
8169 (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
8170 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8171 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8172 (match_operand:V2DI 2 "s_register_operand" "w")
8173 (match_operand:HI 3 "vpr_register_operand" "Up")]
8179 ops[0] = operands[0];
8180 ops[1] = operands[1];
8181 ops[2] = operands[2];
8182 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
8185 [(set_attr "length" "8")])
8188 ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
8190 (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
8191 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8192 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8193 (match_operand:V2DI 2 "s_register_operand" "w")]
8199 ops[0] = operands[0];
8200 ops[1] = operands[1];
8201 ops[2] = operands[2];
8202 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8205 [(set_attr "length" "4")])
8208 ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
8210 (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
8211 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8212 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8213 (match_operand:V2DI 2 "s_register_operand" "w")
8214 (match_operand:HI 3 "vpr_register_operand" "Up")]
8220 ops[0] = operands[0];
8221 ops[1] = operands[1];
8222 ops[2] = operands[2];
8223 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8226 [(set_attr "length" "8")])
8229 ;; [vldrhq_gather_offset_f]
8231 (define_insn "mve_vldrhq_gather_offset_fv8hf"
8232 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8233 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8234 (match_operand:V8HI 2 "s_register_operand" "w")]
8237 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8240 ops[0] = operands[0];
8241 ops[1] = operands[1];
8242 ops[2] = operands[2];
8243 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
8246 [(set_attr "length" "4")])
8249 ;; [vldrhq_gather_offset_z_f]
8251 (define_insn "mve_vldrhq_gather_offset_z_fv8hf"
8252 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8253 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8254 (match_operand:V8HI 2 "s_register_operand" "w")
8255 (match_operand:HI 3 "vpr_register_operand" "Up")]
8258 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8261 ops[0] = operands[0];
8262 ops[1] = operands[1];
8263 ops[2] = operands[2];
8264 ops[3] = operands[3];
8265 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
8268 [(set_attr "length" "8")])
8271 ;; [vldrhq_gather_shifted_offset_f]
8273 (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
8274 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8275 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8276 (match_operand:V8HI 2 "s_register_operand" "w")]
8279 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8282 ops[0] = operands[0];
8283 ops[1] = operands[1];
8284 ops[2] = operands[2];
8285 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8288 [(set_attr "length" "4")])
8291 ;; [vldrhq_gather_shifted_offset_z_f]
8293 (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
8294 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8295 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8296 (match_operand:V8HI 2 "s_register_operand" "w")
8297 (match_operand:HI 3 "vpr_register_operand" "Up")]
8300 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8303 ops[0] = operands[0];
8304 ops[1] = operands[1];
8305 ops[2] = operands[2];
8306 ops[3] = operands[3];
8307 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8310 [(set_attr "length" "8")])
8313 ;; [vldrwq_gather_base_f]
8315 (define_insn "mve_vldrwq_gather_base_fv4sf"
8316 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8317 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8318 (match_operand:SI 2 "immediate_operand" "i")]
8321 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8324 ops[0] = operands[0];
8325 ops[1] = operands[1];
8326 ops[2] = operands[2];
8327 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
8330 [(set_attr "length" "4")])
8333 ;; [vldrwq_gather_base_z_f]
8335 (define_insn "mve_vldrwq_gather_base_z_fv4sf"
8336 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8337 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8338 (match_operand:SI 2 "immediate_operand" "i")
8339 (match_operand:HI 3 "vpr_register_operand" "Up")]
8342 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8345 ops[0] = operands[0];
8346 ops[1] = operands[1];
8347 ops[2] = operands[2];
8348 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
8351 [(set_attr "length" "8")])
8354 ;; [vldrwq_gather_offset_f]
8356 (define_insn "mve_vldrwq_gather_offset_fv4sf"
8357 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8358 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8359 (match_operand:V4SI 2 "s_register_operand" "w")]
8362 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8365 ops[0] = operands[0];
8366 ops[1] = operands[1];
8367 ops[2] = operands[2];
8368 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8371 [(set_attr "length" "4")])
8374 ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
8376 (define_insn "mve_vldrwq_gather_offset_<supf>v4si"
8377 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8378 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8379 (match_operand:V4SI 2 "s_register_operand" "w")]
8385 ops[0] = operands[0];
8386 ops[1] = operands[1];
8387 ops[2] = operands[2];
8388 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8391 [(set_attr "length" "4")])
8394 ;; [vldrwq_gather_offset_z_f]
8396 (define_insn "mve_vldrwq_gather_offset_z_fv4sf"
8397 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8398 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8399 (match_operand:V4SI 2 "s_register_operand" "w")
8400 (match_operand:HI 3 "vpr_register_operand" "Up")]
8403 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8406 ops[0] = operands[0];
8407 ops[1] = operands[1];
8408 ops[2] = operands[2];
8409 ops[3] = operands[3];
8410 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8413 [(set_attr "length" "8")])
8416 ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
8418 (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
8419 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8420 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8421 (match_operand:V4SI 2 "s_register_operand" "w")
8422 (match_operand:HI 3 "vpr_register_operand" "Up")]
8428 ops[0] = operands[0];
8429 ops[1] = operands[1];
8430 ops[2] = operands[2];
8431 ops[3] = operands[3];
8432 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8435 [(set_attr "length" "8")])
8438 ;; [vldrwq_gather_shifted_offset_f]
8440 (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
8441 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8442 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8443 (match_operand:V4SI 2 "s_register_operand" "w")]
8446 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8449 ops[0] = operands[0];
8450 ops[1] = operands[1];
8451 ops[2] = operands[2];
8452 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8455 [(set_attr "length" "4")])
8458 ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
8460 (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
8461 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8462 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8463 (match_operand:V4SI 2 "s_register_operand" "w")]
8469 ops[0] = operands[0];
8470 ops[1] = operands[1];
8471 ops[2] = operands[2];
8472 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8475 [(set_attr "length" "4")])
8478 ;; [vldrwq_gather_shifted_offset_z_f]
8480 (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
8481 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8482 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8483 (match_operand:V4SI 2 "s_register_operand" "w")
8484 (match_operand:HI 3 "vpr_register_operand" "Up")]
8487 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8490 ops[0] = operands[0];
8491 ops[1] = operands[1];
8492 ops[2] = operands[2];
8493 ops[3] = operands[3];
8494 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8497 [(set_attr "length" "8")])
8500 ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
8502 (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
8503 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8504 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8505 (match_operand:V4SI 2 "s_register_operand" "w")
8506 (match_operand:HI 3 "vpr_register_operand" "Up")]
8512 ops[0] = operands[0];
8513 ops[1] = operands[1];
8514 ops[2] = operands[2];
8515 ops[3] = operands[3];
8516 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8519 [(set_attr "length" "8")])
8524 (define_insn "mve_vstrhq_fv8hf"
8525 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8526 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
8529 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8532 int regno = REGNO (operands[1]);
8533 ops[1] = gen_rtx_REG (TImode, regno);
8534 ops[0] = operands[0];
8535 output_asm_insn ("vstrh.16\t%q1, %E0",ops);
8538 [(set_attr "length" "4")])
8543 (define_insn "mve_vstrhq_p_fv8hf"
8544 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8545 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
8546 (match_operand:HI 2 "vpr_register_operand" "Up")]
8549 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8552 int regno = REGNO (operands[1]);
8553 ops[1] = gen_rtx_REG (TImode, regno);
8554 ops[0] = operands[0];
8555 output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops);
8558 [(set_attr "length" "8")])
8561 ;; [vstrhq_p_s vstrhq_p_u]
8563 (define_insn "mve_vstrhq_p_<supf><mode>"
8564 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8565 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
8566 (match_operand:HI 2 "vpr_register_operand" "Up")]
8572 int regno = REGNO (operands[1]);
8573 ops[1] = gen_rtx_REG (TImode, regno);
8574 ops[0] = operands[0];
8575 output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops);
8578 [(set_attr "length" "8")])
8581 ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
8583 (define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>"
8584 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8585 (match_operand:MVE_6 1 "s_register_operand")
8586 (match_operand:MVE_6 2 "s_register_operand")
8587 (match_operand:HI 3 "vpr_register_operand")
8588 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8591 rtx ind = XEXP (operands[0], 0);
8592 gcc_assert (REG_P (ind));
8594 gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
8600 (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn"
8601 [(set (mem:BLK (scratch))
8603 [(match_operand:SI 0 "register_operand" "r")
8604 (match_operand:MVE_6 1 "s_register_operand" "w")
8605 (match_operand:MVE_6 2 "s_register_operand" "w")
8606 (match_operand:HI 3 "vpr_register_operand" "Up")]
8609 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]"
8610 [(set_attr "length" "8")])
8613 ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
8615 (define_expand "mve_vstrhq_scatter_offset_<supf><mode>"
8616 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8617 (match_operand:MVE_6 1 "s_register_operand")
8618 (match_operand:MVE_6 2 "s_register_operand")
8619 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8622 rtx ind = XEXP (operands[0], 0);
8623 gcc_assert (REG_P (ind));
8624 emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1],
8629 (define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn"
8630 [(set (mem:BLK (scratch))
8632 [(match_operand:SI 0 "register_operand" "r")
8633 (match_operand:MVE_6 1 "s_register_operand" "w")
8634 (match_operand:MVE_6 2 "s_register_operand" "w")]
8637 "vstrh.<V_sz_elem>\t%q2, [%0, %q1]"
8638 [(set_attr "length" "4")])
8641 ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
8643 (define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
8644 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8645 (match_operand:MVE_6 1 "s_register_operand")
8646 (match_operand:MVE_6 2 "s_register_operand")
8647 (match_operand:HI 3 "vpr_register_operand")
8648 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8651 rtx ind = XEXP (operands[0], 0);
8652 gcc_assert (REG_P (ind));
8654 gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1],
8660 (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn"
8661 [(set (mem:BLK (scratch))
8663 [(match_operand:SI 0 "register_operand" "r")
8664 (match_operand:MVE_6 1 "s_register_operand" "w")
8665 (match_operand:MVE_6 2 "s_register_operand" "w")
8666 (match_operand:HI 3 "vpr_register_operand" "Up")]
8669 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8670 [(set_attr "length" "8")])
8673 ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
8675 (define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
8676 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8677 (match_operand:MVE_6 1 "s_register_operand")
8678 (match_operand:MVE_6 2 "s_register_operand")
8679 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8682 rtx ind = XEXP (operands[0], 0);
8683 gcc_assert (REG_P (ind));
8685 gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1],
8690 (define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn"
8691 [(set (mem:BLK (scratch))
8693 [(match_operand:SI 0 "register_operand" "r")
8694 (match_operand:MVE_6 1 "s_register_operand" "w")
8695 (match_operand:MVE_6 2 "s_register_operand" "w")]
8698 "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8699 [(set_attr "length" "4")])
8702 ;; [vstrhq_s, vstrhq_u]
8704 (define_insn "mve_vstrhq_<supf><mode>"
8705 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8706 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
8712 int regno = REGNO (operands[1]);
8713 ops[1] = gen_rtx_REG (TImode, regno);
8714 ops[0] = operands[0];
8715 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
8718 [(set_attr "length" "4")])
8723 (define_insn "mve_vstrwq_fv4sf"
8724 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8725 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
8728 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8731 int regno = REGNO (operands[1]);
8732 ops[1] = gen_rtx_REG (TImode, regno);
8733 ops[0] = operands[0];
8734 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8737 [(set_attr "length" "4")])
8742 (define_insn "mve_vstrwq_p_fv4sf"
8743 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8744 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
8745 (match_operand:HI 2 "vpr_register_operand" "Up")]
8748 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8751 int regno = REGNO (operands[1]);
8752 ops[1] = gen_rtx_REG (TImode, regno);
8753 ops[0] = operands[0];
8754 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8757 [(set_attr "length" "8")])
8760 ;; [vstrwq_p_s vstrwq_p_u]
8762 (define_insn "mve_vstrwq_p_<supf>v4si"
8763 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8764 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8765 (match_operand:HI 2 "vpr_register_operand" "Up")]
8771 int regno = REGNO (operands[1]);
8772 ops[1] = gen_rtx_REG (TImode, regno);
8773 ops[0] = operands[0];
8774 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8777 [(set_attr "length" "8")])
8780 ;; [vstrwq_s vstrwq_u]
8782 (define_insn "mve_vstrwq_<supf>v4si"
8783 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8784 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
8790 int regno = REGNO (operands[1]);
8791 ops[1] = gen_rtx_REG (TImode, regno);
8792 ops[0] = operands[0];
8793 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8796 [(set_attr "length" "4")])
8798 (define_expand "mve_vst1q_f<mode>"
8799 [(match_operand:<MVE_CNVT> 0 "mve_memory_operand")
8800 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
8802 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8804 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8808 (define_expand "mve_vst1q_<supf><mode>"
8809 [(match_operand:MVE_2 0 "mve_memory_operand")
8810 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
8814 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8819 ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
8821 (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
8822 [(set (mem:BLK (scratch))
8824 [(match_operand:V2DI 0 "s_register_operand" "w")
8825 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8826 (match_operand:V2DI 2 "s_register_operand" "w")
8827 (match_operand:HI 3 "vpr_register_operand" "Up")]
8833 ops[0] = operands[0];
8834 ops[1] = operands[1];
8835 ops[2] = operands[2];
8836 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
8839 [(set_attr "length" "8")])
8842 ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
8844 (define_insn "mve_vstrdq_scatter_base_<supf>v2di"
8845 [(set (mem:BLK (scratch))
8847 [(match_operand:V2DI 0 "s_register_operand" "=w")
8848 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8849 (match_operand:V2DI 2 "s_register_operand" "w")]
8855 ops[0] = operands[0];
8856 ops[1] = operands[1];
8857 ops[2] = operands[2];
8858 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
8861 [(set_attr "length" "4")])
8864 ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
8866 (define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di"
8867 [(match_operand:V2DI 0 "mve_scatter_memory")
8868 (match_operand:V2DI 1 "s_register_operand")
8869 (match_operand:V2DI 2 "s_register_operand")
8870 (match_operand:HI 3 "vpr_register_operand")
8871 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8874 rtx ind = XEXP (operands[0], 0);
8875 gcc_assert (REG_P (ind));
8876 emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1],
8882 (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn"
8883 [(set (mem:BLK (scratch))
8885 [(match_operand:SI 0 "register_operand" "r")
8886 (match_operand:V2DI 1 "s_register_operand" "w")
8887 (match_operand:V2DI 2 "s_register_operand" "w")
8888 (match_operand:HI 3 "vpr_register_operand" "Up")]
8891 "vpst\;vstrdt.64\t%q2, [%0, %q1]"
8892 [(set_attr "length" "8")])
8895 ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
8897 (define_expand "mve_vstrdq_scatter_offset_<supf>v2di"
8898 [(match_operand:V2DI 0 "mve_scatter_memory")
8899 (match_operand:V2DI 1 "s_register_operand")
8900 (match_operand:V2DI 2 "s_register_operand")
8901 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8904 rtx ind = XEXP (operands[0], 0);
8905 gcc_assert (REG_P (ind));
8906 emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1],
8911 (define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn"
8912 [(set (mem:BLK (scratch))
8914 [(match_operand:SI 0 "register_operand" "r")
8915 (match_operand:V2DI 1 "s_register_operand" "w")
8916 (match_operand:V2DI 2 "s_register_operand" "w")]
8919 "vstrd.64\t%q2, [%0, %q1]"
8920 [(set_attr "length" "4")])
8923 ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
8925 (define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
8926 [(match_operand:V2DI 0 "mve_scatter_memory")
8927 (match_operand:V2DI 1 "s_register_operand")
8928 (match_operand:V2DI 2 "s_register_operand")
8929 (match_operand:HI 3 "vpr_register_operand")
8930 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8933 rtx ind = XEXP (operands[0], 0);
8934 gcc_assert (REG_P (ind));
8936 gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1],
8942 (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn"
8943 [(set (mem:BLK (scratch))
8945 [(match_operand:SI 0 "register_operand" "r")
8946 (match_operand:V2DI 1 "s_register_operand" "w")
8947 (match_operand:V2DI 2 "s_register_operand" "w")
8948 (match_operand:HI 3 "vpr_register_operand" "Up")]
8951 "vpst\;vstrdt.64\t%q2, [%0, %q1, UXTW #3]"
8952 [(set_attr "length" "8")])
8955 ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
8957 (define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
8958 [(match_operand:V2DI 0 "mve_scatter_memory")
8959 (match_operand:V2DI 1 "s_register_operand")
8960 (match_operand:V2DI 2 "s_register_operand")
8961 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8964 rtx ind = XEXP (operands[0], 0);
8965 gcc_assert (REG_P (ind));
8967 gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1],
8972 (define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn"
8973 [(set (mem:BLK (scratch))
8975 [(match_operand:SI 0 "register_operand" "r")
8976 (match_operand:V2DI 1 "s_register_operand" "w")
8977 (match_operand:V2DI 2 "s_register_operand" "w")]
8980 "vstrd.64\t%q2, [%0, %q1, UXTW #3]"
8981 [(set_attr "length" "4")])
8984 ;; [vstrhq_scatter_offset_f]
8986 (define_expand "mve_vstrhq_scatter_offset_fv8hf"
8987 [(match_operand:V8HI 0 "mve_scatter_memory")
8988 (match_operand:V8HI 1 "s_register_operand")
8989 (match_operand:V8HF 2 "s_register_operand")
8990 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8991 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8993 rtx ind = XEXP (operands[0], 0);
8994 gcc_assert (REG_P (ind));
8995 emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1],
9000 (define_insn "mve_vstrhq_scatter_offset_fv8hf_insn"
9001 [(set (mem:BLK (scratch))
9003 [(match_operand:SI 0 "register_operand" "r")
9004 (match_operand:V8HI 1 "s_register_operand" "w")
9005 (match_operand:V8HF 2 "s_register_operand" "w")]
9007 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9008 "vstrh.16\t%q2, [%0, %q1]"
9009 [(set_attr "length" "4")])
9012 ;; [vstrhq_scatter_offset_p_f]
9014 (define_expand "mve_vstrhq_scatter_offset_p_fv8hf"
9015 [(match_operand:V8HI 0 "mve_scatter_memory")
9016 (match_operand:V8HI 1 "s_register_operand")
9017 (match_operand:V8HF 2 "s_register_operand")
9018 (match_operand:HI 3 "vpr_register_operand")
9019 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
9020 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9022 rtx ind = XEXP (operands[0], 0);
9023 gcc_assert (REG_P (ind));
9024 emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1],
9030 (define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn"
9031 [(set (mem:BLK (scratch))
9033 [(match_operand:SI 0 "register_operand" "r")
9034 (match_operand:V8HI 1 "s_register_operand" "w")
9035 (match_operand:V8HF 2 "s_register_operand" "w")
9036 (match_operand:HI 3 "vpr_register_operand" "Up")]
9038 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9039 "vpst\;vstrht.16\t%q2, [%0, %q1]"
9040 [(set_attr "length" "8")])
9043 ;; [vstrhq_scatter_shifted_offset_f]
9045 (define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf"
9046 [(match_operand:V8HI 0 "memory_operand" "=Us")
9047 (match_operand:V8HI 1 "s_register_operand" "w")
9048 (match_operand:V8HF 2 "s_register_operand" "w")
9049 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
9050 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9052 rtx ind = XEXP (operands[0], 0);
9053 gcc_assert (REG_P (ind));
9054 emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1],
9059 (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn"
9060 [(set (mem:BLK (scratch))
9062 [(match_operand:SI 0 "register_operand" "r")
9063 (match_operand:V8HI 1 "s_register_operand" "w")
9064 (match_operand:V8HF 2 "s_register_operand" "w")]
9066 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9067 "vstrh.16\t%q2, [%0, %q1, uxtw #1]"
9068 [(set_attr "length" "4")])
9071 ;; [vstrhq_scatter_shifted_offset_p_f]
9073 (define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
9074 [(match_operand:V8HI 0 "memory_operand" "=Us")
9075 (match_operand:V8HI 1 "s_register_operand" "w")
9076 (match_operand:V8HF 2 "s_register_operand" "w")
9077 (match_operand:HI 3 "vpr_register_operand" "Up")
9078 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
9079 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9081 rtx ind = XEXP (operands[0], 0);
9082 gcc_assert (REG_P (ind));
9084 gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1],
9090 (define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn"
9091 [(set (mem:BLK (scratch))
9093 [(match_operand:SI 0 "register_operand" "r")
9094 (match_operand:V8HI 1 "s_register_operand" "w")
9095 (match_operand:V8HF 2 "s_register_operand" "w")
9096 (match_operand:HI 3 "vpr_register_operand" "Up")]
9098 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9099 "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]"
9100 [(set_attr "length" "8")])
9103 ;; [vstrwq_scatter_base_f]
9105 (define_insn "mve_vstrwq_scatter_base_fv4sf"
9106 [(set (mem:BLK (scratch))
9108 [(match_operand:V4SI 0 "s_register_operand" "w")
9109 (match_operand:SI 1 "immediate_operand" "i")
9110 (match_operand:V4SF 2 "s_register_operand" "w")]
9113 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9116 ops[0] = operands[0];
9117 ops[1] = operands[1];
9118 ops[2] = operands[2];
9119 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
9122 [(set_attr "length" "4")])
9125 ;; [vstrwq_scatter_base_p_f]
9127 (define_insn "mve_vstrwq_scatter_base_p_fv4sf"
9128 [(set (mem:BLK (scratch))
9130 [(match_operand:V4SI 0 "s_register_operand" "w")
9131 (match_operand:SI 1 "immediate_operand" "i")
9132 (match_operand:V4SF 2 "s_register_operand" "w")
9133 (match_operand:HI 3 "vpr_register_operand" "Up")]
9136 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9139 ops[0] = operands[0];
9140 ops[1] = operands[1];
9141 ops[2] = operands[2];
9142 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
9145 [(set_attr "length" "8")])
9148 ;; [vstrwq_scatter_offset_f]
9150 (define_expand "mve_vstrwq_scatter_offset_fv4sf"
9151 [(match_operand:V4SI 0 "mve_scatter_memory")
9152 (match_operand:V4SI 1 "s_register_operand")
9153 (match_operand:V4SF 2 "s_register_operand")
9154 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9155 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9157 rtx ind = XEXP (operands[0], 0);
9158 gcc_assert (REG_P (ind));
9159 emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1],
9164 (define_insn "mve_vstrwq_scatter_offset_fv4sf_insn"
9165 [(set (mem:BLK (scratch))
9167 [(match_operand:SI 0 "register_operand" "r")
9168 (match_operand:V4SI 1 "s_register_operand" "w")
9169 (match_operand:V4SF 2 "s_register_operand" "w")]
9171 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9172 "vstrw.32\t%q2, [%0, %q1]"
9173 [(set_attr "length" "4")])
9176 ;; [vstrwq_scatter_offset_p_f]
9178 (define_expand "mve_vstrwq_scatter_offset_p_fv4sf"
9179 [(match_operand:V4SI 0 "mve_scatter_memory")
9180 (match_operand:V4SI 1 "s_register_operand")
9181 (match_operand:V4SF 2 "s_register_operand")
9182 (match_operand:HI 3 "vpr_register_operand")
9183 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9184 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9186 rtx ind = XEXP (operands[0], 0);
9187 gcc_assert (REG_P (ind));
9188 emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1],
9194 (define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn"
9195 [(set (mem:BLK (scratch))
9197 [(match_operand:SI 0 "register_operand" "r")
9198 (match_operand:V4SI 1 "s_register_operand" "w")
9199 (match_operand:V4SF 2 "s_register_operand" "w")
9200 (match_operand:HI 3 "vpr_register_operand" "Up")]
9202 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9203 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9204 [(set_attr "length" "8")])
9207 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9209 (define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si"
9210 [(match_operand:V4SI 0 "mve_scatter_memory")
9211 (match_operand:V4SI 1 "s_register_operand")
9212 (match_operand:V4SI 2 "s_register_operand")
9213 (match_operand:HI 3 "vpr_register_operand")
9214 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9217 rtx ind = XEXP (operands[0], 0);
9218 gcc_assert (REG_P (ind));
9219 emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1],
9225 (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn"
9226 [(set (mem:BLK (scratch))
9228 [(match_operand:SI 0 "register_operand" "r")
9229 (match_operand:V4SI 1 "s_register_operand" "w")
9230 (match_operand:V4SI 2 "s_register_operand" "w")
9231 (match_operand:HI 3 "vpr_register_operand" "Up")]
9234 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9235 [(set_attr "length" "8")])
9238 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9240 (define_expand "mve_vstrwq_scatter_offset_<supf>v4si"
9241 [(match_operand:V4SI 0 "mve_scatter_memory")
9242 (match_operand:V4SI 1 "s_register_operand")
9243 (match_operand:V4SI 2 "s_register_operand")
9244 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9247 rtx ind = XEXP (operands[0], 0);
9248 gcc_assert (REG_P (ind));
9249 emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1],
9254 (define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn"
9255 [(set (mem:BLK (scratch))
9257 [(match_operand:SI 0 "register_operand" "r")
9258 (match_operand:V4SI 1 "s_register_operand" "w")
9259 (match_operand:V4SI 2 "s_register_operand" "w")]
9262 "vstrw.32\t%q2, [%0, %q1]"
9263 [(set_attr "length" "4")])
9266 ;; [vstrwq_scatter_shifted_offset_f]
9268 (define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf"
9269 [(match_operand:V4SI 0 "mve_scatter_memory")
9270 (match_operand:V4SI 1 "s_register_operand")
9271 (match_operand:V4SF 2 "s_register_operand")
9272 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9273 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9275 rtx ind = XEXP (operands[0], 0);
9276 gcc_assert (REG_P (ind));
9277 emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1],
9282 (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn"
9283 [(set (mem:BLK (scratch))
9285 [(match_operand:SI 0 "register_operand" "r")
9286 (match_operand:V4SI 1 "s_register_operand" "w")
9287 (match_operand:V4SF 2 "s_register_operand" "w")]
9289 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9290 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9291 [(set_attr "length" "8")])
9294 ;; [vstrwq_scatter_shifted_offset_p_f]
9296 (define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
9297 [(match_operand:V4SI 0 "mve_scatter_memory")
9298 (match_operand:V4SI 1 "s_register_operand")
9299 (match_operand:V4SF 2 "s_register_operand")
9300 (match_operand:HI 3 "vpr_register_operand")
9301 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9302 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9304 rtx ind = XEXP (operands[0], 0);
9305 gcc_assert (REG_P (ind));
9307 gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1],
9313 (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn"
9314 [(set (mem:BLK (scratch))
9316 [(match_operand:SI 0 "register_operand" "r")
9317 (match_operand:V4SI 1 "s_register_operand" "w")
9318 (match_operand:V4SF 2 "s_register_operand" "w")
9319 (match_operand:HI 3 "vpr_register_operand" "Up")]
9321 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9322 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9323 [(set_attr "length" "8")])
9326 ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
9328 (define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
9329 [(match_operand:V4SI 0 "mve_scatter_memory")
9330 (match_operand:V4SI 1 "s_register_operand")
9331 (match_operand:V4SI 2 "s_register_operand")
9332 (match_operand:HI 3 "vpr_register_operand")
9333 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9336 rtx ind = XEXP (operands[0], 0);
9337 gcc_assert (REG_P (ind));
9339 gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1],
9345 (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn"
9346 [(set (mem:BLK (scratch))
9348 [(match_operand:SI 0 "register_operand" "r")
9349 (match_operand:V4SI 1 "s_register_operand" "w")
9350 (match_operand:V4SI 2 "s_register_operand" "w")
9351 (match_operand:HI 3 "vpr_register_operand" "Up")]
9354 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9355 [(set_attr "length" "8")])
9358 ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
9360 (define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
9361 [(match_operand:V4SI 0 "mve_scatter_memory")
9362 (match_operand:V4SI 1 "s_register_operand")
9363 (match_operand:V4SI 2 "s_register_operand")
9364 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9367 rtx ind = XEXP (operands[0], 0);
9368 gcc_assert (REG_P (ind));
9370 gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1],
9375 (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn"
9376 [(set (mem:BLK (scratch))
9378 [(match_operand:SI 0 "register_operand" "r")
9379 (match_operand:V4SI 1 "s_register_operand" "w")
9380 (match_operand:V4SI 2 "s_register_operand" "w")]
9383 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9384 [(set_attr "length" "4")])
9387 ;; [vaddq_s, vaddq_u])
9389 (define_insn "mve_vaddq<mode>"
9391 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
9392 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
9393 (match_operand:MVE_2 2 "s_register_operand" "w")))
9396 "vadd.i%#<V_sz_elem> %q0, %q1, %q2"
9397 [(set_attr "type" "mve_move")
9403 (define_insn "mve_vaddq_f<mode>"
9405 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
9406 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
9407 (match_operand:MVE_0 2 "s_register_operand" "w")))
9409 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9410 "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
9411 [(set_attr "type" "mve_move")
9417 (define_expand "mve_vidupq_n_u<mode>"
9418 [(match_operand:MVE_2 0 "s_register_operand")
9419 (match_operand:SI 1 "s_register_operand")
9420 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9423 rtx temp = gen_reg_rtx (SImode);
9424 emit_move_insn (temp, operands[1]);
9425 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9426 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
9434 (define_insn "mve_vidupq_u<mode>_insn"
9435 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9436 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9437 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
9439 (set (match_operand:SI 1 "s_register_operand" "=Te")
9440 (plus:SI (match_dup 2)
9441 (match_operand:SI 4 "immediate_operand" "i")))]
9443 "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
9448 (define_expand "mve_vidupq_m_n_u<mode>"
9449 [(match_operand:MVE_2 0 "s_register_operand")
9450 (match_operand:MVE_2 1 "s_register_operand")
9451 (match_operand:SI 2 "s_register_operand")
9452 (match_operand:SI 3 "mve_imm_selective_upto_8")
9453 (match_operand:HI 4 "vpr_register_operand")]
9456 rtx temp = gen_reg_rtx (SImode);
9457 emit_move_insn (temp, operands[2]);
9458 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9459 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9460 operands[2], operands[3],
9466 ;; [vidupq_m_wb_u_insn])
9468 (define_insn "mve_vidupq_m_wb_u<mode>_insn"
9469 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9470 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9471 (match_operand:SI 3 "s_register_operand" "2")
9472 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9473 (match_operand:HI 5 "vpr_register_operand" "Up")]
9475 (set (match_operand:SI 2 "s_register_operand" "=Te")
9476 (plus:SI (match_dup 3)
9477 (match_operand:SI 6 "immediate_operand" "i")))]
9479 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
9480 [(set_attr "length""8")])
9485 (define_expand "mve_vddupq_n_u<mode>"
9486 [(match_operand:MVE_2 0 "s_register_operand")
9487 (match_operand:SI 1 "s_register_operand")
9488 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9491 rtx temp = gen_reg_rtx (SImode);
9492 emit_move_insn (temp, operands[1]);
9493 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9494 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
9502 (define_insn "mve_vddupq_u<mode>_insn"
9503 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9504 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9505 (match_operand:SI 3 "immediate_operand" "i")]
9507 (set (match_operand:SI 1 "s_register_operand" "=Te")
9508 (minus:SI (match_dup 2)
9509 (match_operand:SI 4 "immediate_operand" "i")))]
9511 "vddup.u%#<V_sz_elem> %q0, %1, %3")
9516 (define_expand "mve_vddupq_m_n_u<mode>"
9517 [(match_operand:MVE_2 0 "s_register_operand")
9518 (match_operand:MVE_2 1 "s_register_operand")
9519 (match_operand:SI 2 "s_register_operand")
9520 (match_operand:SI 3 "mve_imm_selective_upto_8")
9521 (match_operand:HI 4 "vpr_register_operand")]
9524 rtx temp = gen_reg_rtx (SImode);
9525 emit_move_insn (temp, operands[2]);
9526 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9527 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9528 operands[2], operands[3],
9534 ;; [vddupq_m_wb_u_insn])
9536 (define_insn "mve_vddupq_m_wb_u<mode>_insn"
9537 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9538 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9539 (match_operand:SI 3 "s_register_operand" "2")
9540 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9541 (match_operand:HI 5 "vpr_register_operand" "Up")]
9543 (set (match_operand:SI 2 "s_register_operand" "=Te")
9544 (minus:SI (match_dup 3)
9545 (match_operand:SI 6 "immediate_operand" "i")))]
9547 "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
9548 [(set_attr "length""8")])
9553 (define_expand "mve_vdwdupq_n_u<mode>"
9554 [(match_operand:MVE_2 0 "s_register_operand")
9555 (match_operand:SI 1 "s_register_operand")
9556 (match_operand:DI 2 "s_register_operand")
9557 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9560 rtx ignore_wb = gen_reg_rtx (SImode);
9561 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9562 operands[1], operands[2],
9570 (define_expand "mve_vdwdupq_wb_u<mode>"
9571 [(match_operand:SI 0 "s_register_operand")
9572 (match_operand:SI 1 "s_register_operand")
9573 (match_operand:DI 2 "s_register_operand")
9574 (match_operand:SI 3 "mve_imm_selective_upto_8")
9575 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9578 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9579 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9580 operands[1], operands[2],
9586 ;; [vdwdupq_wb_u_insn])
9588 (define_insn "mve_vdwdupq_wb_u<mode>_insn"
9589 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9590 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9591 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9592 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9594 (set (match_operand:SI 1 "s_register_operand" "=Te")
9595 (unspec:SI [(match_dup 2)
9596 (subreg:SI (match_dup 3) 4)
9600 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9606 (define_expand "mve_vdwdupq_m_n_u<mode>"
9607 [(match_operand:MVE_2 0 "s_register_operand")
9608 (match_operand:MVE_2 1 "s_register_operand")
9609 (match_operand:SI 2 "s_register_operand")
9610 (match_operand:DI 3 "s_register_operand")
9611 (match_operand:SI 4 "mve_imm_selective_upto_8")
9612 (match_operand:HI 5 "vpr_register_operand")]
9615 rtx ignore_wb = gen_reg_rtx (SImode);
9616 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9617 operands[1], operands[2],
9618 operands[3], operands[4],
9624 ;; [vdwdupq_m_wb_u])
9626 (define_expand "mve_vdwdupq_m_wb_u<mode>"
9627 [(match_operand:SI 0 "s_register_operand")
9628 (match_operand:MVE_2 1 "s_register_operand")
9629 (match_operand:SI 2 "s_register_operand")
9630 (match_operand:DI 3 "s_register_operand")
9631 (match_operand:SI 4 "mve_imm_selective_upto_8")
9632 (match_operand:HI 5 "vpr_register_operand")]
9635 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9636 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9637 operands[1], operands[2],
9638 operands[3], operands[4],
9644 ;; [vdwdupq_m_wb_u_insn])
9646 (define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
9647 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9648 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9649 (match_operand:SI 3 "s_register_operand" "1")
9650 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9651 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9652 (match_operand:HI 6 "vpr_register_operand" "Up")]
9654 (set (match_operand:SI 1 "s_register_operand" "=Te")
9655 (unspec:SI [(match_dup 2)
9657 (subreg:SI (match_dup 4) 4)
9663 "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9664 [(set_attr "type" "mve_move")
9665 (set_attr "length""8")])
9670 (define_expand "mve_viwdupq_n_u<mode>"
9671 [(match_operand:MVE_2 0 "s_register_operand")
9672 (match_operand:SI 1 "s_register_operand")
9673 (match_operand:DI 2 "s_register_operand")
9674 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9677 rtx ignore_wb = gen_reg_rtx (SImode);
9678 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9679 operands[1], operands[2],
9687 (define_expand "mve_viwdupq_wb_u<mode>"
9688 [(match_operand:SI 0 "s_register_operand")
9689 (match_operand:SI 1 "s_register_operand")
9690 (match_operand:DI 2 "s_register_operand")
9691 (match_operand:SI 3 "mve_imm_selective_upto_8")
9692 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9695 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9696 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9697 operands[1], operands[2],
9703 ;; [viwdupq_wb_u_insn])
9705 (define_insn "mve_viwdupq_wb_u<mode>_insn"
9706 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9707 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9708 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9709 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9711 (set (match_operand:SI 1 "s_register_operand" "=Te")
9712 (unspec:SI [(match_dup 2)
9713 (subreg:SI (match_dup 3) 4)
9717 "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9723 (define_expand "mve_viwdupq_m_n_u<mode>"
9724 [(match_operand:MVE_2 0 "s_register_operand")
9725 (match_operand:MVE_2 1 "s_register_operand")
9726 (match_operand:SI 2 "s_register_operand")
9727 (match_operand:DI 3 "s_register_operand")
9728 (match_operand:SI 4 "mve_imm_selective_upto_8")
9729 (match_operand:HI 5 "vpr_register_operand")]
9732 rtx ignore_wb = gen_reg_rtx (SImode);
9733 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9734 operands[1], operands[2],
9735 operands[3], operands[4],
9741 ;; [viwdupq_m_wb_u])
9743 (define_expand "mve_viwdupq_m_wb_u<mode>"
9744 [(match_operand:SI 0 "s_register_operand")
9745 (match_operand:MVE_2 1 "s_register_operand")
9746 (match_operand:SI 2 "s_register_operand")
9747 (match_operand:DI 3 "s_register_operand")
9748 (match_operand:SI 4 "mve_imm_selective_upto_8")
9749 (match_operand:HI 5 "vpr_register_operand")]
9752 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9753 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9754 operands[1], operands[2],
9755 operands[3], operands[4],
9761 ;; [viwdupq_m_wb_u_insn])
9763 (define_insn "mve_viwdupq_m_wb_u<mode>_insn"
9764 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9765 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9766 (match_operand:SI 3 "s_register_operand" "1")
9767 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9768 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9769 (match_operand:HI 6 "vpr_register_operand" "Up")]
9771 (set (match_operand:SI 1 "s_register_operand" "=Te")
9772 (unspec:SI [(match_dup 2)
9774 (subreg:SI (match_dup 4) 4)
9780 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9781 [(set_attr "type" "mve_move")
9782 (set_attr "length""8")])
9785 ;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u]
9787 (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si"
9788 [(set (mem:BLK (scratch))
9790 [(match_operand:V4SI 1 "s_register_operand" "0")
9791 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9792 (match_operand:V4SI 3 "s_register_operand" "w")]
9794 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9795 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9801 ops[0] = operands[1];
9802 ops[1] = operands[2];
9803 ops[2] = operands[3];
9804 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9807 [(set_attr "length" "4")])
9810 ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
9812 (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
9813 [(set (mem:BLK (scratch))
9815 [(match_operand:V4SI 1 "s_register_operand" "0")
9816 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9817 (match_operand:V4SI 3 "s_register_operand" "w")
9818 (match_operand:HI 4 "vpr_register_operand")]
9820 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9821 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9827 ops[0] = operands[1];
9828 ops[1] = operands[2];
9829 ops[2] = operands[3];
9830 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9833 [(set_attr "length" "8")])
9836 ;; [vstrwq_scatter_base_wb_f]
9838 (define_insn "mve_vstrwq_scatter_base_wb_fv4sf"
9839 [(set (mem:BLK (scratch))
9841 [(match_operand:V4SI 1 "s_register_operand" "0")
9842 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9843 (match_operand:V4SF 3 "s_register_operand" "w")]
9845 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9846 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9849 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9852 ops[0] = operands[1];
9853 ops[1] = operands[2];
9854 ops[2] = operands[3];
9855 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9858 [(set_attr "length" "4")])
9861 ;; [vstrwq_scatter_base_wb_p_f]
9863 (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf"
9864 [(set (mem:BLK (scratch))
9866 [(match_operand:V4SI 1 "s_register_operand" "0")
9867 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9868 (match_operand:V4SF 3 "s_register_operand" "w")
9869 (match_operand:HI 4 "vpr_register_operand")]
9871 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9872 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9875 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9878 ops[0] = operands[1];
9879 ops[1] = operands[2];
9880 ops[2] = operands[3];
9881 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9884 [(set_attr "length" "8")])
9887 ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
9889 (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di"
9890 [(set (mem:BLK (scratch))
9892 [(match_operand:V2DI 1 "s_register_operand" "0")
9893 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9894 (match_operand:V2DI 3 "s_register_operand" "w")]
9896 (set (match_operand:V2DI 0 "s_register_operand" "=&w")
9897 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9903 ops[0] = operands[1];
9904 ops[1] = operands[2];
9905 ops[2] = operands[3];
9906 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
9909 [(set_attr "length" "4")])
9912 ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
9914 (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
9915 [(set (mem:BLK (scratch))
9917 [(match_operand:V2DI 1 "s_register_operand" "0")
9918 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9919 (match_operand:V2DI 3 "s_register_operand" "w")
9920 (match_operand:HI 4 "vpr_register_operand")]
9922 (set (match_operand:V2DI 0 "s_register_operand" "=w")
9923 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9929 ops[0] = operands[1];
9930 ops[1] = operands[2];
9931 ops[2] = operands[3];
9932 output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops);
9935 [(set_attr "length" "8")])
9937 (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
9938 [(match_operand:V4SI 0 "s_register_operand")
9939 (match_operand:V4SI 1 "s_register_operand")
9940 (match_operand:SI 2 "mve_vldrd_immediate")
9941 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9944 rtx ignore_result = gen_reg_rtx (V4SImode);
9946 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0],
9947 operands[1], operands[2]));
9951 (define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si"
9952 [(match_operand:V4SI 0 "s_register_operand")
9953 (match_operand:V4SI 1 "s_register_operand")
9954 (match_operand:SI 2 "mve_vldrd_immediate")
9955 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9958 rtx ignore_wb = gen_reg_rtx (V4SImode);
9960 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
9961 operands[1], operands[2]));
9966 ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
9968 (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
9969 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9970 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9971 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9972 (mem:BLK (scratch))]
9974 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9975 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9981 ops[0] = operands[0];
9982 ops[1] = operands[2];
9983 ops[2] = operands[3];
9984 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9987 [(set_attr "length" "4")])
9989 (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
9990 [(match_operand:V4SI 0 "s_register_operand")
9991 (match_operand:V4SI 1 "s_register_operand")
9992 (match_operand:SI 2 "mve_vldrd_immediate")
9993 (match_operand:HI 3 "vpr_register_operand")
9994 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9997 rtx ignore_result = gen_reg_rtx (V4SImode);
9999 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0],
10000 operands[1], operands[2],
10004 (define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si"
10005 [(match_operand:V4SI 0 "s_register_operand")
10006 (match_operand:V4SI 1 "s_register_operand")
10007 (match_operand:SI 2 "mve_vldrd_immediate")
10008 (match_operand:HI 3 "vpr_register_operand")
10009 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
10012 rtx ignore_wb = gen_reg_rtx (V4SImode);
10014 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
10015 operands[1], operands[2],
10021 ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
10023 (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
10024 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
10025 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
10026 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10027 (match_operand:HI 4 "vpr_register_operand" "Up")
10028 (mem:BLK (scratch))]
10030 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10031 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10037 ops[0] = operands[0];
10038 ops[1] = operands[2];
10039 ops[2] = operands[3];
10040 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
10043 [(set_attr "length" "8")])
10045 (define_expand "mve_vldrwq_gather_base_wb_fv4sf"
10046 [(match_operand:V4SI 0 "s_register_operand")
10047 (match_operand:V4SI 1 "s_register_operand")
10048 (match_operand:SI 2 "mve_vldrd_immediate")
10049 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10050 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10052 rtx ignore_result = gen_reg_rtx (V4SFmode);
10054 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0],
10055 operands[1], operands[2]));
10059 (define_expand "mve_vldrwq_gather_base_nowb_fv4sf"
10060 [(match_operand:V4SF 0 "s_register_operand")
10061 (match_operand:V4SI 1 "s_register_operand")
10062 (match_operand:SI 2 "mve_vldrd_immediate")
10063 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10064 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10066 rtx ignore_wb = gen_reg_rtx (V4SImode);
10068 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
10069 operands[1], operands[2]));
10074 ;; [vldrwq_gather_base_wb_f]
10076 (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
10077 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10078 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10079 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10080 (mem:BLK (scratch))]
10082 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10083 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10086 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10089 ops[0] = operands[0];
10090 ops[1] = operands[2];
10091 ops[2] = operands[3];
10092 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
10095 [(set_attr "length" "4")])
10097 (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
10098 [(match_operand:V4SI 0 "s_register_operand")
10099 (match_operand:V4SI 1 "s_register_operand")
10100 (match_operand:SI 2 "mve_vldrd_immediate")
10101 (match_operand:HI 3 "vpr_register_operand")
10102 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10103 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10105 rtx ignore_result = gen_reg_rtx (V4SFmode);
10107 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0],
10108 operands[1], operands[2],
10113 (define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf"
10114 [(match_operand:V4SF 0 "s_register_operand")
10115 (match_operand:V4SI 1 "s_register_operand")
10116 (match_operand:SI 2 "mve_vldrd_immediate")
10117 (match_operand:HI 3 "vpr_register_operand")
10118 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10119 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10121 rtx ignore_wb = gen_reg_rtx (V4SImode);
10123 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
10124 operands[1], operands[2],
10130 ;; [vldrwq_gather_base_wb_z_f]
10132 (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
10133 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10134 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10135 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10136 (match_operand:HI 4 "vpr_register_operand" "Up")
10137 (mem:BLK (scratch))]
10139 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10140 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10143 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10146 ops[0] = operands[0];
10147 ops[1] = operands[2];
10148 ops[2] = operands[3];
10149 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
10152 [(set_attr "length" "8")])
10154 (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
10155 [(match_operand:V2DI 0 "s_register_operand")
10156 (match_operand:V2DI 1 "s_register_operand")
10157 (match_operand:SI 2 "mve_vldrd_immediate")
10158 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10161 rtx ignore_result = gen_reg_rtx (V2DImode);
10163 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0],
10164 operands[1], operands[2]));
10168 (define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di"
10169 [(match_operand:V2DI 0 "s_register_operand")
10170 (match_operand:V2DI 1 "s_register_operand")
10171 (match_operand:SI 2 "mve_vldrd_immediate")
10172 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10175 rtx ignore_wb = gen_reg_rtx (V2DImode);
10177 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
10178 operands[1], operands[2]));
10184 ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
10186 (define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn"
10187 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10188 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10189 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10190 (mem:BLK (scratch))]
10192 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10193 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10199 ops[0] = operands[0];
10200 ops[1] = operands[2];
10201 ops[2] = operands[3];
10202 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
10205 [(set_attr "length" "4")])
10207 (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
10208 [(match_operand:V2DI 0 "s_register_operand")
10209 (match_operand:V2DI 1 "s_register_operand")
10210 (match_operand:SI 2 "mve_vldrd_immediate")
10211 (match_operand:HI 3 "vpr_register_operand")
10212 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10215 rtx ignore_result = gen_reg_rtx (V2DImode);
10217 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0],
10218 operands[1], operands[2],
10223 (define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di"
10224 [(match_operand:V2DI 0 "s_register_operand")
10225 (match_operand:V2DI 1 "s_register_operand")
10226 (match_operand:SI 2 "mve_vldrd_immediate")
10227 (match_operand:HI 3 "vpr_register_operand")
10228 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10231 rtx ignore_wb = gen_reg_rtx (V2DImode);
10233 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
10234 operands[1], operands[2],
10239 (define_insn "get_fpscr_nzcvqc"
10240 [(set (match_operand:SI 0 "register_operand" "=r")
10241 (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
10243 "vmrs\\t%0, FPSCR_nzcvqc"
10244 [(set_attr "type" "mve_move")])
10246 (define_insn "set_fpscr_nzcvqc"
10247 [(set (reg:SI VFPCC_REGNUM)
10248 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
10249 VUNSPEC_SET_FPSCR_NZCVQC))]
10251 "vmsr\\tFPSCR_nzcvqc, %0"
10252 [(set_attr "type" "mve_move")])
10255 ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
10257 (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
10258 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10259 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10260 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10261 (match_operand:HI 4 "vpr_register_operand" "Up")
10262 (mem:BLK (scratch))]
10264 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10265 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10271 ops[0] = operands[0];
10272 ops[1] = operands[2];
10273 ops[2] = operands[3];
10274 output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops);
10277 [(set_attr "length" "8")])
10279 ;; [vadciq_m_s, vadciq_m_u])
10281 (define_insn "mve_vadciq_m_<supf>v4si"
10282 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10283 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10284 (match_operand:V4SI 2 "s_register_operand" "w")
10285 (match_operand:V4SI 3 "s_register_operand" "w")
10286 (match_operand:HI 4 "vpr_register_operand" "Up")]
10288 (set (reg:SI VFPCC_REGNUM)
10289 (unspec:SI [(const_int 0)]
10293 "vpst\;vadcit.i32\t%q0, %q2, %q3"
10294 [(set_attr "type" "mve_move")
10295 (set_attr "length" "8")])
10298 ;; [vadciq_u, vadciq_s])
10300 (define_insn "mve_vadciq_<supf>v4si"
10301 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10302 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10303 (match_operand:V4SI 2 "s_register_operand" "w")]
10305 (set (reg:SI VFPCC_REGNUM)
10306 (unspec:SI [(const_int 0)]
10310 "vadci.i32\t%q0, %q1, %q2"
10311 [(set_attr "type" "mve_move")
10312 (set_attr "length" "4")])
10315 ;; [vadcq_m_s, vadcq_m_u])
10317 (define_insn "mve_vadcq_m_<supf>v4si"
10318 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10319 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10320 (match_operand:V4SI 2 "s_register_operand" "w")
10321 (match_operand:V4SI 3 "s_register_operand" "w")
10322 (match_operand:HI 4 "vpr_register_operand" "Up")]
10324 (set (reg:SI VFPCC_REGNUM)
10325 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10329 "vpst\;vadct.i32\t%q0, %q2, %q3"
10330 [(set_attr "type" "mve_move")
10331 (set_attr "length" "8")])
10334 ;; [vadcq_u, vadcq_s])
10336 (define_insn "mve_vadcq_<supf>v4si"
10337 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10338 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10339 (match_operand:V4SI 2 "s_register_operand" "w")]
10341 (set (reg:SI VFPCC_REGNUM)
10342 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10346 "vadc.i32\t%q0, %q1, %q2"
10347 [(set_attr "type" "mve_move")
10348 (set_attr "length" "4")
10349 (set_attr "conds" "set")])
10352 ;; [vsbciq_m_u, vsbciq_m_s])
10354 (define_insn "mve_vsbciq_m_<supf>v4si"
10355 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10356 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10357 (match_operand:V4SI 2 "s_register_operand" "w")
10358 (match_operand:V4SI 3 "s_register_operand" "w")
10359 (match_operand:HI 4 "vpr_register_operand" "Up")]
10361 (set (reg:SI VFPCC_REGNUM)
10362 (unspec:SI [(const_int 0)]
10366 "vpst\;vsbcit.i32\t%q0, %q2, %q3"
10367 [(set_attr "type" "mve_move")
10368 (set_attr "length" "8")])
10371 ;; [vsbciq_s, vsbciq_u])
10373 (define_insn "mve_vsbciq_<supf>v4si"
10374 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10375 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10376 (match_operand:V4SI 2 "s_register_operand" "w")]
10378 (set (reg:SI VFPCC_REGNUM)
10379 (unspec:SI [(const_int 0)]
10383 "vsbci.i32\t%q0, %q1, %q2"
10384 [(set_attr "type" "mve_move")
10385 (set_attr "length" "4")])
10388 ;; [vsbcq_m_u, vsbcq_m_s])
10390 (define_insn "mve_vsbcq_m_<supf>v4si"
10391 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10392 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10393 (match_operand:V4SI 2 "s_register_operand" "w")
10394 (match_operand:V4SI 3 "s_register_operand" "w")
10395 (match_operand:HI 4 "vpr_register_operand" "Up")]
10397 (set (reg:SI VFPCC_REGNUM)
10398 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10402 "vpst\;vsbct.i32\t%q0, %q2, %q3"
10403 [(set_attr "type" "mve_move")
10404 (set_attr "length" "8")])
10407 ;; [vsbcq_s, vsbcq_u])
10409 (define_insn "mve_vsbcq_<supf>v4si"
10410 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10411 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10412 (match_operand:V4SI 2 "s_register_operand" "w")]
10414 (set (reg:SI VFPCC_REGNUM)
10415 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10419 "vsbc.i32\t%q0, %q1, %q2"
10420 [(set_attr "type" "mve_move")
10421 (set_attr "length" "4")])
10426 (define_insn "mve_vst2q<mode>"
10427 [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
10428 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
10429 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10432 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10433 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10436 int regno = REGNO (operands[1]);
10437 ops[0] = gen_rtx_REG (TImode, regno);
10438 ops[1] = gen_rtx_REG (TImode, regno + 4);
10439 rtx reg = operands[0];
10440 while (reg && !REG_P (reg))
10441 reg = XEXP (reg, 0);
10442 gcc_assert (REG_P (reg));
10444 ops[3] = operands[0];
10445 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10446 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10449 [(set_attr "length" "8")])
10454 (define_insn "mve_vld2q<mode>"
10455 [(set (match_operand:OI 0 "s_register_operand" "=w")
10456 (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
10457 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10460 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10461 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10464 int regno = REGNO (operands[0]);
10465 ops[0] = gen_rtx_REG (TImode, regno);
10466 ops[1] = gen_rtx_REG (TImode, regno + 4);
10467 rtx reg = operands[1];
10468 while (reg && !REG_P (reg))
10469 reg = XEXP (reg, 0);
10470 gcc_assert (REG_P (reg));
10472 ops[3] = operands[1];
10473 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10474 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10477 [(set_attr "length" "8")])
10482 (define_insn "mve_vld4q<mode>"
10483 [(set (match_operand:XI 0 "s_register_operand" "=w")
10484 (unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
10485 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10488 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10489 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10492 int regno = REGNO (operands[0]);
10493 ops[0] = gen_rtx_REG (TImode, regno);
10494 ops[1] = gen_rtx_REG (TImode, regno+4);
10495 ops[2] = gen_rtx_REG (TImode, regno+8);
10496 ops[3] = gen_rtx_REG (TImode, regno + 12);
10497 rtx reg = operands[1];
10498 while (reg && !REG_P (reg))
10499 reg = XEXP (reg, 0);
10500 gcc_assert (REG_P (reg));
10502 ops[5] = operands[1];
10503 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10504 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10505 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10506 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
10509 [(set_attr "length" "16")])
10511 ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
10513 (define_insn "mve_vec_extract<mode><V_elem_l>"
10514 [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r")
10515 (vec_select:<V_elem>
10516 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
10517 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10518 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10519 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10521 if (BYTES_BIG_ENDIAN)
10523 int elt = INTVAL (operands[2]);
10524 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10525 operands[2] = GEN_INT (elt);
10527 return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
10529 [(set_attr "type" "mve_move")])
10531 (define_insn "mve_vec_extractv2didi"
10532 [(set (match_operand:DI 0 "nonimmediate_operand" "=r")
10534 (match_operand:V2DI 1 "s_register_operand" "w")
10535 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10538 int elt = INTVAL (operands[2]);
10539 if (BYTES_BIG_ENDIAN)
10543 return "vmov\t%Q0, %R0, %e1";
10545 return "vmov\t%Q0, %R0, %f1";
10547 [(set_attr "type" "mve_move")])
10549 (define_insn "*mve_vec_extract_sext_internal<mode>"
10550 [(set (match_operand:SI 0 "s_register_operand" "=r")
10552 (vec_select:<V_elem>
10553 (match_operand:MVE_2 1 "s_register_operand" "w")
10554 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10555 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10556 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10558 if (BYTES_BIG_ENDIAN)
10560 int elt = INTVAL (operands[2]);
10561 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10562 operands[2] = GEN_INT (elt);
10564 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
10566 [(set_attr "type" "mve_move")])
10568 (define_insn "*mve_vec_extract_zext_internal<mode>"
10569 [(set (match_operand:SI 0 "s_register_operand" "=r")
10571 (vec_select:<V_elem>
10572 (match_operand:MVE_2 1 "s_register_operand" "w")
10573 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10574 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10575 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10577 if (BYTES_BIG_ENDIAN)
10579 int elt = INTVAL (operands[2]);
10580 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10581 operands[2] = GEN_INT (elt);
10583 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
10585 [(set_attr "type" "mve_move")])
10588 ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
10590 (define_insn "mve_vec_set<mode>_internal"
10591 [(set (match_operand:VQ2 0 "s_register_operand" "=w")
10594 (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
10595 (match_operand:VQ2 3 "s_register_operand" "0")
10596 (match_operand:SI 2 "immediate_operand" "i")))]
10597 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10598 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10600 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10601 if (BYTES_BIG_ENDIAN)
10602 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10603 operands[2] = GEN_INT (elt);
10605 return "vmov.<V_sz_elem>\t%q0[%c2], %1";
10607 [(set_attr "type" "mve_move")])
10609 (define_insn "mve_vec_setv2di_internal"
10610 [(set (match_operand:V2DI 0 "s_register_operand" "=w")
10612 (vec_duplicate:V2DI
10613 (match_operand:DI 1 "nonimmediate_operand" "r"))
10614 (match_operand:V2DI 3 "s_register_operand" "0")
10615 (match_operand:SI 2 "immediate_operand" "i")))]
10618 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10619 if (BYTES_BIG_ENDIAN)
10623 return "vmov\t%e0, %Q1, %R1";
10625 return "vmov\t%f0, %J1, %K1";
10627 [(set_attr "type" "mve_move")])
10632 (define_insn "mve_uqrshll_sat<supf>_di"
10633 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10634 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10635 (match_operand:SI 2 "register_operand" "r")]
10638 "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
10639 [(set_attr "predicable" "yes")])
10644 (define_insn "mve_sqrshrl_sat<supf>_di"
10645 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10646 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10647 (match_operand:SI 2 "register_operand" "r")]
10650 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
10651 [(set_attr "predicable" "yes")])
10656 (define_insn "mve_uqrshl_si"
10657 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10658 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10659 (match_operand:SI 2 "register_operand" "r")]
10662 "uqrshl%?\\t%1, %2"
10663 [(set_attr "predicable" "yes")])
10668 (define_insn "mve_sqrshr_si"
10669 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10670 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10671 (match_operand:SI 2 "register_operand" "r")]
10674 "sqrshr%?\\t%1, %2"
10675 [(set_attr "predicable" "yes")])
10680 (define_insn "mve_uqshll_di"
10681 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10682 (us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10683 (match_operand:SI 2 "immediate_operand" "Pg")))]
10685 "uqshll%?\\t%Q1, %R1, %2"
10686 [(set_attr "predicable" "yes")])
10691 (define_insn "mve_urshrl_di"
10692 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10693 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10694 (match_operand:SI 2 "immediate_operand" "Pg")]
10697 "urshrl%?\\t%Q1, %R1, %2"
10698 [(set_attr "predicable" "yes")])
10703 (define_insn "mve_uqshl_si"
10704 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10705 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0")
10706 (match_operand:SI 2 "immediate_operand" "Pg")))]
10709 [(set_attr "predicable" "yes")])
10714 (define_insn "mve_urshr_si"
10715 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10716 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10717 (match_operand:SI 2 "immediate_operand" "Pg")]
10721 [(set_attr "predicable" "yes")])
10726 (define_insn "mve_sqshl_si"
10727 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10728 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0")
10729 (match_operand:SI 2 "immediate_operand" "Pg")))]
10732 [(set_attr "predicable" "yes")])
10737 (define_insn "mve_srshr_si"
10738 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10739 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0")
10740 (match_operand:SI 2 "immediate_operand" "Pg")]
10744 [(set_attr "predicable" "yes")])
10749 (define_insn "mve_srshrl_di"
10750 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10751 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10752 (match_operand:SI 2 "immediate_operand" "Pg")]
10755 "srshrl%?\\t%Q1, %R1, %2"
10756 [(set_attr "predicable" "yes")])
10761 (define_insn "mve_sqshll_di"
10762 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10763 (ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10764 (match_operand:SI 2 "immediate_operand" "Pg")))]
10766 "sqshll%?\\t%Q1, %R1, %2"
10767 [(set_attr "predicable" "yes")])
10770 ;; [vshlcq_m_u vshlcq_m_s]
10772 (define_expand "mve_vshlcq_m_vec_<supf><mode>"
10773 [(match_operand:MVE_2 0 "s_register_operand")
10774 (match_operand:MVE_2 1 "s_register_operand")
10775 (match_operand:SI 2 "s_register_operand")
10776 (match_operand:SI 3 "mve_imm_32")
10777 (match_operand:HI 4 "vpr_register_operand")
10778 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10781 rtx ignore_wb = gen_reg_rtx (SImode);
10782 emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1],
10783 operands[2], operands[3],
10788 (define_expand "mve_vshlcq_m_carry_<supf><mode>"
10789 [(match_operand:SI 0 "s_register_operand")
10790 (match_operand:MVE_2 1 "s_register_operand")
10791 (match_operand:SI 2 "s_register_operand")
10792 (match_operand:SI 3 "mve_imm_32")
10793 (match_operand:HI 4 "vpr_register_operand")
10794 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10797 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10798 emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0],
10799 operands[1], operands[2],
10800 operands[3], operands[4]));
10804 (define_insn "mve_vshlcq_m_<supf><mode>"
10805 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10806 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10807 (match_operand:SI 3 "s_register_operand" "1")
10808 (match_operand:SI 4 "mve_imm_32" "Rf")
10809 (match_operand:HI 5 "vpr_register_operand" "Up")]
10811 (set (match_operand:SI 1 "s_register_operand" "=r")
10812 (unspec:SI [(match_dup 2)
10819 "vpst\;vshlct\t%q0, %1, %4"
10820 [(set_attr "type" "mve_move")
10821 (set_attr "length" "8")])
10823 (define_insn "*mve_vec_duplicate<mode>"
10824 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
10825 (vec_duplicate:MVE_VLD_ST (match_operand:<V_elem> 1 "general_operand" "r")))]
10826 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
10827 "vdup.<V_sz_elem>\t%q0, %1"
10828 [(set_attr "type" "mve_move")])
10830 ;; CDE instructions on MVE registers.
10832 (define_insn "arm_vcx1qv16qi"
10833 [(set (match_operand:V16QI 0 "register_operand" "=t")
10834 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10835 (match_operand:SI 2 "const_int_mve_cde1_operand" "i")]
10837 "TARGET_CDE && TARGET_HAVE_MVE"
10838 "vcx1\\tp%c1, %q0, #%c2"
10839 [(set_attr "type" "coproc")]
10842 (define_insn "arm_vcx1qav16qi"
10843 [(set (match_operand:V16QI 0 "register_operand" "=t")
10844 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10845 (match_operand:V16QI 2 "register_operand" "0")
10846 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")]
10848 "TARGET_CDE && TARGET_HAVE_MVE"
10849 "vcx1a\\tp%c1, %q0, #%c3"
10850 [(set_attr "type" "coproc")]
10853 (define_insn "arm_vcx2qv16qi"
10854 [(set (match_operand:V16QI 0 "register_operand" "=t")
10855 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10856 (match_operand:V16QI 2 "register_operand" "t")
10857 (match_operand:SI 3 "const_int_mve_cde2_operand" "i")]
10859 "TARGET_CDE && TARGET_HAVE_MVE"
10860 "vcx2\\tp%c1, %q0, %q2, #%c3"
10861 [(set_attr "type" "coproc")]
10864 (define_insn "arm_vcx2qav16qi"
10865 [(set (match_operand:V16QI 0 "register_operand" "=t")
10866 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10867 (match_operand:V16QI 2 "register_operand" "0")
10868 (match_operand:V16QI 3 "register_operand" "t")
10869 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")]
10871 "TARGET_CDE && TARGET_HAVE_MVE"
10872 "vcx2a\\tp%c1, %q0, %q3, #%c4"
10873 [(set_attr "type" "coproc")]
10876 (define_insn "arm_vcx3qv16qi"
10877 [(set (match_operand:V16QI 0 "register_operand" "=t")
10878 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10879 (match_operand:V16QI 2 "register_operand" "t")
10880 (match_operand:V16QI 3 "register_operand" "t")
10881 (match_operand:SI 4 "const_int_mve_cde3_operand" "i")]
10883 "TARGET_CDE && TARGET_HAVE_MVE"
10884 "vcx3\\tp%c1, %q0, %q2, %q3, #%c4"
10885 [(set_attr "type" "coproc")]
10888 (define_insn "arm_vcx3qav16qi"
10889 [(set (match_operand:V16QI 0 "register_operand" "=t")
10890 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10891 (match_operand:V16QI 2 "register_operand" "0")
10892 (match_operand:V16QI 3 "register_operand" "t")
10893 (match_operand:V16QI 4 "register_operand" "t")
10894 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")]
10896 "TARGET_CDE && TARGET_HAVE_MVE"
10897 "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5"
10898 [(set_attr "type" "coproc")]
10901 (define_insn "arm_vcx1q<a>_p_v16qi"
10902 [(set (match_operand:V16QI 0 "register_operand" "=t")
10903 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10904 (match_operand:V16QI 2 "register_operand" "0")
10905 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")
10906 (match_operand:HI 4 "vpr_register_operand" "Up")]
10908 "TARGET_CDE && TARGET_HAVE_MVE"
10909 "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3"
10910 [(set_attr "type" "coproc")
10911 (set_attr "length" "8")]
10914 (define_insn "arm_vcx2q<a>_p_v16qi"
10915 [(set (match_operand:V16QI 0 "register_operand" "=t")
10916 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10917 (match_operand:V16QI 2 "register_operand" "0")
10918 (match_operand:V16QI 3 "register_operand" "t")
10919 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")
10920 (match_operand:HI 5 "vpr_register_operand" "Up")]
10922 "TARGET_CDE && TARGET_HAVE_MVE"
10923 "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4"
10924 [(set_attr "type" "coproc")
10925 (set_attr "length" "8")]
10928 (define_insn "arm_vcx3q<a>_p_v16qi"
10929 [(set (match_operand:V16QI 0 "register_operand" "=t")
10930 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10931 (match_operand:V16QI 2 "register_operand" "0")
10932 (match_operand:V16QI 3 "register_operand" "t")
10933 (match_operand:V16QI 4 "register_operand" "t")
10934 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")
10935 (match_operand:HI 6 "vpr_register_operand" "Up")]
10937 "TARGET_CDE && TARGET_HAVE_MVE"
10938 "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5"
10939 [(set_attr "type" "coproc")
10940 (set_attr "length" "8")]