1 ;; Arm M-profile Vector Extension Machine Description
2 ;; Copyright (C) 2019-2021 Free Software Foundation, Inc.
4 ;; This file is part of GCC.
6 ;; GCC is free software; you can redistribute it and/or modify it
7 ;; under the terms of the GNU General Public License as published by
8 ;; the Free Software Foundation; either version 3, or (at your option)
11 ;; GCC is distributed in the hope that it will be useful, but
12 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 ;; General Public License for more details.
16 ;; You should have received a copy of the GNU General Public License
17 ;; along with GCC; see the file COPYING3. If not see
18 ;; <http://www.gnu.org/licenses/>.
20 (define_insn "*mve_mov<mode>"
21 [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w,w,r,w,Ux,w")
22 (match_operand:MVE_types 1 "general_operand" "w,r,w,Dn,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 (neg:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")))
276 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
277 "vneg.f%#<V_sz_elem> %q0, %q1"
278 [(set_attr "type" "mve_move")
284 (define_insn "mve_vdupq_n_f<mode>"
286 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
287 (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
290 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
291 "vdup.%#<V_sz_elem> %q0, %1"
292 [(set_attr "type" "mve_move")
298 (define_insn "mve_vabsq_f<mode>"
300 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
301 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
304 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
305 "vabs.f%#<V_sz_elem> %q0, %q1"
306 [(set_attr "type" "mve_move")
312 (define_insn "mve_vrev32q_fv8hf"
314 (set (match_operand:V8HF 0 "s_register_operand" "=w")
315 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")]
318 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
320 [(set_attr "type" "mve_move")
325 (define_insn "mve_vcvttq_f32_f16v4sf"
327 (set (match_operand:V4SF 0 "s_register_operand" "=w")
328 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
331 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
332 "vcvtt.f32.f16 %q0, %q1"
333 [(set_attr "type" "mve_move")
339 (define_insn "mve_vcvtbq_f32_f16v4sf"
341 (set (match_operand:V4SF 0 "s_register_operand" "=w")
342 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
345 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
346 "vcvtb.f32.f16 %q0, %q1"
347 [(set_attr "type" "mve_move")
351 ;; [vcvtq_to_f_s, vcvtq_to_f_u])
353 (define_insn "mve_vcvtq_to_f_<supf><mode>"
355 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
356 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
359 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
360 "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q1"
361 [(set_attr "type" "mve_move")
365 ;; [vrev64q_u, vrev64q_s])
367 (define_insn "mve_vrev64q_<supf><mode>"
369 (set (match_operand:MVE_2 0 "s_register_operand" "=&w")
370 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
374 "vrev64.%#<V_sz_elem> %q0, %q1"
375 [(set_attr "type" "mve_move")
379 ;; [vcvtq_from_f_s, vcvtq_from_f_u])
381 (define_insn "mve_vcvtq_from_f_<supf><mode>"
383 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
384 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
387 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
388 "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
389 [(set_attr "type" "mve_move")
393 (define_insn "mve_vqnegq_s<mode>"
395 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
396 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
400 "vqneg.s%#<V_sz_elem> %q0, %q1"
401 [(set_attr "type" "mve_move")
407 (define_insn "mve_vqabsq_s<mode>"
409 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
410 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
414 "vqabs.s%#<V_sz_elem> %q0, %q1"
415 [(set_attr "type" "mve_move")
421 (define_insn "mve_vnegq_s<mode>"
423 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
424 (neg:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
427 "vneg.s%#<V_sz_elem> %q0, %q1"
428 [(set_attr "type" "mve_move")
432 ;; [vmvnq_u, vmvnq_s])
434 (define_insn "mve_vmvnq_u<mode>"
436 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
437 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
441 [(set_attr "type" "mve_move")
443 (define_expand "mve_vmvnq_s<mode>"
445 (set (match_operand:MVE_2 0 "s_register_operand")
446 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand")))
452 ;; [vdupq_n_u, vdupq_n_s])
454 (define_insn "mve_vdupq_n_<supf><mode>"
456 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
457 (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
461 "vdup.%#<V_sz_elem> %q0, %1"
462 [(set_attr "type" "mve_move")
466 ;; [vclzq_u, vclzq_s])
468 (define_insn "mve_vclzq_<supf><mode>"
470 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
471 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
475 "vclz.i%#<V_sz_elem> %q0, %q1"
476 [(set_attr "type" "mve_move")
482 (define_insn "mve_vclsq_s<mode>"
484 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
485 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
489 "vcls.s%#<V_sz_elem> %q0, %q1"
490 [(set_attr "type" "mve_move")
494 ;; [vaddvq_s, vaddvq_u])
496 (define_insn "mve_vaddvq_<supf><mode>"
498 (set (match_operand:SI 0 "s_register_operand" "=Te")
499 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
503 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
504 [(set_attr "type" "mve_move")
510 (define_insn "mve_vabsq_s<mode>"
512 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
513 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
517 "vabs.s%#<V_sz_elem>\t%q0, %q1"
518 [(set_attr "type" "mve_move")
522 ;; [vrev32q_u, vrev32q_s])
524 (define_insn "mve_vrev32q_<supf><mode>"
526 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
527 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
531 "vrev32.%#<V_sz_elem>\t%q0, %q1"
532 [(set_attr "type" "mve_move")
536 ;; [vmovltq_u, vmovltq_s])
538 (define_insn "mve_vmovltq_<supf><mode>"
540 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
541 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
545 "vmovlt.<supf>%#<V_sz_elem> %q0, %q1"
546 [(set_attr "type" "mve_move")
550 ;; [vmovlbq_s, vmovlbq_u])
552 (define_insn "mve_vmovlbq_<supf><mode>"
554 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
555 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
559 "vmovlb.<supf>%#<V_sz_elem> %q0, %q1"
560 [(set_attr "type" "mve_move")
564 ;; [vcvtpq_s, vcvtpq_u])
566 (define_insn "mve_vcvtpq_<supf><mode>"
568 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
569 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
572 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
573 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
574 [(set_attr "type" "mve_move")
578 ;; [vcvtnq_s, vcvtnq_u])
580 (define_insn "mve_vcvtnq_<supf><mode>"
582 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
583 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
586 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
587 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
588 [(set_attr "type" "mve_move")
592 ;; [vcvtmq_s, vcvtmq_u])
594 (define_insn "mve_vcvtmq_<supf><mode>"
596 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
597 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
600 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
601 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
602 [(set_attr "type" "mve_move")
606 ;; [vcvtaq_u, vcvtaq_s])
608 (define_insn "mve_vcvtaq_<supf><mode>"
610 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
611 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
614 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
615 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
616 [(set_attr "type" "mve_move")
620 ;; [vmvnq_n_u, vmvnq_n_s])
622 (define_insn "mve_vmvnq_n_<supf><mode>"
624 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
625 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
629 "vmvn.i%#<V_sz_elem> %q0, %1"
630 [(set_attr "type" "mve_move")
634 ;; [vrev16q_u, vrev16q_s])
636 (define_insn "mve_vrev16q_<supf>v16qi"
638 (set (match_operand:V16QI 0 "s_register_operand" "=w")
639 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
644 [(set_attr "type" "mve_move")
648 ;; [vaddlvq_s vaddlvq_u])
650 (define_insn "mve_vaddlvq_<supf>v4si"
652 (set (match_operand:DI 0 "s_register_operand" "=r")
653 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
657 "vaddlv.<supf>32 %Q0, %R0, %q1"
658 [(set_attr "type" "mve_move")
662 ;; [vctp8q vctp16q vctp32q vctp64q])
664 (define_insn "mve_vctp<mode1>qhi"
666 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
667 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
672 [(set_attr "type" "mve_move")
678 (define_insn "mve_vpnothi"
680 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
681 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
686 [(set_attr "type" "mve_move")
692 (define_insn "mve_vsubq_n_f<mode>"
694 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
695 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
696 (match_operand:<V_elem> 2 "s_register_operand" "r")]
699 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
700 "vsub.f<V_sz_elem> %q0, %q1, %2"
701 [(set_attr "type" "mve_move")
707 (define_insn "mve_vbrsrq_n_f<mode>"
709 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
710 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
711 (match_operand:SI 2 "s_register_operand" "r")]
714 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
715 "vbrsr.<V_sz_elem> %q0, %q1, %2"
716 [(set_attr "type" "mve_move")
720 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
722 (define_insn "mve_vcvtq_n_to_f_<supf><mode>"
724 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
725 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
726 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
729 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
730 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
731 [(set_attr "type" "mve_move")
736 (define_insn "mve_vcreateq_f<mode>"
738 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
739 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
740 (match_operand:DI 2 "s_register_operand" "r")]
743 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
744 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
745 [(set_attr "type" "mve_move")
746 (set_attr "length""8")])
749 ;; [vcreateq_u, vcreateq_s])
751 (define_insn "mve_vcreateq_<supf><mode>"
753 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
754 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
755 (match_operand:DI 2 "s_register_operand" "r")]
759 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
760 [(set_attr "type" "mve_move")
761 (set_attr "length""8")])
764 ;; [vshrq_n_s, vshrq_n_u])
766 ;; Version that takes an immediate as operand 2.
767 (define_insn "mve_vshrq_n_<supf><mode>"
769 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
770 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
771 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
775 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
776 [(set_attr "type" "mve_move")
779 ;; Versions that take constant vectors as operand 2 (with all elements
781 (define_insn "mve_vshrq_n_s<mode>_imm"
783 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
784 (ashiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
785 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i")))
789 return neon_output_shift_immediate ("vshr", 's', &operands[2],
791 VALID_NEON_QREG_MODE (<MODE>mode),
794 [(set_attr "type" "mve_move")
796 (define_insn "mve_vshrq_n_u<mode>_imm"
798 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
799 (lshiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
800 (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i")))
804 return neon_output_shift_immediate ("vshr", 'u', &operands[2],
806 VALID_NEON_QREG_MODE (<MODE>mode),
809 [(set_attr "type" "mve_move")
813 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
815 (define_insn "mve_vcvtq_n_from_f_<supf><mode>"
817 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
818 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
819 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
822 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
823 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
824 [(set_attr "type" "mve_move")
830 (define_insn "mve_vaddlvq_p_<supf>v4si"
832 (set (match_operand:DI 0 "s_register_operand" "=r")
833 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
834 (match_operand:HI 2 "vpr_register_operand" "Up")]
838 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
839 [(set_attr "type" "mve_move")
840 (set_attr "length""8")])
843 ;; [vcmpneq_u, vcmpneq_s])
845 (define_insn "mve_vcmpneq_<supf><mode>"
847 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
848 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
849 (match_operand:MVE_2 2 "s_register_operand" "w")]
853 "vcmp.i%#<V_sz_elem> ne, %q1, %q2"
854 [(set_attr "type" "mve_move")
858 ;; [vshlq_s, vshlq_u])
862 ;; [vabdq_s, vabdq_u])
864 (define_insn "mve_vabdq_<supf><mode>"
866 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
867 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
868 (match_operand:MVE_2 2 "s_register_operand" "w")]
872 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
873 [(set_attr "type" "mve_move")
877 ;; [vaddq_n_s, vaddq_n_u])
879 (define_insn "mve_vaddq_n_<supf><mode>"
881 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
882 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
883 (match_operand:<V_elem> 2 "s_register_operand" "r")]
887 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
888 [(set_attr "type" "mve_move")
892 ;; [vaddvaq_s, vaddvaq_u])
894 (define_insn "mve_vaddvaq_<supf><mode>"
896 (set (match_operand:SI 0 "s_register_operand" "=Te")
897 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
898 (match_operand:MVE_2 2 "s_register_operand" "w")]
902 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
903 [(set_attr "type" "mve_move")
907 ;; [vaddvq_p_u, vaddvq_p_s])
909 (define_insn "mve_vaddvq_p_<supf><mode>"
911 (set (match_operand:SI 0 "s_register_operand" "=Te")
912 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
913 (match_operand:HI 2 "vpr_register_operand" "Up")]
917 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
918 [(set_attr "type" "mve_move")
919 (set_attr "length""8")])
922 ;; [vandq_u, vandq_s])
924 ;; signed and unsigned versions are the same: define the unsigned
925 ;; insn, and use an expander for the signed one as we still reference
926 ;; both names from arm_mve.h.
927 ;; We use the same code as in neon.md (TODO: avoid this duplication).
928 (define_insn "mve_vandq_u<mode>"
930 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
931 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
932 (match_operand:MVE_2 2 "neon_inv_logic_op2" "w,DL")))
937 * return neon_output_logic_immediate (\"vand\", &operands[2], <MODE>mode, 1, VALID_NEON_QREG_MODE (<MODE>mode));"
938 [(set_attr "type" "mve_move")
940 (define_expand "mve_vandq_s<mode>"
942 (set (match_operand:MVE_2 0 "s_register_operand")
943 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
944 (match_operand:MVE_2 2 "neon_inv_logic_op2")))
950 ;; [vbicq_s, vbicq_u])
952 (define_insn "mve_vbicq_u<mode>"
954 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
955 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
956 (match_operand:MVE_2 1 "s_register_operand" "w")))
959 "vbic\t%q0, %q1, %q2"
960 [(set_attr "type" "mve_move")
963 (define_expand "mve_vbicq_s<mode>"
965 (set (match_operand:MVE_2 0 "s_register_operand")
966 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
967 (match_operand:MVE_2 1 "s_register_operand")))
973 ;; [vbrsrq_n_u, vbrsrq_n_s])
975 (define_insn "mve_vbrsrq_n_<supf><mode>"
977 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
978 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
979 (match_operand:SI 2 "s_register_operand" "r")]
983 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
984 [(set_attr "type" "mve_move")
988 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
990 (define_insn "mve_vcaddq<mve_rot><mode>"
992 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
993 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
994 (match_operand:MVE_2 2 "s_register_operand" "w")]
998 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
999 [(set_attr "type" "mve_move")
1002 ;; Auto vectorizer pattern for int vcadd
1003 (define_expand "cadd<rot><mode>3"
1004 [(set (match_operand:MVE_2 0 "register_operand")
1005 (unspec:MVE_2 [(match_operand:MVE_2 1 "register_operand")
1006 (match_operand:MVE_2 2 "register_operand")]
1008 "TARGET_HAVE_MVE && !BYTES_BIG_ENDIAN"
1014 (define_insn "mve_vcmpcsq_n_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:<V_elem> 2 "s_register_operand" "r")]
1022 "vcmp.u%#<V_sz_elem> cs, %q1, %2"
1023 [(set_attr "type" "mve_move")
1029 (define_insn "mve_vcmpcsq_u<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:MVE_2 2 "s_register_operand" "w")]
1037 "vcmp.u%#<V_sz_elem> cs, %q1, %q2"
1038 [(set_attr "type" "mve_move")
1042 ;; [vcmpeqq_n_s, vcmpeqq_n_u])
1044 (define_insn "mve_vcmpeqq_n_<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:<V_elem> 2 "s_register_operand" "r")]
1052 "vcmp.i%#<V_sz_elem> eq, %q1, %2"
1053 [(set_attr "type" "mve_move")
1057 ;; [vcmpeqq_u, vcmpeqq_s])
1059 (define_insn "mve_vcmpeqq_<supf><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:MVE_2 2 "s_register_operand" "w")]
1067 "vcmp.i%#<V_sz_elem> eq, %q1, %q2"
1068 [(set_attr "type" "mve_move")
1074 (define_insn "mve_vcmpgeq_n_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:<V_elem> 2 "s_register_operand" "r")]
1082 "vcmp.s%#<V_sz_elem> ge, %q1, %2"
1083 [(set_attr "type" "mve_move")
1089 (define_insn "mve_vcmpgeq_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:MVE_2 2 "s_register_operand" "w")]
1097 "vcmp.s%#<V_sz_elem> ge, %q1, %q2"
1098 [(set_attr "type" "mve_move")
1104 (define_insn "mve_vcmpgtq_n_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:<V_elem> 2 "s_register_operand" "r")]
1112 "vcmp.s%#<V_sz_elem> gt, %q1, %2"
1113 [(set_attr "type" "mve_move")
1119 (define_insn "mve_vcmpgtq_s<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:MVE_2 2 "s_register_operand" "w")]
1127 "vcmp.s%#<V_sz_elem> gt, %q1, %q2"
1128 [(set_attr "type" "mve_move")
1134 (define_insn "mve_vcmphiq_n_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:<V_elem> 2 "s_register_operand" "r")]
1142 "vcmp.u%#<V_sz_elem> hi, %q1, %2"
1143 [(set_attr "type" "mve_move")
1149 (define_insn "mve_vcmphiq_u<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:MVE_2 2 "s_register_operand" "w")]
1157 "vcmp.u%#<V_sz_elem> hi, %q1, %q2"
1158 [(set_attr "type" "mve_move")
1164 (define_insn "mve_vcmpleq_n_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:<V_elem> 2 "s_register_operand" "r")]
1172 "vcmp.s%#<V_sz_elem> le, %q1, %2"
1173 [(set_attr "type" "mve_move")
1179 (define_insn "mve_vcmpleq_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:MVE_2 2 "s_register_operand" "w")]
1187 "vcmp.s%#<V_sz_elem> le, %q1, %q2"
1188 [(set_attr "type" "mve_move")
1194 (define_insn "mve_vcmpltq_n_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:<V_elem> 2 "s_register_operand" "r")]
1202 "vcmp.s%#<V_sz_elem> lt, %q1, %2"
1203 [(set_attr "type" "mve_move")
1209 (define_insn "mve_vcmpltq_s<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:MVE_2 2 "s_register_operand" "w")]
1217 "vcmp.s%#<V_sz_elem> lt, %q1, %q2"
1218 [(set_attr "type" "mve_move")
1222 ;; [vcmpneq_n_u, vcmpneq_n_s])
1224 (define_insn "mve_vcmpneq_n_<supf><mode>"
1226 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1227 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1228 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1232 "vcmp.i%#<V_sz_elem> ne, %q1, %2"
1233 [(set_attr "type" "mve_move")
1237 ;; [veorq_u, veorq_s])
1239 (define_insn "mve_veorq_u<mode>"
1241 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1242 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1243 (match_operand:MVE_2 2 "s_register_operand" "w")))
1246 "veor\t%q0, %q1, %q2"
1247 [(set_attr "type" "mve_move")
1249 (define_expand "mve_veorq_s<mode>"
1251 (set (match_operand:MVE_2 0 "s_register_operand")
1252 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1253 (match_operand:MVE_2 2 "s_register_operand")))
1259 ;; [vhaddq_n_u, vhaddq_n_s])
1261 (define_insn "mve_vhaddq_n_<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:<V_elem> 2 "s_register_operand" "r")]
1269 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1270 [(set_attr "type" "mve_move")
1274 ;; [vhaddq_s, vhaddq_u])
1276 (define_insn "mve_vhaddq_<supf><mode>"
1278 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1279 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1280 (match_operand:MVE_2 2 "s_register_operand" "w")]
1284 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1285 [(set_attr "type" "mve_move")
1289 ;; [vhcaddq_rot270_s])
1291 (define_insn "mve_vhcaddq_rot270_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, #270"
1300 [(set_attr "type" "mve_move")
1304 ;; [vhcaddq_rot90_s])
1306 (define_insn "mve_vhcaddq_rot90_s<mode>"
1308 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1309 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1310 (match_operand:MVE_2 2 "s_register_operand" "w")]
1314 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1315 [(set_attr "type" "mve_move")
1319 ;; [vhsubq_n_u, vhsubq_n_s])
1321 (define_insn "mve_vhsubq_n_<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:<V_elem> 2 "s_register_operand" "r")]
1329 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1330 [(set_attr "type" "mve_move")
1334 ;; [vhsubq_s, vhsubq_u])
1336 (define_insn "mve_vhsubq_<supf><mode>"
1338 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1339 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1340 (match_operand:MVE_2 2 "s_register_operand" "w")]
1344 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1345 [(set_attr "type" "mve_move")
1351 (define_insn "mve_vmaxaq_s<mode>"
1353 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1354 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1355 (match_operand:MVE_2 2 "s_register_operand" "w")]
1359 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1360 [(set_attr "type" "mve_move")
1366 (define_insn "mve_vmaxavq_s<mode>"
1368 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1369 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1370 (match_operand:MVE_2 2 "s_register_operand" "w")]
1374 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1375 [(set_attr "type" "mve_move")
1379 ;; [vmaxq_u, vmaxq_s])
1381 (define_insn "mve_vmaxq_s<mode>"
1383 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1384 (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1385 (match_operand:MVE_2 2 "s_register_operand" "w")))
1388 "vmax.%#<V_s_elem>\t%q0, %q1, %q2"
1389 [(set_attr "type" "mve_move")
1392 (define_insn "mve_vmaxq_u<mode>"
1394 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1395 (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1396 (match_operand:MVE_2 2 "s_register_operand" "w")))
1399 "vmax.%#<V_u_elem>\t%q0, %q1, %q2"
1400 [(set_attr "type" "mve_move")
1404 ;; [vmaxvq_u, vmaxvq_s])
1406 (define_insn "mve_vmaxvq_<supf><mode>"
1408 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1409 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1410 (match_operand:MVE_2 2 "s_register_operand" "w")]
1414 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1415 [(set_attr "type" "mve_move")
1421 (define_insn "mve_vminaq_s<mode>"
1423 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1424 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1425 (match_operand:MVE_2 2 "s_register_operand" "w")]
1429 "vmina.s%#<V_sz_elem>\t%q0, %q2"
1430 [(set_attr "type" "mve_move")
1436 (define_insn "mve_vminavq_s<mode>"
1438 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1439 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1440 (match_operand:MVE_2 2 "s_register_operand" "w")]
1444 "vminav.s%#<V_sz_elem>\t%0, %q2"
1445 [(set_attr "type" "mve_move")
1449 ;; [vminq_s, vminq_u])
1451 (define_insn "mve_vminq_s<mode>"
1453 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1454 (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1455 (match_operand:MVE_2 2 "s_register_operand" "w")))
1458 "vmin.%#<V_s_elem>\t%q0, %q1, %q2"
1459 [(set_attr "type" "mve_move")
1462 (define_insn "mve_vminq_u<mode>"
1464 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1465 (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1466 (match_operand:MVE_2 2 "s_register_operand" "w")))
1469 "vmin.%#<V_u_elem>\t%q0, %q1, %q2"
1470 [(set_attr "type" "mve_move")
1474 ;; [vminvq_u, vminvq_s])
1476 (define_insn "mve_vminvq_<supf><mode>"
1478 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1479 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1480 (match_operand:MVE_2 2 "s_register_operand" "w")]
1484 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
1485 [(set_attr "type" "mve_move")
1489 ;; [vmladavq_u, vmladavq_s])
1491 (define_insn "mve_vmladavq_<supf><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 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
1500 [(set_attr "type" "mve_move")
1506 (define_insn "mve_vmladavxq_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 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1515 [(set_attr "type" "mve_move")
1521 (define_insn "mve_vmlsdavq_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 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
1530 [(set_attr "type" "mve_move")
1536 (define_insn "mve_vmlsdavxq_s<mode>"
1538 (set (match_operand:SI 0 "s_register_operand" "=Te")
1539 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1540 (match_operand:MVE_2 2 "s_register_operand" "w")]
1544 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1545 [(set_attr "type" "mve_move")
1549 ;; [vmulhq_s, vmulhq_u])
1551 (define_insn "mve_vmulhq_<supf><mode>"
1553 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1554 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1555 (match_operand:MVE_2 2 "s_register_operand" "w")]
1559 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1560 [(set_attr "type" "mve_move")
1564 ;; [vmullbq_int_u, vmullbq_int_s])
1566 (define_insn "mve_vmullbq_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 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1575 [(set_attr "type" "mve_move")
1579 ;; [vmulltq_int_u, vmulltq_int_s])
1581 (define_insn "mve_vmulltq_int_<supf><mode>"
1583 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1584 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1585 (match_operand:MVE_2 2 "s_register_operand" "w")]
1589 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1590 [(set_attr "type" "mve_move")
1594 ;; [vmulq_n_u, vmulq_n_s])
1596 (define_insn "mve_vmulq_n_<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:<V_elem> 2 "s_register_operand" "r")]
1604 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
1605 [(set_attr "type" "mve_move")
1609 ;; [vmulq_u, vmulq_s])
1611 (define_insn "mve_vmulq_<supf><mode>"
1613 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1614 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1615 (match_operand:MVE_2 2 "s_register_operand" "w")]
1619 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1620 [(set_attr "type" "mve_move")
1623 (define_insn "mve_vmulq<mode>"
1625 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1626 (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1627 (match_operand:MVE_2 2 "s_register_operand" "w")))
1630 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1631 [(set_attr "type" "mve_move")
1635 ;; [vornq_u, vornq_s])
1637 (define_insn "mve_vornq_<supf><mode>"
1639 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1640 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1641 (match_operand:MVE_2 2 "s_register_operand" "w")]
1645 "vorn %q0, %q1, %q2"
1646 [(set_attr "type" "mve_move")
1650 ;; [vorrq_s, vorrq_u])
1652 ;; signed and unsigned versions are the same: define the unsigned
1653 ;; insn, and use an expander for the signed one as we still reference
1654 ;; both names from arm_mve.h.
1655 ;; We use the same code as in neon.md (TODO: avoid this duplication).
1656 (define_insn "mve_vorrq_s<mode>"
1658 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
1659 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
1660 (match_operand:MVE_2 2 "neon_logic_op2" "w,Dl")))
1665 * return neon_output_logic_immediate (\"vorr\", &operands[2], <MODE>mode, 0, VALID_NEON_QREG_MODE (<MODE>mode));"
1666 [(set_attr "type" "mve_move")
1668 (define_expand "mve_vorrq_u<mode>"
1670 (set (match_operand:MVE_2 0 "s_register_operand")
1671 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1672 (match_operand:MVE_2 2 "neon_logic_op2")))
1678 ;; [vqaddq_n_s, vqaddq_n_u])
1680 (define_insn "mve_vqaddq_n_<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:<V_elem> 2 "s_register_operand" "r")]
1688 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1689 [(set_attr "type" "mve_move")
1693 ;; [vqaddq_u, vqaddq_s])
1695 (define_insn "mve_vqaddq_<supf><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:MVE_2 2 "s_register_operand" "w")]
1703 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1704 [(set_attr "type" "mve_move")
1710 (define_insn "mve_vqdmulhq_n_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:<V_elem> 2 "s_register_operand" "r")]
1718 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1719 [(set_attr "type" "mve_move")
1725 (define_insn "mve_vqdmulhq_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:MVE_2 2 "s_register_operand" "w")]
1733 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1734 [(set_attr "type" "mve_move")
1740 (define_insn "mve_vqrdmulhq_n_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:<V_elem> 2 "s_register_operand" "r")]
1748 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1749 [(set_attr "type" "mve_move")
1755 (define_insn "mve_vqrdmulhq_s<mode>"
1757 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1758 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1759 (match_operand:MVE_2 2 "s_register_operand" "w")]
1763 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1764 [(set_attr "type" "mve_move")
1768 ;; [vqrshlq_n_s, vqrshlq_n_u])
1770 (define_insn "mve_vqrshlq_n_<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" "0")
1774 (match_operand:SI 2 "s_register_operand" "r")]
1778 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1779 [(set_attr "type" "mve_move")
1783 ;; [vqrshlq_s, vqrshlq_u])
1785 (define_insn "mve_vqrshlq_<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:MVE_2 2 "s_register_operand" "w")]
1793 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1794 [(set_attr "type" "mve_move")
1798 ;; [vqshlq_n_s, vqshlq_n_u])
1800 (define_insn "mve_vqshlq_n_<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" "w")
1804 (match_operand:SI 2 "immediate_operand" "i")]
1808 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1809 [(set_attr "type" "mve_move")
1813 ;; [vqshlq_r_u, vqshlq_r_s])
1815 (define_insn "mve_vqshlq_r_<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" "0")
1819 (match_operand:SI 2 "s_register_operand" "r")]
1823 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
1824 [(set_attr "type" "mve_move")
1828 ;; [vqshlq_s, vqshlq_u])
1830 (define_insn "mve_vqshlq_<supf><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:MVE_2 2 "s_register_operand" "w")]
1838 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1839 [(set_attr "type" "mve_move")
1845 (define_insn "mve_vqshluq_n_s<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:SI 2 "mve_imm_7" "Ra")]
1853 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
1854 [(set_attr "type" "mve_move")
1858 ;; [vqsubq_n_s, vqsubq_n_u])
1860 (define_insn "mve_vqsubq_n_<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:<V_elem> 2 "s_register_operand" "r")]
1868 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1869 [(set_attr "type" "mve_move")
1873 ;; [vqsubq_u, vqsubq_s])
1875 (define_insn "mve_vqsubq_<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 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1884 [(set_attr "type" "mve_move")
1888 ;; [vrhaddq_s, vrhaddq_u])
1890 (define_insn "mve_vrhaddq_<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 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1899 [(set_attr "type" "mve_move")
1903 ;; [vrmulhq_s, vrmulhq_u])
1905 (define_insn "mve_vrmulhq_<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" "w")
1909 (match_operand:MVE_2 2 "s_register_operand" "w")]
1913 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1914 [(set_attr "type" "mve_move")
1918 ;; [vrshlq_n_u, vrshlq_n_s])
1920 (define_insn "mve_vrshlq_n_<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" "0")
1924 (match_operand:SI 2 "s_register_operand" "r")]
1928 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1929 [(set_attr "type" "mve_move")
1933 ;; [vrshlq_s, vrshlq_u])
1935 (define_insn "mve_vrshlq_<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:MVE_2 2 "s_register_operand" "w")]
1943 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1944 [(set_attr "type" "mve_move")
1948 ;; [vrshrq_n_s, vrshrq_n_u])
1950 (define_insn "mve_vrshrq_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 "<MVE_pred2>" "<MVE_constraint2>")]
1958 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1959 [(set_attr "type" "mve_move")
1963 ;; [vshlq_n_u, vshlq_n_s])
1965 (define_insn "mve_vshlq_n_<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" "w")
1969 (match_operand:SI 2 "immediate_operand" "i")]
1973 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1974 [(set_attr "type" "mve_move")
1978 ;; [vshlq_r_s, vshlq_r_u])
1980 (define_insn "mve_vshlq_r_<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" "0")
1984 (match_operand:SI 2 "s_register_operand" "r")]
1988 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
1989 [(set_attr "type" "mve_move")
1993 ;; [vsubq_n_s, vsubq_n_u])
1995 (define_insn "mve_vsubq_n_<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:<V_elem> 2 "s_register_operand" "r")]
2003 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
2004 [(set_attr "type" "mve_move")
2008 ;; [vsubq_s, vsubq_u])
2010 (define_insn "mve_vsubq_<supf><mode>"
2012 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2013 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2014 (match_operand:MVE_2 2 "s_register_operand" "w")]
2018 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
2019 [(set_attr "type" "mve_move")
2022 (define_insn "mve_vsubq<mode>"
2024 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2025 (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
2026 (match_operand:MVE_2 2 "s_register_operand" "w")))
2029 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
2030 [(set_attr "type" "mve_move")
2036 (define_insn "mve_vabdq_f<mode>"
2038 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2039 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2040 (match_operand:MVE_0 2 "s_register_operand" "w")]
2043 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2044 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
2045 [(set_attr "type" "mve_move")
2049 ;; [vaddlvaq_s vaddlvaq_u])
2051 (define_insn "mve_vaddlvaq_<supf>v4si"
2053 (set (match_operand:DI 0 "s_register_operand" "=r")
2054 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2055 (match_operand:V4SI 2 "s_register_operand" "w")]
2059 "vaddlva.<supf>32 %Q0, %R0, %q2"
2060 [(set_attr "type" "mve_move")
2066 (define_insn "mve_vaddq_n_f<mode>"
2068 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2069 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2070 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2073 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2074 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
2075 [(set_attr "type" "mve_move")
2081 (define_insn "mve_vandq_f<mode>"
2083 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2084 (and:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2085 (match_operand:MVE_0 2 "s_register_operand" "w")))
2087 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2088 "vand %q0, %q1, %q2"
2089 [(set_attr "type" "mve_move")
2095 (define_insn "mve_vbicq_f<mode>"
2097 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2098 (and:MVE_0 (not:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))
2099 (match_operand:MVE_0 2 "s_register_operand" "w")))
2101 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2102 "vbic %q0, %q1, %q2"
2103 [(set_attr "type" "mve_move")
2107 ;; [vbicq_n_s, vbicq_n_u])
2109 (define_insn "mve_vbicq_n_<supf><mode>"
2111 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2112 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2113 (match_operand:SI 2 "immediate_operand" "i")]
2117 "vbic.i%#<V_sz_elem> %q0, %2"
2118 [(set_attr "type" "mve_move")
2122 ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
2124 (define_insn "mve_vcaddq<mve_rot><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, #<rot>"
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")
2317 ;; [vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270])
2319 (define_insn "mve_vcmulq<mve_rot><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, #<rot>"
2328 [(set_attr "type" "mve_move")
2332 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
2334 (define_insn "mve_vctp<mode1>q_mhi"
2336 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2337 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
2338 (match_operand:HI 2 "vpr_register_operand" "Up")]
2342 "vpst\;vctpt.<mode1> %1"
2343 [(set_attr "type" "mve_move")
2344 (set_attr "length""8")])
2347 ;; [vcvtbq_f16_f32])
2349 (define_insn "mve_vcvtbq_f16_f32v8hf"
2351 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2352 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2353 (match_operand:V4SF 2 "s_register_operand" "w")]
2356 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2357 "vcvtb.f16.f32 %q0, %q2"
2358 [(set_attr "type" "mve_move")
2362 ;; [vcvttq_f16_f32])
2364 (define_insn "mve_vcvttq_f16_f32v8hf"
2366 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2367 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2368 (match_operand:V4SF 2 "s_register_operand" "w")]
2371 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2372 "vcvtt.f16.f32 %q0, %q2"
2373 [(set_attr "type" "mve_move")
2379 (define_insn "mve_veorq_f<mode>"
2381 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2382 (xor:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2383 (match_operand:MVE_0 2 "s_register_operand" "w")))
2385 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2386 "veor %q0, %q1, %q2"
2387 [(set_attr "type" "mve_move")
2393 (define_insn "mve_vmaxnmaq_f<mode>"
2395 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2396 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2397 (match_operand:MVE_0 2 "s_register_operand" "w")]
2400 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2401 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
2402 [(set_attr "type" "mve_move")
2408 (define_insn "mve_vmaxnmavq_f<mode>"
2410 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2411 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2412 (match_operand:MVE_0 2 "s_register_operand" "w")]
2415 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2416 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
2417 [(set_attr "type" "mve_move")
2423 (define_insn "mve_vmaxnmq_f<mode>"
2425 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2426 (smax:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2427 (match_operand:MVE_0 2 "s_register_operand" "w")))
2429 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2430 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
2431 [(set_attr "type" "mve_move")
2437 (define_insn "mve_vmaxnmvq_f<mode>"
2439 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2440 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2441 (match_operand:MVE_0 2 "s_register_operand" "w")]
2444 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2445 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
2446 [(set_attr "type" "mve_move")
2452 (define_insn "mve_vminnmaq_f<mode>"
2454 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2455 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2456 (match_operand:MVE_0 2 "s_register_operand" "w")]
2459 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2460 "vminnma.f%#<V_sz_elem> %q0, %q2"
2461 [(set_attr "type" "mve_move")
2467 (define_insn "mve_vminnmavq_f<mode>"
2469 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2470 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2471 (match_operand:MVE_0 2 "s_register_operand" "w")]
2474 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2475 "vminnmav.f%#<V_sz_elem> %0, %q2"
2476 [(set_attr "type" "mve_move")
2482 (define_insn "mve_vminnmq_f<mode>"
2484 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2485 (smin:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2486 (match_operand:MVE_0 2 "s_register_operand" "w")))
2488 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2489 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
2490 [(set_attr "type" "mve_move")
2496 (define_insn "mve_vminnmvq_f<mode>"
2498 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2499 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2500 (match_operand:MVE_0 2 "s_register_operand" "w")]
2503 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2504 "vminnmv.f%#<V_sz_elem> %0, %q2"
2505 [(set_attr "type" "mve_move")
2509 ;; [vmlaldavq_u, vmlaldavq_s])
2511 (define_insn "mve_vmlaldavq_<supf><mode>"
2513 (set (match_operand:DI 0 "s_register_operand" "=r")
2514 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2515 (match_operand:MVE_5 2 "s_register_operand" "w")]
2519 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2520 [(set_attr "type" "mve_move")
2526 (define_insn "mve_vmlaldavxq_s<mode>"
2528 (set (match_operand:DI 0 "s_register_operand" "=r")
2529 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2530 (match_operand:MVE_5 2 "s_register_operand" "w")]
2534 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2535 [(set_attr "type" "mve_move")
2541 (define_insn "mve_vmlsldavq_s<mode>"
2543 (set (match_operand:DI 0 "s_register_operand" "=r")
2544 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2545 (match_operand:MVE_5 2 "s_register_operand" "w")]
2549 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2550 [(set_attr "type" "mve_move")
2556 (define_insn "mve_vmlsldavxq_s<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 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2565 [(set_attr "type" "mve_move")
2569 ;; [vmovnbq_u, vmovnbq_s])
2571 (define_insn "mve_vmovnbq_<supf><mode>"
2573 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2574 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2575 (match_operand:MVE_5 2 "s_register_operand" "w")]
2579 "vmovnb.i%#<V_sz_elem> %q0, %q2"
2580 [(set_attr "type" "mve_move")
2584 ;; [vmovntq_s, vmovntq_u])
2586 (define_insn "mve_vmovntq_<supf><mode>"
2588 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2589 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2590 (match_operand:MVE_5 2 "s_register_operand" "w")]
2594 "vmovnt.i%#<V_sz_elem> %q0, %q2"
2595 [(set_attr "type" "mve_move")
2601 (define_insn "mve_vmulq_f<mode>"
2603 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2604 (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2605 (match_operand:MVE_0 2 "s_register_operand" "w")))
2607 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2608 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
2609 [(set_attr "type" "mve_move")
2615 (define_insn "mve_vmulq_n_f<mode>"
2617 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2618 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2619 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2622 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2623 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
2624 [(set_attr "type" "mve_move")
2630 (define_insn "mve_vornq_f<mode>"
2632 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2633 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2634 (match_operand:MVE_0 2 "s_register_operand" "w")]
2637 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2638 "vorn %q0, %q1, %q2"
2639 [(set_attr "type" "mve_move")
2645 (define_insn "mve_vorrq_f<mode>"
2647 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2648 (ior:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2649 (match_operand:MVE_0 2 "s_register_operand" "w")))
2651 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2652 "vorr %q0, %q1, %q2"
2653 [(set_attr "type" "mve_move")
2657 ;; [vorrq_n_u, vorrq_n_s])
2659 (define_insn "mve_vorrq_n_<supf><mode>"
2661 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2662 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2663 (match_operand:SI 2 "immediate_operand" "i")]
2667 "vorr.i%#<V_sz_elem> %q0, %2"
2668 [(set_attr "type" "mve_move")
2674 (define_insn "mve_vqdmullbq_n_s<mode>"
2676 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2677 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2678 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2682 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
2683 [(set_attr "type" "mve_move")
2689 (define_insn "mve_vqdmullbq_s<mode>"
2691 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2692 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2693 (match_operand:MVE_5 2 "s_register_operand" "w")]
2697 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
2698 [(set_attr "type" "mve_move")
2704 (define_insn "mve_vqdmulltq_n_s<mode>"
2706 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2707 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2708 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2712 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
2713 [(set_attr "type" "mve_move")
2719 (define_insn "mve_vqdmulltq_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:MVE_5 2 "s_register_operand" "w")]
2727 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
2728 [(set_attr "type" "mve_move")
2732 ;; [vqmovnbq_u, vqmovnbq_s])
2734 (define_insn "mve_vqmovnbq_<supf><mode>"
2736 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2737 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2738 (match_operand:MVE_5 2 "s_register_operand" "w")]
2742 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
2743 [(set_attr "type" "mve_move")
2747 ;; [vqmovntq_u, vqmovntq_s])
2749 (define_insn "mve_vqmovntq_<supf><mode>"
2751 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2752 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2753 (match_operand:MVE_5 2 "s_register_operand" "w")]
2757 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
2758 [(set_attr "type" "mve_move")
2764 (define_insn "mve_vqmovunbq_s<mode>"
2766 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2767 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2768 (match_operand:MVE_5 2 "s_register_operand" "w")]
2772 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
2773 [(set_attr "type" "mve_move")
2779 (define_insn "mve_vqmovuntq_s<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 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
2788 [(set_attr "type" "mve_move")
2792 ;; [vrmlaldavhxq_s])
2794 (define_insn "mve_vrmlaldavhxq_sv4si"
2796 (set (match_operand:DI 0 "s_register_operand" "=r")
2797 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2798 (match_operand:V4SI 2 "s_register_operand" "w")]
2802 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
2803 [(set_attr "type" "mve_move")
2809 (define_insn "mve_vrmlsldavhq_sv4si"
2811 (set (match_operand:DI 0 "s_register_operand" "=r")
2812 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2813 (match_operand:V4SI 2 "s_register_operand" "w")]
2817 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
2818 [(set_attr "type" "mve_move")
2822 ;; [vrmlsldavhxq_s])
2824 (define_insn "mve_vrmlsldavhxq_sv4si"
2826 (set (match_operand:DI 0 "s_register_operand" "=r")
2827 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2828 (match_operand:V4SI 2 "s_register_operand" "w")]
2832 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
2833 [(set_attr "type" "mve_move")
2837 ;; [vshllbq_n_s, vshllbq_n_u])
2839 (define_insn "mve_vshllbq_n_<supf><mode>"
2841 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2842 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2843 (match_operand:SI 2 "immediate_operand" "i")]
2847 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2848 [(set_attr "type" "mve_move")
2852 ;; [vshlltq_n_u, vshlltq_n_s])
2854 (define_insn "mve_vshlltq_n_<supf><mode>"
2856 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2857 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2858 (match_operand:SI 2 "immediate_operand" "i")]
2862 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2863 [(set_attr "type" "mve_move")
2869 (define_insn "mve_vsubq_f<mode>"
2871 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2872 (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2873 (match_operand:MVE_0 2 "s_register_operand" "w")))
2875 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2876 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
2877 [(set_attr "type" "mve_move")
2881 ;; [vmulltq_poly_p])
2883 (define_insn "mve_vmulltq_poly_p<mode>"
2885 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2886 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2887 (match_operand:MVE_3 2 "s_register_operand" "w")]
2891 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
2892 [(set_attr "type" "mve_move")
2896 ;; [vmullbq_poly_p])
2898 (define_insn "mve_vmullbq_poly_p<mode>"
2900 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2901 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2902 (match_operand:MVE_3 2 "s_register_operand" "w")]
2906 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
2907 [(set_attr "type" "mve_move")
2911 ;; [vrmlaldavhq_u vrmlaldavhq_s])
2913 (define_insn "mve_vrmlaldavhq_<supf>v4si"
2915 (set (match_operand:DI 0 "s_register_operand" "=r")
2916 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2917 (match_operand:V4SI 2 "s_register_operand" "w")]
2921 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
2922 [(set_attr "type" "mve_move")
2926 ;; [vbicq_m_n_s, vbicq_m_n_u])
2928 (define_insn "mve_vbicq_m_n_<supf><mode>"
2930 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2931 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2932 (match_operand:SI 2 "immediate_operand" "i")
2933 (match_operand:HI 3 "vpr_register_operand" "Up")]
2937 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
2938 [(set_attr "type" "mve_move")
2939 (set_attr "length""8")])
2943 (define_insn "mve_vcmpeqq_m_f<mode>"
2945 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2946 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2947 (match_operand:MVE_0 2 "s_register_operand" "w")
2948 (match_operand:HI 3 "vpr_register_operand" "Up")]
2951 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2952 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
2953 [(set_attr "type" "mve_move")
2954 (set_attr "length""8")])
2956 ;; [vcvtaq_m_u, vcvtaq_m_s])
2958 (define_insn "mve_vcvtaq_m_<supf><mode>"
2960 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2961 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2962 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2963 (match_operand:HI 3 "vpr_register_operand" "Up")]
2966 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2967 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
2968 [(set_attr "type" "mve_move")
2969 (set_attr "length""8")])
2971 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
2973 (define_insn "mve_vcvtq_m_to_f_<supf><mode>"
2975 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2976 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2977 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2978 (match_operand:HI 3 "vpr_register_operand" "Up")]
2981 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2982 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
2983 [(set_attr "type" "mve_move")
2984 (set_attr "length""8")])
2986 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
2988 (define_insn "mve_vqrshrnbq_n_<supf><mode>"
2990 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2991 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2992 (match_operand:MVE_5 2 "s_register_operand" "w")
2993 (match_operand:SI 3 "mve_imm_8" "Rb")]
2997 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
2998 [(set_attr "type" "mve_move")
3001 ;; [vqrshrunbq_n_s])
3003 (define_insn "mve_vqrshrunbq_n_s<mode>"
3005 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3006 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3007 (match_operand:MVE_5 2 "s_register_operand" "w")
3008 (match_operand:SI 3 "mve_imm_8" "Rb")]
3012 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
3013 [(set_attr "type" "mve_move")
3016 ;; [vrmlaldavhaq_s vrmlaldavhaq_u])
3018 (define_insn "mve_vrmlaldavhaq_<supf>v4si"
3020 (set (match_operand:DI 0 "s_register_operand" "=r")
3021 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
3022 (match_operand:V4SI 2 "s_register_operand" "w")
3023 (match_operand:V4SI 3 "s_register_operand" "w")]
3027 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
3028 [(set_attr "type" "mve_move")
3032 ;; [vabavq_s, vabavq_u])
3034 (define_insn "mve_vabavq_<supf><mode>"
3036 (set (match_operand:SI 0 "s_register_operand" "=r")
3037 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3038 (match_operand:MVE_2 2 "s_register_operand" "w")
3039 (match_operand:MVE_2 3 "s_register_operand" "w")]
3043 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
3044 [(set_attr "type" "mve_move")
3048 ;; [vshlcq_u vshlcq_s]
3050 (define_expand "mve_vshlcq_vec_<supf><mode>"
3051 [(match_operand:MVE_2 0 "s_register_operand")
3052 (match_operand:MVE_2 1 "s_register_operand")
3053 (match_operand:SI 2 "s_register_operand")
3054 (match_operand:SI 3 "mve_imm_32")
3055 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3058 rtx ignore_wb = gen_reg_rtx (SImode);
3059 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
3060 operands[2], operands[3]));
3064 (define_expand "mve_vshlcq_carry_<supf><mode>"
3065 [(match_operand:SI 0 "s_register_operand")
3066 (match_operand:MVE_2 1 "s_register_operand")
3067 (match_operand:SI 2 "s_register_operand")
3068 (match_operand:SI 3 "mve_imm_32")
3069 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3072 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
3073 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
3074 operands[2], operands[3]));
3078 (define_insn "mve_vshlcq_<supf><mode>"
3079 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
3080 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
3081 (match_operand:SI 3 "s_register_operand" "1")
3082 (match_operand:SI 4 "mve_imm_32" "Rf")]
3084 (set (match_operand:SI 1 "s_register_operand" "=r")
3085 (unspec:SI [(match_dup 2)
3090 "vshlc %q0, %1, %4")
3095 (define_insn "mve_vabsq_m_s<mode>"
3097 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3098 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3099 (match_operand:MVE_2 2 "s_register_operand" "w")
3100 (match_operand:HI 3 "vpr_register_operand" "Up")]
3104 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
3105 [(set_attr "type" "mve_move")
3106 (set_attr "length""8")])
3109 ;; [vaddvaq_p_u, vaddvaq_p_s])
3111 (define_insn "mve_vaddvaq_p_<supf><mode>"
3113 (set (match_operand:SI 0 "s_register_operand" "=Te")
3114 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3115 (match_operand:MVE_2 2 "s_register_operand" "w")
3116 (match_operand:HI 3 "vpr_register_operand" "Up")]
3120 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
3121 [(set_attr "type" "mve_move")
3122 (set_attr "length""8")])
3127 (define_insn "mve_vclsq_m_s<mode>"
3129 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3130 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3131 (match_operand:MVE_2 2 "s_register_operand" "w")
3132 (match_operand:HI 3 "vpr_register_operand" "Up")]
3136 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
3137 [(set_attr "type" "mve_move")
3138 (set_attr "length""8")])
3141 ;; [vclzq_m_s, vclzq_m_u])
3143 (define_insn "mve_vclzq_m_<supf><mode>"
3145 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3146 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3147 (match_operand:MVE_2 2 "s_register_operand" "w")
3148 (match_operand:HI 3 "vpr_register_operand" "Up")]
3152 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
3153 [(set_attr "type" "mve_move")
3154 (set_attr "length""8")])
3159 (define_insn "mve_vcmpcsq_m_n_u<mode>"
3161 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3162 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3163 (match_operand:<V_elem> 2 "s_register_operand" "r")
3164 (match_operand:HI 3 "vpr_register_operand" "Up")]
3168 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
3169 [(set_attr "type" "mve_move")
3170 (set_attr "length""8")])
3175 (define_insn "mve_vcmpcsq_m_u<mode>"
3177 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3178 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3179 (match_operand:MVE_2 2 "s_register_operand" "w")
3180 (match_operand:HI 3 "vpr_register_operand" "Up")]
3184 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
3185 [(set_attr "type" "mve_move")
3186 (set_attr "length""8")])
3189 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
3191 (define_insn "mve_vcmpeqq_m_n_<supf><mode>"
3193 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3194 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3195 (match_operand:<V_elem> 2 "s_register_operand" "r")
3196 (match_operand:HI 3 "vpr_register_operand" "Up")]
3200 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
3201 [(set_attr "type" "mve_move")
3202 (set_attr "length""8")])
3205 ;; [vcmpeqq_m_u, vcmpeqq_m_s])
3207 (define_insn "mve_vcmpeqq_m_<supf><mode>"
3209 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3210 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3211 (match_operand:MVE_2 2 "s_register_operand" "w")
3212 (match_operand:HI 3 "vpr_register_operand" "Up")]
3216 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
3217 [(set_attr "type" "mve_move")
3218 (set_attr "length""8")])
3223 (define_insn "mve_vcmpgeq_m_n_s<mode>"
3225 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3226 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3227 (match_operand:<V_elem> 2 "s_register_operand" "r")
3228 (match_operand:HI 3 "vpr_register_operand" "Up")]
3232 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
3233 [(set_attr "type" "mve_move")
3234 (set_attr "length""8")])
3239 (define_insn "mve_vcmpgeq_m_s<mode>"
3241 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3242 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3243 (match_operand:MVE_2 2 "s_register_operand" "w")
3244 (match_operand:HI 3 "vpr_register_operand" "Up")]
3248 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
3249 [(set_attr "type" "mve_move")
3250 (set_attr "length""8")])
3255 (define_insn "mve_vcmpgtq_m_n_s<mode>"
3257 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3258 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3259 (match_operand:<V_elem> 2 "s_register_operand" "r")
3260 (match_operand:HI 3 "vpr_register_operand" "Up")]
3264 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
3265 [(set_attr "type" "mve_move")
3266 (set_attr "length""8")])
3271 (define_insn "mve_vcmpgtq_m_s<mode>"
3273 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3274 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3275 (match_operand:MVE_2 2 "s_register_operand" "w")
3276 (match_operand:HI 3 "vpr_register_operand" "Up")]
3280 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
3281 [(set_attr "type" "mve_move")
3282 (set_attr "length""8")])
3287 (define_insn "mve_vcmphiq_m_n_u<mode>"
3289 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3290 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3291 (match_operand:<V_elem> 2 "s_register_operand" "r")
3292 (match_operand:HI 3 "vpr_register_operand" "Up")]
3296 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
3297 [(set_attr "type" "mve_move")
3298 (set_attr "length""8")])
3303 (define_insn "mve_vcmphiq_m_u<mode>"
3305 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3306 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3307 (match_operand:MVE_2 2 "s_register_operand" "w")
3308 (match_operand:HI 3 "vpr_register_operand" "Up")]
3312 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
3313 [(set_attr "type" "mve_move")
3314 (set_attr "length""8")])
3319 (define_insn "mve_vcmpleq_m_n_s<mode>"
3321 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3322 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3323 (match_operand:<V_elem> 2 "s_register_operand" "r")
3324 (match_operand:HI 3 "vpr_register_operand" "Up")]
3328 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
3329 [(set_attr "type" "mve_move")
3330 (set_attr "length""8")])
3335 (define_insn "mve_vcmpleq_m_s<mode>"
3337 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3338 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3339 (match_operand:MVE_2 2 "s_register_operand" "w")
3340 (match_operand:HI 3 "vpr_register_operand" "Up")]
3344 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
3345 [(set_attr "type" "mve_move")
3346 (set_attr "length""8")])
3351 (define_insn "mve_vcmpltq_m_n_s<mode>"
3353 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3354 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3355 (match_operand:<V_elem> 2 "s_register_operand" "r")
3356 (match_operand:HI 3 "vpr_register_operand" "Up")]
3360 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
3361 [(set_attr "type" "mve_move")
3362 (set_attr "length""8")])
3367 (define_insn "mve_vcmpltq_m_s<mode>"
3369 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3370 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3371 (match_operand:MVE_2 2 "s_register_operand" "w")
3372 (match_operand:HI 3 "vpr_register_operand" "Up")]
3376 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
3377 [(set_attr "type" "mve_move")
3378 (set_attr "length""8")])
3381 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3383 (define_insn "mve_vcmpneq_m_n_<supf><mode>"
3385 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3386 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3387 (match_operand:<V_elem> 2 "s_register_operand" "r")
3388 (match_operand:HI 3 "vpr_register_operand" "Up")]
3392 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
3393 [(set_attr "type" "mve_move")
3394 (set_attr "length""8")])
3397 ;; [vcmpneq_m_s, vcmpneq_m_u])
3399 (define_insn "mve_vcmpneq_m_<supf><mode>"
3401 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3402 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3403 (match_operand:MVE_2 2 "s_register_operand" "w")
3404 (match_operand:HI 3 "vpr_register_operand" "Up")]
3408 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
3409 [(set_attr "type" "mve_move")
3410 (set_attr "length""8")])
3413 ;; [vdupq_m_n_s, vdupq_m_n_u])
3415 (define_insn "mve_vdupq_m_n_<supf><mode>"
3417 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3418 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3419 (match_operand:<V_elem> 2 "s_register_operand" "r")
3420 (match_operand:HI 3 "vpr_register_operand" "Up")]
3424 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3425 [(set_attr "type" "mve_move")
3426 (set_attr "length""8")])
3431 (define_insn "mve_vmaxaq_m_s<mode>"
3433 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3434 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3435 (match_operand:MVE_2 2 "s_register_operand" "w")
3436 (match_operand:HI 3 "vpr_register_operand" "Up")]
3440 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
3441 [(set_attr "type" "mve_move")
3442 (set_attr "length""8")])
3447 (define_insn "mve_vmaxavq_p_s<mode>"
3449 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3450 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3451 (match_operand:MVE_2 2 "s_register_operand" "w")
3452 (match_operand:HI 3 "vpr_register_operand" "Up")]
3456 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
3457 [(set_attr "type" "mve_move")
3458 (set_attr "length""8")])
3461 ;; [vmaxvq_p_u, vmaxvq_p_s])
3463 (define_insn "mve_vmaxvq_p_<supf><mode>"
3465 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3466 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3467 (match_operand:MVE_2 2 "s_register_operand" "w")
3468 (match_operand:HI 3 "vpr_register_operand" "Up")]
3472 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
3473 [(set_attr "type" "mve_move")
3474 (set_attr "length""8")])
3479 (define_insn "mve_vminaq_m_s<mode>"
3481 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3482 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3483 (match_operand:MVE_2 2 "s_register_operand" "w")
3484 (match_operand:HI 3 "vpr_register_operand" "Up")]
3488 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
3489 [(set_attr "type" "mve_move")
3490 (set_attr "length""8")])
3495 (define_insn "mve_vminavq_p_s<mode>"
3497 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3498 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3499 (match_operand:MVE_2 2 "s_register_operand" "w")
3500 (match_operand:HI 3 "vpr_register_operand" "Up")]
3504 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
3505 [(set_attr "type" "mve_move")
3506 (set_attr "length""8")])
3509 ;; [vminvq_p_s, vminvq_p_u])
3511 (define_insn "mve_vminvq_p_<supf><mode>"
3513 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3514 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3515 (match_operand:MVE_2 2 "s_register_operand" "w")
3516 (match_operand:HI 3 "vpr_register_operand" "Up")]
3520 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
3521 [(set_attr "type" "mve_move")
3522 (set_attr "length""8")])
3525 ;; [vmladavaq_u, vmladavaq_s])
3527 (define_insn "mve_vmladavaq_<supf><mode>"
3529 (set (match_operand:SI 0 "s_register_operand" "=Te")
3530 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3531 (match_operand:MVE_2 2 "s_register_operand" "w")
3532 (match_operand:MVE_2 3 "s_register_operand" "w")]
3536 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
3537 [(set_attr "type" "mve_move")
3541 ;; [vmladavq_p_u, vmladavq_p_s])
3543 (define_insn "mve_vmladavq_p_<supf><mode>"
3545 (set (match_operand:SI 0 "s_register_operand" "=Te")
3546 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3547 (match_operand:MVE_2 2 "s_register_operand" "w")
3548 (match_operand:HI 3 "vpr_register_operand" "Up")]
3552 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
3553 [(set_attr "type" "mve_move")
3554 (set_attr "length""8")])
3559 (define_insn "mve_vmladavxq_p_s<mode>"
3561 (set (match_operand:SI 0 "s_register_operand" "=Te")
3562 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3563 (match_operand:MVE_2 2 "s_register_operand" "w")
3564 (match_operand:HI 3 "vpr_register_operand" "Up")]
3568 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
3569 [(set_attr "type" "mve_move")
3570 (set_attr "length""8")])
3573 ;; [vmlaq_n_u, vmlaq_n_s])
3575 (define_insn "mve_vmlaq_n_<supf><mode>"
3577 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3578 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3579 (match_operand:MVE_2 2 "s_register_operand" "w")
3580 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3584 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
3585 [(set_attr "type" "mve_move")
3589 ;; [vmlasq_n_u, vmlasq_n_s])
3591 (define_insn "mve_vmlasq_n_<supf><mode>"
3593 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3594 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3595 (match_operand:MVE_2 2 "s_register_operand" "w")
3596 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3600 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
3601 [(set_attr "type" "mve_move")
3607 (define_insn "mve_vmlsdavq_p_s<mode>"
3609 (set (match_operand:SI 0 "s_register_operand" "=Te")
3610 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3611 (match_operand:MVE_2 2 "s_register_operand" "w")
3612 (match_operand:HI 3 "vpr_register_operand" "Up")]
3616 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
3617 [(set_attr "type" "mve_move")
3618 (set_attr "length""8")])
3623 (define_insn "mve_vmlsdavxq_p_s<mode>"
3625 (set (match_operand:SI 0 "s_register_operand" "=Te")
3626 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3627 (match_operand:MVE_2 2 "s_register_operand" "w")
3628 (match_operand:HI 3 "vpr_register_operand" "Up")]
3632 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
3633 [(set_attr "type" "mve_move")
3634 (set_attr "length""8")])
3637 ;; [vmvnq_m_s, vmvnq_m_u])
3639 (define_insn "mve_vmvnq_m_<supf><mode>"
3641 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3642 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3643 (match_operand:MVE_2 2 "s_register_operand" "w")
3644 (match_operand:HI 3 "vpr_register_operand" "Up")]
3648 "vpst\;vmvnt %q0, %q2"
3649 [(set_attr "type" "mve_move")
3650 (set_attr "length""8")])
3655 (define_insn "mve_vnegq_m_s<mode>"
3657 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3658 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3659 (match_operand:MVE_2 2 "s_register_operand" "w")
3660 (match_operand:HI 3 "vpr_register_operand" "Up")]
3664 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
3665 [(set_attr "type" "mve_move")
3666 (set_attr "length""8")])
3669 ;; [vpselq_u, vpselq_s])
3671 (define_insn "mve_vpselq_<supf><mode>"
3673 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
3674 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
3675 (match_operand:MVE_1 2 "s_register_operand" "w")
3676 (match_operand:HI 3 "vpr_register_operand" "Up")]
3680 "vpsel %q0, %q1, %q2"
3681 [(set_attr "type" "mve_move")
3687 (define_insn "mve_vqabsq_m_s<mode>"
3689 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3690 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3691 (match_operand:MVE_2 2 "s_register_operand" "w")
3692 (match_operand:HI 3 "vpr_register_operand" "Up")]
3696 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
3697 [(set_attr "type" "mve_move")
3698 (set_attr "length""8")])
3703 (define_insn "mve_vqdmlahq_n_<supf><mode>"
3705 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3706 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3707 (match_operand:MVE_2 2 "s_register_operand" "w")
3708 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3712 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3713 [(set_attr "type" "mve_move")
3719 (define_insn "mve_vqdmlashq_n_<supf><mode>"
3721 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3722 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3723 (match_operand:MVE_2 2 "s_register_operand" "w")
3724 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3728 "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3729 [(set_attr "type" "mve_move")
3735 (define_insn "mve_vqnegq_m_s<mode>"
3737 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3738 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3739 (match_operand:MVE_2 2 "s_register_operand" "w")
3740 (match_operand:HI 3 "vpr_register_operand" "Up")]
3744 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
3745 [(set_attr "type" "mve_move")
3746 (set_attr "length""8")])
3751 (define_insn "mve_vqrdmladhq_s<mode>"
3753 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3754 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3755 (match_operand:MVE_2 2 "s_register_operand" "w")
3756 (match_operand:MVE_2 3 "s_register_operand" "w")]
3760 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3761 [(set_attr "type" "mve_move")
3767 (define_insn "mve_vqrdmladhxq_s<mode>"
3769 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3770 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3771 (match_operand:MVE_2 2 "s_register_operand" "w")
3772 (match_operand:MVE_2 3 "s_register_operand" "w")]
3776 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3777 [(set_attr "type" "mve_move")
3783 (define_insn "mve_vqrdmlahq_n_<supf><mode>"
3785 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3786 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3787 (match_operand:MVE_2 2 "s_register_operand" "w")
3788 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3792 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3793 [(set_attr "type" "mve_move")
3797 ;; [vqrdmlashq_n_s])
3799 (define_insn "mve_vqrdmlashq_n_<supf><mode>"
3801 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3802 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3803 (match_operand:MVE_2 2 "s_register_operand" "w")
3804 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3808 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3809 [(set_attr "type" "mve_move")
3815 (define_insn "mve_vqrdmlsdhq_s<mode>"
3817 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3818 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3819 (match_operand:MVE_2 2 "s_register_operand" "w")
3820 (match_operand:MVE_2 3 "s_register_operand" "w")]
3824 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3825 [(set_attr "type" "mve_move")
3831 (define_insn "mve_vqrdmlsdhxq_s<mode>"
3833 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3834 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3835 (match_operand:MVE_2 2 "s_register_operand" "w")
3836 (match_operand:MVE_2 3 "s_register_operand" "w")]
3840 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3841 [(set_attr "type" "mve_move")
3845 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
3847 (define_insn "mve_vqrshlq_m_n_<supf><mode>"
3849 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3850 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3851 (match_operand:SI 2 "s_register_operand" "r")
3852 (match_operand:HI 3 "vpr_register_operand" "Up")]
3856 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
3857 [(set_attr "type" "mve_move")
3858 (set_attr "length""8")])
3861 ;; [vqshlq_m_r_u, vqshlq_m_r_s])
3863 (define_insn "mve_vqshlq_m_r_<supf><mode>"
3865 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3866 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3867 (match_operand:SI 2 "s_register_operand" "r")
3868 (match_operand:HI 3 "vpr_register_operand" "Up")]
3872 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3873 [(set_attr "type" "mve_move")
3874 (set_attr "length""8")])
3877 ;; [vrev64q_m_u, vrev64q_m_s])
3879 (define_insn "mve_vrev64q_m_<supf><mode>"
3881 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3882 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3883 (match_operand:MVE_2 2 "s_register_operand" "w")
3884 (match_operand:HI 3 "vpr_register_operand" "Up")]
3888 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
3889 [(set_attr "type" "mve_move")
3890 (set_attr "length""8")])
3893 ;; [vrshlq_m_n_s, vrshlq_m_n_u])
3895 (define_insn "mve_vrshlq_m_n_<supf><mode>"
3897 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3898 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3899 (match_operand:SI 2 "s_register_operand" "r")
3900 (match_operand:HI 3 "vpr_register_operand" "Up")]
3904 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3905 [(set_attr "type" "mve_move")
3906 (set_attr "length""8")])
3909 ;; [vshlq_m_r_u, vshlq_m_r_s])
3911 (define_insn "mve_vshlq_m_r_<supf><mode>"
3913 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3914 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3915 (match_operand:SI 2 "s_register_operand" "r")
3916 (match_operand:HI 3 "vpr_register_operand" "Up")]
3920 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3921 [(set_attr "type" "mve_move")
3922 (set_attr "length""8")])
3925 ;; [vsliq_n_u, vsliq_n_s])
3927 (define_insn "mve_vsliq_n_<supf><mode>"
3929 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3930 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3931 (match_operand:MVE_2 2 "s_register_operand" "w")
3932 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
3936 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
3937 [(set_attr "type" "mve_move")
3941 ;; [vsriq_n_u, vsriq_n_s])
3943 (define_insn "mve_vsriq_n_<supf><mode>"
3945 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3946 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3947 (match_operand:MVE_2 2 "s_register_operand" "w")
3948 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
3952 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
3953 [(set_attr "type" "mve_move")
3959 (define_insn "mve_vqdmlsdhxq_s<mode>"
3961 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3962 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3963 (match_operand:MVE_2 2 "s_register_operand" "w")
3964 (match_operand:MVE_2 3 "s_register_operand" "w")]
3968 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3969 [(set_attr "type" "mve_move")
3975 (define_insn "mve_vqdmlsdhq_s<mode>"
3977 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3978 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3979 (match_operand:MVE_2 2 "s_register_operand" "w")
3980 (match_operand:MVE_2 3 "s_register_operand" "w")]
3984 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3985 [(set_attr "type" "mve_move")
3991 (define_insn "mve_vqdmladhxq_s<mode>"
3993 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3994 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3995 (match_operand:MVE_2 2 "s_register_operand" "w")
3996 (match_operand:MVE_2 3 "s_register_operand" "w")]
4000 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4001 [(set_attr "type" "mve_move")
4007 (define_insn "mve_vqdmladhq_s<mode>"
4009 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4010 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4011 (match_operand:MVE_2 2 "s_register_operand" "w")
4012 (match_operand:MVE_2 3 "s_register_operand" "w")]
4016 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4017 [(set_attr "type" "mve_move")
4023 (define_insn "mve_vmlsdavaxq_s<mode>"
4025 (set (match_operand:SI 0 "s_register_operand" "=Te")
4026 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4027 (match_operand:MVE_2 2 "s_register_operand" "w")
4028 (match_operand:MVE_2 3 "s_register_operand" "w")]
4032 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4033 [(set_attr "type" "mve_move")
4039 (define_insn "mve_vmlsdavaq_s<mode>"
4041 (set (match_operand:SI 0 "s_register_operand" "=Te")
4042 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4043 (match_operand:MVE_2 2 "s_register_operand" "w")
4044 (match_operand:MVE_2 3 "s_register_operand" "w")]
4048 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
4049 [(set_attr "type" "mve_move")
4055 (define_insn "mve_vmladavaxq_s<mode>"
4057 (set (match_operand:SI 0 "s_register_operand" "=Te")
4058 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4059 (match_operand:MVE_2 2 "s_register_operand" "w")
4060 (match_operand:MVE_2 3 "s_register_operand" "w")]
4064 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4065 [(set_attr "type" "mve_move")
4070 (define_insn "mve_vabsq_m_f<mode>"
4072 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4073 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4074 (match_operand:MVE_0 2 "s_register_operand" "w")
4075 (match_operand:HI 3 "vpr_register_operand" "Up")]
4078 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4079 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
4080 [(set_attr "type" "mve_move")
4081 (set_attr "length""8")])
4084 ;; [vaddlvaq_p_s vaddlvaq_p_u])
4086 (define_insn "mve_vaddlvaq_p_<supf>v4si"
4088 (set (match_operand:DI 0 "s_register_operand" "=r")
4089 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4090 (match_operand:V4SI 2 "s_register_operand" "w")
4091 (match_operand:HI 3 "vpr_register_operand" "Up")]
4095 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
4096 [(set_attr "type" "mve_move")
4097 (set_attr "length""8")])
4099 ;; [vcmlaq, vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270])
4101 (define_insn "mve_vcmlaq<mve_rot><mode>"
4103 (set (match_operand:MVE_0 0 "s_register_operand" "=w,w")
4104 (plus:MVE_0 (match_operand:MVE_0 1 "reg_or_zero_operand" "Dz,0")
4106 [(match_operand:MVE_0 2 "s_register_operand" "w,w")
4107 (match_operand:MVE_0 3 "s_register_operand" "w,w")]
4110 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4112 vcmul.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>
4113 vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>"
4114 [(set_attr "type" "mve_move")
4120 (define_insn "mve_vcmpeqq_m_n_f<mode>"
4122 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4123 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4124 (match_operand:<V_elem> 2 "s_register_operand" "r")
4125 (match_operand:HI 3 "vpr_register_operand" "Up")]
4128 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4129 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
4130 [(set_attr "type" "mve_move")
4131 (set_attr "length""8")])
4136 (define_insn "mve_vcmpgeq_m_f<mode>"
4138 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4139 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4140 (match_operand:MVE_0 2 "s_register_operand" "w")
4141 (match_operand:HI 3 "vpr_register_operand" "Up")]
4144 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4145 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
4146 [(set_attr "type" "mve_move")
4147 (set_attr "length""8")])
4152 (define_insn "mve_vcmpgeq_m_n_f<mode>"
4154 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4155 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4156 (match_operand:<V_elem> 2 "s_register_operand" "r")
4157 (match_operand:HI 3 "vpr_register_operand" "Up")]
4160 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4161 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
4162 [(set_attr "type" "mve_move")
4163 (set_attr "length""8")])
4168 (define_insn "mve_vcmpgtq_m_f<mode>"
4170 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4171 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4172 (match_operand:MVE_0 2 "s_register_operand" "w")
4173 (match_operand:HI 3 "vpr_register_operand" "Up")]
4176 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4177 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
4178 [(set_attr "type" "mve_move")
4179 (set_attr "length""8")])
4184 (define_insn "mve_vcmpgtq_m_n_f<mode>"
4186 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4187 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4188 (match_operand:<V_elem> 2 "s_register_operand" "r")
4189 (match_operand:HI 3 "vpr_register_operand" "Up")]
4192 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4193 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
4194 [(set_attr "type" "mve_move")
4195 (set_attr "length""8")])
4200 (define_insn "mve_vcmpleq_m_f<mode>"
4202 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4203 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4204 (match_operand:MVE_0 2 "s_register_operand" "w")
4205 (match_operand:HI 3 "vpr_register_operand" "Up")]
4208 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4209 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
4210 [(set_attr "type" "mve_move")
4211 (set_attr "length""8")])
4216 (define_insn "mve_vcmpleq_m_n_f<mode>"
4218 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4219 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4220 (match_operand:<V_elem> 2 "s_register_operand" "r")
4221 (match_operand:HI 3 "vpr_register_operand" "Up")]
4224 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4225 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
4226 [(set_attr "type" "mve_move")
4227 (set_attr "length""8")])
4232 (define_insn "mve_vcmpltq_m_f<mode>"
4234 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4235 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4236 (match_operand:MVE_0 2 "s_register_operand" "w")
4237 (match_operand:HI 3 "vpr_register_operand" "Up")]
4240 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4241 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
4242 [(set_attr "type" "mve_move")
4243 (set_attr "length""8")])
4248 (define_insn "mve_vcmpltq_m_n_f<mode>"
4250 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4251 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4252 (match_operand:<V_elem> 2 "s_register_operand" "r")
4253 (match_operand:HI 3 "vpr_register_operand" "Up")]
4256 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4257 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
4258 [(set_attr "type" "mve_move")
4259 (set_attr "length""8")])
4264 (define_insn "mve_vcmpneq_m_f<mode>"
4266 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4267 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4268 (match_operand:MVE_0 2 "s_register_operand" "w")
4269 (match_operand:HI 3 "vpr_register_operand" "Up")]
4272 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4273 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
4274 [(set_attr "type" "mve_move")
4275 (set_attr "length""8")])
4280 (define_insn "mve_vcmpneq_m_n_f<mode>"
4282 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4283 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4284 (match_operand:<V_elem> 2 "s_register_operand" "r")
4285 (match_operand:HI 3 "vpr_register_operand" "Up")]
4288 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4289 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
4290 [(set_attr "type" "mve_move")
4291 (set_attr "length""8")])
4294 ;; [vcvtbq_m_f16_f32])
4296 (define_insn "mve_vcvtbq_m_f16_f32v8hf"
4298 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4299 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4300 (match_operand:V4SF 2 "s_register_operand" "w")
4301 (match_operand:HI 3 "vpr_register_operand" "Up")]
4304 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4305 "vpst\;vcvtbt.f16.f32 %q0, %q2"
4306 [(set_attr "type" "mve_move")
4307 (set_attr "length""8")])
4310 ;; [vcvtbq_m_f32_f16])
4312 (define_insn "mve_vcvtbq_m_f32_f16v4sf"
4314 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4315 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4316 (match_operand:V8HF 2 "s_register_operand" "w")
4317 (match_operand:HI 3 "vpr_register_operand" "Up")]
4320 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4321 "vpst\;vcvtbt.f32.f16 %q0, %q2"
4322 [(set_attr "type" "mve_move")
4323 (set_attr "length""8")])
4326 ;; [vcvttq_m_f16_f32])
4328 (define_insn "mve_vcvttq_m_f16_f32v8hf"
4330 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4331 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4332 (match_operand:V4SF 2 "s_register_operand" "w")
4333 (match_operand:HI 3 "vpr_register_operand" "Up")]
4336 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4337 "vpst\;vcvttt.f16.f32 %q0, %q2"
4338 [(set_attr "type" "mve_move")
4339 (set_attr "length""8")])
4342 ;; [vcvttq_m_f32_f16])
4344 (define_insn "mve_vcvttq_m_f32_f16v4sf"
4346 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4347 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4348 (match_operand:V8HF 2 "s_register_operand" "w")
4349 (match_operand:HI 3 "vpr_register_operand" "Up")]
4352 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4353 "vpst\;vcvttt.f32.f16 %q0, %q2"
4354 [(set_attr "type" "mve_move")
4355 (set_attr "length""8")])
4360 (define_insn "mve_vdupq_m_n_f<mode>"
4362 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4363 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4364 (match_operand:<V_elem> 2 "s_register_operand" "r")
4365 (match_operand:HI 3 "vpr_register_operand" "Up")]
4368 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4369 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
4370 [(set_attr "type" "mve_move")
4371 (set_attr "length""8")])
4376 (define_insn "mve_vfmaq_f<mode>"
4378 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4379 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4380 (match_operand:MVE_0 2 "s_register_operand" "w")
4381 (match_operand:MVE_0 3 "s_register_operand" "w")]
4384 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4385 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
4386 [(set_attr "type" "mve_move")
4392 (define_insn "mve_vfmaq_n_f<mode>"
4394 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4395 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4396 (match_operand:MVE_0 2 "s_register_operand" "w")
4397 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4400 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4401 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
4402 [(set_attr "type" "mve_move")
4408 (define_insn "mve_vfmasq_n_f<mode>"
4410 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4411 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4412 (match_operand:MVE_0 2 "s_register_operand" "w")
4413 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4416 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4417 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
4418 [(set_attr "type" "mve_move")
4423 (define_insn "mve_vfmsq_f<mode>"
4425 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4426 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4427 (match_operand:MVE_0 2 "s_register_operand" "w")
4428 (match_operand:MVE_0 3 "s_register_operand" "w")]
4431 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4432 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
4433 [(set_attr "type" "mve_move")
4439 (define_insn "mve_vmaxnmaq_m_f<mode>"
4441 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4442 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4443 (match_operand:MVE_0 2 "s_register_operand" "w")
4444 (match_operand:HI 3 "vpr_register_operand" "Up")]
4447 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4448 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
4449 [(set_attr "type" "mve_move")
4450 (set_attr "length""8")])
4454 (define_insn "mve_vmaxnmavq_p_f<mode>"
4456 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4457 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4458 (match_operand:MVE_0 2 "s_register_operand" "w")
4459 (match_operand:HI 3 "vpr_register_operand" "Up")]
4462 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4463 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
4464 [(set_attr "type" "mve_move")
4465 (set_attr "length""8")])
4470 (define_insn "mve_vmaxnmvq_p_f<mode>"
4472 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4473 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4474 (match_operand:MVE_0 2 "s_register_operand" "w")
4475 (match_operand:HI 3 "vpr_register_operand" "Up")]
4478 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4479 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
4480 [(set_attr "type" "mve_move")
4481 (set_attr "length""8")])
4485 (define_insn "mve_vminnmaq_m_f<mode>"
4487 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4488 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4489 (match_operand:MVE_0 2 "s_register_operand" "w")
4490 (match_operand:HI 3 "vpr_register_operand" "Up")]
4493 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4494 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
4495 [(set_attr "type" "mve_move")
4496 (set_attr "length""8")])
4501 (define_insn "mve_vminnmavq_p_f<mode>"
4503 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4504 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4505 (match_operand:MVE_0 2 "s_register_operand" "w")
4506 (match_operand:HI 3 "vpr_register_operand" "Up")]
4509 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4510 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
4511 [(set_attr "type" "mve_move")
4512 (set_attr "length""8")])
4516 (define_insn "mve_vminnmvq_p_f<mode>"
4518 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4519 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4520 (match_operand:MVE_0 2 "s_register_operand" "w")
4521 (match_operand:HI 3 "vpr_register_operand" "Up")]
4524 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4525 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
4526 [(set_attr "type" "mve_move")
4527 (set_attr "length""8")])
4530 ;; [vmlaldavaq_s, vmlaldavaq_u])
4532 (define_insn "mve_vmlaldavaq_<supf><mode>"
4534 (set (match_operand:DI 0 "s_register_operand" "=r")
4535 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4536 (match_operand:MVE_5 2 "s_register_operand" "w")
4537 (match_operand:MVE_5 3 "s_register_operand" "w")]
4541 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4542 [(set_attr "type" "mve_move")
4548 (define_insn "mve_vmlaldavaxq_s<mode>"
4550 (set (match_operand:DI 0 "s_register_operand" "=r")
4551 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4552 (match_operand:MVE_5 2 "s_register_operand" "w")
4553 (match_operand:MVE_5 3 "s_register_operand" "w")]
4557 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4558 [(set_attr "type" "mve_move")
4562 ;; [vmlaldavq_p_u, vmlaldavq_p_s])
4564 (define_insn "mve_vmlaldavq_p_<supf><mode>"
4566 (set (match_operand:DI 0 "s_register_operand" "=r")
4567 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4568 (match_operand:MVE_5 2 "s_register_operand" "w")
4569 (match_operand:HI 3 "vpr_register_operand" "Up")]
4573 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4574 [(set_attr "type" "mve_move")
4575 (set_attr "length""8")])
4578 ;; [vmlaldavxq_p_s])
4580 (define_insn "mve_vmlaldavxq_p_s<mode>"
4582 (set (match_operand:DI 0 "s_register_operand" "=r")
4583 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4584 (match_operand:MVE_5 2 "s_register_operand" "w")
4585 (match_operand:HI 3 "vpr_register_operand" "Up")]
4589 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
4590 [(set_attr "type" "mve_move")
4591 (set_attr "length""8")])
4595 (define_insn "mve_vmlsldavaq_s<mode>"
4597 (set (match_operand:DI 0 "s_register_operand" "=r")
4598 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4599 (match_operand:MVE_5 2 "s_register_operand" "w")
4600 (match_operand:MVE_5 3 "s_register_operand" "w")]
4604 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4605 [(set_attr "type" "mve_move")
4611 (define_insn "mve_vmlsldavaxq_s<mode>"
4613 (set (match_operand:DI 0 "s_register_operand" "=r")
4614 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4615 (match_operand:MVE_5 2 "s_register_operand" "w")
4616 (match_operand:MVE_5 3 "s_register_operand" "w")]
4620 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4621 [(set_attr "type" "mve_move")
4627 (define_insn "mve_vmlsldavq_p_s<mode>"
4629 (set (match_operand:DI 0 "s_register_operand" "=r")
4630 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4631 (match_operand:MVE_5 2 "s_register_operand" "w")
4632 (match_operand:HI 3 "vpr_register_operand" "Up")]
4636 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4637 [(set_attr "type" "mve_move")
4638 (set_attr "length""8")])
4641 ;; [vmlsldavxq_p_s])
4643 (define_insn "mve_vmlsldavxq_p_s<mode>"
4645 (set (match_operand:DI 0 "s_register_operand" "=r")
4646 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4647 (match_operand:MVE_5 2 "s_register_operand" "w")
4648 (match_operand:HI 3 "vpr_register_operand" "Up")]
4652 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4653 [(set_attr "type" "mve_move")
4654 (set_attr "length""8")])
4656 ;; [vmovlbq_m_u, vmovlbq_m_s])
4658 (define_insn "mve_vmovlbq_m_<supf><mode>"
4660 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4661 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4662 (match_operand:MVE_3 2 "s_register_operand" "w")
4663 (match_operand:HI 3 "vpr_register_operand" "Up")]
4667 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
4668 [(set_attr "type" "mve_move")
4669 (set_attr "length""8")])
4671 ;; [vmovltq_m_u, vmovltq_m_s])
4673 (define_insn "mve_vmovltq_m_<supf><mode>"
4675 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4676 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4677 (match_operand:MVE_3 2 "s_register_operand" "w")
4678 (match_operand:HI 3 "vpr_register_operand" "Up")]
4682 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
4683 [(set_attr "type" "mve_move")
4684 (set_attr "length""8")])
4686 ;; [vmovnbq_m_u, vmovnbq_m_s])
4688 (define_insn "mve_vmovnbq_m_<supf><mode>"
4690 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4691 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4692 (match_operand:MVE_5 2 "s_register_operand" "w")
4693 (match_operand:HI 3 "vpr_register_operand" "Up")]
4697 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
4698 [(set_attr "type" "mve_move")
4699 (set_attr "length""8")])
4702 ;; [vmovntq_m_u, vmovntq_m_s])
4704 (define_insn "mve_vmovntq_m_<supf><mode>"
4706 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4707 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4708 (match_operand:MVE_5 2 "s_register_operand" "w")
4709 (match_operand:HI 3 "vpr_register_operand" "Up")]
4713 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
4714 [(set_attr "type" "mve_move")
4715 (set_attr "length""8")])
4718 ;; [vmvnq_m_n_u, vmvnq_m_n_s])
4720 (define_insn "mve_vmvnq_m_n_<supf><mode>"
4722 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4723 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4724 (match_operand:SI 2 "immediate_operand" "i")
4725 (match_operand:HI 3 "vpr_register_operand" "Up")]
4729 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
4730 [(set_attr "type" "mve_move")
4731 (set_attr "length""8")])
4735 (define_insn "mve_vnegq_m_f<mode>"
4737 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4738 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4739 (match_operand:MVE_0 2 "s_register_operand" "w")
4740 (match_operand:HI 3 "vpr_register_operand" "Up")]
4743 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4744 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
4745 [(set_attr "type" "mve_move")
4746 (set_attr "length""8")])
4749 ;; [vorrq_m_n_s, vorrq_m_n_u])
4751 (define_insn "mve_vorrq_m_n_<supf><mode>"
4753 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4754 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4755 (match_operand:SI 2 "immediate_operand" "i")
4756 (match_operand:HI 3 "vpr_register_operand" "Up")]
4760 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
4761 [(set_attr "type" "mve_move")
4762 (set_attr "length""8")])
4766 (define_insn "mve_vpselq_f<mode>"
4768 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4769 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
4770 (match_operand:MVE_0 2 "s_register_operand" "w")
4771 (match_operand:HI 3 "vpr_register_operand" "Up")]
4774 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4775 "vpsel %q0, %q1, %q2"
4776 [(set_attr "type" "mve_move")
4780 ;; [vqmovnbq_m_s, vqmovnbq_m_u])
4782 (define_insn "mve_vqmovnbq_m_<supf><mode>"
4784 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4785 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4786 (match_operand:MVE_5 2 "s_register_operand" "w")
4787 (match_operand:HI 3 "vpr_register_operand" "Up")]
4791 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
4792 [(set_attr "type" "mve_move")
4793 (set_attr "length""8")])
4796 ;; [vqmovntq_m_u, vqmovntq_m_s])
4798 (define_insn "mve_vqmovntq_m_<supf><mode>"
4800 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4801 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4802 (match_operand:MVE_5 2 "s_register_operand" "w")
4803 (match_operand:HI 3 "vpr_register_operand" "Up")]
4807 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
4808 [(set_attr "type" "mve_move")
4809 (set_attr "length""8")])
4814 (define_insn "mve_vqmovunbq_m_s<mode>"
4816 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4817 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4818 (match_operand:MVE_5 2 "s_register_operand" "w")
4819 (match_operand:HI 3 "vpr_register_operand" "Up")]
4823 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
4824 [(set_attr "type" "mve_move")
4825 (set_attr "length""8")])
4830 (define_insn "mve_vqmovuntq_m_s<mode>"
4832 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4833 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4834 (match_operand:MVE_5 2 "s_register_operand" "w")
4835 (match_operand:HI 3 "vpr_register_operand" "Up")]
4839 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
4840 [(set_attr "type" "mve_move")
4841 (set_attr "length""8")])
4844 ;; [vqrshrntq_n_u, vqrshrntq_n_s])
4846 (define_insn "mve_vqrshrntq_n_<supf><mode>"
4848 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4849 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4850 (match_operand:MVE_5 2 "s_register_operand" "w")
4851 (match_operand:SI 3 "mve_imm_8" "Rb")]
4855 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4856 [(set_attr "type" "mve_move")
4860 ;; [vqrshruntq_n_s])
4862 (define_insn "mve_vqrshruntq_n_s<mode>"
4864 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4865 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4866 (match_operand:MVE_5 2 "s_register_operand" "w")
4867 (match_operand:SI 3 "mve_imm_8" "Rb")]
4871 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4872 [(set_attr "type" "mve_move")
4876 ;; [vqshrnbq_n_u, vqshrnbq_n_s])
4878 (define_insn "mve_vqshrnbq_n_<supf><mode>"
4880 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4881 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4882 (match_operand:MVE_5 2 "s_register_operand" "w")
4883 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4887 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4888 [(set_attr "type" "mve_move")
4892 ;; [vqshrntq_n_u, vqshrntq_n_s])
4894 (define_insn "mve_vqshrntq_n_<supf><mode>"
4896 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4897 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4898 (match_operand:MVE_5 2 "s_register_operand" "w")
4899 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4903 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4904 [(set_attr "type" "mve_move")
4910 (define_insn "mve_vqshrunbq_n_s<mode>"
4912 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4913 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4914 (match_operand:MVE_5 2 "s_register_operand" "w")
4915 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4919 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
4920 [(set_attr "type" "mve_move")
4926 (define_insn "mve_vqshruntq_n_s<mode>"
4928 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4929 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4930 (match_operand:MVE_5 2 "s_register_operand" "w")
4931 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4935 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4936 [(set_attr "type" "mve_move")
4942 (define_insn "mve_vrev32q_m_fv8hf"
4944 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4945 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4946 (match_operand:V8HF 2 "s_register_operand" "w")
4947 (match_operand:HI 3 "vpr_register_operand" "Up")]
4950 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4951 "vpst\;vrev32t.16 %q0, %q2"
4952 [(set_attr "type" "mve_move")
4953 (set_attr "length""8")])
4956 ;; [vrev32q_m_s, vrev32q_m_u])
4958 (define_insn "mve_vrev32q_m_<supf><mode>"
4960 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
4961 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
4962 (match_operand:MVE_3 2 "s_register_operand" "w")
4963 (match_operand:HI 3 "vpr_register_operand" "Up")]
4967 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
4968 [(set_attr "type" "mve_move")
4969 (set_attr "length""8")])
4974 (define_insn "mve_vrev64q_m_f<mode>"
4976 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4977 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4978 (match_operand:MVE_0 2 "s_register_operand" "w")
4979 (match_operand:HI 3 "vpr_register_operand" "Up")]
4982 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4983 "vpst\;vrev64t.%#<V_sz_elem> %q0, %q2"
4984 [(set_attr "type" "mve_move")
4985 (set_attr "length""8")])
4988 ;; [vrmlaldavhaxq_s])
4990 (define_insn "mve_vrmlaldavhaxq_sv4si"
4992 (set (match_operand:DI 0 "s_register_operand" "=r")
4993 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4994 (match_operand:V4SI 2 "s_register_operand" "w")
4995 (match_operand:V4SI 3 "s_register_operand" "w")]
4999 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
5000 [(set_attr "type" "mve_move")
5004 ;; [vrmlaldavhxq_p_s])
5006 (define_insn "mve_vrmlaldavhxq_p_sv4si"
5008 (set (match_operand:DI 0 "s_register_operand" "=r")
5009 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5010 (match_operand:V4SI 2 "s_register_operand" "w")
5011 (match_operand:HI 3 "vpr_register_operand" "Up")]
5015 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
5016 [(set_attr "type" "mve_move")
5017 (set_attr "length""8")])
5020 ;; [vrmlsldavhaxq_s])
5022 (define_insn "mve_vrmlsldavhaxq_sv4si"
5024 (set (match_operand:DI 0 "s_register_operand" "=r")
5025 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5026 (match_operand:V4SI 2 "s_register_operand" "w")
5027 (match_operand:V4SI 3 "s_register_operand" "w")]
5031 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
5032 [(set_attr "type" "mve_move")
5036 ;; [vrmlsldavhq_p_s])
5038 (define_insn "mve_vrmlsldavhq_p_sv4si"
5040 (set (match_operand:DI 0 "s_register_operand" "=r")
5041 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5042 (match_operand:V4SI 2 "s_register_operand" "w")
5043 (match_operand:HI 3 "vpr_register_operand" "Up")]
5047 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
5048 [(set_attr "type" "mve_move")
5049 (set_attr "length""8")])
5052 ;; [vrmlsldavhxq_p_s])
5054 (define_insn "mve_vrmlsldavhxq_p_sv4si"
5056 (set (match_operand:DI 0 "s_register_operand" "=r")
5057 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5058 (match_operand:V4SI 2 "s_register_operand" "w")
5059 (match_operand:HI 3 "vpr_register_operand" "Up")]
5063 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
5064 [(set_attr "type" "mve_move")
5065 (set_attr "length""8")])
5070 (define_insn "mve_vrndaq_m_f<mode>"
5072 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5073 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5074 (match_operand:MVE_0 2 "s_register_operand" "w")
5075 (match_operand:HI 3 "vpr_register_operand" "Up")]
5078 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5079 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
5080 [(set_attr "type" "mve_move")
5081 (set_attr "length""8")])
5086 (define_insn "mve_vrndmq_m_f<mode>"
5088 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5089 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5090 (match_operand:MVE_0 2 "s_register_operand" "w")
5091 (match_operand:HI 3 "vpr_register_operand" "Up")]
5094 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5095 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
5096 [(set_attr "type" "mve_move")
5097 (set_attr "length""8")])
5102 (define_insn "mve_vrndnq_m_f<mode>"
5104 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5105 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5106 (match_operand:MVE_0 2 "s_register_operand" "w")
5107 (match_operand:HI 3 "vpr_register_operand" "Up")]
5110 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5111 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
5112 [(set_attr "type" "mve_move")
5113 (set_attr "length""8")])
5118 (define_insn "mve_vrndpq_m_f<mode>"
5120 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5121 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5122 (match_operand:MVE_0 2 "s_register_operand" "w")
5123 (match_operand:HI 3 "vpr_register_operand" "Up")]
5126 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5127 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
5128 [(set_attr "type" "mve_move")
5129 (set_attr "length""8")])
5134 (define_insn "mve_vrndxq_m_f<mode>"
5136 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5137 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5138 (match_operand:MVE_0 2 "s_register_operand" "w")
5139 (match_operand:HI 3 "vpr_register_operand" "Up")]
5142 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5143 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
5144 [(set_attr "type" "mve_move")
5145 (set_attr "length""8")])
5148 ;; [vrshrnbq_n_s, vrshrnbq_n_u])
5150 (define_insn "mve_vrshrnbq_n_<supf><mode>"
5152 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5153 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5154 (match_operand:MVE_5 2 "s_register_operand" "w")
5155 (match_operand:SI 3 "mve_imm_8" "Rb")]
5159 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5160 [(set_attr "type" "mve_move")
5164 ;; [vrshrntq_n_u, vrshrntq_n_s])
5166 (define_insn "mve_vrshrntq_n_<supf><mode>"
5168 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5169 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5170 (match_operand:MVE_5 2 "s_register_operand" "w")
5171 (match_operand:SI 3 "mve_imm_8" "Rb")]
5175 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
5176 [(set_attr "type" "mve_move")
5180 ;; [vshrnbq_n_u, vshrnbq_n_s])
5182 (define_insn "mve_vshrnbq_n_<supf><mode>"
5184 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5185 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5186 (match_operand:MVE_5 2 "s_register_operand" "w")
5187 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5191 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5192 [(set_attr "type" "mve_move")
5196 ;; [vshrntq_n_s, vshrntq_n_u])
5198 (define_insn "mve_vshrntq_n_<supf><mode>"
5200 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5201 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5202 (match_operand:MVE_5 2 "s_register_operand" "w")
5203 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5207 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
5208 [(set_attr "type" "mve_move")
5212 ;; [vcvtmq_m_s, vcvtmq_m_u])
5214 (define_insn "mve_vcvtmq_m_<supf><mode>"
5216 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5217 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5218 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5219 (match_operand:HI 3 "vpr_register_operand" "Up")]
5222 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5223 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5224 [(set_attr "type" "mve_move")
5225 (set_attr "length""8")])
5228 ;; [vcvtpq_m_u, vcvtpq_m_s])
5230 (define_insn "mve_vcvtpq_m_<supf><mode>"
5232 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5233 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5234 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5235 (match_operand:HI 3 "vpr_register_operand" "Up")]
5238 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5239 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5240 [(set_attr "type" "mve_move")
5241 (set_attr "length""8")])
5244 ;; [vcvtnq_m_s, vcvtnq_m_u])
5246 (define_insn "mve_vcvtnq_m_<supf><mode>"
5248 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5249 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5250 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5251 (match_operand:HI 3 "vpr_register_operand" "Up")]
5254 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5255 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5256 [(set_attr "type" "mve_move")
5257 (set_attr "length""8")])
5260 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
5262 (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
5264 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5265 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5266 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5267 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5268 (match_operand:HI 4 "vpr_register_operand" "Up")]
5271 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5272 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
5273 [(set_attr "type" "mve_move")
5274 (set_attr "length""8")])
5277 ;; [vrev16q_m_u, vrev16q_m_s])
5279 (define_insn "mve_vrev16q_m_<supf>v16qi"
5281 (set (match_operand:V16QI 0 "s_register_operand" "=w")
5282 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
5283 (match_operand:V16QI 2 "s_register_operand" "w")
5284 (match_operand:HI 3 "vpr_register_operand" "Up")]
5288 "vpst\;vrev16t.8 %q0, %q2"
5289 [(set_attr "type" "mve_move")
5290 (set_attr "length""8")])
5293 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
5295 (define_insn "mve_vcvtq_m_from_f_<supf><mode>"
5297 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5298 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5299 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5300 (match_operand:HI 3 "vpr_register_operand" "Up")]
5303 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5304 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5305 [(set_attr "type" "mve_move")
5306 (set_attr "length""8")])
5309 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
5311 (define_insn "mve_vrmlaldavhq_p_<supf>v4si"
5313 (set (match_operand:DI 0 "s_register_operand" "=r")
5314 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5315 (match_operand:V4SI 2 "s_register_operand" "w")
5316 (match_operand:HI 3 "vpr_register_operand" "Up")]
5320 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
5321 [(set_attr "type" "mve_move")
5322 (set_attr "length""8")])
5325 ;; [vrmlsldavhaq_s])
5327 (define_insn "mve_vrmlsldavhaq_sv4si"
5329 (set (match_operand:DI 0 "s_register_operand" "=r")
5330 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5331 (match_operand:V4SI 2 "s_register_operand" "w")
5332 (match_operand:V4SI 3 "s_register_operand" "w")]
5336 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
5337 [(set_attr "type" "mve_move")
5341 ;; [vabavq_p_s, vabavq_p_u])
5343 (define_insn "mve_vabavq_p_<supf><mode>"
5345 (set (match_operand:SI 0 "s_register_operand" "=r")
5346 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5347 (match_operand:MVE_2 2 "s_register_operand" "w")
5348 (match_operand:MVE_2 3 "s_register_operand" "w")
5349 (match_operand:HI 4 "vpr_register_operand" "Up")]
5353 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
5354 [(set_attr "type" "mve_move")
5360 (define_insn "mve_vqshluq_m_n_s<mode>"
5362 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5363 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5364 (match_operand:MVE_2 2 "s_register_operand" "w")
5365 (match_operand:SI 3 "mve_imm_7" "Ra")
5366 (match_operand:HI 4 "vpr_register_operand" "Up")]
5370 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
5371 [(set_attr "type" "mve_move")])
5374 ;; [vshlq_m_s, vshlq_m_u])
5376 (define_insn "mve_vshlq_m_<supf><mode>"
5378 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5379 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5380 (match_operand:MVE_2 2 "s_register_operand" "w")
5381 (match_operand:MVE_2 3 "s_register_operand" "w")
5382 (match_operand:HI 4 "vpr_register_operand" "Up")]
5386 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5387 [(set_attr "type" "mve_move")])
5390 ;; [vsriq_m_n_s, vsriq_m_n_u])
5392 (define_insn "mve_vsriq_m_n_<supf><mode>"
5394 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5395 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5396 (match_operand:MVE_2 2 "s_register_operand" "w")
5397 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
5398 (match_operand:HI 4 "vpr_register_operand" "Up")]
5402 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
5403 [(set_attr "type" "mve_move")])
5406 ;; [vsubq_m_u, vsubq_m_s])
5408 (define_insn "mve_vsubq_m_<supf><mode>"
5410 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5411 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5412 (match_operand:MVE_2 2 "s_register_operand" "w")
5413 (match_operand:MVE_2 3 "s_register_operand" "w")
5414 (match_operand:HI 4 "vpr_register_operand" "Up")]
5418 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
5419 [(set_attr "type" "mve_move")])
5422 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
5424 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
5426 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5427 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5428 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5429 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5430 (match_operand:HI 4 "vpr_register_operand" "Up")]
5433 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5434 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5435 [(set_attr "type" "mve_move")
5436 (set_attr "length""8")])
5438 ;; [vabdq_m_s, vabdq_m_u])
5440 (define_insn "mve_vabdq_m_<supf><mode>"
5442 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5443 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5444 (match_operand:MVE_2 2 "s_register_operand" "w")
5445 (match_operand:MVE_2 3 "s_register_operand" "w")
5446 (match_operand:HI 4 "vpr_register_operand" "Up")]
5450 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5451 [(set_attr "type" "mve_move")
5452 (set_attr "length""8")])
5455 ;; [vaddq_m_n_s, vaddq_m_n_u])
5457 (define_insn "mve_vaddq_m_n_<supf><mode>"
5459 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5460 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5461 (match_operand:MVE_2 2 "s_register_operand" "w")
5462 (match_operand:<V_elem> 3 "s_register_operand" "r")
5463 (match_operand:HI 4 "vpr_register_operand" "Up")]
5467 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3"
5468 [(set_attr "type" "mve_move")
5469 (set_attr "length""8")])
5472 ;; [vaddq_m_u, vaddq_m_s])
5474 (define_insn "mve_vaddq_m_<supf><mode>"
5476 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5477 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5478 (match_operand:MVE_2 2 "s_register_operand" "w")
5479 (match_operand:MVE_2 3 "s_register_operand" "w")
5480 (match_operand:HI 4 "vpr_register_operand" "Up")]
5484 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3"
5485 [(set_attr "type" "mve_move")
5486 (set_attr "length""8")])
5489 ;; [vandq_m_u, vandq_m_s])
5491 (define_insn "mve_vandq_m_<supf><mode>"
5493 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5494 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5495 (match_operand:MVE_2 2 "s_register_operand" "w")
5496 (match_operand:MVE_2 3 "s_register_operand" "w")
5497 (match_operand:HI 4 "vpr_register_operand" "Up")]
5501 "vpst\;vandt %q0, %q2, %q3"
5502 [(set_attr "type" "mve_move")
5503 (set_attr "length""8")])
5506 ;; [vbicq_m_u, vbicq_m_s])
5508 (define_insn "mve_vbicq_m_<supf><mode>"
5510 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5511 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5512 (match_operand:MVE_2 2 "s_register_operand" "w")
5513 (match_operand:MVE_2 3 "s_register_operand" "w")
5514 (match_operand:HI 4 "vpr_register_operand" "Up")]
5518 "vpst\;vbict %q0, %q2, %q3"
5519 [(set_attr "type" "mve_move")
5520 (set_attr "length""8")])
5523 ;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
5525 (define_insn "mve_vbrsrq_m_n_<supf><mode>"
5527 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5528 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5529 (match_operand:MVE_2 2 "s_register_operand" "w")
5530 (match_operand:SI 3 "s_register_operand" "r")
5531 (match_operand:HI 4 "vpr_register_operand" "Up")]
5535 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
5536 [(set_attr "type" "mve_move")
5537 (set_attr "length""8")])
5540 ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
5542 (define_insn "mve_vcaddq_rot270_m_<supf><mode>"
5544 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5545 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5546 (match_operand:MVE_2 2 "s_register_operand" "w")
5547 (match_operand:MVE_2 3 "s_register_operand" "w")
5548 (match_operand:HI 4 "vpr_register_operand" "Up")]
5552 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270"
5553 [(set_attr "type" "mve_move")
5554 (set_attr "length""8")])
5557 ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
5559 (define_insn "mve_vcaddq_rot90_m_<supf><mode>"
5561 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5562 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5563 (match_operand:MVE_2 2 "s_register_operand" "w")
5564 (match_operand:MVE_2 3 "s_register_operand" "w")
5565 (match_operand:HI 4 "vpr_register_operand" "Up")]
5569 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90"
5570 [(set_attr "type" "mve_move")
5571 (set_attr "length""8")])
5574 ;; [veorq_m_s, veorq_m_u])
5576 (define_insn "mve_veorq_m_<supf><mode>"
5578 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5579 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5580 (match_operand:MVE_2 2 "s_register_operand" "w")
5581 (match_operand:MVE_2 3 "s_register_operand" "w")
5582 (match_operand:HI 4 "vpr_register_operand" "Up")]
5586 "vpst\;veort %q0, %q2, %q3"
5587 [(set_attr "type" "mve_move")
5588 (set_attr "length""8")])
5591 ;; [vhaddq_m_n_s, vhaddq_m_n_u])
5593 (define_insn "mve_vhaddq_m_n_<supf><mode>"
5595 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5596 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5597 (match_operand:MVE_2 2 "s_register_operand" "w")
5598 (match_operand:<V_elem> 3 "s_register_operand" "r")
5599 (match_operand:HI 4 "vpr_register_operand" "Up")]
5603 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5604 [(set_attr "type" "mve_move")
5605 (set_attr "length""8")])
5608 ;; [vhaddq_m_s, vhaddq_m_u])
5610 (define_insn "mve_vhaddq_m_<supf><mode>"
5612 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5613 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5614 (match_operand:MVE_2 2 "s_register_operand" "w")
5615 (match_operand:MVE_2 3 "s_register_operand" "w")
5616 (match_operand:HI 4 "vpr_register_operand" "Up")]
5620 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5621 [(set_attr "type" "mve_move")
5622 (set_attr "length""8")])
5625 ;; [vhsubq_m_n_s, vhsubq_m_n_u])
5627 (define_insn "mve_vhsubq_m_n_<supf><mode>"
5629 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5630 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5631 (match_operand:MVE_2 2 "s_register_operand" "w")
5632 (match_operand:<V_elem> 3 "s_register_operand" "r")
5633 (match_operand:HI 4 "vpr_register_operand" "Up")]
5637 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5638 [(set_attr "type" "mve_move")
5639 (set_attr "length""8")])
5642 ;; [vhsubq_m_s, vhsubq_m_u])
5644 (define_insn "mve_vhsubq_m_<supf><mode>"
5646 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5647 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5648 (match_operand:MVE_2 2 "s_register_operand" "w")
5649 (match_operand:MVE_2 3 "s_register_operand" "w")
5650 (match_operand:HI 4 "vpr_register_operand" "Up")]
5654 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5655 [(set_attr "type" "mve_move")
5656 (set_attr "length""8")])
5659 ;; [vmaxq_m_s, vmaxq_m_u])
5661 (define_insn "mve_vmaxq_m_<supf><mode>"
5663 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5664 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5665 (match_operand:MVE_2 2 "s_register_operand" "w")
5666 (match_operand:MVE_2 3 "s_register_operand" "w")
5667 (match_operand:HI 4 "vpr_register_operand" "Up")]
5671 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5672 [(set_attr "type" "mve_move")
5673 (set_attr "length""8")])
5676 ;; [vminq_m_s, vminq_m_u])
5678 (define_insn "mve_vminq_m_<supf><mode>"
5680 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5681 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5682 (match_operand:MVE_2 2 "s_register_operand" "w")
5683 (match_operand:MVE_2 3 "s_register_operand" "w")
5684 (match_operand:HI 4 "vpr_register_operand" "Up")]
5688 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5689 [(set_attr "type" "mve_move")
5690 (set_attr "length""8")])
5693 ;; [vmladavaq_p_u, vmladavaq_p_s])
5695 (define_insn "mve_vmladavaq_p_<supf><mode>"
5697 (set (match_operand:SI 0 "s_register_operand" "=Te")
5698 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5699 (match_operand:MVE_2 2 "s_register_operand" "w")
5700 (match_operand:MVE_2 3 "s_register_operand" "w")
5701 (match_operand:HI 4 "vpr_register_operand" "Up")]
5705 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3"
5706 [(set_attr "type" "mve_move")
5707 (set_attr "length""8")])
5710 ;; [vmlaq_m_n_s, vmlaq_m_n_u])
5712 (define_insn "mve_vmlaq_m_n_<supf><mode>"
5714 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5715 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5716 (match_operand:MVE_2 2 "s_register_operand" "w")
5717 (match_operand:<V_elem> 3 "s_register_operand" "r")
5718 (match_operand:HI 4 "vpr_register_operand" "Up")]
5722 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3"
5723 [(set_attr "type" "mve_move")
5724 (set_attr "length""8")])
5727 ;; [vmlasq_m_n_u, vmlasq_m_n_s])
5729 (define_insn "mve_vmlasq_m_n_<supf><mode>"
5731 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5732 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5733 (match_operand:MVE_2 2 "s_register_operand" "w")
5734 (match_operand:<V_elem> 3 "s_register_operand" "r")
5735 (match_operand:HI 4 "vpr_register_operand" "Up")]
5739 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3"
5740 [(set_attr "type" "mve_move")
5741 (set_attr "length""8")])
5744 ;; [vmulhq_m_s, vmulhq_m_u])
5746 (define_insn "mve_vmulhq_m_<supf><mode>"
5748 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5749 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5750 (match_operand:MVE_2 2 "s_register_operand" "w")
5751 (match_operand:MVE_2 3 "s_register_operand" "w")
5752 (match_operand:HI 4 "vpr_register_operand" "Up")]
5756 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5757 [(set_attr "type" "mve_move")
5758 (set_attr "length""8")])
5761 ;; [vmullbq_int_m_u, vmullbq_int_m_s])
5763 (define_insn "mve_vmullbq_int_m_<supf><mode>"
5765 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5766 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5767 (match_operand:MVE_2 2 "s_register_operand" "w")
5768 (match_operand:MVE_2 3 "s_register_operand" "w")
5769 (match_operand:HI 4 "vpr_register_operand" "Up")]
5773 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5774 [(set_attr "type" "mve_move")
5775 (set_attr "length""8")])
5778 ;; [vmulltq_int_m_s, vmulltq_int_m_u])
5780 (define_insn "mve_vmulltq_int_m_<supf><mode>"
5782 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5783 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5784 (match_operand:MVE_2 2 "s_register_operand" "w")
5785 (match_operand:MVE_2 3 "s_register_operand" "w")
5786 (match_operand:HI 4 "vpr_register_operand" "Up")]
5790 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5791 [(set_attr "type" "mve_move")
5792 (set_attr "length""8")])
5795 ;; [vmulq_m_n_u, vmulq_m_n_s])
5797 (define_insn "mve_vmulq_m_n_<supf><mode>"
5799 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5800 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5801 (match_operand:MVE_2 2 "s_register_operand" "w")
5802 (match_operand:<V_elem> 3 "s_register_operand" "r")
5803 (match_operand:HI 4 "vpr_register_operand" "Up")]
5807 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3"
5808 [(set_attr "type" "mve_move")
5809 (set_attr "length""8")])
5812 ;; [vmulq_m_s, vmulq_m_u])
5814 (define_insn "mve_vmulq_m_<supf><mode>"
5816 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5817 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5818 (match_operand:MVE_2 2 "s_register_operand" "w")
5819 (match_operand:MVE_2 3 "s_register_operand" "w")
5820 (match_operand:HI 4 "vpr_register_operand" "Up")]
5824 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3"
5825 [(set_attr "type" "mve_move")
5826 (set_attr "length""8")])
5829 ;; [vornq_m_u, vornq_m_s])
5831 (define_insn "mve_vornq_m_<supf><mode>"
5833 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5834 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5835 (match_operand:MVE_2 2 "s_register_operand" "w")
5836 (match_operand:MVE_2 3 "s_register_operand" "w")
5837 (match_operand:HI 4 "vpr_register_operand" "Up")]
5841 "vpst\;vornt %q0, %q2, %q3"
5842 [(set_attr "type" "mve_move")
5843 (set_attr "length""8")])
5846 ;; [vorrq_m_s, vorrq_m_u])
5848 (define_insn "mve_vorrq_m_<supf><mode>"
5850 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5851 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5852 (match_operand:MVE_2 2 "s_register_operand" "w")
5853 (match_operand:MVE_2 3 "s_register_operand" "w")
5854 (match_operand:HI 4 "vpr_register_operand" "Up")]
5858 "vpst\;vorrt %q0, %q2, %q3"
5859 [(set_attr "type" "mve_move")
5860 (set_attr "length""8")])
5863 ;; [vqaddq_m_n_u, vqaddq_m_n_s])
5865 (define_insn "mve_vqaddq_m_n_<supf><mode>"
5867 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5868 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5869 (match_operand:MVE_2 2 "s_register_operand" "w")
5870 (match_operand:<V_elem> 3 "s_register_operand" "r")
5871 (match_operand:HI 4 "vpr_register_operand" "Up")]
5875 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5876 [(set_attr "type" "mve_move")
5877 (set_attr "length""8")])
5880 ;; [vqaddq_m_u, vqaddq_m_s])
5882 (define_insn "mve_vqaddq_m_<supf><mode>"
5884 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5885 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5886 (match_operand:MVE_2 2 "s_register_operand" "w")
5887 (match_operand:MVE_2 3 "s_register_operand" "w")
5888 (match_operand:HI 4 "vpr_register_operand" "Up")]
5892 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5893 [(set_attr "type" "mve_move")
5894 (set_attr "length""8")])
5897 ;; [vqdmlahq_m_n_s])
5899 (define_insn "mve_vqdmlahq_m_n_s<mode>"
5901 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5902 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5903 (match_operand:MVE_2 2 "s_register_operand" "w")
5904 (match_operand:<V_elem> 3 "s_register_operand" "r")
5905 (match_operand:HI 4 "vpr_register_operand" "Up")]
5909 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5910 [(set_attr "type" "mve_move")
5911 (set_attr "length""8")])
5914 ;; [vqdmlashq_m_n_s])
5916 (define_insn "mve_vqdmlashq_m_n_s<mode>"
5918 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5919 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5920 (match_operand:MVE_2 2 "s_register_operand" "w")
5921 (match_operand:<V_elem> 3 "s_register_operand" "r")
5922 (match_operand:HI 4 "vpr_register_operand" "Up")]
5926 "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5927 [(set_attr "type" "mve_move")
5928 (set_attr "length""8")])
5931 ;; [vqrdmlahq_m_n_s])
5933 (define_insn "mve_vqrdmlahq_m_n_s<mode>"
5935 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5936 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5937 (match_operand:MVE_2 2 "s_register_operand" "w")
5938 (match_operand:<V_elem> 3 "s_register_operand" "r")
5939 (match_operand:HI 4 "vpr_register_operand" "Up")]
5943 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5944 [(set_attr "type" "mve_move")
5945 (set_attr "length""8")])
5948 ;; [vqrdmlashq_m_n_s])
5950 (define_insn "mve_vqrdmlashq_m_n_s<mode>"
5952 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5953 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5954 (match_operand:MVE_2 2 "s_register_operand" "w")
5955 (match_operand:<V_elem> 3 "s_register_operand" "r")
5956 (match_operand:HI 4 "vpr_register_operand" "Up")]
5960 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5961 [(set_attr "type" "mve_move")
5962 (set_attr "length""8")])
5965 ;; [vqrshlq_m_u, vqrshlq_m_s])
5967 (define_insn "mve_vqrshlq_m_<supf><mode>"
5969 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5970 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5971 (match_operand:MVE_2 2 "s_register_operand" "w")
5972 (match_operand:MVE_2 3 "s_register_operand" "w")
5973 (match_operand:HI 4 "vpr_register_operand" "Up")]
5977 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5978 [(set_attr "type" "mve_move")
5979 (set_attr "length""8")])
5982 ;; [vqshlq_m_n_s, vqshlq_m_n_u])
5984 (define_insn "mve_vqshlq_m_n_<supf><mode>"
5986 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5987 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5988 (match_operand:MVE_2 2 "s_register_operand" "w")
5989 (match_operand:SI 3 "immediate_operand" "i")
5990 (match_operand:HI 4 "vpr_register_operand" "Up")]
5994 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5995 [(set_attr "type" "mve_move")
5996 (set_attr "length""8")])
5999 ;; [vqshlq_m_u, vqshlq_m_s])
6001 (define_insn "mve_vqshlq_m_<supf><mode>"
6003 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6004 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6005 (match_operand:MVE_2 2 "s_register_operand" "w")
6006 (match_operand:MVE_2 3 "s_register_operand" "w")
6007 (match_operand:HI 4 "vpr_register_operand" "Up")]
6011 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6012 [(set_attr "type" "mve_move")
6013 (set_attr "length""8")])
6016 ;; [vqsubq_m_n_u, vqsubq_m_n_s])
6018 (define_insn "mve_vqsubq_m_n_<supf><mode>"
6020 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6021 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6022 (match_operand:MVE_2 2 "s_register_operand" "w")
6023 (match_operand:<V_elem> 3 "s_register_operand" "r")
6024 (match_operand:HI 4 "vpr_register_operand" "Up")]
6028 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6029 [(set_attr "type" "mve_move")
6030 (set_attr "length""8")])
6033 ;; [vqsubq_m_u, vqsubq_m_s])
6035 (define_insn "mve_vqsubq_m_<supf><mode>"
6037 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6038 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6039 (match_operand:MVE_2 2 "s_register_operand" "w")
6040 (match_operand:MVE_2 3 "s_register_operand" "w")
6041 (match_operand:HI 4 "vpr_register_operand" "Up")]
6045 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6046 [(set_attr "type" "mve_move")
6047 (set_attr "length""8")])
6050 ;; [vrhaddq_m_u, vrhaddq_m_s])
6052 (define_insn "mve_vrhaddq_m_<supf><mode>"
6054 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6055 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6056 (match_operand:MVE_2 2 "s_register_operand" "w")
6057 (match_operand:MVE_2 3 "s_register_operand" "w")
6058 (match_operand:HI 4 "vpr_register_operand" "Up")]
6062 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6063 [(set_attr "type" "mve_move")
6064 (set_attr "length""8")])
6067 ;; [vrmulhq_m_u, vrmulhq_m_s])
6069 (define_insn "mve_vrmulhq_m_<supf><mode>"
6071 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6072 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6073 (match_operand:MVE_2 2 "s_register_operand" "w")
6074 (match_operand:MVE_2 3 "s_register_operand" "w")
6075 (match_operand:HI 4 "vpr_register_operand" "Up")]
6079 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6080 [(set_attr "type" "mve_move")
6081 (set_attr "length""8")])
6084 ;; [vrshlq_m_s, vrshlq_m_u])
6086 (define_insn "mve_vrshlq_m_<supf><mode>"
6088 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6089 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6090 (match_operand:MVE_2 2 "s_register_operand" "w")
6091 (match_operand:MVE_2 3 "s_register_operand" "w")
6092 (match_operand:HI 4 "vpr_register_operand" "Up")]
6096 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6097 [(set_attr "type" "mve_move")
6098 (set_attr "length""8")])
6101 ;; [vrshrq_m_n_s, vrshrq_m_n_u])
6103 (define_insn "mve_vrshrq_m_n_<supf><mode>"
6105 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6106 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6107 (match_operand:MVE_2 2 "s_register_operand" "w")
6108 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6109 (match_operand:HI 4 "vpr_register_operand" "Up")]
6113 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6114 [(set_attr "type" "mve_move")
6115 (set_attr "length""8")])
6118 ;; [vshlq_m_n_s, vshlq_m_n_u])
6120 (define_insn "mve_vshlq_m_n_<supf><mode>"
6122 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6123 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6124 (match_operand:MVE_2 2 "s_register_operand" "w")
6125 (match_operand:SI 3 "immediate_operand" "i")
6126 (match_operand:HI 4 "vpr_register_operand" "Up")]
6130 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6131 [(set_attr "type" "mve_move")
6132 (set_attr "length""8")])
6135 ;; [vshrq_m_n_s, vshrq_m_n_u])
6137 (define_insn "mve_vshrq_m_n_<supf><mode>"
6139 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6140 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6141 (match_operand:MVE_2 2 "s_register_operand" "w")
6142 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6143 (match_operand:HI 4 "vpr_register_operand" "Up")]
6147 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6148 [(set_attr "type" "mve_move")
6149 (set_attr "length""8")])
6152 ;; [vsliq_m_n_u, vsliq_m_n_s])
6154 (define_insn "mve_vsliq_m_n_<supf><mode>"
6156 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6157 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6158 (match_operand:MVE_2 2 "s_register_operand" "w")
6159 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
6160 (match_operand:HI 4 "vpr_register_operand" "Up")]
6164 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
6165 [(set_attr "type" "mve_move")
6166 (set_attr "length""8")])
6169 ;; [vsubq_m_n_s, vsubq_m_n_u])
6171 (define_insn "mve_vsubq_m_n_<supf><mode>"
6173 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6174 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6175 (match_operand:MVE_2 2 "s_register_operand" "w")
6176 (match_operand:<V_elem> 3 "s_register_operand" "r")
6177 (match_operand:HI 4 "vpr_register_operand" "Up")]
6181 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
6182 [(set_attr "type" "mve_move")
6183 (set_attr "length""8")])
6186 ;; [vhcaddq_rot270_m_s])
6188 (define_insn "mve_vhcaddq_rot270_m_s<mode>"
6190 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6191 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6192 (match_operand:MVE_2 2 "s_register_operand" "w")
6193 (match_operand:MVE_2 3 "s_register_operand" "w")
6194 (match_operand:HI 4 "vpr_register_operand" "Up")]
6195 VHCADDQ_ROT270_M_S))
6198 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
6199 [(set_attr "type" "mve_move")
6200 (set_attr "length""8")])
6203 ;; [vhcaddq_rot90_m_s])
6205 (define_insn "mve_vhcaddq_rot90_m_s<mode>"
6207 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6208 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6209 (match_operand:MVE_2 2 "s_register_operand" "w")
6210 (match_operand:MVE_2 3 "s_register_operand" "w")
6211 (match_operand:HI 4 "vpr_register_operand" "Up")]
6215 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
6216 [(set_attr "type" "mve_move")
6217 (set_attr "length""8")])
6220 ;; [vmladavaxq_p_s])
6222 (define_insn "mve_vmladavaxq_p_s<mode>"
6224 (set (match_operand:SI 0 "s_register_operand" "=Te")
6225 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6226 (match_operand:MVE_2 2 "s_register_operand" "w")
6227 (match_operand:MVE_2 3 "s_register_operand" "w")
6228 (match_operand:HI 4 "vpr_register_operand" "Up")]
6232 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6233 [(set_attr "type" "mve_move")
6234 (set_attr "length""8")])
6239 (define_insn "mve_vmlsdavaq_p_s<mode>"
6241 (set (match_operand:SI 0 "s_register_operand" "=Te")
6242 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6243 (match_operand:MVE_2 2 "s_register_operand" "w")
6244 (match_operand:MVE_2 3 "s_register_operand" "w")
6245 (match_operand:HI 4 "vpr_register_operand" "Up")]
6249 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
6250 [(set_attr "type" "mve_move")
6251 (set_attr "length""8")])
6254 ;; [vmlsdavaxq_p_s])
6256 (define_insn "mve_vmlsdavaxq_p_s<mode>"
6258 (set (match_operand:SI 0 "s_register_operand" "=Te")
6259 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6260 (match_operand:MVE_2 2 "s_register_operand" "w")
6261 (match_operand:MVE_2 3 "s_register_operand" "w")
6262 (match_operand:HI 4 "vpr_register_operand" "Up")]
6266 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6267 [(set_attr "type" "mve_move")
6268 (set_attr "length""8")])
6273 (define_insn "mve_vqdmladhq_m_s<mode>"
6275 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6276 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6277 (match_operand:MVE_2 2 "s_register_operand" "w")
6278 (match_operand:MVE_2 3 "s_register_operand" "w")
6279 (match_operand:HI 4 "vpr_register_operand" "Up")]
6283 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6284 [(set_attr "type" "mve_move")
6285 (set_attr "length""8")])
6288 ;; [vqdmladhxq_m_s])
6290 (define_insn "mve_vqdmladhxq_m_s<mode>"
6292 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6293 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6294 (match_operand:MVE_2 2 "s_register_operand" "w")
6295 (match_operand:MVE_2 3 "s_register_operand" "w")
6296 (match_operand:HI 4 "vpr_register_operand" "Up")]
6300 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6301 [(set_attr "type" "mve_move")
6302 (set_attr "length""8")])
6307 (define_insn "mve_vqdmlsdhq_m_s<mode>"
6309 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6310 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6311 (match_operand:MVE_2 2 "s_register_operand" "w")
6312 (match_operand:MVE_2 3 "s_register_operand" "w")
6313 (match_operand:HI 4 "vpr_register_operand" "Up")]
6317 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6318 [(set_attr "type" "mve_move")
6319 (set_attr "length""8")])
6322 ;; [vqdmlsdhxq_m_s])
6324 (define_insn "mve_vqdmlsdhxq_m_s<mode>"
6326 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6327 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6328 (match_operand:MVE_2 2 "s_register_operand" "w")
6329 (match_operand:MVE_2 3 "s_register_operand" "w")
6330 (match_operand:HI 4 "vpr_register_operand" "Up")]
6334 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6335 [(set_attr "type" "mve_move")
6336 (set_attr "length""8")])
6339 ;; [vqdmulhq_m_n_s])
6341 (define_insn "mve_vqdmulhq_m_n_s<mode>"
6343 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6344 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6345 (match_operand:MVE_2 2 "s_register_operand" "w")
6346 (match_operand:<V_elem> 3 "s_register_operand" "r")
6347 (match_operand:HI 4 "vpr_register_operand" "Up")]
6351 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6352 [(set_attr "type" "mve_move")
6353 (set_attr "length""8")])
6358 (define_insn "mve_vqdmulhq_m_s<mode>"
6360 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6361 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6362 (match_operand:MVE_2 2 "s_register_operand" "w")
6363 (match_operand:MVE_2 3 "s_register_operand" "w")
6364 (match_operand:HI 4 "vpr_register_operand" "Up")]
6368 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6369 [(set_attr "type" "mve_move")
6370 (set_attr "length""8")])
6373 ;; [vqrdmladhq_m_s])
6375 (define_insn "mve_vqrdmladhq_m_s<mode>"
6377 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6378 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6379 (match_operand:MVE_2 2 "s_register_operand" "w")
6380 (match_operand:MVE_2 3 "s_register_operand" "w")
6381 (match_operand:HI 4 "vpr_register_operand" "Up")]
6385 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6386 [(set_attr "type" "mve_move")
6387 (set_attr "length""8")])
6390 ;; [vqrdmladhxq_m_s])
6392 (define_insn "mve_vqrdmladhxq_m_s<mode>"
6394 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6395 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6396 (match_operand:MVE_2 2 "s_register_operand" "w")
6397 (match_operand:MVE_2 3 "s_register_operand" "w")
6398 (match_operand:HI 4 "vpr_register_operand" "Up")]
6402 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6403 [(set_attr "type" "mve_move")
6404 (set_attr "length""8")])
6407 ;; [vqrdmlsdhq_m_s])
6409 (define_insn "mve_vqrdmlsdhq_m_s<mode>"
6411 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6412 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6413 (match_operand:MVE_2 2 "s_register_operand" "w")
6414 (match_operand:MVE_2 3 "s_register_operand" "w")
6415 (match_operand:HI 4 "vpr_register_operand" "Up")]
6419 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6420 [(set_attr "type" "mve_move")
6421 (set_attr "length""8")])
6424 ;; [vqrdmlsdhxq_m_s])
6426 (define_insn "mve_vqrdmlsdhxq_m_s<mode>"
6428 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6429 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6430 (match_operand:MVE_2 2 "s_register_operand" "w")
6431 (match_operand:MVE_2 3 "s_register_operand" "w")
6432 (match_operand:HI 4 "vpr_register_operand" "Up")]
6436 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6437 [(set_attr "type" "mve_move")
6438 (set_attr "length""8")])
6441 ;; [vqrdmulhq_m_n_s])
6443 (define_insn "mve_vqrdmulhq_m_n_s<mode>"
6445 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6446 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6447 (match_operand:MVE_2 2 "s_register_operand" "w")
6448 (match_operand:<V_elem> 3 "s_register_operand" "r")
6449 (match_operand:HI 4 "vpr_register_operand" "Up")]
6453 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6454 [(set_attr "type" "mve_move")
6455 (set_attr "length""8")])
6460 (define_insn "mve_vqrdmulhq_m_s<mode>"
6462 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6463 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6464 (match_operand:MVE_2 2 "s_register_operand" "w")
6465 (match_operand:MVE_2 3 "s_register_operand" "w")
6466 (match_operand:HI 4 "vpr_register_operand" "Up")]
6470 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6471 [(set_attr "type" "mve_move")
6472 (set_attr "length""8")])
6475 ;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
6477 (define_insn "mve_vmlaldavaq_p_<supf><mode>"
6479 (set (match_operand:DI 0 "s_register_operand" "=r")
6480 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6481 (match_operand:MVE_5 2 "s_register_operand" "w")
6482 (match_operand:MVE_5 3 "s_register_operand" "w")
6483 (match_operand:HI 4 "vpr_register_operand" "Up")]
6487 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6488 [(set_attr "type" "mve_move")
6489 (set_attr "length""8")])
6492 ;; [vmlaldavaxq_p_s])
6494 (define_insn "mve_vmlaldavaxq_p_<supf><mode>"
6496 (set (match_operand:DI 0 "s_register_operand" "=r")
6497 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6498 (match_operand:MVE_5 2 "s_register_operand" "w")
6499 (match_operand:MVE_5 3 "s_register_operand" "w")
6500 (match_operand:HI 4 "vpr_register_operand" "Up")]
6504 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6505 [(set_attr "type" "mve_move")
6506 (set_attr "length""8")])
6509 ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
6511 (define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
6513 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6514 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6515 (match_operand:MVE_5 2 "s_register_operand" "w")
6516 (match_operand:SI 3 "mve_imm_8" "Rb")
6517 (match_operand:HI 4 "vpr_register_operand" "Up")]
6521 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6522 [(set_attr "type" "mve_move")
6523 (set_attr "length""8")])
6526 ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
6528 (define_insn "mve_vqrshrntq_m_n_<supf><mode>"
6530 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6531 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6532 (match_operand:MVE_5 2 "s_register_operand" "w")
6533 (match_operand:SI 3 "mve_imm_8" "Rb")
6534 (match_operand:HI 4 "vpr_register_operand" "Up")]
6538 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6539 [(set_attr "type" "mve_move")
6540 (set_attr "length""8")])
6543 ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
6545 (define_insn "mve_vqshrnbq_m_n_<supf><mode>"
6547 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6548 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6549 (match_operand:MVE_5 2 "s_register_operand" "w")
6550 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6551 (match_operand:HI 4 "vpr_register_operand" "Up")]
6555 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6556 [(set_attr "type" "mve_move")
6557 (set_attr "length""8")])
6560 ;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
6562 (define_insn "mve_vqshrntq_m_n_<supf><mode>"
6564 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6565 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6566 (match_operand:MVE_5 2 "s_register_operand" "w")
6567 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6568 (match_operand:HI 4 "vpr_register_operand" "Up")]
6572 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6573 [(set_attr "type" "mve_move")
6574 (set_attr "length""8")])
6577 ;; [vrmlaldavhaq_p_s])
6579 (define_insn "mve_vrmlaldavhaq_p_sv4si"
6581 (set (match_operand:DI 0 "s_register_operand" "=r")
6582 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6583 (match_operand:V4SI 2 "s_register_operand" "w")
6584 (match_operand:V4SI 3 "s_register_operand" "w")
6585 (match_operand:HI 4 "vpr_register_operand" "Up")]
6589 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
6590 [(set_attr "type" "mve_move")
6591 (set_attr "length""8")])
6594 ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
6596 (define_insn "mve_vrshrnbq_m_n_<supf><mode>"
6598 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6599 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6600 (match_operand:MVE_5 2 "s_register_operand" "w")
6601 (match_operand:SI 3 "mve_imm_8" "Rb")
6602 (match_operand:HI 4 "vpr_register_operand" "Up")]
6606 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6607 [(set_attr "type" "mve_move")
6608 (set_attr "length""8")])
6611 ;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
6613 (define_insn "mve_vrshrntq_m_n_<supf><mode>"
6615 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6616 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6617 (match_operand:MVE_5 2 "s_register_operand" "w")
6618 (match_operand:SI 3 "mve_imm_8" "Rb")
6619 (match_operand:HI 4 "vpr_register_operand" "Up")]
6623 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6624 [(set_attr "type" "mve_move")
6625 (set_attr "length""8")])
6628 ;; [vshllbq_m_n_u, vshllbq_m_n_s])
6630 (define_insn "mve_vshllbq_m_n_<supf><mode>"
6632 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6633 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6634 (match_operand:MVE_3 2 "s_register_operand" "w")
6635 (match_operand:SI 3 "immediate_operand" "i")
6636 (match_operand:HI 4 "vpr_register_operand" "Up")]
6640 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6641 [(set_attr "type" "mve_move")
6642 (set_attr "length""8")])
6645 ;; [vshlltq_m_n_u, vshlltq_m_n_s])
6647 (define_insn "mve_vshlltq_m_n_<supf><mode>"
6649 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6650 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6651 (match_operand:MVE_3 2 "s_register_operand" "w")
6652 (match_operand:SI 3 "immediate_operand" "i")
6653 (match_operand:HI 4 "vpr_register_operand" "Up")]
6657 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6658 [(set_attr "type" "mve_move")
6659 (set_attr "length""8")])
6662 ;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
6664 (define_insn "mve_vshrnbq_m_n_<supf><mode>"
6666 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6667 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6668 (match_operand:MVE_5 2 "s_register_operand" "w")
6669 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6670 (match_operand:HI 4 "vpr_register_operand" "Up")]
6674 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6675 [(set_attr "type" "mve_move")
6676 (set_attr "length""8")])
6679 ;; [vshrntq_m_n_s, vshrntq_m_n_u])
6681 (define_insn "mve_vshrntq_m_n_<supf><mode>"
6683 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6684 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6685 (match_operand:MVE_5 2 "s_register_operand" "w")
6686 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6687 (match_operand:HI 4 "vpr_register_operand" "Up")]
6691 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6692 [(set_attr "type" "mve_move")
6693 (set_attr "length""8")])
6696 ;; [vmlsldavaq_p_s])
6698 (define_insn "mve_vmlsldavaq_p_s<mode>"
6700 (set (match_operand:DI 0 "s_register_operand" "=r")
6701 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6702 (match_operand:MVE_5 2 "s_register_operand" "w")
6703 (match_operand:MVE_5 3 "s_register_operand" "w")
6704 (match_operand:HI 4 "vpr_register_operand" "Up")]
6708 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6709 [(set_attr "type" "mve_move")
6710 (set_attr "length""8")])
6713 ;; [vmlsldavaxq_p_s])
6715 (define_insn "mve_vmlsldavaxq_p_s<mode>"
6717 (set (match_operand:DI 0 "s_register_operand" "=r")
6718 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6719 (match_operand:MVE_5 2 "s_register_operand" "w")
6720 (match_operand:MVE_5 3 "s_register_operand" "w")
6721 (match_operand:HI 4 "vpr_register_operand" "Up")]
6725 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6726 [(set_attr "type" "mve_move")
6727 (set_attr "length""8")])
6730 ;; [vmullbq_poly_m_p])
6732 (define_insn "mve_vmullbq_poly_m_p<mode>"
6734 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6735 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6736 (match_operand:MVE_3 2 "s_register_operand" "w")
6737 (match_operand:MVE_3 3 "s_register_operand" "w")
6738 (match_operand:HI 4 "vpr_register_operand" "Up")]
6742 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6743 [(set_attr "type" "mve_move")
6744 (set_attr "length""8")])
6747 ;; [vmulltq_poly_m_p])
6749 (define_insn "mve_vmulltq_poly_m_p<mode>"
6751 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6752 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6753 (match_operand:MVE_3 2 "s_register_operand" "w")
6754 (match_operand:MVE_3 3 "s_register_operand" "w")
6755 (match_operand:HI 4 "vpr_register_operand" "Up")]
6759 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6760 [(set_attr "type" "mve_move")
6761 (set_attr "length""8")])
6764 ;; [vqdmullbq_m_n_s])
6766 (define_insn "mve_vqdmullbq_m_n_s<mode>"
6768 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6769 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6770 (match_operand:MVE_5 2 "s_register_operand" "w")
6771 (match_operand:<V_elem> 3 "s_register_operand" "r")
6772 (match_operand:HI 4 "vpr_register_operand" "Up")]
6776 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6777 [(set_attr "type" "mve_move")
6778 (set_attr "length""8")])
6783 (define_insn "mve_vqdmullbq_m_s<mode>"
6785 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6786 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6787 (match_operand:MVE_5 2 "s_register_operand" "w")
6788 (match_operand:MVE_5 3 "s_register_operand" "w")
6789 (match_operand:HI 4 "vpr_register_operand" "Up")]
6793 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6794 [(set_attr "type" "mve_move")
6795 (set_attr "length""8")])
6798 ;; [vqdmulltq_m_n_s])
6800 (define_insn "mve_vqdmulltq_m_n_s<mode>"
6802 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6803 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6804 (match_operand:MVE_5 2 "s_register_operand" "w")
6805 (match_operand:<V_elem> 3 "s_register_operand" "r")
6806 (match_operand:HI 4 "vpr_register_operand" "Up")]
6810 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
6811 [(set_attr "type" "mve_move")
6812 (set_attr "length""8")])
6817 (define_insn "mve_vqdmulltq_m_s<mode>"
6819 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6820 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6821 (match_operand:MVE_5 2 "s_register_operand" "w")
6822 (match_operand:MVE_5 3 "s_register_operand" "w")
6823 (match_operand:HI 4 "vpr_register_operand" "Up")]
6827 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6828 [(set_attr "type" "mve_move")
6829 (set_attr "length""8")])
6832 ;; [vqrshrunbq_m_n_s])
6834 (define_insn "mve_vqrshrunbq_m_n_s<mode>"
6836 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6837 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6838 (match_operand:MVE_5 2 "s_register_operand" "w")
6839 (match_operand:SI 3 "mve_imm_8" "Rb")
6840 (match_operand:HI 4 "vpr_register_operand" "Up")]
6844 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6845 [(set_attr "type" "mve_move")
6846 (set_attr "length""8")])
6849 ;; [vqrshruntq_m_n_s])
6851 (define_insn "mve_vqrshruntq_m_n_s<mode>"
6853 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6854 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6855 (match_operand:MVE_5 2 "s_register_operand" "w")
6856 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6857 (match_operand:HI 4 "vpr_register_operand" "Up")]
6861 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6862 [(set_attr "type" "mve_move")
6863 (set_attr "length""8")])
6866 ;; [vqshrunbq_m_n_s])
6868 (define_insn "mve_vqshrunbq_m_n_s<mode>"
6870 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6871 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6872 (match_operand:MVE_5 2 "s_register_operand" "w")
6873 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6874 (match_operand:HI 4 "vpr_register_operand" "Up")]
6878 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6879 [(set_attr "type" "mve_move")
6880 (set_attr "length""8")])
6883 ;; [vqshruntq_m_n_s])
6885 (define_insn "mve_vqshruntq_m_n_s<mode>"
6887 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6888 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6889 (match_operand:MVE_5 2 "s_register_operand" "w")
6890 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6891 (match_operand:HI 4 "vpr_register_operand" "Up")]
6895 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6896 [(set_attr "type" "mve_move")
6897 (set_attr "length""8")])
6900 ;; [vrmlaldavhaq_p_u])
6902 (define_insn "mve_vrmlaldavhaq_p_uv4si"
6904 (set (match_operand:DI 0 "s_register_operand" "=r")
6905 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6906 (match_operand:V4SI 2 "s_register_operand" "w")
6907 (match_operand:V4SI 3 "s_register_operand" "w")
6908 (match_operand:HI 4 "vpr_register_operand" "Up")]
6912 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
6913 [(set_attr "type" "mve_move")
6914 (set_attr "length""8")])
6917 ;; [vrmlaldavhaxq_p_s])
6919 (define_insn "mve_vrmlaldavhaxq_p_sv4si"
6921 (set (match_operand:DI 0 "s_register_operand" "=r")
6922 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6923 (match_operand:V4SI 2 "s_register_operand" "w")
6924 (match_operand:V4SI 3 "s_register_operand" "w")
6925 (match_operand:HI 4 "vpr_register_operand" "Up")]
6929 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6930 [(set_attr "type" "mve_move")
6931 (set_attr "length""8")])
6934 ;; [vrmlsldavhaq_p_s])
6936 (define_insn "mve_vrmlsldavhaq_p_sv4si"
6938 (set (match_operand:DI 0 "s_register_operand" "=r")
6939 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6940 (match_operand:V4SI 2 "s_register_operand" "w")
6941 (match_operand:V4SI 3 "s_register_operand" "w")
6942 (match_operand:HI 4 "vpr_register_operand" "Up")]
6946 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
6947 [(set_attr "type" "mve_move")
6948 (set_attr "length""8")])
6951 ;; [vrmlsldavhaxq_p_s])
6953 (define_insn "mve_vrmlsldavhaxq_p_sv4si"
6955 (set (match_operand:DI 0 "s_register_operand" "=r")
6956 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6957 (match_operand:V4SI 2 "s_register_operand" "w")
6958 (match_operand:V4SI 3 "s_register_operand" "w")
6959 (match_operand:HI 4 "vpr_register_operand" "Up")]
6963 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6964 [(set_attr "type" "mve_move")
6965 (set_attr "length""8")])
6969 (define_insn "mve_vabdq_m_f<mode>"
6971 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6972 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6973 (match_operand:MVE_0 2 "s_register_operand" "w")
6974 (match_operand:MVE_0 3 "s_register_operand" "w")
6975 (match_operand:HI 4 "vpr_register_operand" "Up")]
6978 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6979 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3"
6980 [(set_attr "type" "mve_move")
6981 (set_attr "length""8")])
6986 (define_insn "mve_vaddq_m_f<mode>"
6988 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6989 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6990 (match_operand:MVE_0 2 "s_register_operand" "w")
6991 (match_operand:MVE_0 3 "s_register_operand" "w")
6992 (match_operand:HI 4 "vpr_register_operand" "Up")]
6995 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6996 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3"
6997 [(set_attr "type" "mve_move")
6998 (set_attr "length""8")])
7003 (define_insn "mve_vaddq_m_n_f<mode>"
7005 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7006 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7007 (match_operand:MVE_0 2 "s_register_operand" "w")
7008 (match_operand:<V_elem> 3 "s_register_operand" "r")
7009 (match_operand:HI 4 "vpr_register_operand" "Up")]
7012 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7013 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3"
7014 [(set_attr "type" "mve_move")
7015 (set_attr "length""8")])
7020 (define_insn "mve_vandq_m_f<mode>"
7022 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7023 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7024 (match_operand:MVE_0 2 "s_register_operand" "w")
7025 (match_operand:MVE_0 3 "s_register_operand" "w")
7026 (match_operand:HI 4 "vpr_register_operand" "Up")]
7029 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7030 "vpst\;vandt %q0, %q2, %q3"
7031 [(set_attr "type" "mve_move")
7032 (set_attr "length""8")])
7037 (define_insn "mve_vbicq_m_f<mode>"
7039 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7040 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7041 (match_operand:MVE_0 2 "s_register_operand" "w")
7042 (match_operand:MVE_0 3 "s_register_operand" "w")
7043 (match_operand:HI 4 "vpr_register_operand" "Up")]
7046 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7047 "vpst\;vbict %q0, %q2, %q3"
7048 [(set_attr "type" "mve_move")
7049 (set_attr "length""8")])
7054 (define_insn "mve_vbrsrq_m_n_f<mode>"
7056 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7057 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7058 (match_operand:MVE_0 2 "s_register_operand" "w")
7059 (match_operand:SI 3 "s_register_operand" "r")
7060 (match_operand:HI 4 "vpr_register_operand" "Up")]
7063 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7064 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
7065 [(set_attr "type" "mve_move")
7066 (set_attr "length""8")])
7069 ;; [vcaddq_rot270_m_f])
7071 (define_insn "mve_vcaddq_rot270_m_f<mode>"
7073 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7074 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7075 (match_operand:MVE_0 2 "s_register_operand" "w")
7076 (match_operand:MVE_0 3 "s_register_operand" "w")
7077 (match_operand:HI 4 "vpr_register_operand" "Up")]
7080 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7081 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7082 [(set_attr "type" "mve_move")
7083 (set_attr "length""8")])
7086 ;; [vcaddq_rot90_m_f])
7088 (define_insn "mve_vcaddq_rot90_m_f<mode>"
7090 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7091 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7092 (match_operand:MVE_0 2 "s_register_operand" "w")
7093 (match_operand:MVE_0 3 "s_register_operand" "w")
7094 (match_operand:HI 4 "vpr_register_operand" "Up")]
7097 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7098 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7099 [(set_attr "type" "mve_move")
7100 (set_attr "length""8")])
7105 (define_insn "mve_vcmlaq_m_f<mode>"
7107 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7108 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7109 (match_operand:MVE_0 2 "s_register_operand" "w")
7110 (match_operand:MVE_0 3 "s_register_operand" "w")
7111 (match_operand:HI 4 "vpr_register_operand" "Up")]
7114 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7115 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7116 [(set_attr "type" "mve_move")
7117 (set_attr "length""8")])
7120 ;; [vcmlaq_rot180_m_f])
7122 (define_insn "mve_vcmlaq_rot180_m_f<mode>"
7124 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7125 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7126 (match_operand:MVE_0 2 "s_register_operand" "w")
7127 (match_operand:MVE_0 3 "s_register_operand" "w")
7128 (match_operand:HI 4 "vpr_register_operand" "Up")]
7131 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7132 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7133 [(set_attr "type" "mve_move")
7134 (set_attr "length""8")])
7137 ;; [vcmlaq_rot270_m_f])
7139 (define_insn "mve_vcmlaq_rot270_m_f<mode>"
7141 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7142 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7143 (match_operand:MVE_0 2 "s_register_operand" "w")
7144 (match_operand:MVE_0 3 "s_register_operand" "w")
7145 (match_operand:HI 4 "vpr_register_operand" "Up")]
7148 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7149 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7150 [(set_attr "type" "mve_move")
7151 (set_attr "length""8")])
7154 ;; [vcmlaq_rot90_m_f])
7156 (define_insn "mve_vcmlaq_rot90_m_f<mode>"
7158 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7159 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7160 (match_operand:MVE_0 2 "s_register_operand" "w")
7161 (match_operand:MVE_0 3 "s_register_operand" "w")
7162 (match_operand:HI 4 "vpr_register_operand" "Up")]
7165 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7166 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7167 [(set_attr "type" "mve_move")
7168 (set_attr "length""8")])
7173 (define_insn "mve_vcmulq_m_f<mode>"
7175 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7176 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7177 (match_operand:MVE_0 2 "s_register_operand" "w")
7178 (match_operand:MVE_0 3 "s_register_operand" "w")
7179 (match_operand:HI 4 "vpr_register_operand" "Up")]
7182 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7183 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7184 [(set_attr "type" "mve_move")
7185 (set_attr "length""8")])
7188 ;; [vcmulq_rot180_m_f])
7190 (define_insn "mve_vcmulq_rot180_m_f<mode>"
7192 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7193 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7194 (match_operand:MVE_0 2 "s_register_operand" "w")
7195 (match_operand:MVE_0 3 "s_register_operand" "w")
7196 (match_operand:HI 4 "vpr_register_operand" "Up")]
7199 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7200 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7201 [(set_attr "type" "mve_move")
7202 (set_attr "length""8")])
7205 ;; [vcmulq_rot270_m_f])
7207 (define_insn "mve_vcmulq_rot270_m_f<mode>"
7209 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7210 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7211 (match_operand:MVE_0 2 "s_register_operand" "w")
7212 (match_operand:MVE_0 3 "s_register_operand" "w")
7213 (match_operand:HI 4 "vpr_register_operand" "Up")]
7216 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7217 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7218 [(set_attr "type" "mve_move")
7219 (set_attr "length""8")])
7222 ;; [vcmulq_rot90_m_f])
7224 (define_insn "mve_vcmulq_rot90_m_f<mode>"
7226 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7227 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7228 (match_operand:MVE_0 2 "s_register_operand" "w")
7229 (match_operand:MVE_0 3 "s_register_operand" "w")
7230 (match_operand:HI 4 "vpr_register_operand" "Up")]
7233 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7234 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7235 [(set_attr "type" "mve_move")
7236 (set_attr "length""8")])
7241 (define_insn "mve_veorq_m_f<mode>"
7243 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7244 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7245 (match_operand:MVE_0 2 "s_register_operand" "w")
7246 (match_operand:MVE_0 3 "s_register_operand" "w")
7247 (match_operand:HI 4 "vpr_register_operand" "Up")]
7250 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7251 "vpst\;veort %q0, %q2, %q3"
7252 [(set_attr "type" "mve_move")
7253 (set_attr "length""8")])
7258 (define_insn "mve_vfmaq_m_f<mode>"
7260 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7261 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7262 (match_operand:MVE_0 2 "s_register_operand" "w")
7263 (match_operand:MVE_0 3 "s_register_operand" "w")
7264 (match_operand:HI 4 "vpr_register_operand" "Up")]
7267 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7268 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3"
7269 [(set_attr "type" "mve_move")
7270 (set_attr "length""8")])
7275 (define_insn "mve_vfmaq_m_n_f<mode>"
7277 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7278 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7279 (match_operand:MVE_0 2 "s_register_operand" "w")
7280 (match_operand:<V_elem> 3 "s_register_operand" "r")
7281 (match_operand:HI 4 "vpr_register_operand" "Up")]
7284 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7285 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3"
7286 [(set_attr "type" "mve_move")
7287 (set_attr "length""8")])
7292 (define_insn "mve_vfmasq_m_n_f<mode>"
7294 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7295 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7296 (match_operand:MVE_0 2 "s_register_operand" "w")
7297 (match_operand:<V_elem> 3 "s_register_operand" "r")
7298 (match_operand:HI 4 "vpr_register_operand" "Up")]
7301 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7302 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3"
7303 [(set_attr "type" "mve_move")
7304 (set_attr "length""8")])
7309 (define_insn "mve_vfmsq_m_f<mode>"
7311 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7312 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7313 (match_operand:MVE_0 2 "s_register_operand" "w")
7314 (match_operand:MVE_0 3 "s_register_operand" "w")
7315 (match_operand:HI 4 "vpr_register_operand" "Up")]
7318 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7319 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3"
7320 [(set_attr "type" "mve_move")
7321 (set_attr "length""8")])
7326 (define_insn "mve_vmaxnmq_m_f<mode>"
7328 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7329 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7330 (match_operand:MVE_0 2 "s_register_operand" "w")
7331 (match_operand:MVE_0 3 "s_register_operand" "w")
7332 (match_operand:HI 4 "vpr_register_operand" "Up")]
7335 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7336 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7337 [(set_attr "type" "mve_move")
7338 (set_attr "length""8")])
7343 (define_insn "mve_vminnmq_m_f<mode>"
7345 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7346 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7347 (match_operand:MVE_0 2 "s_register_operand" "w")
7348 (match_operand:MVE_0 3 "s_register_operand" "w")
7349 (match_operand:HI 4 "vpr_register_operand" "Up")]
7352 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7353 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7354 [(set_attr "type" "mve_move")
7355 (set_attr "length""8")])
7360 (define_insn "mve_vmulq_m_f<mode>"
7362 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7363 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7364 (match_operand:MVE_0 2 "s_register_operand" "w")
7365 (match_operand:MVE_0 3 "s_register_operand" "w")
7366 (match_operand:HI 4 "vpr_register_operand" "Up")]
7369 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7370 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3"
7371 [(set_attr "type" "mve_move")
7372 (set_attr "length""8")])
7377 (define_insn "mve_vmulq_m_n_f<mode>"
7379 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7380 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7381 (match_operand:MVE_0 2 "s_register_operand" "w")
7382 (match_operand:<V_elem> 3 "s_register_operand" "r")
7383 (match_operand:HI 4 "vpr_register_operand" "Up")]
7386 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7387 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3"
7388 [(set_attr "type" "mve_move")
7389 (set_attr "length""8")])
7394 (define_insn "mve_vornq_m_f<mode>"
7396 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7397 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7398 (match_operand:MVE_0 2 "s_register_operand" "w")
7399 (match_operand:MVE_0 3 "s_register_operand" "w")
7400 (match_operand:HI 4 "vpr_register_operand" "Up")]
7403 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7404 "vpst\;vornt %q0, %q2, %q3"
7405 [(set_attr "type" "mve_move")
7406 (set_attr "length""8")])
7411 (define_insn "mve_vorrq_m_f<mode>"
7413 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7414 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7415 (match_operand:MVE_0 2 "s_register_operand" "w")
7416 (match_operand:MVE_0 3 "s_register_operand" "w")
7417 (match_operand:HI 4 "vpr_register_operand" "Up")]
7420 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7421 "vpst\;vorrt %q0, %q2, %q3"
7422 [(set_attr "type" "mve_move")
7423 (set_attr "length""8")])
7428 (define_insn "mve_vsubq_m_f<mode>"
7430 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7431 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7432 (match_operand:MVE_0 2 "s_register_operand" "w")
7433 (match_operand:MVE_0 3 "s_register_operand" "w")
7434 (match_operand:HI 4 "vpr_register_operand" "Up")]
7437 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7438 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
7439 [(set_attr "type" "mve_move")
7440 (set_attr "length""8")])
7445 (define_insn "mve_vsubq_m_n_f<mode>"
7447 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7448 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7449 (match_operand:MVE_0 2 "s_register_operand" "w")
7450 (match_operand:<V_elem> 3 "s_register_operand" "r")
7451 (match_operand:HI 4 "vpr_register_operand" "Up")]
7454 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7455 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
7456 [(set_attr "type" "mve_move")
7457 (set_attr "length""8")])
7460 ;; [vstrbq_s vstrbq_u]
7462 (define_insn "mve_vstrbq_<supf><mode>"
7463 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7464 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
7470 int regno = REGNO (operands[1]);
7471 ops[1] = gen_rtx_REG (TImode, regno);
7472 ops[0] = operands[0];
7473 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
7476 [(set_attr "length" "4")])
7479 ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
7481 (define_expand "mve_vstrbq_scatter_offset_<supf><mode>"
7482 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7483 (match_operand:MVE_2 1 "s_register_operand")
7484 (match_operand:MVE_2 2 "s_register_operand")
7485 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7488 rtx ind = XEXP (operands[0], 0);
7489 gcc_assert (REG_P (ind));
7490 emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1],
7495 (define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn"
7496 [(set (mem:BLK (scratch))
7498 [(match_operand:SI 0 "register_operand" "r")
7499 (match_operand:MVE_2 1 "s_register_operand" "w")
7500 (match_operand:MVE_2 2 "s_register_operand" "w")]
7503 "vstrb.<V_sz_elem>\t%q2, [%0, %q1]"
7504 [(set_attr "length" "4")])
7507 ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
7509 (define_insn "mve_vstrwq_scatter_base_<supf>v4si"
7510 [(set (mem:BLK (scratch))
7512 [(match_operand:V4SI 0 "s_register_operand" "w")
7513 (match_operand:SI 1 "immediate_operand" "i")
7514 (match_operand:V4SI 2 "s_register_operand" "w")]
7520 ops[0] = operands[0];
7521 ops[1] = operands[1];
7522 ops[2] = operands[2];
7523 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
7526 [(set_attr "length" "4")])
7529 ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
7531 (define_insn "mve_vldrbq_gather_offset_<supf><mode>"
7532 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7533 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7534 (match_operand:MVE_2 2 "s_register_operand" "w")]
7540 ops[0] = operands[0];
7541 ops[1] = operands[1];
7542 ops[2] = operands[2];
7543 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7544 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
7546 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7549 [(set_attr "length" "4")])
7552 ;; [vldrbq_s vldrbq_u]
7554 (define_insn "mve_vldrbq_<supf><mode>"
7555 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7556 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")]
7562 int regno = REGNO (operands[0]);
7563 ops[0] = gen_rtx_REG (TImode, regno);
7564 ops[1] = operands[1];
7565 if (<V_sz_elem> == 8)
7566 output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops);
7568 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
7571 [(set_attr "length" "4")])
7574 ;; [vldrwq_gather_base_s vldrwq_gather_base_u]
7576 (define_insn "mve_vldrwq_gather_base_<supf>v4si"
7577 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7578 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7579 (match_operand:SI 2 "immediate_operand" "i")]
7585 ops[0] = operands[0];
7586 ops[1] = operands[1];
7587 ops[2] = operands[2];
7588 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7591 [(set_attr "length" "4")])
7594 ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
7596 (define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>"
7597 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7598 (match_operand:MVE_2 1 "s_register_operand")
7599 (match_operand:MVE_2 2 "s_register_operand")
7600 (match_operand:HI 3 "vpr_register_operand" "Up")
7601 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7604 rtx ind = XEXP (operands[0], 0);
7605 gcc_assert (REG_P (ind));
7607 gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
7613 (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn"
7614 [(set (mem:BLK (scratch))
7616 [(match_operand:SI 0 "register_operand" "r")
7617 (match_operand:MVE_2 1 "s_register_operand" "w")
7618 (match_operand:MVE_2 2 "s_register_operand" "w")
7619 (match_operand:HI 3 "vpr_register_operand" "Up")]
7622 "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]"
7623 [(set_attr "length" "8")])
7626 ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
7628 (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
7629 [(set (mem:BLK (scratch))
7631 [(match_operand:V4SI 0 "s_register_operand" "w")
7632 (match_operand:SI 1 "immediate_operand" "i")
7633 (match_operand:V4SI 2 "s_register_operand" "w")
7634 (match_operand:HI 3 "vpr_register_operand" "Up")]
7640 ops[0] = operands[0];
7641 ops[1] = operands[1];
7642 ops[2] = operands[2];
7643 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
7646 [(set_attr "length" "8")])
7649 ;; [vstrbq_p_s vstrbq_p_u]
7651 (define_insn "mve_vstrbq_p_<supf><mode>"
7652 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7653 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
7654 (match_operand:HI 2 "vpr_register_operand" "Up")]
7660 int regno = REGNO (operands[1]);
7661 ops[1] = gen_rtx_REG (TImode, regno);
7662 ops[0] = operands[0];
7663 output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops);
7666 [(set_attr "length" "8")])
7669 ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
7671 (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
7672 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7673 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7674 (match_operand:MVE_2 2 "s_register_operand" "w")
7675 (match_operand:HI 3 "vpr_register_operand" "Up")]
7681 ops[0] = operands[0];
7682 ops[1] = operands[1];
7683 ops[2] = operands[2];
7684 ops[3] = operands[3];
7685 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7686 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
7688 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7691 [(set_attr "length" "8")])
7694 ;; [vldrbq_z_s vldrbq_z_u]
7696 (define_insn "mve_vldrbq_z_<supf><mode>"
7697 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7698 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")
7699 (match_operand:HI 2 "vpr_register_operand" "Up")]
7705 int regno = REGNO (operands[0]);
7706 ops[0] = gen_rtx_REG (TImode, regno);
7707 ops[1] = operands[1];
7708 if (<V_sz_elem> == 8)
7709 output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops);
7711 output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
7714 [(set_attr "length" "8")])
7717 ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
7719 (define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
7720 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7721 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7722 (match_operand:SI 2 "immediate_operand" "i")
7723 (match_operand:HI 3 "vpr_register_operand" "Up")]
7729 ops[0] = operands[0];
7730 ops[1] = operands[1];
7731 ops[2] = operands[2];
7732 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7735 [(set_attr "length" "8")])
7740 (define_insn "mve_vldrhq_fv8hf"
7741 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7742 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")]
7745 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7748 int regno = REGNO (operands[0]);
7749 ops[0] = gen_rtx_REG (TImode, regno);
7750 ops[1] = operands[1];
7751 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7754 [(set_attr "length" "4")])
7757 ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
7759 (define_insn "mve_vldrhq_gather_offset_<supf><mode>"
7760 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7761 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7762 (match_operand:MVE_6 2 "s_register_operand" "w")]
7768 ops[0] = operands[0];
7769 ops[1] = operands[1];
7770 ops[2] = operands[2];
7771 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7772 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
7774 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7777 [(set_attr "length" "4")])
7780 ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
7782 (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
7783 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7784 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7785 (match_operand:MVE_6 2 "s_register_operand" "w")
7786 (match_operand:HI 3 "vpr_register_operand" "Up")
7792 ops[0] = operands[0];
7793 ops[1] = operands[1];
7794 ops[2] = operands[2];
7795 ops[3] = operands[3];
7796 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7797 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
7799 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7802 [(set_attr "length" "8")])
7805 ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
7807 (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
7808 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7809 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7810 (match_operand:MVE_6 2 "s_register_operand" "w")]
7816 ops[0] = operands[0];
7817 ops[1] = operands[1];
7818 ops[2] = operands[2];
7819 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7820 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7822 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7825 [(set_attr "length" "4")])
7828 ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
7830 (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
7831 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7832 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7833 (match_operand:MVE_6 2 "s_register_operand" "w")
7834 (match_operand:HI 3 "vpr_register_operand" "Up")
7840 ops[0] = operands[0];
7841 ops[1] = operands[1];
7842 ops[2] = operands[2];
7843 ops[3] = operands[3];
7844 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7845 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7847 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7850 [(set_attr "length" "8")])
7853 ;; [vldrhq_s, vldrhq_u]
7855 (define_insn "mve_vldrhq_<supf><mode>"
7856 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7857 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")]
7863 int regno = REGNO (operands[0]);
7864 ops[0] = gen_rtx_REG (TImode, regno);
7865 ops[1] = operands[1];
7866 if (<V_sz_elem> == 16)
7867 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7869 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
7872 [(set_attr "length" "4")])
7877 (define_insn "mve_vldrhq_z_fv8hf"
7878 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7879 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")
7880 (match_operand:HI 2 "vpr_register_operand" "Up")]
7883 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7886 int regno = REGNO (operands[0]);
7887 ops[0] = gen_rtx_REG (TImode, regno);
7888 ops[1] = operands[1];
7889 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7892 [(set_attr "length" "8")])
7895 ;; [vldrhq_z_s vldrhq_z_u]
7897 (define_insn "mve_vldrhq_z_<supf><mode>"
7898 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7899 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")
7900 (match_operand:HI 2 "vpr_register_operand" "Up")]
7906 int regno = REGNO (operands[0]);
7907 ops[0] = gen_rtx_REG (TImode, regno);
7908 ops[1] = operands[1];
7909 if (<V_sz_elem> == 16)
7910 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7912 output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
7915 [(set_attr "length" "8")])
7920 (define_insn "mve_vldrwq_fv4sf"
7921 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7922 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")]
7925 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7928 int regno = REGNO (operands[0]);
7929 ops[0] = gen_rtx_REG (TImode, regno);
7930 ops[1] = operands[1];
7931 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7934 [(set_attr "length" "4")])
7937 ;; [vldrwq_s vldrwq_u]
7939 (define_insn "mve_vldrwq_<supf>v4si"
7940 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7941 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")]
7947 int regno = REGNO (operands[0]);
7948 ops[0] = gen_rtx_REG (TImode, regno);
7949 ops[1] = operands[1];
7950 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7953 [(set_attr "length" "4")])
7958 (define_insn "mve_vldrwq_z_fv4sf"
7959 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7960 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")
7961 (match_operand:HI 2 "vpr_register_operand" "Up")]
7964 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7967 int regno = REGNO (operands[0]);
7968 ops[0] = gen_rtx_REG (TImode, regno);
7969 ops[1] = operands[1];
7970 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7973 [(set_attr "length" "8")])
7976 ;; [vldrwq_z_s vldrwq_z_u]
7978 (define_insn "mve_vldrwq_z_<supf>v4si"
7979 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7980 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")
7981 (match_operand:HI 2 "vpr_register_operand" "Up")]
7987 int regno = REGNO (operands[0]);
7988 ops[0] = gen_rtx_REG (TImode, regno);
7989 ops[1] = operands[1];
7990 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7993 [(set_attr "length" "8")])
7995 (define_expand "mve_vld1q_f<mode>"
7996 [(match_operand:MVE_0 0 "s_register_operand")
7997 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F)
7999 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8001 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8005 (define_expand "mve_vld1q_<supf><mode>"
8006 [(match_operand:MVE_2 0 "s_register_operand")
8007 (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q)
8011 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8016 ;; [vldrdq_gather_base_s vldrdq_gather_base_u]
8018 (define_insn "mve_vldrdq_gather_base_<supf>v2di"
8019 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8020 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8021 (match_operand:SI 2 "immediate_operand" "i")]
8027 ops[0] = operands[0];
8028 ops[1] = operands[1];
8029 ops[2] = operands[2];
8030 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
8033 [(set_attr "length" "4")])
8036 ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
8038 (define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
8039 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8040 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8041 (match_operand:SI 2 "immediate_operand" "i")
8042 (match_operand:HI 3 "vpr_register_operand" "Up")]
8048 ops[0] = operands[0];
8049 ops[1] = operands[1];
8050 ops[2] = operands[2];
8051 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
8054 [(set_attr "length" "8")])
8057 ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
8059 (define_insn "mve_vldrdq_gather_offset_<supf>v2di"
8060 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8061 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8062 (match_operand:V2DI 2 "s_register_operand" "w")]
8068 ops[0] = operands[0];
8069 ops[1] = operands[1];
8070 ops[2] = operands[2];
8071 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
8074 [(set_attr "length" "4")])
8077 ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
8079 (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
8080 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8081 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8082 (match_operand:V2DI 2 "s_register_operand" "w")
8083 (match_operand:HI 3 "vpr_register_operand" "Up")]
8089 ops[0] = operands[0];
8090 ops[1] = operands[1];
8091 ops[2] = operands[2];
8092 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
8095 [(set_attr "length" "8")])
8098 ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
8100 (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
8101 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8102 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8103 (match_operand:V2DI 2 "s_register_operand" "w")]
8109 ops[0] = operands[0];
8110 ops[1] = operands[1];
8111 ops[2] = operands[2];
8112 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8115 [(set_attr "length" "4")])
8118 ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
8120 (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
8121 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8122 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8123 (match_operand:V2DI 2 "s_register_operand" "w")
8124 (match_operand:HI 3 "vpr_register_operand" "Up")]
8130 ops[0] = operands[0];
8131 ops[1] = operands[1];
8132 ops[2] = operands[2];
8133 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8136 [(set_attr "length" "8")])
8139 ;; [vldrhq_gather_offset_f]
8141 (define_insn "mve_vldrhq_gather_offset_fv8hf"
8142 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8143 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8144 (match_operand:V8HI 2 "s_register_operand" "w")]
8147 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8150 ops[0] = operands[0];
8151 ops[1] = operands[1];
8152 ops[2] = operands[2];
8153 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
8156 [(set_attr "length" "4")])
8159 ;; [vldrhq_gather_offset_z_f]
8161 (define_insn "mve_vldrhq_gather_offset_z_fv8hf"
8162 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8163 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8164 (match_operand:V8HI 2 "s_register_operand" "w")
8165 (match_operand:HI 3 "vpr_register_operand" "Up")]
8168 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8171 ops[0] = operands[0];
8172 ops[1] = operands[1];
8173 ops[2] = operands[2];
8174 ops[3] = operands[3];
8175 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
8178 [(set_attr "length" "8")])
8181 ;; [vldrhq_gather_shifted_offset_f]
8183 (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
8184 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8185 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8186 (match_operand:V8HI 2 "s_register_operand" "w")]
8189 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8192 ops[0] = operands[0];
8193 ops[1] = operands[1];
8194 ops[2] = operands[2];
8195 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8198 [(set_attr "length" "4")])
8201 ;; [vldrhq_gather_shifted_offset_z_f]
8203 (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
8204 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8205 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8206 (match_operand:V8HI 2 "s_register_operand" "w")
8207 (match_operand:HI 3 "vpr_register_operand" "Up")]
8210 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8213 ops[0] = operands[0];
8214 ops[1] = operands[1];
8215 ops[2] = operands[2];
8216 ops[3] = operands[3];
8217 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8220 [(set_attr "length" "8")])
8223 ;; [vldrwq_gather_base_f]
8225 (define_insn "mve_vldrwq_gather_base_fv4sf"
8226 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8227 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8228 (match_operand:SI 2 "immediate_operand" "i")]
8231 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8234 ops[0] = operands[0];
8235 ops[1] = operands[1];
8236 ops[2] = operands[2];
8237 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
8240 [(set_attr "length" "4")])
8243 ;; [vldrwq_gather_base_z_f]
8245 (define_insn "mve_vldrwq_gather_base_z_fv4sf"
8246 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8247 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8248 (match_operand:SI 2 "immediate_operand" "i")
8249 (match_operand:HI 3 "vpr_register_operand" "Up")]
8252 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8255 ops[0] = operands[0];
8256 ops[1] = operands[1];
8257 ops[2] = operands[2];
8258 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
8261 [(set_attr "length" "8")])
8264 ;; [vldrwq_gather_offset_f]
8266 (define_insn "mve_vldrwq_gather_offset_fv4sf"
8267 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8268 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8269 (match_operand:V4SI 2 "s_register_operand" "w")]
8272 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8275 ops[0] = operands[0];
8276 ops[1] = operands[1];
8277 ops[2] = operands[2];
8278 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8281 [(set_attr "length" "4")])
8284 ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
8286 (define_insn "mve_vldrwq_gather_offset_<supf>v4si"
8287 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8288 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8289 (match_operand:V4SI 2 "s_register_operand" "w")]
8295 ops[0] = operands[0];
8296 ops[1] = operands[1];
8297 ops[2] = operands[2];
8298 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8301 [(set_attr "length" "4")])
8304 ;; [vldrwq_gather_offset_z_f]
8306 (define_insn "mve_vldrwq_gather_offset_z_fv4sf"
8307 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8308 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8309 (match_operand:V4SI 2 "s_register_operand" "w")
8310 (match_operand:HI 3 "vpr_register_operand" "Up")]
8313 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8316 ops[0] = operands[0];
8317 ops[1] = operands[1];
8318 ops[2] = operands[2];
8319 ops[3] = operands[3];
8320 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8323 [(set_attr "length" "8")])
8326 ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
8328 (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
8329 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8330 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8331 (match_operand:V4SI 2 "s_register_operand" "w")
8332 (match_operand:HI 3 "vpr_register_operand" "Up")]
8338 ops[0] = operands[0];
8339 ops[1] = operands[1];
8340 ops[2] = operands[2];
8341 ops[3] = operands[3];
8342 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8345 [(set_attr "length" "8")])
8348 ;; [vldrwq_gather_shifted_offset_f]
8350 (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
8351 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8352 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8353 (match_operand:V4SI 2 "s_register_operand" "w")]
8356 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8359 ops[0] = operands[0];
8360 ops[1] = operands[1];
8361 ops[2] = operands[2];
8362 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8365 [(set_attr "length" "4")])
8368 ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
8370 (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
8371 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8372 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8373 (match_operand:V4SI 2 "s_register_operand" "w")]
8379 ops[0] = operands[0];
8380 ops[1] = operands[1];
8381 ops[2] = operands[2];
8382 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8385 [(set_attr "length" "4")])
8388 ;; [vldrwq_gather_shifted_offset_z_f]
8390 (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
8391 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8392 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8393 (match_operand:V4SI 2 "s_register_operand" "w")
8394 (match_operand:HI 3 "vpr_register_operand" "Up")]
8397 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8400 ops[0] = operands[0];
8401 ops[1] = operands[1];
8402 ops[2] = operands[2];
8403 ops[3] = operands[3];
8404 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8407 [(set_attr "length" "8")])
8410 ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
8412 (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
8413 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8414 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8415 (match_operand:V4SI 2 "s_register_operand" "w")
8416 (match_operand:HI 3 "vpr_register_operand" "Up")]
8422 ops[0] = operands[0];
8423 ops[1] = operands[1];
8424 ops[2] = operands[2];
8425 ops[3] = operands[3];
8426 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8429 [(set_attr "length" "8")])
8434 (define_insn "mve_vstrhq_fv8hf"
8435 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8436 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
8439 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8442 int regno = REGNO (operands[1]);
8443 ops[1] = gen_rtx_REG (TImode, regno);
8444 ops[0] = operands[0];
8445 output_asm_insn ("vstrh.16\t%q1, %E0",ops);
8448 [(set_attr "length" "4")])
8453 (define_insn "mve_vstrhq_p_fv8hf"
8454 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8455 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
8456 (match_operand:HI 2 "vpr_register_operand" "Up")]
8459 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8462 int regno = REGNO (operands[1]);
8463 ops[1] = gen_rtx_REG (TImode, regno);
8464 ops[0] = operands[0];
8465 output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops);
8468 [(set_attr "length" "8")])
8471 ;; [vstrhq_p_s vstrhq_p_u]
8473 (define_insn "mve_vstrhq_p_<supf><mode>"
8474 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8475 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
8476 (match_operand:HI 2 "vpr_register_operand" "Up")]
8482 int regno = REGNO (operands[1]);
8483 ops[1] = gen_rtx_REG (TImode, regno);
8484 ops[0] = operands[0];
8485 output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops);
8488 [(set_attr "length" "8")])
8491 ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
8493 (define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>"
8494 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8495 (match_operand:MVE_6 1 "s_register_operand")
8496 (match_operand:MVE_6 2 "s_register_operand")
8497 (match_operand:HI 3 "vpr_register_operand")
8498 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8501 rtx ind = XEXP (operands[0], 0);
8502 gcc_assert (REG_P (ind));
8504 gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
8510 (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn"
8511 [(set (mem:BLK (scratch))
8513 [(match_operand:SI 0 "register_operand" "r")
8514 (match_operand:MVE_6 1 "s_register_operand" "w")
8515 (match_operand:MVE_6 2 "s_register_operand" "w")
8516 (match_operand:HI 3 "vpr_register_operand" "Up")]
8519 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]"
8520 [(set_attr "length" "8")])
8523 ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
8525 (define_expand "mve_vstrhq_scatter_offset_<supf><mode>"
8526 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8527 (match_operand:MVE_6 1 "s_register_operand")
8528 (match_operand:MVE_6 2 "s_register_operand")
8529 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8532 rtx ind = XEXP (operands[0], 0);
8533 gcc_assert (REG_P (ind));
8534 emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1],
8539 (define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn"
8540 [(set (mem:BLK (scratch))
8542 [(match_operand:SI 0 "register_operand" "r")
8543 (match_operand:MVE_6 1 "s_register_operand" "w")
8544 (match_operand:MVE_6 2 "s_register_operand" "w")]
8547 "vstrh.<V_sz_elem>\t%q2, [%0, %q1]"
8548 [(set_attr "length" "4")])
8551 ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
8553 (define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
8554 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8555 (match_operand:MVE_6 1 "s_register_operand")
8556 (match_operand:MVE_6 2 "s_register_operand")
8557 (match_operand:HI 3 "vpr_register_operand")
8558 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8561 rtx ind = XEXP (operands[0], 0);
8562 gcc_assert (REG_P (ind));
8564 gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1],
8570 (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn"
8571 [(set (mem:BLK (scratch))
8573 [(match_operand:SI 0 "register_operand" "r")
8574 (match_operand:MVE_6 1 "s_register_operand" "w")
8575 (match_operand:MVE_6 2 "s_register_operand" "w")
8576 (match_operand:HI 3 "vpr_register_operand" "Up")]
8579 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8580 [(set_attr "length" "8")])
8583 ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
8585 (define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
8586 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8587 (match_operand:MVE_6 1 "s_register_operand")
8588 (match_operand:MVE_6 2 "s_register_operand")
8589 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8592 rtx ind = XEXP (operands[0], 0);
8593 gcc_assert (REG_P (ind));
8595 gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1],
8600 (define_insn "mve_vstrhq_scatter_shifted_offset_<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")]
8608 "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8609 [(set_attr "length" "4")])
8612 ;; [vstrhq_s, vstrhq_u]
8614 (define_insn "mve_vstrhq_<supf><mode>"
8615 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8616 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
8622 int regno = REGNO (operands[1]);
8623 ops[1] = gen_rtx_REG (TImode, regno);
8624 ops[0] = operands[0];
8625 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
8628 [(set_attr "length" "4")])
8633 (define_insn "mve_vstrwq_fv4sf"
8634 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8635 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
8638 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8641 int regno = REGNO (operands[1]);
8642 ops[1] = gen_rtx_REG (TImode, regno);
8643 ops[0] = operands[0];
8644 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8647 [(set_attr "length" "4")])
8652 (define_insn "mve_vstrwq_p_fv4sf"
8653 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8654 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
8655 (match_operand:HI 2 "vpr_register_operand" "Up")]
8658 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8661 int regno = REGNO (operands[1]);
8662 ops[1] = gen_rtx_REG (TImode, regno);
8663 ops[0] = operands[0];
8664 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8667 [(set_attr "length" "8")])
8670 ;; [vstrwq_p_s vstrwq_p_u]
8672 (define_insn "mve_vstrwq_p_<supf>v4si"
8673 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8674 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8675 (match_operand:HI 2 "vpr_register_operand" "Up")]
8681 int regno = REGNO (operands[1]);
8682 ops[1] = gen_rtx_REG (TImode, regno);
8683 ops[0] = operands[0];
8684 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8687 [(set_attr "length" "8")])
8690 ;; [vstrwq_s vstrwq_u]
8692 (define_insn "mve_vstrwq_<supf>v4si"
8693 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8694 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
8700 int regno = REGNO (operands[1]);
8701 ops[1] = gen_rtx_REG (TImode, regno);
8702 ops[0] = operands[0];
8703 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8706 [(set_attr "length" "4")])
8708 (define_expand "mve_vst1q_f<mode>"
8709 [(match_operand:<MVE_CNVT> 0 "mve_memory_operand")
8710 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
8712 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8714 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8718 (define_expand "mve_vst1q_<supf><mode>"
8719 [(match_operand:MVE_2 0 "mve_memory_operand")
8720 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
8724 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8729 ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
8731 (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
8732 [(set (mem:BLK (scratch))
8734 [(match_operand:V2DI 0 "s_register_operand" "w")
8735 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8736 (match_operand:V2DI 2 "s_register_operand" "w")
8737 (match_operand:HI 3 "vpr_register_operand" "Up")]
8743 ops[0] = operands[0];
8744 ops[1] = operands[1];
8745 ops[2] = operands[2];
8746 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
8749 [(set_attr "length" "8")])
8752 ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
8754 (define_insn "mve_vstrdq_scatter_base_<supf>v2di"
8755 [(set (mem:BLK (scratch))
8757 [(match_operand:V2DI 0 "s_register_operand" "=w")
8758 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8759 (match_operand:V2DI 2 "s_register_operand" "w")]
8765 ops[0] = operands[0];
8766 ops[1] = operands[1];
8767 ops[2] = operands[2];
8768 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
8771 [(set_attr "length" "4")])
8774 ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
8776 (define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di"
8777 [(match_operand:V2DI 0 "mve_scatter_memory")
8778 (match_operand:V2DI 1 "s_register_operand")
8779 (match_operand:V2DI 2 "s_register_operand")
8780 (match_operand:HI 3 "vpr_register_operand")
8781 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8784 rtx ind = XEXP (operands[0], 0);
8785 gcc_assert (REG_P (ind));
8786 emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1],
8792 (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn"
8793 [(set (mem:BLK (scratch))
8795 [(match_operand:SI 0 "register_operand" "r")
8796 (match_operand:V2DI 1 "s_register_operand" "w")
8797 (match_operand:V2DI 2 "s_register_operand" "w")
8798 (match_operand:HI 3 "vpr_register_operand" "Up")]
8801 "vpst\;vstrdt.64\t%q2, [%0, %q1]"
8802 [(set_attr "length" "8")])
8805 ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
8807 (define_expand "mve_vstrdq_scatter_offset_<supf>v2di"
8808 [(match_operand:V2DI 0 "mve_scatter_memory")
8809 (match_operand:V2DI 1 "s_register_operand")
8810 (match_operand:V2DI 2 "s_register_operand")
8811 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8814 rtx ind = XEXP (operands[0], 0);
8815 gcc_assert (REG_P (ind));
8816 emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1],
8821 (define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn"
8822 [(set (mem:BLK (scratch))
8824 [(match_operand:SI 0 "register_operand" "r")
8825 (match_operand:V2DI 1 "s_register_operand" "w")
8826 (match_operand:V2DI 2 "s_register_operand" "w")]
8829 "vstrd.64\t%q2, [%0, %q1]"
8830 [(set_attr "length" "4")])
8833 ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
8835 (define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
8836 [(match_operand:V2DI 0 "mve_scatter_memory")
8837 (match_operand:V2DI 1 "s_register_operand")
8838 (match_operand:V2DI 2 "s_register_operand")
8839 (match_operand:HI 3 "vpr_register_operand")
8840 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8843 rtx ind = XEXP (operands[0], 0);
8844 gcc_assert (REG_P (ind));
8846 gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1],
8852 (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn"
8853 [(set (mem:BLK (scratch))
8855 [(match_operand:SI 0 "register_operand" "r")
8856 (match_operand:V2DI 1 "s_register_operand" "w")
8857 (match_operand:V2DI 2 "s_register_operand" "w")
8858 (match_operand:HI 3 "vpr_register_operand" "Up")]
8861 "vpst\;vstrdt.64\t%q2, [%0, %q1, UXTW #3]"
8862 [(set_attr "length" "8")])
8865 ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
8867 (define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
8868 [(match_operand:V2DI 0 "mve_scatter_memory")
8869 (match_operand:V2DI 1 "s_register_operand")
8870 (match_operand:V2DI 2 "s_register_operand")
8871 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8874 rtx ind = XEXP (operands[0], 0);
8875 gcc_assert (REG_P (ind));
8877 gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1],
8882 (define_insn "mve_vstrdq_scatter_shifted_offset_<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")]
8890 "vstrd.64\t%q2, [%0, %q1, UXTW #3]"
8891 [(set_attr "length" "4")])
8894 ;; [vstrhq_scatter_offset_f]
8896 (define_expand "mve_vstrhq_scatter_offset_fv8hf"
8897 [(match_operand:V8HI 0 "mve_scatter_memory")
8898 (match_operand:V8HI 1 "s_register_operand")
8899 (match_operand:V8HF 2 "s_register_operand")
8900 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8901 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8903 rtx ind = XEXP (operands[0], 0);
8904 gcc_assert (REG_P (ind));
8905 emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1],
8910 (define_insn "mve_vstrhq_scatter_offset_fv8hf_insn"
8911 [(set (mem:BLK (scratch))
8913 [(match_operand:SI 0 "register_operand" "r")
8914 (match_operand:V8HI 1 "s_register_operand" "w")
8915 (match_operand:V8HF 2 "s_register_operand" "w")]
8917 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8918 "vstrh.16\t%q2, [%0, %q1]"
8919 [(set_attr "length" "4")])
8922 ;; [vstrhq_scatter_offset_p_f]
8924 (define_expand "mve_vstrhq_scatter_offset_p_fv8hf"
8925 [(match_operand:V8HI 0 "mve_scatter_memory")
8926 (match_operand:V8HI 1 "s_register_operand")
8927 (match_operand:V8HF 2 "s_register_operand")
8928 (match_operand:HI 3 "vpr_register_operand")
8929 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8930 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8932 rtx ind = XEXP (operands[0], 0);
8933 gcc_assert (REG_P (ind));
8934 emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1],
8940 (define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn"
8941 [(set (mem:BLK (scratch))
8943 [(match_operand:SI 0 "register_operand" "r")
8944 (match_operand:V8HI 1 "s_register_operand" "w")
8945 (match_operand:V8HF 2 "s_register_operand" "w")
8946 (match_operand:HI 3 "vpr_register_operand" "Up")]
8948 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8949 "vpst\;vstrht.16\t%q2, [%0, %q1]"
8950 [(set_attr "length" "8")])
8953 ;; [vstrhq_scatter_shifted_offset_f]
8955 (define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf"
8956 [(match_operand:V8HI 0 "memory_operand" "=Us")
8957 (match_operand:V8HI 1 "s_register_operand" "w")
8958 (match_operand:V8HF 2 "s_register_operand" "w")
8959 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8960 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8962 rtx ind = XEXP (operands[0], 0);
8963 gcc_assert (REG_P (ind));
8964 emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1],
8969 (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn"
8970 [(set (mem:BLK (scratch))
8972 [(match_operand:SI 0 "register_operand" "r")
8973 (match_operand:V8HI 1 "s_register_operand" "w")
8974 (match_operand:V8HF 2 "s_register_operand" "w")]
8976 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8977 "vstrh.16\t%q2, [%0, %q1, uxtw #1]"
8978 [(set_attr "length" "4")])
8981 ;; [vstrhq_scatter_shifted_offset_p_f]
8983 (define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
8984 [(match_operand:V8HI 0 "memory_operand" "=Us")
8985 (match_operand:V8HI 1 "s_register_operand" "w")
8986 (match_operand:V8HF 2 "s_register_operand" "w")
8987 (match_operand:HI 3 "vpr_register_operand" "Up")
8988 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8989 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8991 rtx ind = XEXP (operands[0], 0);
8992 gcc_assert (REG_P (ind));
8994 gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1],
9000 (define_insn "mve_vstrhq_scatter_shifted_offset_p_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")
9006 (match_operand:HI 3 "vpr_register_operand" "Up")]
9008 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9009 "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]"
9010 [(set_attr "length" "8")])
9013 ;; [vstrwq_scatter_base_f]
9015 (define_insn "mve_vstrwq_scatter_base_fv4sf"
9016 [(set (mem:BLK (scratch))
9018 [(match_operand:V4SI 0 "s_register_operand" "w")
9019 (match_operand:SI 1 "immediate_operand" "i")
9020 (match_operand:V4SF 2 "s_register_operand" "w")]
9023 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9026 ops[0] = operands[0];
9027 ops[1] = operands[1];
9028 ops[2] = operands[2];
9029 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
9032 [(set_attr "length" "4")])
9035 ;; [vstrwq_scatter_base_p_f]
9037 (define_insn "mve_vstrwq_scatter_base_p_fv4sf"
9038 [(set (mem:BLK (scratch))
9040 [(match_operand:V4SI 0 "s_register_operand" "w")
9041 (match_operand:SI 1 "immediate_operand" "i")
9042 (match_operand:V4SF 2 "s_register_operand" "w")
9043 (match_operand:HI 3 "vpr_register_operand" "Up")]
9046 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9049 ops[0] = operands[0];
9050 ops[1] = operands[1];
9051 ops[2] = operands[2];
9052 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
9055 [(set_attr "length" "8")])
9058 ;; [vstrwq_scatter_offset_f]
9060 (define_expand "mve_vstrwq_scatter_offset_fv4sf"
9061 [(match_operand:V4SI 0 "mve_scatter_memory")
9062 (match_operand:V4SI 1 "s_register_operand")
9063 (match_operand:V4SF 2 "s_register_operand")
9064 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9065 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9067 rtx ind = XEXP (operands[0], 0);
9068 gcc_assert (REG_P (ind));
9069 emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1],
9074 (define_insn "mve_vstrwq_scatter_offset_fv4sf_insn"
9075 [(set (mem:BLK (scratch))
9077 [(match_operand:SI 0 "register_operand" "r")
9078 (match_operand:V4SI 1 "s_register_operand" "w")
9079 (match_operand:V4SF 2 "s_register_operand" "w")]
9081 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9082 "vstrw.32\t%q2, [%0, %q1]"
9083 [(set_attr "length" "4")])
9086 ;; [vstrwq_scatter_offset_p_f]
9088 (define_expand "mve_vstrwq_scatter_offset_p_fv4sf"
9089 [(match_operand:V4SI 0 "mve_scatter_memory")
9090 (match_operand:V4SI 1 "s_register_operand")
9091 (match_operand:V4SF 2 "s_register_operand")
9092 (match_operand:HI 3 "vpr_register_operand")
9093 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9094 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9096 rtx ind = XEXP (operands[0], 0);
9097 gcc_assert (REG_P (ind));
9098 emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1],
9104 (define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn"
9105 [(set (mem:BLK (scratch))
9107 [(match_operand:SI 0 "register_operand" "r")
9108 (match_operand:V4SI 1 "s_register_operand" "w")
9109 (match_operand:V4SF 2 "s_register_operand" "w")
9110 (match_operand:HI 3 "vpr_register_operand" "Up")]
9112 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9113 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9114 [(set_attr "length" "8")])
9117 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9119 (define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si"
9120 [(match_operand:V4SI 0 "mve_scatter_memory")
9121 (match_operand:V4SI 1 "s_register_operand")
9122 (match_operand:V4SI 2 "s_register_operand")
9123 (match_operand:HI 3 "vpr_register_operand")
9124 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9127 rtx ind = XEXP (operands[0], 0);
9128 gcc_assert (REG_P (ind));
9129 emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1],
9135 (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn"
9136 [(set (mem:BLK (scratch))
9138 [(match_operand:SI 0 "register_operand" "r")
9139 (match_operand:V4SI 1 "s_register_operand" "w")
9140 (match_operand:V4SI 2 "s_register_operand" "w")
9141 (match_operand:HI 3 "vpr_register_operand" "Up")]
9144 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9145 [(set_attr "length" "8")])
9148 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9150 (define_expand "mve_vstrwq_scatter_offset_<supf>v4si"
9151 [(match_operand:V4SI 0 "mve_scatter_memory")
9152 (match_operand:V4SI 1 "s_register_operand")
9153 (match_operand:V4SI 2 "s_register_operand")
9154 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9157 rtx ind = XEXP (operands[0], 0);
9158 gcc_assert (REG_P (ind));
9159 emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1],
9164 (define_insn "mve_vstrwq_scatter_offset_<supf>v4si_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:V4SI 2 "s_register_operand" "w")]
9172 "vstrw.32\t%q2, [%0, %q1]"
9173 [(set_attr "length" "4")])
9176 ;; [vstrwq_scatter_shifted_offset_f]
9178 (define_expand "mve_vstrwq_scatter_shifted_offset_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 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9183 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9185 rtx ind = XEXP (operands[0], 0);
9186 gcc_assert (REG_P (ind));
9187 emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1],
9192 (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn"
9193 [(set (mem:BLK (scratch))
9195 [(match_operand:SI 0 "register_operand" "r")
9196 (match_operand:V4SI 1 "s_register_operand" "w")
9197 (match_operand:V4SF 2 "s_register_operand" "w")]
9199 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9200 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9201 [(set_attr "length" "8")])
9204 ;; [vstrwq_scatter_shifted_offset_p_f]
9206 (define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
9207 [(match_operand:V4SI 0 "mve_scatter_memory")
9208 (match_operand:V4SI 1 "s_register_operand")
9209 (match_operand:V4SF 2 "s_register_operand")
9210 (match_operand:HI 3 "vpr_register_operand")
9211 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9212 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9214 rtx ind = XEXP (operands[0], 0);
9215 gcc_assert (REG_P (ind));
9217 gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1],
9223 (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn"
9224 [(set (mem:BLK (scratch))
9226 [(match_operand:SI 0 "register_operand" "r")
9227 (match_operand:V4SI 1 "s_register_operand" "w")
9228 (match_operand:V4SF 2 "s_register_operand" "w")
9229 (match_operand:HI 3 "vpr_register_operand" "Up")]
9231 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9232 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9233 [(set_attr "length" "8")])
9236 ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
9238 (define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
9239 [(match_operand:V4SI 0 "mve_scatter_memory")
9240 (match_operand:V4SI 1 "s_register_operand")
9241 (match_operand:V4SI 2 "s_register_operand")
9242 (match_operand:HI 3 "vpr_register_operand")
9243 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9246 rtx ind = XEXP (operands[0], 0);
9247 gcc_assert (REG_P (ind));
9249 gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1],
9255 (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn"
9256 [(set (mem:BLK (scratch))
9258 [(match_operand:SI 0 "register_operand" "r")
9259 (match_operand:V4SI 1 "s_register_operand" "w")
9260 (match_operand:V4SI 2 "s_register_operand" "w")
9261 (match_operand:HI 3 "vpr_register_operand" "Up")]
9264 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9265 [(set_attr "length" "8")])
9268 ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
9270 (define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
9271 [(match_operand:V4SI 0 "mve_scatter_memory")
9272 (match_operand:V4SI 1 "s_register_operand")
9273 (match_operand:V4SI 2 "s_register_operand")
9274 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9277 rtx ind = XEXP (operands[0], 0);
9278 gcc_assert (REG_P (ind));
9280 gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1],
9285 (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn"
9286 [(set (mem:BLK (scratch))
9288 [(match_operand:SI 0 "register_operand" "r")
9289 (match_operand:V4SI 1 "s_register_operand" "w")
9290 (match_operand:V4SI 2 "s_register_operand" "w")]
9293 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9294 [(set_attr "length" "4")])
9297 ;; [vaddq_s, vaddq_u])
9299 (define_insn "mve_vaddq<mode>"
9301 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
9302 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
9303 (match_operand:MVE_2 2 "s_register_operand" "w")))
9306 "vadd.i%#<V_sz_elem> %q0, %q1, %q2"
9307 [(set_attr "type" "mve_move")
9313 (define_insn "mve_vaddq_f<mode>"
9315 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
9316 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
9317 (match_operand:MVE_0 2 "s_register_operand" "w")))
9319 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9320 "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
9321 [(set_attr "type" "mve_move")
9327 (define_expand "mve_vidupq_n_u<mode>"
9328 [(match_operand:MVE_2 0 "s_register_operand")
9329 (match_operand:SI 1 "s_register_operand")
9330 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9333 rtx temp = gen_reg_rtx (SImode);
9334 emit_move_insn (temp, operands[1]);
9335 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9336 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
9344 (define_insn "mve_vidupq_u<mode>_insn"
9345 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9346 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9347 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
9349 (set (match_operand:SI 1 "s_register_operand" "=Te")
9350 (plus:SI (match_dup 2)
9351 (match_operand:SI 4 "immediate_operand" "i")))]
9353 "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
9358 (define_expand "mve_vidupq_m_n_u<mode>"
9359 [(match_operand:MVE_2 0 "s_register_operand")
9360 (match_operand:MVE_2 1 "s_register_operand")
9361 (match_operand:SI 2 "s_register_operand")
9362 (match_operand:SI 3 "mve_imm_selective_upto_8")
9363 (match_operand:HI 4 "vpr_register_operand")]
9366 rtx temp = gen_reg_rtx (SImode);
9367 emit_move_insn (temp, operands[2]);
9368 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9369 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9370 operands[2], operands[3],
9376 ;; [vidupq_m_wb_u_insn])
9378 (define_insn "mve_vidupq_m_wb_u<mode>_insn"
9379 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9380 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9381 (match_operand:SI 3 "s_register_operand" "2")
9382 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9383 (match_operand:HI 5 "vpr_register_operand" "Up")]
9385 (set (match_operand:SI 2 "s_register_operand" "=Te")
9386 (plus:SI (match_dup 3)
9387 (match_operand:SI 6 "immediate_operand" "i")))]
9389 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
9390 [(set_attr "length""8")])
9395 (define_expand "mve_vddupq_n_u<mode>"
9396 [(match_operand:MVE_2 0 "s_register_operand")
9397 (match_operand:SI 1 "s_register_operand")
9398 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9401 rtx temp = gen_reg_rtx (SImode);
9402 emit_move_insn (temp, operands[1]);
9403 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9404 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
9412 (define_insn "mve_vddupq_u<mode>_insn"
9413 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9414 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9415 (match_operand:SI 3 "immediate_operand" "i")]
9417 (set (match_operand:SI 1 "s_register_operand" "=Te")
9418 (minus:SI (match_dup 2)
9419 (match_operand:SI 4 "immediate_operand" "i")))]
9421 "vddup.u%#<V_sz_elem> %q0, %1, %3")
9426 (define_expand "mve_vddupq_m_n_u<mode>"
9427 [(match_operand:MVE_2 0 "s_register_operand")
9428 (match_operand:MVE_2 1 "s_register_operand")
9429 (match_operand:SI 2 "s_register_operand")
9430 (match_operand:SI 3 "mve_imm_selective_upto_8")
9431 (match_operand:HI 4 "vpr_register_operand")]
9434 rtx temp = gen_reg_rtx (SImode);
9435 emit_move_insn (temp, operands[2]);
9436 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9437 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9438 operands[2], operands[3],
9444 ;; [vddupq_m_wb_u_insn])
9446 (define_insn "mve_vddupq_m_wb_u<mode>_insn"
9447 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9448 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9449 (match_operand:SI 3 "s_register_operand" "2")
9450 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9451 (match_operand:HI 5 "vpr_register_operand" "Up")]
9453 (set (match_operand:SI 2 "s_register_operand" "=Te")
9454 (minus:SI (match_dup 3)
9455 (match_operand:SI 6 "immediate_operand" "i")))]
9457 "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
9458 [(set_attr "length""8")])
9463 (define_expand "mve_vdwdupq_n_u<mode>"
9464 [(match_operand:MVE_2 0 "s_register_operand")
9465 (match_operand:SI 1 "s_register_operand")
9466 (match_operand:DI 2 "s_register_operand")
9467 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9470 rtx ignore_wb = gen_reg_rtx (SImode);
9471 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9472 operands[1], operands[2],
9480 (define_expand "mve_vdwdupq_wb_u<mode>"
9481 [(match_operand:SI 0 "s_register_operand")
9482 (match_operand:SI 1 "s_register_operand")
9483 (match_operand:DI 2 "s_register_operand")
9484 (match_operand:SI 3 "mve_imm_selective_upto_8")
9485 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9488 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9489 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9490 operands[1], operands[2],
9496 ;; [vdwdupq_wb_u_insn])
9498 (define_insn "mve_vdwdupq_wb_u<mode>_insn"
9499 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9500 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9501 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9502 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9504 (set (match_operand:SI 1 "s_register_operand" "=Te")
9505 (unspec:SI [(match_dup 2)
9506 (subreg:SI (match_dup 3) 4)
9510 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9516 (define_expand "mve_vdwdupq_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:DI 3 "s_register_operand")
9521 (match_operand:SI 4 "mve_imm_selective_upto_8")
9522 (match_operand:HI 5 "vpr_register_operand")]
9525 rtx ignore_wb = gen_reg_rtx (SImode);
9526 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9527 operands[1], operands[2],
9528 operands[3], operands[4],
9534 ;; [vdwdupq_m_wb_u])
9536 (define_expand "mve_vdwdupq_m_wb_u<mode>"
9537 [(match_operand:SI 0 "s_register_operand")
9538 (match_operand:MVE_2 1 "s_register_operand")
9539 (match_operand:SI 2 "s_register_operand")
9540 (match_operand:DI 3 "s_register_operand")
9541 (match_operand:SI 4 "mve_imm_selective_upto_8")
9542 (match_operand:HI 5 "vpr_register_operand")]
9545 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9546 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9547 operands[1], operands[2],
9548 operands[3], operands[4],
9554 ;; [vdwdupq_m_wb_u_insn])
9556 (define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
9557 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9558 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9559 (match_operand:SI 3 "s_register_operand" "1")
9560 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9561 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9562 (match_operand:HI 6 "vpr_register_operand" "Up")]
9564 (set (match_operand:SI 1 "s_register_operand" "=Te")
9565 (unspec:SI [(match_dup 2)
9567 (subreg:SI (match_dup 4) 4)
9573 "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9574 [(set_attr "type" "mve_move")
9575 (set_attr "length""8")])
9580 (define_expand "mve_viwdupq_n_u<mode>"
9581 [(match_operand:MVE_2 0 "s_register_operand")
9582 (match_operand:SI 1 "s_register_operand")
9583 (match_operand:DI 2 "s_register_operand")
9584 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9587 rtx ignore_wb = gen_reg_rtx (SImode);
9588 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9589 operands[1], operands[2],
9597 (define_expand "mve_viwdupq_wb_u<mode>"
9598 [(match_operand:SI 0 "s_register_operand")
9599 (match_operand:SI 1 "s_register_operand")
9600 (match_operand:DI 2 "s_register_operand")
9601 (match_operand:SI 3 "mve_imm_selective_upto_8")
9602 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9605 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9606 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9607 operands[1], operands[2],
9613 ;; [viwdupq_wb_u_insn])
9615 (define_insn "mve_viwdupq_wb_u<mode>_insn"
9616 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9617 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9618 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9619 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9621 (set (match_operand:SI 1 "s_register_operand" "=Te")
9622 (unspec:SI [(match_dup 2)
9623 (subreg:SI (match_dup 3) 4)
9627 "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9633 (define_expand "mve_viwdupq_m_n_u<mode>"
9634 [(match_operand:MVE_2 0 "s_register_operand")
9635 (match_operand:MVE_2 1 "s_register_operand")
9636 (match_operand:SI 2 "s_register_operand")
9637 (match_operand:DI 3 "s_register_operand")
9638 (match_operand:SI 4 "mve_imm_selective_upto_8")
9639 (match_operand:HI 5 "vpr_register_operand")]
9642 rtx ignore_wb = gen_reg_rtx (SImode);
9643 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9644 operands[1], operands[2],
9645 operands[3], operands[4],
9651 ;; [viwdupq_m_wb_u])
9653 (define_expand "mve_viwdupq_m_wb_u<mode>"
9654 [(match_operand:SI 0 "s_register_operand")
9655 (match_operand:MVE_2 1 "s_register_operand")
9656 (match_operand:SI 2 "s_register_operand")
9657 (match_operand:DI 3 "s_register_operand")
9658 (match_operand:SI 4 "mve_imm_selective_upto_8")
9659 (match_operand:HI 5 "vpr_register_operand")]
9662 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9663 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9664 operands[1], operands[2],
9665 operands[3], operands[4],
9671 ;; [viwdupq_m_wb_u_insn])
9673 (define_insn "mve_viwdupq_m_wb_u<mode>_insn"
9674 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9675 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9676 (match_operand:SI 3 "s_register_operand" "1")
9677 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9678 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9679 (match_operand:HI 6 "vpr_register_operand" "Up")]
9681 (set (match_operand:SI 1 "s_register_operand" "=Te")
9682 (unspec:SI [(match_dup 2)
9684 (subreg:SI (match_dup 4) 4)
9690 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9691 [(set_attr "type" "mve_move")
9692 (set_attr "length""8")])
9695 ;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u]
9697 (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si"
9698 [(set (mem:BLK (scratch))
9700 [(match_operand:V4SI 1 "s_register_operand" "0")
9701 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9702 (match_operand:V4SI 3 "s_register_operand" "w")]
9704 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9705 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9711 ops[0] = operands[1];
9712 ops[1] = operands[2];
9713 ops[2] = operands[3];
9714 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9717 [(set_attr "length" "4")])
9720 ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
9722 (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
9723 [(set (mem:BLK (scratch))
9725 [(match_operand:V4SI 1 "s_register_operand" "0")
9726 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9727 (match_operand:V4SI 3 "s_register_operand" "w")
9728 (match_operand:HI 4 "vpr_register_operand")]
9730 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9731 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9737 ops[0] = operands[1];
9738 ops[1] = operands[2];
9739 ops[2] = operands[3];
9740 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9743 [(set_attr "length" "8")])
9746 ;; [vstrwq_scatter_base_wb_f]
9748 (define_insn "mve_vstrwq_scatter_base_wb_fv4sf"
9749 [(set (mem:BLK (scratch))
9751 [(match_operand:V4SI 1 "s_register_operand" "0")
9752 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9753 (match_operand:V4SF 3 "s_register_operand" "w")]
9755 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9756 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9759 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9762 ops[0] = operands[1];
9763 ops[1] = operands[2];
9764 ops[2] = operands[3];
9765 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9768 [(set_attr "length" "4")])
9771 ;; [vstrwq_scatter_base_wb_p_f]
9773 (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf"
9774 [(set (mem:BLK (scratch))
9776 [(match_operand:V4SI 1 "s_register_operand" "0")
9777 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9778 (match_operand:V4SF 3 "s_register_operand" "w")
9779 (match_operand:HI 4 "vpr_register_operand")]
9781 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9782 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9785 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9788 ops[0] = operands[1];
9789 ops[1] = operands[2];
9790 ops[2] = operands[3];
9791 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9794 [(set_attr "length" "8")])
9797 ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
9799 (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di"
9800 [(set (mem:BLK (scratch))
9802 [(match_operand:V2DI 1 "s_register_operand" "0")
9803 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9804 (match_operand:V2DI 3 "s_register_operand" "w")]
9806 (set (match_operand:V2DI 0 "s_register_operand" "=&w")
9807 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9813 ops[0] = operands[1];
9814 ops[1] = operands[2];
9815 ops[2] = operands[3];
9816 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
9819 [(set_attr "length" "4")])
9822 ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
9824 (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
9825 [(set (mem:BLK (scratch))
9827 [(match_operand:V2DI 1 "s_register_operand" "0")
9828 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9829 (match_operand:V2DI 3 "s_register_operand" "w")
9830 (match_operand:HI 4 "vpr_register_operand")]
9832 (set (match_operand:V2DI 0 "s_register_operand" "=w")
9833 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9839 ops[0] = operands[1];
9840 ops[1] = operands[2];
9841 ops[2] = operands[3];
9842 output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops);
9845 [(set_attr "length" "8")])
9847 (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
9848 [(match_operand:V4SI 0 "s_register_operand")
9849 (match_operand:V4SI 1 "s_register_operand")
9850 (match_operand:SI 2 "mve_vldrd_immediate")
9851 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9854 rtx ignore_result = gen_reg_rtx (V4SImode);
9856 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0],
9857 operands[1], operands[2]));
9861 (define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si"
9862 [(match_operand:V4SI 0 "s_register_operand")
9863 (match_operand:V4SI 1 "s_register_operand")
9864 (match_operand:SI 2 "mve_vldrd_immediate")
9865 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9868 rtx ignore_wb = gen_reg_rtx (V4SImode);
9870 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
9871 operands[1], operands[2]));
9876 ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
9878 (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
9879 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9880 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9881 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9882 (mem:BLK (scratch))]
9884 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9885 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9891 ops[0] = operands[0];
9892 ops[1] = operands[2];
9893 ops[2] = operands[3];
9894 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9897 [(set_attr "length" "4")])
9899 (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
9900 [(match_operand:V4SI 0 "s_register_operand")
9901 (match_operand:V4SI 1 "s_register_operand")
9902 (match_operand:SI 2 "mve_vldrd_immediate")
9903 (match_operand:HI 3 "vpr_register_operand")
9904 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9907 rtx ignore_result = gen_reg_rtx (V4SImode);
9909 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0],
9910 operands[1], operands[2],
9914 (define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si"
9915 [(match_operand:V4SI 0 "s_register_operand")
9916 (match_operand:V4SI 1 "s_register_operand")
9917 (match_operand:SI 2 "mve_vldrd_immediate")
9918 (match_operand:HI 3 "vpr_register_operand")
9919 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9922 rtx ignore_wb = gen_reg_rtx (V4SImode);
9924 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
9925 operands[1], operands[2],
9931 ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
9933 (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
9934 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9935 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9936 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9937 (match_operand:HI 4 "vpr_register_operand" "Up")
9938 (mem:BLK (scratch))]
9940 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9941 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9947 ops[0] = operands[0];
9948 ops[1] = operands[2];
9949 ops[2] = operands[3];
9950 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
9953 [(set_attr "length" "8")])
9955 (define_expand "mve_vldrwq_gather_base_wb_fv4sf"
9956 [(match_operand:V4SI 0 "s_register_operand")
9957 (match_operand:V4SI 1 "s_register_operand")
9958 (match_operand:SI 2 "mve_vldrd_immediate")
9959 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9960 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9962 rtx ignore_result = gen_reg_rtx (V4SFmode);
9964 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0],
9965 operands[1], operands[2]));
9969 (define_expand "mve_vldrwq_gather_base_nowb_fv4sf"
9970 [(match_operand:V4SF 0 "s_register_operand")
9971 (match_operand:V4SI 1 "s_register_operand")
9972 (match_operand:SI 2 "mve_vldrd_immediate")
9973 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9974 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9976 rtx ignore_wb = gen_reg_rtx (V4SImode);
9978 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
9979 operands[1], operands[2]));
9984 ;; [vldrwq_gather_base_wb_f]
9986 (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
9987 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9988 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
9989 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9990 (mem:BLK (scratch))]
9992 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9993 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9996 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9999 ops[0] = operands[0];
10000 ops[1] = operands[2];
10001 ops[2] = operands[3];
10002 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
10005 [(set_attr "length" "4")])
10007 (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
10008 [(match_operand:V4SI 0 "s_register_operand")
10009 (match_operand:V4SI 1 "s_register_operand")
10010 (match_operand:SI 2 "mve_vldrd_immediate")
10011 (match_operand:HI 3 "vpr_register_operand")
10012 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10013 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10015 rtx ignore_result = gen_reg_rtx (V4SFmode);
10017 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0],
10018 operands[1], operands[2],
10023 (define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf"
10024 [(match_operand:V4SF 0 "s_register_operand")
10025 (match_operand:V4SI 1 "s_register_operand")
10026 (match_operand:SI 2 "mve_vldrd_immediate")
10027 (match_operand:HI 3 "vpr_register_operand")
10028 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10029 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10031 rtx ignore_wb = gen_reg_rtx (V4SImode);
10033 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
10034 operands[1], operands[2],
10040 ;; [vldrwq_gather_base_wb_z_f]
10042 (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
10043 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10044 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10045 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10046 (match_operand:HI 4 "vpr_register_operand" "Up")
10047 (mem:BLK (scratch))]
10049 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10050 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10053 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10056 ops[0] = operands[0];
10057 ops[1] = operands[2];
10058 ops[2] = operands[3];
10059 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
10062 [(set_attr "length" "8")])
10064 (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
10065 [(match_operand:V2DI 0 "s_register_operand")
10066 (match_operand:V2DI 1 "s_register_operand")
10067 (match_operand:SI 2 "mve_vldrd_immediate")
10068 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10071 rtx ignore_result = gen_reg_rtx (V2DImode);
10073 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0],
10074 operands[1], operands[2]));
10078 (define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di"
10079 [(match_operand:V2DI 0 "s_register_operand")
10080 (match_operand:V2DI 1 "s_register_operand")
10081 (match_operand:SI 2 "mve_vldrd_immediate")
10082 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10085 rtx ignore_wb = gen_reg_rtx (V2DImode);
10087 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
10088 operands[1], operands[2]));
10094 ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
10096 (define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn"
10097 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10098 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10099 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10100 (mem:BLK (scratch))]
10102 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10103 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10109 ops[0] = operands[0];
10110 ops[1] = operands[2];
10111 ops[2] = operands[3];
10112 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
10115 [(set_attr "length" "4")])
10117 (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
10118 [(match_operand:V2DI 0 "s_register_operand")
10119 (match_operand:V2DI 1 "s_register_operand")
10120 (match_operand:SI 2 "mve_vldrd_immediate")
10121 (match_operand:HI 3 "vpr_register_operand")
10122 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10125 rtx ignore_result = gen_reg_rtx (V2DImode);
10127 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0],
10128 operands[1], operands[2],
10133 (define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di"
10134 [(match_operand:V2DI 0 "s_register_operand")
10135 (match_operand:V2DI 1 "s_register_operand")
10136 (match_operand:SI 2 "mve_vldrd_immediate")
10137 (match_operand:HI 3 "vpr_register_operand")
10138 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10141 rtx ignore_wb = gen_reg_rtx (V2DImode);
10143 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
10144 operands[1], operands[2],
10149 (define_insn "get_fpscr_nzcvqc"
10150 [(set (match_operand:SI 0 "register_operand" "=r")
10151 (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
10153 "vmrs\\t%0, FPSCR_nzcvqc"
10154 [(set_attr "type" "mve_move")])
10156 (define_insn "set_fpscr_nzcvqc"
10157 [(set (reg:SI VFPCC_REGNUM)
10158 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
10159 VUNSPEC_SET_FPSCR_NZCVQC))]
10161 "vmsr\\tFPSCR_nzcvqc, %0"
10162 [(set_attr "type" "mve_move")])
10165 ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
10167 (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
10168 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10169 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10170 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10171 (match_operand:HI 4 "vpr_register_operand" "Up")
10172 (mem:BLK (scratch))]
10174 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10175 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10181 ops[0] = operands[0];
10182 ops[1] = operands[2];
10183 ops[2] = operands[3];
10184 output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops);
10187 [(set_attr "length" "8")])
10189 ;; [vadciq_m_s, vadciq_m_u])
10191 (define_insn "mve_vadciq_m_<supf>v4si"
10192 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10193 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10194 (match_operand:V4SI 2 "s_register_operand" "w")
10195 (match_operand:V4SI 3 "s_register_operand" "w")
10196 (match_operand:HI 4 "vpr_register_operand" "Up")]
10198 (set (reg:SI VFPCC_REGNUM)
10199 (unspec:SI [(const_int 0)]
10203 "vpst\;vadcit.i32\t%q0, %q2, %q3"
10204 [(set_attr "type" "mve_move")
10205 (set_attr "length" "8")])
10208 ;; [vadciq_u, vadciq_s])
10210 (define_insn "mve_vadciq_<supf>v4si"
10211 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10212 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10213 (match_operand:V4SI 2 "s_register_operand" "w")]
10215 (set (reg:SI VFPCC_REGNUM)
10216 (unspec:SI [(const_int 0)]
10220 "vadci.i32\t%q0, %q1, %q2"
10221 [(set_attr "type" "mve_move")
10222 (set_attr "length" "4")])
10225 ;; [vadcq_m_s, vadcq_m_u])
10227 (define_insn "mve_vadcq_m_<supf>v4si"
10228 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10229 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10230 (match_operand:V4SI 2 "s_register_operand" "w")
10231 (match_operand:V4SI 3 "s_register_operand" "w")
10232 (match_operand:HI 4 "vpr_register_operand" "Up")]
10234 (set (reg:SI VFPCC_REGNUM)
10235 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10239 "vpst\;vadct.i32\t%q0, %q2, %q3"
10240 [(set_attr "type" "mve_move")
10241 (set_attr "length" "8")])
10244 ;; [vadcq_u, vadcq_s])
10246 (define_insn "mve_vadcq_<supf>v4si"
10247 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10248 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10249 (match_operand:V4SI 2 "s_register_operand" "w")]
10251 (set (reg:SI VFPCC_REGNUM)
10252 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10256 "vadc.i32\t%q0, %q1, %q2"
10257 [(set_attr "type" "mve_move")
10258 (set_attr "length" "4")
10259 (set_attr "conds" "set")])
10262 ;; [vsbciq_m_u, vsbciq_m_s])
10264 (define_insn "mve_vsbciq_m_<supf>v4si"
10265 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10266 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10267 (match_operand:V4SI 2 "s_register_operand" "w")
10268 (match_operand:V4SI 3 "s_register_operand" "w")
10269 (match_operand:HI 4 "vpr_register_operand" "Up")]
10271 (set (reg:SI VFPCC_REGNUM)
10272 (unspec:SI [(const_int 0)]
10276 "vpst\;vsbcit.i32\t%q0, %q2, %q3"
10277 [(set_attr "type" "mve_move")
10278 (set_attr "length" "8")])
10281 ;; [vsbciq_s, vsbciq_u])
10283 (define_insn "mve_vsbciq_<supf>v4si"
10284 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10285 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10286 (match_operand:V4SI 2 "s_register_operand" "w")]
10288 (set (reg:SI VFPCC_REGNUM)
10289 (unspec:SI [(const_int 0)]
10293 "vsbci.i32\t%q0, %q1, %q2"
10294 [(set_attr "type" "mve_move")
10295 (set_attr "length" "4")])
10298 ;; [vsbcq_m_u, vsbcq_m_s])
10300 (define_insn "mve_vsbcq_m_<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")
10304 (match_operand:V4SI 3 "s_register_operand" "w")
10305 (match_operand:HI 4 "vpr_register_operand" "Up")]
10307 (set (reg:SI VFPCC_REGNUM)
10308 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10312 "vpst\;vsbct.i32\t%q0, %q2, %q3"
10313 [(set_attr "type" "mve_move")
10314 (set_attr "length" "8")])
10317 ;; [vsbcq_s, vsbcq_u])
10319 (define_insn "mve_vsbcq_<supf>v4si"
10320 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10321 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10322 (match_operand:V4SI 2 "s_register_operand" "w")]
10324 (set (reg:SI VFPCC_REGNUM)
10325 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10329 "vsbc.i32\t%q0, %q1, %q2"
10330 [(set_attr "type" "mve_move")
10331 (set_attr "length" "4")])
10336 (define_insn "mve_vst2q<mode>"
10337 [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
10338 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
10339 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10342 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10343 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10346 int regno = REGNO (operands[1]);
10347 ops[0] = gen_rtx_REG (TImode, regno);
10348 ops[1] = gen_rtx_REG (TImode, regno + 4);
10349 rtx reg = operands[0];
10350 while (reg && !REG_P (reg))
10351 reg = XEXP (reg, 0);
10352 gcc_assert (REG_P (reg));
10354 ops[3] = operands[0];
10355 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10356 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10359 [(set_attr "length" "8")])
10364 (define_insn "mve_vld2q<mode>"
10365 [(set (match_operand:OI 0 "s_register_operand" "=w")
10366 (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
10367 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10370 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10371 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10374 int regno = REGNO (operands[0]);
10375 ops[0] = gen_rtx_REG (TImode, regno);
10376 ops[1] = gen_rtx_REG (TImode, regno + 4);
10377 rtx reg = operands[1];
10378 while (reg && !REG_P (reg))
10379 reg = XEXP (reg, 0);
10380 gcc_assert (REG_P (reg));
10382 ops[3] = operands[1];
10383 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10384 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10387 [(set_attr "length" "8")])
10392 (define_insn "mve_vld4q<mode>"
10393 [(set (match_operand:XI 0 "s_register_operand" "=w")
10394 (unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
10395 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10398 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10399 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10402 int regno = REGNO (operands[0]);
10403 ops[0] = gen_rtx_REG (TImode, regno);
10404 ops[1] = gen_rtx_REG (TImode, regno+4);
10405 ops[2] = gen_rtx_REG (TImode, regno+8);
10406 ops[3] = gen_rtx_REG (TImode, regno + 12);
10407 rtx reg = operands[1];
10408 while (reg && !REG_P (reg))
10409 reg = XEXP (reg, 0);
10410 gcc_assert (REG_P (reg));
10412 ops[5] = operands[1];
10413 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10414 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10415 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10416 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
10419 [(set_attr "length" "16")])
10421 ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
10423 (define_insn "mve_vec_extract<mode><V_elem_l>"
10424 [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r")
10425 (vec_select:<V_elem>
10426 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
10427 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10428 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10429 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10431 if (BYTES_BIG_ENDIAN)
10433 int elt = INTVAL (operands[2]);
10434 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10435 operands[2] = GEN_INT (elt);
10437 return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
10439 [(set_attr "type" "mve_move")])
10441 (define_insn "mve_vec_extractv2didi"
10442 [(set (match_operand:DI 0 "nonimmediate_operand" "=r")
10444 (match_operand:V2DI 1 "s_register_operand" "w")
10445 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10448 int elt = INTVAL (operands[2]);
10449 if (BYTES_BIG_ENDIAN)
10453 return "vmov\t%Q0, %R0, %e1";
10455 return "vmov\t%Q0, %R0, %f1";
10457 [(set_attr "type" "mve_move")])
10459 (define_insn "*mve_vec_extract_sext_internal<mode>"
10460 [(set (match_operand:SI 0 "s_register_operand" "=r")
10462 (vec_select:<V_elem>
10463 (match_operand:MVE_2 1 "s_register_operand" "w")
10464 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10465 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10466 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10468 if (BYTES_BIG_ENDIAN)
10470 int elt = INTVAL (operands[2]);
10471 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10472 operands[2] = GEN_INT (elt);
10474 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
10476 [(set_attr "type" "mve_move")])
10478 (define_insn "*mve_vec_extract_zext_internal<mode>"
10479 [(set (match_operand:SI 0 "s_register_operand" "=r")
10481 (vec_select:<V_elem>
10482 (match_operand:MVE_2 1 "s_register_operand" "w")
10483 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10484 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10485 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10487 if (BYTES_BIG_ENDIAN)
10489 int elt = INTVAL (operands[2]);
10490 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10491 operands[2] = GEN_INT (elt);
10493 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
10495 [(set_attr "type" "mve_move")])
10498 ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
10500 (define_insn "mve_vec_set<mode>_internal"
10501 [(set (match_operand:VQ2 0 "s_register_operand" "=w")
10504 (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
10505 (match_operand:VQ2 3 "s_register_operand" "0")
10506 (match_operand:SI 2 "immediate_operand" "i")))]
10507 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10508 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10510 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10511 if (BYTES_BIG_ENDIAN)
10512 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10513 operands[2] = GEN_INT (elt);
10515 return "vmov.<V_sz_elem>\t%q0[%c2], %1";
10517 [(set_attr "type" "mve_move")])
10519 (define_insn "mve_vec_setv2di_internal"
10520 [(set (match_operand:V2DI 0 "s_register_operand" "=w")
10522 (vec_duplicate:V2DI
10523 (match_operand:DI 1 "nonimmediate_operand" "r"))
10524 (match_operand:V2DI 3 "s_register_operand" "0")
10525 (match_operand:SI 2 "immediate_operand" "i")))]
10528 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10529 if (BYTES_BIG_ENDIAN)
10533 return "vmov\t%e0, %Q1, %R1";
10535 return "vmov\t%f0, %J1, %K1";
10537 [(set_attr "type" "mve_move")])
10542 (define_insn "mve_uqrshll_sat<supf>_di"
10543 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10544 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10545 (match_operand:SI 2 "register_operand" "r")]
10548 "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
10549 [(set_attr "predicable" "yes")])
10554 (define_insn "mve_sqrshrl_sat<supf>_di"
10555 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10556 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10557 (match_operand:SI 2 "register_operand" "r")]
10560 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
10561 [(set_attr "predicable" "yes")])
10566 (define_insn "mve_uqrshl_si"
10567 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10568 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10569 (match_operand:SI 2 "register_operand" "r")]
10572 "uqrshl%?\\t%1, %2"
10573 [(set_attr "predicable" "yes")])
10578 (define_insn "mve_sqrshr_si"
10579 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10580 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10581 (match_operand:SI 2 "register_operand" "r")]
10584 "sqrshr%?\\t%1, %2"
10585 [(set_attr "predicable" "yes")])
10590 (define_insn "mve_uqshll_di"
10591 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10592 (us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10593 (match_operand:SI 2 "immediate_operand" "Pg")))]
10595 "uqshll%?\\t%Q1, %R1, %2"
10596 [(set_attr "predicable" "yes")])
10601 (define_insn "mve_urshrl_di"
10602 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10603 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10604 (match_operand:SI 2 "immediate_operand" "Pg")]
10607 "urshrl%?\\t%Q1, %R1, %2"
10608 [(set_attr "predicable" "yes")])
10613 (define_insn "mve_uqshl_si"
10614 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10615 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0")
10616 (match_operand:SI 2 "immediate_operand" "Pg")))]
10619 [(set_attr "predicable" "yes")])
10624 (define_insn "mve_urshr_si"
10625 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10626 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10627 (match_operand:SI 2 "immediate_operand" "Pg")]
10631 [(set_attr "predicable" "yes")])
10636 (define_insn "mve_sqshl_si"
10637 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10638 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0")
10639 (match_operand:SI 2 "immediate_operand" "Pg")))]
10642 [(set_attr "predicable" "yes")])
10647 (define_insn "mve_srshr_si"
10648 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10649 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0")
10650 (match_operand:SI 2 "immediate_operand" "Pg")]
10654 [(set_attr "predicable" "yes")])
10659 (define_insn "mve_srshrl_di"
10660 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10661 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10662 (match_operand:SI 2 "immediate_operand" "Pg")]
10665 "srshrl%?\\t%Q1, %R1, %2"
10666 [(set_attr "predicable" "yes")])
10671 (define_insn "mve_sqshll_di"
10672 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10673 (ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10674 (match_operand:SI 2 "immediate_operand" "Pg")))]
10676 "sqshll%?\\t%Q1, %R1, %2"
10677 [(set_attr "predicable" "yes")])
10680 ;; [vshlcq_m_u vshlcq_m_s]
10682 (define_expand "mve_vshlcq_m_vec_<supf><mode>"
10683 [(match_operand:MVE_2 0 "s_register_operand")
10684 (match_operand:MVE_2 1 "s_register_operand")
10685 (match_operand:SI 2 "s_register_operand")
10686 (match_operand:SI 3 "mve_imm_32")
10687 (match_operand:HI 4 "vpr_register_operand")
10688 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10691 rtx ignore_wb = gen_reg_rtx (SImode);
10692 emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1],
10693 operands[2], operands[3],
10698 (define_expand "mve_vshlcq_m_carry_<supf><mode>"
10699 [(match_operand:SI 0 "s_register_operand")
10700 (match_operand:MVE_2 1 "s_register_operand")
10701 (match_operand:SI 2 "s_register_operand")
10702 (match_operand:SI 3 "mve_imm_32")
10703 (match_operand:HI 4 "vpr_register_operand")
10704 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10707 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10708 emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0],
10709 operands[1], operands[2],
10710 operands[3], operands[4]));
10714 (define_insn "mve_vshlcq_m_<supf><mode>"
10715 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10716 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10717 (match_operand:SI 3 "s_register_operand" "1")
10718 (match_operand:SI 4 "mve_imm_32" "Rf")
10719 (match_operand:HI 5 "vpr_register_operand" "Up")]
10721 (set (match_operand:SI 1 "s_register_operand" "=r")
10722 (unspec:SI [(match_dup 2)
10729 "vpst\;vshlct\t%q0, %1, %4"
10730 [(set_attr "type" "mve_move")
10731 (set_attr "length" "8")])
10733 (define_insn "*mve_vec_duplicate<mode>"
10734 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
10735 (vec_duplicate:MVE_VLD_ST (match_operand:<V_elem> 1 "general_operand" "r")))]
10736 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
10737 "vdup.<V_sz_elem>\t%q0, %1"
10738 [(set_attr "type" "mve_move")])
10740 ;; CDE instructions on MVE registers.
10742 (define_insn "arm_vcx1qv16qi"
10743 [(set (match_operand:V16QI 0 "register_operand" "=t")
10744 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10745 (match_operand:SI 2 "const_int_mve_cde1_operand" "i")]
10747 "TARGET_CDE && TARGET_HAVE_MVE"
10748 "vcx1\\tp%c1, %q0, #%c2"
10749 [(set_attr "type" "coproc")]
10752 (define_insn "arm_vcx1qav16qi"
10753 [(set (match_operand:V16QI 0 "register_operand" "=t")
10754 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10755 (match_operand:V16QI 2 "register_operand" "0")
10756 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")]
10758 "TARGET_CDE && TARGET_HAVE_MVE"
10759 "vcx1a\\tp%c1, %q0, #%c3"
10760 [(set_attr "type" "coproc")]
10763 (define_insn "arm_vcx2qv16qi"
10764 [(set (match_operand:V16QI 0 "register_operand" "=t")
10765 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10766 (match_operand:V16QI 2 "register_operand" "t")
10767 (match_operand:SI 3 "const_int_mve_cde2_operand" "i")]
10769 "TARGET_CDE && TARGET_HAVE_MVE"
10770 "vcx2\\tp%c1, %q0, %q2, #%c3"
10771 [(set_attr "type" "coproc")]
10774 (define_insn "arm_vcx2qav16qi"
10775 [(set (match_operand:V16QI 0 "register_operand" "=t")
10776 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10777 (match_operand:V16QI 2 "register_operand" "0")
10778 (match_operand:V16QI 3 "register_operand" "t")
10779 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")]
10781 "TARGET_CDE && TARGET_HAVE_MVE"
10782 "vcx2a\\tp%c1, %q0, %q3, #%c4"
10783 [(set_attr "type" "coproc")]
10786 (define_insn "arm_vcx3qv16qi"
10787 [(set (match_operand:V16QI 0 "register_operand" "=t")
10788 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10789 (match_operand:V16QI 2 "register_operand" "t")
10790 (match_operand:V16QI 3 "register_operand" "t")
10791 (match_operand:SI 4 "const_int_mve_cde3_operand" "i")]
10793 "TARGET_CDE && TARGET_HAVE_MVE"
10794 "vcx3\\tp%c1, %q0, %q2, %q3, #%c4"
10795 [(set_attr "type" "coproc")]
10798 (define_insn "arm_vcx3qav16qi"
10799 [(set (match_operand:V16QI 0 "register_operand" "=t")
10800 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10801 (match_operand:V16QI 2 "register_operand" "0")
10802 (match_operand:V16QI 3 "register_operand" "t")
10803 (match_operand:V16QI 4 "register_operand" "t")
10804 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")]
10806 "TARGET_CDE && TARGET_HAVE_MVE"
10807 "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5"
10808 [(set_attr "type" "coproc")]
10811 (define_insn "arm_vcx1q<a>_p_v16qi"
10812 [(set (match_operand:V16QI 0 "register_operand" "=t")
10813 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10814 (match_operand:V16QI 2 "register_operand" "0")
10815 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")
10816 (match_operand:HI 4 "vpr_register_operand" "Up")]
10818 "TARGET_CDE && TARGET_HAVE_MVE"
10819 "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3"
10820 [(set_attr "type" "coproc")
10821 (set_attr "length" "8")]
10824 (define_insn "arm_vcx2q<a>_p_v16qi"
10825 [(set (match_operand:V16QI 0 "register_operand" "=t")
10826 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10827 (match_operand:V16QI 2 "register_operand" "0")
10828 (match_operand:V16QI 3 "register_operand" "t")
10829 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")
10830 (match_operand:HI 5 "vpr_register_operand" "Up")]
10832 "TARGET_CDE && TARGET_HAVE_MVE"
10833 "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4"
10834 [(set_attr "type" "coproc")
10835 (set_attr "length" "8")]
10838 (define_insn "arm_vcx3q<a>_p_v16qi"
10839 [(set (match_operand:V16QI 0 "register_operand" "=t")
10840 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10841 (match_operand:V16QI 2 "register_operand" "0")
10842 (match_operand:V16QI 3 "register_operand" "t")
10843 (match_operand:V16QI 4 "register_operand" "t")
10844 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")
10845 (match_operand:HI 6 "vpr_register_operand" "Up")]
10847 "TARGET_CDE && TARGET_HAVE_MVE"
10848 "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5"
10849 [(set_attr "type" "coproc")
10850 (set_attr "length" "8")]
10853 (define_insn "*movmisalign<mode>_mve_store"
10854 [(set (match_operand:MVE_VLD_ST 0 "neon_permissive_struct_operand" "=Um")
10855 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "s_register_operand" " w")]
10856 UNSPEC_MISALIGNED_ACCESS))]
10857 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10858 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))
10859 && !BYTES_BIG_ENDIAN && unaligned_access"
10860 "vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0"
10861 [(set_attr "type" "mve_store")]
10865 (define_insn "*movmisalign<mode>_mve_load"
10866 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
10867 (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "neon_permissive_struct_operand" " Um")]
10868 UNSPEC_MISALIGNED_ACCESS))]
10869 "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10870 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))
10871 && !BYTES_BIG_ENDIAN && unaligned_access"
10872 "vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1"
10873 [(set_attr "type" "mve_load")]