1 ;; Arm M-profile Vector Extension Machine Description
2 ;; Copyright (C) 2019-2020 Free Software Foundation, Inc.
4 ;; This file is part of GCC.
6 ;; GCC is free software; you can redistribute it and/or modify it
7 ;; under the terms of the GNU General Public License as published by
8 ;; the Free Software Foundation; either version 3, or (at your option)
11 ;; GCC is distributed in the hope that it will be useful, but
12 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 ;; General Public License for more details.
16 ;; You should have received a copy of the GNU General Public License
17 ;; along with GCC; see the file COPYING3. If not see
18 ;; <http://www.gnu.org/licenses/>.
20 (define_insn "*mve_mov<mode>"
21 [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w,w,r,w,Ux,w")
22 (match_operand:MVE_types 1 "general_operand" "w,r,w,Dn,Uxi,r,Dm,w,Ul"))]
23 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
25 if (which_alternative == 3 || which_alternative == 6)
28 static char templ[40];
30 is_valid = simd_immediate_valid_for_move (operands[1], <MODE>mode,
31 &operands[1], &width);
33 gcc_assert (is_valid != 0);
36 return "vmov.f32\t%q0, %1 @ <mode>";
38 sprintf (templ, "vmov.i%d\t%%q0, %%x1 @ <mode>", width);
42 if (which_alternative == 4 || which_alternative == 7)
45 int regno = (which_alternative == 7)
46 ? REGNO (operands[1]) : REGNO (operands[0]);
50 if (<MODE>mode == V2DFmode || <MODE>mode == V2DImode)
52 if (which_alternative == 7)
54 ops[1] = gen_rtx_REG (DImode, regno);
55 output_asm_insn ("vstr.64\t%P1, %E0",ops);
59 ops[0] = gen_rtx_REG (DImode, regno);
60 output_asm_insn ("vldr.64\t%P0, %E1",ops);
63 else if (<MODE>mode == TImode)
65 if (which_alternative == 7)
66 output_asm_insn ("vstr.64\t%q1, %E0",ops);
68 output_asm_insn ("vldr.64\t%q0, %E1",ops);
72 if (which_alternative == 7)
74 ops[1] = gen_rtx_REG (TImode, regno);
75 output_asm_insn ("vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0",ops);
79 ops[0] = gen_rtx_REG (TImode, regno);
80 output_asm_insn ("vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1",ops);
85 switch (which_alternative)
88 return "vmov\t%q0, %q1";
90 return "vmov\t%e0, %Q1, %R1 @ <mode>\;vmov\t%f0, %J1, %K1";
92 return "vmov\t%Q0, %R0, %e1 @ <mode>\;vmov\t%J0, %K0, %f1";
94 return output_move_quad (operands);
96 return output_move_neon (operands);
102 [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_move,mve_store,mve_load")
103 (set_attr "length" "4,8,8,4,8,8,4,4,4")
104 (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*,*")
105 (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*,*")])
107 (define_insn "*mve_mov<mode>"
108 [(set (match_operand:MVE_types 0 "s_register_operand" "=w,w")
109 (vec_duplicate:MVE_types
110 (match_operand:SI 1 "nonmemory_operand" "r,i")))]
111 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
113 if (which_alternative == 0)
114 return "vdup.<V_sz_elem>\t%q0, %1";
115 return "vmov.<V_sz_elem>\t%q0, %1";
117 [(set_attr "length" "4,4")
118 (set_attr "type" "mve_move,mve_move")])
123 (define_insn "mve_vst4q<mode>"
124 [(set (match_operand:XI 0 "neon_struct_operand" "=Um")
125 (unspec:XI [(match_operand:XI 1 "s_register_operand" "w")
126 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
132 int regno = REGNO (operands[1]);
133 ops[0] = gen_rtx_REG (TImode, regno);
134 ops[1] = gen_rtx_REG (TImode, regno+4);
135 ops[2] = gen_rtx_REG (TImode, regno+8);
136 ops[3] = gen_rtx_REG (TImode, regno+12);
137 rtx reg = operands[0];
138 while (reg && !REG_P (reg))
140 gcc_assert (REG_P (reg));
142 ops[5] = operands[0];
143 /* Here in first three instructions data is stored to ops[4]'s location but
144 in the fourth instruction data is stored to operands[0], this is to
145 support the writeback. */
146 output_asm_insn ("vst40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
147 "vst41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
148 "vst42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
149 "vst43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
152 [(set_attr "length" "16")])
157 (define_insn "mve_vrndq_m_f<mode>"
159 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
160 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
161 (match_operand:MVE_0 2 "s_register_operand" "w")
162 (match_operand:HI 3 "vpr_register_operand" "Up")]
165 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
166 "vpst\;vrintzt.f%#<V_sz_elem> %q0, %q2"
167 [(set_attr "type" "mve_move")
168 (set_attr "length""8")])
173 (define_insn "mve_vrndxq_f<mode>"
175 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
176 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
179 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
180 "vrintx.f%#<V_sz_elem> %q0, %q1"
181 [(set_attr "type" "mve_move")
187 (define_insn "mve_vrndq_f<mode>"
189 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
190 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
193 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
194 "vrintz.f%#<V_sz_elem> %q0, %q1"
195 [(set_attr "type" "mve_move")
201 (define_insn "mve_vrndpq_f<mode>"
203 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
204 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
207 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
208 "vrintp.f%#<V_sz_elem> %q0, %q1"
209 [(set_attr "type" "mve_move")
215 (define_insn "mve_vrndnq_f<mode>"
217 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
218 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
221 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
222 "vrintn.f%#<V_sz_elem> %q0, %q1"
223 [(set_attr "type" "mve_move")
229 (define_insn "mve_vrndmq_f<mode>"
231 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
232 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
235 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
236 "vrintm.f%#<V_sz_elem> %q0, %q1"
237 [(set_attr "type" "mve_move")
243 (define_insn "mve_vrndaq_f<mode>"
245 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
246 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
249 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
250 "vrinta.f%#<V_sz_elem> %q0, %q1"
251 [(set_attr "type" "mve_move")
257 (define_insn "mve_vrev64q_f<mode>"
259 (set (match_operand:MVE_0 0 "s_register_operand" "=&w")
260 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
263 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
264 "vrev64.%#<V_sz_elem> %q0, %q1"
265 [(set_attr "type" "mve_move")
271 (define_insn "mve_vnegq_f<mode>"
273 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
274 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
277 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
278 "vneg.f%#<V_sz_elem> %q0, %q1"
279 [(set_attr "type" "mve_move")
285 (define_insn "mve_vdupq_n_f<mode>"
287 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
288 (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
291 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
292 "vdup.%#<V_sz_elem> %q0, %1"
293 [(set_attr "type" "mve_move")
299 (define_insn "mve_vabsq_f<mode>"
301 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
302 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
305 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
306 "vabs.f%#<V_sz_elem> %q0, %q1"
307 [(set_attr "type" "mve_move")
313 (define_insn "mve_vrev32q_fv8hf"
315 (set (match_operand:V8HF 0 "s_register_operand" "=w")
316 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")]
319 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
321 [(set_attr "type" "mve_move")
326 (define_insn "mve_vcvttq_f32_f16v4sf"
328 (set (match_operand:V4SF 0 "s_register_operand" "=w")
329 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
332 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
333 "vcvtt.f32.f16 %q0, %q1"
334 [(set_attr "type" "mve_move")
340 (define_insn "mve_vcvtbq_f32_f16v4sf"
342 (set (match_operand:V4SF 0 "s_register_operand" "=w")
343 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
346 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
347 "vcvtb.f32.f16 %q0, %q1"
348 [(set_attr "type" "mve_move")
352 ;; [vcvtq_to_f_s, vcvtq_to_f_u])
354 (define_insn "mve_vcvtq_to_f_<supf><mode>"
356 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
357 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
360 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
361 "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q1"
362 [(set_attr "type" "mve_move")
366 ;; [vrev64q_u, vrev64q_s])
368 (define_insn "mve_vrev64q_<supf><mode>"
370 (set (match_operand:MVE_2 0 "s_register_operand" "=&w")
371 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
375 "vrev64.%#<V_sz_elem> %q0, %q1"
376 [(set_attr "type" "mve_move")
380 ;; [vcvtq_from_f_s, vcvtq_from_f_u])
382 (define_insn "mve_vcvtq_from_f_<supf><mode>"
384 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
385 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
388 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
389 "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
390 [(set_attr "type" "mve_move")
394 (define_insn "mve_vqnegq_s<mode>"
396 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
397 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
401 "vqneg.s%#<V_sz_elem> %q0, %q1"
402 [(set_attr "type" "mve_move")
408 (define_insn "mve_vqabsq_s<mode>"
410 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
411 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
415 "vqabs.s%#<V_sz_elem> %q0, %q1"
416 [(set_attr "type" "mve_move")
422 (define_insn "mve_vnegq_s<mode>"
424 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
425 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
429 "vneg.s%#<V_sz_elem> %q0, %q1"
430 [(set_attr "type" "mve_move")
434 ;; [vmvnq_u, vmvnq_s])
436 (define_insn "mve_vmvnq_<supf><mode>"
438 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
439 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
444 [(set_attr "type" "mve_move")
448 ;; [vdupq_n_u, vdupq_n_s])
450 (define_insn "mve_vdupq_n_<supf><mode>"
452 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
453 (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
457 "vdup.%#<V_sz_elem> %q0, %1"
458 [(set_attr "type" "mve_move")
462 ;; [vclzq_u, vclzq_s])
464 (define_insn "mve_vclzq_<supf><mode>"
466 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
467 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
471 "vclz.i%#<V_sz_elem> %q0, %q1"
472 [(set_attr "type" "mve_move")
478 (define_insn "mve_vclsq_s<mode>"
480 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
481 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
485 "vcls.s%#<V_sz_elem> %q0, %q1"
486 [(set_attr "type" "mve_move")
490 ;; [vaddvq_s, vaddvq_u])
492 (define_insn "mve_vaddvq_<supf><mode>"
494 (set (match_operand:SI 0 "s_register_operand" "=Te")
495 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
499 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
500 [(set_attr "type" "mve_move")
506 (define_insn "mve_vabsq_s<mode>"
508 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
509 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
513 "vabs.s%#<V_sz_elem>\t%q0, %q1"
514 [(set_attr "type" "mve_move")
518 ;; [vrev32q_u, vrev32q_s])
520 (define_insn "mve_vrev32q_<supf><mode>"
522 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
523 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
527 "vrev32.%#<V_sz_elem>\t%q0, %q1"
528 [(set_attr "type" "mve_move")
532 ;; [vmovltq_u, vmovltq_s])
534 (define_insn "mve_vmovltq_<supf><mode>"
536 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
537 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
541 "vmovlt.<supf>%#<V_sz_elem> %q0, %q1"
542 [(set_attr "type" "mve_move")
546 ;; [vmovlbq_s, vmovlbq_u])
548 (define_insn "mve_vmovlbq_<supf><mode>"
550 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
551 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
555 "vmovlb.<supf>%#<V_sz_elem> %q0, %q1"
556 [(set_attr "type" "mve_move")
560 ;; [vcvtpq_s, vcvtpq_u])
562 (define_insn "mve_vcvtpq_<supf><mode>"
564 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
565 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
568 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
569 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
570 [(set_attr "type" "mve_move")
574 ;; [vcvtnq_s, vcvtnq_u])
576 (define_insn "mve_vcvtnq_<supf><mode>"
578 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
579 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
582 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
583 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
584 [(set_attr "type" "mve_move")
588 ;; [vcvtmq_s, vcvtmq_u])
590 (define_insn "mve_vcvtmq_<supf><mode>"
592 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
593 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
596 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
597 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
598 [(set_attr "type" "mve_move")
602 ;; [vcvtaq_u, vcvtaq_s])
604 (define_insn "mve_vcvtaq_<supf><mode>"
606 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
607 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
610 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
611 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
612 [(set_attr "type" "mve_move")
616 ;; [vmvnq_n_u, vmvnq_n_s])
618 (define_insn "mve_vmvnq_n_<supf><mode>"
620 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
621 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
625 "vmvn.i%#<V_sz_elem> %q0, %1"
626 [(set_attr "type" "mve_move")
630 ;; [vrev16q_u, vrev16q_s])
632 (define_insn "mve_vrev16q_<supf>v16qi"
634 (set (match_operand:V16QI 0 "s_register_operand" "=w")
635 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
640 [(set_attr "type" "mve_move")
644 ;; [vaddlvq_s vaddlvq_u])
646 (define_insn "mve_vaddlvq_<supf>v4si"
648 (set (match_operand:DI 0 "s_register_operand" "=r")
649 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
653 "vaddlv.<supf>32 %Q0, %R0, %q1"
654 [(set_attr "type" "mve_move")
658 ;; [vctp8q vctp16q vctp32q vctp64q])
660 (define_insn "mve_vctp<mode1>qhi"
662 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
663 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
668 [(set_attr "type" "mve_move")
674 (define_insn "mve_vpnothi"
676 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
677 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
682 [(set_attr "type" "mve_move")
688 (define_insn "mve_vsubq_n_f<mode>"
690 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
691 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
692 (match_operand:<V_elem> 2 "s_register_operand" "r")]
695 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
696 "vsub.f<V_sz_elem> %q0, %q1, %2"
697 [(set_attr "type" "mve_move")
703 (define_insn "mve_vbrsrq_n_f<mode>"
705 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
706 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
707 (match_operand:SI 2 "s_register_operand" "r")]
710 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
711 "vbrsr.<V_sz_elem> %q0, %q1, %2"
712 [(set_attr "type" "mve_move")
716 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
718 (define_insn "mve_vcvtq_n_to_f_<supf><mode>"
720 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
721 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
722 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
725 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
726 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
727 [(set_attr "type" "mve_move")
732 (define_insn "mve_vcreateq_f<mode>"
734 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
735 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
736 (match_operand:DI 2 "s_register_operand" "r")]
739 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
740 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
741 [(set_attr "type" "mve_move")
742 (set_attr "length""8")])
745 ;; [vcreateq_u, vcreateq_s])
747 (define_insn "mve_vcreateq_<supf><mode>"
749 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
750 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
751 (match_operand:DI 2 "s_register_operand" "r")]
755 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
756 [(set_attr "type" "mve_move")
757 (set_attr "length""8")])
760 ;; [vshrq_n_s, vshrq_n_u])
762 (define_insn "mve_vshrq_n_<supf><mode>"
764 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
765 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
766 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
770 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
771 [(set_attr "type" "mve_move")
775 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
777 (define_insn "mve_vcvtq_n_from_f_<supf><mode>"
779 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
780 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
781 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
784 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
785 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
786 [(set_attr "type" "mve_move")
792 (define_insn "mve_vaddlvq_p_<supf>v4si"
794 (set (match_operand:DI 0 "s_register_operand" "=r")
795 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
796 (match_operand:HI 2 "vpr_register_operand" "Up")]
800 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
801 [(set_attr "type" "mve_move")
802 (set_attr "length""8")])
805 ;; [vcmpneq_u, vcmpneq_s])
807 (define_insn "mve_vcmpneq_<supf><mode>"
809 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
810 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
811 (match_operand:MVE_2 2 "s_register_operand" "w")]
815 "vcmp.i%#<V_sz_elem> ne, %q1, %q2"
816 [(set_attr "type" "mve_move")
820 ;; [vshlq_s, vshlq_u])
822 (define_insn "mve_vshlq_<supf><mode>"
824 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
825 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
826 (match_operand:MVE_2 2 "s_register_operand" "w")]
830 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
831 [(set_attr "type" "mve_move")
835 ;; [vabdq_s, vabdq_u])
837 (define_insn "mve_vabdq_<supf><mode>"
839 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
840 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
841 (match_operand:MVE_2 2 "s_register_operand" "w")]
845 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
846 [(set_attr "type" "mve_move")
850 ;; [vaddq_n_s, vaddq_n_u])
852 (define_insn "mve_vaddq_n_<supf><mode>"
854 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
855 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
856 (match_operand:<V_elem> 2 "s_register_operand" "r")]
860 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
861 [(set_attr "type" "mve_move")
865 ;; [vaddvaq_s, vaddvaq_u])
867 (define_insn "mve_vaddvaq_<supf><mode>"
869 (set (match_operand:SI 0 "s_register_operand" "=Te")
870 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
871 (match_operand:MVE_2 2 "s_register_operand" "w")]
875 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
876 [(set_attr "type" "mve_move")
880 ;; [vaddvq_p_u, vaddvq_p_s])
882 (define_insn "mve_vaddvq_p_<supf><mode>"
884 (set (match_operand:SI 0 "s_register_operand" "=Te")
885 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
886 (match_operand:HI 2 "vpr_register_operand" "Up")]
890 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
891 [(set_attr "type" "mve_move")
892 (set_attr "length""8")])
895 ;; [vandq_u, vandq_s])
897 ;; signed and unsigned versions are the same: define the unsigned
898 ;; insn, and use an expander for the signed one as we still reference
899 ;; both names from arm_mve.h.
900 ;; We use the same code as in neon.md (TODO: avoid this duplication).
901 (define_insn "mve_vandq_u<mode>"
903 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
904 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
905 (match_operand:MVE_2 2 "neon_inv_logic_op2" "w,DL")))
910 * return neon_output_logic_immediate (\"vand\", &operands[2], <MODE>mode, 1, VALID_NEON_QREG_MODE (<MODE>mode));"
911 [(set_attr "type" "mve_move")
913 (define_expand "mve_vandq_s<mode>"
915 (set (match_operand:MVE_2 0 "s_register_operand")
916 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
917 (match_operand:MVE_2 2 "neon_inv_logic_op2")))
923 ;; [vbicq_s, vbicq_u])
925 (define_insn "mve_vbicq_<supf><mode>"
927 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
928 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
929 (match_operand:MVE_2 2 "s_register_operand" "w")]
934 [(set_attr "type" "mve_move")
938 ;; [vbrsrq_n_u, vbrsrq_n_s])
940 (define_insn "mve_vbrsrq_n_<supf><mode>"
942 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
943 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
944 (match_operand:SI 2 "s_register_operand" "r")]
948 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
949 [(set_attr "type" "mve_move")
953 ;; [vcaddq_rot270_s, vcaddq_rot270_u])
955 (define_insn "mve_vcaddq_rot270_<supf><mode>"
957 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
958 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
959 (match_operand:MVE_2 2 "s_register_operand" "w")]
963 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #270"
964 [(set_attr "type" "mve_move")
968 ;; [vcaddq_rot90_u, vcaddq_rot90_s])
970 (define_insn "mve_vcaddq_rot90_<supf><mode>"
972 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
973 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
974 (match_operand:MVE_2 2 "s_register_operand" "w")]
978 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #90"
979 [(set_attr "type" "mve_move")
985 (define_insn "mve_vcmpcsq_n_u<mode>"
987 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
988 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
989 (match_operand:<V_elem> 2 "s_register_operand" "r")]
993 "vcmp.u%#<V_sz_elem> cs, %q1, %2"
994 [(set_attr "type" "mve_move")
1000 (define_insn "mve_vcmpcsq_u<mode>"
1002 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1003 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1004 (match_operand:MVE_2 2 "s_register_operand" "w")]
1008 "vcmp.u%#<V_sz_elem> cs, %q1, %q2"
1009 [(set_attr "type" "mve_move")
1013 ;; [vcmpeqq_n_s, vcmpeqq_n_u])
1015 (define_insn "mve_vcmpeqq_n_<supf><mode>"
1017 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1018 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1019 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1023 "vcmp.i%#<V_sz_elem> eq, %q1, %2"
1024 [(set_attr "type" "mve_move")
1028 ;; [vcmpeqq_u, vcmpeqq_s])
1030 (define_insn "mve_vcmpeqq_<supf><mode>"
1032 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1033 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1034 (match_operand:MVE_2 2 "s_register_operand" "w")]
1038 "vcmp.i%#<V_sz_elem> eq, %q1, %q2"
1039 [(set_attr "type" "mve_move")
1045 (define_insn "mve_vcmpgeq_n_s<mode>"
1047 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1048 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1049 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1053 "vcmp.s%#<V_sz_elem> ge, %q1, %2"
1054 [(set_attr "type" "mve_move")
1060 (define_insn "mve_vcmpgeq_s<mode>"
1062 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1063 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1064 (match_operand:MVE_2 2 "s_register_operand" "w")]
1068 "vcmp.s%#<V_sz_elem> ge, %q1, %q2"
1069 [(set_attr "type" "mve_move")
1075 (define_insn "mve_vcmpgtq_n_s<mode>"
1077 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1078 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1079 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1083 "vcmp.s%#<V_sz_elem> gt, %q1, %2"
1084 [(set_attr "type" "mve_move")
1090 (define_insn "mve_vcmpgtq_s<mode>"
1092 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1093 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1094 (match_operand:MVE_2 2 "s_register_operand" "w")]
1098 "vcmp.s%#<V_sz_elem> gt, %q1, %q2"
1099 [(set_attr "type" "mve_move")
1105 (define_insn "mve_vcmphiq_n_u<mode>"
1107 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1108 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1109 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1113 "vcmp.u%#<V_sz_elem> hi, %q1, %2"
1114 [(set_attr "type" "mve_move")
1120 (define_insn "mve_vcmphiq_u<mode>"
1122 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1123 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1124 (match_operand:MVE_2 2 "s_register_operand" "w")]
1128 "vcmp.u%#<V_sz_elem> hi, %q1, %q2"
1129 [(set_attr "type" "mve_move")
1135 (define_insn "mve_vcmpleq_n_s<mode>"
1137 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1138 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1139 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1143 "vcmp.s%#<V_sz_elem> le, %q1, %2"
1144 [(set_attr "type" "mve_move")
1150 (define_insn "mve_vcmpleq_s<mode>"
1152 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1153 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1154 (match_operand:MVE_2 2 "s_register_operand" "w")]
1158 "vcmp.s%#<V_sz_elem> le, %q1, %q2"
1159 [(set_attr "type" "mve_move")
1165 (define_insn "mve_vcmpltq_n_s<mode>"
1167 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1168 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1169 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1173 "vcmp.s%#<V_sz_elem> lt, %q1, %2"
1174 [(set_attr "type" "mve_move")
1180 (define_insn "mve_vcmpltq_s<mode>"
1182 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1183 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1184 (match_operand:MVE_2 2 "s_register_operand" "w")]
1188 "vcmp.s%#<V_sz_elem> lt, %q1, %q2"
1189 [(set_attr "type" "mve_move")
1193 ;; [vcmpneq_n_u, vcmpneq_n_s])
1195 (define_insn "mve_vcmpneq_n_<supf><mode>"
1197 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1198 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1199 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1203 "vcmp.i%#<V_sz_elem> ne, %q1, %2"
1204 [(set_attr "type" "mve_move")
1208 ;; [veorq_u, veorq_s])
1210 (define_insn "mve_veorq_<supf><mode>"
1212 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1213 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1214 (match_operand:MVE_2 2 "s_register_operand" "w")]
1218 "veor %q0, %q1, %q2"
1219 [(set_attr "type" "mve_move")
1223 ;; [vhaddq_n_u, vhaddq_n_s])
1225 (define_insn "mve_vhaddq_n_<supf><mode>"
1227 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1228 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1229 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1233 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1234 [(set_attr "type" "mve_move")
1238 ;; [vhaddq_s, vhaddq_u])
1240 (define_insn "mve_vhaddq_<supf><mode>"
1242 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1243 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1244 (match_operand:MVE_2 2 "s_register_operand" "w")]
1248 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1249 [(set_attr "type" "mve_move")
1253 ;; [vhcaddq_rot270_s])
1255 (define_insn "mve_vhcaddq_rot270_s<mode>"
1257 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1258 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1259 (match_operand:MVE_2 2 "s_register_operand" "w")]
1263 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1264 [(set_attr "type" "mve_move")
1268 ;; [vhcaddq_rot90_s])
1270 (define_insn "mve_vhcaddq_rot90_s<mode>"
1272 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1273 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1274 (match_operand:MVE_2 2 "s_register_operand" "w")]
1278 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1279 [(set_attr "type" "mve_move")
1283 ;; [vhsubq_n_u, vhsubq_n_s])
1285 (define_insn "mve_vhsubq_n_<supf><mode>"
1287 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1288 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1289 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1293 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1294 [(set_attr "type" "mve_move")
1298 ;; [vhsubq_s, vhsubq_u])
1300 (define_insn "mve_vhsubq_<supf><mode>"
1302 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1303 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1304 (match_operand:MVE_2 2 "s_register_operand" "w")]
1308 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1309 [(set_attr "type" "mve_move")
1315 (define_insn "mve_vmaxaq_s<mode>"
1317 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1318 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1319 (match_operand:MVE_2 2 "s_register_operand" "w")]
1323 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1324 [(set_attr "type" "mve_move")
1330 (define_insn "mve_vmaxavq_s<mode>"
1332 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1333 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1334 (match_operand:MVE_2 2 "s_register_operand" "w")]
1338 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1339 [(set_attr "type" "mve_move")
1343 ;; [vmaxq_u, vmaxq_s])
1345 (define_insn "mve_vmaxq_s<mode>"
1347 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1348 (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1349 (match_operand:MVE_2 2 "s_register_operand" "w")))
1352 "vmax.%#<V_s_elem>\t%q0, %q1, %q2"
1353 [(set_attr "type" "mve_move")
1356 (define_insn "mve_vmaxq_u<mode>"
1358 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1359 (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1360 (match_operand:MVE_2 2 "s_register_operand" "w")))
1363 "vmax.%#<V_u_elem>\t%q0, %q1, %q2"
1364 [(set_attr "type" "mve_move")
1368 ;; [vmaxvq_u, vmaxvq_s])
1370 (define_insn "mve_vmaxvq_<supf><mode>"
1372 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1373 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1374 (match_operand:MVE_2 2 "s_register_operand" "w")]
1378 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1379 [(set_attr "type" "mve_move")
1385 (define_insn "mve_vminaq_s<mode>"
1387 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1388 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1389 (match_operand:MVE_2 2 "s_register_operand" "w")]
1393 "vmina.s%#<V_sz_elem>\t%q0, %q2"
1394 [(set_attr "type" "mve_move")
1400 (define_insn "mve_vminavq_s<mode>"
1402 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1403 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1404 (match_operand:MVE_2 2 "s_register_operand" "w")]
1408 "vminav.s%#<V_sz_elem>\t%0, %q2"
1409 [(set_attr "type" "mve_move")
1413 ;; [vminq_s, vminq_u])
1415 (define_insn "mve_vminq_s<mode>"
1417 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1418 (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1419 (match_operand:MVE_2 2 "s_register_operand" "w")))
1422 "vmin.%#<V_s_elem>\t%q0, %q1, %q2"
1423 [(set_attr "type" "mve_move")
1426 (define_insn "mve_vminq_u<mode>"
1428 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1429 (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1430 (match_operand:MVE_2 2 "s_register_operand" "w")))
1433 "vmin.%#<V_u_elem>\t%q0, %q1, %q2"
1434 [(set_attr "type" "mve_move")
1438 ;; [vminvq_u, vminvq_s])
1440 (define_insn "mve_vminvq_<supf><mode>"
1442 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1443 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1444 (match_operand:MVE_2 2 "s_register_operand" "w")]
1448 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
1449 [(set_attr "type" "mve_move")
1453 ;; [vmladavq_u, vmladavq_s])
1455 (define_insn "mve_vmladavq_<supf><mode>"
1457 (set (match_operand:SI 0 "s_register_operand" "=Te")
1458 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1459 (match_operand:MVE_2 2 "s_register_operand" "w")]
1463 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
1464 [(set_attr "type" "mve_move")
1470 (define_insn "mve_vmladavxq_s<mode>"
1472 (set (match_operand:SI 0 "s_register_operand" "=Te")
1473 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1474 (match_operand:MVE_2 2 "s_register_operand" "w")]
1478 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1479 [(set_attr "type" "mve_move")
1485 (define_insn "mve_vmlsdavq_s<mode>"
1487 (set (match_operand:SI 0 "s_register_operand" "=Te")
1488 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1489 (match_operand:MVE_2 2 "s_register_operand" "w")]
1493 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
1494 [(set_attr "type" "mve_move")
1500 (define_insn "mve_vmlsdavxq_s<mode>"
1502 (set (match_operand:SI 0 "s_register_operand" "=Te")
1503 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1504 (match_operand:MVE_2 2 "s_register_operand" "w")]
1508 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1509 [(set_attr "type" "mve_move")
1513 ;; [vmulhq_s, vmulhq_u])
1515 (define_insn "mve_vmulhq_<supf><mode>"
1517 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1518 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1519 (match_operand:MVE_2 2 "s_register_operand" "w")]
1523 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1524 [(set_attr "type" "mve_move")
1528 ;; [vmullbq_int_u, vmullbq_int_s])
1530 (define_insn "mve_vmullbq_int_<supf><mode>"
1532 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1533 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1534 (match_operand:MVE_2 2 "s_register_operand" "w")]
1538 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1539 [(set_attr "type" "mve_move")
1543 ;; [vmulltq_int_u, vmulltq_int_s])
1545 (define_insn "mve_vmulltq_int_<supf><mode>"
1547 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1548 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1549 (match_operand:MVE_2 2 "s_register_operand" "w")]
1553 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1554 [(set_attr "type" "mve_move")
1558 ;; [vmulq_n_u, vmulq_n_s])
1560 (define_insn "mve_vmulq_n_<supf><mode>"
1562 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1563 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1564 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1568 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
1569 [(set_attr "type" "mve_move")
1573 ;; [vmulq_u, vmulq_s])
1575 (define_insn "mve_vmulq_<supf><mode>"
1577 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1578 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1579 (match_operand:MVE_2 2 "s_register_operand" "w")]
1583 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1584 [(set_attr "type" "mve_move")
1587 (define_insn "mve_vmulq<mode>"
1589 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1590 (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1591 (match_operand:MVE_2 2 "s_register_operand" "w")))
1594 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1595 [(set_attr "type" "mve_move")
1599 ;; [vornq_u, vornq_s])
1601 (define_insn "mve_vornq_<supf><mode>"
1603 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1604 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1605 (match_operand:MVE_2 2 "s_register_operand" "w")]
1609 "vorn %q0, %q1, %q2"
1610 [(set_attr "type" "mve_move")
1614 ;; [vorrq_s, vorrq_u])
1616 ;; signed and unsigned versions are the same: define the unsigned
1617 ;; insn, and use an expander for the signed one as we still reference
1618 ;; both names from arm_mve.h.
1619 ;; We use the same code as in neon.md (TODO: avoid this duplication).
1620 (define_insn "mve_vorrq_s<mode>"
1622 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
1623 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
1624 (match_operand:MVE_2 2 "neon_logic_op2" "w,Dl")))
1629 * return neon_output_logic_immediate (\"vorr\", &operands[2], <MODE>mode, 0, VALID_NEON_QREG_MODE (<MODE>mode));"
1630 [(set_attr "type" "mve_move")
1632 (define_expand "mve_vorrq_u<mode>"
1634 (set (match_operand:MVE_2 0 "s_register_operand")
1635 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1636 (match_operand:MVE_2 2 "neon_logic_op2")))
1642 ;; [vqaddq_n_s, vqaddq_n_u])
1644 (define_insn "mve_vqaddq_n_<supf><mode>"
1646 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1647 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1648 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1652 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1653 [(set_attr "type" "mve_move")
1657 ;; [vqaddq_u, vqaddq_s])
1659 (define_insn "mve_vqaddq_<supf><mode>"
1661 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1662 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1663 (match_operand:MVE_2 2 "s_register_operand" "w")]
1667 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1668 [(set_attr "type" "mve_move")
1674 (define_insn "mve_vqdmulhq_n_s<mode>"
1676 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1677 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1678 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1682 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1683 [(set_attr "type" "mve_move")
1689 (define_insn "mve_vqdmulhq_s<mode>"
1691 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1692 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1693 (match_operand:MVE_2 2 "s_register_operand" "w")]
1697 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1698 [(set_attr "type" "mve_move")
1704 (define_insn "mve_vqrdmulhq_n_s<mode>"
1706 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1707 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1708 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1712 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1713 [(set_attr "type" "mve_move")
1719 (define_insn "mve_vqrdmulhq_s<mode>"
1721 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1722 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1723 (match_operand:MVE_2 2 "s_register_operand" "w")]
1727 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1728 [(set_attr "type" "mve_move")
1732 ;; [vqrshlq_n_s, vqrshlq_n_u])
1734 (define_insn "mve_vqrshlq_n_<supf><mode>"
1736 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1737 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1738 (match_operand:SI 2 "s_register_operand" "r")]
1742 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1743 [(set_attr "type" "mve_move")
1747 ;; [vqrshlq_s, vqrshlq_u])
1749 (define_insn "mve_vqrshlq_<supf><mode>"
1751 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1752 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1753 (match_operand:MVE_2 2 "s_register_operand" "w")]
1757 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1758 [(set_attr "type" "mve_move")
1762 ;; [vqshlq_n_s, vqshlq_n_u])
1764 (define_insn "mve_vqshlq_n_<supf><mode>"
1766 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1767 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1768 (match_operand:SI 2 "immediate_operand" "i")]
1772 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1773 [(set_attr "type" "mve_move")
1777 ;; [vqshlq_r_u, vqshlq_r_s])
1779 (define_insn "mve_vqshlq_r_<supf><mode>"
1781 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1782 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1783 (match_operand:SI 2 "s_register_operand" "r")]
1787 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
1788 [(set_attr "type" "mve_move")
1792 ;; [vqshlq_s, vqshlq_u])
1794 (define_insn "mve_vqshlq_<supf><mode>"
1796 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1797 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1798 (match_operand:MVE_2 2 "s_register_operand" "w")]
1802 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1803 [(set_attr "type" "mve_move")
1809 (define_insn "mve_vqshluq_n_s<mode>"
1811 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1812 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1813 (match_operand:SI 2 "mve_imm_7" "Ra")]
1817 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
1818 [(set_attr "type" "mve_move")
1822 ;; [vqsubq_n_s, vqsubq_n_u])
1824 (define_insn "mve_vqsubq_n_<supf><mode>"
1826 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1827 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1828 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1832 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1833 [(set_attr "type" "mve_move")
1837 ;; [vqsubq_u, vqsubq_s])
1839 (define_insn "mve_vqsubq_<supf><mode>"
1841 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1842 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1843 (match_operand:MVE_2 2 "s_register_operand" "w")]
1847 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1848 [(set_attr "type" "mve_move")
1852 ;; [vrhaddq_s, vrhaddq_u])
1854 (define_insn "mve_vrhaddq_<supf><mode>"
1856 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1857 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1858 (match_operand:MVE_2 2 "s_register_operand" "w")]
1862 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1863 [(set_attr "type" "mve_move")
1867 ;; [vrmulhq_s, vrmulhq_u])
1869 (define_insn "mve_vrmulhq_<supf><mode>"
1871 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1872 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1873 (match_operand:MVE_2 2 "s_register_operand" "w")]
1877 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1878 [(set_attr "type" "mve_move")
1882 ;; [vrshlq_n_u, vrshlq_n_s])
1884 (define_insn "mve_vrshlq_n_<supf><mode>"
1886 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1887 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1888 (match_operand:SI 2 "s_register_operand" "r")]
1892 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1893 [(set_attr "type" "mve_move")
1897 ;; [vrshlq_s, vrshlq_u])
1899 (define_insn "mve_vrshlq_<supf><mode>"
1901 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1902 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1903 (match_operand:MVE_2 2 "s_register_operand" "w")]
1907 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1908 [(set_attr "type" "mve_move")
1912 ;; [vrshrq_n_s, vrshrq_n_u])
1914 (define_insn "mve_vrshrq_n_<supf><mode>"
1916 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1917 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1918 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1922 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1923 [(set_attr "type" "mve_move")
1927 ;; [vshlq_n_u, vshlq_n_s])
1929 (define_insn "mve_vshlq_n_<supf><mode>"
1931 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1932 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1933 (match_operand:SI 2 "immediate_operand" "i")]
1937 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1938 [(set_attr "type" "mve_move")
1942 ;; [vshlq_r_s, vshlq_r_u])
1944 (define_insn "mve_vshlq_r_<supf><mode>"
1946 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1947 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1948 (match_operand:SI 2 "s_register_operand" "r")]
1952 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
1953 [(set_attr "type" "mve_move")
1957 ;; [vsubq_n_s, vsubq_n_u])
1959 (define_insn "mve_vsubq_n_<supf><mode>"
1961 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1962 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1963 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1967 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
1968 [(set_attr "type" "mve_move")
1972 ;; [vsubq_s, vsubq_u])
1974 (define_insn "mve_vsubq_<supf><mode>"
1976 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1977 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1978 (match_operand:MVE_2 2 "s_register_operand" "w")]
1982 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1983 [(set_attr "type" "mve_move")
1986 (define_insn "mve_vsubq<mode>"
1988 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1989 (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1990 (match_operand:MVE_2 2 "s_register_operand" "w")))
1993 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1994 [(set_attr "type" "mve_move")
2000 (define_insn "mve_vabdq_f<mode>"
2002 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2003 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2004 (match_operand:MVE_0 2 "s_register_operand" "w")]
2007 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2008 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
2009 [(set_attr "type" "mve_move")
2013 ;; [vaddlvaq_s vaddlvaq_u])
2015 (define_insn "mve_vaddlvaq_<supf>v4si"
2017 (set (match_operand:DI 0 "s_register_operand" "=r")
2018 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2019 (match_operand:V4SI 2 "s_register_operand" "w")]
2023 "vaddlva.<supf>32 %Q0, %R0, %q2"
2024 [(set_attr "type" "mve_move")
2030 (define_insn "mve_vaddq_n_f<mode>"
2032 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2033 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2034 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2037 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2038 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
2039 [(set_attr "type" "mve_move")
2045 (define_insn "mve_vandq_f<mode>"
2047 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2048 (and:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2049 (match_operand:MVE_0 2 "s_register_operand" "w")))
2051 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2052 "vand %q0, %q1, %q2"
2053 [(set_attr "type" "mve_move")
2059 (define_insn "mve_vbicq_f<mode>"
2061 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2062 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2063 (match_operand:MVE_0 2 "s_register_operand" "w")]
2066 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2067 "vbic %q0, %q1, %q2"
2068 [(set_attr "type" "mve_move")
2072 ;; [vbicq_n_s, vbicq_n_u])
2074 (define_insn "mve_vbicq_n_<supf><mode>"
2076 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2077 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2078 (match_operand:SI 2 "immediate_operand" "i")]
2082 "vbic.i%#<V_sz_elem> %q0, %2"
2083 [(set_attr "type" "mve_move")
2087 ;; [vcaddq_rot270_f])
2089 (define_insn "mve_vcaddq_rot270_f<mode>"
2091 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2092 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2093 (match_operand:MVE_0 2 "s_register_operand" "w")]
2096 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2097 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #270"
2098 [(set_attr "type" "mve_move")
2102 ;; [vcaddq_rot90_f])
2104 (define_insn "mve_vcaddq_rot90_f<mode>"
2106 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2107 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2108 (match_operand:MVE_0 2 "s_register_operand" "w")]
2111 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2112 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #90"
2113 [(set_attr "type" "mve_move")
2119 (define_insn "mve_vcmpeqq_f<mode>"
2121 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2122 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2123 (match_operand:MVE_0 2 "s_register_operand" "w")]
2126 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2127 "vcmp.f%#<V_sz_elem> eq, %q1, %q2"
2128 [(set_attr "type" "mve_move")
2134 (define_insn "mve_vcmpeqq_n_f<mode>"
2136 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2137 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2138 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2141 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2142 "vcmp.f%#<V_sz_elem> eq, %q1, %2"
2143 [(set_attr "type" "mve_move")
2149 (define_insn "mve_vcmpgeq_f<mode>"
2151 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2152 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2153 (match_operand:MVE_0 2 "s_register_operand" "w")]
2156 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2157 "vcmp.f%#<V_sz_elem> ge, %q1, %q2"
2158 [(set_attr "type" "mve_move")
2164 (define_insn "mve_vcmpgeq_n_f<mode>"
2166 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2167 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2168 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2171 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2172 "vcmp.f%#<V_sz_elem> ge, %q1, %2"
2173 [(set_attr "type" "mve_move")
2179 (define_insn "mve_vcmpgtq_f<mode>"
2181 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2182 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2183 (match_operand:MVE_0 2 "s_register_operand" "w")]
2186 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2187 "vcmp.f%#<V_sz_elem> gt, %q1, %q2"
2188 [(set_attr "type" "mve_move")
2194 (define_insn "mve_vcmpgtq_n_f<mode>"
2196 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2197 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2198 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2201 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2202 "vcmp.f%#<V_sz_elem> gt, %q1, %2"
2203 [(set_attr "type" "mve_move")
2209 (define_insn "mve_vcmpleq_f<mode>"
2211 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2212 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2213 (match_operand:MVE_0 2 "s_register_operand" "w")]
2216 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2217 "vcmp.f%#<V_sz_elem> le, %q1, %q2"
2218 [(set_attr "type" "mve_move")
2224 (define_insn "mve_vcmpleq_n_f<mode>"
2226 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2227 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2228 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2231 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2232 "vcmp.f%#<V_sz_elem> le, %q1, %2"
2233 [(set_attr "type" "mve_move")
2239 (define_insn "mve_vcmpltq_f<mode>"
2241 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2242 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2243 (match_operand:MVE_0 2 "s_register_operand" "w")]
2246 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2247 "vcmp.f%#<V_sz_elem> lt, %q1, %q2"
2248 [(set_attr "type" "mve_move")
2254 (define_insn "mve_vcmpltq_n_f<mode>"
2256 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2257 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2258 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2261 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2262 "vcmp.f%#<V_sz_elem> lt, %q1, %2"
2263 [(set_attr "type" "mve_move")
2269 (define_insn "mve_vcmpneq_f<mode>"
2271 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2272 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2273 (match_operand:MVE_0 2 "s_register_operand" "w")]
2276 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2277 "vcmp.f%#<V_sz_elem> ne, %q1, %q2"
2278 [(set_attr "type" "mve_move")
2284 (define_insn "mve_vcmpneq_n_f<mode>"
2286 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2287 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2288 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2291 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2292 "vcmp.f%#<V_sz_elem> ne, %q1, %2"
2293 [(set_attr "type" "mve_move")
2299 (define_insn "mve_vcmulq_f<mode>"
2301 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2302 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2303 (match_operand:MVE_0 2 "s_register_operand" "w")]
2306 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2307 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #0"
2308 [(set_attr "type" "mve_move")
2312 ;; [vcmulq_rot180_f])
2314 (define_insn "mve_vcmulq_rot180_f<mode>"
2316 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2317 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2318 (match_operand:MVE_0 2 "s_register_operand" "w")]
2321 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2322 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #180"
2323 [(set_attr "type" "mve_move")
2327 ;; [vcmulq_rot270_f])
2329 (define_insn "mve_vcmulq_rot270_f<mode>"
2331 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2332 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2333 (match_operand:MVE_0 2 "s_register_operand" "w")]
2336 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2337 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #270"
2338 [(set_attr "type" "mve_move")
2342 ;; [vcmulq_rot90_f])
2344 (define_insn "mve_vcmulq_rot90_f<mode>"
2346 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2347 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2348 (match_operand:MVE_0 2 "s_register_operand" "w")]
2351 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2352 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #90"
2353 [(set_attr "type" "mve_move")
2357 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
2359 (define_insn "mve_vctp<mode1>q_mhi"
2361 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2362 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
2363 (match_operand:HI 2 "vpr_register_operand" "Up")]
2367 "vpst\;vctpt.<mode1> %1"
2368 [(set_attr "type" "mve_move")
2369 (set_attr "length""8")])
2372 ;; [vcvtbq_f16_f32])
2374 (define_insn "mve_vcvtbq_f16_f32v8hf"
2376 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2377 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2378 (match_operand:V4SF 2 "s_register_operand" "w")]
2381 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2382 "vcvtb.f16.f32 %q0, %q2"
2383 [(set_attr "type" "mve_move")
2387 ;; [vcvttq_f16_f32])
2389 (define_insn "mve_vcvttq_f16_f32v8hf"
2391 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2392 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2393 (match_operand:V4SF 2 "s_register_operand" "w")]
2396 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2397 "vcvtt.f16.f32 %q0, %q2"
2398 [(set_attr "type" "mve_move")
2404 (define_insn "mve_veorq_f<mode>"
2406 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2407 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2408 (match_operand:MVE_0 2 "s_register_operand" "w")]
2411 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2412 "veor %q0, %q1, %q2"
2413 [(set_attr "type" "mve_move")
2419 (define_insn "mve_vmaxnmaq_f<mode>"
2421 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2422 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2423 (match_operand:MVE_0 2 "s_register_operand" "w")]
2426 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2427 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
2428 [(set_attr "type" "mve_move")
2434 (define_insn "mve_vmaxnmavq_f<mode>"
2436 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2437 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2438 (match_operand:MVE_0 2 "s_register_operand" "w")]
2441 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2442 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
2443 [(set_attr "type" "mve_move")
2449 (define_insn "mve_vmaxnmq_f<mode>"
2451 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2452 (smax:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2453 (match_operand:MVE_0 2 "s_register_operand" "w")))
2455 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2456 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
2457 [(set_attr "type" "mve_move")
2463 (define_insn "mve_vmaxnmvq_f<mode>"
2465 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2466 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2467 (match_operand:MVE_0 2 "s_register_operand" "w")]
2470 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2471 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
2472 [(set_attr "type" "mve_move")
2478 (define_insn "mve_vminnmaq_f<mode>"
2480 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2481 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2482 (match_operand:MVE_0 2 "s_register_operand" "w")]
2485 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2486 "vminnma.f%#<V_sz_elem> %q0, %q2"
2487 [(set_attr "type" "mve_move")
2493 (define_insn "mve_vminnmavq_f<mode>"
2495 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2496 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2497 (match_operand:MVE_0 2 "s_register_operand" "w")]
2500 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2501 "vminnmav.f%#<V_sz_elem> %0, %q2"
2502 [(set_attr "type" "mve_move")
2508 (define_insn "mve_vminnmq_f<mode>"
2510 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2511 (smin:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2512 (match_operand:MVE_0 2 "s_register_operand" "w")))
2514 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2515 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
2516 [(set_attr "type" "mve_move")
2522 (define_insn "mve_vminnmvq_f<mode>"
2524 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2525 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2526 (match_operand:MVE_0 2 "s_register_operand" "w")]
2529 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2530 "vminnmv.f%#<V_sz_elem> %0, %q2"
2531 [(set_attr "type" "mve_move")
2535 ;; [vmlaldavq_u, vmlaldavq_s])
2537 (define_insn "mve_vmlaldavq_<supf><mode>"
2539 (set (match_operand:DI 0 "s_register_operand" "=r")
2540 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2541 (match_operand:MVE_5 2 "s_register_operand" "w")]
2545 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2546 [(set_attr "type" "mve_move")
2552 (define_insn "mve_vmlaldavxq_s<mode>"
2554 (set (match_operand:DI 0 "s_register_operand" "=r")
2555 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2556 (match_operand:MVE_5 2 "s_register_operand" "w")]
2560 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2561 [(set_attr "type" "mve_move")
2567 (define_insn "mve_vmlsldavq_s<mode>"
2569 (set (match_operand:DI 0 "s_register_operand" "=r")
2570 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2571 (match_operand:MVE_5 2 "s_register_operand" "w")]
2575 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2576 [(set_attr "type" "mve_move")
2582 (define_insn "mve_vmlsldavxq_s<mode>"
2584 (set (match_operand:DI 0 "s_register_operand" "=r")
2585 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2586 (match_operand:MVE_5 2 "s_register_operand" "w")]
2590 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2591 [(set_attr "type" "mve_move")
2595 ;; [vmovnbq_u, vmovnbq_s])
2597 (define_insn "mve_vmovnbq_<supf><mode>"
2599 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2600 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2601 (match_operand:MVE_5 2 "s_register_operand" "w")]
2605 "vmovnb.i%#<V_sz_elem> %q0, %q2"
2606 [(set_attr "type" "mve_move")
2610 ;; [vmovntq_s, vmovntq_u])
2612 (define_insn "mve_vmovntq_<supf><mode>"
2614 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2615 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2616 (match_operand:MVE_5 2 "s_register_operand" "w")]
2620 "vmovnt.i%#<V_sz_elem> %q0, %q2"
2621 [(set_attr "type" "mve_move")
2627 (define_insn "mve_vmulq_f<mode>"
2629 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2630 (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2631 (match_operand:MVE_0 2 "s_register_operand" "w")))
2633 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2634 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
2635 [(set_attr "type" "mve_move")
2641 (define_insn "mve_vmulq_n_f<mode>"
2643 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2644 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2645 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2648 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2649 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
2650 [(set_attr "type" "mve_move")
2656 (define_insn "mve_vornq_f<mode>"
2658 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2659 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2660 (match_operand:MVE_0 2 "s_register_operand" "w")]
2663 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2664 "vorn %q0, %q1, %q2"
2665 [(set_attr "type" "mve_move")
2671 (define_insn "mve_vorrq_f<mode>"
2673 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2674 (ior:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2675 (match_operand:MVE_0 2 "s_register_operand" "w")))
2677 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2678 "vorr %q0, %q1, %q2"
2679 [(set_attr "type" "mve_move")
2683 ;; [vorrq_n_u, vorrq_n_s])
2685 (define_insn "mve_vorrq_n_<supf><mode>"
2687 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2688 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2689 (match_operand:SI 2 "immediate_operand" "i")]
2693 "vorr.i%#<V_sz_elem> %q0, %2"
2694 [(set_attr "type" "mve_move")
2700 (define_insn "mve_vqdmullbq_n_s<mode>"
2702 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2703 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2704 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2708 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
2709 [(set_attr "type" "mve_move")
2715 (define_insn "mve_vqdmullbq_s<mode>"
2717 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2718 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2719 (match_operand:MVE_5 2 "s_register_operand" "w")]
2723 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
2724 [(set_attr "type" "mve_move")
2730 (define_insn "mve_vqdmulltq_n_s<mode>"
2732 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2733 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2734 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2738 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
2739 [(set_attr "type" "mve_move")
2745 (define_insn "mve_vqdmulltq_s<mode>"
2747 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2748 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2749 (match_operand:MVE_5 2 "s_register_operand" "w")]
2753 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
2754 [(set_attr "type" "mve_move")
2758 ;; [vqmovnbq_u, vqmovnbq_s])
2760 (define_insn "mve_vqmovnbq_<supf><mode>"
2762 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2763 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2764 (match_operand:MVE_5 2 "s_register_operand" "w")]
2768 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
2769 [(set_attr "type" "mve_move")
2773 ;; [vqmovntq_u, vqmovntq_s])
2775 (define_insn "mve_vqmovntq_<supf><mode>"
2777 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2778 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2779 (match_operand:MVE_5 2 "s_register_operand" "w")]
2783 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
2784 [(set_attr "type" "mve_move")
2790 (define_insn "mve_vqmovunbq_s<mode>"
2792 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2793 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2794 (match_operand:MVE_5 2 "s_register_operand" "w")]
2798 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
2799 [(set_attr "type" "mve_move")
2805 (define_insn "mve_vqmovuntq_s<mode>"
2807 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2808 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2809 (match_operand:MVE_5 2 "s_register_operand" "w")]
2813 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
2814 [(set_attr "type" "mve_move")
2818 ;; [vrmlaldavhxq_s])
2820 (define_insn "mve_vrmlaldavhxq_sv4si"
2822 (set (match_operand:DI 0 "s_register_operand" "=r")
2823 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2824 (match_operand:V4SI 2 "s_register_operand" "w")]
2828 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
2829 [(set_attr "type" "mve_move")
2835 (define_insn "mve_vrmlsldavhq_sv4si"
2837 (set (match_operand:DI 0 "s_register_operand" "=r")
2838 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2839 (match_operand:V4SI 2 "s_register_operand" "w")]
2843 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
2844 [(set_attr "type" "mve_move")
2848 ;; [vrmlsldavhxq_s])
2850 (define_insn "mve_vrmlsldavhxq_sv4si"
2852 (set (match_operand:DI 0 "s_register_operand" "=r")
2853 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2854 (match_operand:V4SI 2 "s_register_operand" "w")]
2858 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
2859 [(set_attr "type" "mve_move")
2863 ;; [vshllbq_n_s, vshllbq_n_u])
2865 (define_insn "mve_vshllbq_n_<supf><mode>"
2867 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2868 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2869 (match_operand:SI 2 "immediate_operand" "i")]
2873 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2874 [(set_attr "type" "mve_move")
2878 ;; [vshlltq_n_u, vshlltq_n_s])
2880 (define_insn "mve_vshlltq_n_<supf><mode>"
2882 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2883 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2884 (match_operand:SI 2 "immediate_operand" "i")]
2888 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2889 [(set_attr "type" "mve_move")
2895 (define_insn "mve_vsubq_f<mode>"
2897 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2898 (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2899 (match_operand:MVE_0 2 "s_register_operand" "w")))
2901 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2902 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
2903 [(set_attr "type" "mve_move")
2907 ;; [vmulltq_poly_p])
2909 (define_insn "mve_vmulltq_poly_p<mode>"
2911 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2912 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2913 (match_operand:MVE_3 2 "s_register_operand" "w")]
2917 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
2918 [(set_attr "type" "mve_move")
2922 ;; [vmullbq_poly_p])
2924 (define_insn "mve_vmullbq_poly_p<mode>"
2926 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2927 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2928 (match_operand:MVE_3 2 "s_register_operand" "w")]
2932 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
2933 [(set_attr "type" "mve_move")
2937 ;; [vrmlaldavhq_u vrmlaldavhq_s])
2939 (define_insn "mve_vrmlaldavhq_<supf>v4si"
2941 (set (match_operand:DI 0 "s_register_operand" "=r")
2942 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2943 (match_operand:V4SI 2 "s_register_operand" "w")]
2947 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
2948 [(set_attr "type" "mve_move")
2952 ;; [vbicq_m_n_s, vbicq_m_n_u])
2954 (define_insn "mve_vbicq_m_n_<supf><mode>"
2956 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2957 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2958 (match_operand:SI 2 "immediate_operand" "i")
2959 (match_operand:HI 3 "vpr_register_operand" "Up")]
2963 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
2964 [(set_attr "type" "mve_move")
2965 (set_attr "length""8")])
2969 (define_insn "mve_vcmpeqq_m_f<mode>"
2971 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2972 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2973 (match_operand:MVE_0 2 "s_register_operand" "w")
2974 (match_operand:HI 3 "vpr_register_operand" "Up")]
2977 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2978 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
2979 [(set_attr "type" "mve_move")
2980 (set_attr "length""8")])
2982 ;; [vcvtaq_m_u, vcvtaq_m_s])
2984 (define_insn "mve_vcvtaq_m_<supf><mode>"
2986 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2987 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2988 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2989 (match_operand:HI 3 "vpr_register_operand" "Up")]
2992 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2993 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
2994 [(set_attr "type" "mve_move")
2995 (set_attr "length""8")])
2997 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
2999 (define_insn "mve_vcvtq_m_to_f_<supf><mode>"
3001 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3002 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3003 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
3004 (match_operand:HI 3 "vpr_register_operand" "Up")]
3007 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3008 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
3009 [(set_attr "type" "mve_move")
3010 (set_attr "length""8")])
3012 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
3014 (define_insn "mve_vqrshrnbq_n_<supf><mode>"
3016 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3017 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3018 (match_operand:MVE_5 2 "s_register_operand" "w")
3019 (match_operand:SI 3 "mve_imm_8" "Rb")]
3023 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
3024 [(set_attr "type" "mve_move")
3027 ;; [vqrshrunbq_n_s])
3029 (define_insn "mve_vqrshrunbq_n_s<mode>"
3031 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3032 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3033 (match_operand:MVE_5 2 "s_register_operand" "w")
3034 (match_operand:SI 3 "mve_imm_8" "Rb")]
3038 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
3039 [(set_attr "type" "mve_move")
3042 ;; [vrmlaldavhaq_s vrmlaldavhaq_u])
3044 (define_insn "mve_vrmlaldavhaq_<supf>v4si"
3046 (set (match_operand:DI 0 "s_register_operand" "=r")
3047 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
3048 (match_operand:V4SI 2 "s_register_operand" "w")
3049 (match_operand:V4SI 3 "s_register_operand" "w")]
3053 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
3054 [(set_attr "type" "mve_move")
3058 ;; [vabavq_s, vabavq_u])
3060 (define_insn "mve_vabavq_<supf><mode>"
3062 (set (match_operand:SI 0 "s_register_operand" "=r")
3063 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3064 (match_operand:MVE_2 2 "s_register_operand" "w")
3065 (match_operand:MVE_2 3 "s_register_operand" "w")]
3069 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
3070 [(set_attr "type" "mve_move")
3074 ;; [vshlcq_u vshlcq_s]
3076 (define_expand "mve_vshlcq_vec_<supf><mode>"
3077 [(match_operand:MVE_2 0 "s_register_operand")
3078 (match_operand:MVE_2 1 "s_register_operand")
3079 (match_operand:SI 2 "s_register_operand")
3080 (match_operand:SI 3 "mve_imm_32")
3081 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3084 rtx ignore_wb = gen_reg_rtx (SImode);
3085 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
3086 operands[2], operands[3]));
3090 (define_expand "mve_vshlcq_carry_<supf><mode>"
3091 [(match_operand:SI 0 "s_register_operand")
3092 (match_operand:MVE_2 1 "s_register_operand")
3093 (match_operand:SI 2 "s_register_operand")
3094 (match_operand:SI 3 "mve_imm_32")
3095 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3098 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
3099 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
3100 operands[2], operands[3]));
3104 (define_insn "mve_vshlcq_<supf><mode>"
3105 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
3106 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
3107 (match_operand:SI 3 "s_register_operand" "1")
3108 (match_operand:SI 4 "mve_imm_32" "Rf")]
3110 (set (match_operand:SI 1 "s_register_operand" "=r")
3111 (unspec:SI [(match_dup 2)
3116 "vshlc %q0, %1, %4")
3121 (define_insn "mve_vabsq_m_s<mode>"
3123 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3124 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3125 (match_operand:MVE_2 2 "s_register_operand" "w")
3126 (match_operand:HI 3 "vpr_register_operand" "Up")]
3130 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
3131 [(set_attr "type" "mve_move")
3132 (set_attr "length""8")])
3135 ;; [vaddvaq_p_u, vaddvaq_p_s])
3137 (define_insn "mve_vaddvaq_p_<supf><mode>"
3139 (set (match_operand:SI 0 "s_register_operand" "=Te")
3140 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3141 (match_operand:MVE_2 2 "s_register_operand" "w")
3142 (match_operand:HI 3 "vpr_register_operand" "Up")]
3146 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
3147 [(set_attr "type" "mve_move")
3148 (set_attr "length""8")])
3153 (define_insn "mve_vclsq_m_s<mode>"
3155 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3156 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3157 (match_operand:MVE_2 2 "s_register_operand" "w")
3158 (match_operand:HI 3 "vpr_register_operand" "Up")]
3162 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
3163 [(set_attr "type" "mve_move")
3164 (set_attr "length""8")])
3167 ;; [vclzq_m_s, vclzq_m_u])
3169 (define_insn "mve_vclzq_m_<supf><mode>"
3171 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3172 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3173 (match_operand:MVE_2 2 "s_register_operand" "w")
3174 (match_operand:HI 3 "vpr_register_operand" "Up")]
3178 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
3179 [(set_attr "type" "mve_move")
3180 (set_attr "length""8")])
3185 (define_insn "mve_vcmpcsq_m_n_u<mode>"
3187 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3188 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3189 (match_operand:<V_elem> 2 "s_register_operand" "r")
3190 (match_operand:HI 3 "vpr_register_operand" "Up")]
3194 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
3195 [(set_attr "type" "mve_move")
3196 (set_attr "length""8")])
3201 (define_insn "mve_vcmpcsq_m_u<mode>"
3203 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3204 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3205 (match_operand:MVE_2 2 "s_register_operand" "w")
3206 (match_operand:HI 3 "vpr_register_operand" "Up")]
3210 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
3211 [(set_attr "type" "mve_move")
3212 (set_attr "length""8")])
3215 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
3217 (define_insn "mve_vcmpeqq_m_n_<supf><mode>"
3219 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3220 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3221 (match_operand:<V_elem> 2 "s_register_operand" "r")
3222 (match_operand:HI 3 "vpr_register_operand" "Up")]
3226 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
3227 [(set_attr "type" "mve_move")
3228 (set_attr "length""8")])
3231 ;; [vcmpeqq_m_u, vcmpeqq_m_s])
3233 (define_insn "mve_vcmpeqq_m_<supf><mode>"
3235 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3236 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3237 (match_operand:MVE_2 2 "s_register_operand" "w")
3238 (match_operand:HI 3 "vpr_register_operand" "Up")]
3242 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
3243 [(set_attr "type" "mve_move")
3244 (set_attr "length""8")])
3249 (define_insn "mve_vcmpgeq_m_n_s<mode>"
3251 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3252 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3253 (match_operand:<V_elem> 2 "s_register_operand" "r")
3254 (match_operand:HI 3 "vpr_register_operand" "Up")]
3258 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
3259 [(set_attr "type" "mve_move")
3260 (set_attr "length""8")])
3265 (define_insn "mve_vcmpgeq_m_s<mode>"
3267 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3268 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3269 (match_operand:MVE_2 2 "s_register_operand" "w")
3270 (match_operand:HI 3 "vpr_register_operand" "Up")]
3274 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
3275 [(set_attr "type" "mve_move")
3276 (set_attr "length""8")])
3281 (define_insn "mve_vcmpgtq_m_n_s<mode>"
3283 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3284 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3285 (match_operand:<V_elem> 2 "s_register_operand" "r")
3286 (match_operand:HI 3 "vpr_register_operand" "Up")]
3290 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
3291 [(set_attr "type" "mve_move")
3292 (set_attr "length""8")])
3297 (define_insn "mve_vcmpgtq_m_s<mode>"
3299 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3300 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3301 (match_operand:MVE_2 2 "s_register_operand" "w")
3302 (match_operand:HI 3 "vpr_register_operand" "Up")]
3306 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
3307 [(set_attr "type" "mve_move")
3308 (set_attr "length""8")])
3313 (define_insn "mve_vcmphiq_m_n_u<mode>"
3315 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3316 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3317 (match_operand:<V_elem> 2 "s_register_operand" "r")
3318 (match_operand:HI 3 "vpr_register_operand" "Up")]
3322 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
3323 [(set_attr "type" "mve_move")
3324 (set_attr "length""8")])
3329 (define_insn "mve_vcmphiq_m_u<mode>"
3331 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3332 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3333 (match_operand:MVE_2 2 "s_register_operand" "w")
3334 (match_operand:HI 3 "vpr_register_operand" "Up")]
3338 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
3339 [(set_attr "type" "mve_move")
3340 (set_attr "length""8")])
3345 (define_insn "mve_vcmpleq_m_n_s<mode>"
3347 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3348 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3349 (match_operand:<V_elem> 2 "s_register_operand" "r")
3350 (match_operand:HI 3 "vpr_register_operand" "Up")]
3354 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
3355 [(set_attr "type" "mve_move")
3356 (set_attr "length""8")])
3361 (define_insn "mve_vcmpleq_m_s<mode>"
3363 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3364 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3365 (match_operand:MVE_2 2 "s_register_operand" "w")
3366 (match_operand:HI 3 "vpr_register_operand" "Up")]
3370 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
3371 [(set_attr "type" "mve_move")
3372 (set_attr "length""8")])
3377 (define_insn "mve_vcmpltq_m_n_s<mode>"
3379 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3380 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3381 (match_operand:<V_elem> 2 "s_register_operand" "r")
3382 (match_operand:HI 3 "vpr_register_operand" "Up")]
3386 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
3387 [(set_attr "type" "mve_move")
3388 (set_attr "length""8")])
3393 (define_insn "mve_vcmpltq_m_s<mode>"
3395 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3396 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3397 (match_operand:MVE_2 2 "s_register_operand" "w")
3398 (match_operand:HI 3 "vpr_register_operand" "Up")]
3402 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
3403 [(set_attr "type" "mve_move")
3404 (set_attr "length""8")])
3407 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3409 (define_insn "mve_vcmpneq_m_n_<supf><mode>"
3411 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3412 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3413 (match_operand:<V_elem> 2 "s_register_operand" "r")
3414 (match_operand:HI 3 "vpr_register_operand" "Up")]
3418 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
3419 [(set_attr "type" "mve_move")
3420 (set_attr "length""8")])
3423 ;; [vcmpneq_m_s, vcmpneq_m_u])
3425 (define_insn "mve_vcmpneq_m_<supf><mode>"
3427 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3428 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3429 (match_operand:MVE_2 2 "s_register_operand" "w")
3430 (match_operand:HI 3 "vpr_register_operand" "Up")]
3434 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
3435 [(set_attr "type" "mve_move")
3436 (set_attr "length""8")])
3439 ;; [vdupq_m_n_s, vdupq_m_n_u])
3441 (define_insn "mve_vdupq_m_n_<supf><mode>"
3443 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3444 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3445 (match_operand:<V_elem> 2 "s_register_operand" "r")
3446 (match_operand:HI 3 "vpr_register_operand" "Up")]
3450 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3451 [(set_attr "type" "mve_move")
3452 (set_attr "length""8")])
3457 (define_insn "mve_vmaxaq_m_s<mode>"
3459 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3460 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3461 (match_operand:MVE_2 2 "s_register_operand" "w")
3462 (match_operand:HI 3 "vpr_register_operand" "Up")]
3466 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
3467 [(set_attr "type" "mve_move")
3468 (set_attr "length""8")])
3473 (define_insn "mve_vmaxavq_p_s<mode>"
3475 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3476 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3477 (match_operand:MVE_2 2 "s_register_operand" "w")
3478 (match_operand:HI 3 "vpr_register_operand" "Up")]
3482 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
3483 [(set_attr "type" "mve_move")
3484 (set_attr "length""8")])
3487 ;; [vmaxvq_p_u, vmaxvq_p_s])
3489 (define_insn "mve_vmaxvq_p_<supf><mode>"
3491 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3492 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3493 (match_operand:MVE_2 2 "s_register_operand" "w")
3494 (match_operand:HI 3 "vpr_register_operand" "Up")]
3498 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
3499 [(set_attr "type" "mve_move")
3500 (set_attr "length""8")])
3505 (define_insn "mve_vminaq_m_s<mode>"
3507 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3508 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3509 (match_operand:MVE_2 2 "s_register_operand" "w")
3510 (match_operand:HI 3 "vpr_register_operand" "Up")]
3514 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
3515 [(set_attr "type" "mve_move")
3516 (set_attr "length""8")])
3521 (define_insn "mve_vminavq_p_s<mode>"
3523 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3524 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3525 (match_operand:MVE_2 2 "s_register_operand" "w")
3526 (match_operand:HI 3 "vpr_register_operand" "Up")]
3530 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
3531 [(set_attr "type" "mve_move")
3532 (set_attr "length""8")])
3535 ;; [vminvq_p_s, vminvq_p_u])
3537 (define_insn "mve_vminvq_p_<supf><mode>"
3539 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3540 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3541 (match_operand:MVE_2 2 "s_register_operand" "w")
3542 (match_operand:HI 3 "vpr_register_operand" "Up")]
3546 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
3547 [(set_attr "type" "mve_move")
3548 (set_attr "length""8")])
3551 ;; [vmladavaq_u, vmladavaq_s])
3553 (define_insn "mve_vmladavaq_<supf><mode>"
3555 (set (match_operand:SI 0 "s_register_operand" "=Te")
3556 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3557 (match_operand:MVE_2 2 "s_register_operand" "w")
3558 (match_operand:MVE_2 3 "s_register_operand" "w")]
3562 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
3563 [(set_attr "type" "mve_move")
3567 ;; [vmladavq_p_u, vmladavq_p_s])
3569 (define_insn "mve_vmladavq_p_<supf><mode>"
3571 (set (match_operand:SI 0 "s_register_operand" "=Te")
3572 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3573 (match_operand:MVE_2 2 "s_register_operand" "w")
3574 (match_operand:HI 3 "vpr_register_operand" "Up")]
3578 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
3579 [(set_attr "type" "mve_move")
3580 (set_attr "length""8")])
3585 (define_insn "mve_vmladavxq_p_s<mode>"
3587 (set (match_operand:SI 0 "s_register_operand" "=Te")
3588 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3589 (match_operand:MVE_2 2 "s_register_operand" "w")
3590 (match_operand:HI 3 "vpr_register_operand" "Up")]
3594 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
3595 [(set_attr "type" "mve_move")
3596 (set_attr "length""8")])
3599 ;; [vmlaq_n_u, vmlaq_n_s])
3601 (define_insn "mve_vmlaq_n_<supf><mode>"
3603 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3604 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3605 (match_operand:MVE_2 2 "s_register_operand" "w")
3606 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3610 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
3611 [(set_attr "type" "mve_move")
3615 ;; [vmlasq_n_u, vmlasq_n_s])
3617 (define_insn "mve_vmlasq_n_<supf><mode>"
3619 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3620 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3621 (match_operand:MVE_2 2 "s_register_operand" "w")
3622 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3626 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
3627 [(set_attr "type" "mve_move")
3633 (define_insn "mve_vmlsdavq_p_s<mode>"
3635 (set (match_operand:SI 0 "s_register_operand" "=Te")
3636 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3637 (match_operand:MVE_2 2 "s_register_operand" "w")
3638 (match_operand:HI 3 "vpr_register_operand" "Up")]
3642 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
3643 [(set_attr "type" "mve_move")
3644 (set_attr "length""8")])
3649 (define_insn "mve_vmlsdavxq_p_s<mode>"
3651 (set (match_operand:SI 0 "s_register_operand" "=Te")
3652 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3653 (match_operand:MVE_2 2 "s_register_operand" "w")
3654 (match_operand:HI 3 "vpr_register_operand" "Up")]
3658 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
3659 [(set_attr "type" "mve_move")
3660 (set_attr "length""8")])
3663 ;; [vmvnq_m_s, vmvnq_m_u])
3665 (define_insn "mve_vmvnq_m_<supf><mode>"
3667 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3668 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3669 (match_operand:MVE_2 2 "s_register_operand" "w")
3670 (match_operand:HI 3 "vpr_register_operand" "Up")]
3674 "vpst\;vmvnt %q0, %q2"
3675 [(set_attr "type" "mve_move")
3676 (set_attr "length""8")])
3681 (define_insn "mve_vnegq_m_s<mode>"
3683 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3684 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3685 (match_operand:MVE_2 2 "s_register_operand" "w")
3686 (match_operand:HI 3 "vpr_register_operand" "Up")]
3690 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
3691 [(set_attr "type" "mve_move")
3692 (set_attr "length""8")])
3695 ;; [vpselq_u, vpselq_s])
3697 (define_insn "mve_vpselq_<supf><mode>"
3699 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
3700 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
3701 (match_operand:MVE_1 2 "s_register_operand" "w")
3702 (match_operand:HI 3 "vpr_register_operand" "Up")]
3706 "vpsel %q0, %q1, %q2"
3707 [(set_attr "type" "mve_move")
3713 (define_insn "mve_vqabsq_m_s<mode>"
3715 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3716 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3717 (match_operand:MVE_2 2 "s_register_operand" "w")
3718 (match_operand:HI 3 "vpr_register_operand" "Up")]
3722 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
3723 [(set_attr "type" "mve_move")
3724 (set_attr "length""8")])
3729 (define_insn "mve_vqdmlahq_n_<supf><mode>"
3731 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3732 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3733 (match_operand:MVE_2 2 "s_register_operand" "w")
3734 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3738 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3739 [(set_attr "type" "mve_move")
3745 (define_insn "mve_vqdmlashq_n_<supf><mode>"
3747 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3748 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3749 (match_operand:MVE_2 2 "s_register_operand" "w")
3750 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3754 "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3755 [(set_attr "type" "mve_move")
3761 (define_insn "mve_vqnegq_m_s<mode>"
3763 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3764 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3765 (match_operand:MVE_2 2 "s_register_operand" "w")
3766 (match_operand:HI 3 "vpr_register_operand" "Up")]
3770 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
3771 [(set_attr "type" "mve_move")
3772 (set_attr "length""8")])
3777 (define_insn "mve_vqrdmladhq_s<mode>"
3779 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3780 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3781 (match_operand:MVE_2 2 "s_register_operand" "w")
3782 (match_operand:MVE_2 3 "s_register_operand" "w")]
3786 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3787 [(set_attr "type" "mve_move")
3793 (define_insn "mve_vqrdmladhxq_s<mode>"
3795 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3796 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3797 (match_operand:MVE_2 2 "s_register_operand" "w")
3798 (match_operand:MVE_2 3 "s_register_operand" "w")]
3802 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3803 [(set_attr "type" "mve_move")
3809 (define_insn "mve_vqrdmlahq_n_<supf><mode>"
3811 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3812 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3813 (match_operand:MVE_2 2 "s_register_operand" "w")
3814 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3818 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3819 [(set_attr "type" "mve_move")
3823 ;; [vqrdmlashq_n_s])
3825 (define_insn "mve_vqrdmlashq_n_<supf><mode>"
3827 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3828 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3829 (match_operand:MVE_2 2 "s_register_operand" "w")
3830 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3834 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3835 [(set_attr "type" "mve_move")
3841 (define_insn "mve_vqrdmlsdhq_s<mode>"
3843 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3844 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3845 (match_operand:MVE_2 2 "s_register_operand" "w")
3846 (match_operand:MVE_2 3 "s_register_operand" "w")]
3850 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3851 [(set_attr "type" "mve_move")
3857 (define_insn "mve_vqrdmlsdhxq_s<mode>"
3859 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3860 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3861 (match_operand:MVE_2 2 "s_register_operand" "w")
3862 (match_operand:MVE_2 3 "s_register_operand" "w")]
3866 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3867 [(set_attr "type" "mve_move")
3871 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
3873 (define_insn "mve_vqrshlq_m_n_<supf><mode>"
3875 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3876 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3877 (match_operand:SI 2 "s_register_operand" "r")
3878 (match_operand:HI 3 "vpr_register_operand" "Up")]
3882 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
3883 [(set_attr "type" "mve_move")
3884 (set_attr "length""8")])
3887 ;; [vqshlq_m_r_u, vqshlq_m_r_s])
3889 (define_insn "mve_vqshlq_m_r_<supf><mode>"
3891 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3892 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3893 (match_operand:SI 2 "s_register_operand" "r")
3894 (match_operand:HI 3 "vpr_register_operand" "Up")]
3898 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3899 [(set_attr "type" "mve_move")
3900 (set_attr "length""8")])
3903 ;; [vrev64q_m_u, vrev64q_m_s])
3905 (define_insn "mve_vrev64q_m_<supf><mode>"
3907 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3908 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3909 (match_operand:MVE_2 2 "s_register_operand" "w")
3910 (match_operand:HI 3 "vpr_register_operand" "Up")]
3914 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
3915 [(set_attr "type" "mve_move")
3916 (set_attr "length""8")])
3919 ;; [vrshlq_m_n_s, vrshlq_m_n_u])
3921 (define_insn "mve_vrshlq_m_n_<supf><mode>"
3923 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3924 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3925 (match_operand:SI 2 "s_register_operand" "r")
3926 (match_operand:HI 3 "vpr_register_operand" "Up")]
3930 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3931 [(set_attr "type" "mve_move")
3932 (set_attr "length""8")])
3935 ;; [vshlq_m_r_u, vshlq_m_r_s])
3937 (define_insn "mve_vshlq_m_r_<supf><mode>"
3939 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3940 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3941 (match_operand:SI 2 "s_register_operand" "r")
3942 (match_operand:HI 3 "vpr_register_operand" "Up")]
3946 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3947 [(set_attr "type" "mve_move")
3948 (set_attr "length""8")])
3951 ;; [vsliq_n_u, vsliq_n_s])
3953 (define_insn "mve_vsliq_n_<supf><mode>"
3955 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3956 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3957 (match_operand:MVE_2 2 "s_register_operand" "w")
3958 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
3962 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
3963 [(set_attr "type" "mve_move")
3967 ;; [vsriq_n_u, vsriq_n_s])
3969 (define_insn "mve_vsriq_n_<supf><mode>"
3971 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3972 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3973 (match_operand:MVE_2 2 "s_register_operand" "w")
3974 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
3978 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
3979 [(set_attr "type" "mve_move")
3985 (define_insn "mve_vqdmlsdhxq_s<mode>"
3987 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3988 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3989 (match_operand:MVE_2 2 "s_register_operand" "w")
3990 (match_operand:MVE_2 3 "s_register_operand" "w")]
3994 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3995 [(set_attr "type" "mve_move")
4001 (define_insn "mve_vqdmlsdhq_s<mode>"
4003 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4004 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4005 (match_operand:MVE_2 2 "s_register_operand" "w")
4006 (match_operand:MVE_2 3 "s_register_operand" "w")]
4010 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4011 [(set_attr "type" "mve_move")
4017 (define_insn "mve_vqdmladhxq_s<mode>"
4019 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4020 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4021 (match_operand:MVE_2 2 "s_register_operand" "w")
4022 (match_operand:MVE_2 3 "s_register_operand" "w")]
4026 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4027 [(set_attr "type" "mve_move")
4033 (define_insn "mve_vqdmladhq_s<mode>"
4035 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4036 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4037 (match_operand:MVE_2 2 "s_register_operand" "w")
4038 (match_operand:MVE_2 3 "s_register_operand" "w")]
4042 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4043 [(set_attr "type" "mve_move")
4049 (define_insn "mve_vmlsdavaxq_s<mode>"
4051 (set (match_operand:SI 0 "s_register_operand" "=Te")
4052 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4053 (match_operand:MVE_2 2 "s_register_operand" "w")
4054 (match_operand:MVE_2 3 "s_register_operand" "w")]
4058 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4059 [(set_attr "type" "mve_move")
4065 (define_insn "mve_vmlsdavaq_s<mode>"
4067 (set (match_operand:SI 0 "s_register_operand" "=Te")
4068 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4069 (match_operand:MVE_2 2 "s_register_operand" "w")
4070 (match_operand:MVE_2 3 "s_register_operand" "w")]
4074 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
4075 [(set_attr "type" "mve_move")
4081 (define_insn "mve_vmladavaxq_s<mode>"
4083 (set (match_operand:SI 0 "s_register_operand" "=Te")
4084 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4085 (match_operand:MVE_2 2 "s_register_operand" "w")
4086 (match_operand:MVE_2 3 "s_register_operand" "w")]
4090 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4091 [(set_attr "type" "mve_move")
4096 (define_insn "mve_vabsq_m_f<mode>"
4098 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4099 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4100 (match_operand:MVE_0 2 "s_register_operand" "w")
4101 (match_operand:HI 3 "vpr_register_operand" "Up")]
4104 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4105 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
4106 [(set_attr "type" "mve_move")
4107 (set_attr "length""8")])
4110 ;; [vaddlvaq_p_s vaddlvaq_p_u])
4112 (define_insn "mve_vaddlvaq_p_<supf>v4si"
4114 (set (match_operand:DI 0 "s_register_operand" "=r")
4115 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4116 (match_operand:V4SI 2 "s_register_operand" "w")
4117 (match_operand:HI 3 "vpr_register_operand" "Up")]
4121 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
4122 [(set_attr "type" "mve_move")
4123 (set_attr "length""8")])
4127 (define_insn "mve_vcmlaq_f<mode>"
4129 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4130 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4131 (match_operand:MVE_0 2 "s_register_operand" "w")
4132 (match_operand:MVE_0 3 "s_register_operand" "w")]
4135 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4136 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #0"
4137 [(set_attr "type" "mve_move")
4141 ;; [vcmlaq_rot180_f])
4143 (define_insn "mve_vcmlaq_rot180_f<mode>"
4145 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4146 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4147 (match_operand:MVE_0 2 "s_register_operand" "w")
4148 (match_operand:MVE_0 3 "s_register_operand" "w")]
4151 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4152 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #180"
4153 [(set_attr "type" "mve_move")
4157 ;; [vcmlaq_rot270_f])
4159 (define_insn "mve_vcmlaq_rot270_f<mode>"
4161 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4162 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4163 (match_operand:MVE_0 2 "s_register_operand" "w")
4164 (match_operand:MVE_0 3 "s_register_operand" "w")]
4167 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4168 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #270"
4169 [(set_attr "type" "mve_move")
4173 ;; [vcmlaq_rot90_f])
4175 (define_insn "mve_vcmlaq_rot90_f<mode>"
4177 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4178 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4179 (match_operand:MVE_0 2 "s_register_operand" "w")
4180 (match_operand:MVE_0 3 "s_register_operand" "w")]
4183 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4184 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #90"
4185 [(set_attr "type" "mve_move")
4191 (define_insn "mve_vcmpeqq_m_n_f<mode>"
4193 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4194 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4195 (match_operand:<V_elem> 2 "s_register_operand" "r")
4196 (match_operand:HI 3 "vpr_register_operand" "Up")]
4199 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4200 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
4201 [(set_attr "type" "mve_move")
4202 (set_attr "length""8")])
4207 (define_insn "mve_vcmpgeq_m_f<mode>"
4209 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4210 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4211 (match_operand:MVE_0 2 "s_register_operand" "w")
4212 (match_operand:HI 3 "vpr_register_operand" "Up")]
4215 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4216 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
4217 [(set_attr "type" "mve_move")
4218 (set_attr "length""8")])
4223 (define_insn "mve_vcmpgeq_m_n_f<mode>"
4225 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4226 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4227 (match_operand:<V_elem> 2 "s_register_operand" "r")
4228 (match_operand:HI 3 "vpr_register_operand" "Up")]
4231 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4232 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
4233 [(set_attr "type" "mve_move")
4234 (set_attr "length""8")])
4239 (define_insn "mve_vcmpgtq_m_f<mode>"
4241 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4242 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4243 (match_operand:MVE_0 2 "s_register_operand" "w")
4244 (match_operand:HI 3 "vpr_register_operand" "Up")]
4247 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4248 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
4249 [(set_attr "type" "mve_move")
4250 (set_attr "length""8")])
4255 (define_insn "mve_vcmpgtq_m_n_f<mode>"
4257 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4258 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4259 (match_operand:<V_elem> 2 "s_register_operand" "r")
4260 (match_operand:HI 3 "vpr_register_operand" "Up")]
4263 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4264 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
4265 [(set_attr "type" "mve_move")
4266 (set_attr "length""8")])
4271 (define_insn "mve_vcmpleq_m_f<mode>"
4273 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4274 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4275 (match_operand:MVE_0 2 "s_register_operand" "w")
4276 (match_operand:HI 3 "vpr_register_operand" "Up")]
4279 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4280 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
4281 [(set_attr "type" "mve_move")
4282 (set_attr "length""8")])
4287 (define_insn "mve_vcmpleq_m_n_f<mode>"
4289 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4290 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4291 (match_operand:<V_elem> 2 "s_register_operand" "r")
4292 (match_operand:HI 3 "vpr_register_operand" "Up")]
4295 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4296 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
4297 [(set_attr "type" "mve_move")
4298 (set_attr "length""8")])
4303 (define_insn "mve_vcmpltq_m_f<mode>"
4305 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4306 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4307 (match_operand:MVE_0 2 "s_register_operand" "w")
4308 (match_operand:HI 3 "vpr_register_operand" "Up")]
4311 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4312 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
4313 [(set_attr "type" "mve_move")
4314 (set_attr "length""8")])
4319 (define_insn "mve_vcmpltq_m_n_f<mode>"
4321 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4322 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4323 (match_operand:<V_elem> 2 "s_register_operand" "r")
4324 (match_operand:HI 3 "vpr_register_operand" "Up")]
4327 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4328 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
4329 [(set_attr "type" "mve_move")
4330 (set_attr "length""8")])
4335 (define_insn "mve_vcmpneq_m_f<mode>"
4337 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4338 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4339 (match_operand:MVE_0 2 "s_register_operand" "w")
4340 (match_operand:HI 3 "vpr_register_operand" "Up")]
4343 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4344 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
4345 [(set_attr "type" "mve_move")
4346 (set_attr "length""8")])
4351 (define_insn "mve_vcmpneq_m_n_f<mode>"
4353 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4354 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4355 (match_operand:<V_elem> 2 "s_register_operand" "r")
4356 (match_operand:HI 3 "vpr_register_operand" "Up")]
4359 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4360 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
4361 [(set_attr "type" "mve_move")
4362 (set_attr "length""8")])
4365 ;; [vcvtbq_m_f16_f32])
4367 (define_insn "mve_vcvtbq_m_f16_f32v8hf"
4369 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4370 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4371 (match_operand:V4SF 2 "s_register_operand" "w")
4372 (match_operand:HI 3 "vpr_register_operand" "Up")]
4375 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4376 "vpst\;vcvtbt.f16.f32 %q0, %q2"
4377 [(set_attr "type" "mve_move")
4378 (set_attr "length""8")])
4381 ;; [vcvtbq_m_f32_f16])
4383 (define_insn "mve_vcvtbq_m_f32_f16v4sf"
4385 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4386 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4387 (match_operand:V8HF 2 "s_register_operand" "w")
4388 (match_operand:HI 3 "vpr_register_operand" "Up")]
4391 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4392 "vpst\;vcvtbt.f32.f16 %q0, %q2"
4393 [(set_attr "type" "mve_move")
4394 (set_attr "length""8")])
4397 ;; [vcvttq_m_f16_f32])
4399 (define_insn "mve_vcvttq_m_f16_f32v8hf"
4401 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4402 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4403 (match_operand:V4SF 2 "s_register_operand" "w")
4404 (match_operand:HI 3 "vpr_register_operand" "Up")]
4407 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4408 "vpst\;vcvttt.f16.f32 %q0, %q2"
4409 [(set_attr "type" "mve_move")
4410 (set_attr "length""8")])
4413 ;; [vcvttq_m_f32_f16])
4415 (define_insn "mve_vcvttq_m_f32_f16v4sf"
4417 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4418 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4419 (match_operand:V8HF 2 "s_register_operand" "w")
4420 (match_operand:HI 3 "vpr_register_operand" "Up")]
4423 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4424 "vpst\;vcvttt.f32.f16 %q0, %q2"
4425 [(set_attr "type" "mve_move")
4426 (set_attr "length""8")])
4431 (define_insn "mve_vdupq_m_n_f<mode>"
4433 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4434 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4435 (match_operand:<V_elem> 2 "s_register_operand" "r")
4436 (match_operand:HI 3 "vpr_register_operand" "Up")]
4439 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4440 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
4441 [(set_attr "type" "mve_move")
4442 (set_attr "length""8")])
4447 (define_insn "mve_vfmaq_f<mode>"
4449 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4450 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4451 (match_operand:MVE_0 2 "s_register_operand" "w")
4452 (match_operand:MVE_0 3 "s_register_operand" "w")]
4455 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4456 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
4457 [(set_attr "type" "mve_move")
4463 (define_insn "mve_vfmaq_n_f<mode>"
4465 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4466 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4467 (match_operand:MVE_0 2 "s_register_operand" "w")
4468 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4471 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4472 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
4473 [(set_attr "type" "mve_move")
4479 (define_insn "mve_vfmasq_n_f<mode>"
4481 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4482 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4483 (match_operand:MVE_0 2 "s_register_operand" "w")
4484 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4487 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4488 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
4489 [(set_attr "type" "mve_move")
4494 (define_insn "mve_vfmsq_f<mode>"
4496 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4497 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4498 (match_operand:MVE_0 2 "s_register_operand" "w")
4499 (match_operand:MVE_0 3 "s_register_operand" "w")]
4502 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4503 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
4504 [(set_attr "type" "mve_move")
4510 (define_insn "mve_vmaxnmaq_m_f<mode>"
4512 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4513 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4514 (match_operand:MVE_0 2 "s_register_operand" "w")
4515 (match_operand:HI 3 "vpr_register_operand" "Up")]
4518 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4519 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
4520 [(set_attr "type" "mve_move")
4521 (set_attr "length""8")])
4525 (define_insn "mve_vmaxnmavq_p_f<mode>"
4527 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4528 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4529 (match_operand:MVE_0 2 "s_register_operand" "w")
4530 (match_operand:HI 3 "vpr_register_operand" "Up")]
4533 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4534 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
4535 [(set_attr "type" "mve_move")
4536 (set_attr "length""8")])
4541 (define_insn "mve_vmaxnmvq_p_f<mode>"
4543 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4544 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4545 (match_operand:MVE_0 2 "s_register_operand" "w")
4546 (match_operand:HI 3 "vpr_register_operand" "Up")]
4549 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4550 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
4551 [(set_attr "type" "mve_move")
4552 (set_attr "length""8")])
4556 (define_insn "mve_vminnmaq_m_f<mode>"
4558 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4559 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4560 (match_operand:MVE_0 2 "s_register_operand" "w")
4561 (match_operand:HI 3 "vpr_register_operand" "Up")]
4564 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4565 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
4566 [(set_attr "type" "mve_move")
4567 (set_attr "length""8")])
4572 (define_insn "mve_vminnmavq_p_f<mode>"
4574 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4575 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4576 (match_operand:MVE_0 2 "s_register_operand" "w")
4577 (match_operand:HI 3 "vpr_register_operand" "Up")]
4580 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4581 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
4582 [(set_attr "type" "mve_move")
4583 (set_attr "length""8")])
4587 (define_insn "mve_vminnmvq_p_f<mode>"
4589 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4590 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4591 (match_operand:MVE_0 2 "s_register_operand" "w")
4592 (match_operand:HI 3 "vpr_register_operand" "Up")]
4595 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4596 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
4597 [(set_attr "type" "mve_move")
4598 (set_attr "length""8")])
4601 ;; [vmlaldavaq_s, vmlaldavaq_u])
4603 (define_insn "mve_vmlaldavaq_<supf><mode>"
4605 (set (match_operand:DI 0 "s_register_operand" "=r")
4606 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4607 (match_operand:MVE_5 2 "s_register_operand" "w")
4608 (match_operand:MVE_5 3 "s_register_operand" "w")]
4612 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4613 [(set_attr "type" "mve_move")
4619 (define_insn "mve_vmlaldavaxq_s<mode>"
4621 (set (match_operand:DI 0 "s_register_operand" "=r")
4622 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4623 (match_operand:MVE_5 2 "s_register_operand" "w")
4624 (match_operand:MVE_5 3 "s_register_operand" "w")]
4628 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4629 [(set_attr "type" "mve_move")
4633 ;; [vmlaldavq_p_u, vmlaldavq_p_s])
4635 (define_insn "mve_vmlaldavq_p_<supf><mode>"
4637 (set (match_operand:DI 0 "s_register_operand" "=r")
4638 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4639 (match_operand:MVE_5 2 "s_register_operand" "w")
4640 (match_operand:HI 3 "vpr_register_operand" "Up")]
4644 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4645 [(set_attr "type" "mve_move")
4646 (set_attr "length""8")])
4649 ;; [vmlaldavxq_p_s])
4651 (define_insn "mve_vmlaldavxq_p_s<mode>"
4653 (set (match_operand:DI 0 "s_register_operand" "=r")
4654 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4655 (match_operand:MVE_5 2 "s_register_operand" "w")
4656 (match_operand:HI 3 "vpr_register_operand" "Up")]
4660 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
4661 [(set_attr "type" "mve_move")
4662 (set_attr "length""8")])
4666 (define_insn "mve_vmlsldavaq_s<mode>"
4668 (set (match_operand:DI 0 "s_register_operand" "=r")
4669 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4670 (match_operand:MVE_5 2 "s_register_operand" "w")
4671 (match_operand:MVE_5 3 "s_register_operand" "w")]
4675 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4676 [(set_attr "type" "mve_move")
4682 (define_insn "mve_vmlsldavaxq_s<mode>"
4684 (set (match_operand:DI 0 "s_register_operand" "=r")
4685 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4686 (match_operand:MVE_5 2 "s_register_operand" "w")
4687 (match_operand:MVE_5 3 "s_register_operand" "w")]
4691 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4692 [(set_attr "type" "mve_move")
4698 (define_insn "mve_vmlsldavq_p_s<mode>"
4700 (set (match_operand:DI 0 "s_register_operand" "=r")
4701 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4702 (match_operand:MVE_5 2 "s_register_operand" "w")
4703 (match_operand:HI 3 "vpr_register_operand" "Up")]
4707 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4708 [(set_attr "type" "mve_move")
4709 (set_attr "length""8")])
4712 ;; [vmlsldavxq_p_s])
4714 (define_insn "mve_vmlsldavxq_p_s<mode>"
4716 (set (match_operand:DI 0 "s_register_operand" "=r")
4717 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4718 (match_operand:MVE_5 2 "s_register_operand" "w")
4719 (match_operand:HI 3 "vpr_register_operand" "Up")]
4723 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4724 [(set_attr "type" "mve_move")
4725 (set_attr "length""8")])
4727 ;; [vmovlbq_m_u, vmovlbq_m_s])
4729 (define_insn "mve_vmovlbq_m_<supf><mode>"
4731 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4732 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4733 (match_operand:MVE_3 2 "s_register_operand" "w")
4734 (match_operand:HI 3 "vpr_register_operand" "Up")]
4738 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
4739 [(set_attr "type" "mve_move")
4740 (set_attr "length""8")])
4742 ;; [vmovltq_m_u, vmovltq_m_s])
4744 (define_insn "mve_vmovltq_m_<supf><mode>"
4746 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4747 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4748 (match_operand:MVE_3 2 "s_register_operand" "w")
4749 (match_operand:HI 3 "vpr_register_operand" "Up")]
4753 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
4754 [(set_attr "type" "mve_move")
4755 (set_attr "length""8")])
4757 ;; [vmovnbq_m_u, vmovnbq_m_s])
4759 (define_insn "mve_vmovnbq_m_<supf><mode>"
4761 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4762 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4763 (match_operand:MVE_5 2 "s_register_operand" "w")
4764 (match_operand:HI 3 "vpr_register_operand" "Up")]
4768 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
4769 [(set_attr "type" "mve_move")
4770 (set_attr "length""8")])
4773 ;; [vmovntq_m_u, vmovntq_m_s])
4775 (define_insn "mve_vmovntq_m_<supf><mode>"
4777 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4778 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4779 (match_operand:MVE_5 2 "s_register_operand" "w")
4780 (match_operand:HI 3 "vpr_register_operand" "Up")]
4784 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
4785 [(set_attr "type" "mve_move")
4786 (set_attr "length""8")])
4789 ;; [vmvnq_m_n_u, vmvnq_m_n_s])
4791 (define_insn "mve_vmvnq_m_n_<supf><mode>"
4793 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4794 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4795 (match_operand:SI 2 "immediate_operand" "i")
4796 (match_operand:HI 3 "vpr_register_operand" "Up")]
4800 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
4801 [(set_attr "type" "mve_move")
4802 (set_attr "length""8")])
4806 (define_insn "mve_vnegq_m_f<mode>"
4808 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4809 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4810 (match_operand:MVE_0 2 "s_register_operand" "w")
4811 (match_operand:HI 3 "vpr_register_operand" "Up")]
4814 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4815 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
4816 [(set_attr "type" "mve_move")
4817 (set_attr "length""8")])
4820 ;; [vorrq_m_n_s, vorrq_m_n_u])
4822 (define_insn "mve_vorrq_m_n_<supf><mode>"
4824 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4825 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4826 (match_operand:SI 2 "immediate_operand" "i")
4827 (match_operand:HI 3 "vpr_register_operand" "Up")]
4831 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
4832 [(set_attr "type" "mve_move")
4833 (set_attr "length""8")])
4837 (define_insn "mve_vpselq_f<mode>"
4839 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4840 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
4841 (match_operand:MVE_0 2 "s_register_operand" "w")
4842 (match_operand:HI 3 "vpr_register_operand" "Up")]
4845 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4846 "vpsel %q0, %q1, %q2"
4847 [(set_attr "type" "mve_move")
4851 ;; [vqmovnbq_m_s, vqmovnbq_m_u])
4853 (define_insn "mve_vqmovnbq_m_<supf><mode>"
4855 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4856 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4857 (match_operand:MVE_5 2 "s_register_operand" "w")
4858 (match_operand:HI 3 "vpr_register_operand" "Up")]
4862 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
4863 [(set_attr "type" "mve_move")
4864 (set_attr "length""8")])
4867 ;; [vqmovntq_m_u, vqmovntq_m_s])
4869 (define_insn "mve_vqmovntq_m_<supf><mode>"
4871 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4872 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4873 (match_operand:MVE_5 2 "s_register_operand" "w")
4874 (match_operand:HI 3 "vpr_register_operand" "Up")]
4878 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
4879 [(set_attr "type" "mve_move")
4880 (set_attr "length""8")])
4885 (define_insn "mve_vqmovunbq_m_s<mode>"
4887 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4888 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4889 (match_operand:MVE_5 2 "s_register_operand" "w")
4890 (match_operand:HI 3 "vpr_register_operand" "Up")]
4894 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
4895 [(set_attr "type" "mve_move")
4896 (set_attr "length""8")])
4901 (define_insn "mve_vqmovuntq_m_s<mode>"
4903 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4904 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4905 (match_operand:MVE_5 2 "s_register_operand" "w")
4906 (match_operand:HI 3 "vpr_register_operand" "Up")]
4910 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
4911 [(set_attr "type" "mve_move")
4912 (set_attr "length""8")])
4915 ;; [vqrshrntq_n_u, vqrshrntq_n_s])
4917 (define_insn "mve_vqrshrntq_n_<supf><mode>"
4919 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4920 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4921 (match_operand:MVE_5 2 "s_register_operand" "w")
4922 (match_operand:SI 3 "mve_imm_8" "Rb")]
4926 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4927 [(set_attr "type" "mve_move")
4931 ;; [vqrshruntq_n_s])
4933 (define_insn "mve_vqrshruntq_n_s<mode>"
4935 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4936 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4937 (match_operand:MVE_5 2 "s_register_operand" "w")
4938 (match_operand:SI 3 "mve_imm_8" "Rb")]
4942 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4943 [(set_attr "type" "mve_move")
4947 ;; [vqshrnbq_n_u, vqshrnbq_n_s])
4949 (define_insn "mve_vqshrnbq_n_<supf><mode>"
4951 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4952 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4953 (match_operand:MVE_5 2 "s_register_operand" "w")
4954 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4958 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4959 [(set_attr "type" "mve_move")
4963 ;; [vqshrntq_n_u, vqshrntq_n_s])
4965 (define_insn "mve_vqshrntq_n_<supf><mode>"
4967 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4968 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4969 (match_operand:MVE_5 2 "s_register_operand" "w")
4970 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4974 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4975 [(set_attr "type" "mve_move")
4981 (define_insn "mve_vqshrunbq_n_s<mode>"
4983 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4984 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4985 (match_operand:MVE_5 2 "s_register_operand" "w")
4986 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4990 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
4991 [(set_attr "type" "mve_move")
4997 (define_insn "mve_vqshruntq_n_s<mode>"
4999 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5000 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5001 (match_operand:MVE_5 2 "s_register_operand" "w")
5002 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5006 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
5007 [(set_attr "type" "mve_move")
5013 (define_insn "mve_vrev32q_m_fv8hf"
5015 (set (match_operand:V8HF 0 "s_register_operand" "=w")
5016 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
5017 (match_operand:V8HF 2 "s_register_operand" "w")
5018 (match_operand:HI 3 "vpr_register_operand" "Up")]
5021 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5022 "vpst\;vrev32t.16 %q0, %q2"
5023 [(set_attr "type" "mve_move")
5024 (set_attr "length""8")])
5027 ;; [vrev32q_m_s, vrev32q_m_u])
5029 (define_insn "mve_vrev32q_m_<supf><mode>"
5031 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
5032 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
5033 (match_operand:MVE_3 2 "s_register_operand" "w")
5034 (match_operand:HI 3 "vpr_register_operand" "Up")]
5038 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
5039 [(set_attr "type" "mve_move")
5040 (set_attr "length""8")])
5045 (define_insn "mve_vrev64q_m_f<mode>"
5047 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5048 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5049 (match_operand:MVE_0 2 "s_register_operand" "w")
5050 (match_operand:HI 3 "vpr_register_operand" "Up")]
5053 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5054 "vpst\;vrev64t.%#<V_sz_elem> %q0, %q2"
5055 [(set_attr "type" "mve_move")
5056 (set_attr "length""8")])
5059 ;; [vrmlaldavhaxq_s])
5061 (define_insn "mve_vrmlaldavhaxq_sv4si"
5063 (set (match_operand:DI 0 "s_register_operand" "=r")
5064 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5065 (match_operand:V4SI 2 "s_register_operand" "w")
5066 (match_operand:V4SI 3 "s_register_operand" "w")]
5070 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
5071 [(set_attr "type" "mve_move")
5075 ;; [vrmlaldavhxq_p_s])
5077 (define_insn "mve_vrmlaldavhxq_p_sv4si"
5079 (set (match_operand:DI 0 "s_register_operand" "=r")
5080 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5081 (match_operand:V4SI 2 "s_register_operand" "w")
5082 (match_operand:HI 3 "vpr_register_operand" "Up")]
5086 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
5087 [(set_attr "type" "mve_move")
5088 (set_attr "length""8")])
5091 ;; [vrmlsldavhaxq_s])
5093 (define_insn "mve_vrmlsldavhaxq_sv4si"
5095 (set (match_operand:DI 0 "s_register_operand" "=r")
5096 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5097 (match_operand:V4SI 2 "s_register_operand" "w")
5098 (match_operand:V4SI 3 "s_register_operand" "w")]
5102 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
5103 [(set_attr "type" "mve_move")
5107 ;; [vrmlsldavhq_p_s])
5109 (define_insn "mve_vrmlsldavhq_p_sv4si"
5111 (set (match_operand:DI 0 "s_register_operand" "=r")
5112 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5113 (match_operand:V4SI 2 "s_register_operand" "w")
5114 (match_operand:HI 3 "vpr_register_operand" "Up")]
5118 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
5119 [(set_attr "type" "mve_move")
5120 (set_attr "length""8")])
5123 ;; [vrmlsldavhxq_p_s])
5125 (define_insn "mve_vrmlsldavhxq_p_sv4si"
5127 (set (match_operand:DI 0 "s_register_operand" "=r")
5128 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5129 (match_operand:V4SI 2 "s_register_operand" "w")
5130 (match_operand:HI 3 "vpr_register_operand" "Up")]
5134 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
5135 [(set_attr "type" "mve_move")
5136 (set_attr "length""8")])
5141 (define_insn "mve_vrndaq_m_f<mode>"
5143 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5144 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5145 (match_operand:MVE_0 2 "s_register_operand" "w")
5146 (match_operand:HI 3 "vpr_register_operand" "Up")]
5149 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5150 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
5151 [(set_attr "type" "mve_move")
5152 (set_attr "length""8")])
5157 (define_insn "mve_vrndmq_m_f<mode>"
5159 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5160 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5161 (match_operand:MVE_0 2 "s_register_operand" "w")
5162 (match_operand:HI 3 "vpr_register_operand" "Up")]
5165 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5166 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
5167 [(set_attr "type" "mve_move")
5168 (set_attr "length""8")])
5173 (define_insn "mve_vrndnq_m_f<mode>"
5175 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5176 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5177 (match_operand:MVE_0 2 "s_register_operand" "w")
5178 (match_operand:HI 3 "vpr_register_operand" "Up")]
5181 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5182 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
5183 [(set_attr "type" "mve_move")
5184 (set_attr "length""8")])
5189 (define_insn "mve_vrndpq_m_f<mode>"
5191 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5192 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5193 (match_operand:MVE_0 2 "s_register_operand" "w")
5194 (match_operand:HI 3 "vpr_register_operand" "Up")]
5197 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5198 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
5199 [(set_attr "type" "mve_move")
5200 (set_attr "length""8")])
5205 (define_insn "mve_vrndxq_m_f<mode>"
5207 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5208 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5209 (match_operand:MVE_0 2 "s_register_operand" "w")
5210 (match_operand:HI 3 "vpr_register_operand" "Up")]
5213 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5214 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
5215 [(set_attr "type" "mve_move")
5216 (set_attr "length""8")])
5219 ;; [vrshrnbq_n_s, vrshrnbq_n_u])
5221 (define_insn "mve_vrshrnbq_n_<supf><mode>"
5223 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5224 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5225 (match_operand:MVE_5 2 "s_register_operand" "w")
5226 (match_operand:SI 3 "mve_imm_8" "Rb")]
5230 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5231 [(set_attr "type" "mve_move")
5235 ;; [vrshrntq_n_u, vrshrntq_n_s])
5237 (define_insn "mve_vrshrntq_n_<supf><mode>"
5239 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5240 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5241 (match_operand:MVE_5 2 "s_register_operand" "w")
5242 (match_operand:SI 3 "mve_imm_8" "Rb")]
5246 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
5247 [(set_attr "type" "mve_move")
5251 ;; [vshrnbq_n_u, vshrnbq_n_s])
5253 (define_insn "mve_vshrnbq_n_<supf><mode>"
5255 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5256 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5257 (match_operand:MVE_5 2 "s_register_operand" "w")
5258 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5262 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5263 [(set_attr "type" "mve_move")
5267 ;; [vshrntq_n_s, vshrntq_n_u])
5269 (define_insn "mve_vshrntq_n_<supf><mode>"
5271 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5272 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5273 (match_operand:MVE_5 2 "s_register_operand" "w")
5274 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5278 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
5279 [(set_attr "type" "mve_move")
5283 ;; [vcvtmq_m_s, vcvtmq_m_u])
5285 (define_insn "mve_vcvtmq_m_<supf><mode>"
5287 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5288 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5289 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5290 (match_operand:HI 3 "vpr_register_operand" "Up")]
5293 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5294 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5295 [(set_attr "type" "mve_move")
5296 (set_attr "length""8")])
5299 ;; [vcvtpq_m_u, vcvtpq_m_s])
5301 (define_insn "mve_vcvtpq_m_<supf><mode>"
5303 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5304 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5305 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5306 (match_operand:HI 3 "vpr_register_operand" "Up")]
5309 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5310 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5311 [(set_attr "type" "mve_move")
5312 (set_attr "length""8")])
5315 ;; [vcvtnq_m_s, vcvtnq_m_u])
5317 (define_insn "mve_vcvtnq_m_<supf><mode>"
5319 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5320 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5321 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5322 (match_operand:HI 3 "vpr_register_operand" "Up")]
5325 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5326 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5327 [(set_attr "type" "mve_move")
5328 (set_attr "length""8")])
5331 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
5333 (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
5335 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5336 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5337 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5338 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5339 (match_operand:HI 4 "vpr_register_operand" "Up")]
5342 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5343 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
5344 [(set_attr "type" "mve_move")
5345 (set_attr "length""8")])
5348 ;; [vrev16q_m_u, vrev16q_m_s])
5350 (define_insn "mve_vrev16q_m_<supf>v16qi"
5352 (set (match_operand:V16QI 0 "s_register_operand" "=w")
5353 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
5354 (match_operand:V16QI 2 "s_register_operand" "w")
5355 (match_operand:HI 3 "vpr_register_operand" "Up")]
5359 "vpst\;vrev16t.8 %q0, %q2"
5360 [(set_attr "type" "mve_move")
5361 (set_attr "length""8")])
5364 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
5366 (define_insn "mve_vcvtq_m_from_f_<supf><mode>"
5368 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5369 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5370 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5371 (match_operand:HI 3 "vpr_register_operand" "Up")]
5374 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5375 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5376 [(set_attr "type" "mve_move")
5377 (set_attr "length""8")])
5380 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
5382 (define_insn "mve_vrmlaldavhq_p_<supf>v4si"
5384 (set (match_operand:DI 0 "s_register_operand" "=r")
5385 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5386 (match_operand:V4SI 2 "s_register_operand" "w")
5387 (match_operand:HI 3 "vpr_register_operand" "Up")]
5391 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
5392 [(set_attr "type" "mve_move")
5393 (set_attr "length""8")])
5396 ;; [vrmlsldavhaq_s])
5398 (define_insn "mve_vrmlsldavhaq_sv4si"
5400 (set (match_operand:DI 0 "s_register_operand" "=r")
5401 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5402 (match_operand:V4SI 2 "s_register_operand" "w")
5403 (match_operand:V4SI 3 "s_register_operand" "w")]
5407 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
5408 [(set_attr "type" "mve_move")
5412 ;; [vabavq_p_s, vabavq_p_u])
5414 (define_insn "mve_vabavq_p_<supf><mode>"
5416 (set (match_operand:SI 0 "s_register_operand" "=r")
5417 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5418 (match_operand:MVE_2 2 "s_register_operand" "w")
5419 (match_operand:MVE_2 3 "s_register_operand" "w")
5420 (match_operand:HI 4 "vpr_register_operand" "Up")]
5424 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
5425 [(set_attr "type" "mve_move")
5431 (define_insn "mve_vqshluq_m_n_s<mode>"
5433 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5434 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5435 (match_operand:MVE_2 2 "s_register_operand" "w")
5436 (match_operand:SI 3 "mve_imm_7" "Ra")
5437 (match_operand:HI 4 "vpr_register_operand" "Up")]
5441 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
5442 [(set_attr "type" "mve_move")])
5445 ;; [vshlq_m_s, vshlq_m_u])
5447 (define_insn "mve_vshlq_m_<supf><mode>"
5449 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5450 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5451 (match_operand:MVE_2 2 "s_register_operand" "w")
5452 (match_operand:MVE_2 3 "s_register_operand" "w")
5453 (match_operand:HI 4 "vpr_register_operand" "Up")]
5457 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5458 [(set_attr "type" "mve_move")])
5461 ;; [vsriq_m_n_s, vsriq_m_n_u])
5463 (define_insn "mve_vsriq_m_n_<supf><mode>"
5465 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5466 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5467 (match_operand:MVE_2 2 "s_register_operand" "w")
5468 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
5469 (match_operand:HI 4 "vpr_register_operand" "Up")]
5473 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
5474 [(set_attr "type" "mve_move")])
5477 ;; [vsubq_m_u, vsubq_m_s])
5479 (define_insn "mve_vsubq_m_<supf><mode>"
5481 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5482 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5483 (match_operand:MVE_2 2 "s_register_operand" "w")
5484 (match_operand:MVE_2 3 "s_register_operand" "w")
5485 (match_operand:HI 4 "vpr_register_operand" "Up")]
5489 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
5490 [(set_attr "type" "mve_move")])
5493 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
5495 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
5497 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5498 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5499 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5500 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5501 (match_operand:HI 4 "vpr_register_operand" "Up")]
5504 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5505 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5506 [(set_attr "type" "mve_move")
5507 (set_attr "length""8")])
5509 ;; [vabdq_m_s, vabdq_m_u])
5511 (define_insn "mve_vabdq_m_<supf><mode>"
5513 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5514 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5515 (match_operand:MVE_2 2 "s_register_operand" "w")
5516 (match_operand:MVE_2 3 "s_register_operand" "w")
5517 (match_operand:HI 4 "vpr_register_operand" "Up")]
5521 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5522 [(set_attr "type" "mve_move")
5523 (set_attr "length""8")])
5526 ;; [vaddq_m_n_s, vaddq_m_n_u])
5528 (define_insn "mve_vaddq_m_n_<supf><mode>"
5530 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5531 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5532 (match_operand:MVE_2 2 "s_register_operand" "w")
5533 (match_operand:<V_elem> 3 "s_register_operand" "r")
5534 (match_operand:HI 4 "vpr_register_operand" "Up")]
5538 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3"
5539 [(set_attr "type" "mve_move")
5540 (set_attr "length""8")])
5543 ;; [vaddq_m_u, vaddq_m_s])
5545 (define_insn "mve_vaddq_m_<supf><mode>"
5547 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5548 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5549 (match_operand:MVE_2 2 "s_register_operand" "w")
5550 (match_operand:MVE_2 3 "s_register_operand" "w")
5551 (match_operand:HI 4 "vpr_register_operand" "Up")]
5555 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3"
5556 [(set_attr "type" "mve_move")
5557 (set_attr "length""8")])
5560 ;; [vandq_m_u, vandq_m_s])
5562 (define_insn "mve_vandq_m_<supf><mode>"
5564 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5565 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5566 (match_operand:MVE_2 2 "s_register_operand" "w")
5567 (match_operand:MVE_2 3 "s_register_operand" "w")
5568 (match_operand:HI 4 "vpr_register_operand" "Up")]
5572 "vpst\;vandt %q0, %q2, %q3"
5573 [(set_attr "type" "mve_move")
5574 (set_attr "length""8")])
5577 ;; [vbicq_m_u, vbicq_m_s])
5579 (define_insn "mve_vbicq_m_<supf><mode>"
5581 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5582 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5583 (match_operand:MVE_2 2 "s_register_operand" "w")
5584 (match_operand:MVE_2 3 "s_register_operand" "w")
5585 (match_operand:HI 4 "vpr_register_operand" "Up")]
5589 "vpst\;vbict %q0, %q2, %q3"
5590 [(set_attr "type" "mve_move")
5591 (set_attr "length""8")])
5594 ;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
5596 (define_insn "mve_vbrsrq_m_n_<supf><mode>"
5598 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5599 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5600 (match_operand:MVE_2 2 "s_register_operand" "w")
5601 (match_operand:SI 3 "s_register_operand" "r")
5602 (match_operand:HI 4 "vpr_register_operand" "Up")]
5606 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
5607 [(set_attr "type" "mve_move")
5608 (set_attr "length""8")])
5611 ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
5613 (define_insn "mve_vcaddq_rot270_m_<supf><mode>"
5615 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5616 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5617 (match_operand:MVE_2 2 "s_register_operand" "w")
5618 (match_operand:MVE_2 3 "s_register_operand" "w")
5619 (match_operand:HI 4 "vpr_register_operand" "Up")]
5623 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270"
5624 [(set_attr "type" "mve_move")
5625 (set_attr "length""8")])
5628 ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
5630 (define_insn "mve_vcaddq_rot90_m_<supf><mode>"
5632 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5633 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5634 (match_operand:MVE_2 2 "s_register_operand" "w")
5635 (match_operand:MVE_2 3 "s_register_operand" "w")
5636 (match_operand:HI 4 "vpr_register_operand" "Up")]
5640 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90"
5641 [(set_attr "type" "mve_move")
5642 (set_attr "length""8")])
5645 ;; [veorq_m_s, veorq_m_u])
5647 (define_insn "mve_veorq_m_<supf><mode>"
5649 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5650 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5651 (match_operand:MVE_2 2 "s_register_operand" "w")
5652 (match_operand:MVE_2 3 "s_register_operand" "w")
5653 (match_operand:HI 4 "vpr_register_operand" "Up")]
5657 "vpst\;veort %q0, %q2, %q3"
5658 [(set_attr "type" "mve_move")
5659 (set_attr "length""8")])
5662 ;; [vhaddq_m_n_s, vhaddq_m_n_u])
5664 (define_insn "mve_vhaddq_m_n_<supf><mode>"
5666 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5667 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5668 (match_operand:MVE_2 2 "s_register_operand" "w")
5669 (match_operand:<V_elem> 3 "s_register_operand" "r")
5670 (match_operand:HI 4 "vpr_register_operand" "Up")]
5674 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5675 [(set_attr "type" "mve_move")
5676 (set_attr "length""8")])
5679 ;; [vhaddq_m_s, vhaddq_m_u])
5681 (define_insn "mve_vhaddq_m_<supf><mode>"
5683 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5684 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5685 (match_operand:MVE_2 2 "s_register_operand" "w")
5686 (match_operand:MVE_2 3 "s_register_operand" "w")
5687 (match_operand:HI 4 "vpr_register_operand" "Up")]
5691 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5692 [(set_attr "type" "mve_move")
5693 (set_attr "length""8")])
5696 ;; [vhsubq_m_n_s, vhsubq_m_n_u])
5698 (define_insn "mve_vhsubq_m_n_<supf><mode>"
5700 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5701 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5702 (match_operand:MVE_2 2 "s_register_operand" "w")
5703 (match_operand:<V_elem> 3 "s_register_operand" "r")
5704 (match_operand:HI 4 "vpr_register_operand" "Up")]
5708 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5709 [(set_attr "type" "mve_move")
5710 (set_attr "length""8")])
5713 ;; [vhsubq_m_s, vhsubq_m_u])
5715 (define_insn "mve_vhsubq_m_<supf><mode>"
5717 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5718 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5719 (match_operand:MVE_2 2 "s_register_operand" "w")
5720 (match_operand:MVE_2 3 "s_register_operand" "w")
5721 (match_operand:HI 4 "vpr_register_operand" "Up")]
5725 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5726 [(set_attr "type" "mve_move")
5727 (set_attr "length""8")])
5730 ;; [vmaxq_m_s, vmaxq_m_u])
5732 (define_insn "mve_vmaxq_m_<supf><mode>"
5734 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5735 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5736 (match_operand:MVE_2 2 "s_register_operand" "w")
5737 (match_operand:MVE_2 3 "s_register_operand" "w")
5738 (match_operand:HI 4 "vpr_register_operand" "Up")]
5742 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5743 [(set_attr "type" "mve_move")
5744 (set_attr "length""8")])
5747 ;; [vminq_m_s, vminq_m_u])
5749 (define_insn "mve_vminq_m_<supf><mode>"
5751 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5752 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5753 (match_operand:MVE_2 2 "s_register_operand" "w")
5754 (match_operand:MVE_2 3 "s_register_operand" "w")
5755 (match_operand:HI 4 "vpr_register_operand" "Up")]
5759 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5760 [(set_attr "type" "mve_move")
5761 (set_attr "length""8")])
5764 ;; [vmladavaq_p_u, vmladavaq_p_s])
5766 (define_insn "mve_vmladavaq_p_<supf><mode>"
5768 (set (match_operand:SI 0 "s_register_operand" "=Te")
5769 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5770 (match_operand:MVE_2 2 "s_register_operand" "w")
5771 (match_operand:MVE_2 3 "s_register_operand" "w")
5772 (match_operand:HI 4 "vpr_register_operand" "Up")]
5776 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3"
5777 [(set_attr "type" "mve_move")
5778 (set_attr "length""8")])
5781 ;; [vmlaq_m_n_s, vmlaq_m_n_u])
5783 (define_insn "mve_vmlaq_m_n_<supf><mode>"
5785 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5786 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5787 (match_operand:MVE_2 2 "s_register_operand" "w")
5788 (match_operand:<V_elem> 3 "s_register_operand" "r")
5789 (match_operand:HI 4 "vpr_register_operand" "Up")]
5793 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3"
5794 [(set_attr "type" "mve_move")
5795 (set_attr "length""8")])
5798 ;; [vmlasq_m_n_u, vmlasq_m_n_s])
5800 (define_insn "mve_vmlasq_m_n_<supf><mode>"
5802 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5803 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5804 (match_operand:MVE_2 2 "s_register_operand" "w")
5805 (match_operand:<V_elem> 3 "s_register_operand" "r")
5806 (match_operand:HI 4 "vpr_register_operand" "Up")]
5810 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3"
5811 [(set_attr "type" "mve_move")
5812 (set_attr "length""8")])
5815 ;; [vmulhq_m_s, vmulhq_m_u])
5817 (define_insn "mve_vmulhq_m_<supf><mode>"
5819 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5820 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5821 (match_operand:MVE_2 2 "s_register_operand" "w")
5822 (match_operand:MVE_2 3 "s_register_operand" "w")
5823 (match_operand:HI 4 "vpr_register_operand" "Up")]
5827 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5828 [(set_attr "type" "mve_move")
5829 (set_attr "length""8")])
5832 ;; [vmullbq_int_m_u, vmullbq_int_m_s])
5834 (define_insn "mve_vmullbq_int_m_<supf><mode>"
5836 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5837 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5838 (match_operand:MVE_2 2 "s_register_operand" "w")
5839 (match_operand:MVE_2 3 "s_register_operand" "w")
5840 (match_operand:HI 4 "vpr_register_operand" "Up")]
5844 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5845 [(set_attr "type" "mve_move")
5846 (set_attr "length""8")])
5849 ;; [vmulltq_int_m_s, vmulltq_int_m_u])
5851 (define_insn "mve_vmulltq_int_m_<supf><mode>"
5853 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5854 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5855 (match_operand:MVE_2 2 "s_register_operand" "w")
5856 (match_operand:MVE_2 3 "s_register_operand" "w")
5857 (match_operand:HI 4 "vpr_register_operand" "Up")]
5861 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5862 [(set_attr "type" "mve_move")
5863 (set_attr "length""8")])
5866 ;; [vmulq_m_n_u, vmulq_m_n_s])
5868 (define_insn "mve_vmulq_m_n_<supf><mode>"
5870 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5871 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5872 (match_operand:MVE_2 2 "s_register_operand" "w")
5873 (match_operand:<V_elem> 3 "s_register_operand" "r")
5874 (match_operand:HI 4 "vpr_register_operand" "Up")]
5878 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3"
5879 [(set_attr "type" "mve_move")
5880 (set_attr "length""8")])
5883 ;; [vmulq_m_s, vmulq_m_u])
5885 (define_insn "mve_vmulq_m_<supf><mode>"
5887 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5888 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5889 (match_operand:MVE_2 2 "s_register_operand" "w")
5890 (match_operand:MVE_2 3 "s_register_operand" "w")
5891 (match_operand:HI 4 "vpr_register_operand" "Up")]
5895 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3"
5896 [(set_attr "type" "mve_move")
5897 (set_attr "length""8")])
5900 ;; [vornq_m_u, vornq_m_s])
5902 (define_insn "mve_vornq_m_<supf><mode>"
5904 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5905 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5906 (match_operand:MVE_2 2 "s_register_operand" "w")
5907 (match_operand:MVE_2 3 "s_register_operand" "w")
5908 (match_operand:HI 4 "vpr_register_operand" "Up")]
5912 "vpst\;vornt %q0, %q2, %q3"
5913 [(set_attr "type" "mve_move")
5914 (set_attr "length""8")])
5917 ;; [vorrq_m_s, vorrq_m_u])
5919 (define_insn "mve_vorrq_m_<supf><mode>"
5921 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5922 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5923 (match_operand:MVE_2 2 "s_register_operand" "w")
5924 (match_operand:MVE_2 3 "s_register_operand" "w")
5925 (match_operand:HI 4 "vpr_register_operand" "Up")]
5929 "vpst\;vorrt %q0, %q2, %q3"
5930 [(set_attr "type" "mve_move")
5931 (set_attr "length""8")])
5934 ;; [vqaddq_m_n_u, vqaddq_m_n_s])
5936 (define_insn "mve_vqaddq_m_n_<supf><mode>"
5938 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5939 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5940 (match_operand:MVE_2 2 "s_register_operand" "w")
5941 (match_operand:<V_elem> 3 "s_register_operand" "r")
5942 (match_operand:HI 4 "vpr_register_operand" "Up")]
5946 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5947 [(set_attr "type" "mve_move")
5948 (set_attr "length""8")])
5951 ;; [vqaddq_m_u, vqaddq_m_s])
5953 (define_insn "mve_vqaddq_m_<supf><mode>"
5955 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5956 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5957 (match_operand:MVE_2 2 "s_register_operand" "w")
5958 (match_operand:MVE_2 3 "s_register_operand" "w")
5959 (match_operand:HI 4 "vpr_register_operand" "Up")]
5963 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5964 [(set_attr "type" "mve_move")
5965 (set_attr "length""8")])
5968 ;; [vqdmlahq_m_n_s])
5970 (define_insn "mve_vqdmlahq_m_n_s<mode>"
5972 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5973 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5974 (match_operand:MVE_2 2 "s_register_operand" "w")
5975 (match_operand:<V_elem> 3 "s_register_operand" "r")
5976 (match_operand:HI 4 "vpr_register_operand" "Up")]
5980 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5981 [(set_attr "type" "mve_move")
5982 (set_attr "length""8")])
5985 ;; [vqdmlashq_m_n_s])
5987 (define_insn "mve_vqdmlashq_m_n_s<mode>"
5989 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5990 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5991 (match_operand:MVE_2 2 "s_register_operand" "w")
5992 (match_operand:<V_elem> 3 "s_register_operand" "r")
5993 (match_operand:HI 4 "vpr_register_operand" "Up")]
5997 "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5998 [(set_attr "type" "mve_move")
5999 (set_attr "length""8")])
6002 ;; [vqrdmlahq_m_n_s])
6004 (define_insn "mve_vqrdmlahq_m_n_s<mode>"
6006 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6007 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6008 (match_operand:MVE_2 2 "s_register_operand" "w")
6009 (match_operand:<V_elem> 3 "s_register_operand" "r")
6010 (match_operand:HI 4 "vpr_register_operand" "Up")]
6014 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
6015 [(set_attr "type" "mve_move")
6016 (set_attr "length""8")])
6019 ;; [vqrdmlashq_m_n_s])
6021 (define_insn "mve_vqrdmlashq_m_n_s<mode>"
6023 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6024 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6025 (match_operand:MVE_2 2 "s_register_operand" "w")
6026 (match_operand:<V_elem> 3 "s_register_operand" "r")
6027 (match_operand:HI 4 "vpr_register_operand" "Up")]
6031 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
6032 [(set_attr "type" "mve_move")
6033 (set_attr "length""8")])
6036 ;; [vqrshlq_m_u, vqrshlq_m_s])
6038 (define_insn "mve_vqrshlq_m_<supf><mode>"
6040 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6041 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6042 (match_operand:MVE_2 2 "s_register_operand" "w")
6043 (match_operand:MVE_2 3 "s_register_operand" "w")
6044 (match_operand:HI 4 "vpr_register_operand" "Up")]
6048 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6049 [(set_attr "type" "mve_move")
6050 (set_attr "length""8")])
6053 ;; [vqshlq_m_n_s, vqshlq_m_n_u])
6055 (define_insn "mve_vqshlq_m_n_<supf><mode>"
6057 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6058 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6059 (match_operand:MVE_2 2 "s_register_operand" "w")
6060 (match_operand:SI 3 "immediate_operand" "i")
6061 (match_operand:HI 4 "vpr_register_operand" "Up")]
6065 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6066 [(set_attr "type" "mve_move")
6067 (set_attr "length""8")])
6070 ;; [vqshlq_m_u, vqshlq_m_s])
6072 (define_insn "mve_vqshlq_m_<supf><mode>"
6074 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6075 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6076 (match_operand:MVE_2 2 "s_register_operand" "w")
6077 (match_operand:MVE_2 3 "s_register_operand" "w")
6078 (match_operand:HI 4 "vpr_register_operand" "Up")]
6082 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6083 [(set_attr "type" "mve_move")
6084 (set_attr "length""8")])
6087 ;; [vqsubq_m_n_u, vqsubq_m_n_s])
6089 (define_insn "mve_vqsubq_m_n_<supf><mode>"
6091 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6092 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6093 (match_operand:MVE_2 2 "s_register_operand" "w")
6094 (match_operand:<V_elem> 3 "s_register_operand" "r")
6095 (match_operand:HI 4 "vpr_register_operand" "Up")]
6099 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6100 [(set_attr "type" "mve_move")
6101 (set_attr "length""8")])
6104 ;; [vqsubq_m_u, vqsubq_m_s])
6106 (define_insn "mve_vqsubq_m_<supf><mode>"
6108 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6109 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6110 (match_operand:MVE_2 2 "s_register_operand" "w")
6111 (match_operand:MVE_2 3 "s_register_operand" "w")
6112 (match_operand:HI 4 "vpr_register_operand" "Up")]
6116 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6117 [(set_attr "type" "mve_move")
6118 (set_attr "length""8")])
6121 ;; [vrhaddq_m_u, vrhaddq_m_s])
6123 (define_insn "mve_vrhaddq_m_<supf><mode>"
6125 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6126 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6127 (match_operand:MVE_2 2 "s_register_operand" "w")
6128 (match_operand:MVE_2 3 "s_register_operand" "w")
6129 (match_operand:HI 4 "vpr_register_operand" "Up")]
6133 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6134 [(set_attr "type" "mve_move")
6135 (set_attr "length""8")])
6138 ;; [vrmulhq_m_u, vrmulhq_m_s])
6140 (define_insn "mve_vrmulhq_m_<supf><mode>"
6142 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6143 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6144 (match_operand:MVE_2 2 "s_register_operand" "w")
6145 (match_operand:MVE_2 3 "s_register_operand" "w")
6146 (match_operand:HI 4 "vpr_register_operand" "Up")]
6150 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6151 [(set_attr "type" "mve_move")
6152 (set_attr "length""8")])
6155 ;; [vrshlq_m_s, vrshlq_m_u])
6157 (define_insn "mve_vrshlq_m_<supf><mode>"
6159 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6160 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6161 (match_operand:MVE_2 2 "s_register_operand" "w")
6162 (match_operand:MVE_2 3 "s_register_operand" "w")
6163 (match_operand:HI 4 "vpr_register_operand" "Up")]
6167 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6168 [(set_attr "type" "mve_move")
6169 (set_attr "length""8")])
6172 ;; [vrshrq_m_n_s, vrshrq_m_n_u])
6174 (define_insn "mve_vrshrq_m_n_<supf><mode>"
6176 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6177 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6178 (match_operand:MVE_2 2 "s_register_operand" "w")
6179 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6180 (match_operand:HI 4 "vpr_register_operand" "Up")]
6184 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6185 [(set_attr "type" "mve_move")
6186 (set_attr "length""8")])
6189 ;; [vshlq_m_n_s, vshlq_m_n_u])
6191 (define_insn "mve_vshlq_m_n_<supf><mode>"
6193 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6194 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6195 (match_operand:MVE_2 2 "s_register_operand" "w")
6196 (match_operand:SI 3 "immediate_operand" "i")
6197 (match_operand:HI 4 "vpr_register_operand" "Up")]
6201 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6202 [(set_attr "type" "mve_move")
6203 (set_attr "length""8")])
6206 ;; [vshrq_m_n_s, vshrq_m_n_u])
6208 (define_insn "mve_vshrq_m_n_<supf><mode>"
6210 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6211 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6212 (match_operand:MVE_2 2 "s_register_operand" "w")
6213 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6214 (match_operand:HI 4 "vpr_register_operand" "Up")]
6218 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6219 [(set_attr "type" "mve_move")
6220 (set_attr "length""8")])
6223 ;; [vsliq_m_n_u, vsliq_m_n_s])
6225 (define_insn "mve_vsliq_m_n_<supf><mode>"
6227 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6228 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6229 (match_operand:MVE_2 2 "s_register_operand" "w")
6230 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
6231 (match_operand:HI 4 "vpr_register_operand" "Up")]
6235 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
6236 [(set_attr "type" "mve_move")
6237 (set_attr "length""8")])
6240 ;; [vsubq_m_n_s, vsubq_m_n_u])
6242 (define_insn "mve_vsubq_m_n_<supf><mode>"
6244 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6245 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6246 (match_operand:MVE_2 2 "s_register_operand" "w")
6247 (match_operand:<V_elem> 3 "s_register_operand" "r")
6248 (match_operand:HI 4 "vpr_register_operand" "Up")]
6252 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
6253 [(set_attr "type" "mve_move")
6254 (set_attr "length""8")])
6257 ;; [vhcaddq_rot270_m_s])
6259 (define_insn "mve_vhcaddq_rot270_m_s<mode>"
6261 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6262 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6263 (match_operand:MVE_2 2 "s_register_operand" "w")
6264 (match_operand:MVE_2 3 "s_register_operand" "w")
6265 (match_operand:HI 4 "vpr_register_operand" "Up")]
6266 VHCADDQ_ROT270_M_S))
6269 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
6270 [(set_attr "type" "mve_move")
6271 (set_attr "length""8")])
6274 ;; [vhcaddq_rot90_m_s])
6276 (define_insn "mve_vhcaddq_rot90_m_s<mode>"
6278 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6279 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6280 (match_operand:MVE_2 2 "s_register_operand" "w")
6281 (match_operand:MVE_2 3 "s_register_operand" "w")
6282 (match_operand:HI 4 "vpr_register_operand" "Up")]
6286 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
6287 [(set_attr "type" "mve_move")
6288 (set_attr "length""8")])
6291 ;; [vmladavaxq_p_s])
6293 (define_insn "mve_vmladavaxq_p_s<mode>"
6295 (set (match_operand:SI 0 "s_register_operand" "=Te")
6296 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6297 (match_operand:MVE_2 2 "s_register_operand" "w")
6298 (match_operand:MVE_2 3 "s_register_operand" "w")
6299 (match_operand:HI 4 "vpr_register_operand" "Up")]
6303 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6304 [(set_attr "type" "mve_move")
6305 (set_attr "length""8")])
6310 (define_insn "mve_vmlsdavaq_p_s<mode>"
6312 (set (match_operand:SI 0 "s_register_operand" "=Te")
6313 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6314 (match_operand:MVE_2 2 "s_register_operand" "w")
6315 (match_operand:MVE_2 3 "s_register_operand" "w")
6316 (match_operand:HI 4 "vpr_register_operand" "Up")]
6320 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
6321 [(set_attr "type" "mve_move")
6322 (set_attr "length""8")])
6325 ;; [vmlsdavaxq_p_s])
6327 (define_insn "mve_vmlsdavaxq_p_s<mode>"
6329 (set (match_operand:SI 0 "s_register_operand" "=Te")
6330 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6331 (match_operand:MVE_2 2 "s_register_operand" "w")
6332 (match_operand:MVE_2 3 "s_register_operand" "w")
6333 (match_operand:HI 4 "vpr_register_operand" "Up")]
6337 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6338 [(set_attr "type" "mve_move")
6339 (set_attr "length""8")])
6344 (define_insn "mve_vqdmladhq_m_s<mode>"
6346 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6347 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6348 (match_operand:MVE_2 2 "s_register_operand" "w")
6349 (match_operand:MVE_2 3 "s_register_operand" "w")
6350 (match_operand:HI 4 "vpr_register_operand" "Up")]
6354 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6355 [(set_attr "type" "mve_move")
6356 (set_attr "length""8")])
6359 ;; [vqdmladhxq_m_s])
6361 (define_insn "mve_vqdmladhxq_m_s<mode>"
6363 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6364 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6365 (match_operand:MVE_2 2 "s_register_operand" "w")
6366 (match_operand:MVE_2 3 "s_register_operand" "w")
6367 (match_operand:HI 4 "vpr_register_operand" "Up")]
6371 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6372 [(set_attr "type" "mve_move")
6373 (set_attr "length""8")])
6378 (define_insn "mve_vqdmlsdhq_m_s<mode>"
6380 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6381 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6382 (match_operand:MVE_2 2 "s_register_operand" "w")
6383 (match_operand:MVE_2 3 "s_register_operand" "w")
6384 (match_operand:HI 4 "vpr_register_operand" "Up")]
6388 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6389 [(set_attr "type" "mve_move")
6390 (set_attr "length""8")])
6393 ;; [vqdmlsdhxq_m_s])
6395 (define_insn "mve_vqdmlsdhxq_m_s<mode>"
6397 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6398 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6399 (match_operand:MVE_2 2 "s_register_operand" "w")
6400 (match_operand:MVE_2 3 "s_register_operand" "w")
6401 (match_operand:HI 4 "vpr_register_operand" "Up")]
6405 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6406 [(set_attr "type" "mve_move")
6407 (set_attr "length""8")])
6410 ;; [vqdmulhq_m_n_s])
6412 (define_insn "mve_vqdmulhq_m_n_s<mode>"
6414 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6415 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6416 (match_operand:MVE_2 2 "s_register_operand" "w")
6417 (match_operand:<V_elem> 3 "s_register_operand" "r")
6418 (match_operand:HI 4 "vpr_register_operand" "Up")]
6422 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6423 [(set_attr "type" "mve_move")
6424 (set_attr "length""8")])
6429 (define_insn "mve_vqdmulhq_m_s<mode>"
6431 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6432 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6433 (match_operand:MVE_2 2 "s_register_operand" "w")
6434 (match_operand:MVE_2 3 "s_register_operand" "w")
6435 (match_operand:HI 4 "vpr_register_operand" "Up")]
6439 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6440 [(set_attr "type" "mve_move")
6441 (set_attr "length""8")])
6444 ;; [vqrdmladhq_m_s])
6446 (define_insn "mve_vqrdmladhq_m_s<mode>"
6448 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6449 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6450 (match_operand:MVE_2 2 "s_register_operand" "w")
6451 (match_operand:MVE_2 3 "s_register_operand" "w")
6452 (match_operand:HI 4 "vpr_register_operand" "Up")]
6456 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6457 [(set_attr "type" "mve_move")
6458 (set_attr "length""8")])
6461 ;; [vqrdmladhxq_m_s])
6463 (define_insn "mve_vqrdmladhxq_m_s<mode>"
6465 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6466 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6467 (match_operand:MVE_2 2 "s_register_operand" "w")
6468 (match_operand:MVE_2 3 "s_register_operand" "w")
6469 (match_operand:HI 4 "vpr_register_operand" "Up")]
6473 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6474 [(set_attr "type" "mve_move")
6475 (set_attr "length""8")])
6478 ;; [vqrdmlsdhq_m_s])
6480 (define_insn "mve_vqrdmlsdhq_m_s<mode>"
6482 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6483 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6484 (match_operand:MVE_2 2 "s_register_operand" "w")
6485 (match_operand:MVE_2 3 "s_register_operand" "w")
6486 (match_operand:HI 4 "vpr_register_operand" "Up")]
6490 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6491 [(set_attr "type" "mve_move")
6492 (set_attr "length""8")])
6495 ;; [vqrdmlsdhxq_m_s])
6497 (define_insn "mve_vqrdmlsdhxq_m_s<mode>"
6499 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6500 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6501 (match_operand:MVE_2 2 "s_register_operand" "w")
6502 (match_operand:MVE_2 3 "s_register_operand" "w")
6503 (match_operand:HI 4 "vpr_register_operand" "Up")]
6507 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6508 [(set_attr "type" "mve_move")
6509 (set_attr "length""8")])
6512 ;; [vqrdmulhq_m_n_s])
6514 (define_insn "mve_vqrdmulhq_m_n_s<mode>"
6516 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6517 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6518 (match_operand:MVE_2 2 "s_register_operand" "w")
6519 (match_operand:<V_elem> 3 "s_register_operand" "r")
6520 (match_operand:HI 4 "vpr_register_operand" "Up")]
6524 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6525 [(set_attr "type" "mve_move")
6526 (set_attr "length""8")])
6531 (define_insn "mve_vqrdmulhq_m_s<mode>"
6533 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6534 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6535 (match_operand:MVE_2 2 "s_register_operand" "w")
6536 (match_operand:MVE_2 3 "s_register_operand" "w")
6537 (match_operand:HI 4 "vpr_register_operand" "Up")]
6541 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6542 [(set_attr "type" "mve_move")
6543 (set_attr "length""8")])
6546 ;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
6548 (define_insn "mve_vmlaldavaq_p_<supf><mode>"
6550 (set (match_operand:DI 0 "s_register_operand" "=r")
6551 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6552 (match_operand:MVE_5 2 "s_register_operand" "w")
6553 (match_operand:MVE_5 3 "s_register_operand" "w")
6554 (match_operand:HI 4 "vpr_register_operand" "Up")]
6558 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6559 [(set_attr "type" "mve_move")
6560 (set_attr "length""8")])
6563 ;; [vmlaldavaxq_p_s])
6565 (define_insn "mve_vmlaldavaxq_p_<supf><mode>"
6567 (set (match_operand:DI 0 "s_register_operand" "=r")
6568 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6569 (match_operand:MVE_5 2 "s_register_operand" "w")
6570 (match_operand:MVE_5 3 "s_register_operand" "w")
6571 (match_operand:HI 4 "vpr_register_operand" "Up")]
6575 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6576 [(set_attr "type" "mve_move")
6577 (set_attr "length""8")])
6580 ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
6582 (define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
6584 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6585 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6586 (match_operand:MVE_5 2 "s_register_operand" "w")
6587 (match_operand:SI 3 "mve_imm_8" "Rb")
6588 (match_operand:HI 4 "vpr_register_operand" "Up")]
6592 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6593 [(set_attr "type" "mve_move")
6594 (set_attr "length""8")])
6597 ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
6599 (define_insn "mve_vqrshrntq_m_n_<supf><mode>"
6601 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6602 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6603 (match_operand:MVE_5 2 "s_register_operand" "w")
6604 (match_operand:SI 3 "mve_imm_8" "Rb")
6605 (match_operand:HI 4 "vpr_register_operand" "Up")]
6609 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6610 [(set_attr "type" "mve_move")
6611 (set_attr "length""8")])
6614 ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
6616 (define_insn "mve_vqshrnbq_m_n_<supf><mode>"
6618 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6619 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6620 (match_operand:MVE_5 2 "s_register_operand" "w")
6621 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6622 (match_operand:HI 4 "vpr_register_operand" "Up")]
6626 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6627 [(set_attr "type" "mve_move")
6628 (set_attr "length""8")])
6631 ;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
6633 (define_insn "mve_vqshrntq_m_n_<supf><mode>"
6635 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6636 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6637 (match_operand:MVE_5 2 "s_register_operand" "w")
6638 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6639 (match_operand:HI 4 "vpr_register_operand" "Up")]
6643 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6644 [(set_attr "type" "mve_move")
6645 (set_attr "length""8")])
6648 ;; [vrmlaldavhaq_p_s])
6650 (define_insn "mve_vrmlaldavhaq_p_sv4si"
6652 (set (match_operand:DI 0 "s_register_operand" "=r")
6653 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6654 (match_operand:V4SI 2 "s_register_operand" "w")
6655 (match_operand:V4SI 3 "s_register_operand" "w")
6656 (match_operand:HI 4 "vpr_register_operand" "Up")]
6660 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
6661 [(set_attr "type" "mve_move")
6662 (set_attr "length""8")])
6665 ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
6667 (define_insn "mve_vrshrnbq_m_n_<supf><mode>"
6669 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6670 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6671 (match_operand:MVE_5 2 "s_register_operand" "w")
6672 (match_operand:SI 3 "mve_imm_8" "Rb")
6673 (match_operand:HI 4 "vpr_register_operand" "Up")]
6677 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6678 [(set_attr "type" "mve_move")
6679 (set_attr "length""8")])
6682 ;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
6684 (define_insn "mve_vrshrntq_m_n_<supf><mode>"
6686 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6687 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6688 (match_operand:MVE_5 2 "s_register_operand" "w")
6689 (match_operand:SI 3 "mve_imm_8" "Rb")
6690 (match_operand:HI 4 "vpr_register_operand" "Up")]
6694 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6695 [(set_attr "type" "mve_move")
6696 (set_attr "length""8")])
6699 ;; [vshllbq_m_n_u, vshllbq_m_n_s])
6701 (define_insn "mve_vshllbq_m_n_<supf><mode>"
6703 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6704 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6705 (match_operand:MVE_3 2 "s_register_operand" "w")
6706 (match_operand:SI 3 "immediate_operand" "i")
6707 (match_operand:HI 4 "vpr_register_operand" "Up")]
6711 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6712 [(set_attr "type" "mve_move")
6713 (set_attr "length""8")])
6716 ;; [vshlltq_m_n_u, vshlltq_m_n_s])
6718 (define_insn "mve_vshlltq_m_n_<supf><mode>"
6720 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6721 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6722 (match_operand:MVE_3 2 "s_register_operand" "w")
6723 (match_operand:SI 3 "immediate_operand" "i")
6724 (match_operand:HI 4 "vpr_register_operand" "Up")]
6728 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6729 [(set_attr "type" "mve_move")
6730 (set_attr "length""8")])
6733 ;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
6735 (define_insn "mve_vshrnbq_m_n_<supf><mode>"
6737 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6738 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6739 (match_operand:MVE_5 2 "s_register_operand" "w")
6740 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6741 (match_operand:HI 4 "vpr_register_operand" "Up")]
6745 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6746 [(set_attr "type" "mve_move")
6747 (set_attr "length""8")])
6750 ;; [vshrntq_m_n_s, vshrntq_m_n_u])
6752 (define_insn "mve_vshrntq_m_n_<supf><mode>"
6754 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6755 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6756 (match_operand:MVE_5 2 "s_register_operand" "w")
6757 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6758 (match_operand:HI 4 "vpr_register_operand" "Up")]
6762 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6763 [(set_attr "type" "mve_move")
6764 (set_attr "length""8")])
6767 ;; [vmlsldavaq_p_s])
6769 (define_insn "mve_vmlsldavaq_p_s<mode>"
6771 (set (match_operand:DI 0 "s_register_operand" "=r")
6772 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6773 (match_operand:MVE_5 2 "s_register_operand" "w")
6774 (match_operand:MVE_5 3 "s_register_operand" "w")
6775 (match_operand:HI 4 "vpr_register_operand" "Up")]
6779 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6780 [(set_attr "type" "mve_move")
6781 (set_attr "length""8")])
6784 ;; [vmlsldavaxq_p_s])
6786 (define_insn "mve_vmlsldavaxq_p_s<mode>"
6788 (set (match_operand:DI 0 "s_register_operand" "=r")
6789 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6790 (match_operand:MVE_5 2 "s_register_operand" "w")
6791 (match_operand:MVE_5 3 "s_register_operand" "w")
6792 (match_operand:HI 4 "vpr_register_operand" "Up")]
6796 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6797 [(set_attr "type" "mve_move")
6798 (set_attr "length""8")])
6801 ;; [vmullbq_poly_m_p])
6803 (define_insn "mve_vmullbq_poly_m_p<mode>"
6805 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6806 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6807 (match_operand:MVE_3 2 "s_register_operand" "w")
6808 (match_operand:MVE_3 3 "s_register_operand" "w")
6809 (match_operand:HI 4 "vpr_register_operand" "Up")]
6813 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6814 [(set_attr "type" "mve_move")
6815 (set_attr "length""8")])
6818 ;; [vmulltq_poly_m_p])
6820 (define_insn "mve_vmulltq_poly_m_p<mode>"
6822 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6823 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6824 (match_operand:MVE_3 2 "s_register_operand" "w")
6825 (match_operand:MVE_3 3 "s_register_operand" "w")
6826 (match_operand:HI 4 "vpr_register_operand" "Up")]
6830 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6831 [(set_attr "type" "mve_move")
6832 (set_attr "length""8")])
6835 ;; [vqdmullbq_m_n_s])
6837 (define_insn "mve_vqdmullbq_m_n_s<mode>"
6839 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6840 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6841 (match_operand:MVE_5 2 "s_register_operand" "w")
6842 (match_operand:<V_elem> 3 "s_register_operand" "r")
6843 (match_operand:HI 4 "vpr_register_operand" "Up")]
6847 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6848 [(set_attr "type" "mve_move")
6849 (set_attr "length""8")])
6854 (define_insn "mve_vqdmullbq_m_s<mode>"
6856 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6857 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6858 (match_operand:MVE_5 2 "s_register_operand" "w")
6859 (match_operand:MVE_5 3 "s_register_operand" "w")
6860 (match_operand:HI 4 "vpr_register_operand" "Up")]
6864 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6865 [(set_attr "type" "mve_move")
6866 (set_attr "length""8")])
6869 ;; [vqdmulltq_m_n_s])
6871 (define_insn "mve_vqdmulltq_m_n_s<mode>"
6873 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6874 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6875 (match_operand:MVE_5 2 "s_register_operand" "w")
6876 (match_operand:<V_elem> 3 "s_register_operand" "r")
6877 (match_operand:HI 4 "vpr_register_operand" "Up")]
6881 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
6882 [(set_attr "type" "mve_move")
6883 (set_attr "length""8")])
6888 (define_insn "mve_vqdmulltq_m_s<mode>"
6890 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6891 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6892 (match_operand:MVE_5 2 "s_register_operand" "w")
6893 (match_operand:MVE_5 3 "s_register_operand" "w")
6894 (match_operand:HI 4 "vpr_register_operand" "Up")]
6898 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6899 [(set_attr "type" "mve_move")
6900 (set_attr "length""8")])
6903 ;; [vqrshrunbq_m_n_s])
6905 (define_insn "mve_vqrshrunbq_m_n_s<mode>"
6907 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6908 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6909 (match_operand:MVE_5 2 "s_register_operand" "w")
6910 (match_operand:SI 3 "mve_imm_8" "Rb")
6911 (match_operand:HI 4 "vpr_register_operand" "Up")]
6915 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6916 [(set_attr "type" "mve_move")
6917 (set_attr "length""8")])
6920 ;; [vqrshruntq_m_n_s])
6922 (define_insn "mve_vqrshruntq_m_n_s<mode>"
6924 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6925 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6926 (match_operand:MVE_5 2 "s_register_operand" "w")
6927 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6928 (match_operand:HI 4 "vpr_register_operand" "Up")]
6932 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6933 [(set_attr "type" "mve_move")
6934 (set_attr "length""8")])
6937 ;; [vqshrunbq_m_n_s])
6939 (define_insn "mve_vqshrunbq_m_n_s<mode>"
6941 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6942 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6943 (match_operand:MVE_5 2 "s_register_operand" "w")
6944 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6945 (match_operand:HI 4 "vpr_register_operand" "Up")]
6949 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6950 [(set_attr "type" "mve_move")
6951 (set_attr "length""8")])
6954 ;; [vqshruntq_m_n_s])
6956 (define_insn "mve_vqshruntq_m_n_s<mode>"
6958 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6959 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6960 (match_operand:MVE_5 2 "s_register_operand" "w")
6961 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6962 (match_operand:HI 4 "vpr_register_operand" "Up")]
6966 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6967 [(set_attr "type" "mve_move")
6968 (set_attr "length""8")])
6971 ;; [vrmlaldavhaq_p_u])
6973 (define_insn "mve_vrmlaldavhaq_p_uv4si"
6975 (set (match_operand:DI 0 "s_register_operand" "=r")
6976 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6977 (match_operand:V4SI 2 "s_register_operand" "w")
6978 (match_operand:V4SI 3 "s_register_operand" "w")
6979 (match_operand:HI 4 "vpr_register_operand" "Up")]
6983 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
6984 [(set_attr "type" "mve_move")
6985 (set_attr "length""8")])
6988 ;; [vrmlaldavhaxq_p_s])
6990 (define_insn "mve_vrmlaldavhaxq_p_sv4si"
6992 (set (match_operand:DI 0 "s_register_operand" "=r")
6993 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6994 (match_operand:V4SI 2 "s_register_operand" "w")
6995 (match_operand:V4SI 3 "s_register_operand" "w")
6996 (match_operand:HI 4 "vpr_register_operand" "Up")]
7000 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
7001 [(set_attr "type" "mve_move")
7002 (set_attr "length""8")])
7005 ;; [vrmlsldavhaq_p_s])
7007 (define_insn "mve_vrmlsldavhaq_p_sv4si"
7009 (set (match_operand:DI 0 "s_register_operand" "=r")
7010 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7011 (match_operand:V4SI 2 "s_register_operand" "w")
7012 (match_operand:V4SI 3 "s_register_operand" "w")
7013 (match_operand:HI 4 "vpr_register_operand" "Up")]
7017 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
7018 [(set_attr "type" "mve_move")
7019 (set_attr "length""8")])
7022 ;; [vrmlsldavhaxq_p_s])
7024 (define_insn "mve_vrmlsldavhaxq_p_sv4si"
7026 (set (match_operand:DI 0 "s_register_operand" "=r")
7027 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7028 (match_operand:V4SI 2 "s_register_operand" "w")
7029 (match_operand:V4SI 3 "s_register_operand" "w")
7030 (match_operand:HI 4 "vpr_register_operand" "Up")]
7034 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
7035 [(set_attr "type" "mve_move")
7036 (set_attr "length""8")])
7040 (define_insn "mve_vabdq_m_f<mode>"
7042 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7043 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7044 (match_operand:MVE_0 2 "s_register_operand" "w")
7045 (match_operand:MVE_0 3 "s_register_operand" "w")
7046 (match_operand:HI 4 "vpr_register_operand" "Up")]
7049 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7050 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3"
7051 [(set_attr "type" "mve_move")
7052 (set_attr "length""8")])
7057 (define_insn "mve_vaddq_m_f<mode>"
7059 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7060 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7061 (match_operand:MVE_0 2 "s_register_operand" "w")
7062 (match_operand:MVE_0 3 "s_register_operand" "w")
7063 (match_operand:HI 4 "vpr_register_operand" "Up")]
7066 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7067 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3"
7068 [(set_attr "type" "mve_move")
7069 (set_attr "length""8")])
7074 (define_insn "mve_vaddq_m_n_f<mode>"
7076 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7077 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7078 (match_operand:MVE_0 2 "s_register_operand" "w")
7079 (match_operand:<V_elem> 3 "s_register_operand" "r")
7080 (match_operand:HI 4 "vpr_register_operand" "Up")]
7083 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7084 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3"
7085 [(set_attr "type" "mve_move")
7086 (set_attr "length""8")])
7091 (define_insn "mve_vandq_m_f<mode>"
7093 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7094 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7095 (match_operand:MVE_0 2 "s_register_operand" "w")
7096 (match_operand:MVE_0 3 "s_register_operand" "w")
7097 (match_operand:HI 4 "vpr_register_operand" "Up")]
7100 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7101 "vpst\;vandt %q0, %q2, %q3"
7102 [(set_attr "type" "mve_move")
7103 (set_attr "length""8")])
7108 (define_insn "mve_vbicq_m_f<mode>"
7110 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7111 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7112 (match_operand:MVE_0 2 "s_register_operand" "w")
7113 (match_operand:MVE_0 3 "s_register_operand" "w")
7114 (match_operand:HI 4 "vpr_register_operand" "Up")]
7117 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7118 "vpst\;vbict %q0, %q2, %q3"
7119 [(set_attr "type" "mve_move")
7120 (set_attr "length""8")])
7125 (define_insn "mve_vbrsrq_m_n_f<mode>"
7127 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7128 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7129 (match_operand:MVE_0 2 "s_register_operand" "w")
7130 (match_operand:SI 3 "s_register_operand" "r")
7131 (match_operand:HI 4 "vpr_register_operand" "Up")]
7134 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7135 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
7136 [(set_attr "type" "mve_move")
7137 (set_attr "length""8")])
7140 ;; [vcaddq_rot270_m_f])
7142 (define_insn "mve_vcaddq_rot270_m_f<mode>"
7144 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7145 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7146 (match_operand:MVE_0 2 "s_register_operand" "w")
7147 (match_operand:MVE_0 3 "s_register_operand" "w")
7148 (match_operand:HI 4 "vpr_register_operand" "Up")]
7151 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7152 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7153 [(set_attr "type" "mve_move")
7154 (set_attr "length""8")])
7157 ;; [vcaddq_rot90_m_f])
7159 (define_insn "mve_vcaddq_rot90_m_f<mode>"
7161 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7162 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7163 (match_operand:MVE_0 2 "s_register_operand" "w")
7164 (match_operand:MVE_0 3 "s_register_operand" "w")
7165 (match_operand:HI 4 "vpr_register_operand" "Up")]
7168 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7169 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7170 [(set_attr "type" "mve_move")
7171 (set_attr "length""8")])
7176 (define_insn "mve_vcmlaq_m_f<mode>"
7178 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7179 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7180 (match_operand:MVE_0 2 "s_register_operand" "w")
7181 (match_operand:MVE_0 3 "s_register_operand" "w")
7182 (match_operand:HI 4 "vpr_register_operand" "Up")]
7185 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7186 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7187 [(set_attr "type" "mve_move")
7188 (set_attr "length""8")])
7191 ;; [vcmlaq_rot180_m_f])
7193 (define_insn "mve_vcmlaq_rot180_m_f<mode>"
7195 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7196 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7197 (match_operand:MVE_0 2 "s_register_operand" "w")
7198 (match_operand:MVE_0 3 "s_register_operand" "w")
7199 (match_operand:HI 4 "vpr_register_operand" "Up")]
7202 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7203 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7204 [(set_attr "type" "mve_move")
7205 (set_attr "length""8")])
7208 ;; [vcmlaq_rot270_m_f])
7210 (define_insn "mve_vcmlaq_rot270_m_f<mode>"
7212 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7213 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7214 (match_operand:MVE_0 2 "s_register_operand" "w")
7215 (match_operand:MVE_0 3 "s_register_operand" "w")
7216 (match_operand:HI 4 "vpr_register_operand" "Up")]
7219 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7220 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7221 [(set_attr "type" "mve_move")
7222 (set_attr "length""8")])
7225 ;; [vcmlaq_rot90_m_f])
7227 (define_insn "mve_vcmlaq_rot90_m_f<mode>"
7229 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7230 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7231 (match_operand:MVE_0 2 "s_register_operand" "w")
7232 (match_operand:MVE_0 3 "s_register_operand" "w")
7233 (match_operand:HI 4 "vpr_register_operand" "Up")]
7236 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7237 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7238 [(set_attr "type" "mve_move")
7239 (set_attr "length""8")])
7244 (define_insn "mve_vcmulq_m_f<mode>"
7246 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7247 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7248 (match_operand:MVE_0 2 "s_register_operand" "w")
7249 (match_operand:MVE_0 3 "s_register_operand" "w")
7250 (match_operand:HI 4 "vpr_register_operand" "Up")]
7253 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7254 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7255 [(set_attr "type" "mve_move")
7256 (set_attr "length""8")])
7259 ;; [vcmulq_rot180_m_f])
7261 (define_insn "mve_vcmulq_rot180_m_f<mode>"
7263 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7264 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7265 (match_operand:MVE_0 2 "s_register_operand" "w")
7266 (match_operand:MVE_0 3 "s_register_operand" "w")
7267 (match_operand:HI 4 "vpr_register_operand" "Up")]
7270 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7271 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7272 [(set_attr "type" "mve_move")
7273 (set_attr "length""8")])
7276 ;; [vcmulq_rot270_m_f])
7278 (define_insn "mve_vcmulq_rot270_m_f<mode>"
7280 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7281 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7282 (match_operand:MVE_0 2 "s_register_operand" "w")
7283 (match_operand:MVE_0 3 "s_register_operand" "w")
7284 (match_operand:HI 4 "vpr_register_operand" "Up")]
7287 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7288 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7289 [(set_attr "type" "mve_move")
7290 (set_attr "length""8")])
7293 ;; [vcmulq_rot90_m_f])
7295 (define_insn "mve_vcmulq_rot90_m_f<mode>"
7297 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7298 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7299 (match_operand:MVE_0 2 "s_register_operand" "w")
7300 (match_operand:MVE_0 3 "s_register_operand" "w")
7301 (match_operand:HI 4 "vpr_register_operand" "Up")]
7304 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7305 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7306 [(set_attr "type" "mve_move")
7307 (set_attr "length""8")])
7312 (define_insn "mve_veorq_m_f<mode>"
7314 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7315 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7316 (match_operand:MVE_0 2 "s_register_operand" "w")
7317 (match_operand:MVE_0 3 "s_register_operand" "w")
7318 (match_operand:HI 4 "vpr_register_operand" "Up")]
7321 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7322 "vpst\;veort %q0, %q2, %q3"
7323 [(set_attr "type" "mve_move")
7324 (set_attr "length""8")])
7329 (define_insn "mve_vfmaq_m_f<mode>"
7331 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7332 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7333 (match_operand:MVE_0 2 "s_register_operand" "w")
7334 (match_operand:MVE_0 3 "s_register_operand" "w")
7335 (match_operand:HI 4 "vpr_register_operand" "Up")]
7338 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7339 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3"
7340 [(set_attr "type" "mve_move")
7341 (set_attr "length""8")])
7346 (define_insn "mve_vfmaq_m_n_f<mode>"
7348 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7349 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7350 (match_operand:MVE_0 2 "s_register_operand" "w")
7351 (match_operand:<V_elem> 3 "s_register_operand" "r")
7352 (match_operand:HI 4 "vpr_register_operand" "Up")]
7355 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7356 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3"
7357 [(set_attr "type" "mve_move")
7358 (set_attr "length""8")])
7363 (define_insn "mve_vfmasq_m_n_f<mode>"
7365 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7366 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7367 (match_operand:MVE_0 2 "s_register_operand" "w")
7368 (match_operand:<V_elem> 3 "s_register_operand" "r")
7369 (match_operand:HI 4 "vpr_register_operand" "Up")]
7372 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7373 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3"
7374 [(set_attr "type" "mve_move")
7375 (set_attr "length""8")])
7380 (define_insn "mve_vfmsq_m_f<mode>"
7382 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7383 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7384 (match_operand:MVE_0 2 "s_register_operand" "w")
7385 (match_operand:MVE_0 3 "s_register_operand" "w")
7386 (match_operand:HI 4 "vpr_register_operand" "Up")]
7389 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7390 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3"
7391 [(set_attr "type" "mve_move")
7392 (set_attr "length""8")])
7397 (define_insn "mve_vmaxnmq_m_f<mode>"
7399 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7400 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7401 (match_operand:MVE_0 2 "s_register_operand" "w")
7402 (match_operand:MVE_0 3 "s_register_operand" "w")
7403 (match_operand:HI 4 "vpr_register_operand" "Up")]
7406 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7407 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7408 [(set_attr "type" "mve_move")
7409 (set_attr "length""8")])
7414 (define_insn "mve_vminnmq_m_f<mode>"
7416 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7417 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7418 (match_operand:MVE_0 2 "s_register_operand" "w")
7419 (match_operand:MVE_0 3 "s_register_operand" "w")
7420 (match_operand:HI 4 "vpr_register_operand" "Up")]
7423 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7424 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7425 [(set_attr "type" "mve_move")
7426 (set_attr "length""8")])
7431 (define_insn "mve_vmulq_m_f<mode>"
7433 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7434 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7435 (match_operand:MVE_0 2 "s_register_operand" "w")
7436 (match_operand:MVE_0 3 "s_register_operand" "w")
7437 (match_operand:HI 4 "vpr_register_operand" "Up")]
7440 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7441 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3"
7442 [(set_attr "type" "mve_move")
7443 (set_attr "length""8")])
7448 (define_insn "mve_vmulq_m_n_f<mode>"
7450 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7451 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7452 (match_operand:MVE_0 2 "s_register_operand" "w")
7453 (match_operand:<V_elem> 3 "s_register_operand" "r")
7454 (match_operand:HI 4 "vpr_register_operand" "Up")]
7457 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7458 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3"
7459 [(set_attr "type" "mve_move")
7460 (set_attr "length""8")])
7465 (define_insn "mve_vornq_m_f<mode>"
7467 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7468 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7469 (match_operand:MVE_0 2 "s_register_operand" "w")
7470 (match_operand:MVE_0 3 "s_register_operand" "w")
7471 (match_operand:HI 4 "vpr_register_operand" "Up")]
7474 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7475 "vpst\;vornt %q0, %q2, %q3"
7476 [(set_attr "type" "mve_move")
7477 (set_attr "length""8")])
7482 (define_insn "mve_vorrq_m_f<mode>"
7484 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7485 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7486 (match_operand:MVE_0 2 "s_register_operand" "w")
7487 (match_operand:MVE_0 3 "s_register_operand" "w")
7488 (match_operand:HI 4 "vpr_register_operand" "Up")]
7491 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7492 "vpst\;vorrt %q0, %q2, %q3"
7493 [(set_attr "type" "mve_move")
7494 (set_attr "length""8")])
7499 (define_insn "mve_vsubq_m_f<mode>"
7501 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7502 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7503 (match_operand:MVE_0 2 "s_register_operand" "w")
7504 (match_operand:MVE_0 3 "s_register_operand" "w")
7505 (match_operand:HI 4 "vpr_register_operand" "Up")]
7508 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7509 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
7510 [(set_attr "type" "mve_move")
7511 (set_attr "length""8")])
7516 (define_insn "mve_vsubq_m_n_f<mode>"
7518 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7519 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7520 (match_operand:MVE_0 2 "s_register_operand" "w")
7521 (match_operand:<V_elem> 3 "s_register_operand" "r")
7522 (match_operand:HI 4 "vpr_register_operand" "Up")]
7525 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7526 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
7527 [(set_attr "type" "mve_move")
7528 (set_attr "length""8")])
7531 ;; [vstrbq_s vstrbq_u]
7533 (define_insn "mve_vstrbq_<supf><mode>"
7534 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7535 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
7541 int regno = REGNO (operands[1]);
7542 ops[1] = gen_rtx_REG (TImode, regno);
7543 ops[0] = operands[0];
7544 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
7547 [(set_attr "length" "4")])
7550 ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
7552 (define_expand "mve_vstrbq_scatter_offset_<supf><mode>"
7553 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7554 (match_operand:MVE_2 1 "s_register_operand")
7555 (match_operand:MVE_2 2 "s_register_operand")
7556 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7559 rtx ind = XEXP (operands[0], 0);
7560 gcc_assert (REG_P (ind));
7561 emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1],
7566 (define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn"
7567 [(set (mem:BLK (scratch))
7569 [(match_operand:SI 0 "register_operand" "r")
7570 (match_operand:MVE_2 1 "s_register_operand" "w")
7571 (match_operand:MVE_2 2 "s_register_operand" "w")]
7574 "vstrb.<V_sz_elem>\t%q2, [%0, %q1]"
7575 [(set_attr "length" "4")])
7578 ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
7580 (define_insn "mve_vstrwq_scatter_base_<supf>v4si"
7581 [(set (mem:BLK (scratch))
7583 [(match_operand:V4SI 0 "s_register_operand" "w")
7584 (match_operand:SI 1 "immediate_operand" "i")
7585 (match_operand:V4SI 2 "s_register_operand" "w")]
7591 ops[0] = operands[0];
7592 ops[1] = operands[1];
7593 ops[2] = operands[2];
7594 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
7597 [(set_attr "length" "4")])
7600 ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
7602 (define_insn "mve_vldrbq_gather_offset_<supf><mode>"
7603 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7604 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7605 (match_operand:MVE_2 2 "s_register_operand" "w")]
7611 ops[0] = operands[0];
7612 ops[1] = operands[1];
7613 ops[2] = operands[2];
7614 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7615 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
7617 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7620 [(set_attr "length" "4")])
7623 ;; [vldrbq_s vldrbq_u]
7625 (define_insn "mve_vldrbq_<supf><mode>"
7626 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7627 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")]
7633 int regno = REGNO (operands[0]);
7634 ops[0] = gen_rtx_REG (TImode, regno);
7635 ops[1] = operands[1];
7636 if (<V_sz_elem> == 8)
7637 output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops);
7639 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
7642 [(set_attr "length" "4")])
7645 ;; [vldrwq_gather_base_s vldrwq_gather_base_u]
7647 (define_insn "mve_vldrwq_gather_base_<supf>v4si"
7648 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7649 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7650 (match_operand:SI 2 "immediate_operand" "i")]
7656 ops[0] = operands[0];
7657 ops[1] = operands[1];
7658 ops[2] = operands[2];
7659 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7662 [(set_attr "length" "4")])
7665 ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
7667 (define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>"
7668 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7669 (match_operand:MVE_2 1 "s_register_operand")
7670 (match_operand:MVE_2 2 "s_register_operand")
7671 (match_operand:HI 3 "vpr_register_operand" "Up")
7672 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7675 rtx ind = XEXP (operands[0], 0);
7676 gcc_assert (REG_P (ind));
7678 gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
7684 (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn"
7685 [(set (mem:BLK (scratch))
7687 [(match_operand:SI 0 "register_operand" "r")
7688 (match_operand:MVE_2 1 "s_register_operand" "w")
7689 (match_operand:MVE_2 2 "s_register_operand" "w")
7690 (match_operand:HI 3 "vpr_register_operand" "Up")]
7693 "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]"
7694 [(set_attr "length" "8")])
7697 ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
7699 (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
7700 [(set (mem:BLK (scratch))
7702 [(match_operand:V4SI 0 "s_register_operand" "w")
7703 (match_operand:SI 1 "immediate_operand" "i")
7704 (match_operand:V4SI 2 "s_register_operand" "w")
7705 (match_operand:HI 3 "vpr_register_operand" "Up")]
7711 ops[0] = operands[0];
7712 ops[1] = operands[1];
7713 ops[2] = operands[2];
7714 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
7717 [(set_attr "length" "8")])
7720 ;; [vstrbq_p_s vstrbq_p_u]
7722 (define_insn "mve_vstrbq_p_<supf><mode>"
7723 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7724 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
7725 (match_operand:HI 2 "vpr_register_operand" "Up")]
7731 int regno = REGNO (operands[1]);
7732 ops[1] = gen_rtx_REG (TImode, regno);
7733 ops[0] = operands[0];
7734 output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops);
7737 [(set_attr "length" "8")])
7740 ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
7742 (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
7743 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7744 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7745 (match_operand:MVE_2 2 "s_register_operand" "w")
7746 (match_operand:HI 3 "vpr_register_operand" "Up")]
7752 ops[0] = operands[0];
7753 ops[1] = operands[1];
7754 ops[2] = operands[2];
7755 ops[3] = operands[3];
7756 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7757 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
7759 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7762 [(set_attr "length" "8")])
7765 ;; [vldrbq_z_s vldrbq_z_u]
7767 (define_insn "mve_vldrbq_z_<supf><mode>"
7768 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7769 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")
7770 (match_operand:HI 2 "vpr_register_operand" "Up")]
7776 int regno = REGNO (operands[0]);
7777 ops[0] = gen_rtx_REG (TImode, regno);
7778 ops[1] = operands[1];
7779 if (<V_sz_elem> == 8)
7780 output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops);
7782 output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
7785 [(set_attr "length" "8")])
7788 ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
7790 (define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
7791 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7792 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7793 (match_operand:SI 2 "immediate_operand" "i")
7794 (match_operand:HI 3 "vpr_register_operand" "Up")]
7800 ops[0] = operands[0];
7801 ops[1] = operands[1];
7802 ops[2] = operands[2];
7803 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7806 [(set_attr "length" "8")])
7811 (define_insn "mve_vldrhq_fv8hf"
7812 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7813 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")]
7816 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7819 int regno = REGNO (operands[0]);
7820 ops[0] = gen_rtx_REG (TImode, regno);
7821 ops[1] = operands[1];
7822 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7825 [(set_attr "length" "4")])
7828 ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
7830 (define_insn "mve_vldrhq_gather_offset_<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")]
7839 ops[0] = operands[0];
7840 ops[1] = operands[1];
7841 ops[2] = operands[2];
7842 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7843 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
7845 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7848 [(set_attr "length" "4")])
7851 ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
7853 (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
7854 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7855 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7856 (match_operand:MVE_6 2 "s_register_operand" "w")
7857 (match_operand:HI 3 "vpr_register_operand" "Up")
7863 ops[0] = operands[0];
7864 ops[1] = operands[1];
7865 ops[2] = operands[2];
7866 ops[3] = operands[3];
7867 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7868 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
7870 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7873 [(set_attr "length" "8")])
7876 ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
7878 (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
7879 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7880 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7881 (match_operand:MVE_6 2 "s_register_operand" "w")]
7887 ops[0] = operands[0];
7888 ops[1] = operands[1];
7889 ops[2] = operands[2];
7890 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7891 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7893 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7896 [(set_attr "length" "4")])
7899 ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
7901 (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
7902 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7903 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7904 (match_operand:MVE_6 2 "s_register_operand" "w")
7905 (match_operand:HI 3 "vpr_register_operand" "Up")
7911 ops[0] = operands[0];
7912 ops[1] = operands[1];
7913 ops[2] = operands[2];
7914 ops[3] = operands[3];
7915 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7916 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7918 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7921 [(set_attr "length" "8")])
7924 ;; [vldrhq_s, vldrhq_u]
7926 (define_insn "mve_vldrhq_<supf><mode>"
7927 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7928 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")]
7934 int regno = REGNO (operands[0]);
7935 ops[0] = gen_rtx_REG (TImode, regno);
7936 ops[1] = operands[1];
7937 if (<V_sz_elem> == 16)
7938 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7940 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
7943 [(set_attr "length" "4")])
7948 (define_insn "mve_vldrhq_z_fv8hf"
7949 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7950 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")
7951 (match_operand:HI 2 "vpr_register_operand" "Up")]
7954 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7957 int regno = REGNO (operands[0]);
7958 ops[0] = gen_rtx_REG (TImode, regno);
7959 ops[1] = operands[1];
7960 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7963 [(set_attr "length" "8")])
7966 ;; [vldrhq_z_s vldrhq_z_u]
7968 (define_insn "mve_vldrhq_z_<supf><mode>"
7969 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7970 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")
7971 (match_operand:HI 2 "vpr_register_operand" "Up")]
7977 int regno = REGNO (operands[0]);
7978 ops[0] = gen_rtx_REG (TImode, regno);
7979 ops[1] = operands[1];
7980 if (<V_sz_elem> == 16)
7981 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7983 output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
7986 [(set_attr "length" "8")])
7991 (define_insn "mve_vldrwq_fv4sf"
7992 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7993 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")]
7996 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7999 int regno = REGNO (operands[0]);
8000 ops[0] = gen_rtx_REG (TImode, regno);
8001 ops[1] = operands[1];
8002 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
8005 [(set_attr "length" "4")])
8008 ;; [vldrwq_s vldrwq_u]
8010 (define_insn "mve_vldrwq_<supf>v4si"
8011 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
8012 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")]
8018 int regno = REGNO (operands[0]);
8019 ops[0] = gen_rtx_REG (TImode, regno);
8020 ops[1] = operands[1];
8021 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
8024 [(set_attr "length" "4")])
8029 (define_insn "mve_vldrwq_z_fv4sf"
8030 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
8031 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")
8032 (match_operand:HI 2 "vpr_register_operand" "Up")]
8035 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8038 int regno = REGNO (operands[0]);
8039 ops[0] = gen_rtx_REG (TImode, regno);
8040 ops[1] = operands[1];
8041 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
8044 [(set_attr "length" "8")])
8047 ;; [vldrwq_z_s vldrwq_z_u]
8049 (define_insn "mve_vldrwq_z_<supf>v4si"
8050 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
8051 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")
8052 (match_operand:HI 2 "vpr_register_operand" "Up")]
8058 int regno = REGNO (operands[0]);
8059 ops[0] = gen_rtx_REG (TImode, regno);
8060 ops[1] = operands[1];
8061 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
8064 [(set_attr "length" "8")])
8066 (define_expand "mve_vld1q_f<mode>"
8067 [(match_operand:MVE_0 0 "s_register_operand")
8068 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F)
8070 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8072 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8076 (define_expand "mve_vld1q_<supf><mode>"
8077 [(match_operand:MVE_2 0 "s_register_operand")
8078 (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q)
8082 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8087 ;; [vldrdq_gather_base_s vldrdq_gather_base_u]
8089 (define_insn "mve_vldrdq_gather_base_<supf>v2di"
8090 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8091 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8092 (match_operand:SI 2 "immediate_operand" "i")]
8098 ops[0] = operands[0];
8099 ops[1] = operands[1];
8100 ops[2] = operands[2];
8101 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
8104 [(set_attr "length" "4")])
8107 ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
8109 (define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
8110 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8111 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8112 (match_operand:SI 2 "immediate_operand" "i")
8113 (match_operand:HI 3 "vpr_register_operand" "Up")]
8119 ops[0] = operands[0];
8120 ops[1] = operands[1];
8121 ops[2] = operands[2];
8122 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
8125 [(set_attr "length" "8")])
8128 ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
8130 (define_insn "mve_vldrdq_gather_offset_<supf>v2di"
8131 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8132 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8133 (match_operand:V2DI 2 "s_register_operand" "w")]
8139 ops[0] = operands[0];
8140 ops[1] = operands[1];
8141 ops[2] = operands[2];
8142 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
8145 [(set_attr "length" "4")])
8148 ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
8150 (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
8151 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8152 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8153 (match_operand:V2DI 2 "s_register_operand" "w")
8154 (match_operand:HI 3 "vpr_register_operand" "Up")]
8160 ops[0] = operands[0];
8161 ops[1] = operands[1];
8162 ops[2] = operands[2];
8163 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
8166 [(set_attr "length" "8")])
8169 ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
8171 (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
8172 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8173 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8174 (match_operand:V2DI 2 "s_register_operand" "w")]
8180 ops[0] = operands[0];
8181 ops[1] = operands[1];
8182 ops[2] = operands[2];
8183 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8186 [(set_attr "length" "4")])
8189 ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
8191 (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
8192 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8193 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8194 (match_operand:V2DI 2 "s_register_operand" "w")
8195 (match_operand:HI 3 "vpr_register_operand" "Up")]
8201 ops[0] = operands[0];
8202 ops[1] = operands[1];
8203 ops[2] = operands[2];
8204 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8207 [(set_attr "length" "8")])
8210 ;; [vldrhq_gather_offset_f]
8212 (define_insn "mve_vldrhq_gather_offset_fv8hf"
8213 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8214 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8215 (match_operand:V8HI 2 "s_register_operand" "w")]
8218 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8221 ops[0] = operands[0];
8222 ops[1] = operands[1];
8223 ops[2] = operands[2];
8224 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
8227 [(set_attr "length" "4")])
8230 ;; [vldrhq_gather_offset_z_f]
8232 (define_insn "mve_vldrhq_gather_offset_z_fv8hf"
8233 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8234 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8235 (match_operand:V8HI 2 "s_register_operand" "w")
8236 (match_operand:HI 3 "vpr_register_operand" "Up")]
8239 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8242 ops[0] = operands[0];
8243 ops[1] = operands[1];
8244 ops[2] = operands[2];
8245 ops[3] = operands[3];
8246 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
8249 [(set_attr "length" "8")])
8252 ;; [vldrhq_gather_shifted_offset_f]
8254 (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
8255 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8256 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8257 (match_operand:V8HI 2 "s_register_operand" "w")]
8260 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8263 ops[0] = operands[0];
8264 ops[1] = operands[1];
8265 ops[2] = operands[2];
8266 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8269 [(set_attr "length" "4")])
8272 ;; [vldrhq_gather_shifted_offset_z_f]
8274 (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
8275 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8276 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8277 (match_operand:V8HI 2 "s_register_operand" "w")
8278 (match_operand:HI 3 "vpr_register_operand" "Up")]
8281 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8284 ops[0] = operands[0];
8285 ops[1] = operands[1];
8286 ops[2] = operands[2];
8287 ops[3] = operands[3];
8288 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8291 [(set_attr "length" "8")])
8294 ;; [vldrwq_gather_base_f]
8296 (define_insn "mve_vldrwq_gather_base_fv4sf"
8297 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8298 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8299 (match_operand:SI 2 "immediate_operand" "i")]
8302 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8305 ops[0] = operands[0];
8306 ops[1] = operands[1];
8307 ops[2] = operands[2];
8308 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
8311 [(set_attr "length" "4")])
8314 ;; [vldrwq_gather_base_z_f]
8316 (define_insn "mve_vldrwq_gather_base_z_fv4sf"
8317 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8318 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8319 (match_operand:SI 2 "immediate_operand" "i")
8320 (match_operand:HI 3 "vpr_register_operand" "Up")]
8323 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8326 ops[0] = operands[0];
8327 ops[1] = operands[1];
8328 ops[2] = operands[2];
8329 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
8332 [(set_attr "length" "8")])
8335 ;; [vldrwq_gather_offset_f]
8337 (define_insn "mve_vldrwq_gather_offset_fv4sf"
8338 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8339 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8340 (match_operand:V4SI 2 "s_register_operand" "w")]
8343 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8346 ops[0] = operands[0];
8347 ops[1] = operands[1];
8348 ops[2] = operands[2];
8349 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8352 [(set_attr "length" "4")])
8355 ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
8357 (define_insn "mve_vldrwq_gather_offset_<supf>v4si"
8358 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8359 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8360 (match_operand:V4SI 2 "s_register_operand" "w")]
8366 ops[0] = operands[0];
8367 ops[1] = operands[1];
8368 ops[2] = operands[2];
8369 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8372 [(set_attr "length" "4")])
8375 ;; [vldrwq_gather_offset_z_f]
8377 (define_insn "mve_vldrwq_gather_offset_z_fv4sf"
8378 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8379 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8380 (match_operand:V4SI 2 "s_register_operand" "w")
8381 (match_operand:HI 3 "vpr_register_operand" "Up")]
8384 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8387 ops[0] = operands[0];
8388 ops[1] = operands[1];
8389 ops[2] = operands[2];
8390 ops[3] = operands[3];
8391 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8394 [(set_attr "length" "8")])
8397 ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
8399 (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
8400 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8401 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8402 (match_operand:V4SI 2 "s_register_operand" "w")
8403 (match_operand:HI 3 "vpr_register_operand" "Up")]
8409 ops[0] = operands[0];
8410 ops[1] = operands[1];
8411 ops[2] = operands[2];
8412 ops[3] = operands[3];
8413 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8416 [(set_attr "length" "8")])
8419 ;; [vldrwq_gather_shifted_offset_f]
8421 (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
8422 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8423 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8424 (match_operand:V4SI 2 "s_register_operand" "w")]
8427 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8430 ops[0] = operands[0];
8431 ops[1] = operands[1];
8432 ops[2] = operands[2];
8433 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8436 [(set_attr "length" "4")])
8439 ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
8441 (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
8442 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8443 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8444 (match_operand:V4SI 2 "s_register_operand" "w")]
8450 ops[0] = operands[0];
8451 ops[1] = operands[1];
8452 ops[2] = operands[2];
8453 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8456 [(set_attr "length" "4")])
8459 ;; [vldrwq_gather_shifted_offset_z_f]
8461 (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
8462 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8463 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8464 (match_operand:V4SI 2 "s_register_operand" "w")
8465 (match_operand:HI 3 "vpr_register_operand" "Up")]
8468 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8471 ops[0] = operands[0];
8472 ops[1] = operands[1];
8473 ops[2] = operands[2];
8474 ops[3] = operands[3];
8475 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8478 [(set_attr "length" "8")])
8481 ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
8483 (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
8484 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8485 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8486 (match_operand:V4SI 2 "s_register_operand" "w")
8487 (match_operand:HI 3 "vpr_register_operand" "Up")]
8493 ops[0] = operands[0];
8494 ops[1] = operands[1];
8495 ops[2] = operands[2];
8496 ops[3] = operands[3];
8497 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8500 [(set_attr "length" "8")])
8505 (define_insn "mve_vstrhq_fv8hf"
8506 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8507 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
8510 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8513 int regno = REGNO (operands[1]);
8514 ops[1] = gen_rtx_REG (TImode, regno);
8515 ops[0] = operands[0];
8516 output_asm_insn ("vstrh.16\t%q1, %E0",ops);
8519 [(set_attr "length" "4")])
8524 (define_insn "mve_vstrhq_p_fv8hf"
8525 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8526 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
8527 (match_operand:HI 2 "vpr_register_operand" "Up")]
8530 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8533 int regno = REGNO (operands[1]);
8534 ops[1] = gen_rtx_REG (TImode, regno);
8535 ops[0] = operands[0];
8536 output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops);
8539 [(set_attr "length" "8")])
8542 ;; [vstrhq_p_s vstrhq_p_u]
8544 (define_insn "mve_vstrhq_p_<supf><mode>"
8545 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8546 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
8547 (match_operand:HI 2 "vpr_register_operand" "Up")]
8553 int regno = REGNO (operands[1]);
8554 ops[1] = gen_rtx_REG (TImode, regno);
8555 ops[0] = operands[0];
8556 output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops);
8559 [(set_attr "length" "8")])
8562 ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
8564 (define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>"
8565 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8566 (match_operand:MVE_6 1 "s_register_operand")
8567 (match_operand:MVE_6 2 "s_register_operand")
8568 (match_operand:HI 3 "vpr_register_operand")
8569 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8572 rtx ind = XEXP (operands[0], 0);
8573 gcc_assert (REG_P (ind));
8575 gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
8581 (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn"
8582 [(set (mem:BLK (scratch))
8584 [(match_operand:SI 0 "register_operand" "r")
8585 (match_operand:MVE_6 1 "s_register_operand" "w")
8586 (match_operand:MVE_6 2 "s_register_operand" "w")
8587 (match_operand:HI 3 "vpr_register_operand" "Up")]
8590 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]"
8591 [(set_attr "length" "8")])
8594 ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
8596 (define_expand "mve_vstrhq_scatter_offset_<supf><mode>"
8597 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8598 (match_operand:MVE_6 1 "s_register_operand")
8599 (match_operand:MVE_6 2 "s_register_operand")
8600 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8603 rtx ind = XEXP (operands[0], 0);
8604 gcc_assert (REG_P (ind));
8605 emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1],
8610 (define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn"
8611 [(set (mem:BLK (scratch))
8613 [(match_operand:SI 0 "register_operand" "r")
8614 (match_operand:MVE_6 1 "s_register_operand" "w")
8615 (match_operand:MVE_6 2 "s_register_operand" "w")]
8618 "vstrh.<V_sz_elem>\t%q2, [%0, %q1]"
8619 [(set_attr "length" "4")])
8622 ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
8624 (define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
8625 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8626 (match_operand:MVE_6 1 "s_register_operand")
8627 (match_operand:MVE_6 2 "s_register_operand")
8628 (match_operand:HI 3 "vpr_register_operand")
8629 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8632 rtx ind = XEXP (operands[0], 0);
8633 gcc_assert (REG_P (ind));
8635 gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1],
8641 (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn"
8642 [(set (mem:BLK (scratch))
8644 [(match_operand:SI 0 "register_operand" "r")
8645 (match_operand:MVE_6 1 "s_register_operand" "w")
8646 (match_operand:MVE_6 2 "s_register_operand" "w")
8647 (match_operand:HI 3 "vpr_register_operand" "Up")]
8650 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8651 [(set_attr "length" "8")])
8654 ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
8656 (define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
8657 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8658 (match_operand:MVE_6 1 "s_register_operand")
8659 (match_operand:MVE_6 2 "s_register_operand")
8660 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8663 rtx ind = XEXP (operands[0], 0);
8664 gcc_assert (REG_P (ind));
8666 gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1],
8671 (define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn"
8672 [(set (mem:BLK (scratch))
8674 [(match_operand:SI 0 "register_operand" "r")
8675 (match_operand:MVE_6 1 "s_register_operand" "w")
8676 (match_operand:MVE_6 2 "s_register_operand" "w")]
8679 "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8680 [(set_attr "length" "4")])
8683 ;; [vstrhq_s, vstrhq_u]
8685 (define_insn "mve_vstrhq_<supf><mode>"
8686 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8687 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
8693 int regno = REGNO (operands[1]);
8694 ops[1] = gen_rtx_REG (TImode, regno);
8695 ops[0] = operands[0];
8696 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
8699 [(set_attr "length" "4")])
8704 (define_insn "mve_vstrwq_fv4sf"
8705 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8706 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
8709 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8712 int regno = REGNO (operands[1]);
8713 ops[1] = gen_rtx_REG (TImode, regno);
8714 ops[0] = operands[0];
8715 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8718 [(set_attr "length" "4")])
8723 (define_insn "mve_vstrwq_p_fv4sf"
8724 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8725 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
8726 (match_operand:HI 2 "vpr_register_operand" "Up")]
8729 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8732 int regno = REGNO (operands[1]);
8733 ops[1] = gen_rtx_REG (TImode, regno);
8734 ops[0] = operands[0];
8735 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8738 [(set_attr "length" "8")])
8741 ;; [vstrwq_p_s vstrwq_p_u]
8743 (define_insn "mve_vstrwq_p_<supf>v4si"
8744 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8745 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8746 (match_operand:HI 2 "vpr_register_operand" "Up")]
8752 int regno = REGNO (operands[1]);
8753 ops[1] = gen_rtx_REG (TImode, regno);
8754 ops[0] = operands[0];
8755 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8758 [(set_attr "length" "8")])
8761 ;; [vstrwq_s vstrwq_u]
8763 (define_insn "mve_vstrwq_<supf>v4si"
8764 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8765 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
8771 int regno = REGNO (operands[1]);
8772 ops[1] = gen_rtx_REG (TImode, regno);
8773 ops[0] = operands[0];
8774 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8777 [(set_attr "length" "4")])
8779 (define_expand "mve_vst1q_f<mode>"
8780 [(match_operand:<MVE_CNVT> 0 "mve_memory_operand")
8781 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
8783 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8785 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8789 (define_expand "mve_vst1q_<supf><mode>"
8790 [(match_operand:MVE_2 0 "mve_memory_operand")
8791 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
8795 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8800 ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
8802 (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
8803 [(set (mem:BLK (scratch))
8805 [(match_operand:V2DI 0 "s_register_operand" "w")
8806 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8807 (match_operand:V2DI 2 "s_register_operand" "w")
8808 (match_operand:HI 3 "vpr_register_operand" "Up")]
8814 ops[0] = operands[0];
8815 ops[1] = operands[1];
8816 ops[2] = operands[2];
8817 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
8820 [(set_attr "length" "8")])
8823 ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
8825 (define_insn "mve_vstrdq_scatter_base_<supf>v2di"
8826 [(set (mem:BLK (scratch))
8828 [(match_operand:V2DI 0 "s_register_operand" "=w")
8829 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8830 (match_operand:V2DI 2 "s_register_operand" "w")]
8836 ops[0] = operands[0];
8837 ops[1] = operands[1];
8838 ops[2] = operands[2];
8839 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
8842 [(set_attr "length" "4")])
8845 ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
8847 (define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di"
8848 [(match_operand:V2DI 0 "mve_scatter_memory")
8849 (match_operand:V2DI 1 "s_register_operand")
8850 (match_operand:V2DI 2 "s_register_operand")
8851 (match_operand:HI 3 "vpr_register_operand")
8852 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8855 rtx ind = XEXP (operands[0], 0);
8856 gcc_assert (REG_P (ind));
8857 emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1],
8863 (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn"
8864 [(set (mem:BLK (scratch))
8866 [(match_operand:SI 0 "register_operand" "r")
8867 (match_operand:V2DI 1 "s_register_operand" "w")
8868 (match_operand:V2DI 2 "s_register_operand" "w")
8869 (match_operand:HI 3 "vpr_register_operand" "Up")]
8872 "vpst\;vstrdt.64\t%q2, [%0, %q1]"
8873 [(set_attr "length" "8")])
8876 ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
8878 (define_expand "mve_vstrdq_scatter_offset_<supf>v2di"
8879 [(match_operand:V2DI 0 "mve_scatter_memory")
8880 (match_operand:V2DI 1 "s_register_operand")
8881 (match_operand:V2DI 2 "s_register_operand")
8882 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8885 rtx ind = XEXP (operands[0], 0);
8886 gcc_assert (REG_P (ind));
8887 emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1],
8892 (define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn"
8893 [(set (mem:BLK (scratch))
8895 [(match_operand:SI 0 "register_operand" "r")
8896 (match_operand:V2DI 1 "s_register_operand" "w")
8897 (match_operand:V2DI 2 "s_register_operand" "w")]
8900 "vstrd.64\t%q2, [%0, %q1]"
8901 [(set_attr "length" "4")])
8904 ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
8906 (define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
8907 [(match_operand:V2DI 0 "mve_scatter_memory")
8908 (match_operand:V2DI 1 "s_register_operand")
8909 (match_operand:V2DI 2 "s_register_operand")
8910 (match_operand:HI 3 "vpr_register_operand")
8911 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8914 rtx ind = XEXP (operands[0], 0);
8915 gcc_assert (REG_P (ind));
8917 gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1],
8923 (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn"
8924 [(set (mem:BLK (scratch))
8926 [(match_operand:SI 0 "register_operand" "r")
8927 (match_operand:V2DI 1 "s_register_operand" "w")
8928 (match_operand:V2DI 2 "s_register_operand" "w")
8929 (match_operand:HI 3 "vpr_register_operand" "Up")]
8932 "vpst\;vstrdt.64\t%q2, [%0, %q1, UXTW #3]"
8933 [(set_attr "length" "8")])
8936 ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
8938 (define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
8939 [(match_operand:V2DI 0 "mve_scatter_memory")
8940 (match_operand:V2DI 1 "s_register_operand")
8941 (match_operand:V2DI 2 "s_register_operand")
8942 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8945 rtx ind = XEXP (operands[0], 0);
8946 gcc_assert (REG_P (ind));
8948 gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1],
8953 (define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn"
8954 [(set (mem:BLK (scratch))
8956 [(match_operand:SI 0 "register_operand" "r")
8957 (match_operand:V2DI 1 "s_register_operand" "w")
8958 (match_operand:V2DI 2 "s_register_operand" "w")]
8961 "vstrd.64\t%q2, [%0, %q1, UXTW #3]"
8962 [(set_attr "length" "4")])
8965 ;; [vstrhq_scatter_offset_f]
8967 (define_expand "mve_vstrhq_scatter_offset_fv8hf"
8968 [(match_operand:V8HI 0 "mve_scatter_memory")
8969 (match_operand:V8HI 1 "s_register_operand")
8970 (match_operand:V8HF 2 "s_register_operand")
8971 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8972 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8974 rtx ind = XEXP (operands[0], 0);
8975 gcc_assert (REG_P (ind));
8976 emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1],
8981 (define_insn "mve_vstrhq_scatter_offset_fv8hf_insn"
8982 [(set (mem:BLK (scratch))
8984 [(match_operand:SI 0 "register_operand" "r")
8985 (match_operand:V8HI 1 "s_register_operand" "w")
8986 (match_operand:V8HF 2 "s_register_operand" "w")]
8988 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8989 "vstrh.16\t%q2, [%0, %q1]"
8990 [(set_attr "length" "4")])
8993 ;; [vstrhq_scatter_offset_p_f]
8995 (define_expand "mve_vstrhq_scatter_offset_p_fv8hf"
8996 [(match_operand:V8HI 0 "mve_scatter_memory")
8997 (match_operand:V8HI 1 "s_register_operand")
8998 (match_operand:V8HF 2 "s_register_operand")
8999 (match_operand:HI 3 "vpr_register_operand")
9000 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
9001 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9003 rtx ind = XEXP (operands[0], 0);
9004 gcc_assert (REG_P (ind));
9005 emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1],
9011 (define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn"
9012 [(set (mem:BLK (scratch))
9014 [(match_operand:SI 0 "register_operand" "r")
9015 (match_operand:V8HI 1 "s_register_operand" "w")
9016 (match_operand:V8HF 2 "s_register_operand" "w")
9017 (match_operand:HI 3 "vpr_register_operand" "Up")]
9019 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9020 "vpst\;vstrht.16\t%q2, [%0, %q1]"
9021 [(set_attr "length" "8")])
9024 ;; [vstrhq_scatter_shifted_offset_f]
9026 (define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf"
9027 [(match_operand:V8HI 0 "memory_operand" "=Us")
9028 (match_operand:V8HI 1 "s_register_operand" "w")
9029 (match_operand:V8HF 2 "s_register_operand" "w")
9030 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
9031 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9033 rtx ind = XEXP (operands[0], 0);
9034 gcc_assert (REG_P (ind));
9035 emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1],
9040 (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn"
9041 [(set (mem:BLK (scratch))
9043 [(match_operand:SI 0 "register_operand" "r")
9044 (match_operand:V8HI 1 "s_register_operand" "w")
9045 (match_operand:V8HF 2 "s_register_operand" "w")]
9047 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9048 "vstrh.16\t%q2, [%0, %q1, uxtw #1]"
9049 [(set_attr "length" "4")])
9052 ;; [vstrhq_scatter_shifted_offset_p_f]
9054 (define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
9055 [(match_operand:V8HI 0 "memory_operand" "=Us")
9056 (match_operand:V8HI 1 "s_register_operand" "w")
9057 (match_operand:V8HF 2 "s_register_operand" "w")
9058 (match_operand:HI 3 "vpr_register_operand" "Up")
9059 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
9060 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9062 rtx ind = XEXP (operands[0], 0);
9063 gcc_assert (REG_P (ind));
9065 gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1],
9071 (define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn"
9072 [(set (mem:BLK (scratch))
9074 [(match_operand:SI 0 "register_operand" "r")
9075 (match_operand:V8HI 1 "s_register_operand" "w")
9076 (match_operand:V8HF 2 "s_register_operand" "w")
9077 (match_operand:HI 3 "vpr_register_operand" "Up")]
9079 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9080 "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]"
9081 [(set_attr "length" "8")])
9084 ;; [vstrwq_scatter_base_f]
9086 (define_insn "mve_vstrwq_scatter_base_fv4sf"
9087 [(set (mem:BLK (scratch))
9089 [(match_operand:V4SI 0 "s_register_operand" "w")
9090 (match_operand:SI 1 "immediate_operand" "i")
9091 (match_operand:V4SF 2 "s_register_operand" "w")]
9094 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9097 ops[0] = operands[0];
9098 ops[1] = operands[1];
9099 ops[2] = operands[2];
9100 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
9103 [(set_attr "length" "4")])
9106 ;; [vstrwq_scatter_base_p_f]
9108 (define_insn "mve_vstrwq_scatter_base_p_fv4sf"
9109 [(set (mem:BLK (scratch))
9111 [(match_operand:V4SI 0 "s_register_operand" "w")
9112 (match_operand:SI 1 "immediate_operand" "i")
9113 (match_operand:V4SF 2 "s_register_operand" "w")
9114 (match_operand:HI 3 "vpr_register_operand" "Up")]
9117 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9120 ops[0] = operands[0];
9121 ops[1] = operands[1];
9122 ops[2] = operands[2];
9123 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
9126 [(set_attr "length" "8")])
9129 ;; [vstrwq_scatter_offset_f]
9131 (define_expand "mve_vstrwq_scatter_offset_fv4sf"
9132 [(match_operand:V4SI 0 "mve_scatter_memory")
9133 (match_operand:V4SI 1 "s_register_operand")
9134 (match_operand:V4SF 2 "s_register_operand")
9135 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9136 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9138 rtx ind = XEXP (operands[0], 0);
9139 gcc_assert (REG_P (ind));
9140 emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1],
9145 (define_insn "mve_vstrwq_scatter_offset_fv4sf_insn"
9146 [(set (mem:BLK (scratch))
9148 [(match_operand:SI 0 "register_operand" "r")
9149 (match_operand:V4SI 1 "s_register_operand" "w")
9150 (match_operand:V4SF 2 "s_register_operand" "w")]
9152 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9153 "vstrw.32\t%q2, [%0, %q1]"
9154 [(set_attr "length" "4")])
9157 ;; [vstrwq_scatter_offset_p_f]
9159 (define_expand "mve_vstrwq_scatter_offset_p_fv4sf"
9160 [(match_operand:V4SI 0 "mve_scatter_memory")
9161 (match_operand:V4SI 1 "s_register_operand")
9162 (match_operand:V4SF 2 "s_register_operand")
9163 (match_operand:HI 3 "vpr_register_operand")
9164 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9165 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9167 rtx ind = XEXP (operands[0], 0);
9168 gcc_assert (REG_P (ind));
9169 emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1],
9175 (define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn"
9176 [(set (mem:BLK (scratch))
9178 [(match_operand:SI 0 "register_operand" "r")
9179 (match_operand:V4SI 1 "s_register_operand" "w")
9180 (match_operand:V4SF 2 "s_register_operand" "w")
9181 (match_operand:HI 3 "vpr_register_operand" "Up")]
9183 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9184 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9185 [(set_attr "length" "8")])
9188 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9190 (define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si"
9191 [(match_operand:V4SI 0 "mve_scatter_memory")
9192 (match_operand:V4SI 1 "s_register_operand")
9193 (match_operand:V4SI 2 "s_register_operand")
9194 (match_operand:HI 3 "vpr_register_operand")
9195 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9198 rtx ind = XEXP (operands[0], 0);
9199 gcc_assert (REG_P (ind));
9200 emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1],
9206 (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn"
9207 [(set (mem:BLK (scratch))
9209 [(match_operand:SI 0 "register_operand" "r")
9210 (match_operand:V4SI 1 "s_register_operand" "w")
9211 (match_operand:V4SI 2 "s_register_operand" "w")
9212 (match_operand:HI 3 "vpr_register_operand" "Up")]
9215 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9216 [(set_attr "length" "8")])
9219 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9221 (define_expand "mve_vstrwq_scatter_offset_<supf>v4si"
9222 [(match_operand:V4SI 0 "mve_scatter_memory")
9223 (match_operand:V4SI 1 "s_register_operand")
9224 (match_operand:V4SI 2 "s_register_operand")
9225 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9228 rtx ind = XEXP (operands[0], 0);
9229 gcc_assert (REG_P (ind));
9230 emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1],
9235 (define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn"
9236 [(set (mem:BLK (scratch))
9238 [(match_operand:SI 0 "register_operand" "r")
9239 (match_operand:V4SI 1 "s_register_operand" "w")
9240 (match_operand:V4SI 2 "s_register_operand" "w")]
9243 "vstrw.32\t%q2, [%0, %q1]"
9244 [(set_attr "length" "4")])
9247 ;; [vstrwq_scatter_shifted_offset_f]
9249 (define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf"
9250 [(match_operand:V4SI 0 "mve_scatter_memory")
9251 (match_operand:V4SI 1 "s_register_operand")
9252 (match_operand:V4SF 2 "s_register_operand")
9253 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9254 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9256 rtx ind = XEXP (operands[0], 0);
9257 gcc_assert (REG_P (ind));
9258 emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1],
9263 (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn"
9264 [(set (mem:BLK (scratch))
9266 [(match_operand:SI 0 "register_operand" "r")
9267 (match_operand:V4SI 1 "s_register_operand" "w")
9268 (match_operand:V4SF 2 "s_register_operand" "w")]
9270 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9271 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9272 [(set_attr "length" "8")])
9275 ;; [vstrwq_scatter_shifted_offset_p_f]
9277 (define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
9278 [(match_operand:V4SI 0 "mve_scatter_memory")
9279 (match_operand:V4SI 1 "s_register_operand")
9280 (match_operand:V4SF 2 "s_register_operand")
9281 (match_operand:HI 3 "vpr_register_operand")
9282 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9283 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9285 rtx ind = XEXP (operands[0], 0);
9286 gcc_assert (REG_P (ind));
9288 gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1],
9294 (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn"
9295 [(set (mem:BLK (scratch))
9297 [(match_operand:SI 0 "register_operand" "r")
9298 (match_operand:V4SI 1 "s_register_operand" "w")
9299 (match_operand:V4SF 2 "s_register_operand" "w")
9300 (match_operand:HI 3 "vpr_register_operand" "Up")]
9302 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9303 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9304 [(set_attr "length" "8")])
9307 ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
9309 (define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
9310 [(match_operand:V4SI 0 "mve_scatter_memory")
9311 (match_operand:V4SI 1 "s_register_operand")
9312 (match_operand:V4SI 2 "s_register_operand")
9313 (match_operand:HI 3 "vpr_register_operand")
9314 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9317 rtx ind = XEXP (operands[0], 0);
9318 gcc_assert (REG_P (ind));
9320 gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1],
9326 (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn"
9327 [(set (mem:BLK (scratch))
9329 [(match_operand:SI 0 "register_operand" "r")
9330 (match_operand:V4SI 1 "s_register_operand" "w")
9331 (match_operand:V4SI 2 "s_register_operand" "w")
9332 (match_operand:HI 3 "vpr_register_operand" "Up")]
9335 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9336 [(set_attr "length" "8")])
9339 ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
9341 (define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
9342 [(match_operand:V4SI 0 "mve_scatter_memory")
9343 (match_operand:V4SI 1 "s_register_operand")
9344 (match_operand:V4SI 2 "s_register_operand")
9345 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9348 rtx ind = XEXP (operands[0], 0);
9349 gcc_assert (REG_P (ind));
9351 gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1],
9356 (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn"
9357 [(set (mem:BLK (scratch))
9359 [(match_operand:SI 0 "register_operand" "r")
9360 (match_operand:V4SI 1 "s_register_operand" "w")
9361 (match_operand:V4SI 2 "s_register_operand" "w")]
9364 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9365 [(set_attr "length" "4")])
9368 ;; [vaddq_s, vaddq_u])
9370 (define_insn "mve_vaddq<mode>"
9372 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
9373 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
9374 (match_operand:MVE_2 2 "s_register_operand" "w")))
9377 "vadd.i%#<V_sz_elem> %q0, %q1, %q2"
9378 [(set_attr "type" "mve_move")
9384 (define_insn "mve_vaddq_f<mode>"
9386 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
9387 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
9388 (match_operand:MVE_0 2 "s_register_operand" "w")))
9390 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9391 "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
9392 [(set_attr "type" "mve_move")
9398 (define_expand "mve_vidupq_n_u<mode>"
9399 [(match_operand:MVE_2 0 "s_register_operand")
9400 (match_operand:SI 1 "s_register_operand")
9401 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9404 rtx temp = gen_reg_rtx (SImode);
9405 emit_move_insn (temp, operands[1]);
9406 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9407 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
9415 (define_insn "mve_vidupq_u<mode>_insn"
9416 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9417 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9418 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
9420 (set (match_operand:SI 1 "s_register_operand" "=Te")
9421 (plus:SI (match_dup 2)
9422 (match_operand:SI 4 "immediate_operand" "i")))]
9424 "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
9429 (define_expand "mve_vidupq_m_n_u<mode>"
9430 [(match_operand:MVE_2 0 "s_register_operand")
9431 (match_operand:MVE_2 1 "s_register_operand")
9432 (match_operand:SI 2 "s_register_operand")
9433 (match_operand:SI 3 "mve_imm_selective_upto_8")
9434 (match_operand:HI 4 "vpr_register_operand")]
9437 rtx temp = gen_reg_rtx (SImode);
9438 emit_move_insn (temp, operands[2]);
9439 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9440 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9441 operands[2], operands[3],
9447 ;; [vidupq_m_wb_u_insn])
9449 (define_insn "mve_vidupq_m_wb_u<mode>_insn"
9450 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9451 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9452 (match_operand:SI 3 "s_register_operand" "2")
9453 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9454 (match_operand:HI 5 "vpr_register_operand" "Up")]
9456 (set (match_operand:SI 2 "s_register_operand" "=Te")
9457 (plus:SI (match_dup 3)
9458 (match_operand:SI 6 "immediate_operand" "i")))]
9460 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
9461 [(set_attr "length""8")])
9466 (define_expand "mve_vddupq_n_u<mode>"
9467 [(match_operand:MVE_2 0 "s_register_operand")
9468 (match_operand:SI 1 "s_register_operand")
9469 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9472 rtx temp = gen_reg_rtx (SImode);
9473 emit_move_insn (temp, operands[1]);
9474 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9475 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
9483 (define_insn "mve_vddupq_u<mode>_insn"
9484 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9485 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9486 (match_operand:SI 3 "immediate_operand" "i")]
9488 (set (match_operand:SI 1 "s_register_operand" "=Te")
9489 (minus:SI (match_dup 2)
9490 (match_operand:SI 4 "immediate_operand" "i")))]
9492 "vddup.u%#<V_sz_elem> %q0, %1, %3")
9497 (define_expand "mve_vddupq_m_n_u<mode>"
9498 [(match_operand:MVE_2 0 "s_register_operand")
9499 (match_operand:MVE_2 1 "s_register_operand")
9500 (match_operand:SI 2 "s_register_operand")
9501 (match_operand:SI 3 "mve_imm_selective_upto_8")
9502 (match_operand:HI 4 "vpr_register_operand")]
9505 rtx temp = gen_reg_rtx (SImode);
9506 emit_move_insn (temp, operands[2]);
9507 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9508 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9509 operands[2], operands[3],
9515 ;; [vddupq_m_wb_u_insn])
9517 (define_insn "mve_vddupq_m_wb_u<mode>_insn"
9518 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9519 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9520 (match_operand:SI 3 "s_register_operand" "2")
9521 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9522 (match_operand:HI 5 "vpr_register_operand" "Up")]
9524 (set (match_operand:SI 2 "s_register_operand" "=Te")
9525 (minus:SI (match_dup 3)
9526 (match_operand:SI 6 "immediate_operand" "i")))]
9528 "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
9529 [(set_attr "length""8")])
9534 (define_expand "mve_vdwdupq_n_u<mode>"
9535 [(match_operand:MVE_2 0 "s_register_operand")
9536 (match_operand:SI 1 "s_register_operand")
9537 (match_operand:DI 2 "s_register_operand")
9538 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9541 rtx ignore_wb = gen_reg_rtx (SImode);
9542 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9543 operands[1], operands[2],
9551 (define_expand "mve_vdwdupq_wb_u<mode>"
9552 [(match_operand:SI 0 "s_register_operand")
9553 (match_operand:SI 1 "s_register_operand")
9554 (match_operand:DI 2 "s_register_operand")
9555 (match_operand:SI 3 "mve_imm_selective_upto_8")
9556 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9559 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9560 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9561 operands[1], operands[2],
9567 ;; [vdwdupq_wb_u_insn])
9569 (define_insn "mve_vdwdupq_wb_u<mode>_insn"
9570 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9571 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9572 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9573 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9575 (set (match_operand:SI 1 "s_register_operand" "=Te")
9576 (unspec:SI [(match_dup 2)
9577 (subreg:SI (match_dup 3) 4)
9581 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9587 (define_expand "mve_vdwdupq_m_n_u<mode>"
9588 [(match_operand:MVE_2 0 "s_register_operand")
9589 (match_operand:MVE_2 1 "s_register_operand")
9590 (match_operand:SI 2 "s_register_operand")
9591 (match_operand:DI 3 "s_register_operand")
9592 (match_operand:SI 4 "mve_imm_selective_upto_8")
9593 (match_operand:HI 5 "vpr_register_operand")]
9596 rtx ignore_wb = gen_reg_rtx (SImode);
9597 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9598 operands[1], operands[2],
9599 operands[3], operands[4],
9605 ;; [vdwdupq_m_wb_u])
9607 (define_expand "mve_vdwdupq_m_wb_u<mode>"
9608 [(match_operand:SI 0 "s_register_operand")
9609 (match_operand:MVE_2 1 "s_register_operand")
9610 (match_operand:SI 2 "s_register_operand")
9611 (match_operand:DI 3 "s_register_operand")
9612 (match_operand:SI 4 "mve_imm_selective_upto_8")
9613 (match_operand:HI 5 "vpr_register_operand")]
9616 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9617 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9618 operands[1], operands[2],
9619 operands[3], operands[4],
9625 ;; [vdwdupq_m_wb_u_insn])
9627 (define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
9628 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9629 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9630 (match_operand:SI 3 "s_register_operand" "1")
9631 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9632 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9633 (match_operand:HI 6 "vpr_register_operand" "Up")]
9635 (set (match_operand:SI 1 "s_register_operand" "=Te")
9636 (unspec:SI [(match_dup 2)
9638 (subreg:SI (match_dup 4) 4)
9644 "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9645 [(set_attr "type" "mve_move")
9646 (set_attr "length""8")])
9651 (define_expand "mve_viwdupq_n_u<mode>"
9652 [(match_operand:MVE_2 0 "s_register_operand")
9653 (match_operand:SI 1 "s_register_operand")
9654 (match_operand:DI 2 "s_register_operand")
9655 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9658 rtx ignore_wb = gen_reg_rtx (SImode);
9659 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9660 operands[1], operands[2],
9668 (define_expand "mve_viwdupq_wb_u<mode>"
9669 [(match_operand:SI 0 "s_register_operand")
9670 (match_operand:SI 1 "s_register_operand")
9671 (match_operand:DI 2 "s_register_operand")
9672 (match_operand:SI 3 "mve_imm_selective_upto_8")
9673 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9676 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9677 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9678 operands[1], operands[2],
9684 ;; [viwdupq_wb_u_insn])
9686 (define_insn "mve_viwdupq_wb_u<mode>_insn"
9687 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9688 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9689 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9690 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9692 (set (match_operand:SI 1 "s_register_operand" "=Te")
9693 (unspec:SI [(match_dup 2)
9694 (subreg:SI (match_dup 3) 4)
9698 "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9704 (define_expand "mve_viwdupq_m_n_u<mode>"
9705 [(match_operand:MVE_2 0 "s_register_operand")
9706 (match_operand:MVE_2 1 "s_register_operand")
9707 (match_operand:SI 2 "s_register_operand")
9708 (match_operand:DI 3 "s_register_operand")
9709 (match_operand:SI 4 "mve_imm_selective_upto_8")
9710 (match_operand:HI 5 "vpr_register_operand")]
9713 rtx ignore_wb = gen_reg_rtx (SImode);
9714 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9715 operands[1], operands[2],
9716 operands[3], operands[4],
9722 ;; [viwdupq_m_wb_u])
9724 (define_expand "mve_viwdupq_m_wb_u<mode>"
9725 [(match_operand:SI 0 "s_register_operand")
9726 (match_operand:MVE_2 1 "s_register_operand")
9727 (match_operand:SI 2 "s_register_operand")
9728 (match_operand:DI 3 "s_register_operand")
9729 (match_operand:SI 4 "mve_imm_selective_upto_8")
9730 (match_operand:HI 5 "vpr_register_operand")]
9733 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9734 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9735 operands[1], operands[2],
9736 operands[3], operands[4],
9742 ;; [viwdupq_m_wb_u_insn])
9744 (define_insn "mve_viwdupq_m_wb_u<mode>_insn"
9745 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9746 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9747 (match_operand:SI 3 "s_register_operand" "1")
9748 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9749 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9750 (match_operand:HI 6 "vpr_register_operand" "Up")]
9752 (set (match_operand:SI 1 "s_register_operand" "=Te")
9753 (unspec:SI [(match_dup 2)
9755 (subreg:SI (match_dup 4) 4)
9761 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9762 [(set_attr "type" "mve_move")
9763 (set_attr "length""8")])
9766 ;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u]
9768 (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si"
9769 [(set (mem:BLK (scratch))
9771 [(match_operand:V4SI 1 "s_register_operand" "0")
9772 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9773 (match_operand:V4SI 3 "s_register_operand" "w")]
9775 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9776 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9782 ops[0] = operands[1];
9783 ops[1] = operands[2];
9784 ops[2] = operands[3];
9785 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9788 [(set_attr "length" "4")])
9791 ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
9793 (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
9794 [(set (mem:BLK (scratch))
9796 [(match_operand:V4SI 1 "s_register_operand" "0")
9797 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9798 (match_operand:V4SI 3 "s_register_operand" "w")
9799 (match_operand:HI 4 "vpr_register_operand")]
9801 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9802 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9808 ops[0] = operands[1];
9809 ops[1] = operands[2];
9810 ops[2] = operands[3];
9811 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9814 [(set_attr "length" "8")])
9817 ;; [vstrwq_scatter_base_wb_f]
9819 (define_insn "mve_vstrwq_scatter_base_wb_fv4sf"
9820 [(set (mem:BLK (scratch))
9822 [(match_operand:V4SI 1 "s_register_operand" "0")
9823 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9824 (match_operand:V4SF 3 "s_register_operand" "w")]
9826 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9827 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9830 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9833 ops[0] = operands[1];
9834 ops[1] = operands[2];
9835 ops[2] = operands[3];
9836 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9839 [(set_attr "length" "4")])
9842 ;; [vstrwq_scatter_base_wb_p_f]
9844 (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf"
9845 [(set (mem:BLK (scratch))
9847 [(match_operand:V4SI 1 "s_register_operand" "0")
9848 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9849 (match_operand:V4SF 3 "s_register_operand" "w")
9850 (match_operand:HI 4 "vpr_register_operand")]
9852 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9853 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9856 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9859 ops[0] = operands[1];
9860 ops[1] = operands[2];
9861 ops[2] = operands[3];
9862 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9865 [(set_attr "length" "8")])
9868 ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
9870 (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di"
9871 [(set (mem:BLK (scratch))
9873 [(match_operand:V2DI 1 "s_register_operand" "0")
9874 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9875 (match_operand:V2DI 3 "s_register_operand" "w")]
9877 (set (match_operand:V2DI 0 "s_register_operand" "=&w")
9878 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9884 ops[0] = operands[1];
9885 ops[1] = operands[2];
9886 ops[2] = operands[3];
9887 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
9890 [(set_attr "length" "4")])
9893 ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
9895 (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
9896 [(set (mem:BLK (scratch))
9898 [(match_operand:V2DI 1 "s_register_operand" "0")
9899 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9900 (match_operand:V2DI 3 "s_register_operand" "w")
9901 (match_operand:HI 4 "vpr_register_operand")]
9903 (set (match_operand:V2DI 0 "s_register_operand" "=w")
9904 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9910 ops[0] = operands[1];
9911 ops[1] = operands[2];
9912 ops[2] = operands[3];
9913 output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops);
9916 [(set_attr "length" "8")])
9918 (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
9919 [(match_operand:V4SI 0 "s_register_operand")
9920 (match_operand:V4SI 1 "s_register_operand")
9921 (match_operand:SI 2 "mve_vldrd_immediate")
9922 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9925 rtx ignore_result = gen_reg_rtx (V4SImode);
9927 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0],
9928 operands[1], operands[2]));
9932 (define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si"
9933 [(match_operand:V4SI 0 "s_register_operand")
9934 (match_operand:V4SI 1 "s_register_operand")
9935 (match_operand:SI 2 "mve_vldrd_immediate")
9936 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9939 rtx ignore_wb = gen_reg_rtx (V4SImode);
9941 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
9942 operands[1], operands[2]));
9947 ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
9949 (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
9950 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9951 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9952 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9953 (mem:BLK (scratch))]
9955 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9956 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9962 ops[0] = operands[0];
9963 ops[1] = operands[2];
9964 ops[2] = operands[3];
9965 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9968 [(set_attr "length" "4")])
9970 (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
9971 [(match_operand:V4SI 0 "s_register_operand")
9972 (match_operand:V4SI 1 "s_register_operand")
9973 (match_operand:SI 2 "mve_vldrd_immediate")
9974 (match_operand:HI 3 "vpr_register_operand")
9975 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9978 rtx ignore_result = gen_reg_rtx (V4SImode);
9980 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0],
9981 operands[1], operands[2],
9985 (define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si"
9986 [(match_operand:V4SI 0 "s_register_operand")
9987 (match_operand:V4SI 1 "s_register_operand")
9988 (match_operand:SI 2 "mve_vldrd_immediate")
9989 (match_operand:HI 3 "vpr_register_operand")
9990 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9993 rtx ignore_wb = gen_reg_rtx (V4SImode);
9995 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
9996 operands[1], operands[2],
10002 ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
10004 (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
10005 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
10006 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
10007 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10008 (match_operand:HI 4 "vpr_register_operand" "Up")
10009 (mem:BLK (scratch))]
10011 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10012 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10018 ops[0] = operands[0];
10019 ops[1] = operands[2];
10020 ops[2] = operands[3];
10021 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
10024 [(set_attr "length" "8")])
10026 (define_expand "mve_vldrwq_gather_base_wb_fv4sf"
10027 [(match_operand:V4SI 0 "s_register_operand")
10028 (match_operand:V4SI 1 "s_register_operand")
10029 (match_operand:SI 2 "mve_vldrd_immediate")
10030 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10031 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10033 rtx ignore_result = gen_reg_rtx (V4SFmode);
10035 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0],
10036 operands[1], operands[2]));
10040 (define_expand "mve_vldrwq_gather_base_nowb_fv4sf"
10041 [(match_operand:V4SF 0 "s_register_operand")
10042 (match_operand:V4SI 1 "s_register_operand")
10043 (match_operand:SI 2 "mve_vldrd_immediate")
10044 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10045 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10047 rtx ignore_wb = gen_reg_rtx (V4SImode);
10049 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
10050 operands[1], operands[2]));
10055 ;; [vldrwq_gather_base_wb_f]
10057 (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
10058 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10059 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10060 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10061 (mem:BLK (scratch))]
10063 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10064 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10067 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10070 ops[0] = operands[0];
10071 ops[1] = operands[2];
10072 ops[2] = operands[3];
10073 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
10076 [(set_attr "length" "4")])
10078 (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
10079 [(match_operand:V4SI 0 "s_register_operand")
10080 (match_operand:V4SI 1 "s_register_operand")
10081 (match_operand:SI 2 "mve_vldrd_immediate")
10082 (match_operand:HI 3 "vpr_register_operand")
10083 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10084 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10086 rtx ignore_result = gen_reg_rtx (V4SFmode);
10088 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0],
10089 operands[1], operands[2],
10094 (define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf"
10095 [(match_operand:V4SF 0 "s_register_operand")
10096 (match_operand:V4SI 1 "s_register_operand")
10097 (match_operand:SI 2 "mve_vldrd_immediate")
10098 (match_operand:HI 3 "vpr_register_operand")
10099 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10100 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10102 rtx ignore_wb = gen_reg_rtx (V4SImode);
10104 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
10105 operands[1], operands[2],
10111 ;; [vldrwq_gather_base_wb_z_f]
10113 (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
10114 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10115 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10116 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10117 (match_operand:HI 4 "vpr_register_operand" "Up")
10118 (mem:BLK (scratch))]
10120 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10121 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10124 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10127 ops[0] = operands[0];
10128 ops[1] = operands[2];
10129 ops[2] = operands[3];
10130 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
10133 [(set_attr "length" "8")])
10135 (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
10136 [(match_operand:V2DI 0 "s_register_operand")
10137 (match_operand:V2DI 1 "s_register_operand")
10138 (match_operand:SI 2 "mve_vldrd_immediate")
10139 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10142 rtx ignore_result = gen_reg_rtx (V2DImode);
10144 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0],
10145 operands[1], operands[2]));
10149 (define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di"
10150 [(match_operand:V2DI 0 "s_register_operand")
10151 (match_operand:V2DI 1 "s_register_operand")
10152 (match_operand:SI 2 "mve_vldrd_immediate")
10153 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10156 rtx ignore_wb = gen_reg_rtx (V2DImode);
10158 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
10159 operands[1], operands[2]));
10165 ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
10167 (define_insn "mve_vldrdq_gather_base_wb_<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 (mem:BLK (scratch))]
10173 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10174 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10180 ops[0] = operands[0];
10181 ops[1] = operands[2];
10182 ops[2] = operands[3];
10183 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
10186 [(set_attr "length" "4")])
10188 (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
10189 [(match_operand:V2DI 0 "s_register_operand")
10190 (match_operand:V2DI 1 "s_register_operand")
10191 (match_operand:SI 2 "mve_vldrd_immediate")
10192 (match_operand:HI 3 "vpr_register_operand")
10193 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10196 rtx ignore_result = gen_reg_rtx (V2DImode);
10198 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0],
10199 operands[1], operands[2],
10204 (define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di"
10205 [(match_operand:V2DI 0 "s_register_operand")
10206 (match_operand:V2DI 1 "s_register_operand")
10207 (match_operand:SI 2 "mve_vldrd_immediate")
10208 (match_operand:HI 3 "vpr_register_operand")
10209 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10212 rtx ignore_wb = gen_reg_rtx (V2DImode);
10214 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
10215 operands[1], operands[2],
10220 (define_insn "get_fpscr_nzcvqc"
10221 [(set (match_operand:SI 0 "register_operand" "=r")
10222 (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
10224 "vmrs\\t%0, FPSCR_nzcvqc"
10225 [(set_attr "type" "mve_move")])
10227 (define_insn "set_fpscr_nzcvqc"
10228 [(set (reg:SI VFPCC_REGNUM)
10229 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
10230 VUNSPEC_SET_FPSCR_NZCVQC))]
10232 "vmsr\\tFPSCR_nzcvqc, %0"
10233 [(set_attr "type" "mve_move")])
10236 ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
10238 (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
10239 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10240 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10241 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10242 (match_operand:HI 4 "vpr_register_operand" "Up")
10243 (mem:BLK (scratch))]
10245 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10246 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10252 ops[0] = operands[0];
10253 ops[1] = operands[2];
10254 ops[2] = operands[3];
10255 output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops);
10258 [(set_attr "length" "8")])
10260 ;; [vadciq_m_s, vadciq_m_u])
10262 (define_insn "mve_vadciq_m_<supf>v4si"
10263 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10264 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10265 (match_operand:V4SI 2 "s_register_operand" "w")
10266 (match_operand:V4SI 3 "s_register_operand" "w")
10267 (match_operand:HI 4 "vpr_register_operand" "Up")]
10269 (set (reg:SI VFPCC_REGNUM)
10270 (unspec:SI [(const_int 0)]
10274 "vpst\;vadcit.i32\t%q0, %q2, %q3"
10275 [(set_attr "type" "mve_move")
10276 (set_attr "length" "8")])
10279 ;; [vadciq_u, vadciq_s])
10281 (define_insn "mve_vadciq_<supf>v4si"
10282 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10283 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10284 (match_operand:V4SI 2 "s_register_operand" "w")]
10286 (set (reg:SI VFPCC_REGNUM)
10287 (unspec:SI [(const_int 0)]
10291 "vadci.i32\t%q0, %q1, %q2"
10292 [(set_attr "type" "mve_move")
10293 (set_attr "length" "4")])
10296 ;; [vadcq_m_s, vadcq_m_u])
10298 (define_insn "mve_vadcq_m_<supf>v4si"
10299 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10300 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10301 (match_operand:V4SI 2 "s_register_operand" "w")
10302 (match_operand:V4SI 3 "s_register_operand" "w")
10303 (match_operand:HI 4 "vpr_register_operand" "Up")]
10305 (set (reg:SI VFPCC_REGNUM)
10306 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10310 "vpst\;vadct.i32\t%q0, %q2, %q3"
10311 [(set_attr "type" "mve_move")
10312 (set_attr "length" "8")])
10315 ;; [vadcq_u, vadcq_s])
10317 (define_insn "mve_vadcq_<supf>v4si"
10318 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10319 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10320 (match_operand:V4SI 2 "s_register_operand" "w")]
10322 (set (reg:SI VFPCC_REGNUM)
10323 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10327 "vadc.i32\t%q0, %q1, %q2"
10328 [(set_attr "type" "mve_move")
10329 (set_attr "length" "4")
10330 (set_attr "conds" "set")])
10333 ;; [vsbciq_m_u, vsbciq_m_s])
10335 (define_insn "mve_vsbciq_m_<supf>v4si"
10336 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10337 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10338 (match_operand:V4SI 2 "s_register_operand" "w")
10339 (match_operand:V4SI 3 "s_register_operand" "w")
10340 (match_operand:HI 4 "vpr_register_operand" "Up")]
10342 (set (reg:SI VFPCC_REGNUM)
10343 (unspec:SI [(const_int 0)]
10347 "vpst\;vsbcit.i32\t%q0, %q2, %q3"
10348 [(set_attr "type" "mve_move")
10349 (set_attr "length" "8")])
10352 ;; [vsbciq_s, vsbciq_u])
10354 (define_insn "mve_vsbciq_<supf>v4si"
10355 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10356 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10357 (match_operand:V4SI 2 "s_register_operand" "w")]
10359 (set (reg:SI VFPCC_REGNUM)
10360 (unspec:SI [(const_int 0)]
10364 "vsbci.i32\t%q0, %q1, %q2"
10365 [(set_attr "type" "mve_move")
10366 (set_attr "length" "4")])
10369 ;; [vsbcq_m_u, vsbcq_m_s])
10371 (define_insn "mve_vsbcq_m_<supf>v4si"
10372 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10373 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10374 (match_operand:V4SI 2 "s_register_operand" "w")
10375 (match_operand:V4SI 3 "s_register_operand" "w")
10376 (match_operand:HI 4 "vpr_register_operand" "Up")]
10378 (set (reg:SI VFPCC_REGNUM)
10379 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10383 "vpst\;vsbct.i32\t%q0, %q2, %q3"
10384 [(set_attr "type" "mve_move")
10385 (set_attr "length" "8")])
10388 ;; [vsbcq_s, vsbcq_u])
10390 (define_insn "mve_vsbcq_<supf>v4si"
10391 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10392 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10393 (match_operand:V4SI 2 "s_register_operand" "w")]
10395 (set (reg:SI VFPCC_REGNUM)
10396 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10400 "vsbc.i32\t%q0, %q1, %q2"
10401 [(set_attr "type" "mve_move")
10402 (set_attr "length" "4")])
10407 (define_insn "mve_vst2q<mode>"
10408 [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
10409 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
10410 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10413 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10414 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10417 int regno = REGNO (operands[1]);
10418 ops[0] = gen_rtx_REG (TImode, regno);
10419 ops[1] = gen_rtx_REG (TImode, regno + 4);
10420 rtx reg = operands[0];
10421 while (reg && !REG_P (reg))
10422 reg = XEXP (reg, 0);
10423 gcc_assert (REG_P (reg));
10425 ops[3] = operands[0];
10426 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10427 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10430 [(set_attr "length" "8")])
10435 (define_insn "mve_vld2q<mode>"
10436 [(set (match_operand:OI 0 "s_register_operand" "=w")
10437 (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
10438 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10441 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10442 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10445 int regno = REGNO (operands[0]);
10446 ops[0] = gen_rtx_REG (TImode, regno);
10447 ops[1] = gen_rtx_REG (TImode, regno + 4);
10448 rtx reg = operands[1];
10449 while (reg && !REG_P (reg))
10450 reg = XEXP (reg, 0);
10451 gcc_assert (REG_P (reg));
10453 ops[3] = operands[1];
10454 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10455 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10458 [(set_attr "length" "8")])
10463 (define_insn "mve_vld4q<mode>"
10464 [(set (match_operand:XI 0 "s_register_operand" "=w")
10465 (unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
10466 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10469 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10470 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10473 int regno = REGNO (operands[0]);
10474 ops[0] = gen_rtx_REG (TImode, regno);
10475 ops[1] = gen_rtx_REG (TImode, regno+4);
10476 ops[2] = gen_rtx_REG (TImode, regno+8);
10477 ops[3] = gen_rtx_REG (TImode, regno + 12);
10478 rtx reg = operands[1];
10479 while (reg && !REG_P (reg))
10480 reg = XEXP (reg, 0);
10481 gcc_assert (REG_P (reg));
10483 ops[5] = operands[1];
10484 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10485 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10486 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10487 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
10490 [(set_attr "length" "16")])
10492 ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
10494 (define_insn "mve_vec_extract<mode><V_elem_l>"
10495 [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r")
10496 (vec_select:<V_elem>
10497 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
10498 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10499 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10500 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10502 if (BYTES_BIG_ENDIAN)
10504 int elt = INTVAL (operands[2]);
10505 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10506 operands[2] = GEN_INT (elt);
10508 return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
10510 [(set_attr "type" "mve_move")])
10512 (define_insn "mve_vec_extractv2didi"
10513 [(set (match_operand:DI 0 "nonimmediate_operand" "=r")
10515 (match_operand:V2DI 1 "s_register_operand" "w")
10516 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10519 int elt = INTVAL (operands[2]);
10520 if (BYTES_BIG_ENDIAN)
10524 return "vmov\t%Q0, %R0, %e1";
10526 return "vmov\t%Q0, %R0, %f1";
10528 [(set_attr "type" "mve_move")])
10530 (define_insn "*mve_vec_extract_sext_internal<mode>"
10531 [(set (match_operand:SI 0 "s_register_operand" "=r")
10533 (vec_select:<V_elem>
10534 (match_operand:MVE_2 1 "s_register_operand" "w")
10535 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10536 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10537 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10539 if (BYTES_BIG_ENDIAN)
10541 int elt = INTVAL (operands[2]);
10542 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10543 operands[2] = GEN_INT (elt);
10545 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
10547 [(set_attr "type" "mve_move")])
10549 (define_insn "*mve_vec_extract_zext_internal<mode>"
10550 [(set (match_operand:SI 0 "s_register_operand" "=r")
10552 (vec_select:<V_elem>
10553 (match_operand:MVE_2 1 "s_register_operand" "w")
10554 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10555 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10556 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10558 if (BYTES_BIG_ENDIAN)
10560 int elt = INTVAL (operands[2]);
10561 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10562 operands[2] = GEN_INT (elt);
10564 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
10566 [(set_attr "type" "mve_move")])
10569 ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
10571 (define_insn "mve_vec_set<mode>_internal"
10572 [(set (match_operand:VQ2 0 "s_register_operand" "=w")
10575 (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
10576 (match_operand:VQ2 3 "s_register_operand" "0")
10577 (match_operand:SI 2 "immediate_operand" "i")))]
10578 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10579 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10581 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10582 if (BYTES_BIG_ENDIAN)
10583 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10584 operands[2] = GEN_INT (elt);
10586 return "vmov.<V_sz_elem>\t%q0[%c2], %1";
10588 [(set_attr "type" "mve_move")])
10590 (define_insn "mve_vec_setv2di_internal"
10591 [(set (match_operand:V2DI 0 "s_register_operand" "=w")
10593 (vec_duplicate:V2DI
10594 (match_operand:DI 1 "nonimmediate_operand" "r"))
10595 (match_operand:V2DI 3 "s_register_operand" "0")
10596 (match_operand:SI 2 "immediate_operand" "i")))]
10599 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10600 if (BYTES_BIG_ENDIAN)
10604 return "vmov\t%e0, %Q1, %R1";
10606 return "vmov\t%f0, %J1, %K1";
10608 [(set_attr "type" "mve_move")])
10613 (define_insn "mve_uqrshll_sat<supf>_di"
10614 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10615 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10616 (match_operand:SI 2 "register_operand" "r")]
10619 "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
10620 [(set_attr "predicable" "yes")])
10625 (define_insn "mve_sqrshrl_sat<supf>_di"
10626 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10627 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10628 (match_operand:SI 2 "register_operand" "r")]
10631 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
10632 [(set_attr "predicable" "yes")])
10637 (define_insn "mve_uqrshl_si"
10638 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10639 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10640 (match_operand:SI 2 "register_operand" "r")]
10643 "uqrshl%?\\t%1, %2"
10644 [(set_attr "predicable" "yes")])
10649 (define_insn "mve_sqrshr_si"
10650 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10651 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10652 (match_operand:SI 2 "register_operand" "r")]
10655 "sqrshr%?\\t%1, %2"
10656 [(set_attr "predicable" "yes")])
10661 (define_insn "mve_uqshll_di"
10662 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10663 (us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10664 (match_operand:SI 2 "immediate_operand" "Pg")))]
10666 "uqshll%?\\t%Q1, %R1, %2"
10667 [(set_attr "predicable" "yes")])
10672 (define_insn "mve_urshrl_di"
10673 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10674 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10675 (match_operand:SI 2 "immediate_operand" "Pg")]
10678 "urshrl%?\\t%Q1, %R1, %2"
10679 [(set_attr "predicable" "yes")])
10684 (define_insn "mve_uqshl_si"
10685 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10686 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0")
10687 (match_operand:SI 2 "immediate_operand" "Pg")))]
10690 [(set_attr "predicable" "yes")])
10695 (define_insn "mve_urshr_si"
10696 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10697 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10698 (match_operand:SI 2 "immediate_operand" "Pg")]
10702 [(set_attr "predicable" "yes")])
10707 (define_insn "mve_sqshl_si"
10708 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10709 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0")
10710 (match_operand:SI 2 "immediate_operand" "Pg")))]
10713 [(set_attr "predicable" "yes")])
10718 (define_insn "mve_srshr_si"
10719 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10720 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0")
10721 (match_operand:SI 2 "immediate_operand" "Pg")]
10725 [(set_attr "predicable" "yes")])
10730 (define_insn "mve_srshrl_di"
10731 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10732 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10733 (match_operand:SI 2 "immediate_operand" "Pg")]
10736 "srshrl%?\\t%Q1, %R1, %2"
10737 [(set_attr "predicable" "yes")])
10742 (define_insn "mve_sqshll_di"
10743 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10744 (ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10745 (match_operand:SI 2 "immediate_operand" "Pg")))]
10747 "sqshll%?\\t%Q1, %R1, %2"
10748 [(set_attr "predicable" "yes")])
10751 ;; [vshlcq_m_u vshlcq_m_s]
10753 (define_expand "mve_vshlcq_m_vec_<supf><mode>"
10754 [(match_operand:MVE_2 0 "s_register_operand")
10755 (match_operand:MVE_2 1 "s_register_operand")
10756 (match_operand:SI 2 "s_register_operand")
10757 (match_operand:SI 3 "mve_imm_32")
10758 (match_operand:HI 4 "vpr_register_operand")
10759 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10762 rtx ignore_wb = gen_reg_rtx (SImode);
10763 emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1],
10764 operands[2], operands[3],
10769 (define_expand "mve_vshlcq_m_carry_<supf><mode>"
10770 [(match_operand:SI 0 "s_register_operand")
10771 (match_operand:MVE_2 1 "s_register_operand")
10772 (match_operand:SI 2 "s_register_operand")
10773 (match_operand:SI 3 "mve_imm_32")
10774 (match_operand:HI 4 "vpr_register_operand")
10775 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10778 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10779 emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0],
10780 operands[1], operands[2],
10781 operands[3], operands[4]));
10785 (define_insn "mve_vshlcq_m_<supf><mode>"
10786 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10787 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10788 (match_operand:SI 3 "s_register_operand" "1")
10789 (match_operand:SI 4 "mve_imm_32" "Rf")
10790 (match_operand:HI 5 "vpr_register_operand" "Up")]
10792 (set (match_operand:SI 1 "s_register_operand" "=r")
10793 (unspec:SI [(match_dup 2)
10800 "vpst\;vshlct\t%q0, %1, %4"
10801 [(set_attr "type" "mve_move")
10802 (set_attr "length" "8")])
10804 (define_insn "*mve_vec_duplicate<mode>"
10805 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
10806 (vec_duplicate:MVE_VLD_ST (match_operand:<V_elem> 1 "general_operand" "r")))]
10807 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
10808 "vdup.<V_sz_elem>\t%q0, %1"
10809 [(set_attr "type" "mve_move")])
10811 ;; CDE instructions on MVE registers.
10813 (define_insn "arm_vcx1qv16qi"
10814 [(set (match_operand:V16QI 0 "register_operand" "=t")
10815 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10816 (match_operand:SI 2 "const_int_mve_cde1_operand" "i")]
10818 "TARGET_CDE && TARGET_HAVE_MVE"
10819 "vcx1\\tp%c1, %q0, #%c2"
10820 [(set_attr "type" "coproc")]
10823 (define_insn "arm_vcx1qav16qi"
10824 [(set (match_operand:V16QI 0 "register_operand" "=t")
10825 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10826 (match_operand:V16QI 2 "register_operand" "0")
10827 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")]
10829 "TARGET_CDE && TARGET_HAVE_MVE"
10830 "vcx1a\\tp%c1, %q0, #%c3"
10831 [(set_attr "type" "coproc")]
10834 (define_insn "arm_vcx2qv16qi"
10835 [(set (match_operand:V16QI 0 "register_operand" "=t")
10836 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10837 (match_operand:V16QI 2 "register_operand" "t")
10838 (match_operand:SI 3 "const_int_mve_cde2_operand" "i")]
10840 "TARGET_CDE && TARGET_HAVE_MVE"
10841 "vcx2\\tp%c1, %q0, %q2, #%c3"
10842 [(set_attr "type" "coproc")]
10845 (define_insn "arm_vcx2qav16qi"
10846 [(set (match_operand:V16QI 0 "register_operand" "=t")
10847 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10848 (match_operand:V16QI 2 "register_operand" "0")
10849 (match_operand:V16QI 3 "register_operand" "t")
10850 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")]
10852 "TARGET_CDE && TARGET_HAVE_MVE"
10853 "vcx2a\\tp%c1, %q0, %q3, #%c4"
10854 [(set_attr "type" "coproc")]
10857 (define_insn "arm_vcx3qv16qi"
10858 [(set (match_operand:V16QI 0 "register_operand" "=t")
10859 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10860 (match_operand:V16QI 2 "register_operand" "t")
10861 (match_operand:V16QI 3 "register_operand" "t")
10862 (match_operand:SI 4 "const_int_mve_cde3_operand" "i")]
10864 "TARGET_CDE && TARGET_HAVE_MVE"
10865 "vcx3\\tp%c1, %q0, %q2, %q3, #%c4"
10866 [(set_attr "type" "coproc")]
10869 (define_insn "arm_vcx3qav16qi"
10870 [(set (match_operand:V16QI 0 "register_operand" "=t")
10871 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10872 (match_operand:V16QI 2 "register_operand" "0")
10873 (match_operand:V16QI 3 "register_operand" "t")
10874 (match_operand:V16QI 4 "register_operand" "t")
10875 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")]
10877 "TARGET_CDE && TARGET_HAVE_MVE"
10878 "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5"
10879 [(set_attr "type" "coproc")]
10882 (define_insn "arm_vcx1q<a>_p_v16qi"
10883 [(set (match_operand:V16QI 0 "register_operand" "=t")
10884 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10885 (match_operand:V16QI 2 "register_operand" "0")
10886 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")
10887 (match_operand:HI 4 "vpr_register_operand" "Up")]
10889 "TARGET_CDE && TARGET_HAVE_MVE"
10890 "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3"
10891 [(set_attr "type" "coproc")
10892 (set_attr "length" "8")]
10895 (define_insn "arm_vcx2q<a>_p_v16qi"
10896 [(set (match_operand:V16QI 0 "register_operand" "=t")
10897 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10898 (match_operand:V16QI 2 "register_operand" "0")
10899 (match_operand:V16QI 3 "register_operand" "t")
10900 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")
10901 (match_operand:HI 5 "vpr_register_operand" "Up")]
10903 "TARGET_CDE && TARGET_HAVE_MVE"
10904 "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4"
10905 [(set_attr "type" "coproc")
10906 (set_attr "length" "8")]
10909 (define_insn "arm_vcx3q<a>_p_v16qi"
10910 [(set (match_operand:V16QI 0 "register_operand" "=t")
10911 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10912 (match_operand:V16QI 2 "register_operand" "0")
10913 (match_operand:V16QI 3 "register_operand" "t")
10914 (match_operand:V16QI 4 "register_operand" "t")
10915 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")
10916 (match_operand:HI 6 "vpr_register_operand" "Up")]
10918 "TARGET_CDE && TARGET_HAVE_MVE"
10919 "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5"
10920 [(set_attr "type" "coproc")
10921 (set_attr "length" "8")]