1*0bfacb9bSmrg;; Arm M-profile Vector Extension Machine Description
2*0bfacb9bSmrg;; Copyright (C) 2019-2020 Free Software Foundation, Inc.
3*0bfacb9bSmrg;;
4*0bfacb9bSmrg;; This file is part of GCC.
5*0bfacb9bSmrg;;
6*0bfacb9bSmrg;; GCC is free software; you can redistribute it and/or modify it
7*0bfacb9bSmrg;; under the terms of the GNU General Public License as published by
8*0bfacb9bSmrg;; the Free Software Foundation; either version 3, or (at your option)
9*0bfacb9bSmrg;; any later version.
10*0bfacb9bSmrg;;
11*0bfacb9bSmrg;; GCC is distributed in the hope that it will be useful, but
12*0bfacb9bSmrg;; WITHOUT ANY WARRANTY; without even the implied warranty of
13*0bfacb9bSmrg;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14*0bfacb9bSmrg;; General Public License for more details.
15*0bfacb9bSmrg;;
16*0bfacb9bSmrg;; You should have received a copy of the GNU General Public License
17*0bfacb9bSmrg;; along with GCC; see the file COPYING3.  If not see
18*0bfacb9bSmrg;; <http://www.gnu.org/licenses/>.
19*0bfacb9bSmrg
20*0bfacb9bSmrg(define_insn "*mve_mov<mode>"
21*0bfacb9bSmrg  [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w,w,r,w,Ux,w")
22*0bfacb9bSmrg	(match_operand:MVE_types 1 "general_operand" "w,r,w,Dn,UxUi,r,Dm,w,Ul"))]
23*0bfacb9bSmrg  "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
24*0bfacb9bSmrg{
25*0bfacb9bSmrg  if (which_alternative == 3 || which_alternative == 6)
26*0bfacb9bSmrg    {
27*0bfacb9bSmrg      int width, is_valid;
28*0bfacb9bSmrg      static char templ[40];
29*0bfacb9bSmrg
30*0bfacb9bSmrg      is_valid = simd_immediate_valid_for_move (operands[1], <MODE>mode,
31*0bfacb9bSmrg	&operands[1], &width);
32*0bfacb9bSmrg
33*0bfacb9bSmrg      gcc_assert (is_valid != 0);
34*0bfacb9bSmrg
35*0bfacb9bSmrg      if (width == 0)
36*0bfacb9bSmrg	return "vmov.f32\t%q0, %1  @ <mode>";
37*0bfacb9bSmrg      else
38*0bfacb9bSmrg	sprintf (templ, "vmov.i%d\t%%q0, %%x1  @ <mode>", width);
39*0bfacb9bSmrg      return templ;
40*0bfacb9bSmrg    }
41*0bfacb9bSmrg
42*0bfacb9bSmrg  if (which_alternative == 4 || which_alternative == 7)
43*0bfacb9bSmrg    {
44*0bfacb9bSmrg      if (<MODE>mode == V2DFmode || <MODE>mode == V2DImode || <MODE>mode == TImode)
45*0bfacb9bSmrg	{
46*0bfacb9bSmrg	  if (which_alternative == 7)
47*0bfacb9bSmrg	    output_asm_insn ("vstrw.32\t%q1, %E0", operands);
48*0bfacb9bSmrg	  else
49*0bfacb9bSmrg	    output_asm_insn ("vldrw.u32\t%q0, %E1",operands);
50*0bfacb9bSmrg	}
51*0bfacb9bSmrg      else
52*0bfacb9bSmrg	{
53*0bfacb9bSmrg	  if (which_alternative == 7)
54*0bfacb9bSmrg	    output_asm_insn ("vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0", operands);
55*0bfacb9bSmrg	  else
56*0bfacb9bSmrg	    output_asm_insn ("vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1", operands);
57*0bfacb9bSmrg	}
58*0bfacb9bSmrg      return "";
59*0bfacb9bSmrg    }
60*0bfacb9bSmrg  switch (which_alternative)
61*0bfacb9bSmrg    {
62*0bfacb9bSmrg    case 0:
63*0bfacb9bSmrg      return "vmov\t%q0, %q1";
64*0bfacb9bSmrg    case 1:
65*0bfacb9bSmrg      return "vmov\t%e0, %Q1, %R1  @ <mode>\;vmov\t%f0, %J1, %K1";
66*0bfacb9bSmrg    case 2:
67*0bfacb9bSmrg      return "vmov\t%Q0, %R0, %e1  @ <mode>\;vmov\t%J0, %K0, %f1";
68*0bfacb9bSmrg    case 5:
69*0bfacb9bSmrg      return output_move_quad (operands);
70*0bfacb9bSmrg    case 8:
71*0bfacb9bSmrg	return output_move_neon (operands);
72*0bfacb9bSmrg    default:
73*0bfacb9bSmrg      gcc_unreachable ();
74*0bfacb9bSmrg      return "";
75*0bfacb9bSmrg    }
76*0bfacb9bSmrg}
77*0bfacb9bSmrg  [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_move,mve_store,mve_load")
78*0bfacb9bSmrg   (set_attr "length" "4,8,8,4,8,8,4,4,4")
79*0bfacb9bSmrg   (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*,*")
80*0bfacb9bSmrg   (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*,*")])
81*0bfacb9bSmrg
82*0bfacb9bSmrg(define_insn "*mve_vdup<mode>"
83*0bfacb9bSmrg  [(set (match_operand:MVE_vecs 0 "s_register_operand" "=w")
84*0bfacb9bSmrg	(vec_duplicate:MVE_vecs
85*0bfacb9bSmrg	  (match_operand:<V_elem> 1 "s_register_operand" "r")))]
86*0bfacb9bSmrg  "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
87*0bfacb9bSmrg  "vdup.<V_sz_elem>\t%q0, %1"
88*0bfacb9bSmrg  [(set_attr "length" "4")
89*0bfacb9bSmrg   (set_attr "type" "mve_move")])
90*0bfacb9bSmrg
91*0bfacb9bSmrg;;
92*0bfacb9bSmrg;; [vst4q])
93*0bfacb9bSmrg;;
94*0bfacb9bSmrg(define_insn "mve_vst4q<mode>"
95*0bfacb9bSmrg  [(set (match_operand:XI 0 "neon_struct_operand" "=Um")
96*0bfacb9bSmrg	(unspec:XI [(match_operand:XI 1 "s_register_operand" "w")
97*0bfacb9bSmrg		    (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
98*0bfacb9bSmrg	 VST4Q))
99*0bfacb9bSmrg  ]
100*0bfacb9bSmrg  "TARGET_HAVE_MVE"
101*0bfacb9bSmrg{
102*0bfacb9bSmrg   rtx ops[6];
103*0bfacb9bSmrg   int regno = REGNO (operands[1]);
104*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
105*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno+4);
106*0bfacb9bSmrg   ops[2] = gen_rtx_REG (TImode, regno+8);
107*0bfacb9bSmrg   ops[3] = gen_rtx_REG (TImode, regno+12);
108*0bfacb9bSmrg   rtx reg  = operands[0];
109*0bfacb9bSmrg   while (reg && !REG_P (reg))
110*0bfacb9bSmrg    reg = XEXP (reg, 0);
111*0bfacb9bSmrg   gcc_assert (REG_P (reg));
112*0bfacb9bSmrg   ops[4] = reg;
113*0bfacb9bSmrg   ops[5] = operands[0];
114*0bfacb9bSmrg   /* Here in first three instructions data is stored to ops[4]'s location but
115*0bfacb9bSmrg      in the fourth instruction data is stored to operands[0], this is to
116*0bfacb9bSmrg      support the writeback.  */
117*0bfacb9bSmrg   output_asm_insn ("vst40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
118*0bfacb9bSmrg		    "vst41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
119*0bfacb9bSmrg		    "vst42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
120*0bfacb9bSmrg		    "vst43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
121*0bfacb9bSmrg   return "";
122*0bfacb9bSmrg}
123*0bfacb9bSmrg  [(set_attr "length" "16")])
124*0bfacb9bSmrg
125*0bfacb9bSmrg;;
126*0bfacb9bSmrg;; [vrndq_m_f])
127*0bfacb9bSmrg;;
128*0bfacb9bSmrg(define_insn "mve_vrndq_m_f<mode>"
129*0bfacb9bSmrg  [
130*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
131*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
132*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
133*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
134*0bfacb9bSmrg	 VRNDQ_M_F))
135*0bfacb9bSmrg  ]
136*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
137*0bfacb9bSmrg  "vpst\;vrintzt.f%#<V_sz_elem> %q0, %q2"
138*0bfacb9bSmrg  [(set_attr "type" "mve_move")
139*0bfacb9bSmrg   (set_attr "length""8")])
140*0bfacb9bSmrg
141*0bfacb9bSmrg;;
142*0bfacb9bSmrg;; [vrndxq_f])
143*0bfacb9bSmrg;;
144*0bfacb9bSmrg(define_insn "mve_vrndxq_f<mode>"
145*0bfacb9bSmrg  [
146*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
147*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
148*0bfacb9bSmrg	 VRNDXQ_F))
149*0bfacb9bSmrg  ]
150*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
151*0bfacb9bSmrg  "vrintx.f%#<V_sz_elem>	%q0, %q1"
152*0bfacb9bSmrg  [(set_attr "type" "mve_move")
153*0bfacb9bSmrg])
154*0bfacb9bSmrg
155*0bfacb9bSmrg;;
156*0bfacb9bSmrg;; [vrndq_f])
157*0bfacb9bSmrg;;
158*0bfacb9bSmrg(define_insn "mve_vrndq_f<mode>"
159*0bfacb9bSmrg  [
160*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
161*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
162*0bfacb9bSmrg	 VRNDQ_F))
163*0bfacb9bSmrg  ]
164*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
165*0bfacb9bSmrg  "vrintz.f%#<V_sz_elem>	%q0, %q1"
166*0bfacb9bSmrg  [(set_attr "type" "mve_move")
167*0bfacb9bSmrg])
168*0bfacb9bSmrg
169*0bfacb9bSmrg;;
170*0bfacb9bSmrg;; [vrndpq_f])
171*0bfacb9bSmrg;;
172*0bfacb9bSmrg(define_insn "mve_vrndpq_f<mode>"
173*0bfacb9bSmrg  [
174*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
175*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
176*0bfacb9bSmrg	 VRNDPQ_F))
177*0bfacb9bSmrg  ]
178*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
179*0bfacb9bSmrg  "vrintp.f%#<V_sz_elem>	%q0, %q1"
180*0bfacb9bSmrg  [(set_attr "type" "mve_move")
181*0bfacb9bSmrg])
182*0bfacb9bSmrg
183*0bfacb9bSmrg;;
184*0bfacb9bSmrg;; [vrndnq_f])
185*0bfacb9bSmrg;;
186*0bfacb9bSmrg(define_insn "mve_vrndnq_f<mode>"
187*0bfacb9bSmrg  [
188*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
189*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
190*0bfacb9bSmrg	 VRNDNQ_F))
191*0bfacb9bSmrg  ]
192*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
193*0bfacb9bSmrg  "vrintn.f%#<V_sz_elem>	%q0, %q1"
194*0bfacb9bSmrg  [(set_attr "type" "mve_move")
195*0bfacb9bSmrg])
196*0bfacb9bSmrg
197*0bfacb9bSmrg;;
198*0bfacb9bSmrg;; [vrndmq_f])
199*0bfacb9bSmrg;;
200*0bfacb9bSmrg(define_insn "mve_vrndmq_f<mode>"
201*0bfacb9bSmrg  [
202*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
203*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
204*0bfacb9bSmrg	 VRNDMQ_F))
205*0bfacb9bSmrg  ]
206*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
207*0bfacb9bSmrg  "vrintm.f%#<V_sz_elem>	%q0, %q1"
208*0bfacb9bSmrg  [(set_attr "type" "mve_move")
209*0bfacb9bSmrg])
210*0bfacb9bSmrg
211*0bfacb9bSmrg;;
212*0bfacb9bSmrg;; [vrndaq_f])
213*0bfacb9bSmrg;;
214*0bfacb9bSmrg(define_insn "mve_vrndaq_f<mode>"
215*0bfacb9bSmrg  [
216*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
217*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
218*0bfacb9bSmrg	 VRNDAQ_F))
219*0bfacb9bSmrg  ]
220*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
221*0bfacb9bSmrg  "vrinta.f%#<V_sz_elem>	%q0, %q1"
222*0bfacb9bSmrg  [(set_attr "type" "mve_move")
223*0bfacb9bSmrg])
224*0bfacb9bSmrg
225*0bfacb9bSmrg;;
226*0bfacb9bSmrg;; [vrev64q_f])
227*0bfacb9bSmrg;;
228*0bfacb9bSmrg(define_insn "mve_vrev64q_f<mode>"
229*0bfacb9bSmrg  [
230*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=&w")
231*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
232*0bfacb9bSmrg	 VREV64Q_F))
233*0bfacb9bSmrg  ]
234*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
235*0bfacb9bSmrg  "vrev64.%#<V_sz_elem> %q0, %q1"
236*0bfacb9bSmrg  [(set_attr "type" "mve_move")
237*0bfacb9bSmrg])
238*0bfacb9bSmrg
239*0bfacb9bSmrg;;
240*0bfacb9bSmrg;; [vnegq_f])
241*0bfacb9bSmrg;;
242*0bfacb9bSmrg(define_insn "mve_vnegq_f<mode>"
243*0bfacb9bSmrg  [
244*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
245*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
246*0bfacb9bSmrg	 VNEGQ_F))
247*0bfacb9bSmrg  ]
248*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
249*0bfacb9bSmrg  "vneg.f%#<V_sz_elem>  %q0, %q1"
250*0bfacb9bSmrg  [(set_attr "type" "mve_move")
251*0bfacb9bSmrg])
252*0bfacb9bSmrg
253*0bfacb9bSmrg;;
254*0bfacb9bSmrg;; [vdupq_n_f])
255*0bfacb9bSmrg;;
256*0bfacb9bSmrg(define_insn "mve_vdupq_n_f<mode>"
257*0bfacb9bSmrg  [
258*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
259*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
260*0bfacb9bSmrg	 VDUPQ_N_F))
261*0bfacb9bSmrg  ]
262*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
263*0bfacb9bSmrg  "vdup.%#<V_sz_elem>   %q0, %1"
264*0bfacb9bSmrg  [(set_attr "type" "mve_move")
265*0bfacb9bSmrg])
266*0bfacb9bSmrg
267*0bfacb9bSmrg;;
268*0bfacb9bSmrg;; [vabsq_f])
269*0bfacb9bSmrg;;
270*0bfacb9bSmrg(define_insn "mve_vabsq_f<mode>"
271*0bfacb9bSmrg  [
272*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
273*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
274*0bfacb9bSmrg	 VABSQ_F))
275*0bfacb9bSmrg  ]
276*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
277*0bfacb9bSmrg  "vabs.f%#<V_sz_elem>  %q0, %q1"
278*0bfacb9bSmrg  [(set_attr "type" "mve_move")
279*0bfacb9bSmrg])
280*0bfacb9bSmrg
281*0bfacb9bSmrg;;
282*0bfacb9bSmrg;; [vrev32q_f])
283*0bfacb9bSmrg;;
284*0bfacb9bSmrg(define_insn "mve_vrev32q_fv8hf"
285*0bfacb9bSmrg  [
286*0bfacb9bSmrg   (set (match_operand:V8HF 0 "s_register_operand" "=w")
287*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")]
288*0bfacb9bSmrg	 VREV32Q_F))
289*0bfacb9bSmrg  ]
290*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
291*0bfacb9bSmrg  "vrev32.16 %q0, %q1"
292*0bfacb9bSmrg  [(set_attr "type" "mve_move")
293*0bfacb9bSmrg])
294*0bfacb9bSmrg;;
295*0bfacb9bSmrg;; [vcvttq_f32_f16])
296*0bfacb9bSmrg;;
297*0bfacb9bSmrg(define_insn "mve_vcvttq_f32_f16v4sf"
298*0bfacb9bSmrg  [
299*0bfacb9bSmrg   (set (match_operand:V4SF 0 "s_register_operand" "=w")
300*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
301*0bfacb9bSmrg	 VCVTTQ_F32_F16))
302*0bfacb9bSmrg  ]
303*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
304*0bfacb9bSmrg  "vcvtt.f32.f16 %q0, %q1"
305*0bfacb9bSmrg  [(set_attr "type" "mve_move")
306*0bfacb9bSmrg])
307*0bfacb9bSmrg
308*0bfacb9bSmrg;;
309*0bfacb9bSmrg;; [vcvtbq_f32_f16])
310*0bfacb9bSmrg;;
311*0bfacb9bSmrg(define_insn "mve_vcvtbq_f32_f16v4sf"
312*0bfacb9bSmrg  [
313*0bfacb9bSmrg   (set (match_operand:V4SF 0 "s_register_operand" "=w")
314*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
315*0bfacb9bSmrg	 VCVTBQ_F32_F16))
316*0bfacb9bSmrg  ]
317*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
318*0bfacb9bSmrg  "vcvtb.f32.f16 %q0, %q1"
319*0bfacb9bSmrg  [(set_attr "type" "mve_move")
320*0bfacb9bSmrg])
321*0bfacb9bSmrg
322*0bfacb9bSmrg;;
323*0bfacb9bSmrg;; [vcvtq_to_f_s, vcvtq_to_f_u])
324*0bfacb9bSmrg;;
325*0bfacb9bSmrg(define_insn "mve_vcvtq_to_f_<supf><mode>"
326*0bfacb9bSmrg  [
327*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
328*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
329*0bfacb9bSmrg	 VCVTQ_TO_F))
330*0bfacb9bSmrg  ]
331*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
332*0bfacb9bSmrg  "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>       %q0, %q1"
333*0bfacb9bSmrg  [(set_attr "type" "mve_move")
334*0bfacb9bSmrg])
335*0bfacb9bSmrg
336*0bfacb9bSmrg;;
337*0bfacb9bSmrg;; [vrev64q_u, vrev64q_s])
338*0bfacb9bSmrg;;
339*0bfacb9bSmrg(define_insn "mve_vrev64q_<supf><mode>"
340*0bfacb9bSmrg  [
341*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=&w")
342*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
343*0bfacb9bSmrg	 VREV64Q))
344*0bfacb9bSmrg  ]
345*0bfacb9bSmrg  "TARGET_HAVE_MVE"
346*0bfacb9bSmrg  "vrev64.%#<V_sz_elem> %q0, %q1"
347*0bfacb9bSmrg  [(set_attr "type" "mve_move")
348*0bfacb9bSmrg])
349*0bfacb9bSmrg
350*0bfacb9bSmrg;;
351*0bfacb9bSmrg;; [vcvtq_from_f_s, vcvtq_from_f_u])
352*0bfacb9bSmrg;;
353*0bfacb9bSmrg(define_insn "mve_vcvtq_from_f_<supf><mode>"
354*0bfacb9bSmrg  [
355*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
356*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
357*0bfacb9bSmrg	 VCVTQ_FROM_F))
358*0bfacb9bSmrg  ]
359*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
360*0bfacb9bSmrg  "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>       %q0, %q1"
361*0bfacb9bSmrg  [(set_attr "type" "mve_move")
362*0bfacb9bSmrg])
363*0bfacb9bSmrg;; [vqnegq_s])
364*0bfacb9bSmrg;;
365*0bfacb9bSmrg(define_insn "mve_vqnegq_s<mode>"
366*0bfacb9bSmrg  [
367*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
368*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
369*0bfacb9bSmrg	 VQNEGQ_S))
370*0bfacb9bSmrg  ]
371*0bfacb9bSmrg  "TARGET_HAVE_MVE"
372*0bfacb9bSmrg  "vqneg.s%#<V_sz_elem> %q0, %q1"
373*0bfacb9bSmrg  [(set_attr "type" "mve_move")
374*0bfacb9bSmrg])
375*0bfacb9bSmrg
376*0bfacb9bSmrg;;
377*0bfacb9bSmrg;; [vqabsq_s])
378*0bfacb9bSmrg;;
379*0bfacb9bSmrg(define_insn "mve_vqabsq_s<mode>"
380*0bfacb9bSmrg  [
381*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
382*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
383*0bfacb9bSmrg	 VQABSQ_S))
384*0bfacb9bSmrg  ]
385*0bfacb9bSmrg  "TARGET_HAVE_MVE"
386*0bfacb9bSmrg  "vqabs.s%#<V_sz_elem> %q0, %q1"
387*0bfacb9bSmrg  [(set_attr "type" "mve_move")
388*0bfacb9bSmrg])
389*0bfacb9bSmrg
390*0bfacb9bSmrg;;
391*0bfacb9bSmrg;; [vnegq_s])
392*0bfacb9bSmrg;;
393*0bfacb9bSmrg(define_insn "mve_vnegq_s<mode>"
394*0bfacb9bSmrg  [
395*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
396*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
397*0bfacb9bSmrg	 VNEGQ_S))
398*0bfacb9bSmrg  ]
399*0bfacb9bSmrg  "TARGET_HAVE_MVE"
400*0bfacb9bSmrg  "vneg.s%#<V_sz_elem>  %q0, %q1"
401*0bfacb9bSmrg  [(set_attr "type" "mve_move")
402*0bfacb9bSmrg])
403*0bfacb9bSmrg
404*0bfacb9bSmrg;;
405*0bfacb9bSmrg;; [vmvnq_u, vmvnq_s])
406*0bfacb9bSmrg;;
407*0bfacb9bSmrg(define_insn "mve_vmvnq_<supf><mode>"
408*0bfacb9bSmrg  [
409*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
410*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
411*0bfacb9bSmrg	 VMVNQ))
412*0bfacb9bSmrg  ]
413*0bfacb9bSmrg  "TARGET_HAVE_MVE"
414*0bfacb9bSmrg  "vmvn %q0, %q1"
415*0bfacb9bSmrg  [(set_attr "type" "mve_move")
416*0bfacb9bSmrg])
417*0bfacb9bSmrg
418*0bfacb9bSmrg;;
419*0bfacb9bSmrg;; [vdupq_n_u, vdupq_n_s])
420*0bfacb9bSmrg;;
421*0bfacb9bSmrg(define_insn "mve_vdupq_n_<supf><mode>"
422*0bfacb9bSmrg  [
423*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
424*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
425*0bfacb9bSmrg	 VDUPQ_N))
426*0bfacb9bSmrg  ]
427*0bfacb9bSmrg  "TARGET_HAVE_MVE"
428*0bfacb9bSmrg  "vdup.%#<V_sz_elem>   %q0, %1"
429*0bfacb9bSmrg  [(set_attr "type" "mve_move")
430*0bfacb9bSmrg])
431*0bfacb9bSmrg
432*0bfacb9bSmrg;;
433*0bfacb9bSmrg;; [vclzq_u, vclzq_s])
434*0bfacb9bSmrg;;
435*0bfacb9bSmrg(define_insn "mve_vclzq_<supf><mode>"
436*0bfacb9bSmrg  [
437*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
438*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
439*0bfacb9bSmrg	 VCLZQ))
440*0bfacb9bSmrg  ]
441*0bfacb9bSmrg  "TARGET_HAVE_MVE"
442*0bfacb9bSmrg  "vclz.i%#<V_sz_elem>  %q0, %q1"
443*0bfacb9bSmrg  [(set_attr "type" "mve_move")
444*0bfacb9bSmrg])
445*0bfacb9bSmrg
446*0bfacb9bSmrg;;
447*0bfacb9bSmrg;; [vclsq_s])
448*0bfacb9bSmrg;;
449*0bfacb9bSmrg(define_insn "mve_vclsq_s<mode>"
450*0bfacb9bSmrg  [
451*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
452*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
453*0bfacb9bSmrg	 VCLSQ_S))
454*0bfacb9bSmrg  ]
455*0bfacb9bSmrg  "TARGET_HAVE_MVE"
456*0bfacb9bSmrg  "vcls.s%#<V_sz_elem>  %q0, %q1"
457*0bfacb9bSmrg  [(set_attr "type" "mve_move")
458*0bfacb9bSmrg])
459*0bfacb9bSmrg
460*0bfacb9bSmrg;;
461*0bfacb9bSmrg;; [vaddvq_s, vaddvq_u])
462*0bfacb9bSmrg;;
463*0bfacb9bSmrg(define_insn "mve_vaddvq_<supf><mode>"
464*0bfacb9bSmrg  [
465*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
466*0bfacb9bSmrg	(unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
467*0bfacb9bSmrg	 VADDVQ))
468*0bfacb9bSmrg  ]
469*0bfacb9bSmrg  "TARGET_HAVE_MVE"
470*0bfacb9bSmrg  "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
471*0bfacb9bSmrg  [(set_attr "type" "mve_move")
472*0bfacb9bSmrg])
473*0bfacb9bSmrg
474*0bfacb9bSmrg;;
475*0bfacb9bSmrg;; [vabsq_s])
476*0bfacb9bSmrg;;
477*0bfacb9bSmrg(define_insn "mve_vabsq_s<mode>"
478*0bfacb9bSmrg  [
479*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
480*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
481*0bfacb9bSmrg	 VABSQ_S))
482*0bfacb9bSmrg  ]
483*0bfacb9bSmrg  "TARGET_HAVE_MVE"
484*0bfacb9bSmrg  "vabs.s%#<V_sz_elem>\t%q0, %q1"
485*0bfacb9bSmrg  [(set_attr "type" "mve_move")
486*0bfacb9bSmrg])
487*0bfacb9bSmrg
488*0bfacb9bSmrg;;
489*0bfacb9bSmrg;; [vrev32q_u, vrev32q_s])
490*0bfacb9bSmrg;;
491*0bfacb9bSmrg(define_insn "mve_vrev32q_<supf><mode>"
492*0bfacb9bSmrg  [
493*0bfacb9bSmrg   (set (match_operand:MVE_3 0 "s_register_operand" "=w")
494*0bfacb9bSmrg	(unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
495*0bfacb9bSmrg	 VREV32Q))
496*0bfacb9bSmrg  ]
497*0bfacb9bSmrg  "TARGET_HAVE_MVE"
498*0bfacb9bSmrg  "vrev32.%#<V_sz_elem>\t%q0, %q1"
499*0bfacb9bSmrg  [(set_attr "type" "mve_move")
500*0bfacb9bSmrg])
501*0bfacb9bSmrg
502*0bfacb9bSmrg;;
503*0bfacb9bSmrg;; [vmovltq_u, vmovltq_s])
504*0bfacb9bSmrg;;
505*0bfacb9bSmrg(define_insn "mve_vmovltq_<supf><mode>"
506*0bfacb9bSmrg  [
507*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
508*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
509*0bfacb9bSmrg	 VMOVLTQ))
510*0bfacb9bSmrg  ]
511*0bfacb9bSmrg  "TARGET_HAVE_MVE"
512*0bfacb9bSmrg  "vmovlt.<supf>%#<V_sz_elem>   %q0, %q1"
513*0bfacb9bSmrg  [(set_attr "type" "mve_move")
514*0bfacb9bSmrg])
515*0bfacb9bSmrg
516*0bfacb9bSmrg;;
517*0bfacb9bSmrg;; [vmovlbq_s, vmovlbq_u])
518*0bfacb9bSmrg;;
519*0bfacb9bSmrg(define_insn "mve_vmovlbq_<supf><mode>"
520*0bfacb9bSmrg  [
521*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
522*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
523*0bfacb9bSmrg	 VMOVLBQ))
524*0bfacb9bSmrg  ]
525*0bfacb9bSmrg  "TARGET_HAVE_MVE"
526*0bfacb9bSmrg  "vmovlb.<supf>%#<V_sz_elem>   %q0, %q1"
527*0bfacb9bSmrg  [(set_attr "type" "mve_move")
528*0bfacb9bSmrg])
529*0bfacb9bSmrg
530*0bfacb9bSmrg;;
531*0bfacb9bSmrg;; [vcvtpq_s, vcvtpq_u])
532*0bfacb9bSmrg;;
533*0bfacb9bSmrg(define_insn "mve_vcvtpq_<supf><mode>"
534*0bfacb9bSmrg  [
535*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
536*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
537*0bfacb9bSmrg	 VCVTPQ))
538*0bfacb9bSmrg  ]
539*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
540*0bfacb9bSmrg  "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem>      %q0, %q1"
541*0bfacb9bSmrg  [(set_attr "type" "mve_move")
542*0bfacb9bSmrg])
543*0bfacb9bSmrg
544*0bfacb9bSmrg;;
545*0bfacb9bSmrg;; [vcvtnq_s, vcvtnq_u])
546*0bfacb9bSmrg;;
547*0bfacb9bSmrg(define_insn "mve_vcvtnq_<supf><mode>"
548*0bfacb9bSmrg  [
549*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
550*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
551*0bfacb9bSmrg	 VCVTNQ))
552*0bfacb9bSmrg  ]
553*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
554*0bfacb9bSmrg  "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem>      %q0, %q1"
555*0bfacb9bSmrg  [(set_attr "type" "mve_move")
556*0bfacb9bSmrg])
557*0bfacb9bSmrg
558*0bfacb9bSmrg;;
559*0bfacb9bSmrg;; [vcvtmq_s, vcvtmq_u])
560*0bfacb9bSmrg;;
561*0bfacb9bSmrg(define_insn "mve_vcvtmq_<supf><mode>"
562*0bfacb9bSmrg  [
563*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
564*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
565*0bfacb9bSmrg	 VCVTMQ))
566*0bfacb9bSmrg  ]
567*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
568*0bfacb9bSmrg  "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem>      %q0, %q1"
569*0bfacb9bSmrg  [(set_attr "type" "mve_move")
570*0bfacb9bSmrg])
571*0bfacb9bSmrg
572*0bfacb9bSmrg;;
573*0bfacb9bSmrg;; [vcvtaq_u, vcvtaq_s])
574*0bfacb9bSmrg;;
575*0bfacb9bSmrg(define_insn "mve_vcvtaq_<supf><mode>"
576*0bfacb9bSmrg  [
577*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
578*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
579*0bfacb9bSmrg	 VCVTAQ))
580*0bfacb9bSmrg  ]
581*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
582*0bfacb9bSmrg  "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem>      %q0, %q1"
583*0bfacb9bSmrg  [(set_attr "type" "mve_move")
584*0bfacb9bSmrg])
585*0bfacb9bSmrg
586*0bfacb9bSmrg;;
587*0bfacb9bSmrg;; [vmvnq_n_u, vmvnq_n_s])
588*0bfacb9bSmrg;;
589*0bfacb9bSmrg(define_insn "mve_vmvnq_n_<supf><mode>"
590*0bfacb9bSmrg  [
591*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
592*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
593*0bfacb9bSmrg	 VMVNQ_N))
594*0bfacb9bSmrg  ]
595*0bfacb9bSmrg  "TARGET_HAVE_MVE"
596*0bfacb9bSmrg  "vmvn.i%#<V_sz_elem>  %q0, %1"
597*0bfacb9bSmrg  [(set_attr "type" "mve_move")
598*0bfacb9bSmrg])
599*0bfacb9bSmrg
600*0bfacb9bSmrg;;
601*0bfacb9bSmrg;; [vrev16q_u, vrev16q_s])
602*0bfacb9bSmrg;;
603*0bfacb9bSmrg(define_insn "mve_vrev16q_<supf>v16qi"
604*0bfacb9bSmrg  [
605*0bfacb9bSmrg   (set (match_operand:V16QI 0 "s_register_operand" "=w")
606*0bfacb9bSmrg	(unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
607*0bfacb9bSmrg	 VREV16Q))
608*0bfacb9bSmrg  ]
609*0bfacb9bSmrg  "TARGET_HAVE_MVE"
610*0bfacb9bSmrg  "vrev16.8 %q0, %q1"
611*0bfacb9bSmrg  [(set_attr "type" "mve_move")
612*0bfacb9bSmrg])
613*0bfacb9bSmrg
614*0bfacb9bSmrg;;
615*0bfacb9bSmrg;; [vaddlvq_s vaddlvq_u])
616*0bfacb9bSmrg;;
617*0bfacb9bSmrg(define_insn "mve_vaddlvq_<supf>v4si"
618*0bfacb9bSmrg  [
619*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
620*0bfacb9bSmrg	(unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
621*0bfacb9bSmrg	 VADDLVQ))
622*0bfacb9bSmrg  ]
623*0bfacb9bSmrg  "TARGET_HAVE_MVE"
624*0bfacb9bSmrg  "vaddlv.<supf>32 %Q0, %R0, %q1"
625*0bfacb9bSmrg  [(set_attr "type" "mve_move")
626*0bfacb9bSmrg])
627*0bfacb9bSmrg
628*0bfacb9bSmrg;;
629*0bfacb9bSmrg;; [vctp8q vctp16q vctp32q vctp64q])
630*0bfacb9bSmrg;;
631*0bfacb9bSmrg(define_insn "mve_vctp<mode1>qhi"
632*0bfacb9bSmrg  [
633*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
634*0bfacb9bSmrg	(unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
635*0bfacb9bSmrg	VCTPQ))
636*0bfacb9bSmrg  ]
637*0bfacb9bSmrg  "TARGET_HAVE_MVE"
638*0bfacb9bSmrg  "vctp.<mode1> %1"
639*0bfacb9bSmrg  [(set_attr "type" "mve_move")
640*0bfacb9bSmrg])
641*0bfacb9bSmrg
642*0bfacb9bSmrg;;
643*0bfacb9bSmrg;; [vpnot])
644*0bfacb9bSmrg;;
645*0bfacb9bSmrg(define_insn "mve_vpnothi"
646*0bfacb9bSmrg  [
647*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
648*0bfacb9bSmrg	(unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
649*0bfacb9bSmrg	 VPNOT))
650*0bfacb9bSmrg  ]
651*0bfacb9bSmrg  "TARGET_HAVE_MVE"
652*0bfacb9bSmrg  "vpnot"
653*0bfacb9bSmrg  [(set_attr "type" "mve_move")
654*0bfacb9bSmrg])
655*0bfacb9bSmrg
656*0bfacb9bSmrg;;
657*0bfacb9bSmrg;; [vsubq_n_f])
658*0bfacb9bSmrg;;
659*0bfacb9bSmrg(define_insn "mve_vsubq_n_f<mode>"
660*0bfacb9bSmrg  [
661*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
662*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
663*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
664*0bfacb9bSmrg	 VSUBQ_N_F))
665*0bfacb9bSmrg  ]
666*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
667*0bfacb9bSmrg  "vsub.f<V_sz_elem>  %q0, %q1, %2"
668*0bfacb9bSmrg  [(set_attr "type" "mve_move")
669*0bfacb9bSmrg])
670*0bfacb9bSmrg
671*0bfacb9bSmrg;;
672*0bfacb9bSmrg;; [vbrsrq_n_f])
673*0bfacb9bSmrg;;
674*0bfacb9bSmrg(define_insn "mve_vbrsrq_n_f<mode>"
675*0bfacb9bSmrg  [
676*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
677*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
678*0bfacb9bSmrg		       (match_operand:SI 2 "s_register_operand" "r")]
679*0bfacb9bSmrg	 VBRSRQ_N_F))
680*0bfacb9bSmrg  ]
681*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
682*0bfacb9bSmrg  "vbrsr.<V_sz_elem>  %q0, %q1, %2"
683*0bfacb9bSmrg  [(set_attr "type" "mve_move")
684*0bfacb9bSmrg])
685*0bfacb9bSmrg
686*0bfacb9bSmrg;;
687*0bfacb9bSmrg;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
688*0bfacb9bSmrg;;
689*0bfacb9bSmrg(define_insn "mve_vcvtq_n_to_f_<supf><mode>"
690*0bfacb9bSmrg  [
691*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
692*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
693*0bfacb9bSmrg		       (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
694*0bfacb9bSmrg	 VCVTQ_N_TO_F))
695*0bfacb9bSmrg  ]
696*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
697*0bfacb9bSmrg  "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
698*0bfacb9bSmrg  [(set_attr "type" "mve_move")
699*0bfacb9bSmrg])
700*0bfacb9bSmrg
701*0bfacb9bSmrg;; [vcreateq_f])
702*0bfacb9bSmrg;;
703*0bfacb9bSmrg(define_insn "mve_vcreateq_f<mode>"
704*0bfacb9bSmrg  [
705*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
706*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
707*0bfacb9bSmrg		       (match_operand:DI 2 "s_register_operand" "r")]
708*0bfacb9bSmrg	 VCREATEQ_F))
709*0bfacb9bSmrg  ]
710*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
711*0bfacb9bSmrg  "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
712*0bfacb9bSmrg  [(set_attr "type" "mve_move")
713*0bfacb9bSmrg   (set_attr "length""8")])
714*0bfacb9bSmrg
715*0bfacb9bSmrg;;
716*0bfacb9bSmrg;; [vcreateq_u, vcreateq_s])
717*0bfacb9bSmrg;;
718*0bfacb9bSmrg(define_insn "mve_vcreateq_<supf><mode>"
719*0bfacb9bSmrg  [
720*0bfacb9bSmrg   (set (match_operand:MVE_1 0 "s_register_operand" "=w")
721*0bfacb9bSmrg	(unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
722*0bfacb9bSmrg		       (match_operand:DI 2 "s_register_operand" "r")]
723*0bfacb9bSmrg	 VCREATEQ))
724*0bfacb9bSmrg  ]
725*0bfacb9bSmrg  "TARGET_HAVE_MVE"
726*0bfacb9bSmrg  "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
727*0bfacb9bSmrg  [(set_attr "type" "mve_move")
728*0bfacb9bSmrg   (set_attr "length""8")])
729*0bfacb9bSmrg
730*0bfacb9bSmrg;;
731*0bfacb9bSmrg;; [vshrq_n_s, vshrq_n_u])
732*0bfacb9bSmrg;;
733*0bfacb9bSmrg(define_insn "mve_vshrq_n_<supf><mode>"
734*0bfacb9bSmrg  [
735*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
736*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
737*0bfacb9bSmrg		       (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
738*0bfacb9bSmrg	 VSHRQ_N))
739*0bfacb9bSmrg  ]
740*0bfacb9bSmrg  "TARGET_HAVE_MVE"
741*0bfacb9bSmrg  "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
742*0bfacb9bSmrg  [(set_attr "type" "mve_move")
743*0bfacb9bSmrg])
744*0bfacb9bSmrg
745*0bfacb9bSmrg;;
746*0bfacb9bSmrg;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
747*0bfacb9bSmrg;;
748*0bfacb9bSmrg(define_insn "mve_vcvtq_n_from_f_<supf><mode>"
749*0bfacb9bSmrg  [
750*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
751*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
752*0bfacb9bSmrg		       (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
753*0bfacb9bSmrg	 VCVTQ_N_FROM_F))
754*0bfacb9bSmrg  ]
755*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
756*0bfacb9bSmrg  "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
757*0bfacb9bSmrg  [(set_attr "type" "mve_move")
758*0bfacb9bSmrg])
759*0bfacb9bSmrg
760*0bfacb9bSmrg;;
761*0bfacb9bSmrg;; [vaddlvq_p_s])
762*0bfacb9bSmrg;;
763*0bfacb9bSmrg(define_insn "mve_vaddlvq_p_<supf>v4si"
764*0bfacb9bSmrg  [
765*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
766*0bfacb9bSmrg	(unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
767*0bfacb9bSmrg		    (match_operand:HI 2 "vpr_register_operand" "Up")]
768*0bfacb9bSmrg	 VADDLVQ_P))
769*0bfacb9bSmrg  ]
770*0bfacb9bSmrg  "TARGET_HAVE_MVE"
771*0bfacb9bSmrg  "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
772*0bfacb9bSmrg  [(set_attr "type" "mve_move")
773*0bfacb9bSmrg   (set_attr "length""8")])
774*0bfacb9bSmrg
775*0bfacb9bSmrg;;
776*0bfacb9bSmrg;; [vcmpneq_u, vcmpneq_s])
777*0bfacb9bSmrg;;
778*0bfacb9bSmrg(define_insn "mve_vcmpneq_<supf><mode>"
779*0bfacb9bSmrg  [
780*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
781*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
782*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
783*0bfacb9bSmrg	 VCMPNEQ))
784*0bfacb9bSmrg  ]
785*0bfacb9bSmrg  "TARGET_HAVE_MVE"
786*0bfacb9bSmrg  "vcmp.i%#<V_sz_elem>  ne, %q1, %q2"
787*0bfacb9bSmrg  [(set_attr "type" "mve_move")
788*0bfacb9bSmrg])
789*0bfacb9bSmrg
790*0bfacb9bSmrg;;
791*0bfacb9bSmrg;; [vshlq_s, vshlq_u])
792*0bfacb9bSmrg;;
793*0bfacb9bSmrg(define_insn "mve_vshlq_<supf><mode>"
794*0bfacb9bSmrg  [
795*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
796*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
797*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
798*0bfacb9bSmrg	 VSHLQ))
799*0bfacb9bSmrg  ]
800*0bfacb9bSmrg  "TARGET_HAVE_MVE"
801*0bfacb9bSmrg  "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
802*0bfacb9bSmrg  [(set_attr "type" "mve_move")
803*0bfacb9bSmrg])
804*0bfacb9bSmrg
805*0bfacb9bSmrg;;
806*0bfacb9bSmrg;; [vabdq_s, vabdq_u])
807*0bfacb9bSmrg;;
808*0bfacb9bSmrg(define_insn "mve_vabdq_<supf><mode>"
809*0bfacb9bSmrg  [
810*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
811*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
812*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
813*0bfacb9bSmrg	 VABDQ))
814*0bfacb9bSmrg  ]
815*0bfacb9bSmrg  "TARGET_HAVE_MVE"
816*0bfacb9bSmrg  "vabd.<supf>%#<V_sz_elem>	%q0, %q1, %q2"
817*0bfacb9bSmrg  [(set_attr "type" "mve_move")
818*0bfacb9bSmrg])
819*0bfacb9bSmrg
820*0bfacb9bSmrg;;
821*0bfacb9bSmrg;; [vaddq_n_s, vaddq_n_u])
822*0bfacb9bSmrg;;
823*0bfacb9bSmrg(define_insn "mve_vaddq_n_<supf><mode>"
824*0bfacb9bSmrg  [
825*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
826*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
827*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
828*0bfacb9bSmrg	 VADDQ_N))
829*0bfacb9bSmrg  ]
830*0bfacb9bSmrg  "TARGET_HAVE_MVE"
831*0bfacb9bSmrg  "vadd.i%#<V_sz_elem>	%q0, %q1, %2"
832*0bfacb9bSmrg  [(set_attr "type" "mve_move")
833*0bfacb9bSmrg])
834*0bfacb9bSmrg
835*0bfacb9bSmrg;;
836*0bfacb9bSmrg;; [vaddvaq_s, vaddvaq_u])
837*0bfacb9bSmrg;;
838*0bfacb9bSmrg(define_insn "mve_vaddvaq_<supf><mode>"
839*0bfacb9bSmrg  [
840*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
841*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
842*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
843*0bfacb9bSmrg	 VADDVAQ))
844*0bfacb9bSmrg  ]
845*0bfacb9bSmrg  "TARGET_HAVE_MVE"
846*0bfacb9bSmrg  "vaddva.<supf>%#<V_sz_elem>	%0, %q2"
847*0bfacb9bSmrg  [(set_attr "type" "mve_move")
848*0bfacb9bSmrg])
849*0bfacb9bSmrg
850*0bfacb9bSmrg;;
851*0bfacb9bSmrg;; [vaddvq_p_u, vaddvq_p_s])
852*0bfacb9bSmrg;;
853*0bfacb9bSmrg(define_insn "mve_vaddvq_p_<supf><mode>"
854*0bfacb9bSmrg  [
855*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
856*0bfacb9bSmrg	(unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
857*0bfacb9bSmrg		    (match_operand:HI 2 "vpr_register_operand" "Up")]
858*0bfacb9bSmrg	 VADDVQ_P))
859*0bfacb9bSmrg  ]
860*0bfacb9bSmrg  "TARGET_HAVE_MVE"
861*0bfacb9bSmrg  "vpst\;vaddvt.<supf>%#<V_sz_elem>	%0, %q1"
862*0bfacb9bSmrg  [(set_attr "type" "mve_move")
863*0bfacb9bSmrg   (set_attr "length""8")])
864*0bfacb9bSmrg
865*0bfacb9bSmrg;;
866*0bfacb9bSmrg;; [vandq_u, vandq_s])
867*0bfacb9bSmrg;;
868*0bfacb9bSmrg(define_insn "mve_vandq_<supf><mode>"
869*0bfacb9bSmrg  [
870*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
871*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
872*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
873*0bfacb9bSmrg	 VANDQ))
874*0bfacb9bSmrg  ]
875*0bfacb9bSmrg  "TARGET_HAVE_MVE"
876*0bfacb9bSmrg  "vand %q0, %q1, %q2"
877*0bfacb9bSmrg  [(set_attr "type" "mve_move")
878*0bfacb9bSmrg])
879*0bfacb9bSmrg
880*0bfacb9bSmrg;;
881*0bfacb9bSmrg;; [vbicq_s, vbicq_u])
882*0bfacb9bSmrg;;
883*0bfacb9bSmrg(define_insn "mve_vbicq_<supf><mode>"
884*0bfacb9bSmrg  [
885*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
886*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
887*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
888*0bfacb9bSmrg	 VBICQ))
889*0bfacb9bSmrg  ]
890*0bfacb9bSmrg  "TARGET_HAVE_MVE"
891*0bfacb9bSmrg  "vbic %q0, %q1, %q2"
892*0bfacb9bSmrg  [(set_attr "type" "mve_move")
893*0bfacb9bSmrg])
894*0bfacb9bSmrg
895*0bfacb9bSmrg;;
896*0bfacb9bSmrg;; [vbrsrq_n_u, vbrsrq_n_s])
897*0bfacb9bSmrg;;
898*0bfacb9bSmrg(define_insn "mve_vbrsrq_n_<supf><mode>"
899*0bfacb9bSmrg  [
900*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
901*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
902*0bfacb9bSmrg		       (match_operand:SI 2 "s_register_operand" "r")]
903*0bfacb9bSmrg	 VBRSRQ_N))
904*0bfacb9bSmrg  ]
905*0bfacb9bSmrg  "TARGET_HAVE_MVE"
906*0bfacb9bSmrg  "vbrsr.%#<V_sz_elem>	%q0, %q1, %2"
907*0bfacb9bSmrg  [(set_attr "type" "mve_move")
908*0bfacb9bSmrg])
909*0bfacb9bSmrg
910*0bfacb9bSmrg;;
911*0bfacb9bSmrg;; [vcaddq_rot270_s, vcaddq_rot270_u])
912*0bfacb9bSmrg;;
913*0bfacb9bSmrg(define_insn "mve_vcaddq_rot270_<supf><mode>"
914*0bfacb9bSmrg  [
915*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
916*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
917*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
918*0bfacb9bSmrg	 VCADDQ_ROT270))
919*0bfacb9bSmrg  ]
920*0bfacb9bSmrg  "TARGET_HAVE_MVE"
921*0bfacb9bSmrg  "vcadd.i%#<V_sz_elem>	%q0, %q1, %q2, #270"
922*0bfacb9bSmrg  [(set_attr "type" "mve_move")
923*0bfacb9bSmrg])
924*0bfacb9bSmrg
925*0bfacb9bSmrg;;
926*0bfacb9bSmrg;; [vcaddq_rot90_u, vcaddq_rot90_s])
927*0bfacb9bSmrg;;
928*0bfacb9bSmrg(define_insn "mve_vcaddq_rot90_<supf><mode>"
929*0bfacb9bSmrg  [
930*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
931*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
932*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
933*0bfacb9bSmrg	 VCADDQ_ROT90))
934*0bfacb9bSmrg  ]
935*0bfacb9bSmrg  "TARGET_HAVE_MVE"
936*0bfacb9bSmrg  "vcadd.i%#<V_sz_elem>	%q0, %q1, %q2, #90"
937*0bfacb9bSmrg  [(set_attr "type" "mve_move")
938*0bfacb9bSmrg])
939*0bfacb9bSmrg
940*0bfacb9bSmrg;;
941*0bfacb9bSmrg;; [vcmpcsq_n_u])
942*0bfacb9bSmrg;;
943*0bfacb9bSmrg(define_insn "mve_vcmpcsq_n_u<mode>"
944*0bfacb9bSmrg  [
945*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
946*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
947*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
948*0bfacb9bSmrg	 VCMPCSQ_N_U))
949*0bfacb9bSmrg  ]
950*0bfacb9bSmrg  "TARGET_HAVE_MVE"
951*0bfacb9bSmrg  "vcmp.u%#<V_sz_elem>	cs, %q1, %2"
952*0bfacb9bSmrg  [(set_attr "type" "mve_move")
953*0bfacb9bSmrg])
954*0bfacb9bSmrg
955*0bfacb9bSmrg;;
956*0bfacb9bSmrg;; [vcmpcsq_u])
957*0bfacb9bSmrg;;
958*0bfacb9bSmrg(define_insn "mve_vcmpcsq_u<mode>"
959*0bfacb9bSmrg  [
960*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
961*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
962*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
963*0bfacb9bSmrg	 VCMPCSQ_U))
964*0bfacb9bSmrg  ]
965*0bfacb9bSmrg  "TARGET_HAVE_MVE"
966*0bfacb9bSmrg  "vcmp.u%#<V_sz_elem>	cs, %q1, %q2"
967*0bfacb9bSmrg  [(set_attr "type" "mve_move")
968*0bfacb9bSmrg])
969*0bfacb9bSmrg
970*0bfacb9bSmrg;;
971*0bfacb9bSmrg;; [vcmpeqq_n_s, vcmpeqq_n_u])
972*0bfacb9bSmrg;;
973*0bfacb9bSmrg(define_insn "mve_vcmpeqq_n_<supf><mode>"
974*0bfacb9bSmrg  [
975*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
976*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
977*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
978*0bfacb9bSmrg	 VCMPEQQ_N))
979*0bfacb9bSmrg  ]
980*0bfacb9bSmrg  "TARGET_HAVE_MVE"
981*0bfacb9bSmrg  "vcmp.i%#<V_sz_elem>	eq, %q1, %2"
982*0bfacb9bSmrg  [(set_attr "type" "mve_move")
983*0bfacb9bSmrg])
984*0bfacb9bSmrg
985*0bfacb9bSmrg;;
986*0bfacb9bSmrg;; [vcmpeqq_u, vcmpeqq_s])
987*0bfacb9bSmrg;;
988*0bfacb9bSmrg(define_insn "mve_vcmpeqq_<supf><mode>"
989*0bfacb9bSmrg  [
990*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
991*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
992*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
993*0bfacb9bSmrg	 VCMPEQQ))
994*0bfacb9bSmrg  ]
995*0bfacb9bSmrg  "TARGET_HAVE_MVE"
996*0bfacb9bSmrg  "vcmp.i%#<V_sz_elem>	eq, %q1, %q2"
997*0bfacb9bSmrg  [(set_attr "type" "mve_move")
998*0bfacb9bSmrg])
999*0bfacb9bSmrg
1000*0bfacb9bSmrg;;
1001*0bfacb9bSmrg;; [vcmpgeq_n_s])
1002*0bfacb9bSmrg;;
1003*0bfacb9bSmrg(define_insn "mve_vcmpgeq_n_s<mode>"
1004*0bfacb9bSmrg  [
1005*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1006*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1007*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
1008*0bfacb9bSmrg	 VCMPGEQ_N_S))
1009*0bfacb9bSmrg  ]
1010*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1011*0bfacb9bSmrg  "vcmp.s%#<V_sz_elem>	ge, %q1, %2"
1012*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1013*0bfacb9bSmrg])
1014*0bfacb9bSmrg
1015*0bfacb9bSmrg;;
1016*0bfacb9bSmrg;; [vcmpgeq_s])
1017*0bfacb9bSmrg;;
1018*0bfacb9bSmrg(define_insn "mve_vcmpgeq_s<mode>"
1019*0bfacb9bSmrg  [
1020*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1021*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1022*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
1023*0bfacb9bSmrg	 VCMPGEQ_S))
1024*0bfacb9bSmrg  ]
1025*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1026*0bfacb9bSmrg  "vcmp.s%#<V_sz_elem>	ge, %q1, %q2"
1027*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1028*0bfacb9bSmrg])
1029*0bfacb9bSmrg
1030*0bfacb9bSmrg;;
1031*0bfacb9bSmrg;; [vcmpgtq_n_s])
1032*0bfacb9bSmrg;;
1033*0bfacb9bSmrg(define_insn "mve_vcmpgtq_n_s<mode>"
1034*0bfacb9bSmrg  [
1035*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1036*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1037*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
1038*0bfacb9bSmrg	 VCMPGTQ_N_S))
1039*0bfacb9bSmrg  ]
1040*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1041*0bfacb9bSmrg  "vcmp.s%#<V_sz_elem>	gt, %q1, %2"
1042*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1043*0bfacb9bSmrg])
1044*0bfacb9bSmrg
1045*0bfacb9bSmrg;;
1046*0bfacb9bSmrg;; [vcmpgtq_s])
1047*0bfacb9bSmrg;;
1048*0bfacb9bSmrg(define_insn "mve_vcmpgtq_s<mode>"
1049*0bfacb9bSmrg  [
1050*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1051*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1052*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
1053*0bfacb9bSmrg	 VCMPGTQ_S))
1054*0bfacb9bSmrg  ]
1055*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1056*0bfacb9bSmrg  "vcmp.s%#<V_sz_elem>	gt, %q1, %q2"
1057*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1058*0bfacb9bSmrg])
1059*0bfacb9bSmrg
1060*0bfacb9bSmrg;;
1061*0bfacb9bSmrg;; [vcmphiq_n_u])
1062*0bfacb9bSmrg;;
1063*0bfacb9bSmrg(define_insn "mve_vcmphiq_n_u<mode>"
1064*0bfacb9bSmrg  [
1065*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1066*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1067*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
1068*0bfacb9bSmrg	 VCMPHIQ_N_U))
1069*0bfacb9bSmrg  ]
1070*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1071*0bfacb9bSmrg  "vcmp.u%#<V_sz_elem>	hi, %q1, %2"
1072*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1073*0bfacb9bSmrg])
1074*0bfacb9bSmrg
1075*0bfacb9bSmrg;;
1076*0bfacb9bSmrg;; [vcmphiq_u])
1077*0bfacb9bSmrg;;
1078*0bfacb9bSmrg(define_insn "mve_vcmphiq_u<mode>"
1079*0bfacb9bSmrg  [
1080*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1081*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1082*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
1083*0bfacb9bSmrg	 VCMPHIQ_U))
1084*0bfacb9bSmrg  ]
1085*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1086*0bfacb9bSmrg  "vcmp.u%#<V_sz_elem>	hi, %q1, %q2"
1087*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1088*0bfacb9bSmrg])
1089*0bfacb9bSmrg
1090*0bfacb9bSmrg;;
1091*0bfacb9bSmrg;; [vcmpleq_n_s])
1092*0bfacb9bSmrg;;
1093*0bfacb9bSmrg(define_insn "mve_vcmpleq_n_s<mode>"
1094*0bfacb9bSmrg  [
1095*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1096*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1097*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
1098*0bfacb9bSmrg	 VCMPLEQ_N_S))
1099*0bfacb9bSmrg  ]
1100*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1101*0bfacb9bSmrg  "vcmp.s%#<V_sz_elem>	le, %q1, %2"
1102*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1103*0bfacb9bSmrg])
1104*0bfacb9bSmrg
1105*0bfacb9bSmrg;;
1106*0bfacb9bSmrg;; [vcmpleq_s])
1107*0bfacb9bSmrg;;
1108*0bfacb9bSmrg(define_insn "mve_vcmpleq_s<mode>"
1109*0bfacb9bSmrg  [
1110*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1111*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1112*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
1113*0bfacb9bSmrg	 VCMPLEQ_S))
1114*0bfacb9bSmrg  ]
1115*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1116*0bfacb9bSmrg  "vcmp.s%#<V_sz_elem>	le, %q1, %q2"
1117*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1118*0bfacb9bSmrg])
1119*0bfacb9bSmrg
1120*0bfacb9bSmrg;;
1121*0bfacb9bSmrg;; [vcmpltq_n_s])
1122*0bfacb9bSmrg;;
1123*0bfacb9bSmrg(define_insn "mve_vcmpltq_n_s<mode>"
1124*0bfacb9bSmrg  [
1125*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1126*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1127*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
1128*0bfacb9bSmrg	 VCMPLTQ_N_S))
1129*0bfacb9bSmrg  ]
1130*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1131*0bfacb9bSmrg  "vcmp.s%#<V_sz_elem>	lt, %q1, %2"
1132*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1133*0bfacb9bSmrg])
1134*0bfacb9bSmrg
1135*0bfacb9bSmrg;;
1136*0bfacb9bSmrg;; [vcmpltq_s])
1137*0bfacb9bSmrg;;
1138*0bfacb9bSmrg(define_insn "mve_vcmpltq_s<mode>"
1139*0bfacb9bSmrg  [
1140*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1141*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1142*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
1143*0bfacb9bSmrg	 VCMPLTQ_S))
1144*0bfacb9bSmrg  ]
1145*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1146*0bfacb9bSmrg  "vcmp.s%#<V_sz_elem>	lt, %q1, %q2"
1147*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1148*0bfacb9bSmrg])
1149*0bfacb9bSmrg
1150*0bfacb9bSmrg;;
1151*0bfacb9bSmrg;; [vcmpneq_n_u, vcmpneq_n_s])
1152*0bfacb9bSmrg;;
1153*0bfacb9bSmrg(define_insn "mve_vcmpneq_n_<supf><mode>"
1154*0bfacb9bSmrg  [
1155*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1156*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1157*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
1158*0bfacb9bSmrg	 VCMPNEQ_N))
1159*0bfacb9bSmrg  ]
1160*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1161*0bfacb9bSmrg  "vcmp.i%#<V_sz_elem>	ne, %q1, %2"
1162*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1163*0bfacb9bSmrg])
1164*0bfacb9bSmrg
1165*0bfacb9bSmrg;;
1166*0bfacb9bSmrg;; [veorq_u, veorq_s])
1167*0bfacb9bSmrg;;
1168*0bfacb9bSmrg(define_insn "mve_veorq_<supf><mode>"
1169*0bfacb9bSmrg  [
1170*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1171*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1172*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1173*0bfacb9bSmrg	 VEORQ))
1174*0bfacb9bSmrg  ]
1175*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1176*0bfacb9bSmrg  "veor %q0, %q1, %q2"
1177*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1178*0bfacb9bSmrg])
1179*0bfacb9bSmrg
1180*0bfacb9bSmrg;;
1181*0bfacb9bSmrg;; [vhaddq_n_u, vhaddq_n_s])
1182*0bfacb9bSmrg;;
1183*0bfacb9bSmrg(define_insn "mve_vhaddq_n_<supf><mode>"
1184*0bfacb9bSmrg  [
1185*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1186*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1187*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
1188*0bfacb9bSmrg	 VHADDQ_N))
1189*0bfacb9bSmrg  ]
1190*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1191*0bfacb9bSmrg  "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1192*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1193*0bfacb9bSmrg])
1194*0bfacb9bSmrg
1195*0bfacb9bSmrg;;
1196*0bfacb9bSmrg;; [vhaddq_s, vhaddq_u])
1197*0bfacb9bSmrg;;
1198*0bfacb9bSmrg(define_insn "mve_vhaddq_<supf><mode>"
1199*0bfacb9bSmrg  [
1200*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1201*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1202*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1203*0bfacb9bSmrg	 VHADDQ))
1204*0bfacb9bSmrg  ]
1205*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1206*0bfacb9bSmrg  "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1207*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1208*0bfacb9bSmrg])
1209*0bfacb9bSmrg
1210*0bfacb9bSmrg;;
1211*0bfacb9bSmrg;; [vhcaddq_rot270_s])
1212*0bfacb9bSmrg;;
1213*0bfacb9bSmrg(define_insn "mve_vhcaddq_rot270_s<mode>"
1214*0bfacb9bSmrg  [
1215*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1216*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1217*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1218*0bfacb9bSmrg	 VHCADDQ_ROT270_S))
1219*0bfacb9bSmrg  ]
1220*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1221*0bfacb9bSmrg  "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1222*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1223*0bfacb9bSmrg])
1224*0bfacb9bSmrg
1225*0bfacb9bSmrg;;
1226*0bfacb9bSmrg;; [vhcaddq_rot90_s])
1227*0bfacb9bSmrg;;
1228*0bfacb9bSmrg(define_insn "mve_vhcaddq_rot90_s<mode>"
1229*0bfacb9bSmrg  [
1230*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1231*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1232*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1233*0bfacb9bSmrg	 VHCADDQ_ROT90_S))
1234*0bfacb9bSmrg  ]
1235*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1236*0bfacb9bSmrg  "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1237*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1238*0bfacb9bSmrg])
1239*0bfacb9bSmrg
1240*0bfacb9bSmrg;;
1241*0bfacb9bSmrg;; [vhsubq_n_u, vhsubq_n_s])
1242*0bfacb9bSmrg;;
1243*0bfacb9bSmrg(define_insn "mve_vhsubq_n_<supf><mode>"
1244*0bfacb9bSmrg  [
1245*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1246*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1247*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
1248*0bfacb9bSmrg	 VHSUBQ_N))
1249*0bfacb9bSmrg  ]
1250*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1251*0bfacb9bSmrg  "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1252*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1253*0bfacb9bSmrg])
1254*0bfacb9bSmrg
1255*0bfacb9bSmrg;;
1256*0bfacb9bSmrg;; [vhsubq_s, vhsubq_u])
1257*0bfacb9bSmrg;;
1258*0bfacb9bSmrg(define_insn "mve_vhsubq_<supf><mode>"
1259*0bfacb9bSmrg  [
1260*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1261*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1262*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1263*0bfacb9bSmrg	 VHSUBQ))
1264*0bfacb9bSmrg  ]
1265*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1266*0bfacb9bSmrg  "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1267*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1268*0bfacb9bSmrg])
1269*0bfacb9bSmrg
1270*0bfacb9bSmrg;;
1271*0bfacb9bSmrg;; [vmaxaq_s])
1272*0bfacb9bSmrg;;
1273*0bfacb9bSmrg(define_insn "mve_vmaxaq_s<mode>"
1274*0bfacb9bSmrg  [
1275*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1276*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1277*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1278*0bfacb9bSmrg	 VMAXAQ_S))
1279*0bfacb9bSmrg  ]
1280*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1281*0bfacb9bSmrg  "vmaxa.s%#<V_sz_elem>	%q0, %q2"
1282*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1283*0bfacb9bSmrg])
1284*0bfacb9bSmrg
1285*0bfacb9bSmrg;;
1286*0bfacb9bSmrg;; [vmaxavq_s])
1287*0bfacb9bSmrg;;
1288*0bfacb9bSmrg(define_insn "mve_vmaxavq_s<mode>"
1289*0bfacb9bSmrg  [
1290*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1291*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1292*0bfacb9bSmrg			  (match_operand:MVE_2 2 "s_register_operand" "w")]
1293*0bfacb9bSmrg	 VMAXAVQ_S))
1294*0bfacb9bSmrg  ]
1295*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1296*0bfacb9bSmrg  "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1297*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1298*0bfacb9bSmrg])
1299*0bfacb9bSmrg
1300*0bfacb9bSmrg;;
1301*0bfacb9bSmrg;; [vmaxq_u, vmaxq_s])
1302*0bfacb9bSmrg;;
1303*0bfacb9bSmrg(define_insn "mve_vmaxq_<supf><mode>"
1304*0bfacb9bSmrg  [
1305*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1306*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1307*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1308*0bfacb9bSmrg	 VMAXQ))
1309*0bfacb9bSmrg  ]
1310*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1311*0bfacb9bSmrg  "vmax.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1312*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1313*0bfacb9bSmrg])
1314*0bfacb9bSmrg
1315*0bfacb9bSmrg;;
1316*0bfacb9bSmrg;; [vmaxvq_u, vmaxvq_s])
1317*0bfacb9bSmrg;;
1318*0bfacb9bSmrg(define_insn "mve_vmaxvq_<supf><mode>"
1319*0bfacb9bSmrg  [
1320*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1321*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1322*0bfacb9bSmrg			  (match_operand:MVE_2 2 "s_register_operand" "w")]
1323*0bfacb9bSmrg	 VMAXVQ))
1324*0bfacb9bSmrg  ]
1325*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1326*0bfacb9bSmrg  "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1327*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1328*0bfacb9bSmrg])
1329*0bfacb9bSmrg
1330*0bfacb9bSmrg;;
1331*0bfacb9bSmrg;; [vminaq_s])
1332*0bfacb9bSmrg;;
1333*0bfacb9bSmrg(define_insn "mve_vminaq_s<mode>"
1334*0bfacb9bSmrg  [
1335*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1336*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1337*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1338*0bfacb9bSmrg	 VMINAQ_S))
1339*0bfacb9bSmrg  ]
1340*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1341*0bfacb9bSmrg  "vmina.s%#<V_sz_elem>\t%q0, %q2"
1342*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1343*0bfacb9bSmrg])
1344*0bfacb9bSmrg
1345*0bfacb9bSmrg;;
1346*0bfacb9bSmrg;; [vminavq_s])
1347*0bfacb9bSmrg;;
1348*0bfacb9bSmrg(define_insn "mve_vminavq_s<mode>"
1349*0bfacb9bSmrg  [
1350*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1351*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1352*0bfacb9bSmrg			  (match_operand:MVE_2 2 "s_register_operand" "w")]
1353*0bfacb9bSmrg	 VMINAVQ_S))
1354*0bfacb9bSmrg  ]
1355*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1356*0bfacb9bSmrg  "vminav.s%#<V_sz_elem>\t%0, %q2"
1357*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1358*0bfacb9bSmrg])
1359*0bfacb9bSmrg
1360*0bfacb9bSmrg;;
1361*0bfacb9bSmrg;; [vminq_s, vminq_u])
1362*0bfacb9bSmrg;;
1363*0bfacb9bSmrg(define_insn "mve_vminq_<supf><mode>"
1364*0bfacb9bSmrg  [
1365*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1366*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1367*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1368*0bfacb9bSmrg	 VMINQ))
1369*0bfacb9bSmrg  ]
1370*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1371*0bfacb9bSmrg  "vmin.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1372*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1373*0bfacb9bSmrg])
1374*0bfacb9bSmrg
1375*0bfacb9bSmrg;;
1376*0bfacb9bSmrg;; [vminvq_u, vminvq_s])
1377*0bfacb9bSmrg;;
1378*0bfacb9bSmrg(define_insn "mve_vminvq_<supf><mode>"
1379*0bfacb9bSmrg  [
1380*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1381*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1382*0bfacb9bSmrg			  (match_operand:MVE_2 2 "s_register_operand" "w")]
1383*0bfacb9bSmrg	 VMINVQ))
1384*0bfacb9bSmrg  ]
1385*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1386*0bfacb9bSmrg  "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
1387*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1388*0bfacb9bSmrg])
1389*0bfacb9bSmrg
1390*0bfacb9bSmrg;;
1391*0bfacb9bSmrg;; [vmladavq_u, vmladavq_s])
1392*0bfacb9bSmrg;;
1393*0bfacb9bSmrg(define_insn "mve_vmladavq_<supf><mode>"
1394*0bfacb9bSmrg  [
1395*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
1396*0bfacb9bSmrg	(unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1397*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
1398*0bfacb9bSmrg	 VMLADAVQ))
1399*0bfacb9bSmrg  ]
1400*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1401*0bfacb9bSmrg  "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
1402*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1403*0bfacb9bSmrg])
1404*0bfacb9bSmrg
1405*0bfacb9bSmrg;;
1406*0bfacb9bSmrg;; [vmladavxq_s])
1407*0bfacb9bSmrg;;
1408*0bfacb9bSmrg(define_insn "mve_vmladavxq_s<mode>"
1409*0bfacb9bSmrg  [
1410*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
1411*0bfacb9bSmrg	(unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1412*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
1413*0bfacb9bSmrg	 VMLADAVXQ_S))
1414*0bfacb9bSmrg  ]
1415*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1416*0bfacb9bSmrg  "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1417*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1418*0bfacb9bSmrg])
1419*0bfacb9bSmrg
1420*0bfacb9bSmrg;;
1421*0bfacb9bSmrg;; [vmlsdavq_s])
1422*0bfacb9bSmrg;;
1423*0bfacb9bSmrg(define_insn "mve_vmlsdavq_s<mode>"
1424*0bfacb9bSmrg  [
1425*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
1426*0bfacb9bSmrg	(unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1427*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
1428*0bfacb9bSmrg	 VMLSDAVQ_S))
1429*0bfacb9bSmrg  ]
1430*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1431*0bfacb9bSmrg  "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
1432*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1433*0bfacb9bSmrg])
1434*0bfacb9bSmrg
1435*0bfacb9bSmrg;;
1436*0bfacb9bSmrg;; [vmlsdavxq_s])
1437*0bfacb9bSmrg;;
1438*0bfacb9bSmrg(define_insn "mve_vmlsdavxq_s<mode>"
1439*0bfacb9bSmrg  [
1440*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
1441*0bfacb9bSmrg	(unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1442*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")]
1443*0bfacb9bSmrg	 VMLSDAVXQ_S))
1444*0bfacb9bSmrg  ]
1445*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1446*0bfacb9bSmrg  "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1447*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1448*0bfacb9bSmrg])
1449*0bfacb9bSmrg
1450*0bfacb9bSmrg;;
1451*0bfacb9bSmrg;; [vmulhq_s, vmulhq_u])
1452*0bfacb9bSmrg;;
1453*0bfacb9bSmrg(define_insn "mve_vmulhq_<supf><mode>"
1454*0bfacb9bSmrg  [
1455*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1456*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1457*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1458*0bfacb9bSmrg	 VMULHQ))
1459*0bfacb9bSmrg  ]
1460*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1461*0bfacb9bSmrg  "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1462*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1463*0bfacb9bSmrg])
1464*0bfacb9bSmrg
1465*0bfacb9bSmrg;;
1466*0bfacb9bSmrg;; [vmullbq_int_u, vmullbq_int_s])
1467*0bfacb9bSmrg;;
1468*0bfacb9bSmrg(define_insn "mve_vmullbq_int_<supf><mode>"
1469*0bfacb9bSmrg  [
1470*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1471*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1472*0bfacb9bSmrg				  (match_operand:MVE_2 2 "s_register_operand" "w")]
1473*0bfacb9bSmrg	 VMULLBQ_INT))
1474*0bfacb9bSmrg  ]
1475*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1476*0bfacb9bSmrg  "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1477*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1478*0bfacb9bSmrg])
1479*0bfacb9bSmrg
1480*0bfacb9bSmrg;;
1481*0bfacb9bSmrg;; [vmulltq_int_u, vmulltq_int_s])
1482*0bfacb9bSmrg;;
1483*0bfacb9bSmrg(define_insn "mve_vmulltq_int_<supf><mode>"
1484*0bfacb9bSmrg  [
1485*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
1486*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1487*0bfacb9bSmrg				  (match_operand:MVE_2 2 "s_register_operand" "w")]
1488*0bfacb9bSmrg	 VMULLTQ_INT))
1489*0bfacb9bSmrg  ]
1490*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1491*0bfacb9bSmrg  "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1492*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1493*0bfacb9bSmrg])
1494*0bfacb9bSmrg
1495*0bfacb9bSmrg;;
1496*0bfacb9bSmrg;; [vmulq_n_u, vmulq_n_s])
1497*0bfacb9bSmrg;;
1498*0bfacb9bSmrg(define_insn "mve_vmulq_n_<supf><mode>"
1499*0bfacb9bSmrg  [
1500*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1501*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1502*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
1503*0bfacb9bSmrg	 VMULQ_N))
1504*0bfacb9bSmrg  ]
1505*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1506*0bfacb9bSmrg  "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
1507*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1508*0bfacb9bSmrg])
1509*0bfacb9bSmrg
1510*0bfacb9bSmrg;;
1511*0bfacb9bSmrg;; [vmulq_u, vmulq_s])
1512*0bfacb9bSmrg;;
1513*0bfacb9bSmrg(define_insn "mve_vmulq_<supf><mode>"
1514*0bfacb9bSmrg  [
1515*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1516*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1517*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1518*0bfacb9bSmrg	 VMULQ))
1519*0bfacb9bSmrg  ]
1520*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1521*0bfacb9bSmrg  "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1522*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1523*0bfacb9bSmrg])
1524*0bfacb9bSmrg
1525*0bfacb9bSmrg;;
1526*0bfacb9bSmrg;; [vornq_u, vornq_s])
1527*0bfacb9bSmrg;;
1528*0bfacb9bSmrg(define_insn "mve_vornq_<supf><mode>"
1529*0bfacb9bSmrg  [
1530*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1531*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1532*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1533*0bfacb9bSmrg	 VORNQ))
1534*0bfacb9bSmrg  ]
1535*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1536*0bfacb9bSmrg  "vorn %q0, %q1, %q2"
1537*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1538*0bfacb9bSmrg])
1539*0bfacb9bSmrg
1540*0bfacb9bSmrg;;
1541*0bfacb9bSmrg;; [vorrq_s, vorrq_u])
1542*0bfacb9bSmrg;;
1543*0bfacb9bSmrg(define_insn "mve_vorrq_<supf><mode>"
1544*0bfacb9bSmrg  [
1545*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1546*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1547*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1548*0bfacb9bSmrg	 VORRQ))
1549*0bfacb9bSmrg  ]
1550*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1551*0bfacb9bSmrg  "vorr %q0, %q1, %q2"
1552*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1553*0bfacb9bSmrg])
1554*0bfacb9bSmrg
1555*0bfacb9bSmrg;;
1556*0bfacb9bSmrg;; [vqaddq_n_s, vqaddq_n_u])
1557*0bfacb9bSmrg;;
1558*0bfacb9bSmrg(define_insn "mve_vqaddq_n_<supf><mode>"
1559*0bfacb9bSmrg  [
1560*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1561*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1562*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
1563*0bfacb9bSmrg	 VQADDQ_N))
1564*0bfacb9bSmrg  ]
1565*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1566*0bfacb9bSmrg  "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1567*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1568*0bfacb9bSmrg])
1569*0bfacb9bSmrg
1570*0bfacb9bSmrg;;
1571*0bfacb9bSmrg;; [vqaddq_u, vqaddq_s])
1572*0bfacb9bSmrg;;
1573*0bfacb9bSmrg(define_insn "mve_vqaddq_<supf><mode>"
1574*0bfacb9bSmrg  [
1575*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1576*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1577*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1578*0bfacb9bSmrg	 VQADDQ))
1579*0bfacb9bSmrg  ]
1580*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1581*0bfacb9bSmrg  "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1582*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1583*0bfacb9bSmrg])
1584*0bfacb9bSmrg
1585*0bfacb9bSmrg;;
1586*0bfacb9bSmrg;; [vqdmulhq_n_s])
1587*0bfacb9bSmrg;;
1588*0bfacb9bSmrg(define_insn "mve_vqdmulhq_n_s<mode>"
1589*0bfacb9bSmrg  [
1590*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1591*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1592*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
1593*0bfacb9bSmrg	 VQDMULHQ_N_S))
1594*0bfacb9bSmrg  ]
1595*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1596*0bfacb9bSmrg  "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1597*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1598*0bfacb9bSmrg])
1599*0bfacb9bSmrg
1600*0bfacb9bSmrg;;
1601*0bfacb9bSmrg;; [vqdmulhq_s])
1602*0bfacb9bSmrg;;
1603*0bfacb9bSmrg(define_insn "mve_vqdmulhq_s<mode>"
1604*0bfacb9bSmrg  [
1605*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1606*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1607*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1608*0bfacb9bSmrg	 VQDMULHQ_S))
1609*0bfacb9bSmrg  ]
1610*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1611*0bfacb9bSmrg  "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1612*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1613*0bfacb9bSmrg])
1614*0bfacb9bSmrg
1615*0bfacb9bSmrg;;
1616*0bfacb9bSmrg;; [vqrdmulhq_n_s])
1617*0bfacb9bSmrg;;
1618*0bfacb9bSmrg(define_insn "mve_vqrdmulhq_n_s<mode>"
1619*0bfacb9bSmrg  [
1620*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1621*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1622*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
1623*0bfacb9bSmrg	 VQRDMULHQ_N_S))
1624*0bfacb9bSmrg  ]
1625*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1626*0bfacb9bSmrg  "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1627*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1628*0bfacb9bSmrg])
1629*0bfacb9bSmrg
1630*0bfacb9bSmrg;;
1631*0bfacb9bSmrg;; [vqrdmulhq_s])
1632*0bfacb9bSmrg;;
1633*0bfacb9bSmrg(define_insn "mve_vqrdmulhq_s<mode>"
1634*0bfacb9bSmrg  [
1635*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1636*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1637*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1638*0bfacb9bSmrg	 VQRDMULHQ_S))
1639*0bfacb9bSmrg  ]
1640*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1641*0bfacb9bSmrg  "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1642*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1643*0bfacb9bSmrg])
1644*0bfacb9bSmrg
1645*0bfacb9bSmrg;;
1646*0bfacb9bSmrg;; [vqrshlq_n_s, vqrshlq_n_u])
1647*0bfacb9bSmrg;;
1648*0bfacb9bSmrg(define_insn "mve_vqrshlq_n_<supf><mode>"
1649*0bfacb9bSmrg  [
1650*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1651*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1652*0bfacb9bSmrg		       (match_operand:SI 2 "s_register_operand" "r")]
1653*0bfacb9bSmrg	 VQRSHLQ_N))
1654*0bfacb9bSmrg  ]
1655*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1656*0bfacb9bSmrg  "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1657*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1658*0bfacb9bSmrg])
1659*0bfacb9bSmrg
1660*0bfacb9bSmrg;;
1661*0bfacb9bSmrg;; [vqrshlq_s, vqrshlq_u])
1662*0bfacb9bSmrg;;
1663*0bfacb9bSmrg(define_insn "mve_vqrshlq_<supf><mode>"
1664*0bfacb9bSmrg  [
1665*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1666*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1667*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1668*0bfacb9bSmrg	 VQRSHLQ))
1669*0bfacb9bSmrg  ]
1670*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1671*0bfacb9bSmrg  "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1672*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1673*0bfacb9bSmrg])
1674*0bfacb9bSmrg
1675*0bfacb9bSmrg;;
1676*0bfacb9bSmrg;; [vqshlq_n_s, vqshlq_n_u])
1677*0bfacb9bSmrg;;
1678*0bfacb9bSmrg(define_insn "mve_vqshlq_n_<supf><mode>"
1679*0bfacb9bSmrg  [
1680*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1681*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1682*0bfacb9bSmrg		       (match_operand:SI 2 "immediate_operand" "i")]
1683*0bfacb9bSmrg	 VQSHLQ_N))
1684*0bfacb9bSmrg  ]
1685*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1686*0bfacb9bSmrg  "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1687*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1688*0bfacb9bSmrg])
1689*0bfacb9bSmrg
1690*0bfacb9bSmrg;;
1691*0bfacb9bSmrg;; [vqshlq_r_u, vqshlq_r_s])
1692*0bfacb9bSmrg;;
1693*0bfacb9bSmrg(define_insn "mve_vqshlq_r_<supf><mode>"
1694*0bfacb9bSmrg  [
1695*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1696*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1697*0bfacb9bSmrg		       (match_operand:SI 2 "s_register_operand" "r")]
1698*0bfacb9bSmrg	 VQSHLQ_R))
1699*0bfacb9bSmrg  ]
1700*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1701*0bfacb9bSmrg  "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
1702*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1703*0bfacb9bSmrg])
1704*0bfacb9bSmrg
1705*0bfacb9bSmrg;;
1706*0bfacb9bSmrg;; [vqshlq_s, vqshlq_u])
1707*0bfacb9bSmrg;;
1708*0bfacb9bSmrg(define_insn "mve_vqshlq_<supf><mode>"
1709*0bfacb9bSmrg  [
1710*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1711*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1712*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1713*0bfacb9bSmrg	 VQSHLQ))
1714*0bfacb9bSmrg  ]
1715*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1716*0bfacb9bSmrg  "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1717*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1718*0bfacb9bSmrg])
1719*0bfacb9bSmrg
1720*0bfacb9bSmrg;;
1721*0bfacb9bSmrg;; [vqshluq_n_s])
1722*0bfacb9bSmrg;;
1723*0bfacb9bSmrg(define_insn "mve_vqshluq_n_s<mode>"
1724*0bfacb9bSmrg  [
1725*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1726*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1727*0bfacb9bSmrg		       (match_operand:SI 2 "mve_imm_7" "Ra")]
1728*0bfacb9bSmrg	 VQSHLUQ_N_S))
1729*0bfacb9bSmrg  ]
1730*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1731*0bfacb9bSmrg  "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
1732*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1733*0bfacb9bSmrg])
1734*0bfacb9bSmrg
1735*0bfacb9bSmrg;;
1736*0bfacb9bSmrg;; [vqsubq_n_s, vqsubq_n_u])
1737*0bfacb9bSmrg;;
1738*0bfacb9bSmrg(define_insn "mve_vqsubq_n_<supf><mode>"
1739*0bfacb9bSmrg  [
1740*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1741*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1742*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
1743*0bfacb9bSmrg	 VQSUBQ_N))
1744*0bfacb9bSmrg  ]
1745*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1746*0bfacb9bSmrg  "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1747*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1748*0bfacb9bSmrg])
1749*0bfacb9bSmrg
1750*0bfacb9bSmrg;;
1751*0bfacb9bSmrg;; [vqsubq_u, vqsubq_s])
1752*0bfacb9bSmrg;;
1753*0bfacb9bSmrg(define_insn "mve_vqsubq_<supf><mode>"
1754*0bfacb9bSmrg  [
1755*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1756*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1757*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1758*0bfacb9bSmrg	 VQSUBQ))
1759*0bfacb9bSmrg  ]
1760*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1761*0bfacb9bSmrg  "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1762*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1763*0bfacb9bSmrg])
1764*0bfacb9bSmrg
1765*0bfacb9bSmrg;;
1766*0bfacb9bSmrg;; [vrhaddq_s, vrhaddq_u])
1767*0bfacb9bSmrg;;
1768*0bfacb9bSmrg(define_insn "mve_vrhaddq_<supf><mode>"
1769*0bfacb9bSmrg  [
1770*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1771*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1772*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1773*0bfacb9bSmrg	 VRHADDQ))
1774*0bfacb9bSmrg  ]
1775*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1776*0bfacb9bSmrg  "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1777*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1778*0bfacb9bSmrg])
1779*0bfacb9bSmrg
1780*0bfacb9bSmrg;;
1781*0bfacb9bSmrg;; [vrmulhq_s, vrmulhq_u])
1782*0bfacb9bSmrg;;
1783*0bfacb9bSmrg(define_insn "mve_vrmulhq_<supf><mode>"
1784*0bfacb9bSmrg  [
1785*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1786*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1787*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1788*0bfacb9bSmrg	 VRMULHQ))
1789*0bfacb9bSmrg  ]
1790*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1791*0bfacb9bSmrg  "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1792*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1793*0bfacb9bSmrg])
1794*0bfacb9bSmrg
1795*0bfacb9bSmrg;;
1796*0bfacb9bSmrg;; [vrshlq_n_u, vrshlq_n_s])
1797*0bfacb9bSmrg;;
1798*0bfacb9bSmrg(define_insn "mve_vrshlq_n_<supf><mode>"
1799*0bfacb9bSmrg  [
1800*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1801*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1802*0bfacb9bSmrg		       (match_operand:SI 2 "s_register_operand" "r")]
1803*0bfacb9bSmrg	 VRSHLQ_N))
1804*0bfacb9bSmrg  ]
1805*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1806*0bfacb9bSmrg  "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1807*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1808*0bfacb9bSmrg])
1809*0bfacb9bSmrg
1810*0bfacb9bSmrg;;
1811*0bfacb9bSmrg;; [vrshlq_s, vrshlq_u])
1812*0bfacb9bSmrg;;
1813*0bfacb9bSmrg(define_insn "mve_vrshlq_<supf><mode>"
1814*0bfacb9bSmrg  [
1815*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1816*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1817*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1818*0bfacb9bSmrg	 VRSHLQ))
1819*0bfacb9bSmrg  ]
1820*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1821*0bfacb9bSmrg  "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1822*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1823*0bfacb9bSmrg])
1824*0bfacb9bSmrg
1825*0bfacb9bSmrg;;
1826*0bfacb9bSmrg;; [vrshrq_n_s, vrshrq_n_u])
1827*0bfacb9bSmrg;;
1828*0bfacb9bSmrg(define_insn "mve_vrshrq_n_<supf><mode>"
1829*0bfacb9bSmrg  [
1830*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1831*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1832*0bfacb9bSmrg		       (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1833*0bfacb9bSmrg	 VRSHRQ_N))
1834*0bfacb9bSmrg  ]
1835*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1836*0bfacb9bSmrg  "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1837*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1838*0bfacb9bSmrg])
1839*0bfacb9bSmrg
1840*0bfacb9bSmrg;;
1841*0bfacb9bSmrg;; [vshlq_n_u, vshlq_n_s])
1842*0bfacb9bSmrg;;
1843*0bfacb9bSmrg(define_insn "mve_vshlq_n_<supf><mode>"
1844*0bfacb9bSmrg  [
1845*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1846*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1847*0bfacb9bSmrg		       (match_operand:SI 2 "immediate_operand" "i")]
1848*0bfacb9bSmrg	 VSHLQ_N))
1849*0bfacb9bSmrg  ]
1850*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1851*0bfacb9bSmrg  "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1852*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1853*0bfacb9bSmrg])
1854*0bfacb9bSmrg
1855*0bfacb9bSmrg;;
1856*0bfacb9bSmrg;; [vshlq_r_s, vshlq_r_u])
1857*0bfacb9bSmrg;;
1858*0bfacb9bSmrg(define_insn "mve_vshlq_r_<supf><mode>"
1859*0bfacb9bSmrg  [
1860*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1861*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1862*0bfacb9bSmrg		       (match_operand:SI 2 "s_register_operand" "r")]
1863*0bfacb9bSmrg	 VSHLQ_R))
1864*0bfacb9bSmrg  ]
1865*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1866*0bfacb9bSmrg  "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
1867*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1868*0bfacb9bSmrg])
1869*0bfacb9bSmrg
1870*0bfacb9bSmrg;;
1871*0bfacb9bSmrg;; [vsubq_n_s, vsubq_n_u])
1872*0bfacb9bSmrg;;
1873*0bfacb9bSmrg(define_insn "mve_vsubq_n_<supf><mode>"
1874*0bfacb9bSmrg  [
1875*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1876*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1877*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
1878*0bfacb9bSmrg	 VSUBQ_N))
1879*0bfacb9bSmrg  ]
1880*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1881*0bfacb9bSmrg  "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
1882*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1883*0bfacb9bSmrg])
1884*0bfacb9bSmrg
1885*0bfacb9bSmrg;;
1886*0bfacb9bSmrg;; [vsubq_s, vsubq_u])
1887*0bfacb9bSmrg;;
1888*0bfacb9bSmrg(define_insn "mve_vsubq_<supf><mode>"
1889*0bfacb9bSmrg  [
1890*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1891*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1892*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
1893*0bfacb9bSmrg	 VSUBQ))
1894*0bfacb9bSmrg  ]
1895*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1896*0bfacb9bSmrg  "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1897*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1898*0bfacb9bSmrg])
1899*0bfacb9bSmrg
1900*0bfacb9bSmrg;;
1901*0bfacb9bSmrg;; [vabdq_f])
1902*0bfacb9bSmrg;;
1903*0bfacb9bSmrg(define_insn "mve_vabdq_f<mode>"
1904*0bfacb9bSmrg  [
1905*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1906*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1907*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
1908*0bfacb9bSmrg	 VABDQ_F))
1909*0bfacb9bSmrg  ]
1910*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1911*0bfacb9bSmrg  "vabd.f%#<V_sz_elem>	%q0, %q1, %q2"
1912*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1913*0bfacb9bSmrg])
1914*0bfacb9bSmrg
1915*0bfacb9bSmrg;;
1916*0bfacb9bSmrg;; [vaddlvaq_s vaddlvaq_u])
1917*0bfacb9bSmrg;;
1918*0bfacb9bSmrg(define_insn "mve_vaddlvaq_<supf>v4si"
1919*0bfacb9bSmrg  [
1920*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
1921*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
1922*0bfacb9bSmrg		    (match_operand:V4SI 2 "s_register_operand" "w")]
1923*0bfacb9bSmrg	 VADDLVAQ))
1924*0bfacb9bSmrg  ]
1925*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1926*0bfacb9bSmrg  "vaddlva.<supf>32 %Q0, %R0, %q2"
1927*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1928*0bfacb9bSmrg])
1929*0bfacb9bSmrg
1930*0bfacb9bSmrg;;
1931*0bfacb9bSmrg;; [vaddq_n_f])
1932*0bfacb9bSmrg;;
1933*0bfacb9bSmrg(define_insn "mve_vaddq_n_f<mode>"
1934*0bfacb9bSmrg  [
1935*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1936*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1937*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
1938*0bfacb9bSmrg	 VADDQ_N_F))
1939*0bfacb9bSmrg  ]
1940*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1941*0bfacb9bSmrg  "vadd.f%#<V_sz_elem>	%q0, %q1, %2"
1942*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1943*0bfacb9bSmrg])
1944*0bfacb9bSmrg
1945*0bfacb9bSmrg;;
1946*0bfacb9bSmrg;; [vandq_f])
1947*0bfacb9bSmrg;;
1948*0bfacb9bSmrg(define_insn "mve_vandq_f<mode>"
1949*0bfacb9bSmrg  [
1950*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1951*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1952*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
1953*0bfacb9bSmrg	 VANDQ_F))
1954*0bfacb9bSmrg  ]
1955*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1956*0bfacb9bSmrg  "vand %q0, %q1, %q2"
1957*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1958*0bfacb9bSmrg])
1959*0bfacb9bSmrg
1960*0bfacb9bSmrg;;
1961*0bfacb9bSmrg;; [vbicq_f])
1962*0bfacb9bSmrg;;
1963*0bfacb9bSmrg(define_insn "mve_vbicq_f<mode>"
1964*0bfacb9bSmrg  [
1965*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1966*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1967*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
1968*0bfacb9bSmrg	 VBICQ_F))
1969*0bfacb9bSmrg  ]
1970*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1971*0bfacb9bSmrg  "vbic %q0, %q1, %q2"
1972*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1973*0bfacb9bSmrg])
1974*0bfacb9bSmrg
1975*0bfacb9bSmrg;;
1976*0bfacb9bSmrg;; [vbicq_n_s, vbicq_n_u])
1977*0bfacb9bSmrg;;
1978*0bfacb9bSmrg(define_insn "mve_vbicq_n_<supf><mode>"
1979*0bfacb9bSmrg  [
1980*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1981*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
1982*0bfacb9bSmrg		       (match_operand:SI 2 "immediate_operand" "i")]
1983*0bfacb9bSmrg	 VBICQ_N))
1984*0bfacb9bSmrg  ]
1985*0bfacb9bSmrg  "TARGET_HAVE_MVE"
1986*0bfacb9bSmrg  "vbic.i%#<V_sz_elem>	%q0, %2"
1987*0bfacb9bSmrg  [(set_attr "type" "mve_move")
1988*0bfacb9bSmrg])
1989*0bfacb9bSmrg
1990*0bfacb9bSmrg;;
1991*0bfacb9bSmrg;; [vcaddq_rot270_f])
1992*0bfacb9bSmrg;;
1993*0bfacb9bSmrg(define_insn "mve_vcaddq_rot270_f<mode>"
1994*0bfacb9bSmrg  [
1995*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
1996*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1997*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
1998*0bfacb9bSmrg	 VCADDQ_ROT270_F))
1999*0bfacb9bSmrg  ]
2000*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2001*0bfacb9bSmrg  "vcadd.f%#<V_sz_elem>	%q0, %q1, %q2, #270"
2002*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2003*0bfacb9bSmrg])
2004*0bfacb9bSmrg
2005*0bfacb9bSmrg;;
2006*0bfacb9bSmrg;; [vcaddq_rot90_f])
2007*0bfacb9bSmrg;;
2008*0bfacb9bSmrg(define_insn "mve_vcaddq_rot90_f<mode>"
2009*0bfacb9bSmrg  [
2010*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2011*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2012*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2013*0bfacb9bSmrg	 VCADDQ_ROT90_F))
2014*0bfacb9bSmrg  ]
2015*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2016*0bfacb9bSmrg  "vcadd.f%#<V_sz_elem>	%q0, %q1, %q2, #90"
2017*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2018*0bfacb9bSmrg])
2019*0bfacb9bSmrg
2020*0bfacb9bSmrg;;
2021*0bfacb9bSmrg;; [vcmpeqq_f])
2022*0bfacb9bSmrg;;
2023*0bfacb9bSmrg(define_insn "mve_vcmpeqq_f<mode>"
2024*0bfacb9bSmrg  [
2025*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2026*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2027*0bfacb9bSmrg		    (match_operand:MVE_0 2 "s_register_operand" "w")]
2028*0bfacb9bSmrg	 VCMPEQQ_F))
2029*0bfacb9bSmrg  ]
2030*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2031*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	eq, %q1, %q2"
2032*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2033*0bfacb9bSmrg])
2034*0bfacb9bSmrg
2035*0bfacb9bSmrg;;
2036*0bfacb9bSmrg;; [vcmpeqq_n_f])
2037*0bfacb9bSmrg;;
2038*0bfacb9bSmrg(define_insn "mve_vcmpeqq_n_f<mode>"
2039*0bfacb9bSmrg  [
2040*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2041*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2042*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
2043*0bfacb9bSmrg	 VCMPEQQ_N_F))
2044*0bfacb9bSmrg  ]
2045*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2046*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	eq, %q1, %2"
2047*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2048*0bfacb9bSmrg])
2049*0bfacb9bSmrg
2050*0bfacb9bSmrg;;
2051*0bfacb9bSmrg;; [vcmpgeq_f])
2052*0bfacb9bSmrg;;
2053*0bfacb9bSmrg(define_insn "mve_vcmpgeq_f<mode>"
2054*0bfacb9bSmrg  [
2055*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2056*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2057*0bfacb9bSmrg		    (match_operand:MVE_0 2 "s_register_operand" "w")]
2058*0bfacb9bSmrg	 VCMPGEQ_F))
2059*0bfacb9bSmrg  ]
2060*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2061*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	ge, %q1, %q2"
2062*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2063*0bfacb9bSmrg])
2064*0bfacb9bSmrg
2065*0bfacb9bSmrg;;
2066*0bfacb9bSmrg;; [vcmpgeq_n_f])
2067*0bfacb9bSmrg;;
2068*0bfacb9bSmrg(define_insn "mve_vcmpgeq_n_f<mode>"
2069*0bfacb9bSmrg  [
2070*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2071*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2072*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
2073*0bfacb9bSmrg	 VCMPGEQ_N_F))
2074*0bfacb9bSmrg  ]
2075*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2076*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	ge, %q1, %2"
2077*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2078*0bfacb9bSmrg])
2079*0bfacb9bSmrg
2080*0bfacb9bSmrg;;
2081*0bfacb9bSmrg;; [vcmpgtq_f])
2082*0bfacb9bSmrg;;
2083*0bfacb9bSmrg(define_insn "mve_vcmpgtq_f<mode>"
2084*0bfacb9bSmrg  [
2085*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2086*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2087*0bfacb9bSmrg		    (match_operand:MVE_0 2 "s_register_operand" "w")]
2088*0bfacb9bSmrg	 VCMPGTQ_F))
2089*0bfacb9bSmrg  ]
2090*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2091*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	gt, %q1, %q2"
2092*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2093*0bfacb9bSmrg])
2094*0bfacb9bSmrg
2095*0bfacb9bSmrg;;
2096*0bfacb9bSmrg;; [vcmpgtq_n_f])
2097*0bfacb9bSmrg;;
2098*0bfacb9bSmrg(define_insn "mve_vcmpgtq_n_f<mode>"
2099*0bfacb9bSmrg  [
2100*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2101*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2102*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
2103*0bfacb9bSmrg	 VCMPGTQ_N_F))
2104*0bfacb9bSmrg  ]
2105*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2106*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	gt, %q1, %2"
2107*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2108*0bfacb9bSmrg])
2109*0bfacb9bSmrg
2110*0bfacb9bSmrg;;
2111*0bfacb9bSmrg;; [vcmpleq_f])
2112*0bfacb9bSmrg;;
2113*0bfacb9bSmrg(define_insn "mve_vcmpleq_f<mode>"
2114*0bfacb9bSmrg  [
2115*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2116*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2117*0bfacb9bSmrg		    (match_operand:MVE_0 2 "s_register_operand" "w")]
2118*0bfacb9bSmrg	 VCMPLEQ_F))
2119*0bfacb9bSmrg  ]
2120*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2121*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	le, %q1, %q2"
2122*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2123*0bfacb9bSmrg])
2124*0bfacb9bSmrg
2125*0bfacb9bSmrg;;
2126*0bfacb9bSmrg;; [vcmpleq_n_f])
2127*0bfacb9bSmrg;;
2128*0bfacb9bSmrg(define_insn "mve_vcmpleq_n_f<mode>"
2129*0bfacb9bSmrg  [
2130*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2131*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2132*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
2133*0bfacb9bSmrg	 VCMPLEQ_N_F))
2134*0bfacb9bSmrg  ]
2135*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2136*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	le, %q1, %2"
2137*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2138*0bfacb9bSmrg])
2139*0bfacb9bSmrg
2140*0bfacb9bSmrg;;
2141*0bfacb9bSmrg;; [vcmpltq_f])
2142*0bfacb9bSmrg;;
2143*0bfacb9bSmrg(define_insn "mve_vcmpltq_f<mode>"
2144*0bfacb9bSmrg  [
2145*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2146*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2147*0bfacb9bSmrg		    (match_operand:MVE_0 2 "s_register_operand" "w")]
2148*0bfacb9bSmrg	 VCMPLTQ_F))
2149*0bfacb9bSmrg  ]
2150*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2151*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	lt, %q1, %q2"
2152*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2153*0bfacb9bSmrg])
2154*0bfacb9bSmrg
2155*0bfacb9bSmrg;;
2156*0bfacb9bSmrg;; [vcmpltq_n_f])
2157*0bfacb9bSmrg;;
2158*0bfacb9bSmrg(define_insn "mve_vcmpltq_n_f<mode>"
2159*0bfacb9bSmrg  [
2160*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2161*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2162*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
2163*0bfacb9bSmrg	 VCMPLTQ_N_F))
2164*0bfacb9bSmrg  ]
2165*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2166*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	lt, %q1, %2"
2167*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2168*0bfacb9bSmrg])
2169*0bfacb9bSmrg
2170*0bfacb9bSmrg;;
2171*0bfacb9bSmrg;; [vcmpneq_f])
2172*0bfacb9bSmrg;;
2173*0bfacb9bSmrg(define_insn "mve_vcmpneq_f<mode>"
2174*0bfacb9bSmrg  [
2175*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2176*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2177*0bfacb9bSmrg		    (match_operand:MVE_0 2 "s_register_operand" "w")]
2178*0bfacb9bSmrg	 VCMPNEQ_F))
2179*0bfacb9bSmrg  ]
2180*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2181*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	ne, %q1, %q2"
2182*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2183*0bfacb9bSmrg])
2184*0bfacb9bSmrg
2185*0bfacb9bSmrg;;
2186*0bfacb9bSmrg;; [vcmpneq_n_f])
2187*0bfacb9bSmrg;;
2188*0bfacb9bSmrg(define_insn "mve_vcmpneq_n_f<mode>"
2189*0bfacb9bSmrg  [
2190*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2191*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2192*0bfacb9bSmrg		    (match_operand:<V_elem> 2 "s_register_operand" "r")]
2193*0bfacb9bSmrg	 VCMPNEQ_N_F))
2194*0bfacb9bSmrg  ]
2195*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2196*0bfacb9bSmrg  "vcmp.f%#<V_sz_elem>	ne, %q1, %2"
2197*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2198*0bfacb9bSmrg])
2199*0bfacb9bSmrg
2200*0bfacb9bSmrg;;
2201*0bfacb9bSmrg;; [vcmulq_f])
2202*0bfacb9bSmrg;;
2203*0bfacb9bSmrg(define_insn "mve_vcmulq_f<mode>"
2204*0bfacb9bSmrg  [
2205*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2206*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2207*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2208*0bfacb9bSmrg	 VCMULQ_F))
2209*0bfacb9bSmrg  ]
2210*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2211*0bfacb9bSmrg  "vcmul.f%#<V_sz_elem>	%q0, %q1, %q2, #0"
2212*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2213*0bfacb9bSmrg])
2214*0bfacb9bSmrg
2215*0bfacb9bSmrg;;
2216*0bfacb9bSmrg;; [vcmulq_rot180_f])
2217*0bfacb9bSmrg;;
2218*0bfacb9bSmrg(define_insn "mve_vcmulq_rot180_f<mode>"
2219*0bfacb9bSmrg  [
2220*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2221*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2222*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2223*0bfacb9bSmrg	 VCMULQ_ROT180_F))
2224*0bfacb9bSmrg  ]
2225*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2226*0bfacb9bSmrg  "vcmul.f%#<V_sz_elem>	%q0, %q1, %q2, #180"
2227*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2228*0bfacb9bSmrg])
2229*0bfacb9bSmrg
2230*0bfacb9bSmrg;;
2231*0bfacb9bSmrg;; [vcmulq_rot270_f])
2232*0bfacb9bSmrg;;
2233*0bfacb9bSmrg(define_insn "mve_vcmulq_rot270_f<mode>"
2234*0bfacb9bSmrg  [
2235*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2236*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2237*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2238*0bfacb9bSmrg	 VCMULQ_ROT270_F))
2239*0bfacb9bSmrg  ]
2240*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2241*0bfacb9bSmrg  "vcmul.f%#<V_sz_elem>	%q0, %q1, %q2, #270"
2242*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2243*0bfacb9bSmrg])
2244*0bfacb9bSmrg
2245*0bfacb9bSmrg;;
2246*0bfacb9bSmrg;; [vcmulq_rot90_f])
2247*0bfacb9bSmrg;;
2248*0bfacb9bSmrg(define_insn "mve_vcmulq_rot90_f<mode>"
2249*0bfacb9bSmrg  [
2250*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2251*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2252*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2253*0bfacb9bSmrg	 VCMULQ_ROT90_F))
2254*0bfacb9bSmrg  ]
2255*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2256*0bfacb9bSmrg  "vcmul.f%#<V_sz_elem>	%q0, %q1, %q2, #90"
2257*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2258*0bfacb9bSmrg])
2259*0bfacb9bSmrg
2260*0bfacb9bSmrg;;
2261*0bfacb9bSmrg;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
2262*0bfacb9bSmrg;;
2263*0bfacb9bSmrg(define_insn "mve_vctp<mode1>q_mhi"
2264*0bfacb9bSmrg  [
2265*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2266*0bfacb9bSmrg	(unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
2267*0bfacb9bSmrg		    (match_operand:HI 2 "vpr_register_operand" "Up")]
2268*0bfacb9bSmrg	 VCTPQ_M))
2269*0bfacb9bSmrg  ]
2270*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2271*0bfacb9bSmrg  "vpst\;vctpt.<mode1> %1"
2272*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2273*0bfacb9bSmrg   (set_attr "length""8")])
2274*0bfacb9bSmrg
2275*0bfacb9bSmrg;;
2276*0bfacb9bSmrg;; [vcvtbq_f16_f32])
2277*0bfacb9bSmrg;;
2278*0bfacb9bSmrg(define_insn "mve_vcvtbq_f16_f32v8hf"
2279*0bfacb9bSmrg  [
2280*0bfacb9bSmrg   (set (match_operand:V8HF 0 "s_register_operand" "=w")
2281*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2282*0bfacb9bSmrg		      (match_operand:V4SF 2 "s_register_operand" "w")]
2283*0bfacb9bSmrg	 VCVTBQ_F16_F32))
2284*0bfacb9bSmrg  ]
2285*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2286*0bfacb9bSmrg  "vcvtb.f16.f32 %q0, %q2"
2287*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2288*0bfacb9bSmrg])
2289*0bfacb9bSmrg
2290*0bfacb9bSmrg;;
2291*0bfacb9bSmrg;; [vcvttq_f16_f32])
2292*0bfacb9bSmrg;;
2293*0bfacb9bSmrg(define_insn "mve_vcvttq_f16_f32v8hf"
2294*0bfacb9bSmrg  [
2295*0bfacb9bSmrg   (set (match_operand:V8HF 0 "s_register_operand" "=w")
2296*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2297*0bfacb9bSmrg		      (match_operand:V4SF 2 "s_register_operand" "w")]
2298*0bfacb9bSmrg	 VCVTTQ_F16_F32))
2299*0bfacb9bSmrg  ]
2300*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2301*0bfacb9bSmrg  "vcvtt.f16.f32 %q0, %q2"
2302*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2303*0bfacb9bSmrg])
2304*0bfacb9bSmrg
2305*0bfacb9bSmrg;;
2306*0bfacb9bSmrg;; [veorq_f])
2307*0bfacb9bSmrg;;
2308*0bfacb9bSmrg(define_insn "mve_veorq_f<mode>"
2309*0bfacb9bSmrg  [
2310*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2311*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2312*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2313*0bfacb9bSmrg	 VEORQ_F))
2314*0bfacb9bSmrg  ]
2315*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2316*0bfacb9bSmrg  "veor %q0, %q1, %q2"
2317*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2318*0bfacb9bSmrg])
2319*0bfacb9bSmrg
2320*0bfacb9bSmrg;;
2321*0bfacb9bSmrg;; [vmaxnmaq_f])
2322*0bfacb9bSmrg;;
2323*0bfacb9bSmrg(define_insn "mve_vmaxnmaq_f<mode>"
2324*0bfacb9bSmrg  [
2325*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2326*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2327*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2328*0bfacb9bSmrg	 VMAXNMAQ_F))
2329*0bfacb9bSmrg  ]
2330*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2331*0bfacb9bSmrg  "vmaxnma.f%#<V_sz_elem>	%q0, %q2"
2332*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2333*0bfacb9bSmrg])
2334*0bfacb9bSmrg
2335*0bfacb9bSmrg;;
2336*0bfacb9bSmrg;; [vmaxnmavq_f])
2337*0bfacb9bSmrg;;
2338*0bfacb9bSmrg(define_insn "mve_vmaxnmavq_f<mode>"
2339*0bfacb9bSmrg  [
2340*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2341*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2342*0bfacb9bSmrg			  (match_operand:MVE_0 2 "s_register_operand" "w")]
2343*0bfacb9bSmrg	 VMAXNMAVQ_F))
2344*0bfacb9bSmrg  ]
2345*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2346*0bfacb9bSmrg  "vmaxnmav.f%#<V_sz_elem>	%0, %q2"
2347*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2348*0bfacb9bSmrg])
2349*0bfacb9bSmrg
2350*0bfacb9bSmrg;;
2351*0bfacb9bSmrg;; [vmaxnmq_f])
2352*0bfacb9bSmrg;;
2353*0bfacb9bSmrg(define_insn "mve_vmaxnmq_f<mode>"
2354*0bfacb9bSmrg  [
2355*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2356*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2357*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2358*0bfacb9bSmrg	 VMAXNMQ_F))
2359*0bfacb9bSmrg  ]
2360*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2361*0bfacb9bSmrg  "vmaxnm.f%#<V_sz_elem>	%q0, %q1, %q2"
2362*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2363*0bfacb9bSmrg])
2364*0bfacb9bSmrg
2365*0bfacb9bSmrg;;
2366*0bfacb9bSmrg;; [vmaxnmvq_f])
2367*0bfacb9bSmrg;;
2368*0bfacb9bSmrg(define_insn "mve_vmaxnmvq_f<mode>"
2369*0bfacb9bSmrg  [
2370*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2371*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2372*0bfacb9bSmrg			  (match_operand:MVE_0 2 "s_register_operand" "w")]
2373*0bfacb9bSmrg	 VMAXNMVQ_F))
2374*0bfacb9bSmrg  ]
2375*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2376*0bfacb9bSmrg  "vmaxnmv.f%#<V_sz_elem>	%0, %q2"
2377*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2378*0bfacb9bSmrg])
2379*0bfacb9bSmrg
2380*0bfacb9bSmrg;;
2381*0bfacb9bSmrg;; [vminnmaq_f])
2382*0bfacb9bSmrg;;
2383*0bfacb9bSmrg(define_insn "mve_vminnmaq_f<mode>"
2384*0bfacb9bSmrg  [
2385*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2386*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2387*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2388*0bfacb9bSmrg	 VMINNMAQ_F))
2389*0bfacb9bSmrg  ]
2390*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2391*0bfacb9bSmrg  "vminnma.f%#<V_sz_elem>	%q0, %q2"
2392*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2393*0bfacb9bSmrg])
2394*0bfacb9bSmrg
2395*0bfacb9bSmrg;;
2396*0bfacb9bSmrg;; [vminnmavq_f])
2397*0bfacb9bSmrg;;
2398*0bfacb9bSmrg(define_insn "mve_vminnmavq_f<mode>"
2399*0bfacb9bSmrg  [
2400*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2401*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2402*0bfacb9bSmrg			  (match_operand:MVE_0 2 "s_register_operand" "w")]
2403*0bfacb9bSmrg	 VMINNMAVQ_F))
2404*0bfacb9bSmrg  ]
2405*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2406*0bfacb9bSmrg  "vminnmav.f%#<V_sz_elem>	%0, %q2"
2407*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2408*0bfacb9bSmrg])
2409*0bfacb9bSmrg
2410*0bfacb9bSmrg;;
2411*0bfacb9bSmrg;; [vminnmq_f])
2412*0bfacb9bSmrg;;
2413*0bfacb9bSmrg(define_insn "mve_vminnmq_f<mode>"
2414*0bfacb9bSmrg  [
2415*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2416*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2417*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2418*0bfacb9bSmrg	 VMINNMQ_F))
2419*0bfacb9bSmrg  ]
2420*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2421*0bfacb9bSmrg  "vminnm.f%#<V_sz_elem>	%q0, %q1, %q2"
2422*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2423*0bfacb9bSmrg])
2424*0bfacb9bSmrg
2425*0bfacb9bSmrg;;
2426*0bfacb9bSmrg;; [vminnmvq_f])
2427*0bfacb9bSmrg;;
2428*0bfacb9bSmrg(define_insn "mve_vminnmvq_f<mode>"
2429*0bfacb9bSmrg  [
2430*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2431*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2432*0bfacb9bSmrg			  (match_operand:MVE_0 2 "s_register_operand" "w")]
2433*0bfacb9bSmrg	 VMINNMVQ_F))
2434*0bfacb9bSmrg  ]
2435*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2436*0bfacb9bSmrg  "vminnmv.f%#<V_sz_elem>	%0, %q2"
2437*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2438*0bfacb9bSmrg])
2439*0bfacb9bSmrg
2440*0bfacb9bSmrg;;
2441*0bfacb9bSmrg;; [vmlaldavq_u, vmlaldavq_s])
2442*0bfacb9bSmrg;;
2443*0bfacb9bSmrg(define_insn "mve_vmlaldavq_<supf><mode>"
2444*0bfacb9bSmrg  [
2445*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
2446*0bfacb9bSmrg	(unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2447*0bfacb9bSmrg		    (match_operand:MVE_5 2 "s_register_operand" "w")]
2448*0bfacb9bSmrg	 VMLALDAVQ))
2449*0bfacb9bSmrg  ]
2450*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2451*0bfacb9bSmrg  "vmlaldav.<supf>%#<V_sz_elem>	%Q0, %R0, %q1, %q2"
2452*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2453*0bfacb9bSmrg])
2454*0bfacb9bSmrg
2455*0bfacb9bSmrg;;
2456*0bfacb9bSmrg;; [vmlaldavxq_s])
2457*0bfacb9bSmrg;;
2458*0bfacb9bSmrg(define_insn "mve_vmlaldavxq_s<mode>"
2459*0bfacb9bSmrg  [
2460*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
2461*0bfacb9bSmrg	(unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2462*0bfacb9bSmrg		    (match_operand:MVE_5 2 "s_register_operand" "w")]
2463*0bfacb9bSmrg	 VMLALDAVXQ_S))
2464*0bfacb9bSmrg  ]
2465*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2466*0bfacb9bSmrg  "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2467*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2468*0bfacb9bSmrg])
2469*0bfacb9bSmrg
2470*0bfacb9bSmrg;;
2471*0bfacb9bSmrg;; [vmlsldavq_s])
2472*0bfacb9bSmrg;;
2473*0bfacb9bSmrg(define_insn "mve_vmlsldavq_s<mode>"
2474*0bfacb9bSmrg  [
2475*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
2476*0bfacb9bSmrg	(unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2477*0bfacb9bSmrg		    (match_operand:MVE_5 2 "s_register_operand" "w")]
2478*0bfacb9bSmrg	 VMLSLDAVQ_S))
2479*0bfacb9bSmrg  ]
2480*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2481*0bfacb9bSmrg  "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2482*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2483*0bfacb9bSmrg])
2484*0bfacb9bSmrg
2485*0bfacb9bSmrg;;
2486*0bfacb9bSmrg;; [vmlsldavxq_s])
2487*0bfacb9bSmrg;;
2488*0bfacb9bSmrg(define_insn "mve_vmlsldavxq_s<mode>"
2489*0bfacb9bSmrg  [
2490*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
2491*0bfacb9bSmrg	(unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2492*0bfacb9bSmrg		    (match_operand:MVE_5 2 "s_register_operand" "w")]
2493*0bfacb9bSmrg	 VMLSLDAVXQ_S))
2494*0bfacb9bSmrg  ]
2495*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2496*0bfacb9bSmrg  "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2497*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2498*0bfacb9bSmrg])
2499*0bfacb9bSmrg
2500*0bfacb9bSmrg;;
2501*0bfacb9bSmrg;; [vmovnbq_u, vmovnbq_s])
2502*0bfacb9bSmrg;;
2503*0bfacb9bSmrg(define_insn "mve_vmovnbq_<supf><mode>"
2504*0bfacb9bSmrg  [
2505*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2506*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2507*0bfacb9bSmrg				 (match_operand:MVE_5 2 "s_register_operand" "w")]
2508*0bfacb9bSmrg	 VMOVNBQ))
2509*0bfacb9bSmrg  ]
2510*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2511*0bfacb9bSmrg  "vmovnb.i%#<V_sz_elem>	%q0, %q2"
2512*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2513*0bfacb9bSmrg])
2514*0bfacb9bSmrg
2515*0bfacb9bSmrg;;
2516*0bfacb9bSmrg;; [vmovntq_s, vmovntq_u])
2517*0bfacb9bSmrg;;
2518*0bfacb9bSmrg(define_insn "mve_vmovntq_<supf><mode>"
2519*0bfacb9bSmrg  [
2520*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2521*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2522*0bfacb9bSmrg				 (match_operand:MVE_5 2 "s_register_operand" "w")]
2523*0bfacb9bSmrg	 VMOVNTQ))
2524*0bfacb9bSmrg  ]
2525*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2526*0bfacb9bSmrg  "vmovnt.i%#<V_sz_elem>	%q0, %q2"
2527*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2528*0bfacb9bSmrg])
2529*0bfacb9bSmrg
2530*0bfacb9bSmrg;;
2531*0bfacb9bSmrg;; [vmulq_f])
2532*0bfacb9bSmrg;;
2533*0bfacb9bSmrg(define_insn "mve_vmulq_f<mode>"
2534*0bfacb9bSmrg  [
2535*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2536*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2537*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2538*0bfacb9bSmrg	 VMULQ_F))
2539*0bfacb9bSmrg  ]
2540*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2541*0bfacb9bSmrg  "vmul.f%#<V_sz_elem>	%q0, %q1, %q2"
2542*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2543*0bfacb9bSmrg])
2544*0bfacb9bSmrg
2545*0bfacb9bSmrg;;
2546*0bfacb9bSmrg;; [vmulq_n_f])
2547*0bfacb9bSmrg;;
2548*0bfacb9bSmrg(define_insn "mve_vmulq_n_f<mode>"
2549*0bfacb9bSmrg  [
2550*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2551*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2552*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")]
2553*0bfacb9bSmrg	 VMULQ_N_F))
2554*0bfacb9bSmrg  ]
2555*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2556*0bfacb9bSmrg  "vmul.f%#<V_sz_elem>	%q0, %q1, %2"
2557*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2558*0bfacb9bSmrg])
2559*0bfacb9bSmrg
2560*0bfacb9bSmrg;;
2561*0bfacb9bSmrg;; [vornq_f])
2562*0bfacb9bSmrg;;
2563*0bfacb9bSmrg(define_insn "mve_vornq_f<mode>"
2564*0bfacb9bSmrg  [
2565*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2566*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2567*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2568*0bfacb9bSmrg	 VORNQ_F))
2569*0bfacb9bSmrg  ]
2570*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2571*0bfacb9bSmrg  "vorn %q0, %q1, %q2"
2572*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2573*0bfacb9bSmrg])
2574*0bfacb9bSmrg
2575*0bfacb9bSmrg;;
2576*0bfacb9bSmrg;; [vorrq_f])
2577*0bfacb9bSmrg;;
2578*0bfacb9bSmrg(define_insn "mve_vorrq_f<mode>"
2579*0bfacb9bSmrg  [
2580*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2581*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2582*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2583*0bfacb9bSmrg	 VORRQ_F))
2584*0bfacb9bSmrg  ]
2585*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2586*0bfacb9bSmrg  "vorr %q0, %q1, %q2"
2587*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2588*0bfacb9bSmrg])
2589*0bfacb9bSmrg
2590*0bfacb9bSmrg;;
2591*0bfacb9bSmrg;; [vorrq_n_u, vorrq_n_s])
2592*0bfacb9bSmrg;;
2593*0bfacb9bSmrg(define_insn "mve_vorrq_n_<supf><mode>"
2594*0bfacb9bSmrg  [
2595*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2596*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2597*0bfacb9bSmrg		       (match_operand:SI 2 "immediate_operand" "i")]
2598*0bfacb9bSmrg	 VORRQ_N))
2599*0bfacb9bSmrg  ]
2600*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2601*0bfacb9bSmrg  "vorr.i%#<V_sz_elem>	%q0, %2"
2602*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2603*0bfacb9bSmrg])
2604*0bfacb9bSmrg
2605*0bfacb9bSmrg;;
2606*0bfacb9bSmrg;; [vqdmullbq_n_s])
2607*0bfacb9bSmrg;;
2608*0bfacb9bSmrg(define_insn "mve_vqdmullbq_n_s<mode>"
2609*0bfacb9bSmrg  [
2610*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2611*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2612*0bfacb9bSmrg				  (match_operand:<V_elem> 2 "s_register_operand" "r")]
2613*0bfacb9bSmrg	 VQDMULLBQ_N_S))
2614*0bfacb9bSmrg  ]
2615*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2616*0bfacb9bSmrg  "vqdmullb.s%#<V_sz_elem>	%q0, %q1, %2"
2617*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2618*0bfacb9bSmrg])
2619*0bfacb9bSmrg
2620*0bfacb9bSmrg;;
2621*0bfacb9bSmrg;; [vqdmullbq_s])
2622*0bfacb9bSmrg;;
2623*0bfacb9bSmrg(define_insn "mve_vqdmullbq_s<mode>"
2624*0bfacb9bSmrg  [
2625*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2626*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2627*0bfacb9bSmrg				  (match_operand:MVE_5 2 "s_register_operand" "w")]
2628*0bfacb9bSmrg	 VQDMULLBQ_S))
2629*0bfacb9bSmrg  ]
2630*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2631*0bfacb9bSmrg  "vqdmullb.s%#<V_sz_elem>	%q0, %q1, %q2"
2632*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2633*0bfacb9bSmrg])
2634*0bfacb9bSmrg
2635*0bfacb9bSmrg;;
2636*0bfacb9bSmrg;; [vqdmulltq_n_s])
2637*0bfacb9bSmrg;;
2638*0bfacb9bSmrg(define_insn "mve_vqdmulltq_n_s<mode>"
2639*0bfacb9bSmrg  [
2640*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2641*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2642*0bfacb9bSmrg				  (match_operand:<V_elem> 2 "s_register_operand" "r")]
2643*0bfacb9bSmrg	 VQDMULLTQ_N_S))
2644*0bfacb9bSmrg  ]
2645*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2646*0bfacb9bSmrg  "vqdmullt.s%#<V_sz_elem>	%q0, %q1, %2"
2647*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2648*0bfacb9bSmrg])
2649*0bfacb9bSmrg
2650*0bfacb9bSmrg;;
2651*0bfacb9bSmrg;; [vqdmulltq_s])
2652*0bfacb9bSmrg;;
2653*0bfacb9bSmrg(define_insn "mve_vqdmulltq_s<mode>"
2654*0bfacb9bSmrg  [
2655*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2656*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2657*0bfacb9bSmrg				  (match_operand:MVE_5 2 "s_register_operand" "w")]
2658*0bfacb9bSmrg	 VQDMULLTQ_S))
2659*0bfacb9bSmrg  ]
2660*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2661*0bfacb9bSmrg  "vqdmullt.s%#<V_sz_elem>	%q0, %q1, %q2"
2662*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2663*0bfacb9bSmrg])
2664*0bfacb9bSmrg
2665*0bfacb9bSmrg;;
2666*0bfacb9bSmrg;; [vqmovnbq_u, vqmovnbq_s])
2667*0bfacb9bSmrg;;
2668*0bfacb9bSmrg(define_insn "mve_vqmovnbq_<supf><mode>"
2669*0bfacb9bSmrg  [
2670*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2671*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2672*0bfacb9bSmrg				 (match_operand:MVE_5 2 "s_register_operand" "w")]
2673*0bfacb9bSmrg	 VQMOVNBQ))
2674*0bfacb9bSmrg  ]
2675*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2676*0bfacb9bSmrg  "vqmovnb.<supf>%#<V_sz_elem>	%q0, %q2"
2677*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2678*0bfacb9bSmrg])
2679*0bfacb9bSmrg
2680*0bfacb9bSmrg;;
2681*0bfacb9bSmrg;; [vqmovntq_u, vqmovntq_s])
2682*0bfacb9bSmrg;;
2683*0bfacb9bSmrg(define_insn "mve_vqmovntq_<supf><mode>"
2684*0bfacb9bSmrg  [
2685*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2686*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2687*0bfacb9bSmrg				 (match_operand:MVE_5 2 "s_register_operand" "w")]
2688*0bfacb9bSmrg	 VQMOVNTQ))
2689*0bfacb9bSmrg  ]
2690*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2691*0bfacb9bSmrg  "vqmovnt.<supf>%#<V_sz_elem>	%q0, %q2"
2692*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2693*0bfacb9bSmrg])
2694*0bfacb9bSmrg
2695*0bfacb9bSmrg;;
2696*0bfacb9bSmrg;; [vqmovunbq_s])
2697*0bfacb9bSmrg;;
2698*0bfacb9bSmrg(define_insn "mve_vqmovunbq_s<mode>"
2699*0bfacb9bSmrg  [
2700*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2701*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2702*0bfacb9bSmrg				 (match_operand:MVE_5 2 "s_register_operand" "w")]
2703*0bfacb9bSmrg	 VQMOVUNBQ_S))
2704*0bfacb9bSmrg  ]
2705*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2706*0bfacb9bSmrg  "vqmovunb.s%#<V_sz_elem>	%q0, %q2"
2707*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2708*0bfacb9bSmrg])
2709*0bfacb9bSmrg
2710*0bfacb9bSmrg;;
2711*0bfacb9bSmrg;; [vqmovuntq_s])
2712*0bfacb9bSmrg;;
2713*0bfacb9bSmrg(define_insn "mve_vqmovuntq_s<mode>"
2714*0bfacb9bSmrg  [
2715*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2716*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2717*0bfacb9bSmrg				 (match_operand:MVE_5 2 "s_register_operand" "w")]
2718*0bfacb9bSmrg	 VQMOVUNTQ_S))
2719*0bfacb9bSmrg  ]
2720*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2721*0bfacb9bSmrg  "vqmovunt.s%#<V_sz_elem>	%q0, %q2"
2722*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2723*0bfacb9bSmrg])
2724*0bfacb9bSmrg
2725*0bfacb9bSmrg;;
2726*0bfacb9bSmrg;; [vrmlaldavhxq_s])
2727*0bfacb9bSmrg;;
2728*0bfacb9bSmrg(define_insn "mve_vrmlaldavhxq_sv4si"
2729*0bfacb9bSmrg  [
2730*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
2731*0bfacb9bSmrg	(unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2732*0bfacb9bSmrg		    (match_operand:V4SI 2 "s_register_operand" "w")]
2733*0bfacb9bSmrg	 VRMLALDAVHXQ_S))
2734*0bfacb9bSmrg  ]
2735*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2736*0bfacb9bSmrg  "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
2737*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2738*0bfacb9bSmrg])
2739*0bfacb9bSmrg
2740*0bfacb9bSmrg;;
2741*0bfacb9bSmrg;; [vrmlsldavhq_s])
2742*0bfacb9bSmrg;;
2743*0bfacb9bSmrg(define_insn "mve_vrmlsldavhq_sv4si"
2744*0bfacb9bSmrg  [
2745*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
2746*0bfacb9bSmrg	(unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2747*0bfacb9bSmrg		    (match_operand:V4SI 2 "s_register_operand" "w")]
2748*0bfacb9bSmrg	 VRMLSLDAVHQ_S))
2749*0bfacb9bSmrg  ]
2750*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2751*0bfacb9bSmrg  "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
2752*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2753*0bfacb9bSmrg])
2754*0bfacb9bSmrg
2755*0bfacb9bSmrg;;
2756*0bfacb9bSmrg;; [vrmlsldavhxq_s])
2757*0bfacb9bSmrg;;
2758*0bfacb9bSmrg(define_insn "mve_vrmlsldavhxq_sv4si"
2759*0bfacb9bSmrg  [
2760*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
2761*0bfacb9bSmrg	(unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2762*0bfacb9bSmrg		    (match_operand:V4SI 2 "s_register_operand" "w")]
2763*0bfacb9bSmrg	 VRMLSLDAVHXQ_S))
2764*0bfacb9bSmrg  ]
2765*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2766*0bfacb9bSmrg  "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
2767*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2768*0bfacb9bSmrg])
2769*0bfacb9bSmrg
2770*0bfacb9bSmrg;;
2771*0bfacb9bSmrg;; [vshllbq_n_s, vshllbq_n_u])
2772*0bfacb9bSmrg;;
2773*0bfacb9bSmrg(define_insn "mve_vshllbq_n_<supf><mode>"
2774*0bfacb9bSmrg  [
2775*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2776*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2777*0bfacb9bSmrg				  (match_operand:SI 2 "immediate_operand" "i")]
2778*0bfacb9bSmrg	 VSHLLBQ_N))
2779*0bfacb9bSmrg  ]
2780*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2781*0bfacb9bSmrg  "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2782*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2783*0bfacb9bSmrg])
2784*0bfacb9bSmrg
2785*0bfacb9bSmrg;;
2786*0bfacb9bSmrg;; [vshlltq_n_u, vshlltq_n_s])
2787*0bfacb9bSmrg;;
2788*0bfacb9bSmrg(define_insn "mve_vshlltq_n_<supf><mode>"
2789*0bfacb9bSmrg  [
2790*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2791*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2792*0bfacb9bSmrg				  (match_operand:SI 2 "immediate_operand" "i")]
2793*0bfacb9bSmrg	 VSHLLTQ_N))
2794*0bfacb9bSmrg  ]
2795*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2796*0bfacb9bSmrg  "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2797*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2798*0bfacb9bSmrg])
2799*0bfacb9bSmrg
2800*0bfacb9bSmrg;;
2801*0bfacb9bSmrg;; [vsubq_f])
2802*0bfacb9bSmrg;;
2803*0bfacb9bSmrg(define_insn "mve_vsubq_f<mode>"
2804*0bfacb9bSmrg  [
2805*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2806*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2807*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")]
2808*0bfacb9bSmrg	 VSUBQ_F))
2809*0bfacb9bSmrg  ]
2810*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2811*0bfacb9bSmrg  "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
2812*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2813*0bfacb9bSmrg])
2814*0bfacb9bSmrg
2815*0bfacb9bSmrg;;
2816*0bfacb9bSmrg;; [vmulltq_poly_p])
2817*0bfacb9bSmrg;;
2818*0bfacb9bSmrg(define_insn "mve_vmulltq_poly_p<mode>"
2819*0bfacb9bSmrg  [
2820*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2821*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2822*0bfacb9bSmrg				  (match_operand:MVE_3 2 "s_register_operand" "w")]
2823*0bfacb9bSmrg	 VMULLTQ_POLY_P))
2824*0bfacb9bSmrg  ]
2825*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2826*0bfacb9bSmrg  "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
2827*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2828*0bfacb9bSmrg])
2829*0bfacb9bSmrg
2830*0bfacb9bSmrg;;
2831*0bfacb9bSmrg;; [vmullbq_poly_p])
2832*0bfacb9bSmrg;;
2833*0bfacb9bSmrg(define_insn "mve_vmullbq_poly_p<mode>"
2834*0bfacb9bSmrg  [
2835*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2836*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2837*0bfacb9bSmrg				  (match_operand:MVE_3 2 "s_register_operand" "w")]
2838*0bfacb9bSmrg	 VMULLBQ_POLY_P))
2839*0bfacb9bSmrg  ]
2840*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2841*0bfacb9bSmrg  "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
2842*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2843*0bfacb9bSmrg])
2844*0bfacb9bSmrg
2845*0bfacb9bSmrg;;
2846*0bfacb9bSmrg;; [vrmlaldavhq_u vrmlaldavhq_s])
2847*0bfacb9bSmrg;;
2848*0bfacb9bSmrg(define_insn "mve_vrmlaldavhq_<supf>v4si"
2849*0bfacb9bSmrg  [
2850*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
2851*0bfacb9bSmrg	(unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2852*0bfacb9bSmrg		    (match_operand:V4SI 2 "s_register_operand" "w")]
2853*0bfacb9bSmrg	 VRMLALDAVHQ))
2854*0bfacb9bSmrg  ]
2855*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2856*0bfacb9bSmrg  "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
2857*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2858*0bfacb9bSmrg])
2859*0bfacb9bSmrg
2860*0bfacb9bSmrg;;
2861*0bfacb9bSmrg;; [vbicq_m_n_s, vbicq_m_n_u])
2862*0bfacb9bSmrg;;
2863*0bfacb9bSmrg(define_insn "mve_vbicq_m_n_<supf><mode>"
2864*0bfacb9bSmrg  [
2865*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2866*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2867*0bfacb9bSmrg		       (match_operand:SI 2 "immediate_operand" "i")
2868*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
2869*0bfacb9bSmrg	 VBICQ_M_N))
2870*0bfacb9bSmrg  ]
2871*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2872*0bfacb9bSmrg  "vpst\;vbict.i%#<V_sz_elem>	%q0, %2"
2873*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2874*0bfacb9bSmrg   (set_attr "length""8")])
2875*0bfacb9bSmrg;;
2876*0bfacb9bSmrg;; [vcmpeqq_m_f])
2877*0bfacb9bSmrg;;
2878*0bfacb9bSmrg(define_insn "mve_vcmpeqq_m_f<mode>"
2879*0bfacb9bSmrg  [
2880*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2881*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2882*0bfacb9bSmrg		    (match_operand:MVE_0 2 "s_register_operand" "w")
2883*0bfacb9bSmrg		    (match_operand:HI 3 "vpr_register_operand" "Up")]
2884*0bfacb9bSmrg	 VCMPEQQ_M_F))
2885*0bfacb9bSmrg  ]
2886*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2887*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	eq, %q1, %q2"
2888*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2889*0bfacb9bSmrg   (set_attr "length""8")])
2890*0bfacb9bSmrg;;
2891*0bfacb9bSmrg;; [vcvtaq_m_u, vcvtaq_m_s])
2892*0bfacb9bSmrg;;
2893*0bfacb9bSmrg(define_insn "mve_vcvtaq_m_<supf><mode>"
2894*0bfacb9bSmrg  [
2895*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2896*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2897*0bfacb9bSmrg		       (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2898*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
2899*0bfacb9bSmrg	 VCVTAQ_M))
2900*0bfacb9bSmrg  ]
2901*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2902*0bfacb9bSmrg  "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
2903*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2904*0bfacb9bSmrg   (set_attr "length""8")])
2905*0bfacb9bSmrg;;
2906*0bfacb9bSmrg;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
2907*0bfacb9bSmrg;;
2908*0bfacb9bSmrg(define_insn "mve_vcvtq_m_to_f_<supf><mode>"
2909*0bfacb9bSmrg  [
2910*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2911*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2912*0bfacb9bSmrg		       (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2913*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
2914*0bfacb9bSmrg	 VCVTQ_M_TO_F))
2915*0bfacb9bSmrg  ]
2916*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2917*0bfacb9bSmrg  "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>	 %q0, %q2"
2918*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2919*0bfacb9bSmrg   (set_attr "length""8")])
2920*0bfacb9bSmrg;;
2921*0bfacb9bSmrg;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
2922*0bfacb9bSmrg;;
2923*0bfacb9bSmrg(define_insn "mve_vqrshrnbq_n_<supf><mode>"
2924*0bfacb9bSmrg  [
2925*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2926*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2927*0bfacb9bSmrg				 (match_operand:MVE_5 2 "s_register_operand" "w")
2928*0bfacb9bSmrg				 (match_operand:SI 3 "mve_imm_8" "Rb")]
2929*0bfacb9bSmrg	 VQRSHRNBQ_N))
2930*0bfacb9bSmrg  ]
2931*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2932*0bfacb9bSmrg  "vqrshrnb.<supf>%#<V_sz_elem>	%q0, %q2, %3"
2933*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2934*0bfacb9bSmrg])
2935*0bfacb9bSmrg;;
2936*0bfacb9bSmrg;; [vqrshrunbq_n_s])
2937*0bfacb9bSmrg;;
2938*0bfacb9bSmrg(define_insn "mve_vqrshrunbq_n_s<mode>"
2939*0bfacb9bSmrg  [
2940*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2941*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2942*0bfacb9bSmrg				 (match_operand:MVE_5 2 "s_register_operand" "w")
2943*0bfacb9bSmrg				 (match_operand:SI 3 "mve_imm_8" "Rb")]
2944*0bfacb9bSmrg	 VQRSHRUNBQ_N_S))
2945*0bfacb9bSmrg  ]
2946*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2947*0bfacb9bSmrg  "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
2948*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2949*0bfacb9bSmrg])
2950*0bfacb9bSmrg;;
2951*0bfacb9bSmrg;; [vrmlaldavhaq_s vrmlaldavhaq_u])
2952*0bfacb9bSmrg;;
2953*0bfacb9bSmrg(define_insn "mve_vrmlaldavhaq_<supf>v4si"
2954*0bfacb9bSmrg  [
2955*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
2956*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2957*0bfacb9bSmrg		    (match_operand:V4SI 2 "s_register_operand" "w")
2958*0bfacb9bSmrg		    (match_operand:V4SI 3 "s_register_operand" "w")]
2959*0bfacb9bSmrg	 VRMLALDAVHAQ))
2960*0bfacb9bSmrg  ]
2961*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2962*0bfacb9bSmrg  "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
2963*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2964*0bfacb9bSmrg])
2965*0bfacb9bSmrg
2966*0bfacb9bSmrg;;
2967*0bfacb9bSmrg;; [vabavq_s, vabavq_u])
2968*0bfacb9bSmrg;;
2969*0bfacb9bSmrg(define_insn "mve_vabavq_<supf><mode>"
2970*0bfacb9bSmrg  [
2971*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=r")
2972*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
2973*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")
2974*0bfacb9bSmrg		    (match_operand:MVE_2 3 "s_register_operand" "w")]
2975*0bfacb9bSmrg	 VABAVQ))
2976*0bfacb9bSmrg  ]
2977*0bfacb9bSmrg  "TARGET_HAVE_MVE"
2978*0bfacb9bSmrg  "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
2979*0bfacb9bSmrg  [(set_attr "type" "mve_move")
2980*0bfacb9bSmrg])
2981*0bfacb9bSmrg
2982*0bfacb9bSmrg;;
2983*0bfacb9bSmrg;; [vshlcq_u vshlcq_s]
2984*0bfacb9bSmrg;;
2985*0bfacb9bSmrg(define_expand "mve_vshlcq_vec_<supf><mode>"
2986*0bfacb9bSmrg [(match_operand:MVE_2 0 "s_register_operand")
2987*0bfacb9bSmrg  (match_operand:MVE_2 1 "s_register_operand")
2988*0bfacb9bSmrg  (match_operand:SI 2 "s_register_operand")
2989*0bfacb9bSmrg  (match_operand:SI 3 "mve_imm_32")
2990*0bfacb9bSmrg  (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
2991*0bfacb9bSmrg "TARGET_HAVE_MVE"
2992*0bfacb9bSmrg{
2993*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (SImode);
2994*0bfacb9bSmrg  emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
2995*0bfacb9bSmrg				      operands[2], operands[3]));
2996*0bfacb9bSmrg  DONE;
2997*0bfacb9bSmrg})
2998*0bfacb9bSmrg
2999*0bfacb9bSmrg(define_expand "mve_vshlcq_carry_<supf><mode>"
3000*0bfacb9bSmrg [(match_operand:SI 0 "s_register_operand")
3001*0bfacb9bSmrg  (match_operand:MVE_2 1 "s_register_operand")
3002*0bfacb9bSmrg  (match_operand:SI 2 "s_register_operand")
3003*0bfacb9bSmrg  (match_operand:SI 3 "mve_imm_32")
3004*0bfacb9bSmrg  (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3005*0bfacb9bSmrg "TARGET_HAVE_MVE"
3006*0bfacb9bSmrg{
3007*0bfacb9bSmrg  rtx ignore_vec = gen_reg_rtx (<MODE>mode);
3008*0bfacb9bSmrg  emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
3009*0bfacb9bSmrg				      operands[2], operands[3]));
3010*0bfacb9bSmrg  DONE;
3011*0bfacb9bSmrg})
3012*0bfacb9bSmrg
3013*0bfacb9bSmrg(define_insn "mve_vshlcq_<supf><mode>"
3014*0bfacb9bSmrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
3015*0bfacb9bSmrg       (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
3016*0bfacb9bSmrg		      (match_operand:SI 3 "s_register_operand" "1")
3017*0bfacb9bSmrg		      (match_operand:SI 4 "mve_imm_32" "Rf")]
3018*0bfacb9bSmrg	VSHLCQ))
3019*0bfacb9bSmrg  (set (match_operand:SI  1 "s_register_operand" "=r")
3020*0bfacb9bSmrg       (unspec:SI [(match_dup 2)
3021*0bfacb9bSmrg		   (match_dup 3)
3022*0bfacb9bSmrg		   (match_dup 4)]
3023*0bfacb9bSmrg	VSHLCQ))]
3024*0bfacb9bSmrg "TARGET_HAVE_MVE"
3025*0bfacb9bSmrg "vshlc %q0, %1, %4")
3026*0bfacb9bSmrg
3027*0bfacb9bSmrg;;
3028*0bfacb9bSmrg;; [vabsq_m_s])
3029*0bfacb9bSmrg;;
3030*0bfacb9bSmrg(define_insn "mve_vabsq_m_s<mode>"
3031*0bfacb9bSmrg  [
3032*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3033*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3034*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3035*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3036*0bfacb9bSmrg	 VABSQ_M_S))
3037*0bfacb9bSmrg  ]
3038*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3039*0bfacb9bSmrg  "vpst\;vabst.s%#<V_sz_elem>	%q0, %q2"
3040*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3041*0bfacb9bSmrg   (set_attr "length""8")])
3042*0bfacb9bSmrg
3043*0bfacb9bSmrg;;
3044*0bfacb9bSmrg;; [vaddvaq_p_u, vaddvaq_p_s])
3045*0bfacb9bSmrg;;
3046*0bfacb9bSmrg(define_insn "mve_vaddvaq_p_<supf><mode>"
3047*0bfacb9bSmrg  [
3048*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
3049*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3050*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3051*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3052*0bfacb9bSmrg	 VADDVAQ_P))
3053*0bfacb9bSmrg  ]
3054*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3055*0bfacb9bSmrg  "vpst\;vaddvat.<supf>%#<V_sz_elem>	%0, %q2"
3056*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3057*0bfacb9bSmrg   (set_attr "length""8")])
3058*0bfacb9bSmrg
3059*0bfacb9bSmrg;;
3060*0bfacb9bSmrg;; [vclsq_m_s])
3061*0bfacb9bSmrg;;
3062*0bfacb9bSmrg(define_insn "mve_vclsq_m_s<mode>"
3063*0bfacb9bSmrg  [
3064*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3065*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3066*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3067*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3068*0bfacb9bSmrg	 VCLSQ_M_S))
3069*0bfacb9bSmrg  ]
3070*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3071*0bfacb9bSmrg  "vpst\;vclst.s%#<V_sz_elem>	%q0, %q2"
3072*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3073*0bfacb9bSmrg   (set_attr "length""8")])
3074*0bfacb9bSmrg
3075*0bfacb9bSmrg;;
3076*0bfacb9bSmrg;; [vclzq_m_s, vclzq_m_u])
3077*0bfacb9bSmrg;;
3078*0bfacb9bSmrg(define_insn "mve_vclzq_m_<supf><mode>"
3079*0bfacb9bSmrg  [
3080*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3081*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3082*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3083*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3084*0bfacb9bSmrg	 VCLZQ_M))
3085*0bfacb9bSmrg  ]
3086*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3087*0bfacb9bSmrg  "vpst\;vclzt.i%#<V_sz_elem>	%q0, %q2"
3088*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3089*0bfacb9bSmrg   (set_attr "length""8")])
3090*0bfacb9bSmrg
3091*0bfacb9bSmrg;;
3092*0bfacb9bSmrg;; [vcmpcsq_m_n_u])
3093*0bfacb9bSmrg;;
3094*0bfacb9bSmrg(define_insn "mve_vcmpcsq_m_n_u<mode>"
3095*0bfacb9bSmrg  [
3096*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3097*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3098*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
3099*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3100*0bfacb9bSmrg	 VCMPCSQ_M_N_U))
3101*0bfacb9bSmrg  ]
3102*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3103*0bfacb9bSmrg  "vpst\;vcmpt.u%#<V_sz_elem>	cs, %q1, %2"
3104*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3105*0bfacb9bSmrg   (set_attr "length""8")])
3106*0bfacb9bSmrg
3107*0bfacb9bSmrg;;
3108*0bfacb9bSmrg;; [vcmpcsq_m_u])
3109*0bfacb9bSmrg;;
3110*0bfacb9bSmrg(define_insn "mve_vcmpcsq_m_u<mode>"
3111*0bfacb9bSmrg  [
3112*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3113*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3114*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3115*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3116*0bfacb9bSmrg	 VCMPCSQ_M_U))
3117*0bfacb9bSmrg  ]
3118*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3119*0bfacb9bSmrg  "vpst\;vcmpt.u%#<V_sz_elem>	cs, %q1, %q2"
3120*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3121*0bfacb9bSmrg   (set_attr "length""8")])
3122*0bfacb9bSmrg
3123*0bfacb9bSmrg;;
3124*0bfacb9bSmrg;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
3125*0bfacb9bSmrg;;
3126*0bfacb9bSmrg(define_insn "mve_vcmpeqq_m_n_<supf><mode>"
3127*0bfacb9bSmrg  [
3128*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3129*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3130*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
3131*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3132*0bfacb9bSmrg	 VCMPEQQ_M_N))
3133*0bfacb9bSmrg  ]
3134*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3135*0bfacb9bSmrg  "vpst\;vcmpt.i%#<V_sz_elem>	eq, %q1, %2"
3136*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3137*0bfacb9bSmrg   (set_attr "length""8")])
3138*0bfacb9bSmrg
3139*0bfacb9bSmrg;;
3140*0bfacb9bSmrg;; [vcmpeqq_m_u, vcmpeqq_m_s])
3141*0bfacb9bSmrg;;
3142*0bfacb9bSmrg(define_insn "mve_vcmpeqq_m_<supf><mode>"
3143*0bfacb9bSmrg  [
3144*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3145*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3146*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3147*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3148*0bfacb9bSmrg	 VCMPEQQ_M))
3149*0bfacb9bSmrg  ]
3150*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3151*0bfacb9bSmrg  "vpst\;vcmpt.i%#<V_sz_elem>	eq, %q1, %q2"
3152*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3153*0bfacb9bSmrg   (set_attr "length""8")])
3154*0bfacb9bSmrg
3155*0bfacb9bSmrg;;
3156*0bfacb9bSmrg;; [vcmpgeq_m_n_s])
3157*0bfacb9bSmrg;;
3158*0bfacb9bSmrg(define_insn "mve_vcmpgeq_m_n_s<mode>"
3159*0bfacb9bSmrg  [
3160*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3161*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3162*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
3163*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3164*0bfacb9bSmrg	 VCMPGEQ_M_N_S))
3165*0bfacb9bSmrg  ]
3166*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3167*0bfacb9bSmrg  "vpst\;vcmpt.s%#<V_sz_elem>	ge, %q1, %2"
3168*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3169*0bfacb9bSmrg   (set_attr "length""8")])
3170*0bfacb9bSmrg
3171*0bfacb9bSmrg;;
3172*0bfacb9bSmrg;; [vcmpgeq_m_s])
3173*0bfacb9bSmrg;;
3174*0bfacb9bSmrg(define_insn "mve_vcmpgeq_m_s<mode>"
3175*0bfacb9bSmrg  [
3176*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3177*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3178*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3179*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3180*0bfacb9bSmrg	 VCMPGEQ_M_S))
3181*0bfacb9bSmrg  ]
3182*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3183*0bfacb9bSmrg  "vpst\;vcmpt.s%#<V_sz_elem>	ge, %q1, %q2"
3184*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3185*0bfacb9bSmrg   (set_attr "length""8")])
3186*0bfacb9bSmrg
3187*0bfacb9bSmrg;;
3188*0bfacb9bSmrg;; [vcmpgtq_m_n_s])
3189*0bfacb9bSmrg;;
3190*0bfacb9bSmrg(define_insn "mve_vcmpgtq_m_n_s<mode>"
3191*0bfacb9bSmrg  [
3192*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3193*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3194*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
3195*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3196*0bfacb9bSmrg	 VCMPGTQ_M_N_S))
3197*0bfacb9bSmrg  ]
3198*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3199*0bfacb9bSmrg  "vpst\;vcmpt.s%#<V_sz_elem>	gt, %q1, %2"
3200*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3201*0bfacb9bSmrg   (set_attr "length""8")])
3202*0bfacb9bSmrg
3203*0bfacb9bSmrg;;
3204*0bfacb9bSmrg;; [vcmpgtq_m_s])
3205*0bfacb9bSmrg;;
3206*0bfacb9bSmrg(define_insn "mve_vcmpgtq_m_s<mode>"
3207*0bfacb9bSmrg  [
3208*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3209*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3210*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3211*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3212*0bfacb9bSmrg	 VCMPGTQ_M_S))
3213*0bfacb9bSmrg  ]
3214*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3215*0bfacb9bSmrg  "vpst\;vcmpt.s%#<V_sz_elem>	gt, %q1, %q2"
3216*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3217*0bfacb9bSmrg   (set_attr "length""8")])
3218*0bfacb9bSmrg
3219*0bfacb9bSmrg;;
3220*0bfacb9bSmrg;; [vcmphiq_m_n_u])
3221*0bfacb9bSmrg;;
3222*0bfacb9bSmrg(define_insn "mve_vcmphiq_m_n_u<mode>"
3223*0bfacb9bSmrg  [
3224*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3225*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3226*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
3227*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3228*0bfacb9bSmrg	 VCMPHIQ_M_N_U))
3229*0bfacb9bSmrg  ]
3230*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3231*0bfacb9bSmrg  "vpst\;vcmpt.u%#<V_sz_elem>	hi, %q1, %2"
3232*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3233*0bfacb9bSmrg   (set_attr "length""8")])
3234*0bfacb9bSmrg
3235*0bfacb9bSmrg;;
3236*0bfacb9bSmrg;; [vcmphiq_m_u])
3237*0bfacb9bSmrg;;
3238*0bfacb9bSmrg(define_insn "mve_vcmphiq_m_u<mode>"
3239*0bfacb9bSmrg  [
3240*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3241*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3242*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3243*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3244*0bfacb9bSmrg	 VCMPHIQ_M_U))
3245*0bfacb9bSmrg  ]
3246*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3247*0bfacb9bSmrg  "vpst\;vcmpt.u%#<V_sz_elem>	hi, %q1, %q2"
3248*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3249*0bfacb9bSmrg   (set_attr "length""8")])
3250*0bfacb9bSmrg
3251*0bfacb9bSmrg;;
3252*0bfacb9bSmrg;; [vcmpleq_m_n_s])
3253*0bfacb9bSmrg;;
3254*0bfacb9bSmrg(define_insn "mve_vcmpleq_m_n_s<mode>"
3255*0bfacb9bSmrg  [
3256*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3257*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3258*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
3259*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3260*0bfacb9bSmrg	 VCMPLEQ_M_N_S))
3261*0bfacb9bSmrg  ]
3262*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3263*0bfacb9bSmrg  "vpst\;vcmpt.s%#<V_sz_elem>	le, %q1, %2"
3264*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3265*0bfacb9bSmrg   (set_attr "length""8")])
3266*0bfacb9bSmrg
3267*0bfacb9bSmrg;;
3268*0bfacb9bSmrg;; [vcmpleq_m_s])
3269*0bfacb9bSmrg;;
3270*0bfacb9bSmrg(define_insn "mve_vcmpleq_m_s<mode>"
3271*0bfacb9bSmrg  [
3272*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3273*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3274*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3275*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3276*0bfacb9bSmrg	 VCMPLEQ_M_S))
3277*0bfacb9bSmrg  ]
3278*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3279*0bfacb9bSmrg  "vpst\;vcmpt.s%#<V_sz_elem>	le, %q1, %q2"
3280*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3281*0bfacb9bSmrg   (set_attr "length""8")])
3282*0bfacb9bSmrg
3283*0bfacb9bSmrg;;
3284*0bfacb9bSmrg;; [vcmpltq_m_n_s])
3285*0bfacb9bSmrg;;
3286*0bfacb9bSmrg(define_insn "mve_vcmpltq_m_n_s<mode>"
3287*0bfacb9bSmrg  [
3288*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3289*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3290*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
3291*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3292*0bfacb9bSmrg	 VCMPLTQ_M_N_S))
3293*0bfacb9bSmrg  ]
3294*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3295*0bfacb9bSmrg  "vpst\;vcmpt.s%#<V_sz_elem>	lt, %q1, %2"
3296*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3297*0bfacb9bSmrg   (set_attr "length""8")])
3298*0bfacb9bSmrg
3299*0bfacb9bSmrg;;
3300*0bfacb9bSmrg;; [vcmpltq_m_s])
3301*0bfacb9bSmrg;;
3302*0bfacb9bSmrg(define_insn "mve_vcmpltq_m_s<mode>"
3303*0bfacb9bSmrg  [
3304*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3305*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3306*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3307*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3308*0bfacb9bSmrg	 VCMPLTQ_M_S))
3309*0bfacb9bSmrg  ]
3310*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3311*0bfacb9bSmrg  "vpst\;vcmpt.s%#<V_sz_elem>	lt, %q1, %q2"
3312*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3313*0bfacb9bSmrg   (set_attr "length""8")])
3314*0bfacb9bSmrg
3315*0bfacb9bSmrg;;
3316*0bfacb9bSmrg;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3317*0bfacb9bSmrg;;
3318*0bfacb9bSmrg(define_insn "mve_vcmpneq_m_n_<supf><mode>"
3319*0bfacb9bSmrg  [
3320*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3321*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3322*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
3323*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3324*0bfacb9bSmrg	 VCMPNEQ_M_N))
3325*0bfacb9bSmrg  ]
3326*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3327*0bfacb9bSmrg  "vpst\;vcmpt.i%#<V_sz_elem>	ne, %q1, %2"
3328*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3329*0bfacb9bSmrg   (set_attr "length""8")])
3330*0bfacb9bSmrg
3331*0bfacb9bSmrg;;
3332*0bfacb9bSmrg;; [vcmpneq_m_s, vcmpneq_m_u])
3333*0bfacb9bSmrg;;
3334*0bfacb9bSmrg(define_insn "mve_vcmpneq_m_<supf><mode>"
3335*0bfacb9bSmrg  [
3336*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3337*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3338*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3339*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3340*0bfacb9bSmrg	 VCMPNEQ_M))
3341*0bfacb9bSmrg  ]
3342*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3343*0bfacb9bSmrg  "vpst\;vcmpt.i%#<V_sz_elem>	ne, %q1, %q2"
3344*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3345*0bfacb9bSmrg   (set_attr "length""8")])
3346*0bfacb9bSmrg
3347*0bfacb9bSmrg;;
3348*0bfacb9bSmrg;; [vdupq_m_n_s, vdupq_m_n_u])
3349*0bfacb9bSmrg;;
3350*0bfacb9bSmrg(define_insn "mve_vdupq_m_n_<supf><mode>"
3351*0bfacb9bSmrg  [
3352*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3353*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3354*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
3355*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3356*0bfacb9bSmrg	 VDUPQ_M_N))
3357*0bfacb9bSmrg  ]
3358*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3359*0bfacb9bSmrg  "vpst\;vdupt.%#<V_sz_elem>	%q0, %2"
3360*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3361*0bfacb9bSmrg   (set_attr "length""8")])
3362*0bfacb9bSmrg
3363*0bfacb9bSmrg;;
3364*0bfacb9bSmrg;; [vmaxaq_m_s])
3365*0bfacb9bSmrg;;
3366*0bfacb9bSmrg(define_insn "mve_vmaxaq_m_s<mode>"
3367*0bfacb9bSmrg  [
3368*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3369*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3370*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3371*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3372*0bfacb9bSmrg	 VMAXAQ_M_S))
3373*0bfacb9bSmrg  ]
3374*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3375*0bfacb9bSmrg  "vpst\;vmaxat.s%#<V_sz_elem>	%q0, %q2"
3376*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3377*0bfacb9bSmrg   (set_attr "length""8")])
3378*0bfacb9bSmrg
3379*0bfacb9bSmrg;;
3380*0bfacb9bSmrg;; [vmaxavq_p_s])
3381*0bfacb9bSmrg;;
3382*0bfacb9bSmrg(define_insn "mve_vmaxavq_p_s<mode>"
3383*0bfacb9bSmrg  [
3384*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3385*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3386*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3387*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3388*0bfacb9bSmrg	 VMAXAVQ_P_S))
3389*0bfacb9bSmrg  ]
3390*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3391*0bfacb9bSmrg  "vpst\;vmaxavt.s%#<V_sz_elem>	%0, %q2"
3392*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3393*0bfacb9bSmrg   (set_attr "length""8")])
3394*0bfacb9bSmrg
3395*0bfacb9bSmrg;;
3396*0bfacb9bSmrg;; [vmaxvq_p_u, vmaxvq_p_s])
3397*0bfacb9bSmrg;;
3398*0bfacb9bSmrg(define_insn "mve_vmaxvq_p_<supf><mode>"
3399*0bfacb9bSmrg  [
3400*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3401*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3402*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3403*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3404*0bfacb9bSmrg	 VMAXVQ_P))
3405*0bfacb9bSmrg  ]
3406*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3407*0bfacb9bSmrg  "vpst\;vmaxvt.<supf>%#<V_sz_elem>	%0, %q2"
3408*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3409*0bfacb9bSmrg   (set_attr "length""8")])
3410*0bfacb9bSmrg
3411*0bfacb9bSmrg;;
3412*0bfacb9bSmrg;; [vminaq_m_s])
3413*0bfacb9bSmrg;;
3414*0bfacb9bSmrg(define_insn "mve_vminaq_m_s<mode>"
3415*0bfacb9bSmrg  [
3416*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3417*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3418*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3419*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3420*0bfacb9bSmrg	 VMINAQ_M_S))
3421*0bfacb9bSmrg  ]
3422*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3423*0bfacb9bSmrg  "vpst\;vminat.s%#<V_sz_elem>	%q0, %q2"
3424*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3425*0bfacb9bSmrg   (set_attr "length""8")])
3426*0bfacb9bSmrg
3427*0bfacb9bSmrg;;
3428*0bfacb9bSmrg;; [vminavq_p_s])
3429*0bfacb9bSmrg;;
3430*0bfacb9bSmrg(define_insn "mve_vminavq_p_s<mode>"
3431*0bfacb9bSmrg  [
3432*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3433*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3434*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3435*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3436*0bfacb9bSmrg	 VMINAVQ_P_S))
3437*0bfacb9bSmrg  ]
3438*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3439*0bfacb9bSmrg  "vpst\;vminavt.s%#<V_sz_elem>	%0, %q2"
3440*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3441*0bfacb9bSmrg   (set_attr "length""8")])
3442*0bfacb9bSmrg
3443*0bfacb9bSmrg;;
3444*0bfacb9bSmrg;; [vminvq_p_s, vminvq_p_u])
3445*0bfacb9bSmrg;;
3446*0bfacb9bSmrg(define_insn "mve_vminvq_p_<supf><mode>"
3447*0bfacb9bSmrg  [
3448*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3449*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3450*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3451*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3452*0bfacb9bSmrg	 VMINVQ_P))
3453*0bfacb9bSmrg  ]
3454*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3455*0bfacb9bSmrg  "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
3456*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3457*0bfacb9bSmrg   (set_attr "length""8")])
3458*0bfacb9bSmrg
3459*0bfacb9bSmrg;;
3460*0bfacb9bSmrg;; [vmladavaq_u, vmladavaq_s])
3461*0bfacb9bSmrg;;
3462*0bfacb9bSmrg(define_insn "mve_vmladavaq_<supf><mode>"
3463*0bfacb9bSmrg  [
3464*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
3465*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3466*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3467*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")]
3468*0bfacb9bSmrg	 VMLADAVAQ))
3469*0bfacb9bSmrg  ]
3470*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3471*0bfacb9bSmrg  "vmladava.<supf>%#<V_sz_elem>	%0, %q2, %q3"
3472*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3473*0bfacb9bSmrg])
3474*0bfacb9bSmrg
3475*0bfacb9bSmrg;;
3476*0bfacb9bSmrg;; [vmladavq_p_u, vmladavq_p_s])
3477*0bfacb9bSmrg;;
3478*0bfacb9bSmrg(define_insn "mve_vmladavq_p_<supf><mode>"
3479*0bfacb9bSmrg  [
3480*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
3481*0bfacb9bSmrg	(unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3482*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3483*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3484*0bfacb9bSmrg	 VMLADAVQ_P))
3485*0bfacb9bSmrg  ]
3486*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3487*0bfacb9bSmrg  "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
3488*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3489*0bfacb9bSmrg   (set_attr "length""8")])
3490*0bfacb9bSmrg
3491*0bfacb9bSmrg;;
3492*0bfacb9bSmrg;; [vmladavxq_p_s])
3493*0bfacb9bSmrg;;
3494*0bfacb9bSmrg(define_insn "mve_vmladavxq_p_s<mode>"
3495*0bfacb9bSmrg  [
3496*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
3497*0bfacb9bSmrg	(unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3498*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3499*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3500*0bfacb9bSmrg	 VMLADAVXQ_P_S))
3501*0bfacb9bSmrg  ]
3502*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3503*0bfacb9bSmrg  "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
3504*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3505*0bfacb9bSmrg   (set_attr "length""8")])
3506*0bfacb9bSmrg
3507*0bfacb9bSmrg;;
3508*0bfacb9bSmrg;; [vmlaq_n_u, vmlaq_n_s])
3509*0bfacb9bSmrg;;
3510*0bfacb9bSmrg(define_insn "mve_vmlaq_n_<supf><mode>"
3511*0bfacb9bSmrg  [
3512*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3513*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3514*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3515*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")]
3516*0bfacb9bSmrg	 VMLAQ_N))
3517*0bfacb9bSmrg  ]
3518*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3519*0bfacb9bSmrg  "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
3520*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3521*0bfacb9bSmrg])
3522*0bfacb9bSmrg
3523*0bfacb9bSmrg;;
3524*0bfacb9bSmrg;; [vmlasq_n_u, vmlasq_n_s])
3525*0bfacb9bSmrg;;
3526*0bfacb9bSmrg(define_insn "mve_vmlasq_n_<supf><mode>"
3527*0bfacb9bSmrg  [
3528*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3529*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3530*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3531*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")]
3532*0bfacb9bSmrg	 VMLASQ_N))
3533*0bfacb9bSmrg  ]
3534*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3535*0bfacb9bSmrg  "vmlas.<supf>%#<V_sz_elem>	%q0, %q2, %3"
3536*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3537*0bfacb9bSmrg])
3538*0bfacb9bSmrg
3539*0bfacb9bSmrg;;
3540*0bfacb9bSmrg;; [vmlsdavq_p_s])
3541*0bfacb9bSmrg;;
3542*0bfacb9bSmrg(define_insn "mve_vmlsdavq_p_s<mode>"
3543*0bfacb9bSmrg  [
3544*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
3545*0bfacb9bSmrg	(unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3546*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3547*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3548*0bfacb9bSmrg	 VMLSDAVQ_P_S))
3549*0bfacb9bSmrg  ]
3550*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3551*0bfacb9bSmrg  "vpst\;vmlsdavt.s%#<V_sz_elem>	%0, %q1, %q2"
3552*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3553*0bfacb9bSmrg   (set_attr "length""8")])
3554*0bfacb9bSmrg
3555*0bfacb9bSmrg;;
3556*0bfacb9bSmrg;; [vmlsdavxq_p_s])
3557*0bfacb9bSmrg;;
3558*0bfacb9bSmrg(define_insn "mve_vmlsdavxq_p_s<mode>"
3559*0bfacb9bSmrg  [
3560*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
3561*0bfacb9bSmrg	(unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3562*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3563*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3564*0bfacb9bSmrg	 VMLSDAVXQ_P_S))
3565*0bfacb9bSmrg  ]
3566*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3567*0bfacb9bSmrg  "vpst\;vmlsdavxt.s%#<V_sz_elem>	%0, %q1, %q2"
3568*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3569*0bfacb9bSmrg   (set_attr "length""8")])
3570*0bfacb9bSmrg
3571*0bfacb9bSmrg;;
3572*0bfacb9bSmrg;; [vmvnq_m_s, vmvnq_m_u])
3573*0bfacb9bSmrg;;
3574*0bfacb9bSmrg(define_insn "mve_vmvnq_m_<supf><mode>"
3575*0bfacb9bSmrg  [
3576*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3577*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3578*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3579*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3580*0bfacb9bSmrg	 VMVNQ_M))
3581*0bfacb9bSmrg  ]
3582*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3583*0bfacb9bSmrg  "vpst\;vmvnt %q0, %q2"
3584*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3585*0bfacb9bSmrg   (set_attr "length""8")])
3586*0bfacb9bSmrg
3587*0bfacb9bSmrg;;
3588*0bfacb9bSmrg;; [vnegq_m_s])
3589*0bfacb9bSmrg;;
3590*0bfacb9bSmrg(define_insn "mve_vnegq_m_s<mode>"
3591*0bfacb9bSmrg  [
3592*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3593*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3594*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3595*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3596*0bfacb9bSmrg	 VNEGQ_M_S))
3597*0bfacb9bSmrg  ]
3598*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3599*0bfacb9bSmrg  "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
3600*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3601*0bfacb9bSmrg   (set_attr "length""8")])
3602*0bfacb9bSmrg
3603*0bfacb9bSmrg;;
3604*0bfacb9bSmrg;; [vpselq_u, vpselq_s])
3605*0bfacb9bSmrg;;
3606*0bfacb9bSmrg(define_insn "mve_vpselq_<supf><mode>"
3607*0bfacb9bSmrg  [
3608*0bfacb9bSmrg   (set (match_operand:MVE_1 0 "s_register_operand" "=w")
3609*0bfacb9bSmrg	(unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
3610*0bfacb9bSmrg		       (match_operand:MVE_1 2 "s_register_operand" "w")
3611*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3612*0bfacb9bSmrg	 VPSELQ))
3613*0bfacb9bSmrg  ]
3614*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3615*0bfacb9bSmrg  "vpsel %q0, %q1, %q2"
3616*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3617*0bfacb9bSmrg])
3618*0bfacb9bSmrg
3619*0bfacb9bSmrg;;
3620*0bfacb9bSmrg;; [vqabsq_m_s])
3621*0bfacb9bSmrg;;
3622*0bfacb9bSmrg(define_insn "mve_vqabsq_m_s<mode>"
3623*0bfacb9bSmrg  [
3624*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3625*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3626*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3627*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3628*0bfacb9bSmrg	 VQABSQ_M_S))
3629*0bfacb9bSmrg  ]
3630*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3631*0bfacb9bSmrg  "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
3632*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3633*0bfacb9bSmrg   (set_attr "length""8")])
3634*0bfacb9bSmrg
3635*0bfacb9bSmrg;;
3636*0bfacb9bSmrg;; [vqdmlahq_n_s])
3637*0bfacb9bSmrg;;
3638*0bfacb9bSmrg(define_insn "mve_vqdmlahq_n_<supf><mode>"
3639*0bfacb9bSmrg  [
3640*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3641*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3642*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3643*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")]
3644*0bfacb9bSmrg	 VQDMLAHQ_N))
3645*0bfacb9bSmrg  ]
3646*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3647*0bfacb9bSmrg  "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3648*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3649*0bfacb9bSmrg])
3650*0bfacb9bSmrg
3651*0bfacb9bSmrg;;
3652*0bfacb9bSmrg;; [vqdmlashq_n_s])
3653*0bfacb9bSmrg;;
3654*0bfacb9bSmrg(define_insn "mve_vqdmlashq_n_<supf><mode>"
3655*0bfacb9bSmrg  [
3656*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3657*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3658*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3659*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")]
3660*0bfacb9bSmrg	 VQDMLASHQ_N))
3661*0bfacb9bSmrg  ]
3662*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3663*0bfacb9bSmrg  "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3664*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3665*0bfacb9bSmrg])
3666*0bfacb9bSmrg
3667*0bfacb9bSmrg;;
3668*0bfacb9bSmrg;; [vqnegq_m_s])
3669*0bfacb9bSmrg;;
3670*0bfacb9bSmrg(define_insn "mve_vqnegq_m_s<mode>"
3671*0bfacb9bSmrg  [
3672*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3673*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3674*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3675*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3676*0bfacb9bSmrg	 VQNEGQ_M_S))
3677*0bfacb9bSmrg  ]
3678*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3679*0bfacb9bSmrg  "vpst\;vqnegt.s%#<V_sz_elem>	%q0, %q2"
3680*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3681*0bfacb9bSmrg   (set_attr "length""8")])
3682*0bfacb9bSmrg
3683*0bfacb9bSmrg;;
3684*0bfacb9bSmrg;; [vqrdmladhq_s])
3685*0bfacb9bSmrg;;
3686*0bfacb9bSmrg(define_insn "mve_vqrdmladhq_s<mode>"
3687*0bfacb9bSmrg  [
3688*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3689*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3690*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3691*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")]
3692*0bfacb9bSmrg	 VQRDMLADHQ_S))
3693*0bfacb9bSmrg  ]
3694*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3695*0bfacb9bSmrg  "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3696*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3697*0bfacb9bSmrg])
3698*0bfacb9bSmrg
3699*0bfacb9bSmrg;;
3700*0bfacb9bSmrg;; [vqrdmladhxq_s])
3701*0bfacb9bSmrg;;
3702*0bfacb9bSmrg(define_insn "mve_vqrdmladhxq_s<mode>"
3703*0bfacb9bSmrg  [
3704*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3705*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3706*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3707*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")]
3708*0bfacb9bSmrg	 VQRDMLADHXQ_S))
3709*0bfacb9bSmrg  ]
3710*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3711*0bfacb9bSmrg  "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3712*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3713*0bfacb9bSmrg])
3714*0bfacb9bSmrg
3715*0bfacb9bSmrg;;
3716*0bfacb9bSmrg;; [vqrdmlahq_n_s])
3717*0bfacb9bSmrg;;
3718*0bfacb9bSmrg(define_insn "mve_vqrdmlahq_n_<supf><mode>"
3719*0bfacb9bSmrg  [
3720*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3721*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3722*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3723*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")]
3724*0bfacb9bSmrg	 VQRDMLAHQ_N))
3725*0bfacb9bSmrg  ]
3726*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3727*0bfacb9bSmrg  "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3728*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3729*0bfacb9bSmrg])
3730*0bfacb9bSmrg
3731*0bfacb9bSmrg;;
3732*0bfacb9bSmrg;; [vqrdmlashq_n_s])
3733*0bfacb9bSmrg;;
3734*0bfacb9bSmrg(define_insn "mve_vqrdmlashq_n_<supf><mode>"
3735*0bfacb9bSmrg  [
3736*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3737*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3738*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3739*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")]
3740*0bfacb9bSmrg	 VQRDMLASHQ_N))
3741*0bfacb9bSmrg  ]
3742*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3743*0bfacb9bSmrg  "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3744*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3745*0bfacb9bSmrg])
3746*0bfacb9bSmrg
3747*0bfacb9bSmrg;;
3748*0bfacb9bSmrg;; [vqrdmlsdhq_s])
3749*0bfacb9bSmrg;;
3750*0bfacb9bSmrg(define_insn "mve_vqrdmlsdhq_s<mode>"
3751*0bfacb9bSmrg  [
3752*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3753*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3754*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3755*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")]
3756*0bfacb9bSmrg	 VQRDMLSDHQ_S))
3757*0bfacb9bSmrg  ]
3758*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3759*0bfacb9bSmrg  "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3760*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3761*0bfacb9bSmrg])
3762*0bfacb9bSmrg
3763*0bfacb9bSmrg;;
3764*0bfacb9bSmrg;; [vqrdmlsdhxq_s])
3765*0bfacb9bSmrg;;
3766*0bfacb9bSmrg(define_insn "mve_vqrdmlsdhxq_s<mode>"
3767*0bfacb9bSmrg  [
3768*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3769*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3770*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3771*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")]
3772*0bfacb9bSmrg	 VQRDMLSDHXQ_S))
3773*0bfacb9bSmrg  ]
3774*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3775*0bfacb9bSmrg  "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3776*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3777*0bfacb9bSmrg])
3778*0bfacb9bSmrg
3779*0bfacb9bSmrg;;
3780*0bfacb9bSmrg;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
3781*0bfacb9bSmrg;;
3782*0bfacb9bSmrg(define_insn "mve_vqrshlq_m_n_<supf><mode>"
3783*0bfacb9bSmrg  [
3784*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3785*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3786*0bfacb9bSmrg		       (match_operand:SI 2 "s_register_operand" "r")
3787*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3788*0bfacb9bSmrg	 VQRSHLQ_M_N))
3789*0bfacb9bSmrg  ]
3790*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3791*0bfacb9bSmrg  "vpst\;vqrshlt.<supf>%#<V_sz_elem>	%q0, %2"
3792*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3793*0bfacb9bSmrg   (set_attr "length""8")])
3794*0bfacb9bSmrg
3795*0bfacb9bSmrg;;
3796*0bfacb9bSmrg;; [vqshlq_m_r_u, vqshlq_m_r_s])
3797*0bfacb9bSmrg;;
3798*0bfacb9bSmrg(define_insn "mve_vqshlq_m_r_<supf><mode>"
3799*0bfacb9bSmrg  [
3800*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3801*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3802*0bfacb9bSmrg		       (match_operand:SI 2 "s_register_operand" "r")
3803*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3804*0bfacb9bSmrg	 VQSHLQ_M_R))
3805*0bfacb9bSmrg  ]
3806*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3807*0bfacb9bSmrg  "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3808*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3809*0bfacb9bSmrg   (set_attr "length""8")])
3810*0bfacb9bSmrg
3811*0bfacb9bSmrg;;
3812*0bfacb9bSmrg;; [vrev64q_m_u, vrev64q_m_s])
3813*0bfacb9bSmrg;;
3814*0bfacb9bSmrg(define_insn "mve_vrev64q_m_<supf><mode>"
3815*0bfacb9bSmrg  [
3816*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3817*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3818*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3819*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3820*0bfacb9bSmrg	 VREV64Q_M))
3821*0bfacb9bSmrg  ]
3822*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3823*0bfacb9bSmrg  "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
3824*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3825*0bfacb9bSmrg   (set_attr "length""8")])
3826*0bfacb9bSmrg
3827*0bfacb9bSmrg;;
3828*0bfacb9bSmrg;; [vrshlq_m_n_s, vrshlq_m_n_u])
3829*0bfacb9bSmrg;;
3830*0bfacb9bSmrg(define_insn "mve_vrshlq_m_n_<supf><mode>"
3831*0bfacb9bSmrg  [
3832*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3833*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3834*0bfacb9bSmrg		       (match_operand:SI 2 "s_register_operand" "r")
3835*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3836*0bfacb9bSmrg	 VRSHLQ_M_N))
3837*0bfacb9bSmrg  ]
3838*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3839*0bfacb9bSmrg  "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3840*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3841*0bfacb9bSmrg   (set_attr "length""8")])
3842*0bfacb9bSmrg
3843*0bfacb9bSmrg;;
3844*0bfacb9bSmrg;; [vshlq_m_r_u, vshlq_m_r_s])
3845*0bfacb9bSmrg;;
3846*0bfacb9bSmrg(define_insn "mve_vshlq_m_r_<supf><mode>"
3847*0bfacb9bSmrg  [
3848*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3849*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3850*0bfacb9bSmrg		       (match_operand:SI 2 "s_register_operand" "r")
3851*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
3852*0bfacb9bSmrg	 VSHLQ_M_R))
3853*0bfacb9bSmrg  ]
3854*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3855*0bfacb9bSmrg  "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3856*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3857*0bfacb9bSmrg   (set_attr "length""8")])
3858*0bfacb9bSmrg
3859*0bfacb9bSmrg;;
3860*0bfacb9bSmrg;; [vsliq_n_u, vsliq_n_s])
3861*0bfacb9bSmrg;;
3862*0bfacb9bSmrg(define_insn "mve_vsliq_n_<supf><mode>"
3863*0bfacb9bSmrg  [
3864*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3865*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3866*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3867*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
3868*0bfacb9bSmrg	 VSLIQ_N))
3869*0bfacb9bSmrg  ]
3870*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3871*0bfacb9bSmrg  "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
3872*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3873*0bfacb9bSmrg])
3874*0bfacb9bSmrg
3875*0bfacb9bSmrg;;
3876*0bfacb9bSmrg;; [vsriq_n_u, vsriq_n_s])
3877*0bfacb9bSmrg;;
3878*0bfacb9bSmrg(define_insn "mve_vsriq_n_<supf><mode>"
3879*0bfacb9bSmrg  [
3880*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3881*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3882*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3883*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
3884*0bfacb9bSmrg	 VSRIQ_N))
3885*0bfacb9bSmrg  ]
3886*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3887*0bfacb9bSmrg  "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
3888*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3889*0bfacb9bSmrg])
3890*0bfacb9bSmrg
3891*0bfacb9bSmrg;;
3892*0bfacb9bSmrg;; [vqdmlsdhxq_s])
3893*0bfacb9bSmrg;;
3894*0bfacb9bSmrg(define_insn "mve_vqdmlsdhxq_s<mode>"
3895*0bfacb9bSmrg  [
3896*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3897*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3898*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3899*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")]
3900*0bfacb9bSmrg	 VQDMLSDHXQ_S))
3901*0bfacb9bSmrg  ]
3902*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3903*0bfacb9bSmrg  "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3904*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3905*0bfacb9bSmrg])
3906*0bfacb9bSmrg
3907*0bfacb9bSmrg;;
3908*0bfacb9bSmrg;; [vqdmlsdhq_s])
3909*0bfacb9bSmrg;;
3910*0bfacb9bSmrg(define_insn "mve_vqdmlsdhq_s<mode>"
3911*0bfacb9bSmrg  [
3912*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3913*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3914*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3915*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")]
3916*0bfacb9bSmrg	 VQDMLSDHQ_S))
3917*0bfacb9bSmrg  ]
3918*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3919*0bfacb9bSmrg  "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3920*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3921*0bfacb9bSmrg])
3922*0bfacb9bSmrg
3923*0bfacb9bSmrg;;
3924*0bfacb9bSmrg;; [vqdmladhxq_s])
3925*0bfacb9bSmrg;;
3926*0bfacb9bSmrg(define_insn "mve_vqdmladhxq_s<mode>"
3927*0bfacb9bSmrg  [
3928*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3929*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3930*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3931*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")]
3932*0bfacb9bSmrg	 VQDMLADHXQ_S))
3933*0bfacb9bSmrg  ]
3934*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3935*0bfacb9bSmrg  "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3936*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3937*0bfacb9bSmrg])
3938*0bfacb9bSmrg
3939*0bfacb9bSmrg;;
3940*0bfacb9bSmrg;; [vqdmladhq_s])
3941*0bfacb9bSmrg;;
3942*0bfacb9bSmrg(define_insn "mve_vqdmladhq_s<mode>"
3943*0bfacb9bSmrg  [
3944*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3945*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3946*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
3947*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")]
3948*0bfacb9bSmrg	 VQDMLADHQ_S))
3949*0bfacb9bSmrg  ]
3950*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3951*0bfacb9bSmrg  "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3952*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3953*0bfacb9bSmrg])
3954*0bfacb9bSmrg
3955*0bfacb9bSmrg;;
3956*0bfacb9bSmrg;; [vmlsdavaxq_s])
3957*0bfacb9bSmrg;;
3958*0bfacb9bSmrg(define_insn "mve_vmlsdavaxq_s<mode>"
3959*0bfacb9bSmrg  [
3960*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
3961*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3962*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")
3963*0bfacb9bSmrg		    (match_operand:MVE_2 3 "s_register_operand" "w")]
3964*0bfacb9bSmrg	 VMLSDAVAXQ_S))
3965*0bfacb9bSmrg  ]
3966*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3967*0bfacb9bSmrg  "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
3968*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3969*0bfacb9bSmrg])
3970*0bfacb9bSmrg
3971*0bfacb9bSmrg;;
3972*0bfacb9bSmrg;; [vmlsdavaq_s])
3973*0bfacb9bSmrg;;
3974*0bfacb9bSmrg(define_insn "mve_vmlsdavaq_s<mode>"
3975*0bfacb9bSmrg  [
3976*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
3977*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3978*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")
3979*0bfacb9bSmrg		    (match_operand:MVE_2 3 "s_register_operand" "w")]
3980*0bfacb9bSmrg	 VMLSDAVAQ_S))
3981*0bfacb9bSmrg  ]
3982*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3983*0bfacb9bSmrg  "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
3984*0bfacb9bSmrg  [(set_attr "type" "mve_move")
3985*0bfacb9bSmrg])
3986*0bfacb9bSmrg
3987*0bfacb9bSmrg;;
3988*0bfacb9bSmrg;; [vmladavaxq_s])
3989*0bfacb9bSmrg;;
3990*0bfacb9bSmrg(define_insn "mve_vmladavaxq_s<mode>"
3991*0bfacb9bSmrg  [
3992*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
3993*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3994*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")
3995*0bfacb9bSmrg		    (match_operand:MVE_2 3 "s_register_operand" "w")]
3996*0bfacb9bSmrg	 VMLADAVAXQ_S))
3997*0bfacb9bSmrg  ]
3998*0bfacb9bSmrg  "TARGET_HAVE_MVE"
3999*0bfacb9bSmrg  "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4000*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4001*0bfacb9bSmrg])
4002*0bfacb9bSmrg;;
4003*0bfacb9bSmrg;; [vabsq_m_f])
4004*0bfacb9bSmrg;;
4005*0bfacb9bSmrg(define_insn "mve_vabsq_m_f<mode>"
4006*0bfacb9bSmrg  [
4007*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4008*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4009*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4010*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4011*0bfacb9bSmrg	 VABSQ_M_F))
4012*0bfacb9bSmrg  ]
4013*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4014*0bfacb9bSmrg  "vpst\;vabst.f%#<V_sz_elem>	%q0, %q2"
4015*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4016*0bfacb9bSmrg   (set_attr "length""8")])
4017*0bfacb9bSmrg
4018*0bfacb9bSmrg;;
4019*0bfacb9bSmrg;; [vaddlvaq_p_s vaddlvaq_p_u])
4020*0bfacb9bSmrg;;
4021*0bfacb9bSmrg(define_insn "mve_vaddlvaq_p_<supf>v4si"
4022*0bfacb9bSmrg  [
4023*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4024*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4025*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
4026*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4027*0bfacb9bSmrg	 VADDLVAQ_P))
4028*0bfacb9bSmrg  ]
4029*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4030*0bfacb9bSmrg  "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
4031*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4032*0bfacb9bSmrg   (set_attr "length""8")])
4033*0bfacb9bSmrg;;
4034*0bfacb9bSmrg;; [vcmlaq_f])
4035*0bfacb9bSmrg;;
4036*0bfacb9bSmrg(define_insn "mve_vcmlaq_f<mode>"
4037*0bfacb9bSmrg  [
4038*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4039*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4040*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4041*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")]
4042*0bfacb9bSmrg	 VCMLAQ_F))
4043*0bfacb9bSmrg  ]
4044*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4045*0bfacb9bSmrg  "vcmla.f%#<V_sz_elem>	%q0, %q2, %q3, #0"
4046*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4047*0bfacb9bSmrg])
4048*0bfacb9bSmrg
4049*0bfacb9bSmrg;;
4050*0bfacb9bSmrg;; [vcmlaq_rot180_f])
4051*0bfacb9bSmrg;;
4052*0bfacb9bSmrg(define_insn "mve_vcmlaq_rot180_f<mode>"
4053*0bfacb9bSmrg  [
4054*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4055*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4056*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4057*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")]
4058*0bfacb9bSmrg	 VCMLAQ_ROT180_F))
4059*0bfacb9bSmrg  ]
4060*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4061*0bfacb9bSmrg  "vcmla.f%#<V_sz_elem>	%q0, %q2, %q3, #180"
4062*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4063*0bfacb9bSmrg])
4064*0bfacb9bSmrg
4065*0bfacb9bSmrg;;
4066*0bfacb9bSmrg;; [vcmlaq_rot270_f])
4067*0bfacb9bSmrg;;
4068*0bfacb9bSmrg(define_insn "mve_vcmlaq_rot270_f<mode>"
4069*0bfacb9bSmrg  [
4070*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4071*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4072*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4073*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")]
4074*0bfacb9bSmrg	 VCMLAQ_ROT270_F))
4075*0bfacb9bSmrg  ]
4076*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4077*0bfacb9bSmrg  "vcmla.f%#<V_sz_elem>	%q0, %q2, %q3, #270"
4078*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4079*0bfacb9bSmrg])
4080*0bfacb9bSmrg
4081*0bfacb9bSmrg;;
4082*0bfacb9bSmrg;; [vcmlaq_rot90_f])
4083*0bfacb9bSmrg;;
4084*0bfacb9bSmrg(define_insn "mve_vcmlaq_rot90_f<mode>"
4085*0bfacb9bSmrg  [
4086*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4087*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4088*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4089*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")]
4090*0bfacb9bSmrg	 VCMLAQ_ROT90_F))
4091*0bfacb9bSmrg  ]
4092*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4093*0bfacb9bSmrg  "vcmla.f%#<V_sz_elem>	%q0, %q2, %q3, #90"
4094*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4095*0bfacb9bSmrg])
4096*0bfacb9bSmrg
4097*0bfacb9bSmrg;;
4098*0bfacb9bSmrg;; [vcmpeqq_m_n_f])
4099*0bfacb9bSmrg;;
4100*0bfacb9bSmrg(define_insn "mve_vcmpeqq_m_n_f<mode>"
4101*0bfacb9bSmrg  [
4102*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4103*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4104*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
4105*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4106*0bfacb9bSmrg	 VCMPEQQ_M_N_F))
4107*0bfacb9bSmrg  ]
4108*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4109*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	eq, %q1, %2"
4110*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4111*0bfacb9bSmrg   (set_attr "length""8")])
4112*0bfacb9bSmrg
4113*0bfacb9bSmrg;;
4114*0bfacb9bSmrg;; [vcmpgeq_m_f])
4115*0bfacb9bSmrg;;
4116*0bfacb9bSmrg(define_insn "mve_vcmpgeq_m_f<mode>"
4117*0bfacb9bSmrg  [
4118*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4119*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4120*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4121*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4122*0bfacb9bSmrg	 VCMPGEQ_M_F))
4123*0bfacb9bSmrg  ]
4124*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4125*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	ge, %q1, %q2"
4126*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4127*0bfacb9bSmrg   (set_attr "length""8")])
4128*0bfacb9bSmrg
4129*0bfacb9bSmrg;;
4130*0bfacb9bSmrg;; [vcmpgeq_m_n_f])
4131*0bfacb9bSmrg;;
4132*0bfacb9bSmrg(define_insn "mve_vcmpgeq_m_n_f<mode>"
4133*0bfacb9bSmrg  [
4134*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4135*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4136*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
4137*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4138*0bfacb9bSmrg	 VCMPGEQ_M_N_F))
4139*0bfacb9bSmrg  ]
4140*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4141*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	ge, %q1, %2"
4142*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4143*0bfacb9bSmrg   (set_attr "length""8")])
4144*0bfacb9bSmrg
4145*0bfacb9bSmrg;;
4146*0bfacb9bSmrg;; [vcmpgtq_m_f])
4147*0bfacb9bSmrg;;
4148*0bfacb9bSmrg(define_insn "mve_vcmpgtq_m_f<mode>"
4149*0bfacb9bSmrg  [
4150*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4151*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4152*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4153*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4154*0bfacb9bSmrg	 VCMPGTQ_M_F))
4155*0bfacb9bSmrg  ]
4156*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4157*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	gt, %q1, %q2"
4158*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4159*0bfacb9bSmrg   (set_attr "length""8")])
4160*0bfacb9bSmrg
4161*0bfacb9bSmrg;;
4162*0bfacb9bSmrg;; [vcmpgtq_m_n_f])
4163*0bfacb9bSmrg;;
4164*0bfacb9bSmrg(define_insn "mve_vcmpgtq_m_n_f<mode>"
4165*0bfacb9bSmrg  [
4166*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4167*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4168*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
4169*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4170*0bfacb9bSmrg	 VCMPGTQ_M_N_F))
4171*0bfacb9bSmrg  ]
4172*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4173*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	gt, %q1, %2"
4174*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4175*0bfacb9bSmrg   (set_attr "length""8")])
4176*0bfacb9bSmrg
4177*0bfacb9bSmrg;;
4178*0bfacb9bSmrg;; [vcmpleq_m_f])
4179*0bfacb9bSmrg;;
4180*0bfacb9bSmrg(define_insn "mve_vcmpleq_m_f<mode>"
4181*0bfacb9bSmrg  [
4182*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4183*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4184*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4185*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4186*0bfacb9bSmrg	 VCMPLEQ_M_F))
4187*0bfacb9bSmrg  ]
4188*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4189*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	le, %q1, %q2"
4190*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4191*0bfacb9bSmrg   (set_attr "length""8")])
4192*0bfacb9bSmrg
4193*0bfacb9bSmrg;;
4194*0bfacb9bSmrg;; [vcmpleq_m_n_f])
4195*0bfacb9bSmrg;;
4196*0bfacb9bSmrg(define_insn "mve_vcmpleq_m_n_f<mode>"
4197*0bfacb9bSmrg  [
4198*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4199*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4200*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
4201*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4202*0bfacb9bSmrg	 VCMPLEQ_M_N_F))
4203*0bfacb9bSmrg  ]
4204*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4205*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	le, %q1, %2"
4206*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4207*0bfacb9bSmrg   (set_attr "length""8")])
4208*0bfacb9bSmrg
4209*0bfacb9bSmrg;;
4210*0bfacb9bSmrg;; [vcmpltq_m_f])
4211*0bfacb9bSmrg;;
4212*0bfacb9bSmrg(define_insn "mve_vcmpltq_m_f<mode>"
4213*0bfacb9bSmrg  [
4214*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4215*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4216*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4217*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4218*0bfacb9bSmrg	 VCMPLTQ_M_F))
4219*0bfacb9bSmrg  ]
4220*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4221*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	lt, %q1, %q2"
4222*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4223*0bfacb9bSmrg   (set_attr "length""8")])
4224*0bfacb9bSmrg
4225*0bfacb9bSmrg;;
4226*0bfacb9bSmrg;; [vcmpltq_m_n_f])
4227*0bfacb9bSmrg;;
4228*0bfacb9bSmrg(define_insn "mve_vcmpltq_m_n_f<mode>"
4229*0bfacb9bSmrg  [
4230*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4231*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4232*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
4233*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4234*0bfacb9bSmrg	 VCMPLTQ_M_N_F))
4235*0bfacb9bSmrg  ]
4236*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4237*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	lt, %q1, %2"
4238*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4239*0bfacb9bSmrg   (set_attr "length""8")])
4240*0bfacb9bSmrg
4241*0bfacb9bSmrg;;
4242*0bfacb9bSmrg;; [vcmpneq_m_f])
4243*0bfacb9bSmrg;;
4244*0bfacb9bSmrg(define_insn "mve_vcmpneq_m_f<mode>"
4245*0bfacb9bSmrg  [
4246*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4247*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4248*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4249*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4250*0bfacb9bSmrg	 VCMPNEQ_M_F))
4251*0bfacb9bSmrg  ]
4252*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4253*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	ne, %q1, %q2"
4254*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4255*0bfacb9bSmrg   (set_attr "length""8")])
4256*0bfacb9bSmrg
4257*0bfacb9bSmrg;;
4258*0bfacb9bSmrg;; [vcmpneq_m_n_f])
4259*0bfacb9bSmrg;;
4260*0bfacb9bSmrg(define_insn "mve_vcmpneq_m_n_f<mode>"
4261*0bfacb9bSmrg  [
4262*0bfacb9bSmrg   (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4263*0bfacb9bSmrg	(unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4264*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
4265*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4266*0bfacb9bSmrg	 VCMPNEQ_M_N_F))
4267*0bfacb9bSmrg  ]
4268*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4269*0bfacb9bSmrg  "vpst\;vcmpt.f%#<V_sz_elem>	ne, %q1, %2"
4270*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4271*0bfacb9bSmrg   (set_attr "length""8")])
4272*0bfacb9bSmrg
4273*0bfacb9bSmrg;;
4274*0bfacb9bSmrg;; [vcvtbq_m_f16_f32])
4275*0bfacb9bSmrg;;
4276*0bfacb9bSmrg(define_insn "mve_vcvtbq_m_f16_f32v8hf"
4277*0bfacb9bSmrg  [
4278*0bfacb9bSmrg   (set (match_operand:V8HF 0 "s_register_operand" "=w")
4279*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4280*0bfacb9bSmrg		       (match_operand:V4SF 2 "s_register_operand" "w")
4281*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4282*0bfacb9bSmrg	 VCVTBQ_M_F16_F32))
4283*0bfacb9bSmrg  ]
4284*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4285*0bfacb9bSmrg  "vpst\;vcvtbt.f16.f32 %q0, %q2"
4286*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4287*0bfacb9bSmrg   (set_attr "length""8")])
4288*0bfacb9bSmrg
4289*0bfacb9bSmrg;;
4290*0bfacb9bSmrg;; [vcvtbq_m_f32_f16])
4291*0bfacb9bSmrg;;
4292*0bfacb9bSmrg(define_insn "mve_vcvtbq_m_f32_f16v4sf"
4293*0bfacb9bSmrg  [
4294*0bfacb9bSmrg   (set (match_operand:V4SF 0 "s_register_operand" "=w")
4295*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4296*0bfacb9bSmrg		       (match_operand:V8HF 2 "s_register_operand" "w")
4297*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4298*0bfacb9bSmrg	 VCVTBQ_M_F32_F16))
4299*0bfacb9bSmrg  ]
4300*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4301*0bfacb9bSmrg  "vpst\;vcvtbt.f32.f16 %q0, %q2"
4302*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4303*0bfacb9bSmrg   (set_attr "length""8")])
4304*0bfacb9bSmrg
4305*0bfacb9bSmrg;;
4306*0bfacb9bSmrg;; [vcvttq_m_f16_f32])
4307*0bfacb9bSmrg;;
4308*0bfacb9bSmrg(define_insn "mve_vcvttq_m_f16_f32v8hf"
4309*0bfacb9bSmrg  [
4310*0bfacb9bSmrg   (set (match_operand:V8HF 0 "s_register_operand" "=w")
4311*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4312*0bfacb9bSmrg		       (match_operand:V4SF 2 "s_register_operand" "w")
4313*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4314*0bfacb9bSmrg	 VCVTTQ_M_F16_F32))
4315*0bfacb9bSmrg  ]
4316*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4317*0bfacb9bSmrg  "vpst\;vcvttt.f16.f32 %q0, %q2"
4318*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4319*0bfacb9bSmrg   (set_attr "length""8")])
4320*0bfacb9bSmrg
4321*0bfacb9bSmrg;;
4322*0bfacb9bSmrg;; [vcvttq_m_f32_f16])
4323*0bfacb9bSmrg;;
4324*0bfacb9bSmrg(define_insn "mve_vcvttq_m_f32_f16v4sf"
4325*0bfacb9bSmrg  [
4326*0bfacb9bSmrg   (set (match_operand:V4SF 0 "s_register_operand" "=w")
4327*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4328*0bfacb9bSmrg		       (match_operand:V8HF 2 "s_register_operand" "w")
4329*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4330*0bfacb9bSmrg	 VCVTTQ_M_F32_F16))
4331*0bfacb9bSmrg  ]
4332*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4333*0bfacb9bSmrg  "vpst\;vcvttt.f32.f16 %q0, %q2"
4334*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4335*0bfacb9bSmrg   (set_attr "length""8")])
4336*0bfacb9bSmrg
4337*0bfacb9bSmrg;;
4338*0bfacb9bSmrg;; [vdupq_m_n_f])
4339*0bfacb9bSmrg;;
4340*0bfacb9bSmrg(define_insn "mve_vdupq_m_n_f<mode>"
4341*0bfacb9bSmrg  [
4342*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4343*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4344*0bfacb9bSmrg		       (match_operand:<V_elem> 2 "s_register_operand" "r")
4345*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4346*0bfacb9bSmrg	 VDUPQ_M_N_F))
4347*0bfacb9bSmrg  ]
4348*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4349*0bfacb9bSmrg  "vpst\;vdupt.%#<V_sz_elem>	%q0, %2"
4350*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4351*0bfacb9bSmrg   (set_attr "length""8")])
4352*0bfacb9bSmrg
4353*0bfacb9bSmrg;;
4354*0bfacb9bSmrg;; [vfmaq_f])
4355*0bfacb9bSmrg;;
4356*0bfacb9bSmrg(define_insn "mve_vfmaq_f<mode>"
4357*0bfacb9bSmrg  [
4358*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4359*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4360*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4361*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")]
4362*0bfacb9bSmrg	 VFMAQ_F))
4363*0bfacb9bSmrg  ]
4364*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4365*0bfacb9bSmrg  "vfma.f%#<V_sz_elem>	%q0, %q2, %q3"
4366*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4367*0bfacb9bSmrg])
4368*0bfacb9bSmrg
4369*0bfacb9bSmrg;;
4370*0bfacb9bSmrg;; [vfmaq_n_f])
4371*0bfacb9bSmrg;;
4372*0bfacb9bSmrg(define_insn "mve_vfmaq_n_f<mode>"
4373*0bfacb9bSmrg  [
4374*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4375*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4376*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4377*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")]
4378*0bfacb9bSmrg	 VFMAQ_N_F))
4379*0bfacb9bSmrg  ]
4380*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4381*0bfacb9bSmrg  "vfma.f%#<V_sz_elem>	%q0, %q2, %3"
4382*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4383*0bfacb9bSmrg])
4384*0bfacb9bSmrg
4385*0bfacb9bSmrg;;
4386*0bfacb9bSmrg;; [vfmasq_n_f])
4387*0bfacb9bSmrg;;
4388*0bfacb9bSmrg(define_insn "mve_vfmasq_n_f<mode>"
4389*0bfacb9bSmrg  [
4390*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4391*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4392*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4393*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")]
4394*0bfacb9bSmrg	 VFMASQ_N_F))
4395*0bfacb9bSmrg  ]
4396*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4397*0bfacb9bSmrg  "vfmas.f%#<V_sz_elem>	%q0, %q2, %3"
4398*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4399*0bfacb9bSmrg])
4400*0bfacb9bSmrg;;
4401*0bfacb9bSmrg;; [vfmsq_f])
4402*0bfacb9bSmrg;;
4403*0bfacb9bSmrg(define_insn "mve_vfmsq_f<mode>"
4404*0bfacb9bSmrg  [
4405*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4406*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4407*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4408*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")]
4409*0bfacb9bSmrg	 VFMSQ_F))
4410*0bfacb9bSmrg  ]
4411*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4412*0bfacb9bSmrg  "vfms.f%#<V_sz_elem>	%q0, %q2, %q3"
4413*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4414*0bfacb9bSmrg])
4415*0bfacb9bSmrg
4416*0bfacb9bSmrg;;
4417*0bfacb9bSmrg;; [vmaxnmaq_m_f])
4418*0bfacb9bSmrg;;
4419*0bfacb9bSmrg(define_insn "mve_vmaxnmaq_m_f<mode>"
4420*0bfacb9bSmrg  [
4421*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4422*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4423*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4424*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4425*0bfacb9bSmrg	 VMAXNMAQ_M_F))
4426*0bfacb9bSmrg  ]
4427*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4428*0bfacb9bSmrg  "vpst\;vmaxnmat.f%#<V_sz_elem>	%q0, %q2"
4429*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4430*0bfacb9bSmrg   (set_attr "length""8")])
4431*0bfacb9bSmrg;;
4432*0bfacb9bSmrg;; [vmaxnmavq_p_f])
4433*0bfacb9bSmrg;;
4434*0bfacb9bSmrg(define_insn "mve_vmaxnmavq_p_f<mode>"
4435*0bfacb9bSmrg  [
4436*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4437*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4438*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4439*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4440*0bfacb9bSmrg	 VMAXNMAVQ_P_F))
4441*0bfacb9bSmrg  ]
4442*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4443*0bfacb9bSmrg  "vpst\;vmaxnmavt.f%#<V_sz_elem>	%0, %q2"
4444*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4445*0bfacb9bSmrg   (set_attr "length""8")])
4446*0bfacb9bSmrg
4447*0bfacb9bSmrg;;
4448*0bfacb9bSmrg;; [vmaxnmvq_p_f])
4449*0bfacb9bSmrg;;
4450*0bfacb9bSmrg(define_insn "mve_vmaxnmvq_p_f<mode>"
4451*0bfacb9bSmrg  [
4452*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4453*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4454*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4455*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4456*0bfacb9bSmrg	 VMAXNMVQ_P_F))
4457*0bfacb9bSmrg  ]
4458*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4459*0bfacb9bSmrg  "vpst\;vmaxnmvt.f%#<V_sz_elem>	%0, %q2"
4460*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4461*0bfacb9bSmrg   (set_attr "length""8")])
4462*0bfacb9bSmrg;;
4463*0bfacb9bSmrg;; [vminnmaq_m_f])
4464*0bfacb9bSmrg;;
4465*0bfacb9bSmrg(define_insn "mve_vminnmaq_m_f<mode>"
4466*0bfacb9bSmrg  [
4467*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4468*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4469*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4470*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4471*0bfacb9bSmrg	 VMINNMAQ_M_F))
4472*0bfacb9bSmrg  ]
4473*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4474*0bfacb9bSmrg  "vpst\;vminnmat.f%#<V_sz_elem>	%q0, %q2"
4475*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4476*0bfacb9bSmrg   (set_attr "length""8")])
4477*0bfacb9bSmrg
4478*0bfacb9bSmrg;;
4479*0bfacb9bSmrg;; [vminnmavq_p_f])
4480*0bfacb9bSmrg;;
4481*0bfacb9bSmrg(define_insn "mve_vminnmavq_p_f<mode>"
4482*0bfacb9bSmrg  [
4483*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4484*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4485*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4486*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4487*0bfacb9bSmrg	 VMINNMAVQ_P_F))
4488*0bfacb9bSmrg  ]
4489*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4490*0bfacb9bSmrg  "vpst\;vminnmavt.f%#<V_sz_elem>	%0, %q2"
4491*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4492*0bfacb9bSmrg   (set_attr "length""8")])
4493*0bfacb9bSmrg;;
4494*0bfacb9bSmrg;; [vminnmvq_p_f])
4495*0bfacb9bSmrg;;
4496*0bfacb9bSmrg(define_insn "mve_vminnmvq_p_f<mode>"
4497*0bfacb9bSmrg  [
4498*0bfacb9bSmrg   (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4499*0bfacb9bSmrg	(unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4500*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4501*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4502*0bfacb9bSmrg	 VMINNMVQ_P_F))
4503*0bfacb9bSmrg  ]
4504*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4505*0bfacb9bSmrg  "vpst\;vminnmvt.f%#<V_sz_elem>	%0, %q2"
4506*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4507*0bfacb9bSmrg   (set_attr "length""8")])
4508*0bfacb9bSmrg
4509*0bfacb9bSmrg;;
4510*0bfacb9bSmrg;; [vmlaldavaq_s, vmlaldavaq_u])
4511*0bfacb9bSmrg;;
4512*0bfacb9bSmrg(define_insn "mve_vmlaldavaq_<supf><mode>"
4513*0bfacb9bSmrg  [
4514*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4515*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4516*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4517*0bfacb9bSmrg		       (match_operand:MVE_5 3 "s_register_operand" "w")]
4518*0bfacb9bSmrg	 VMLALDAVAQ))
4519*0bfacb9bSmrg  ]
4520*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4521*0bfacb9bSmrg  "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4522*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4523*0bfacb9bSmrg])
4524*0bfacb9bSmrg
4525*0bfacb9bSmrg;;
4526*0bfacb9bSmrg;; [vmlaldavaxq_s])
4527*0bfacb9bSmrg;;
4528*0bfacb9bSmrg(define_insn "mve_vmlaldavaxq_s<mode>"
4529*0bfacb9bSmrg  [
4530*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4531*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4532*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4533*0bfacb9bSmrg		       (match_operand:MVE_5 3 "s_register_operand" "w")]
4534*0bfacb9bSmrg	 VMLALDAVAXQ_S))
4535*0bfacb9bSmrg  ]
4536*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4537*0bfacb9bSmrg  "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4538*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4539*0bfacb9bSmrg])
4540*0bfacb9bSmrg
4541*0bfacb9bSmrg;;
4542*0bfacb9bSmrg;; [vmlaldavq_p_u, vmlaldavq_p_s])
4543*0bfacb9bSmrg;;
4544*0bfacb9bSmrg(define_insn "mve_vmlaldavq_p_<supf><mode>"
4545*0bfacb9bSmrg  [
4546*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4547*0bfacb9bSmrg	(unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4548*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4549*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4550*0bfacb9bSmrg	 VMLALDAVQ_P))
4551*0bfacb9bSmrg  ]
4552*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4553*0bfacb9bSmrg  "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4554*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4555*0bfacb9bSmrg   (set_attr "length""8")])
4556*0bfacb9bSmrg
4557*0bfacb9bSmrg;;
4558*0bfacb9bSmrg;; [vmlaldavxq_p_s])
4559*0bfacb9bSmrg;;
4560*0bfacb9bSmrg(define_insn "mve_vmlaldavxq_p_s<mode>"
4561*0bfacb9bSmrg  [
4562*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4563*0bfacb9bSmrg	(unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4564*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4565*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4566*0bfacb9bSmrg	 VMLALDAVXQ_P_S))
4567*0bfacb9bSmrg  ]
4568*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4569*0bfacb9bSmrg  "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
4570*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4571*0bfacb9bSmrg   (set_attr "length""8")])
4572*0bfacb9bSmrg;;
4573*0bfacb9bSmrg;; [vmlsldavaq_s])
4574*0bfacb9bSmrg;;
4575*0bfacb9bSmrg(define_insn "mve_vmlsldavaq_s<mode>"
4576*0bfacb9bSmrg  [
4577*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4578*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4579*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4580*0bfacb9bSmrg		       (match_operand:MVE_5 3 "s_register_operand" "w")]
4581*0bfacb9bSmrg	 VMLSLDAVAQ_S))
4582*0bfacb9bSmrg  ]
4583*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4584*0bfacb9bSmrg  "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4585*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4586*0bfacb9bSmrg])
4587*0bfacb9bSmrg
4588*0bfacb9bSmrg;;
4589*0bfacb9bSmrg;; [vmlsldavaxq_s])
4590*0bfacb9bSmrg;;
4591*0bfacb9bSmrg(define_insn "mve_vmlsldavaxq_s<mode>"
4592*0bfacb9bSmrg  [
4593*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4594*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4595*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4596*0bfacb9bSmrg		       (match_operand:MVE_5 3 "s_register_operand" "w")]
4597*0bfacb9bSmrg	 VMLSLDAVAXQ_S))
4598*0bfacb9bSmrg  ]
4599*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4600*0bfacb9bSmrg  "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4601*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4602*0bfacb9bSmrg])
4603*0bfacb9bSmrg
4604*0bfacb9bSmrg;;
4605*0bfacb9bSmrg;; [vmlsldavq_p_s])
4606*0bfacb9bSmrg;;
4607*0bfacb9bSmrg(define_insn "mve_vmlsldavq_p_s<mode>"
4608*0bfacb9bSmrg  [
4609*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4610*0bfacb9bSmrg	(unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4611*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4612*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4613*0bfacb9bSmrg	 VMLSLDAVQ_P_S))
4614*0bfacb9bSmrg  ]
4615*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4616*0bfacb9bSmrg  "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4617*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4618*0bfacb9bSmrg   (set_attr "length""8")])
4619*0bfacb9bSmrg
4620*0bfacb9bSmrg;;
4621*0bfacb9bSmrg;; [vmlsldavxq_p_s])
4622*0bfacb9bSmrg;;
4623*0bfacb9bSmrg(define_insn "mve_vmlsldavxq_p_s<mode>"
4624*0bfacb9bSmrg  [
4625*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4626*0bfacb9bSmrg	(unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4627*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4628*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4629*0bfacb9bSmrg	 VMLSLDAVXQ_P_S))
4630*0bfacb9bSmrg  ]
4631*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4632*0bfacb9bSmrg  "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4633*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4634*0bfacb9bSmrg   (set_attr "length""8")])
4635*0bfacb9bSmrg;;
4636*0bfacb9bSmrg;; [vmovlbq_m_u, vmovlbq_m_s])
4637*0bfacb9bSmrg;;
4638*0bfacb9bSmrg(define_insn "mve_vmovlbq_m_<supf><mode>"
4639*0bfacb9bSmrg  [
4640*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4641*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4642*0bfacb9bSmrg		       (match_operand:MVE_3 2 "s_register_operand" "w")
4643*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4644*0bfacb9bSmrg	 VMOVLBQ_M))
4645*0bfacb9bSmrg  ]
4646*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4647*0bfacb9bSmrg  "vpst\;vmovlbt.<supf>%#<V_sz_elem>	%q0, %q2"
4648*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4649*0bfacb9bSmrg   (set_attr "length""8")])
4650*0bfacb9bSmrg;;
4651*0bfacb9bSmrg;; [vmovltq_m_u, vmovltq_m_s])
4652*0bfacb9bSmrg;;
4653*0bfacb9bSmrg(define_insn "mve_vmovltq_m_<supf><mode>"
4654*0bfacb9bSmrg  [
4655*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4656*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4657*0bfacb9bSmrg		       (match_operand:MVE_3 2 "s_register_operand" "w")
4658*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4659*0bfacb9bSmrg	 VMOVLTQ_M))
4660*0bfacb9bSmrg  ]
4661*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4662*0bfacb9bSmrg  "vpst\;vmovltt.<supf>%#<V_sz_elem>	%q0, %q2"
4663*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4664*0bfacb9bSmrg   (set_attr "length""8")])
4665*0bfacb9bSmrg;;
4666*0bfacb9bSmrg;; [vmovnbq_m_u, vmovnbq_m_s])
4667*0bfacb9bSmrg;;
4668*0bfacb9bSmrg(define_insn "mve_vmovnbq_m_<supf><mode>"
4669*0bfacb9bSmrg  [
4670*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4671*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4672*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4673*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4674*0bfacb9bSmrg	 VMOVNBQ_M))
4675*0bfacb9bSmrg  ]
4676*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4677*0bfacb9bSmrg  "vpst\;vmovnbt.i%#<V_sz_elem>	%q0, %q2"
4678*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4679*0bfacb9bSmrg   (set_attr "length""8")])
4680*0bfacb9bSmrg
4681*0bfacb9bSmrg;;
4682*0bfacb9bSmrg;; [vmovntq_m_u, vmovntq_m_s])
4683*0bfacb9bSmrg;;
4684*0bfacb9bSmrg(define_insn "mve_vmovntq_m_<supf><mode>"
4685*0bfacb9bSmrg  [
4686*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4687*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4688*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4689*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4690*0bfacb9bSmrg	 VMOVNTQ_M))
4691*0bfacb9bSmrg  ]
4692*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4693*0bfacb9bSmrg  "vpst\;vmovntt.i%#<V_sz_elem>	%q0, %q2"
4694*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4695*0bfacb9bSmrg   (set_attr "length""8")])
4696*0bfacb9bSmrg
4697*0bfacb9bSmrg;;
4698*0bfacb9bSmrg;; [vmvnq_m_n_u, vmvnq_m_n_s])
4699*0bfacb9bSmrg;;
4700*0bfacb9bSmrg(define_insn "mve_vmvnq_m_n_<supf><mode>"
4701*0bfacb9bSmrg  [
4702*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4703*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4704*0bfacb9bSmrg		       (match_operand:SI 2 "immediate_operand" "i")
4705*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4706*0bfacb9bSmrg	 VMVNQ_M_N))
4707*0bfacb9bSmrg  ]
4708*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4709*0bfacb9bSmrg  "vpst\;vmvnt.i%#<V_sz_elem>	%q0, %2"
4710*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4711*0bfacb9bSmrg   (set_attr "length""8")])
4712*0bfacb9bSmrg;;
4713*0bfacb9bSmrg;; [vnegq_m_f])
4714*0bfacb9bSmrg;;
4715*0bfacb9bSmrg(define_insn "mve_vnegq_m_f<mode>"
4716*0bfacb9bSmrg  [
4717*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4718*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4719*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4720*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4721*0bfacb9bSmrg	 VNEGQ_M_F))
4722*0bfacb9bSmrg  ]
4723*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4724*0bfacb9bSmrg  "vpst\;vnegt.f%#<V_sz_elem>	%q0, %q2"
4725*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4726*0bfacb9bSmrg   (set_attr "length""8")])
4727*0bfacb9bSmrg
4728*0bfacb9bSmrg;;
4729*0bfacb9bSmrg;; [vorrq_m_n_s, vorrq_m_n_u])
4730*0bfacb9bSmrg;;
4731*0bfacb9bSmrg(define_insn "mve_vorrq_m_n_<supf><mode>"
4732*0bfacb9bSmrg  [
4733*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4734*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4735*0bfacb9bSmrg		       (match_operand:SI 2 "immediate_operand" "i")
4736*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4737*0bfacb9bSmrg	 VORRQ_M_N))
4738*0bfacb9bSmrg  ]
4739*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4740*0bfacb9bSmrg  "vpst\;vorrt.i%#<V_sz_elem>	%q0, %2"
4741*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4742*0bfacb9bSmrg   (set_attr "length""8")])
4743*0bfacb9bSmrg;;
4744*0bfacb9bSmrg;; [vpselq_f])
4745*0bfacb9bSmrg;;
4746*0bfacb9bSmrg(define_insn "mve_vpselq_f<mode>"
4747*0bfacb9bSmrg  [
4748*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4749*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
4750*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4751*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4752*0bfacb9bSmrg	 VPSELQ_F))
4753*0bfacb9bSmrg  ]
4754*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4755*0bfacb9bSmrg  "vpsel %q0, %q1, %q2"
4756*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4757*0bfacb9bSmrg])
4758*0bfacb9bSmrg
4759*0bfacb9bSmrg;;
4760*0bfacb9bSmrg;; [vqmovnbq_m_s, vqmovnbq_m_u])
4761*0bfacb9bSmrg;;
4762*0bfacb9bSmrg(define_insn "mve_vqmovnbq_m_<supf><mode>"
4763*0bfacb9bSmrg  [
4764*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4765*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4766*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4767*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4768*0bfacb9bSmrg	 VQMOVNBQ_M))
4769*0bfacb9bSmrg  ]
4770*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4771*0bfacb9bSmrg  "vpst\;vqmovnbt.<supf>%#<V_sz_elem>	%q0, %q2"
4772*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4773*0bfacb9bSmrg   (set_attr "length""8")])
4774*0bfacb9bSmrg
4775*0bfacb9bSmrg;;
4776*0bfacb9bSmrg;; [vqmovntq_m_u, vqmovntq_m_s])
4777*0bfacb9bSmrg;;
4778*0bfacb9bSmrg(define_insn "mve_vqmovntq_m_<supf><mode>"
4779*0bfacb9bSmrg  [
4780*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4781*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4782*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4783*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4784*0bfacb9bSmrg	 VQMOVNTQ_M))
4785*0bfacb9bSmrg  ]
4786*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4787*0bfacb9bSmrg  "vpst\;vqmovntt.<supf>%#<V_sz_elem>	%q0, %q2"
4788*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4789*0bfacb9bSmrg   (set_attr "length""8")])
4790*0bfacb9bSmrg
4791*0bfacb9bSmrg;;
4792*0bfacb9bSmrg;; [vqmovunbq_m_s])
4793*0bfacb9bSmrg;;
4794*0bfacb9bSmrg(define_insn "mve_vqmovunbq_m_s<mode>"
4795*0bfacb9bSmrg  [
4796*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4797*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4798*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4799*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4800*0bfacb9bSmrg	 VQMOVUNBQ_M_S))
4801*0bfacb9bSmrg  ]
4802*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4803*0bfacb9bSmrg  "vpst\;vqmovunbt.s%#<V_sz_elem>	%q0, %q2"
4804*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4805*0bfacb9bSmrg   (set_attr "length""8")])
4806*0bfacb9bSmrg
4807*0bfacb9bSmrg;;
4808*0bfacb9bSmrg;; [vqmovuntq_m_s])
4809*0bfacb9bSmrg;;
4810*0bfacb9bSmrg(define_insn "mve_vqmovuntq_m_s<mode>"
4811*0bfacb9bSmrg  [
4812*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4813*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4814*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4815*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4816*0bfacb9bSmrg	 VQMOVUNTQ_M_S))
4817*0bfacb9bSmrg  ]
4818*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4819*0bfacb9bSmrg  "vpst\;vqmovuntt.s%#<V_sz_elem>	%q0, %q2"
4820*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4821*0bfacb9bSmrg   (set_attr "length""8")])
4822*0bfacb9bSmrg
4823*0bfacb9bSmrg;;
4824*0bfacb9bSmrg;; [vqrshrntq_n_u, vqrshrntq_n_s])
4825*0bfacb9bSmrg;;
4826*0bfacb9bSmrg(define_insn "mve_vqrshrntq_n_<supf><mode>"
4827*0bfacb9bSmrg  [
4828*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4829*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4830*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4831*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_8" "Rb")]
4832*0bfacb9bSmrg	 VQRSHRNTQ_N))
4833*0bfacb9bSmrg  ]
4834*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4835*0bfacb9bSmrg  "vqrshrnt.<supf>%#<V_sz_elem>	%q0, %q2, %3"
4836*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4837*0bfacb9bSmrg])
4838*0bfacb9bSmrg
4839*0bfacb9bSmrg;;
4840*0bfacb9bSmrg;; [vqrshruntq_n_s])
4841*0bfacb9bSmrg;;
4842*0bfacb9bSmrg(define_insn "mve_vqrshruntq_n_s<mode>"
4843*0bfacb9bSmrg  [
4844*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4845*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4846*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4847*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_8" "Rb")]
4848*0bfacb9bSmrg	 VQRSHRUNTQ_N_S))
4849*0bfacb9bSmrg  ]
4850*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4851*0bfacb9bSmrg  "vqrshrunt.s%#<V_sz_elem>	%q0, %q2, %3"
4852*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4853*0bfacb9bSmrg])
4854*0bfacb9bSmrg
4855*0bfacb9bSmrg;;
4856*0bfacb9bSmrg;; [vqshrnbq_n_u, vqshrnbq_n_s])
4857*0bfacb9bSmrg;;
4858*0bfacb9bSmrg(define_insn "mve_vqshrnbq_n_<supf><mode>"
4859*0bfacb9bSmrg  [
4860*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4861*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4862*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4863*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4864*0bfacb9bSmrg	 VQSHRNBQ_N))
4865*0bfacb9bSmrg  ]
4866*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4867*0bfacb9bSmrg  "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4868*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4869*0bfacb9bSmrg])
4870*0bfacb9bSmrg
4871*0bfacb9bSmrg;;
4872*0bfacb9bSmrg;; [vqshrntq_n_u, vqshrntq_n_s])
4873*0bfacb9bSmrg;;
4874*0bfacb9bSmrg(define_insn "mve_vqshrntq_n_<supf><mode>"
4875*0bfacb9bSmrg  [
4876*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4877*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4878*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4879*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4880*0bfacb9bSmrg	 VQSHRNTQ_N))
4881*0bfacb9bSmrg  ]
4882*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4883*0bfacb9bSmrg  "vqshrnt.<supf>%#<V_sz_elem>	%q0, %q2, %3"
4884*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4885*0bfacb9bSmrg])
4886*0bfacb9bSmrg
4887*0bfacb9bSmrg;;
4888*0bfacb9bSmrg;; [vqshrunbq_n_s])
4889*0bfacb9bSmrg;;
4890*0bfacb9bSmrg(define_insn "mve_vqshrunbq_n_s<mode>"
4891*0bfacb9bSmrg  [
4892*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4893*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4894*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4895*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4896*0bfacb9bSmrg	 VQSHRUNBQ_N_S))
4897*0bfacb9bSmrg  ]
4898*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4899*0bfacb9bSmrg  "vqshrunb.s%#<V_sz_elem>	%q0, %q2, %3"
4900*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4901*0bfacb9bSmrg])
4902*0bfacb9bSmrg
4903*0bfacb9bSmrg;;
4904*0bfacb9bSmrg;; [vqshruntq_n_s])
4905*0bfacb9bSmrg;;
4906*0bfacb9bSmrg(define_insn "mve_vqshruntq_n_s<mode>"
4907*0bfacb9bSmrg  [
4908*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4909*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4910*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
4911*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
4912*0bfacb9bSmrg	 VQSHRUNTQ_N_S))
4913*0bfacb9bSmrg  ]
4914*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4915*0bfacb9bSmrg  "vqshrunt.s%#<V_sz_elem>	%q0, %q2, %3"
4916*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4917*0bfacb9bSmrg])
4918*0bfacb9bSmrg
4919*0bfacb9bSmrg;;
4920*0bfacb9bSmrg;; [vrev32q_m_f])
4921*0bfacb9bSmrg;;
4922*0bfacb9bSmrg(define_insn "mve_vrev32q_m_fv8hf"
4923*0bfacb9bSmrg  [
4924*0bfacb9bSmrg   (set (match_operand:V8HF 0 "s_register_operand" "=w")
4925*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4926*0bfacb9bSmrg		       (match_operand:V8HF 2 "s_register_operand" "w")
4927*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4928*0bfacb9bSmrg	 VREV32Q_M_F))
4929*0bfacb9bSmrg  ]
4930*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4931*0bfacb9bSmrg  "vpst\;vrev32t.16 %q0, %q2"
4932*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4933*0bfacb9bSmrg   (set_attr "length""8")])
4934*0bfacb9bSmrg
4935*0bfacb9bSmrg;;
4936*0bfacb9bSmrg;; [vrev32q_m_s, vrev32q_m_u])
4937*0bfacb9bSmrg;;
4938*0bfacb9bSmrg(define_insn "mve_vrev32q_m_<supf><mode>"
4939*0bfacb9bSmrg  [
4940*0bfacb9bSmrg   (set (match_operand:MVE_3 0 "s_register_operand" "=w")
4941*0bfacb9bSmrg	(unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
4942*0bfacb9bSmrg		       (match_operand:MVE_3 2 "s_register_operand" "w")
4943*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4944*0bfacb9bSmrg	 VREV32Q_M))
4945*0bfacb9bSmrg  ]
4946*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4947*0bfacb9bSmrg  "vpst\;vrev32t.%#<V_sz_elem>	%q0, %q2"
4948*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4949*0bfacb9bSmrg   (set_attr "length""8")])
4950*0bfacb9bSmrg
4951*0bfacb9bSmrg;;
4952*0bfacb9bSmrg;; [vrev64q_m_f])
4953*0bfacb9bSmrg;;
4954*0bfacb9bSmrg(define_insn "mve_vrev64q_m_f<mode>"
4955*0bfacb9bSmrg  [
4956*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4957*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4958*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
4959*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4960*0bfacb9bSmrg	 VREV64Q_M_F))
4961*0bfacb9bSmrg  ]
4962*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4963*0bfacb9bSmrg  "vpst\;vrev64t.%#<V_sz_elem>	%q0, %q2"
4964*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4965*0bfacb9bSmrg   (set_attr "length""8")])
4966*0bfacb9bSmrg
4967*0bfacb9bSmrg;;
4968*0bfacb9bSmrg;; [vrmlaldavhaxq_s])
4969*0bfacb9bSmrg;;
4970*0bfacb9bSmrg(define_insn "mve_vrmlaldavhaxq_sv4si"
4971*0bfacb9bSmrg  [
4972*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4973*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4974*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
4975*0bfacb9bSmrg		       (match_operand:V4SI 3 "s_register_operand" "w")]
4976*0bfacb9bSmrg	 VRMLALDAVHAXQ_S))
4977*0bfacb9bSmrg  ]
4978*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4979*0bfacb9bSmrg  "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
4980*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4981*0bfacb9bSmrg])
4982*0bfacb9bSmrg
4983*0bfacb9bSmrg;;
4984*0bfacb9bSmrg;; [vrmlaldavhxq_p_s])
4985*0bfacb9bSmrg;;
4986*0bfacb9bSmrg(define_insn "mve_vrmlaldavhxq_p_sv4si"
4987*0bfacb9bSmrg  [
4988*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
4989*0bfacb9bSmrg	(unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4990*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
4991*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
4992*0bfacb9bSmrg	 VRMLALDAVHXQ_P_S))
4993*0bfacb9bSmrg  ]
4994*0bfacb9bSmrg  "TARGET_HAVE_MVE"
4995*0bfacb9bSmrg  "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
4996*0bfacb9bSmrg  [(set_attr "type" "mve_move")
4997*0bfacb9bSmrg   (set_attr "length""8")])
4998*0bfacb9bSmrg
4999*0bfacb9bSmrg;;
5000*0bfacb9bSmrg;; [vrmlsldavhaxq_s])
5001*0bfacb9bSmrg;;
5002*0bfacb9bSmrg(define_insn "mve_vrmlsldavhaxq_sv4si"
5003*0bfacb9bSmrg  [
5004*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
5005*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5006*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
5007*0bfacb9bSmrg		       (match_operand:V4SI 3 "s_register_operand" "w")]
5008*0bfacb9bSmrg	 VRMLSLDAVHAXQ_S))
5009*0bfacb9bSmrg  ]
5010*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5011*0bfacb9bSmrg  "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
5012*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5013*0bfacb9bSmrg])
5014*0bfacb9bSmrg
5015*0bfacb9bSmrg;;
5016*0bfacb9bSmrg;; [vrmlsldavhq_p_s])
5017*0bfacb9bSmrg;;
5018*0bfacb9bSmrg(define_insn "mve_vrmlsldavhq_p_sv4si"
5019*0bfacb9bSmrg  [
5020*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
5021*0bfacb9bSmrg	(unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5022*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
5023*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5024*0bfacb9bSmrg	 VRMLSLDAVHQ_P_S))
5025*0bfacb9bSmrg  ]
5026*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5027*0bfacb9bSmrg  "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
5028*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5029*0bfacb9bSmrg   (set_attr "length""8")])
5030*0bfacb9bSmrg
5031*0bfacb9bSmrg;;
5032*0bfacb9bSmrg;; [vrmlsldavhxq_p_s])
5033*0bfacb9bSmrg;;
5034*0bfacb9bSmrg(define_insn "mve_vrmlsldavhxq_p_sv4si"
5035*0bfacb9bSmrg  [
5036*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
5037*0bfacb9bSmrg	(unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5038*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
5039*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5040*0bfacb9bSmrg	 VRMLSLDAVHXQ_P_S))
5041*0bfacb9bSmrg  ]
5042*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5043*0bfacb9bSmrg  "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
5044*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5045*0bfacb9bSmrg   (set_attr "length""8")])
5046*0bfacb9bSmrg
5047*0bfacb9bSmrg;;
5048*0bfacb9bSmrg;; [vrndaq_m_f])
5049*0bfacb9bSmrg;;
5050*0bfacb9bSmrg(define_insn "mve_vrndaq_m_f<mode>"
5051*0bfacb9bSmrg  [
5052*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5053*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5054*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
5055*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5056*0bfacb9bSmrg	 VRNDAQ_M_F))
5057*0bfacb9bSmrg  ]
5058*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5059*0bfacb9bSmrg  "vpst\;vrintat.f%#<V_sz_elem>	%q0, %q2"
5060*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5061*0bfacb9bSmrg   (set_attr "length""8")])
5062*0bfacb9bSmrg
5063*0bfacb9bSmrg;;
5064*0bfacb9bSmrg;; [vrndmq_m_f])
5065*0bfacb9bSmrg;;
5066*0bfacb9bSmrg(define_insn "mve_vrndmq_m_f<mode>"
5067*0bfacb9bSmrg  [
5068*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5069*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5070*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
5071*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5072*0bfacb9bSmrg	 VRNDMQ_M_F))
5073*0bfacb9bSmrg  ]
5074*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5075*0bfacb9bSmrg  "vpst\;vrintmt.f%#<V_sz_elem>	%q0, %q2"
5076*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5077*0bfacb9bSmrg   (set_attr "length""8")])
5078*0bfacb9bSmrg
5079*0bfacb9bSmrg;;
5080*0bfacb9bSmrg;; [vrndnq_m_f])
5081*0bfacb9bSmrg;;
5082*0bfacb9bSmrg(define_insn "mve_vrndnq_m_f<mode>"
5083*0bfacb9bSmrg  [
5084*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5085*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5086*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
5087*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5088*0bfacb9bSmrg	 VRNDNQ_M_F))
5089*0bfacb9bSmrg  ]
5090*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5091*0bfacb9bSmrg  "vpst\;vrintnt.f%#<V_sz_elem>	%q0, %q2"
5092*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5093*0bfacb9bSmrg   (set_attr "length""8")])
5094*0bfacb9bSmrg
5095*0bfacb9bSmrg;;
5096*0bfacb9bSmrg;; [vrndpq_m_f])
5097*0bfacb9bSmrg;;
5098*0bfacb9bSmrg(define_insn "mve_vrndpq_m_f<mode>"
5099*0bfacb9bSmrg  [
5100*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5101*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5102*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
5103*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5104*0bfacb9bSmrg	 VRNDPQ_M_F))
5105*0bfacb9bSmrg  ]
5106*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5107*0bfacb9bSmrg  "vpst\;vrintpt.f%#<V_sz_elem>	%q0, %q2"
5108*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5109*0bfacb9bSmrg   (set_attr "length""8")])
5110*0bfacb9bSmrg
5111*0bfacb9bSmrg;;
5112*0bfacb9bSmrg;; [vrndxq_m_f])
5113*0bfacb9bSmrg;;
5114*0bfacb9bSmrg(define_insn "mve_vrndxq_m_f<mode>"
5115*0bfacb9bSmrg  [
5116*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5117*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5118*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
5119*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5120*0bfacb9bSmrg	 VRNDXQ_M_F))
5121*0bfacb9bSmrg  ]
5122*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5123*0bfacb9bSmrg  "vpst\;vrintxt.f%#<V_sz_elem>	%q0, %q2"
5124*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5125*0bfacb9bSmrg   (set_attr "length""8")])
5126*0bfacb9bSmrg
5127*0bfacb9bSmrg;;
5128*0bfacb9bSmrg;; [vrshrnbq_n_s, vrshrnbq_n_u])
5129*0bfacb9bSmrg;;
5130*0bfacb9bSmrg(define_insn "mve_vrshrnbq_n_<supf><mode>"
5131*0bfacb9bSmrg  [
5132*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5133*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5134*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
5135*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_8" "Rb")]
5136*0bfacb9bSmrg	 VRSHRNBQ_N))
5137*0bfacb9bSmrg  ]
5138*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5139*0bfacb9bSmrg  "vrshrnb.i%#<V_sz_elem>	%q0, %q2, %3"
5140*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5141*0bfacb9bSmrg])
5142*0bfacb9bSmrg
5143*0bfacb9bSmrg;;
5144*0bfacb9bSmrg;; [vrshrntq_n_u, vrshrntq_n_s])
5145*0bfacb9bSmrg;;
5146*0bfacb9bSmrg(define_insn "mve_vrshrntq_n_<supf><mode>"
5147*0bfacb9bSmrg  [
5148*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5149*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5150*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
5151*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_8" "Rb")]
5152*0bfacb9bSmrg	 VRSHRNTQ_N))
5153*0bfacb9bSmrg  ]
5154*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5155*0bfacb9bSmrg  "vrshrnt.i%#<V_sz_elem>	%q0, %q2, %3"
5156*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5157*0bfacb9bSmrg])
5158*0bfacb9bSmrg
5159*0bfacb9bSmrg;;
5160*0bfacb9bSmrg;; [vshrnbq_n_u, vshrnbq_n_s])
5161*0bfacb9bSmrg;;
5162*0bfacb9bSmrg(define_insn "mve_vshrnbq_n_<supf><mode>"
5163*0bfacb9bSmrg  [
5164*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5165*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5166*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
5167*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5168*0bfacb9bSmrg	 VSHRNBQ_N))
5169*0bfacb9bSmrg  ]
5170*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5171*0bfacb9bSmrg  "vshrnb.i%#<V_sz_elem>	%q0, %q2, %3"
5172*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5173*0bfacb9bSmrg])
5174*0bfacb9bSmrg
5175*0bfacb9bSmrg;;
5176*0bfacb9bSmrg;; [vshrntq_n_s, vshrntq_n_u])
5177*0bfacb9bSmrg;;
5178*0bfacb9bSmrg(define_insn "mve_vshrntq_n_<supf><mode>"
5179*0bfacb9bSmrg  [
5180*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5181*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5182*0bfacb9bSmrg				 (match_operand:MVE_5 2 "s_register_operand" "w")
5183*0bfacb9bSmrg				 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5184*0bfacb9bSmrg	 VSHRNTQ_N))
5185*0bfacb9bSmrg  ]
5186*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5187*0bfacb9bSmrg  "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
5188*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5189*0bfacb9bSmrg])
5190*0bfacb9bSmrg
5191*0bfacb9bSmrg;;
5192*0bfacb9bSmrg;; [vcvtmq_m_s, vcvtmq_m_u])
5193*0bfacb9bSmrg;;
5194*0bfacb9bSmrg(define_insn "mve_vcvtmq_m_<supf><mode>"
5195*0bfacb9bSmrg  [
5196*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5197*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5198*0bfacb9bSmrg		       (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5199*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5200*0bfacb9bSmrg	 VCVTMQ_M))
5201*0bfacb9bSmrg  ]
5202*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5203*0bfacb9bSmrg  "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5204*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5205*0bfacb9bSmrg   (set_attr "length""8")])
5206*0bfacb9bSmrg
5207*0bfacb9bSmrg;;
5208*0bfacb9bSmrg;; [vcvtpq_m_u, vcvtpq_m_s])
5209*0bfacb9bSmrg;;
5210*0bfacb9bSmrg(define_insn "mve_vcvtpq_m_<supf><mode>"
5211*0bfacb9bSmrg  [
5212*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5213*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5214*0bfacb9bSmrg		       (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5215*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5216*0bfacb9bSmrg	 VCVTPQ_M))
5217*0bfacb9bSmrg  ]
5218*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5219*0bfacb9bSmrg  "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5220*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5221*0bfacb9bSmrg   (set_attr "length""8")])
5222*0bfacb9bSmrg
5223*0bfacb9bSmrg;;
5224*0bfacb9bSmrg;; [vcvtnq_m_s, vcvtnq_m_u])
5225*0bfacb9bSmrg;;
5226*0bfacb9bSmrg(define_insn "mve_vcvtnq_m_<supf><mode>"
5227*0bfacb9bSmrg  [
5228*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5229*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5230*0bfacb9bSmrg		       (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5231*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5232*0bfacb9bSmrg	 VCVTNQ_M))
5233*0bfacb9bSmrg  ]
5234*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5235*0bfacb9bSmrg  "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5236*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5237*0bfacb9bSmrg   (set_attr "length""8")])
5238*0bfacb9bSmrg
5239*0bfacb9bSmrg;;
5240*0bfacb9bSmrg;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
5241*0bfacb9bSmrg;;
5242*0bfacb9bSmrg(define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
5243*0bfacb9bSmrg  [
5244*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5245*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5246*0bfacb9bSmrg		       (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5247*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5248*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5249*0bfacb9bSmrg	 VCVTQ_M_N_FROM_F))
5250*0bfacb9bSmrg  ]
5251*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5252*0bfacb9bSmrg  "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
5253*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5254*0bfacb9bSmrg   (set_attr "length""8")])
5255*0bfacb9bSmrg
5256*0bfacb9bSmrg;;
5257*0bfacb9bSmrg;; [vrev16q_m_u, vrev16q_m_s])
5258*0bfacb9bSmrg;;
5259*0bfacb9bSmrg(define_insn "mve_vrev16q_m_<supf>v16qi"
5260*0bfacb9bSmrg  [
5261*0bfacb9bSmrg   (set (match_operand:V16QI 0 "s_register_operand" "=w")
5262*0bfacb9bSmrg	(unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
5263*0bfacb9bSmrg		       (match_operand:V16QI 2 "s_register_operand" "w")
5264*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5265*0bfacb9bSmrg	 VREV16Q_M))
5266*0bfacb9bSmrg  ]
5267*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5268*0bfacb9bSmrg  "vpst\;vrev16t.8 %q0, %q2"
5269*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5270*0bfacb9bSmrg   (set_attr "length""8")])
5271*0bfacb9bSmrg
5272*0bfacb9bSmrg;;
5273*0bfacb9bSmrg;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
5274*0bfacb9bSmrg;;
5275*0bfacb9bSmrg(define_insn "mve_vcvtq_m_from_f_<supf><mode>"
5276*0bfacb9bSmrg  [
5277*0bfacb9bSmrg   (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5278*0bfacb9bSmrg	(unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5279*0bfacb9bSmrg		       (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5280*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
5281*0bfacb9bSmrg	 VCVTQ_M_FROM_F))
5282*0bfacb9bSmrg  ]
5283*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5284*0bfacb9bSmrg  "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5285*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5286*0bfacb9bSmrg   (set_attr "length""8")])
5287*0bfacb9bSmrg
5288*0bfacb9bSmrg;;
5289*0bfacb9bSmrg;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
5290*0bfacb9bSmrg;;
5291*0bfacb9bSmrg(define_insn "mve_vrmlaldavhq_p_<supf>v4si"
5292*0bfacb9bSmrg  [
5293*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
5294*0bfacb9bSmrg	(unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5295*0bfacb9bSmrg		    (match_operand:V4SI 2 "s_register_operand" "w")
5296*0bfacb9bSmrg		    (match_operand:HI 3 "vpr_register_operand" "Up")]
5297*0bfacb9bSmrg	 VRMLALDAVHQ_P))
5298*0bfacb9bSmrg  ]
5299*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5300*0bfacb9bSmrg  "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
5301*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5302*0bfacb9bSmrg   (set_attr "length""8")])
5303*0bfacb9bSmrg
5304*0bfacb9bSmrg;;
5305*0bfacb9bSmrg;; [vrmlsldavhaq_s])
5306*0bfacb9bSmrg;;
5307*0bfacb9bSmrg(define_insn "mve_vrmlsldavhaq_sv4si"
5308*0bfacb9bSmrg  [
5309*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
5310*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5311*0bfacb9bSmrg		    (match_operand:V4SI 2 "s_register_operand" "w")
5312*0bfacb9bSmrg		    (match_operand:V4SI 3 "s_register_operand" "w")]
5313*0bfacb9bSmrg	 VRMLSLDAVHAQ_S))
5314*0bfacb9bSmrg  ]
5315*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5316*0bfacb9bSmrg  "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
5317*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5318*0bfacb9bSmrg])
5319*0bfacb9bSmrg
5320*0bfacb9bSmrg;;
5321*0bfacb9bSmrg;; [vabavq_p_s, vabavq_p_u])
5322*0bfacb9bSmrg;;
5323*0bfacb9bSmrg(define_insn "mve_vabavq_p_<supf><mode>"
5324*0bfacb9bSmrg  [
5325*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=r")
5326*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5327*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")
5328*0bfacb9bSmrg		    (match_operand:MVE_2 3 "s_register_operand" "w")
5329*0bfacb9bSmrg		    (match_operand:HI 4 "vpr_register_operand" "Up")]
5330*0bfacb9bSmrg	 VABAVQ_P))
5331*0bfacb9bSmrg  ]
5332*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5333*0bfacb9bSmrg  "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
5334*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5335*0bfacb9bSmrg])
5336*0bfacb9bSmrg
5337*0bfacb9bSmrg;;
5338*0bfacb9bSmrg;; [vqshluq_m_n_s])
5339*0bfacb9bSmrg;;
5340*0bfacb9bSmrg(define_insn "mve_vqshluq_m_n_s<mode>"
5341*0bfacb9bSmrg  [
5342*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5343*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5344*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5345*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_7" "Ra")
5346*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5347*0bfacb9bSmrg	 VQSHLUQ_M_N_S))
5348*0bfacb9bSmrg  ]
5349*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5350*0bfacb9bSmrg  "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
5351*0bfacb9bSmrg  [(set_attr "type" "mve_move")])
5352*0bfacb9bSmrg
5353*0bfacb9bSmrg;;
5354*0bfacb9bSmrg;; [vshlq_m_s, vshlq_m_u])
5355*0bfacb9bSmrg;;
5356*0bfacb9bSmrg(define_insn "mve_vshlq_m_<supf><mode>"
5357*0bfacb9bSmrg  [
5358*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5359*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5360*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5361*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5362*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5363*0bfacb9bSmrg	 VSHLQ_M))
5364*0bfacb9bSmrg  ]
5365*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5366*0bfacb9bSmrg  "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5367*0bfacb9bSmrg  [(set_attr "type" "mve_move")])
5368*0bfacb9bSmrg
5369*0bfacb9bSmrg;;
5370*0bfacb9bSmrg;; [vsriq_m_n_s, vsriq_m_n_u])
5371*0bfacb9bSmrg;;
5372*0bfacb9bSmrg(define_insn "mve_vsriq_m_n_<supf><mode>"
5373*0bfacb9bSmrg  [
5374*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5375*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5376*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5377*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
5378*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5379*0bfacb9bSmrg	 VSRIQ_M_N))
5380*0bfacb9bSmrg  ]
5381*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5382*0bfacb9bSmrg  "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
5383*0bfacb9bSmrg  [(set_attr "type" "mve_move")])
5384*0bfacb9bSmrg
5385*0bfacb9bSmrg;;
5386*0bfacb9bSmrg;; [vsubq_m_u, vsubq_m_s])
5387*0bfacb9bSmrg;;
5388*0bfacb9bSmrg(define_insn "mve_vsubq_m_<supf><mode>"
5389*0bfacb9bSmrg  [
5390*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5391*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5392*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5393*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5394*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5395*0bfacb9bSmrg	 VSUBQ_M))
5396*0bfacb9bSmrg  ]
5397*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5398*0bfacb9bSmrg  "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
5399*0bfacb9bSmrg  [(set_attr "type" "mve_move")])
5400*0bfacb9bSmrg
5401*0bfacb9bSmrg;;
5402*0bfacb9bSmrg;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
5403*0bfacb9bSmrg;;
5404*0bfacb9bSmrg(define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
5405*0bfacb9bSmrg  [
5406*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5407*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5408*0bfacb9bSmrg		       (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5409*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5410*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5411*0bfacb9bSmrg	 VCVTQ_M_N_TO_F))
5412*0bfacb9bSmrg  ]
5413*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5414*0bfacb9bSmrg  "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5415*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5416*0bfacb9bSmrg   (set_attr "length""8")])
5417*0bfacb9bSmrg;;
5418*0bfacb9bSmrg;; [vabdq_m_s, vabdq_m_u])
5419*0bfacb9bSmrg;;
5420*0bfacb9bSmrg(define_insn "mve_vabdq_m_<supf><mode>"
5421*0bfacb9bSmrg  [
5422*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5423*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5424*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5425*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5426*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5427*0bfacb9bSmrg	 VABDQ_M))
5428*0bfacb9bSmrg  ]
5429*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5430*0bfacb9bSmrg  "vpst\;vabdt.<supf>%#<V_sz_elem>	%q0, %q2, %q3"
5431*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5432*0bfacb9bSmrg   (set_attr "length""8")])
5433*0bfacb9bSmrg
5434*0bfacb9bSmrg;;
5435*0bfacb9bSmrg;; [vaddq_m_n_s, vaddq_m_n_u])
5436*0bfacb9bSmrg;;
5437*0bfacb9bSmrg(define_insn "mve_vaddq_m_n_<supf><mode>"
5438*0bfacb9bSmrg  [
5439*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5440*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5441*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5442*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5443*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5444*0bfacb9bSmrg	 VADDQ_M_N))
5445*0bfacb9bSmrg  ]
5446*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5447*0bfacb9bSmrg  "vpst\;vaddt.i%#<V_sz_elem>	%q0, %q2, %3"
5448*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5449*0bfacb9bSmrg   (set_attr "length""8")])
5450*0bfacb9bSmrg
5451*0bfacb9bSmrg;;
5452*0bfacb9bSmrg;; [vaddq_m_u, vaddq_m_s])
5453*0bfacb9bSmrg;;
5454*0bfacb9bSmrg(define_insn "mve_vaddq_m_<supf><mode>"
5455*0bfacb9bSmrg  [
5456*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5457*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5458*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5459*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5460*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5461*0bfacb9bSmrg	 VADDQ_M))
5462*0bfacb9bSmrg  ]
5463*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5464*0bfacb9bSmrg  "vpst\;vaddt.i%#<V_sz_elem>	%q0, %q2, %q3"
5465*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5466*0bfacb9bSmrg   (set_attr "length""8")])
5467*0bfacb9bSmrg
5468*0bfacb9bSmrg;;
5469*0bfacb9bSmrg;; [vandq_m_u, vandq_m_s])
5470*0bfacb9bSmrg;;
5471*0bfacb9bSmrg(define_insn "mve_vandq_m_<supf><mode>"
5472*0bfacb9bSmrg  [
5473*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5474*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5475*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5476*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5477*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5478*0bfacb9bSmrg	 VANDQ_M))
5479*0bfacb9bSmrg  ]
5480*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5481*0bfacb9bSmrg  "vpst\;vandt %q0, %q2, %q3"
5482*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5483*0bfacb9bSmrg   (set_attr "length""8")])
5484*0bfacb9bSmrg
5485*0bfacb9bSmrg;;
5486*0bfacb9bSmrg;; [vbicq_m_u, vbicq_m_s])
5487*0bfacb9bSmrg;;
5488*0bfacb9bSmrg(define_insn "mve_vbicq_m_<supf><mode>"
5489*0bfacb9bSmrg  [
5490*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5491*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5492*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5493*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5494*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5495*0bfacb9bSmrg	 VBICQ_M))
5496*0bfacb9bSmrg  ]
5497*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5498*0bfacb9bSmrg  "vpst\;vbict %q0, %q2, %q3"
5499*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5500*0bfacb9bSmrg   (set_attr "length""8")])
5501*0bfacb9bSmrg
5502*0bfacb9bSmrg;;
5503*0bfacb9bSmrg;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
5504*0bfacb9bSmrg;;
5505*0bfacb9bSmrg(define_insn "mve_vbrsrq_m_n_<supf><mode>"
5506*0bfacb9bSmrg  [
5507*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5508*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5509*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5510*0bfacb9bSmrg		       (match_operand:SI 3 "s_register_operand" "r")
5511*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5512*0bfacb9bSmrg	 VBRSRQ_M_N))
5513*0bfacb9bSmrg  ]
5514*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5515*0bfacb9bSmrg  "vpst\;vbrsrt.%#<V_sz_elem>	%q0, %q2, %3"
5516*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5517*0bfacb9bSmrg   (set_attr "length""8")])
5518*0bfacb9bSmrg
5519*0bfacb9bSmrg;;
5520*0bfacb9bSmrg;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
5521*0bfacb9bSmrg;;
5522*0bfacb9bSmrg(define_insn "mve_vcaddq_rot270_m_<supf><mode>"
5523*0bfacb9bSmrg  [
5524*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5525*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5526*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5527*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5528*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5529*0bfacb9bSmrg	 VCADDQ_ROT270_M))
5530*0bfacb9bSmrg  ]
5531*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5532*0bfacb9bSmrg  "vpst\;vcaddt.i%#<V_sz_elem>	%q0, %q2, %q3, #270"
5533*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5534*0bfacb9bSmrg   (set_attr "length""8")])
5535*0bfacb9bSmrg
5536*0bfacb9bSmrg;;
5537*0bfacb9bSmrg;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
5538*0bfacb9bSmrg;;
5539*0bfacb9bSmrg(define_insn "mve_vcaddq_rot90_m_<supf><mode>"
5540*0bfacb9bSmrg  [
5541*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
5542*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5543*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5544*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5545*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5546*0bfacb9bSmrg	 VCADDQ_ROT90_M))
5547*0bfacb9bSmrg  ]
5548*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5549*0bfacb9bSmrg  "vpst\;vcaddt.i%#<V_sz_elem>	%q0, %q2, %q3, #90"
5550*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5551*0bfacb9bSmrg   (set_attr "length""8")])
5552*0bfacb9bSmrg
5553*0bfacb9bSmrg;;
5554*0bfacb9bSmrg;; [veorq_m_s, veorq_m_u])
5555*0bfacb9bSmrg;;
5556*0bfacb9bSmrg(define_insn "mve_veorq_m_<supf><mode>"
5557*0bfacb9bSmrg  [
5558*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5559*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5560*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5561*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5562*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5563*0bfacb9bSmrg	 VEORQ_M))
5564*0bfacb9bSmrg  ]
5565*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5566*0bfacb9bSmrg  "vpst\;veort %q0, %q2, %q3"
5567*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5568*0bfacb9bSmrg   (set_attr "length""8")])
5569*0bfacb9bSmrg
5570*0bfacb9bSmrg;;
5571*0bfacb9bSmrg;; [vhaddq_m_n_s, vhaddq_m_n_u])
5572*0bfacb9bSmrg;;
5573*0bfacb9bSmrg(define_insn "mve_vhaddq_m_n_<supf><mode>"
5574*0bfacb9bSmrg  [
5575*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5576*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5577*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5578*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5579*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5580*0bfacb9bSmrg	 VHADDQ_M_N))
5581*0bfacb9bSmrg  ]
5582*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5583*0bfacb9bSmrg  "vpst\;vhaddt.<supf>%#<V_sz_elem>	%q0, %q2, %3"
5584*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5585*0bfacb9bSmrg   (set_attr "length""8")])
5586*0bfacb9bSmrg
5587*0bfacb9bSmrg;;
5588*0bfacb9bSmrg;; [vhaddq_m_s, vhaddq_m_u])
5589*0bfacb9bSmrg;;
5590*0bfacb9bSmrg(define_insn "mve_vhaddq_m_<supf><mode>"
5591*0bfacb9bSmrg  [
5592*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5593*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5594*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5595*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5596*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5597*0bfacb9bSmrg	 VHADDQ_M))
5598*0bfacb9bSmrg  ]
5599*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5600*0bfacb9bSmrg  "vpst\;vhaddt.<supf>%#<V_sz_elem>	%q0, %q2, %q3"
5601*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5602*0bfacb9bSmrg   (set_attr "length""8")])
5603*0bfacb9bSmrg
5604*0bfacb9bSmrg;;
5605*0bfacb9bSmrg;; [vhsubq_m_n_s, vhsubq_m_n_u])
5606*0bfacb9bSmrg;;
5607*0bfacb9bSmrg(define_insn "mve_vhsubq_m_n_<supf><mode>"
5608*0bfacb9bSmrg  [
5609*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5610*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5611*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5612*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5613*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5614*0bfacb9bSmrg	 VHSUBQ_M_N))
5615*0bfacb9bSmrg  ]
5616*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5617*0bfacb9bSmrg  "vpst\;vhsubt.<supf>%#<V_sz_elem>	%q0, %q2, %3"
5618*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5619*0bfacb9bSmrg   (set_attr "length""8")])
5620*0bfacb9bSmrg
5621*0bfacb9bSmrg;;
5622*0bfacb9bSmrg;; [vhsubq_m_s, vhsubq_m_u])
5623*0bfacb9bSmrg;;
5624*0bfacb9bSmrg(define_insn "mve_vhsubq_m_<supf><mode>"
5625*0bfacb9bSmrg  [
5626*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5627*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5628*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5629*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5630*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5631*0bfacb9bSmrg	 VHSUBQ_M))
5632*0bfacb9bSmrg  ]
5633*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5634*0bfacb9bSmrg  "vpst\;vhsubt.<supf>%#<V_sz_elem>	%q0, %q2, %q3"
5635*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5636*0bfacb9bSmrg   (set_attr "length""8")])
5637*0bfacb9bSmrg
5638*0bfacb9bSmrg;;
5639*0bfacb9bSmrg;; [vmaxq_m_s, vmaxq_m_u])
5640*0bfacb9bSmrg;;
5641*0bfacb9bSmrg(define_insn "mve_vmaxq_m_<supf><mode>"
5642*0bfacb9bSmrg  [
5643*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5644*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5645*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5646*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5647*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5648*0bfacb9bSmrg	 VMAXQ_M))
5649*0bfacb9bSmrg  ]
5650*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5651*0bfacb9bSmrg  "vpst\;vmaxt.<supf>%#<V_sz_elem>	%q0, %q2, %q3"
5652*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5653*0bfacb9bSmrg   (set_attr "length""8")])
5654*0bfacb9bSmrg
5655*0bfacb9bSmrg;;
5656*0bfacb9bSmrg;; [vminq_m_s, vminq_m_u])
5657*0bfacb9bSmrg;;
5658*0bfacb9bSmrg(define_insn "mve_vminq_m_<supf><mode>"
5659*0bfacb9bSmrg  [
5660*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5661*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5662*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5663*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5664*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5665*0bfacb9bSmrg	 VMINQ_M))
5666*0bfacb9bSmrg  ]
5667*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5668*0bfacb9bSmrg  "vpst\;vmint.<supf>%#<V_sz_elem>	%q0, %q2, %q3"
5669*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5670*0bfacb9bSmrg   (set_attr "length""8")])
5671*0bfacb9bSmrg
5672*0bfacb9bSmrg;;
5673*0bfacb9bSmrg;; [vmladavaq_p_u, vmladavaq_p_s])
5674*0bfacb9bSmrg;;
5675*0bfacb9bSmrg(define_insn "mve_vmladavaq_p_<supf><mode>"
5676*0bfacb9bSmrg  [
5677*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
5678*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5679*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")
5680*0bfacb9bSmrg		    (match_operand:MVE_2 3 "s_register_operand" "w")
5681*0bfacb9bSmrg		    (match_operand:HI 4 "vpr_register_operand" "Up")]
5682*0bfacb9bSmrg	 VMLADAVAQ_P))
5683*0bfacb9bSmrg  ]
5684*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5685*0bfacb9bSmrg  "vpst\;vmladavat.<supf>%#<V_sz_elem>	%0, %q2, %q3"
5686*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5687*0bfacb9bSmrg   (set_attr "length""8")])
5688*0bfacb9bSmrg
5689*0bfacb9bSmrg;;
5690*0bfacb9bSmrg;; [vmlaq_m_n_s, vmlaq_m_n_u])
5691*0bfacb9bSmrg;;
5692*0bfacb9bSmrg(define_insn "mve_vmlaq_m_n_<supf><mode>"
5693*0bfacb9bSmrg  [
5694*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5695*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5696*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5697*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5698*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5699*0bfacb9bSmrg	 VMLAQ_M_N))
5700*0bfacb9bSmrg  ]
5701*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5702*0bfacb9bSmrg  "vpst\;vmlat.<supf>%#<V_sz_elem>	%q0, %q2, %3"
5703*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5704*0bfacb9bSmrg   (set_attr "length""8")])
5705*0bfacb9bSmrg
5706*0bfacb9bSmrg;;
5707*0bfacb9bSmrg;; [vmlasq_m_n_u, vmlasq_m_n_s])
5708*0bfacb9bSmrg;;
5709*0bfacb9bSmrg(define_insn "mve_vmlasq_m_n_<supf><mode>"
5710*0bfacb9bSmrg  [
5711*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5712*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5713*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5714*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5715*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5716*0bfacb9bSmrg	 VMLASQ_M_N))
5717*0bfacb9bSmrg  ]
5718*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5719*0bfacb9bSmrg  "vpst\;vmlast.<supf>%#<V_sz_elem>	%q0, %q2, %3"
5720*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5721*0bfacb9bSmrg   (set_attr "length""8")])
5722*0bfacb9bSmrg
5723*0bfacb9bSmrg;;
5724*0bfacb9bSmrg;; [vmulhq_m_s, vmulhq_m_u])
5725*0bfacb9bSmrg;;
5726*0bfacb9bSmrg(define_insn "mve_vmulhq_m_<supf><mode>"
5727*0bfacb9bSmrg  [
5728*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5729*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5730*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5731*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5732*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5733*0bfacb9bSmrg	 VMULHQ_M))
5734*0bfacb9bSmrg  ]
5735*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5736*0bfacb9bSmrg  "vpst\;vmulht.<supf>%#<V_sz_elem>	%q0, %q2, %q3"
5737*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5738*0bfacb9bSmrg   (set_attr "length""8")])
5739*0bfacb9bSmrg
5740*0bfacb9bSmrg;;
5741*0bfacb9bSmrg;; [vmullbq_int_m_u, vmullbq_int_m_s])
5742*0bfacb9bSmrg;;
5743*0bfacb9bSmrg(define_insn "mve_vmullbq_int_m_<supf><mode>"
5744*0bfacb9bSmrg  [
5745*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5746*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5747*0bfacb9bSmrg				  (match_operand:MVE_2 2 "s_register_operand" "w")
5748*0bfacb9bSmrg				  (match_operand:MVE_2 3 "s_register_operand" "w")
5749*0bfacb9bSmrg				  (match_operand:HI 4 "vpr_register_operand" "Up")]
5750*0bfacb9bSmrg	 VMULLBQ_INT_M))
5751*0bfacb9bSmrg  ]
5752*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5753*0bfacb9bSmrg  "vpst\;vmullbt.<supf>%#<V_sz_elem>	%q0, %q2, %q3"
5754*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5755*0bfacb9bSmrg   (set_attr "length""8")])
5756*0bfacb9bSmrg
5757*0bfacb9bSmrg;;
5758*0bfacb9bSmrg;; [vmulltq_int_m_s, vmulltq_int_m_u])
5759*0bfacb9bSmrg;;
5760*0bfacb9bSmrg(define_insn "mve_vmulltq_int_m_<supf><mode>"
5761*0bfacb9bSmrg  [
5762*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
5763*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5764*0bfacb9bSmrg				  (match_operand:MVE_2 2 "s_register_operand" "w")
5765*0bfacb9bSmrg				  (match_operand:MVE_2 3 "s_register_operand" "w")
5766*0bfacb9bSmrg				  (match_operand:HI 4 "vpr_register_operand" "Up")]
5767*0bfacb9bSmrg	 VMULLTQ_INT_M))
5768*0bfacb9bSmrg  ]
5769*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5770*0bfacb9bSmrg  "vpst\;vmulltt.<supf>%#<V_sz_elem>	%q0, %q2, %q3"
5771*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5772*0bfacb9bSmrg   (set_attr "length""8")])
5773*0bfacb9bSmrg
5774*0bfacb9bSmrg;;
5775*0bfacb9bSmrg;; [vmulq_m_n_u, vmulq_m_n_s])
5776*0bfacb9bSmrg;;
5777*0bfacb9bSmrg(define_insn "mve_vmulq_m_n_<supf><mode>"
5778*0bfacb9bSmrg  [
5779*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5780*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5781*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5782*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5783*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5784*0bfacb9bSmrg	 VMULQ_M_N))
5785*0bfacb9bSmrg  ]
5786*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5787*0bfacb9bSmrg  "vpst\;vmult.i%#<V_sz_elem>	%q0, %q2, %3"
5788*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5789*0bfacb9bSmrg   (set_attr "length""8")])
5790*0bfacb9bSmrg
5791*0bfacb9bSmrg;;
5792*0bfacb9bSmrg;; [vmulq_m_s, vmulq_m_u])
5793*0bfacb9bSmrg;;
5794*0bfacb9bSmrg(define_insn "mve_vmulq_m_<supf><mode>"
5795*0bfacb9bSmrg  [
5796*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5797*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5798*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5799*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5800*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5801*0bfacb9bSmrg	 VMULQ_M))
5802*0bfacb9bSmrg  ]
5803*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5804*0bfacb9bSmrg  "vpst\;vmult.i%#<V_sz_elem>	%q0, %q2, %q3"
5805*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5806*0bfacb9bSmrg   (set_attr "length""8")])
5807*0bfacb9bSmrg
5808*0bfacb9bSmrg;;
5809*0bfacb9bSmrg;; [vornq_m_u, vornq_m_s])
5810*0bfacb9bSmrg;;
5811*0bfacb9bSmrg(define_insn "mve_vornq_m_<supf><mode>"
5812*0bfacb9bSmrg  [
5813*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5814*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5815*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5816*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5817*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5818*0bfacb9bSmrg	 VORNQ_M))
5819*0bfacb9bSmrg  ]
5820*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5821*0bfacb9bSmrg  "vpst\;vornt %q0, %q2, %q3"
5822*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5823*0bfacb9bSmrg   (set_attr "length""8")])
5824*0bfacb9bSmrg
5825*0bfacb9bSmrg;;
5826*0bfacb9bSmrg;; [vorrq_m_s, vorrq_m_u])
5827*0bfacb9bSmrg;;
5828*0bfacb9bSmrg(define_insn "mve_vorrq_m_<supf><mode>"
5829*0bfacb9bSmrg  [
5830*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5831*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5832*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5833*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5834*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5835*0bfacb9bSmrg	 VORRQ_M))
5836*0bfacb9bSmrg  ]
5837*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5838*0bfacb9bSmrg  "vpst\;vorrt %q0, %q2, %q3"
5839*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5840*0bfacb9bSmrg   (set_attr "length""8")])
5841*0bfacb9bSmrg
5842*0bfacb9bSmrg;;
5843*0bfacb9bSmrg;; [vqaddq_m_n_u, vqaddq_m_n_s])
5844*0bfacb9bSmrg;;
5845*0bfacb9bSmrg(define_insn "mve_vqaddq_m_n_<supf><mode>"
5846*0bfacb9bSmrg  [
5847*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5848*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5849*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5850*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5851*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5852*0bfacb9bSmrg	 VQADDQ_M_N))
5853*0bfacb9bSmrg  ]
5854*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5855*0bfacb9bSmrg  "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5856*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5857*0bfacb9bSmrg   (set_attr "length""8")])
5858*0bfacb9bSmrg
5859*0bfacb9bSmrg;;
5860*0bfacb9bSmrg;; [vqaddq_m_u, vqaddq_m_s])
5861*0bfacb9bSmrg;;
5862*0bfacb9bSmrg(define_insn "mve_vqaddq_m_<supf><mode>"
5863*0bfacb9bSmrg  [
5864*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5865*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5866*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5867*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5868*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5869*0bfacb9bSmrg	 VQADDQ_M))
5870*0bfacb9bSmrg  ]
5871*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5872*0bfacb9bSmrg  "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5873*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5874*0bfacb9bSmrg   (set_attr "length""8")])
5875*0bfacb9bSmrg
5876*0bfacb9bSmrg;;
5877*0bfacb9bSmrg;; [vqdmlahq_m_n_s])
5878*0bfacb9bSmrg;;
5879*0bfacb9bSmrg(define_insn "mve_vqdmlahq_m_n_s<mode>"
5880*0bfacb9bSmrg  [
5881*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5882*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5883*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5884*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5885*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5886*0bfacb9bSmrg	 VQDMLAHQ_M_N_S))
5887*0bfacb9bSmrg  ]
5888*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5889*0bfacb9bSmrg  "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5890*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5891*0bfacb9bSmrg   (set_attr "length""8")])
5892*0bfacb9bSmrg
5893*0bfacb9bSmrg;;
5894*0bfacb9bSmrg;; [vqdmlashq_m_n_s])
5895*0bfacb9bSmrg;;
5896*0bfacb9bSmrg(define_insn "mve_vqdmlashq_m_n_s<mode>"
5897*0bfacb9bSmrg  [
5898*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5899*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5900*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5901*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5902*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5903*0bfacb9bSmrg	 VQDMLASHQ_M_N_S))
5904*0bfacb9bSmrg  ]
5905*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5906*0bfacb9bSmrg  "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5907*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5908*0bfacb9bSmrg   (set_attr "length""8")])
5909*0bfacb9bSmrg
5910*0bfacb9bSmrg;;
5911*0bfacb9bSmrg;; [vqrdmlahq_m_n_s])
5912*0bfacb9bSmrg;;
5913*0bfacb9bSmrg(define_insn "mve_vqrdmlahq_m_n_s<mode>"
5914*0bfacb9bSmrg  [
5915*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5916*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5917*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5918*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5919*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5920*0bfacb9bSmrg	 VQRDMLAHQ_M_N_S))
5921*0bfacb9bSmrg  ]
5922*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5923*0bfacb9bSmrg  "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5924*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5925*0bfacb9bSmrg   (set_attr "length""8")])
5926*0bfacb9bSmrg
5927*0bfacb9bSmrg;;
5928*0bfacb9bSmrg;; [vqrdmlashq_m_n_s])
5929*0bfacb9bSmrg;;
5930*0bfacb9bSmrg(define_insn "mve_vqrdmlashq_m_n_s<mode>"
5931*0bfacb9bSmrg  [
5932*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5933*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5934*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5935*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
5936*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5937*0bfacb9bSmrg	 VQRDMLASHQ_M_N_S))
5938*0bfacb9bSmrg  ]
5939*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5940*0bfacb9bSmrg  "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5941*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5942*0bfacb9bSmrg   (set_attr "length""8")])
5943*0bfacb9bSmrg
5944*0bfacb9bSmrg;;
5945*0bfacb9bSmrg;; [vqrshlq_m_u, vqrshlq_m_s])
5946*0bfacb9bSmrg;;
5947*0bfacb9bSmrg(define_insn "mve_vqrshlq_m_<supf><mode>"
5948*0bfacb9bSmrg  [
5949*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5950*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5951*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5952*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5953*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5954*0bfacb9bSmrg	 VQRSHLQ_M))
5955*0bfacb9bSmrg  ]
5956*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5957*0bfacb9bSmrg  "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5958*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5959*0bfacb9bSmrg   (set_attr "length""8")])
5960*0bfacb9bSmrg
5961*0bfacb9bSmrg;;
5962*0bfacb9bSmrg;; [vqshlq_m_n_s, vqshlq_m_n_u])
5963*0bfacb9bSmrg;;
5964*0bfacb9bSmrg(define_insn "mve_vqshlq_m_n_<supf><mode>"
5965*0bfacb9bSmrg  [
5966*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5967*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5968*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5969*0bfacb9bSmrg		       (match_operand:SI 3 "immediate_operand" "i")
5970*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5971*0bfacb9bSmrg	 VQSHLQ_M_N))
5972*0bfacb9bSmrg  ]
5973*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5974*0bfacb9bSmrg  "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5975*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5976*0bfacb9bSmrg   (set_attr "length""8")])
5977*0bfacb9bSmrg
5978*0bfacb9bSmrg;;
5979*0bfacb9bSmrg;; [vqshlq_m_u, vqshlq_m_s])
5980*0bfacb9bSmrg;;
5981*0bfacb9bSmrg(define_insn "mve_vqshlq_m_<supf><mode>"
5982*0bfacb9bSmrg  [
5983*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5984*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5985*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
5986*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
5987*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
5988*0bfacb9bSmrg	 VQSHLQ_M))
5989*0bfacb9bSmrg  ]
5990*0bfacb9bSmrg  "TARGET_HAVE_MVE"
5991*0bfacb9bSmrg  "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5992*0bfacb9bSmrg  [(set_attr "type" "mve_move")
5993*0bfacb9bSmrg   (set_attr "length""8")])
5994*0bfacb9bSmrg
5995*0bfacb9bSmrg;;
5996*0bfacb9bSmrg;; [vqsubq_m_n_u, vqsubq_m_n_s])
5997*0bfacb9bSmrg;;
5998*0bfacb9bSmrg(define_insn "mve_vqsubq_m_n_<supf><mode>"
5999*0bfacb9bSmrg  [
6000*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6001*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6002*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6003*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
6004*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6005*0bfacb9bSmrg	 VQSUBQ_M_N))
6006*0bfacb9bSmrg  ]
6007*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6008*0bfacb9bSmrg  "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6009*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6010*0bfacb9bSmrg   (set_attr "length""8")])
6011*0bfacb9bSmrg
6012*0bfacb9bSmrg;;
6013*0bfacb9bSmrg;; [vqsubq_m_u, vqsubq_m_s])
6014*0bfacb9bSmrg;;
6015*0bfacb9bSmrg(define_insn "mve_vqsubq_m_<supf><mode>"
6016*0bfacb9bSmrg  [
6017*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6018*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6019*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6020*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6021*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6022*0bfacb9bSmrg	 VQSUBQ_M))
6023*0bfacb9bSmrg  ]
6024*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6025*0bfacb9bSmrg  "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6026*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6027*0bfacb9bSmrg   (set_attr "length""8")])
6028*0bfacb9bSmrg
6029*0bfacb9bSmrg;;
6030*0bfacb9bSmrg;; [vrhaddq_m_u, vrhaddq_m_s])
6031*0bfacb9bSmrg;;
6032*0bfacb9bSmrg(define_insn "mve_vrhaddq_m_<supf><mode>"
6033*0bfacb9bSmrg  [
6034*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6035*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6036*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6037*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6038*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6039*0bfacb9bSmrg	 VRHADDQ_M))
6040*0bfacb9bSmrg  ]
6041*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6042*0bfacb9bSmrg  "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6043*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6044*0bfacb9bSmrg   (set_attr "length""8")])
6045*0bfacb9bSmrg
6046*0bfacb9bSmrg;;
6047*0bfacb9bSmrg;; [vrmulhq_m_u, vrmulhq_m_s])
6048*0bfacb9bSmrg;;
6049*0bfacb9bSmrg(define_insn "mve_vrmulhq_m_<supf><mode>"
6050*0bfacb9bSmrg  [
6051*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6052*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6053*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6054*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6055*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6056*0bfacb9bSmrg	 VRMULHQ_M))
6057*0bfacb9bSmrg  ]
6058*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6059*0bfacb9bSmrg  "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6060*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6061*0bfacb9bSmrg   (set_attr "length""8")])
6062*0bfacb9bSmrg
6063*0bfacb9bSmrg;;
6064*0bfacb9bSmrg;; [vrshlq_m_s, vrshlq_m_u])
6065*0bfacb9bSmrg;;
6066*0bfacb9bSmrg(define_insn "mve_vrshlq_m_<supf><mode>"
6067*0bfacb9bSmrg  [
6068*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6069*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6070*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6071*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6072*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6073*0bfacb9bSmrg	 VRSHLQ_M))
6074*0bfacb9bSmrg  ]
6075*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6076*0bfacb9bSmrg  "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6077*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6078*0bfacb9bSmrg   (set_attr "length""8")])
6079*0bfacb9bSmrg
6080*0bfacb9bSmrg;;
6081*0bfacb9bSmrg;; [vrshrq_m_n_s, vrshrq_m_n_u])
6082*0bfacb9bSmrg;;
6083*0bfacb9bSmrg(define_insn "mve_vrshrq_m_n_<supf><mode>"
6084*0bfacb9bSmrg  [
6085*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6086*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6087*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6088*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6089*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6090*0bfacb9bSmrg	 VRSHRQ_M_N))
6091*0bfacb9bSmrg  ]
6092*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6093*0bfacb9bSmrg  "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6094*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6095*0bfacb9bSmrg   (set_attr "length""8")])
6096*0bfacb9bSmrg
6097*0bfacb9bSmrg;;
6098*0bfacb9bSmrg;; [vshlq_m_n_s, vshlq_m_n_u])
6099*0bfacb9bSmrg;;
6100*0bfacb9bSmrg(define_insn "mve_vshlq_m_n_<supf><mode>"
6101*0bfacb9bSmrg  [
6102*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6103*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6104*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6105*0bfacb9bSmrg		       (match_operand:SI 3 "immediate_operand" "i")
6106*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6107*0bfacb9bSmrg	 VSHLQ_M_N))
6108*0bfacb9bSmrg  ]
6109*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6110*0bfacb9bSmrg  "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6111*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6112*0bfacb9bSmrg   (set_attr "length""8")])
6113*0bfacb9bSmrg
6114*0bfacb9bSmrg;;
6115*0bfacb9bSmrg;; [vshrq_m_n_s, vshrq_m_n_u])
6116*0bfacb9bSmrg;;
6117*0bfacb9bSmrg(define_insn "mve_vshrq_m_n_<supf><mode>"
6118*0bfacb9bSmrg  [
6119*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6120*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6121*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6122*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6123*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6124*0bfacb9bSmrg	 VSHRQ_M_N))
6125*0bfacb9bSmrg  ]
6126*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6127*0bfacb9bSmrg  "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6128*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6129*0bfacb9bSmrg   (set_attr "length""8")])
6130*0bfacb9bSmrg
6131*0bfacb9bSmrg;;
6132*0bfacb9bSmrg;; [vsliq_m_n_u, vsliq_m_n_s])
6133*0bfacb9bSmrg;;
6134*0bfacb9bSmrg(define_insn "mve_vsliq_m_n_<supf><mode>"
6135*0bfacb9bSmrg   [
6136*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6137*0bfacb9bSmrg       (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6138*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6139*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
6140*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6141*0bfacb9bSmrg	 VSLIQ_M_N))
6142*0bfacb9bSmrg  ]
6143*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6144*0bfacb9bSmrg  "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
6145*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6146*0bfacb9bSmrg   (set_attr "length""8")])
6147*0bfacb9bSmrg
6148*0bfacb9bSmrg;;
6149*0bfacb9bSmrg;; [vsubq_m_n_s, vsubq_m_n_u])
6150*0bfacb9bSmrg;;
6151*0bfacb9bSmrg(define_insn "mve_vsubq_m_n_<supf><mode>"
6152*0bfacb9bSmrg  [
6153*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6154*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6155*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6156*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
6157*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6158*0bfacb9bSmrg	 VSUBQ_M_N))
6159*0bfacb9bSmrg  ]
6160*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6161*0bfacb9bSmrg  "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
6162*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6163*0bfacb9bSmrg   (set_attr "length""8")])
6164*0bfacb9bSmrg
6165*0bfacb9bSmrg;;
6166*0bfacb9bSmrg;; [vhcaddq_rot270_m_s])
6167*0bfacb9bSmrg;;
6168*0bfacb9bSmrg(define_insn "mve_vhcaddq_rot270_m_s<mode>"
6169*0bfacb9bSmrg  [
6170*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6171*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6172*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6173*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6174*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6175*0bfacb9bSmrg	 VHCADDQ_ROT270_M_S))
6176*0bfacb9bSmrg  ]
6177*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6178*0bfacb9bSmrg  "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
6179*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6180*0bfacb9bSmrg   (set_attr "length""8")])
6181*0bfacb9bSmrg
6182*0bfacb9bSmrg;;
6183*0bfacb9bSmrg;; [vhcaddq_rot90_m_s])
6184*0bfacb9bSmrg;;
6185*0bfacb9bSmrg(define_insn "mve_vhcaddq_rot90_m_s<mode>"
6186*0bfacb9bSmrg  [
6187*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6188*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6189*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6190*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6191*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6192*0bfacb9bSmrg	 VHCADDQ_ROT90_M_S))
6193*0bfacb9bSmrg  ]
6194*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6195*0bfacb9bSmrg  "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
6196*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6197*0bfacb9bSmrg   (set_attr "length""8")])
6198*0bfacb9bSmrg
6199*0bfacb9bSmrg;;
6200*0bfacb9bSmrg;; [vmladavaxq_p_s])
6201*0bfacb9bSmrg;;
6202*0bfacb9bSmrg(define_insn "mve_vmladavaxq_p_s<mode>"
6203*0bfacb9bSmrg  [
6204*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
6205*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6206*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6207*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6208*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6209*0bfacb9bSmrg	 VMLADAVAXQ_P_S))
6210*0bfacb9bSmrg  ]
6211*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6212*0bfacb9bSmrg  "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6213*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6214*0bfacb9bSmrg   (set_attr "length""8")])
6215*0bfacb9bSmrg
6216*0bfacb9bSmrg;;
6217*0bfacb9bSmrg;; [vmlsdavaq_p_s])
6218*0bfacb9bSmrg;;
6219*0bfacb9bSmrg(define_insn "mve_vmlsdavaq_p_s<mode>"
6220*0bfacb9bSmrg  [
6221*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
6222*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6223*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6224*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6225*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6226*0bfacb9bSmrg	 VMLSDAVAQ_P_S))
6227*0bfacb9bSmrg  ]
6228*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6229*0bfacb9bSmrg  "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
6230*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6231*0bfacb9bSmrg   (set_attr "length""8")])
6232*0bfacb9bSmrg
6233*0bfacb9bSmrg;;
6234*0bfacb9bSmrg;; [vmlsdavaxq_p_s])
6235*0bfacb9bSmrg;;
6236*0bfacb9bSmrg(define_insn "mve_vmlsdavaxq_p_s<mode>"
6237*0bfacb9bSmrg  [
6238*0bfacb9bSmrg   (set (match_operand:SI 0 "s_register_operand" "=Te")
6239*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6240*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6241*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6242*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6243*0bfacb9bSmrg	 VMLSDAVAXQ_P_S))
6244*0bfacb9bSmrg  ]
6245*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6246*0bfacb9bSmrg  "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6247*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6248*0bfacb9bSmrg   (set_attr "length""8")])
6249*0bfacb9bSmrg
6250*0bfacb9bSmrg;;
6251*0bfacb9bSmrg;; [vqdmladhq_m_s])
6252*0bfacb9bSmrg;;
6253*0bfacb9bSmrg(define_insn "mve_vqdmladhq_m_s<mode>"
6254*0bfacb9bSmrg  [
6255*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6256*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6257*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6258*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6259*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6260*0bfacb9bSmrg	 VQDMLADHQ_M_S))
6261*0bfacb9bSmrg  ]
6262*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6263*0bfacb9bSmrg  "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6264*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6265*0bfacb9bSmrg   (set_attr "length""8")])
6266*0bfacb9bSmrg
6267*0bfacb9bSmrg;;
6268*0bfacb9bSmrg;; [vqdmladhxq_m_s])
6269*0bfacb9bSmrg;;
6270*0bfacb9bSmrg(define_insn "mve_vqdmladhxq_m_s<mode>"
6271*0bfacb9bSmrg  [
6272*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6273*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6274*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6275*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6276*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6277*0bfacb9bSmrg	 VQDMLADHXQ_M_S))
6278*0bfacb9bSmrg  ]
6279*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6280*0bfacb9bSmrg  "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6281*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6282*0bfacb9bSmrg   (set_attr "length""8")])
6283*0bfacb9bSmrg
6284*0bfacb9bSmrg;;
6285*0bfacb9bSmrg;; [vqdmlsdhq_m_s])
6286*0bfacb9bSmrg;;
6287*0bfacb9bSmrg(define_insn "mve_vqdmlsdhq_m_s<mode>"
6288*0bfacb9bSmrg  [
6289*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6290*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6291*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6292*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6293*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6294*0bfacb9bSmrg	 VQDMLSDHQ_M_S))
6295*0bfacb9bSmrg  ]
6296*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6297*0bfacb9bSmrg  "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6298*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6299*0bfacb9bSmrg   (set_attr "length""8")])
6300*0bfacb9bSmrg
6301*0bfacb9bSmrg;;
6302*0bfacb9bSmrg;; [vqdmlsdhxq_m_s])
6303*0bfacb9bSmrg;;
6304*0bfacb9bSmrg(define_insn "mve_vqdmlsdhxq_m_s<mode>"
6305*0bfacb9bSmrg  [
6306*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6307*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6308*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6309*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6310*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6311*0bfacb9bSmrg	 VQDMLSDHXQ_M_S))
6312*0bfacb9bSmrg  ]
6313*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6314*0bfacb9bSmrg  "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6315*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6316*0bfacb9bSmrg   (set_attr "length""8")])
6317*0bfacb9bSmrg
6318*0bfacb9bSmrg;;
6319*0bfacb9bSmrg;; [vqdmulhq_m_n_s])
6320*0bfacb9bSmrg;;
6321*0bfacb9bSmrg(define_insn "mve_vqdmulhq_m_n_s<mode>"
6322*0bfacb9bSmrg  [
6323*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6324*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6325*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6326*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
6327*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6328*0bfacb9bSmrg	 VQDMULHQ_M_N_S))
6329*0bfacb9bSmrg  ]
6330*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6331*0bfacb9bSmrg  "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6332*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6333*0bfacb9bSmrg   (set_attr "length""8")])
6334*0bfacb9bSmrg
6335*0bfacb9bSmrg;;
6336*0bfacb9bSmrg;; [vqdmulhq_m_s])
6337*0bfacb9bSmrg;;
6338*0bfacb9bSmrg(define_insn "mve_vqdmulhq_m_s<mode>"
6339*0bfacb9bSmrg  [
6340*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6341*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6342*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6343*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6344*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6345*0bfacb9bSmrg	 VQDMULHQ_M_S))
6346*0bfacb9bSmrg  ]
6347*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6348*0bfacb9bSmrg  "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6349*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6350*0bfacb9bSmrg   (set_attr "length""8")])
6351*0bfacb9bSmrg
6352*0bfacb9bSmrg;;
6353*0bfacb9bSmrg;; [vqrdmladhq_m_s])
6354*0bfacb9bSmrg;;
6355*0bfacb9bSmrg(define_insn "mve_vqrdmladhq_m_s<mode>"
6356*0bfacb9bSmrg  [
6357*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6358*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6359*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6360*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6361*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6362*0bfacb9bSmrg	 VQRDMLADHQ_M_S))
6363*0bfacb9bSmrg  ]
6364*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6365*0bfacb9bSmrg  "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6366*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6367*0bfacb9bSmrg   (set_attr "length""8")])
6368*0bfacb9bSmrg
6369*0bfacb9bSmrg;;
6370*0bfacb9bSmrg;; [vqrdmladhxq_m_s])
6371*0bfacb9bSmrg;;
6372*0bfacb9bSmrg(define_insn "mve_vqrdmladhxq_m_s<mode>"
6373*0bfacb9bSmrg  [
6374*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6375*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6376*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6377*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6378*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6379*0bfacb9bSmrg	 VQRDMLADHXQ_M_S))
6380*0bfacb9bSmrg  ]
6381*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6382*0bfacb9bSmrg  "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6383*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6384*0bfacb9bSmrg   (set_attr "length""8")])
6385*0bfacb9bSmrg
6386*0bfacb9bSmrg;;
6387*0bfacb9bSmrg;; [vqrdmlsdhq_m_s])
6388*0bfacb9bSmrg;;
6389*0bfacb9bSmrg(define_insn "mve_vqrdmlsdhq_m_s<mode>"
6390*0bfacb9bSmrg  [
6391*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6392*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6393*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6394*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6395*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6396*0bfacb9bSmrg	 VQRDMLSDHQ_M_S))
6397*0bfacb9bSmrg  ]
6398*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6399*0bfacb9bSmrg  "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6400*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6401*0bfacb9bSmrg   (set_attr "length""8")])
6402*0bfacb9bSmrg
6403*0bfacb9bSmrg;;
6404*0bfacb9bSmrg;; [vqrdmlsdhxq_m_s])
6405*0bfacb9bSmrg;;
6406*0bfacb9bSmrg(define_insn "mve_vqrdmlsdhxq_m_s<mode>"
6407*0bfacb9bSmrg  [
6408*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6409*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6410*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6411*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6412*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6413*0bfacb9bSmrg	 VQRDMLSDHXQ_M_S))
6414*0bfacb9bSmrg  ]
6415*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6416*0bfacb9bSmrg  "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6417*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6418*0bfacb9bSmrg   (set_attr "length""8")])
6419*0bfacb9bSmrg
6420*0bfacb9bSmrg;;
6421*0bfacb9bSmrg;; [vqrdmulhq_m_n_s])
6422*0bfacb9bSmrg;;
6423*0bfacb9bSmrg(define_insn "mve_vqrdmulhq_m_n_s<mode>"
6424*0bfacb9bSmrg  [
6425*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6426*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6427*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6428*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
6429*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6430*0bfacb9bSmrg	 VQRDMULHQ_M_N_S))
6431*0bfacb9bSmrg  ]
6432*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6433*0bfacb9bSmrg  "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6434*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6435*0bfacb9bSmrg   (set_attr "length""8")])
6436*0bfacb9bSmrg
6437*0bfacb9bSmrg;;
6438*0bfacb9bSmrg;; [vqrdmulhq_m_s])
6439*0bfacb9bSmrg;;
6440*0bfacb9bSmrg(define_insn "mve_vqrdmulhq_m_s<mode>"
6441*0bfacb9bSmrg  [
6442*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6443*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6444*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
6445*0bfacb9bSmrg		       (match_operand:MVE_2 3 "s_register_operand" "w")
6446*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6447*0bfacb9bSmrg	 VQRDMULHQ_M_S))
6448*0bfacb9bSmrg  ]
6449*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6450*0bfacb9bSmrg  "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6451*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6452*0bfacb9bSmrg   (set_attr "length""8")])
6453*0bfacb9bSmrg
6454*0bfacb9bSmrg;;
6455*0bfacb9bSmrg;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
6456*0bfacb9bSmrg;;
6457*0bfacb9bSmrg(define_insn "mve_vmlaldavaq_p_<supf><mode>"
6458*0bfacb9bSmrg  [
6459*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
6460*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6461*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6462*0bfacb9bSmrg		       (match_operand:MVE_5 3 "s_register_operand" "w")
6463*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6464*0bfacb9bSmrg	 VMLALDAVAQ_P))
6465*0bfacb9bSmrg  ]
6466*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6467*0bfacb9bSmrg  "vpst\;vmlaldavat.<supf>%#<V_sz_elem>	%Q0, %R0, %q2, %q3"
6468*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6469*0bfacb9bSmrg   (set_attr "length""8")])
6470*0bfacb9bSmrg
6471*0bfacb9bSmrg;;
6472*0bfacb9bSmrg;; [vmlaldavaxq_p_s])
6473*0bfacb9bSmrg;;
6474*0bfacb9bSmrg(define_insn "mve_vmlaldavaxq_p_<supf><mode>"
6475*0bfacb9bSmrg  [
6476*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
6477*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6478*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6479*0bfacb9bSmrg		       (match_operand:MVE_5 3 "s_register_operand" "w")
6480*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6481*0bfacb9bSmrg	 VMLALDAVAXQ_P))
6482*0bfacb9bSmrg  ]
6483*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6484*0bfacb9bSmrg  "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6485*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6486*0bfacb9bSmrg   (set_attr "length""8")])
6487*0bfacb9bSmrg
6488*0bfacb9bSmrg;;
6489*0bfacb9bSmrg;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
6490*0bfacb9bSmrg;;
6491*0bfacb9bSmrg(define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
6492*0bfacb9bSmrg  [
6493*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6494*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6495*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6496*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_8" "Rb")
6497*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6498*0bfacb9bSmrg	 VQRSHRNBQ_M_N))
6499*0bfacb9bSmrg  ]
6500*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6501*0bfacb9bSmrg  "vpst\;vqrshrnbt.<supf>%#<V_sz_elem>	%q0, %q2, %3"
6502*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6503*0bfacb9bSmrg   (set_attr "length""8")])
6504*0bfacb9bSmrg
6505*0bfacb9bSmrg;;
6506*0bfacb9bSmrg;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
6507*0bfacb9bSmrg;;
6508*0bfacb9bSmrg(define_insn "mve_vqrshrntq_m_n_<supf><mode>"
6509*0bfacb9bSmrg  [
6510*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6511*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6512*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6513*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_8" "Rb")
6514*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6515*0bfacb9bSmrg	 VQRSHRNTQ_M_N))
6516*0bfacb9bSmrg  ]
6517*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6518*0bfacb9bSmrg  "vpst\;vqrshrntt.<supf>%#<V_sz_elem>	%q0, %q2, %3"
6519*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6520*0bfacb9bSmrg   (set_attr "length""8")])
6521*0bfacb9bSmrg
6522*0bfacb9bSmrg;;
6523*0bfacb9bSmrg;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
6524*0bfacb9bSmrg;;
6525*0bfacb9bSmrg(define_insn "mve_vqshrnbq_m_n_<supf><mode>"
6526*0bfacb9bSmrg  [
6527*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6528*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6529*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6530*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6531*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6532*0bfacb9bSmrg	 VQSHRNBQ_M_N))
6533*0bfacb9bSmrg  ]
6534*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6535*0bfacb9bSmrg  "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6536*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6537*0bfacb9bSmrg   (set_attr "length""8")])
6538*0bfacb9bSmrg
6539*0bfacb9bSmrg;;
6540*0bfacb9bSmrg;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
6541*0bfacb9bSmrg;;
6542*0bfacb9bSmrg(define_insn "mve_vqshrntq_m_n_<supf><mode>"
6543*0bfacb9bSmrg  [
6544*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6545*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6546*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6547*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6548*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6549*0bfacb9bSmrg	 VQSHRNTQ_M_N))
6550*0bfacb9bSmrg  ]
6551*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6552*0bfacb9bSmrg  "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6553*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6554*0bfacb9bSmrg   (set_attr "length""8")])
6555*0bfacb9bSmrg
6556*0bfacb9bSmrg;;
6557*0bfacb9bSmrg;; [vrmlaldavhaq_p_s])
6558*0bfacb9bSmrg;;
6559*0bfacb9bSmrg(define_insn "mve_vrmlaldavhaq_p_sv4si"
6560*0bfacb9bSmrg  [
6561*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
6562*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6563*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
6564*0bfacb9bSmrg		       (match_operand:V4SI 3 "s_register_operand" "w")
6565*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6566*0bfacb9bSmrg	 VRMLALDAVHAQ_P_S))
6567*0bfacb9bSmrg  ]
6568*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6569*0bfacb9bSmrg  "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
6570*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6571*0bfacb9bSmrg   (set_attr "length""8")])
6572*0bfacb9bSmrg
6573*0bfacb9bSmrg;;
6574*0bfacb9bSmrg;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
6575*0bfacb9bSmrg;;
6576*0bfacb9bSmrg(define_insn "mve_vrshrnbq_m_n_<supf><mode>"
6577*0bfacb9bSmrg  [
6578*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6579*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6580*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6581*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_8" "Rb")
6582*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6583*0bfacb9bSmrg	 VRSHRNBQ_M_N))
6584*0bfacb9bSmrg  ]
6585*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6586*0bfacb9bSmrg  "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6587*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6588*0bfacb9bSmrg   (set_attr "length""8")])
6589*0bfacb9bSmrg
6590*0bfacb9bSmrg;;
6591*0bfacb9bSmrg;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
6592*0bfacb9bSmrg;;
6593*0bfacb9bSmrg(define_insn "mve_vrshrntq_m_n_<supf><mode>"
6594*0bfacb9bSmrg  [
6595*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6596*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6597*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6598*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_8" "Rb")
6599*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6600*0bfacb9bSmrg	 VRSHRNTQ_M_N))
6601*0bfacb9bSmrg  ]
6602*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6603*0bfacb9bSmrg  "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6604*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6605*0bfacb9bSmrg   (set_attr "length""8")])
6606*0bfacb9bSmrg
6607*0bfacb9bSmrg;;
6608*0bfacb9bSmrg;; [vshllbq_m_n_u, vshllbq_m_n_s])
6609*0bfacb9bSmrg;;
6610*0bfacb9bSmrg(define_insn "mve_vshllbq_m_n_<supf><mode>"
6611*0bfacb9bSmrg  [
6612*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6613*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6614*0bfacb9bSmrg		       (match_operand:MVE_3 2 "s_register_operand" "w")
6615*0bfacb9bSmrg		       (match_operand:SI 3 "immediate_operand" "i")
6616*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6617*0bfacb9bSmrg	 VSHLLBQ_M_N))
6618*0bfacb9bSmrg  ]
6619*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6620*0bfacb9bSmrg  "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6621*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6622*0bfacb9bSmrg   (set_attr "length""8")])
6623*0bfacb9bSmrg
6624*0bfacb9bSmrg;;
6625*0bfacb9bSmrg;; [vshlltq_m_n_u, vshlltq_m_n_s])
6626*0bfacb9bSmrg;;
6627*0bfacb9bSmrg(define_insn "mve_vshlltq_m_n_<supf><mode>"
6628*0bfacb9bSmrg  [
6629*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6630*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6631*0bfacb9bSmrg		       (match_operand:MVE_3 2 "s_register_operand" "w")
6632*0bfacb9bSmrg		       (match_operand:SI 3 "immediate_operand" "i")
6633*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6634*0bfacb9bSmrg	 VSHLLTQ_M_N))
6635*0bfacb9bSmrg  ]
6636*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6637*0bfacb9bSmrg  "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6638*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6639*0bfacb9bSmrg   (set_attr "length""8")])
6640*0bfacb9bSmrg
6641*0bfacb9bSmrg;;
6642*0bfacb9bSmrg;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
6643*0bfacb9bSmrg;;
6644*0bfacb9bSmrg(define_insn "mve_vshrnbq_m_n_<supf><mode>"
6645*0bfacb9bSmrg  [
6646*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6647*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6648*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6649*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6650*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6651*0bfacb9bSmrg	 VSHRNBQ_M_N))
6652*0bfacb9bSmrg  ]
6653*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6654*0bfacb9bSmrg  "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6655*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6656*0bfacb9bSmrg   (set_attr "length""8")])
6657*0bfacb9bSmrg
6658*0bfacb9bSmrg;;
6659*0bfacb9bSmrg;; [vshrntq_m_n_s, vshrntq_m_n_u])
6660*0bfacb9bSmrg;;
6661*0bfacb9bSmrg(define_insn "mve_vshrntq_m_n_<supf><mode>"
6662*0bfacb9bSmrg  [
6663*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6664*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6665*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6666*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6667*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6668*0bfacb9bSmrg	 VSHRNTQ_M_N))
6669*0bfacb9bSmrg  ]
6670*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6671*0bfacb9bSmrg  "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6672*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6673*0bfacb9bSmrg   (set_attr "length""8")])
6674*0bfacb9bSmrg
6675*0bfacb9bSmrg;;
6676*0bfacb9bSmrg;; [vmlsldavaq_p_s])
6677*0bfacb9bSmrg;;
6678*0bfacb9bSmrg(define_insn "mve_vmlsldavaq_p_s<mode>"
6679*0bfacb9bSmrg  [
6680*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
6681*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6682*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6683*0bfacb9bSmrg		       (match_operand:MVE_5 3 "s_register_operand" "w")
6684*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6685*0bfacb9bSmrg	 VMLSLDAVAQ_P_S))
6686*0bfacb9bSmrg  ]
6687*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6688*0bfacb9bSmrg  "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6689*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6690*0bfacb9bSmrg   (set_attr "length""8")])
6691*0bfacb9bSmrg
6692*0bfacb9bSmrg;;
6693*0bfacb9bSmrg;; [vmlsldavaxq_p_s])
6694*0bfacb9bSmrg;;
6695*0bfacb9bSmrg(define_insn "mve_vmlsldavaxq_p_s<mode>"
6696*0bfacb9bSmrg  [
6697*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
6698*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6699*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6700*0bfacb9bSmrg		       (match_operand:MVE_5 3 "s_register_operand" "w")
6701*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6702*0bfacb9bSmrg	 VMLSLDAVAXQ_P_S))
6703*0bfacb9bSmrg  ]
6704*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6705*0bfacb9bSmrg  "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6706*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6707*0bfacb9bSmrg   (set_attr "length""8")])
6708*0bfacb9bSmrg
6709*0bfacb9bSmrg;;
6710*0bfacb9bSmrg;; [vmullbq_poly_m_p])
6711*0bfacb9bSmrg;;
6712*0bfacb9bSmrg(define_insn "mve_vmullbq_poly_m_p<mode>"
6713*0bfacb9bSmrg  [
6714*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6715*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6716*0bfacb9bSmrg		       (match_operand:MVE_3 2 "s_register_operand" "w")
6717*0bfacb9bSmrg		       (match_operand:MVE_3 3 "s_register_operand" "w")
6718*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6719*0bfacb9bSmrg	 VMULLBQ_POLY_M_P))
6720*0bfacb9bSmrg  ]
6721*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6722*0bfacb9bSmrg  "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6723*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6724*0bfacb9bSmrg   (set_attr "length""8")])
6725*0bfacb9bSmrg
6726*0bfacb9bSmrg;;
6727*0bfacb9bSmrg;; [vmulltq_poly_m_p])
6728*0bfacb9bSmrg;;
6729*0bfacb9bSmrg(define_insn "mve_vmulltq_poly_m_p<mode>"
6730*0bfacb9bSmrg  [
6731*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6732*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6733*0bfacb9bSmrg		       (match_operand:MVE_3 2 "s_register_operand" "w")
6734*0bfacb9bSmrg		       (match_operand:MVE_3 3 "s_register_operand" "w")
6735*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6736*0bfacb9bSmrg	 VMULLTQ_POLY_M_P))
6737*0bfacb9bSmrg  ]
6738*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6739*0bfacb9bSmrg  "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6740*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6741*0bfacb9bSmrg   (set_attr "length""8")])
6742*0bfacb9bSmrg
6743*0bfacb9bSmrg;;
6744*0bfacb9bSmrg;; [vqdmullbq_m_n_s])
6745*0bfacb9bSmrg;;
6746*0bfacb9bSmrg(define_insn "mve_vqdmullbq_m_n_s<mode>"
6747*0bfacb9bSmrg  [
6748*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6749*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6750*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6751*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
6752*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6753*0bfacb9bSmrg	 VQDMULLBQ_M_N_S))
6754*0bfacb9bSmrg  ]
6755*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6756*0bfacb9bSmrg  "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6757*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6758*0bfacb9bSmrg   (set_attr "length""8")])
6759*0bfacb9bSmrg
6760*0bfacb9bSmrg;;
6761*0bfacb9bSmrg;; [vqdmullbq_m_s])
6762*0bfacb9bSmrg;;
6763*0bfacb9bSmrg(define_insn "mve_vqdmullbq_m_s<mode>"
6764*0bfacb9bSmrg  [
6765*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6766*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6767*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6768*0bfacb9bSmrg		       (match_operand:MVE_5 3 "s_register_operand" "w")
6769*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6770*0bfacb9bSmrg	 VQDMULLBQ_M_S))
6771*0bfacb9bSmrg  ]
6772*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6773*0bfacb9bSmrg  "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6774*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6775*0bfacb9bSmrg   (set_attr "length""8")])
6776*0bfacb9bSmrg
6777*0bfacb9bSmrg;;
6778*0bfacb9bSmrg;; [vqdmulltq_m_n_s])
6779*0bfacb9bSmrg;;
6780*0bfacb9bSmrg(define_insn "mve_vqdmulltq_m_n_s<mode>"
6781*0bfacb9bSmrg  [
6782*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6783*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6784*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6785*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
6786*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6787*0bfacb9bSmrg	 VQDMULLTQ_M_N_S))
6788*0bfacb9bSmrg  ]
6789*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6790*0bfacb9bSmrg  "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
6791*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6792*0bfacb9bSmrg   (set_attr "length""8")])
6793*0bfacb9bSmrg
6794*0bfacb9bSmrg;;
6795*0bfacb9bSmrg;; [vqdmulltq_m_s])
6796*0bfacb9bSmrg;;
6797*0bfacb9bSmrg(define_insn "mve_vqdmulltq_m_s<mode>"
6798*0bfacb9bSmrg  [
6799*0bfacb9bSmrg   (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6800*0bfacb9bSmrg	(unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6801*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6802*0bfacb9bSmrg		       (match_operand:MVE_5 3 "s_register_operand" "w")
6803*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6804*0bfacb9bSmrg	 VQDMULLTQ_M_S))
6805*0bfacb9bSmrg  ]
6806*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6807*0bfacb9bSmrg  "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6808*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6809*0bfacb9bSmrg   (set_attr "length""8")])
6810*0bfacb9bSmrg
6811*0bfacb9bSmrg;;
6812*0bfacb9bSmrg;; [vqrshrunbq_m_n_s])
6813*0bfacb9bSmrg;;
6814*0bfacb9bSmrg(define_insn "mve_vqrshrunbq_m_n_s<mode>"
6815*0bfacb9bSmrg  [
6816*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6817*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6818*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6819*0bfacb9bSmrg		       (match_operand:SI 3 "mve_imm_8" "Rb")
6820*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6821*0bfacb9bSmrg	 VQRSHRUNBQ_M_N_S))
6822*0bfacb9bSmrg  ]
6823*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6824*0bfacb9bSmrg  "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6825*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6826*0bfacb9bSmrg   (set_attr "length""8")])
6827*0bfacb9bSmrg
6828*0bfacb9bSmrg;;
6829*0bfacb9bSmrg;; [vqrshruntq_m_n_s])
6830*0bfacb9bSmrg;;
6831*0bfacb9bSmrg(define_insn "mve_vqrshruntq_m_n_s<mode>"
6832*0bfacb9bSmrg  [
6833*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6834*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6835*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6836*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6837*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6838*0bfacb9bSmrg	 VQRSHRUNTQ_M_N_S))
6839*0bfacb9bSmrg  ]
6840*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6841*0bfacb9bSmrg  "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6842*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6843*0bfacb9bSmrg   (set_attr "length""8")])
6844*0bfacb9bSmrg
6845*0bfacb9bSmrg;;
6846*0bfacb9bSmrg;; [vqshrunbq_m_n_s])
6847*0bfacb9bSmrg;;
6848*0bfacb9bSmrg(define_insn "mve_vqshrunbq_m_n_s<mode>"
6849*0bfacb9bSmrg  [
6850*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6851*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6852*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6853*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6854*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6855*0bfacb9bSmrg	 VQSHRUNBQ_M_N_S))
6856*0bfacb9bSmrg  ]
6857*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6858*0bfacb9bSmrg  "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6859*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6860*0bfacb9bSmrg   (set_attr "length""8")])
6861*0bfacb9bSmrg
6862*0bfacb9bSmrg;;
6863*0bfacb9bSmrg;; [vqshruntq_m_n_s])
6864*0bfacb9bSmrg;;
6865*0bfacb9bSmrg(define_insn "mve_vqshruntq_m_n_s<mode>"
6866*0bfacb9bSmrg  [
6867*0bfacb9bSmrg   (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6868*0bfacb9bSmrg	(unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6869*0bfacb9bSmrg		       (match_operand:MVE_5 2 "s_register_operand" "w")
6870*0bfacb9bSmrg		       (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6871*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6872*0bfacb9bSmrg	 VQSHRUNTQ_M_N_S))
6873*0bfacb9bSmrg  ]
6874*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6875*0bfacb9bSmrg  "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6876*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6877*0bfacb9bSmrg   (set_attr "length""8")])
6878*0bfacb9bSmrg
6879*0bfacb9bSmrg;;
6880*0bfacb9bSmrg;; [vrmlaldavhaq_p_u])
6881*0bfacb9bSmrg;;
6882*0bfacb9bSmrg(define_insn "mve_vrmlaldavhaq_p_uv4si"
6883*0bfacb9bSmrg  [
6884*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
6885*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6886*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
6887*0bfacb9bSmrg		       (match_operand:V4SI 3 "s_register_operand" "w")
6888*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6889*0bfacb9bSmrg	 VRMLALDAVHAQ_P_U))
6890*0bfacb9bSmrg  ]
6891*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6892*0bfacb9bSmrg  "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
6893*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6894*0bfacb9bSmrg   (set_attr "length""8")])
6895*0bfacb9bSmrg
6896*0bfacb9bSmrg;;
6897*0bfacb9bSmrg;; [vrmlaldavhaxq_p_s])
6898*0bfacb9bSmrg;;
6899*0bfacb9bSmrg(define_insn "mve_vrmlaldavhaxq_p_sv4si"
6900*0bfacb9bSmrg  [
6901*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
6902*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6903*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
6904*0bfacb9bSmrg		       (match_operand:V4SI 3 "s_register_operand" "w")
6905*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6906*0bfacb9bSmrg	 VRMLALDAVHAXQ_P_S))
6907*0bfacb9bSmrg  ]
6908*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6909*0bfacb9bSmrg  "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6910*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6911*0bfacb9bSmrg   (set_attr "length""8")])
6912*0bfacb9bSmrg
6913*0bfacb9bSmrg;;
6914*0bfacb9bSmrg;; [vrmlsldavhaq_p_s])
6915*0bfacb9bSmrg;;
6916*0bfacb9bSmrg(define_insn "mve_vrmlsldavhaq_p_sv4si"
6917*0bfacb9bSmrg  [
6918*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
6919*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6920*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
6921*0bfacb9bSmrg		       (match_operand:V4SI 3 "s_register_operand" "w")
6922*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6923*0bfacb9bSmrg	 VRMLSLDAVHAQ_P_S))
6924*0bfacb9bSmrg  ]
6925*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6926*0bfacb9bSmrg  "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
6927*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6928*0bfacb9bSmrg   (set_attr "length""8")])
6929*0bfacb9bSmrg
6930*0bfacb9bSmrg;;
6931*0bfacb9bSmrg;; [vrmlsldavhaxq_p_s])
6932*0bfacb9bSmrg;;
6933*0bfacb9bSmrg(define_insn "mve_vrmlsldavhaxq_p_sv4si"
6934*0bfacb9bSmrg  [
6935*0bfacb9bSmrg   (set (match_operand:DI 0 "s_register_operand" "=r")
6936*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6937*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")
6938*0bfacb9bSmrg		       (match_operand:V4SI 3 "s_register_operand" "w")
6939*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6940*0bfacb9bSmrg	 VRMLSLDAVHAXQ_P_S))
6941*0bfacb9bSmrg  ]
6942*0bfacb9bSmrg  "TARGET_HAVE_MVE"
6943*0bfacb9bSmrg  "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6944*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6945*0bfacb9bSmrg   (set_attr "length""8")])
6946*0bfacb9bSmrg;;
6947*0bfacb9bSmrg;; [vabdq_m_f])
6948*0bfacb9bSmrg;;
6949*0bfacb9bSmrg(define_insn "mve_vabdq_m_f<mode>"
6950*0bfacb9bSmrg  [
6951*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6952*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6953*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
6954*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
6955*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6956*0bfacb9bSmrg	 VABDQ_M_F))
6957*0bfacb9bSmrg  ]
6958*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6959*0bfacb9bSmrg  "vpst\;vabdt.f%#<V_sz_elem>	%q0, %q2, %q3"
6960*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6961*0bfacb9bSmrg   (set_attr "length""8")])
6962*0bfacb9bSmrg
6963*0bfacb9bSmrg;;
6964*0bfacb9bSmrg;; [vaddq_m_f])
6965*0bfacb9bSmrg;;
6966*0bfacb9bSmrg(define_insn "mve_vaddq_m_f<mode>"
6967*0bfacb9bSmrg  [
6968*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6969*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6970*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
6971*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
6972*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6973*0bfacb9bSmrg	 VADDQ_M_F))
6974*0bfacb9bSmrg  ]
6975*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6976*0bfacb9bSmrg  "vpst\;vaddt.f%#<V_sz_elem>	%q0, %q2, %q3"
6977*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6978*0bfacb9bSmrg   (set_attr "length""8")])
6979*0bfacb9bSmrg
6980*0bfacb9bSmrg;;
6981*0bfacb9bSmrg;; [vaddq_m_n_f])
6982*0bfacb9bSmrg;;
6983*0bfacb9bSmrg(define_insn "mve_vaddq_m_n_f<mode>"
6984*0bfacb9bSmrg  [
6985*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6986*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6987*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
6988*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
6989*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
6990*0bfacb9bSmrg	 VADDQ_M_N_F))
6991*0bfacb9bSmrg  ]
6992*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6993*0bfacb9bSmrg  "vpst\;vaddt.f%#<V_sz_elem>	%q0, %q2, %3"
6994*0bfacb9bSmrg  [(set_attr "type" "mve_move")
6995*0bfacb9bSmrg   (set_attr "length""8")])
6996*0bfacb9bSmrg
6997*0bfacb9bSmrg;;
6998*0bfacb9bSmrg;; [vandq_m_f])
6999*0bfacb9bSmrg;;
7000*0bfacb9bSmrg(define_insn "mve_vandq_m_f<mode>"
7001*0bfacb9bSmrg  [
7002*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7003*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7004*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7005*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7006*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7007*0bfacb9bSmrg	 VANDQ_M_F))
7008*0bfacb9bSmrg  ]
7009*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7010*0bfacb9bSmrg  "vpst\;vandt %q0, %q2, %q3"
7011*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7012*0bfacb9bSmrg   (set_attr "length""8")])
7013*0bfacb9bSmrg
7014*0bfacb9bSmrg;;
7015*0bfacb9bSmrg;; [vbicq_m_f])
7016*0bfacb9bSmrg;;
7017*0bfacb9bSmrg(define_insn "mve_vbicq_m_f<mode>"
7018*0bfacb9bSmrg  [
7019*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7020*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7021*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7022*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7023*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7024*0bfacb9bSmrg	 VBICQ_M_F))
7025*0bfacb9bSmrg  ]
7026*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7027*0bfacb9bSmrg  "vpst\;vbict %q0, %q2, %q3"
7028*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7029*0bfacb9bSmrg   (set_attr "length""8")])
7030*0bfacb9bSmrg
7031*0bfacb9bSmrg;;
7032*0bfacb9bSmrg;; [vbrsrq_m_n_f])
7033*0bfacb9bSmrg;;
7034*0bfacb9bSmrg(define_insn "mve_vbrsrq_m_n_f<mode>"
7035*0bfacb9bSmrg  [
7036*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7037*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7038*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7039*0bfacb9bSmrg		       (match_operand:SI 3 "s_register_operand" "r")
7040*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7041*0bfacb9bSmrg	 VBRSRQ_M_N_F))
7042*0bfacb9bSmrg  ]
7043*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7044*0bfacb9bSmrg  "vpst\;vbrsrt.%#<V_sz_elem>	%q0, %q2, %3"
7045*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7046*0bfacb9bSmrg   (set_attr "length""8")])
7047*0bfacb9bSmrg
7048*0bfacb9bSmrg;;
7049*0bfacb9bSmrg;; [vcaddq_rot270_m_f])
7050*0bfacb9bSmrg;;
7051*0bfacb9bSmrg(define_insn "mve_vcaddq_rot270_m_f<mode>"
7052*0bfacb9bSmrg  [
7053*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7054*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7055*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7056*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7057*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7058*0bfacb9bSmrg	 VCADDQ_ROT270_M_F))
7059*0bfacb9bSmrg  ]
7060*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7061*0bfacb9bSmrg  "vpst\;vcaddt.f%#<V_sz_elem>	%q0, %q2, %q3, #270"
7062*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7063*0bfacb9bSmrg   (set_attr "length""8")])
7064*0bfacb9bSmrg
7065*0bfacb9bSmrg;;
7066*0bfacb9bSmrg;; [vcaddq_rot90_m_f])
7067*0bfacb9bSmrg;;
7068*0bfacb9bSmrg(define_insn "mve_vcaddq_rot90_m_f<mode>"
7069*0bfacb9bSmrg  [
7070*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7071*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7072*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7073*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7074*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7075*0bfacb9bSmrg	 VCADDQ_ROT90_M_F))
7076*0bfacb9bSmrg  ]
7077*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7078*0bfacb9bSmrg  "vpst\;vcaddt.f%#<V_sz_elem>	%q0, %q2, %q3, #90"
7079*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7080*0bfacb9bSmrg   (set_attr "length""8")])
7081*0bfacb9bSmrg
7082*0bfacb9bSmrg;;
7083*0bfacb9bSmrg;; [vcmlaq_m_f])
7084*0bfacb9bSmrg;;
7085*0bfacb9bSmrg(define_insn "mve_vcmlaq_m_f<mode>"
7086*0bfacb9bSmrg  [
7087*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7088*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7089*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7090*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7091*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7092*0bfacb9bSmrg	 VCMLAQ_M_F))
7093*0bfacb9bSmrg  ]
7094*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7095*0bfacb9bSmrg  "vpst\;vcmlat.f%#<V_sz_elem>	%q0, %q2, %q3, #0"
7096*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7097*0bfacb9bSmrg   (set_attr "length""8")])
7098*0bfacb9bSmrg
7099*0bfacb9bSmrg;;
7100*0bfacb9bSmrg;; [vcmlaq_rot180_m_f])
7101*0bfacb9bSmrg;;
7102*0bfacb9bSmrg(define_insn "mve_vcmlaq_rot180_m_f<mode>"
7103*0bfacb9bSmrg  [
7104*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7105*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7106*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7107*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7108*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7109*0bfacb9bSmrg	 VCMLAQ_ROT180_M_F))
7110*0bfacb9bSmrg  ]
7111*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7112*0bfacb9bSmrg  "vpst\;vcmlat.f%#<V_sz_elem>	%q0, %q2, %q3, #180"
7113*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7114*0bfacb9bSmrg   (set_attr "length""8")])
7115*0bfacb9bSmrg
7116*0bfacb9bSmrg;;
7117*0bfacb9bSmrg;; [vcmlaq_rot270_m_f])
7118*0bfacb9bSmrg;;
7119*0bfacb9bSmrg(define_insn "mve_vcmlaq_rot270_m_f<mode>"
7120*0bfacb9bSmrg  [
7121*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7122*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7123*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7124*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7125*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7126*0bfacb9bSmrg	 VCMLAQ_ROT270_M_F))
7127*0bfacb9bSmrg  ]
7128*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7129*0bfacb9bSmrg  "vpst\;vcmlat.f%#<V_sz_elem>	%q0, %q2, %q3, #270"
7130*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7131*0bfacb9bSmrg   (set_attr "length""8")])
7132*0bfacb9bSmrg
7133*0bfacb9bSmrg;;
7134*0bfacb9bSmrg;; [vcmlaq_rot90_m_f])
7135*0bfacb9bSmrg;;
7136*0bfacb9bSmrg(define_insn "mve_vcmlaq_rot90_m_f<mode>"
7137*0bfacb9bSmrg  [
7138*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7139*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7140*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7141*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7142*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7143*0bfacb9bSmrg	 VCMLAQ_ROT90_M_F))
7144*0bfacb9bSmrg  ]
7145*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7146*0bfacb9bSmrg  "vpst\;vcmlat.f%#<V_sz_elem>	%q0, %q2, %q3, #90"
7147*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7148*0bfacb9bSmrg   (set_attr "length""8")])
7149*0bfacb9bSmrg
7150*0bfacb9bSmrg;;
7151*0bfacb9bSmrg;; [vcmulq_m_f])
7152*0bfacb9bSmrg;;
7153*0bfacb9bSmrg(define_insn "mve_vcmulq_m_f<mode>"
7154*0bfacb9bSmrg  [
7155*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7156*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7157*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7158*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7159*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7160*0bfacb9bSmrg	 VCMULQ_M_F))
7161*0bfacb9bSmrg  ]
7162*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7163*0bfacb9bSmrg  "vpst\;vcmult.f%#<V_sz_elem>	%q0, %q2, %q3, #0"
7164*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7165*0bfacb9bSmrg   (set_attr "length""8")])
7166*0bfacb9bSmrg
7167*0bfacb9bSmrg;;
7168*0bfacb9bSmrg;; [vcmulq_rot180_m_f])
7169*0bfacb9bSmrg;;
7170*0bfacb9bSmrg(define_insn "mve_vcmulq_rot180_m_f<mode>"
7171*0bfacb9bSmrg  [
7172*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7173*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7174*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7175*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7176*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7177*0bfacb9bSmrg	 VCMULQ_ROT180_M_F))
7178*0bfacb9bSmrg  ]
7179*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7180*0bfacb9bSmrg  "vpst\;vcmult.f%#<V_sz_elem>	%q0, %q2, %q3, #180"
7181*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7182*0bfacb9bSmrg   (set_attr "length""8")])
7183*0bfacb9bSmrg
7184*0bfacb9bSmrg;;
7185*0bfacb9bSmrg;; [vcmulq_rot270_m_f])
7186*0bfacb9bSmrg;;
7187*0bfacb9bSmrg(define_insn "mve_vcmulq_rot270_m_f<mode>"
7188*0bfacb9bSmrg  [
7189*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7190*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7191*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7192*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7193*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7194*0bfacb9bSmrg	 VCMULQ_ROT270_M_F))
7195*0bfacb9bSmrg  ]
7196*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7197*0bfacb9bSmrg  "vpst\;vcmult.f%#<V_sz_elem>	%q0, %q2, %q3, #270"
7198*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7199*0bfacb9bSmrg   (set_attr "length""8")])
7200*0bfacb9bSmrg
7201*0bfacb9bSmrg;;
7202*0bfacb9bSmrg;; [vcmulq_rot90_m_f])
7203*0bfacb9bSmrg;;
7204*0bfacb9bSmrg(define_insn "mve_vcmulq_rot90_m_f<mode>"
7205*0bfacb9bSmrg  [
7206*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7207*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7208*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7209*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7210*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7211*0bfacb9bSmrg	 VCMULQ_ROT90_M_F))
7212*0bfacb9bSmrg  ]
7213*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7214*0bfacb9bSmrg  "vpst\;vcmult.f%#<V_sz_elem>	%q0, %q2, %q3, #90"
7215*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7216*0bfacb9bSmrg   (set_attr "length""8")])
7217*0bfacb9bSmrg
7218*0bfacb9bSmrg;;
7219*0bfacb9bSmrg;; [veorq_m_f])
7220*0bfacb9bSmrg;;
7221*0bfacb9bSmrg(define_insn "mve_veorq_m_f<mode>"
7222*0bfacb9bSmrg  [
7223*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7224*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7225*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7226*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7227*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7228*0bfacb9bSmrg	 VEORQ_M_F))
7229*0bfacb9bSmrg  ]
7230*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7231*0bfacb9bSmrg  "vpst\;veort %q0, %q2, %q3"
7232*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7233*0bfacb9bSmrg   (set_attr "length""8")])
7234*0bfacb9bSmrg
7235*0bfacb9bSmrg;;
7236*0bfacb9bSmrg;; [vfmaq_m_f])
7237*0bfacb9bSmrg;;
7238*0bfacb9bSmrg(define_insn "mve_vfmaq_m_f<mode>"
7239*0bfacb9bSmrg  [
7240*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7241*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7242*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7243*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7244*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7245*0bfacb9bSmrg	 VFMAQ_M_F))
7246*0bfacb9bSmrg  ]
7247*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7248*0bfacb9bSmrg  "vpst\;vfmat.f%#<V_sz_elem>	%q0, %q2, %q3"
7249*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7250*0bfacb9bSmrg   (set_attr "length""8")])
7251*0bfacb9bSmrg
7252*0bfacb9bSmrg;;
7253*0bfacb9bSmrg;; [vfmaq_m_n_f])
7254*0bfacb9bSmrg;;
7255*0bfacb9bSmrg(define_insn "mve_vfmaq_m_n_f<mode>"
7256*0bfacb9bSmrg  [
7257*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7258*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7259*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7260*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
7261*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7262*0bfacb9bSmrg	 VFMAQ_M_N_F))
7263*0bfacb9bSmrg  ]
7264*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7265*0bfacb9bSmrg  "vpst\;vfmat.f%#<V_sz_elem>	%q0, %q2, %3"
7266*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7267*0bfacb9bSmrg   (set_attr "length""8")])
7268*0bfacb9bSmrg
7269*0bfacb9bSmrg;;
7270*0bfacb9bSmrg;; [vfmasq_m_n_f])
7271*0bfacb9bSmrg;;
7272*0bfacb9bSmrg(define_insn "mve_vfmasq_m_n_f<mode>"
7273*0bfacb9bSmrg  [
7274*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7275*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7276*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7277*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
7278*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7279*0bfacb9bSmrg	 VFMASQ_M_N_F))
7280*0bfacb9bSmrg  ]
7281*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7282*0bfacb9bSmrg  "vpst\;vfmast.f%#<V_sz_elem>	%q0, %q2, %3"
7283*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7284*0bfacb9bSmrg   (set_attr "length""8")])
7285*0bfacb9bSmrg
7286*0bfacb9bSmrg;;
7287*0bfacb9bSmrg;; [vfmsq_m_f])
7288*0bfacb9bSmrg;;
7289*0bfacb9bSmrg(define_insn "mve_vfmsq_m_f<mode>"
7290*0bfacb9bSmrg  [
7291*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7292*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7293*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7294*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7295*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7296*0bfacb9bSmrg	 VFMSQ_M_F))
7297*0bfacb9bSmrg  ]
7298*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7299*0bfacb9bSmrg  "vpst\;vfmst.f%#<V_sz_elem>	%q0, %q2, %q3"
7300*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7301*0bfacb9bSmrg   (set_attr "length""8")])
7302*0bfacb9bSmrg
7303*0bfacb9bSmrg;;
7304*0bfacb9bSmrg;; [vmaxnmq_m_f])
7305*0bfacb9bSmrg;;
7306*0bfacb9bSmrg(define_insn "mve_vmaxnmq_m_f<mode>"
7307*0bfacb9bSmrg  [
7308*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7309*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7310*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7311*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7312*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7313*0bfacb9bSmrg	 VMAXNMQ_M_F))
7314*0bfacb9bSmrg  ]
7315*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7316*0bfacb9bSmrg  "vpst\;vmaxnmt.f%#<V_sz_elem>	%q0, %q2, %q3"
7317*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7318*0bfacb9bSmrg   (set_attr "length""8")])
7319*0bfacb9bSmrg
7320*0bfacb9bSmrg;;
7321*0bfacb9bSmrg;; [vminnmq_m_f])
7322*0bfacb9bSmrg;;
7323*0bfacb9bSmrg(define_insn "mve_vminnmq_m_f<mode>"
7324*0bfacb9bSmrg  [
7325*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7326*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7327*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7328*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7329*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7330*0bfacb9bSmrg	 VMINNMQ_M_F))
7331*0bfacb9bSmrg  ]
7332*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7333*0bfacb9bSmrg  "vpst\;vminnmt.f%#<V_sz_elem>	%q0, %q2, %q3"
7334*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7335*0bfacb9bSmrg   (set_attr "length""8")])
7336*0bfacb9bSmrg
7337*0bfacb9bSmrg;;
7338*0bfacb9bSmrg;; [vmulq_m_f])
7339*0bfacb9bSmrg;;
7340*0bfacb9bSmrg(define_insn "mve_vmulq_m_f<mode>"
7341*0bfacb9bSmrg  [
7342*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7343*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7344*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7345*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7346*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7347*0bfacb9bSmrg	 VMULQ_M_F))
7348*0bfacb9bSmrg  ]
7349*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7350*0bfacb9bSmrg  "vpst\;vmult.f%#<V_sz_elem>	%q0, %q2, %q3"
7351*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7352*0bfacb9bSmrg   (set_attr "length""8")])
7353*0bfacb9bSmrg
7354*0bfacb9bSmrg;;
7355*0bfacb9bSmrg;; [vmulq_m_n_f])
7356*0bfacb9bSmrg;;
7357*0bfacb9bSmrg(define_insn "mve_vmulq_m_n_f<mode>"
7358*0bfacb9bSmrg  [
7359*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7360*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7361*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7362*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
7363*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7364*0bfacb9bSmrg	 VMULQ_M_N_F))
7365*0bfacb9bSmrg  ]
7366*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7367*0bfacb9bSmrg  "vpst\;vmult.f%#<V_sz_elem>	%q0, %q2, %3"
7368*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7369*0bfacb9bSmrg   (set_attr "length""8")])
7370*0bfacb9bSmrg
7371*0bfacb9bSmrg;;
7372*0bfacb9bSmrg;; [vornq_m_f])
7373*0bfacb9bSmrg;;
7374*0bfacb9bSmrg(define_insn "mve_vornq_m_f<mode>"
7375*0bfacb9bSmrg  [
7376*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7377*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7378*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7379*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7380*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7381*0bfacb9bSmrg	 VORNQ_M_F))
7382*0bfacb9bSmrg  ]
7383*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7384*0bfacb9bSmrg  "vpst\;vornt %q0, %q2, %q3"
7385*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7386*0bfacb9bSmrg   (set_attr "length""8")])
7387*0bfacb9bSmrg
7388*0bfacb9bSmrg;;
7389*0bfacb9bSmrg;; [vorrq_m_f])
7390*0bfacb9bSmrg;;
7391*0bfacb9bSmrg(define_insn "mve_vorrq_m_f<mode>"
7392*0bfacb9bSmrg  [
7393*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7394*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7395*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7396*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7397*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7398*0bfacb9bSmrg	 VORRQ_M_F))
7399*0bfacb9bSmrg  ]
7400*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7401*0bfacb9bSmrg  "vpst\;vorrt %q0, %q2, %q3"
7402*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7403*0bfacb9bSmrg   (set_attr "length""8")])
7404*0bfacb9bSmrg
7405*0bfacb9bSmrg;;
7406*0bfacb9bSmrg;; [vsubq_m_f])
7407*0bfacb9bSmrg;;
7408*0bfacb9bSmrg(define_insn "mve_vsubq_m_f<mode>"
7409*0bfacb9bSmrg  [
7410*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7411*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7412*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7413*0bfacb9bSmrg		       (match_operand:MVE_0 3 "s_register_operand" "w")
7414*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7415*0bfacb9bSmrg	 VSUBQ_M_F))
7416*0bfacb9bSmrg  ]
7417*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7418*0bfacb9bSmrg  "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
7419*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7420*0bfacb9bSmrg   (set_attr "length""8")])
7421*0bfacb9bSmrg
7422*0bfacb9bSmrg;;
7423*0bfacb9bSmrg;; [vsubq_m_n_f])
7424*0bfacb9bSmrg;;
7425*0bfacb9bSmrg(define_insn "mve_vsubq_m_n_f<mode>"
7426*0bfacb9bSmrg  [
7427*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7428*0bfacb9bSmrg	(unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7429*0bfacb9bSmrg		       (match_operand:MVE_0 2 "s_register_operand" "w")
7430*0bfacb9bSmrg		       (match_operand:<V_elem> 3 "s_register_operand" "r")
7431*0bfacb9bSmrg		       (match_operand:HI 4 "vpr_register_operand" "Up")]
7432*0bfacb9bSmrg	 VSUBQ_M_N_F))
7433*0bfacb9bSmrg  ]
7434*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7435*0bfacb9bSmrg  "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
7436*0bfacb9bSmrg  [(set_attr "type" "mve_move")
7437*0bfacb9bSmrg   (set_attr "length""8")])
7438*0bfacb9bSmrg
7439*0bfacb9bSmrg;;
7440*0bfacb9bSmrg;; [vstrbq_s vstrbq_u]
7441*0bfacb9bSmrg;;
7442*0bfacb9bSmrg(define_insn "mve_vstrbq_<supf><mode>"
7443*0bfacb9bSmrg  [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7444*0bfacb9bSmrg	(unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
7445*0bfacb9bSmrg	 VSTRBQ))
7446*0bfacb9bSmrg  ]
7447*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7448*0bfacb9bSmrg{
7449*0bfacb9bSmrg   rtx ops[2];
7450*0bfacb9bSmrg   int regno = REGNO (operands[1]);
7451*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno);
7452*0bfacb9bSmrg   ops[0]  = operands[0];
7453*0bfacb9bSmrg   output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
7454*0bfacb9bSmrg   return "";
7455*0bfacb9bSmrg}
7456*0bfacb9bSmrg  [(set_attr "length" "4")])
7457*0bfacb9bSmrg
7458*0bfacb9bSmrg;;
7459*0bfacb9bSmrg;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
7460*0bfacb9bSmrg;;
7461*0bfacb9bSmrg(define_expand "mve_vstrbq_scatter_offset_<supf><mode>"
7462*0bfacb9bSmrg  [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7463*0bfacb9bSmrg   (match_operand:MVE_2 1 "s_register_operand")
7464*0bfacb9bSmrg   (match_operand:MVE_2 2 "s_register_operand")
7465*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7466*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7467*0bfacb9bSmrg{
7468*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
7469*0bfacb9bSmrg  gcc_assert (REG_P (ind));
7470*0bfacb9bSmrg  emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1],
7471*0bfacb9bSmrg							      operands[2]));
7472*0bfacb9bSmrg  DONE;
7473*0bfacb9bSmrg})
7474*0bfacb9bSmrg
7475*0bfacb9bSmrg(define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn"
7476*0bfacb9bSmrg  [(set (mem:BLK (scratch))
7477*0bfacb9bSmrg	(unspec:BLK
7478*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
7479*0bfacb9bSmrg	   (match_operand:MVE_2 1 "s_register_operand" "w")
7480*0bfacb9bSmrg	   (match_operand:MVE_2 2 "s_register_operand" "w")]
7481*0bfacb9bSmrg	  VSTRBSOQ))]
7482*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7483*0bfacb9bSmrg  "vstrb.<V_sz_elem>\t%q2, [%0, %q1]"
7484*0bfacb9bSmrg  [(set_attr "length" "4")])
7485*0bfacb9bSmrg
7486*0bfacb9bSmrg;;
7487*0bfacb9bSmrg;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
7488*0bfacb9bSmrg;;
7489*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_base_<supf>v4si"
7490*0bfacb9bSmrg  [(set (mem:BLK (scratch))
7491*0bfacb9bSmrg	(unspec:BLK
7492*0bfacb9bSmrg		[(match_operand:V4SI 0 "s_register_operand" "w")
7493*0bfacb9bSmrg		 (match_operand:SI 1 "immediate_operand" "i")
7494*0bfacb9bSmrg		 (match_operand:V4SI 2 "s_register_operand" "w")]
7495*0bfacb9bSmrg	 VSTRWSBQ))
7496*0bfacb9bSmrg  ]
7497*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7498*0bfacb9bSmrg{
7499*0bfacb9bSmrg   rtx ops[3];
7500*0bfacb9bSmrg   ops[0] = operands[0];
7501*0bfacb9bSmrg   ops[1] = operands[1];
7502*0bfacb9bSmrg   ops[2] = operands[2];
7503*0bfacb9bSmrg   output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
7504*0bfacb9bSmrg   return "";
7505*0bfacb9bSmrg}
7506*0bfacb9bSmrg  [(set_attr "length" "4")])
7507*0bfacb9bSmrg
7508*0bfacb9bSmrg;;
7509*0bfacb9bSmrg;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
7510*0bfacb9bSmrg;;
7511*0bfacb9bSmrg(define_insn "mve_vldrbq_gather_offset_<supf><mode>"
7512*0bfacb9bSmrg  [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7513*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7514*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")]
7515*0bfacb9bSmrg	 VLDRBGOQ))
7516*0bfacb9bSmrg  ]
7517*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7518*0bfacb9bSmrg{
7519*0bfacb9bSmrg   rtx ops[3];
7520*0bfacb9bSmrg   ops[0] = operands[0];
7521*0bfacb9bSmrg   ops[1] = operands[1];
7522*0bfacb9bSmrg   ops[2] = operands[2];
7523*0bfacb9bSmrg   if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7524*0bfacb9bSmrg     output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
7525*0bfacb9bSmrg   else
7526*0bfacb9bSmrg     output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7527*0bfacb9bSmrg   return "";
7528*0bfacb9bSmrg}
7529*0bfacb9bSmrg  [(set_attr "length" "4")])
7530*0bfacb9bSmrg
7531*0bfacb9bSmrg;;
7532*0bfacb9bSmrg;; [vldrbq_s vldrbq_u]
7533*0bfacb9bSmrg;;
7534*0bfacb9bSmrg(define_insn "mve_vldrbq_<supf><mode>"
7535*0bfacb9bSmrg  [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7536*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")]
7537*0bfacb9bSmrg	 VLDRBQ))
7538*0bfacb9bSmrg  ]
7539*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7540*0bfacb9bSmrg{
7541*0bfacb9bSmrg   rtx ops[2];
7542*0bfacb9bSmrg   int regno = REGNO (operands[0]);
7543*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
7544*0bfacb9bSmrg   ops[1]  = operands[1];
7545*0bfacb9bSmrg   if (<V_sz_elem> == 8)
7546*0bfacb9bSmrg     output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops);
7547*0bfacb9bSmrg   else
7548*0bfacb9bSmrg     output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
7549*0bfacb9bSmrg   return "";
7550*0bfacb9bSmrg}
7551*0bfacb9bSmrg  [(set_attr "length" "4")])
7552*0bfacb9bSmrg
7553*0bfacb9bSmrg;;
7554*0bfacb9bSmrg;; [vldrwq_gather_base_s vldrwq_gather_base_u]
7555*0bfacb9bSmrg;;
7556*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_base_<supf>v4si"
7557*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7558*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7559*0bfacb9bSmrg		      (match_operand:SI 2 "immediate_operand" "i")]
7560*0bfacb9bSmrg	 VLDRWGBQ))
7561*0bfacb9bSmrg  ]
7562*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7563*0bfacb9bSmrg{
7564*0bfacb9bSmrg   rtx ops[3];
7565*0bfacb9bSmrg   ops[0] = operands[0];
7566*0bfacb9bSmrg   ops[1] = operands[1];
7567*0bfacb9bSmrg   ops[2] = operands[2];
7568*0bfacb9bSmrg   output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7569*0bfacb9bSmrg   return "";
7570*0bfacb9bSmrg}
7571*0bfacb9bSmrg  [(set_attr "length" "4")])
7572*0bfacb9bSmrg
7573*0bfacb9bSmrg;;
7574*0bfacb9bSmrg;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
7575*0bfacb9bSmrg;;
7576*0bfacb9bSmrg(define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>"
7577*0bfacb9bSmrg  [(match_operand:<MVE_B_ELEM>  0 "mve_scatter_memory")
7578*0bfacb9bSmrg   (match_operand:MVE_2 1 "s_register_operand")
7579*0bfacb9bSmrg   (match_operand:MVE_2 2 "s_register_operand")
7580*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand" "Up")
7581*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
7582*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7583*0bfacb9bSmrg{
7584*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
7585*0bfacb9bSmrg  gcc_assert (REG_P (ind));
7586*0bfacb9bSmrg  emit_insn (
7587*0bfacb9bSmrg    gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
7588*0bfacb9bSmrg						       operands[2],
7589*0bfacb9bSmrg						       operands[3]));
7590*0bfacb9bSmrg  DONE;
7591*0bfacb9bSmrg})
7592*0bfacb9bSmrg
7593*0bfacb9bSmrg(define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn"
7594*0bfacb9bSmrg  [(set (mem:BLK (scratch))
7595*0bfacb9bSmrg	(unspec:BLK
7596*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
7597*0bfacb9bSmrg	   (match_operand:MVE_2 1 "s_register_operand" "w")
7598*0bfacb9bSmrg	   (match_operand:MVE_2 2 "s_register_operand" "w")
7599*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
7600*0bfacb9bSmrg	  VSTRBSOQ))]
7601*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7602*0bfacb9bSmrg  "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]"
7603*0bfacb9bSmrg  [(set_attr "length" "8")])
7604*0bfacb9bSmrg
7605*0bfacb9bSmrg;;
7606*0bfacb9bSmrg;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
7607*0bfacb9bSmrg;;
7608*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
7609*0bfacb9bSmrg  [(set (mem:BLK (scratch))
7610*0bfacb9bSmrg	(unspec:BLK
7611*0bfacb9bSmrg		[(match_operand:V4SI 0 "s_register_operand" "w")
7612*0bfacb9bSmrg		 (match_operand:SI 1 "immediate_operand" "i")
7613*0bfacb9bSmrg		 (match_operand:V4SI 2 "s_register_operand" "w")
7614*0bfacb9bSmrg		 (match_operand:HI 3 "vpr_register_operand" "Up")]
7615*0bfacb9bSmrg	 VSTRWSBQ))
7616*0bfacb9bSmrg  ]
7617*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7618*0bfacb9bSmrg{
7619*0bfacb9bSmrg   rtx ops[3];
7620*0bfacb9bSmrg   ops[0] = operands[0];
7621*0bfacb9bSmrg   ops[1] = operands[1];
7622*0bfacb9bSmrg   ops[2] = operands[2];
7623*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
7624*0bfacb9bSmrg   return "";
7625*0bfacb9bSmrg}
7626*0bfacb9bSmrg  [(set_attr "length" "8")])
7627*0bfacb9bSmrg
7628*0bfacb9bSmrg;;
7629*0bfacb9bSmrg;; [vstrbq_p_s vstrbq_p_u]
7630*0bfacb9bSmrg;;
7631*0bfacb9bSmrg(define_insn "mve_vstrbq_p_<supf><mode>"
7632*0bfacb9bSmrg  [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
7633*0bfacb9bSmrg	(unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
7634*0bfacb9bSmrg			      (match_operand:HI 2 "vpr_register_operand" "Up")]
7635*0bfacb9bSmrg	 VSTRBQ))
7636*0bfacb9bSmrg  ]
7637*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7638*0bfacb9bSmrg{
7639*0bfacb9bSmrg   rtx ops[2];
7640*0bfacb9bSmrg   int regno = REGNO (operands[1]);
7641*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno);
7642*0bfacb9bSmrg   ops[0]  = operands[0];
7643*0bfacb9bSmrg   output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops);
7644*0bfacb9bSmrg   return "";
7645*0bfacb9bSmrg}
7646*0bfacb9bSmrg  [(set_attr "length" "8")])
7647*0bfacb9bSmrg
7648*0bfacb9bSmrg;;
7649*0bfacb9bSmrg;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
7650*0bfacb9bSmrg;;
7651*0bfacb9bSmrg(define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
7652*0bfacb9bSmrg  [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7653*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7654*0bfacb9bSmrg		       (match_operand:MVE_2 2 "s_register_operand" "w")
7655*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")]
7656*0bfacb9bSmrg	 VLDRBGOQ))
7657*0bfacb9bSmrg  ]
7658*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7659*0bfacb9bSmrg{
7660*0bfacb9bSmrg   rtx ops[4];
7661*0bfacb9bSmrg   ops[0] = operands[0];
7662*0bfacb9bSmrg   ops[1] = operands[1];
7663*0bfacb9bSmrg   ops[2] = operands[2];
7664*0bfacb9bSmrg   ops[3] = operands[3];
7665*0bfacb9bSmrg   if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7666*0bfacb9bSmrg     output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
7667*0bfacb9bSmrg   else
7668*0bfacb9bSmrg     output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7669*0bfacb9bSmrg   return "";
7670*0bfacb9bSmrg}
7671*0bfacb9bSmrg  [(set_attr "length" "8")])
7672*0bfacb9bSmrg
7673*0bfacb9bSmrg;;
7674*0bfacb9bSmrg;; [vldrbq_z_s vldrbq_z_u]
7675*0bfacb9bSmrg;;
7676*0bfacb9bSmrg(define_insn "mve_vldrbq_z_<supf><mode>"
7677*0bfacb9bSmrg  [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
7678*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")
7679*0bfacb9bSmrg		       (match_operand:HI 2 "vpr_register_operand" "Up")]
7680*0bfacb9bSmrg	 VLDRBQ))
7681*0bfacb9bSmrg  ]
7682*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7683*0bfacb9bSmrg{
7684*0bfacb9bSmrg   rtx ops[2];
7685*0bfacb9bSmrg   int regno = REGNO (operands[0]);
7686*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
7687*0bfacb9bSmrg   ops[1]  = operands[1];
7688*0bfacb9bSmrg   if (<V_sz_elem> == 8)
7689*0bfacb9bSmrg     output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops);
7690*0bfacb9bSmrg   else
7691*0bfacb9bSmrg     output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
7692*0bfacb9bSmrg   return "";
7693*0bfacb9bSmrg}
7694*0bfacb9bSmrg  [(set_attr "length" "8")])
7695*0bfacb9bSmrg
7696*0bfacb9bSmrg;;
7697*0bfacb9bSmrg;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
7698*0bfacb9bSmrg;;
7699*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
7700*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7701*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7702*0bfacb9bSmrg		      (match_operand:SI 2 "immediate_operand" "i")
7703*0bfacb9bSmrg		      (match_operand:HI 3 "vpr_register_operand" "Up")]
7704*0bfacb9bSmrg	 VLDRWGBQ))
7705*0bfacb9bSmrg  ]
7706*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7707*0bfacb9bSmrg{
7708*0bfacb9bSmrg   rtx ops[3];
7709*0bfacb9bSmrg   ops[0] = operands[0];
7710*0bfacb9bSmrg   ops[1] = operands[1];
7711*0bfacb9bSmrg   ops[2] = operands[2];
7712*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7713*0bfacb9bSmrg   return "";
7714*0bfacb9bSmrg}
7715*0bfacb9bSmrg  [(set_attr "length" "8")])
7716*0bfacb9bSmrg
7717*0bfacb9bSmrg;;
7718*0bfacb9bSmrg;; [vldrhq_f]
7719*0bfacb9bSmrg;;
7720*0bfacb9bSmrg(define_insn "mve_vldrhq_fv8hf"
7721*0bfacb9bSmrg  [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7722*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")]
7723*0bfacb9bSmrg	 VLDRHQ_F))
7724*0bfacb9bSmrg  ]
7725*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7726*0bfacb9bSmrg{
7727*0bfacb9bSmrg   rtx ops[2];
7728*0bfacb9bSmrg   int regno = REGNO (operands[0]);
7729*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
7730*0bfacb9bSmrg   ops[1]  = operands[1];
7731*0bfacb9bSmrg   output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7732*0bfacb9bSmrg   return "";
7733*0bfacb9bSmrg}
7734*0bfacb9bSmrg  [(set_attr "length" "4")])
7735*0bfacb9bSmrg
7736*0bfacb9bSmrg;;
7737*0bfacb9bSmrg;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
7738*0bfacb9bSmrg;;
7739*0bfacb9bSmrg(define_insn "mve_vldrhq_gather_offset_<supf><mode>"
7740*0bfacb9bSmrg  [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7741*0bfacb9bSmrg	(unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7742*0bfacb9bSmrg		       (match_operand:MVE_6 2 "s_register_operand" "w")]
7743*0bfacb9bSmrg	VLDRHGOQ))
7744*0bfacb9bSmrg  ]
7745*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7746*0bfacb9bSmrg{
7747*0bfacb9bSmrg   rtx ops[3];
7748*0bfacb9bSmrg   ops[0] = operands[0];
7749*0bfacb9bSmrg   ops[1] = operands[1];
7750*0bfacb9bSmrg   ops[2] = operands[2];
7751*0bfacb9bSmrg   if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7752*0bfacb9bSmrg     output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
7753*0bfacb9bSmrg   else
7754*0bfacb9bSmrg     output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7755*0bfacb9bSmrg   return "";
7756*0bfacb9bSmrg}
7757*0bfacb9bSmrg  [(set_attr "length" "4")])
7758*0bfacb9bSmrg
7759*0bfacb9bSmrg;;
7760*0bfacb9bSmrg;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
7761*0bfacb9bSmrg;;
7762*0bfacb9bSmrg(define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
7763*0bfacb9bSmrg  [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7764*0bfacb9bSmrg	(unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7765*0bfacb9bSmrg		       (match_operand:MVE_6 2 "s_register_operand" "w")
7766*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")
7767*0bfacb9bSmrg	]VLDRHGOQ))
7768*0bfacb9bSmrg  ]
7769*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7770*0bfacb9bSmrg{
7771*0bfacb9bSmrg   rtx ops[4];
7772*0bfacb9bSmrg   ops[0] = operands[0];
7773*0bfacb9bSmrg   ops[1] = operands[1];
7774*0bfacb9bSmrg   ops[2] = operands[2];
7775*0bfacb9bSmrg   ops[3] = operands[3];
7776*0bfacb9bSmrg   if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7777*0bfacb9bSmrg     output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
7778*0bfacb9bSmrg   else
7779*0bfacb9bSmrg     output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7780*0bfacb9bSmrg   return "";
7781*0bfacb9bSmrg}
7782*0bfacb9bSmrg [(set_attr "length" "8")])
7783*0bfacb9bSmrg
7784*0bfacb9bSmrg;;
7785*0bfacb9bSmrg;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
7786*0bfacb9bSmrg;;
7787*0bfacb9bSmrg(define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
7788*0bfacb9bSmrg  [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7789*0bfacb9bSmrg	(unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7790*0bfacb9bSmrg		       (match_operand:MVE_6 2 "s_register_operand" "w")]
7791*0bfacb9bSmrg	VLDRHGSOQ))
7792*0bfacb9bSmrg  ]
7793*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7794*0bfacb9bSmrg{
7795*0bfacb9bSmrg   rtx ops[3];
7796*0bfacb9bSmrg   ops[0] = operands[0];
7797*0bfacb9bSmrg   ops[1] = operands[1];
7798*0bfacb9bSmrg   ops[2] = operands[2];
7799*0bfacb9bSmrg      if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7800*0bfacb9bSmrg     output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7801*0bfacb9bSmrg   else
7802*0bfacb9bSmrg     output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7803*0bfacb9bSmrg   return "";
7804*0bfacb9bSmrg}
7805*0bfacb9bSmrg  [(set_attr "length" "4")])
7806*0bfacb9bSmrg
7807*0bfacb9bSmrg;;
7808*0bfacb9bSmrg;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
7809*0bfacb9bSmrg;;
7810*0bfacb9bSmrg(define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
7811*0bfacb9bSmrg  [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7812*0bfacb9bSmrg	(unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7813*0bfacb9bSmrg		       (match_operand:MVE_6 2 "s_register_operand" "w")
7814*0bfacb9bSmrg		       (match_operand:HI 3 "vpr_register_operand" "Up")
7815*0bfacb9bSmrg	]VLDRHGSOQ))
7816*0bfacb9bSmrg  ]
7817*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7818*0bfacb9bSmrg{
7819*0bfacb9bSmrg   rtx ops[4];
7820*0bfacb9bSmrg   ops[0] = operands[0];
7821*0bfacb9bSmrg   ops[1] = operands[1];
7822*0bfacb9bSmrg   ops[2] = operands[2];
7823*0bfacb9bSmrg   ops[3] = operands[3];
7824*0bfacb9bSmrg   if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7825*0bfacb9bSmrg     output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7826*0bfacb9bSmrg   else
7827*0bfacb9bSmrg     output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7828*0bfacb9bSmrg   return "";
7829*0bfacb9bSmrg}
7830*0bfacb9bSmrg  [(set_attr "length" "8")])
7831*0bfacb9bSmrg
7832*0bfacb9bSmrg;;
7833*0bfacb9bSmrg;; [vldrhq_s, vldrhq_u]
7834*0bfacb9bSmrg;;
7835*0bfacb9bSmrg(define_insn "mve_vldrhq_<supf><mode>"
7836*0bfacb9bSmrg  [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7837*0bfacb9bSmrg	(unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")]
7838*0bfacb9bSmrg	 VLDRHQ))
7839*0bfacb9bSmrg  ]
7840*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7841*0bfacb9bSmrg{
7842*0bfacb9bSmrg   rtx ops[2];
7843*0bfacb9bSmrg   int regno = REGNO (operands[0]);
7844*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
7845*0bfacb9bSmrg   ops[1]  = operands[1];
7846*0bfacb9bSmrg   if (<V_sz_elem> == 16)
7847*0bfacb9bSmrg     output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7848*0bfacb9bSmrg   else
7849*0bfacb9bSmrg     output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
7850*0bfacb9bSmrg   return "";
7851*0bfacb9bSmrg}
7852*0bfacb9bSmrg  [(set_attr "length" "4")])
7853*0bfacb9bSmrg
7854*0bfacb9bSmrg;;
7855*0bfacb9bSmrg;; [vldrhq_z_f]
7856*0bfacb9bSmrg;;
7857*0bfacb9bSmrg(define_insn "mve_vldrhq_z_fv8hf"
7858*0bfacb9bSmrg  [(set (match_operand:V8HF 0 "s_register_operand" "=w")
7859*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")
7860*0bfacb9bSmrg	(match_operand:HI 2 "vpr_register_operand" "Up")]
7861*0bfacb9bSmrg	 VLDRHQ_F))
7862*0bfacb9bSmrg  ]
7863*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7864*0bfacb9bSmrg{
7865*0bfacb9bSmrg   rtx ops[2];
7866*0bfacb9bSmrg   int regno = REGNO (operands[0]);
7867*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
7868*0bfacb9bSmrg   ops[1]  = operands[1];
7869*0bfacb9bSmrg   output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7870*0bfacb9bSmrg   return "";
7871*0bfacb9bSmrg}
7872*0bfacb9bSmrg  [(set_attr "length" "8")])
7873*0bfacb9bSmrg
7874*0bfacb9bSmrg;;
7875*0bfacb9bSmrg;; [vldrhq_z_s vldrhq_z_u]
7876*0bfacb9bSmrg;;
7877*0bfacb9bSmrg(define_insn "mve_vldrhq_z_<supf><mode>"
7878*0bfacb9bSmrg  [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
7879*0bfacb9bSmrg	(unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")
7880*0bfacb9bSmrg	(match_operand:HI 2 "vpr_register_operand" "Up")]
7881*0bfacb9bSmrg	 VLDRHQ))
7882*0bfacb9bSmrg  ]
7883*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7884*0bfacb9bSmrg{
7885*0bfacb9bSmrg   rtx ops[2];
7886*0bfacb9bSmrg   int regno = REGNO (operands[0]);
7887*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
7888*0bfacb9bSmrg   ops[1]  = operands[1];
7889*0bfacb9bSmrg   if (<V_sz_elem> == 16)
7890*0bfacb9bSmrg     output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7891*0bfacb9bSmrg   else
7892*0bfacb9bSmrg     output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
7893*0bfacb9bSmrg   return "";
7894*0bfacb9bSmrg}
7895*0bfacb9bSmrg  [(set_attr "length" "8")])
7896*0bfacb9bSmrg
7897*0bfacb9bSmrg;;
7898*0bfacb9bSmrg;; [vldrwq_f]
7899*0bfacb9bSmrg;;
7900*0bfacb9bSmrg(define_insn "mve_vldrwq_fv4sf"
7901*0bfacb9bSmrg  [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7902*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")]
7903*0bfacb9bSmrg	 VLDRWQ_F))
7904*0bfacb9bSmrg  ]
7905*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7906*0bfacb9bSmrg{
7907*0bfacb9bSmrg   rtx ops[2];
7908*0bfacb9bSmrg   int regno = REGNO (operands[0]);
7909*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
7910*0bfacb9bSmrg   ops[1]  = operands[1];
7911*0bfacb9bSmrg   output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7912*0bfacb9bSmrg   return "";
7913*0bfacb9bSmrg}
7914*0bfacb9bSmrg  [(set_attr "length" "4")])
7915*0bfacb9bSmrg
7916*0bfacb9bSmrg;;
7917*0bfacb9bSmrg;; [vldrwq_s vldrwq_u]
7918*0bfacb9bSmrg;;
7919*0bfacb9bSmrg(define_insn "mve_vldrwq_<supf>v4si"
7920*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7921*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")]
7922*0bfacb9bSmrg	 VLDRWQ))
7923*0bfacb9bSmrg  ]
7924*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7925*0bfacb9bSmrg{
7926*0bfacb9bSmrg   rtx ops[2];
7927*0bfacb9bSmrg   int regno = REGNO (operands[0]);
7928*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
7929*0bfacb9bSmrg   ops[1]  = operands[1];
7930*0bfacb9bSmrg   output_asm_insn ("vldrw.32\t%q0, %E1",ops);
7931*0bfacb9bSmrg   return "";
7932*0bfacb9bSmrg}
7933*0bfacb9bSmrg  [(set_attr "length" "4")])
7934*0bfacb9bSmrg
7935*0bfacb9bSmrg;;
7936*0bfacb9bSmrg;; [vldrwq_z_f]
7937*0bfacb9bSmrg;;
7938*0bfacb9bSmrg(define_insn "mve_vldrwq_z_fv4sf"
7939*0bfacb9bSmrg  [(set (match_operand:V4SF 0 "s_register_operand" "=w")
7940*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")
7941*0bfacb9bSmrg	(match_operand:HI 2 "vpr_register_operand" "Up")]
7942*0bfacb9bSmrg	 VLDRWQ_F))
7943*0bfacb9bSmrg  ]
7944*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7945*0bfacb9bSmrg{
7946*0bfacb9bSmrg   rtx ops[2];
7947*0bfacb9bSmrg   int regno = REGNO (operands[0]);
7948*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
7949*0bfacb9bSmrg   ops[1]  = operands[1];
7950*0bfacb9bSmrg   output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7951*0bfacb9bSmrg   return "";
7952*0bfacb9bSmrg}
7953*0bfacb9bSmrg  [(set_attr "length" "8")])
7954*0bfacb9bSmrg
7955*0bfacb9bSmrg;;
7956*0bfacb9bSmrg;; [vldrwq_z_s vldrwq_z_u]
7957*0bfacb9bSmrg;;
7958*0bfacb9bSmrg(define_insn "mve_vldrwq_z_<supf>v4si"
7959*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=w")
7960*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")
7961*0bfacb9bSmrg	(match_operand:HI 2 "vpr_register_operand" "Up")]
7962*0bfacb9bSmrg	 VLDRWQ))
7963*0bfacb9bSmrg  ]
7964*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7965*0bfacb9bSmrg{
7966*0bfacb9bSmrg   rtx ops[2];
7967*0bfacb9bSmrg   int regno = REGNO (operands[0]);
7968*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
7969*0bfacb9bSmrg   ops[1]  = operands[1];
7970*0bfacb9bSmrg   output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
7971*0bfacb9bSmrg   return "";
7972*0bfacb9bSmrg}
7973*0bfacb9bSmrg  [(set_attr "length" "8")])
7974*0bfacb9bSmrg
7975*0bfacb9bSmrg(define_expand "mve_vld1q_f<mode>"
7976*0bfacb9bSmrg  [(match_operand:MVE_0 0 "s_register_operand")
7977*0bfacb9bSmrg   (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F)
7978*0bfacb9bSmrg  ]
7979*0bfacb9bSmrg  "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
7980*0bfacb9bSmrg{
7981*0bfacb9bSmrg  emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
7982*0bfacb9bSmrg  DONE;
7983*0bfacb9bSmrg})
7984*0bfacb9bSmrg
7985*0bfacb9bSmrg(define_expand "mve_vld1q_<supf><mode>"
7986*0bfacb9bSmrg  [(match_operand:MVE_2 0 "s_register_operand")
7987*0bfacb9bSmrg   (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q)
7988*0bfacb9bSmrg  ]
7989*0bfacb9bSmrg  "TARGET_HAVE_MVE"
7990*0bfacb9bSmrg{
7991*0bfacb9bSmrg  emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
7992*0bfacb9bSmrg  DONE;
7993*0bfacb9bSmrg})
7994*0bfacb9bSmrg
7995*0bfacb9bSmrg;;
7996*0bfacb9bSmrg;; [vldrdq_gather_base_s vldrdq_gather_base_u]
7997*0bfacb9bSmrg;;
7998*0bfacb9bSmrg(define_insn "mve_vldrdq_gather_base_<supf>v2di"
7999*0bfacb9bSmrg  [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8000*0bfacb9bSmrg	(unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8001*0bfacb9bSmrg		      (match_operand:SI 2 "immediate_operand" "i")]
8002*0bfacb9bSmrg	 VLDRDGBQ))
8003*0bfacb9bSmrg  ]
8004*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8005*0bfacb9bSmrg{
8006*0bfacb9bSmrg   rtx ops[3];
8007*0bfacb9bSmrg   ops[0] = operands[0];
8008*0bfacb9bSmrg   ops[1] = operands[1];
8009*0bfacb9bSmrg   ops[2] = operands[2];
8010*0bfacb9bSmrg   output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
8011*0bfacb9bSmrg   return "";
8012*0bfacb9bSmrg}
8013*0bfacb9bSmrg  [(set_attr "length" "4")])
8014*0bfacb9bSmrg
8015*0bfacb9bSmrg;;
8016*0bfacb9bSmrg;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
8017*0bfacb9bSmrg;;
8018*0bfacb9bSmrg(define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
8019*0bfacb9bSmrg  [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8020*0bfacb9bSmrg	(unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8021*0bfacb9bSmrg		      (match_operand:SI 2 "immediate_operand" "i")
8022*0bfacb9bSmrg		      (match_operand:HI 3 "vpr_register_operand" "Up")]
8023*0bfacb9bSmrg	 VLDRDGBQ))
8024*0bfacb9bSmrg  ]
8025*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8026*0bfacb9bSmrg{
8027*0bfacb9bSmrg   rtx ops[3];
8028*0bfacb9bSmrg   ops[0] = operands[0];
8029*0bfacb9bSmrg   ops[1] = operands[1];
8030*0bfacb9bSmrg   ops[2] = operands[2];
8031*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
8032*0bfacb9bSmrg   return "";
8033*0bfacb9bSmrg}
8034*0bfacb9bSmrg  [(set_attr "length" "8")])
8035*0bfacb9bSmrg
8036*0bfacb9bSmrg;;
8037*0bfacb9bSmrg;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
8038*0bfacb9bSmrg;;
8039*0bfacb9bSmrg(define_insn "mve_vldrdq_gather_offset_<supf>v2di"
8040*0bfacb9bSmrg [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8041*0bfacb9bSmrg       (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8042*0bfacb9bSmrg		     (match_operand:V2DI 2 "s_register_operand" "w")]
8043*0bfacb9bSmrg	VLDRDGOQ))
8044*0bfacb9bSmrg ]
8045*0bfacb9bSmrg "TARGET_HAVE_MVE"
8046*0bfacb9bSmrg{
8047*0bfacb9bSmrg  rtx ops[3];
8048*0bfacb9bSmrg  ops[0] = operands[0];
8049*0bfacb9bSmrg  ops[1] = operands[1];
8050*0bfacb9bSmrg  ops[2] = operands[2];
8051*0bfacb9bSmrg  output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
8052*0bfacb9bSmrg  return "";
8053*0bfacb9bSmrg}
8054*0bfacb9bSmrg [(set_attr "length" "4")])
8055*0bfacb9bSmrg
8056*0bfacb9bSmrg;;
8057*0bfacb9bSmrg;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
8058*0bfacb9bSmrg;;
8059*0bfacb9bSmrg(define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
8060*0bfacb9bSmrg [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8061*0bfacb9bSmrg       (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8062*0bfacb9bSmrg		     (match_operand:V2DI 2 "s_register_operand" "w")
8063*0bfacb9bSmrg		     (match_operand:HI 3 "vpr_register_operand" "Up")]
8064*0bfacb9bSmrg	VLDRDGOQ))
8065*0bfacb9bSmrg ]
8066*0bfacb9bSmrg "TARGET_HAVE_MVE"
8067*0bfacb9bSmrg{
8068*0bfacb9bSmrg  rtx ops[3];
8069*0bfacb9bSmrg  ops[0] = operands[0];
8070*0bfacb9bSmrg  ops[1] = operands[1];
8071*0bfacb9bSmrg  ops[2] = operands[2];
8072*0bfacb9bSmrg  output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
8073*0bfacb9bSmrg  return "";
8074*0bfacb9bSmrg}
8075*0bfacb9bSmrg [(set_attr "length" "8")])
8076*0bfacb9bSmrg
8077*0bfacb9bSmrg;;
8078*0bfacb9bSmrg;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
8079*0bfacb9bSmrg;;
8080*0bfacb9bSmrg(define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
8081*0bfacb9bSmrg  [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8082*0bfacb9bSmrg	(unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8083*0bfacb9bSmrg		      (match_operand:V2DI 2 "s_register_operand" "w")]
8084*0bfacb9bSmrg	 VLDRDGSOQ))
8085*0bfacb9bSmrg  ]
8086*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8087*0bfacb9bSmrg{
8088*0bfacb9bSmrg   rtx ops[3];
8089*0bfacb9bSmrg   ops[0] = operands[0];
8090*0bfacb9bSmrg   ops[1] = operands[1];
8091*0bfacb9bSmrg   ops[2] = operands[2];
8092*0bfacb9bSmrg   output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8093*0bfacb9bSmrg   return "";
8094*0bfacb9bSmrg}
8095*0bfacb9bSmrg  [(set_attr "length" "4")])
8096*0bfacb9bSmrg
8097*0bfacb9bSmrg;;
8098*0bfacb9bSmrg;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
8099*0bfacb9bSmrg;;
8100*0bfacb9bSmrg(define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
8101*0bfacb9bSmrg  [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8102*0bfacb9bSmrg	(unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8103*0bfacb9bSmrg		      (match_operand:V2DI 2 "s_register_operand" "w")
8104*0bfacb9bSmrg		      (match_operand:HI 3 "vpr_register_operand" "Up")]
8105*0bfacb9bSmrg	 VLDRDGSOQ))
8106*0bfacb9bSmrg  ]
8107*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8108*0bfacb9bSmrg{
8109*0bfacb9bSmrg   rtx ops[3];
8110*0bfacb9bSmrg   ops[0] = operands[0];
8111*0bfacb9bSmrg   ops[1] = operands[1];
8112*0bfacb9bSmrg   ops[2] = operands[2];
8113*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8114*0bfacb9bSmrg   return "";
8115*0bfacb9bSmrg}
8116*0bfacb9bSmrg  [(set_attr "length" "8")])
8117*0bfacb9bSmrg
8118*0bfacb9bSmrg;;
8119*0bfacb9bSmrg;; [vldrhq_gather_offset_f]
8120*0bfacb9bSmrg;;
8121*0bfacb9bSmrg(define_insn "mve_vldrhq_gather_offset_fv8hf"
8122*0bfacb9bSmrg  [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8123*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8124*0bfacb9bSmrg		      (match_operand:V8HI 2 "s_register_operand" "w")]
8125*0bfacb9bSmrg	 VLDRHQGO_F))
8126*0bfacb9bSmrg  ]
8127*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8128*0bfacb9bSmrg{
8129*0bfacb9bSmrg   rtx ops[3];
8130*0bfacb9bSmrg   ops[0] = operands[0];
8131*0bfacb9bSmrg   ops[1] = operands[1];
8132*0bfacb9bSmrg   ops[2] = operands[2];
8133*0bfacb9bSmrg   output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
8134*0bfacb9bSmrg   return "";
8135*0bfacb9bSmrg}
8136*0bfacb9bSmrg  [(set_attr "length" "4")])
8137*0bfacb9bSmrg
8138*0bfacb9bSmrg;;
8139*0bfacb9bSmrg;; [vldrhq_gather_offset_z_f]
8140*0bfacb9bSmrg;;
8141*0bfacb9bSmrg(define_insn "mve_vldrhq_gather_offset_z_fv8hf"
8142*0bfacb9bSmrg  [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8143*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8144*0bfacb9bSmrg		      (match_operand:V8HI 2 "s_register_operand" "w")
8145*0bfacb9bSmrg		      (match_operand:HI 3 "vpr_register_operand" "Up")]
8146*0bfacb9bSmrg	 VLDRHQGO_F))
8147*0bfacb9bSmrg  ]
8148*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8149*0bfacb9bSmrg{
8150*0bfacb9bSmrg   rtx ops[4];
8151*0bfacb9bSmrg   ops[0] = operands[0];
8152*0bfacb9bSmrg   ops[1] = operands[1];
8153*0bfacb9bSmrg   ops[2] = operands[2];
8154*0bfacb9bSmrg   ops[3] = operands[3];
8155*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
8156*0bfacb9bSmrg   return "";
8157*0bfacb9bSmrg}
8158*0bfacb9bSmrg  [(set_attr "length" "8")])
8159*0bfacb9bSmrg
8160*0bfacb9bSmrg;;
8161*0bfacb9bSmrg;; [vldrhq_gather_shifted_offset_f]
8162*0bfacb9bSmrg;;
8163*0bfacb9bSmrg(define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
8164*0bfacb9bSmrg  [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8165*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8166*0bfacb9bSmrg		      (match_operand:V8HI 2 "s_register_operand" "w")]
8167*0bfacb9bSmrg	 VLDRHQGSO_F))
8168*0bfacb9bSmrg  ]
8169*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8170*0bfacb9bSmrg{
8171*0bfacb9bSmrg   rtx ops[3];
8172*0bfacb9bSmrg   ops[0] = operands[0];
8173*0bfacb9bSmrg   ops[1] = operands[1];
8174*0bfacb9bSmrg   ops[2] = operands[2];
8175*0bfacb9bSmrg   output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8176*0bfacb9bSmrg   return "";
8177*0bfacb9bSmrg}
8178*0bfacb9bSmrg  [(set_attr "length" "4")])
8179*0bfacb9bSmrg
8180*0bfacb9bSmrg;;
8181*0bfacb9bSmrg;; [vldrhq_gather_shifted_offset_z_f]
8182*0bfacb9bSmrg;;
8183*0bfacb9bSmrg(define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
8184*0bfacb9bSmrg  [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8185*0bfacb9bSmrg	(unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8186*0bfacb9bSmrg		      (match_operand:V8HI 2 "s_register_operand" "w")
8187*0bfacb9bSmrg		      (match_operand:HI 3 "vpr_register_operand" "Up")]
8188*0bfacb9bSmrg	 VLDRHQGSO_F))
8189*0bfacb9bSmrg  ]
8190*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8191*0bfacb9bSmrg{
8192*0bfacb9bSmrg   rtx ops[4];
8193*0bfacb9bSmrg   ops[0] = operands[0];
8194*0bfacb9bSmrg   ops[1] = operands[1];
8195*0bfacb9bSmrg   ops[2] = operands[2];
8196*0bfacb9bSmrg   ops[3] = operands[3];
8197*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8198*0bfacb9bSmrg   return "";
8199*0bfacb9bSmrg}
8200*0bfacb9bSmrg  [(set_attr "length" "8")])
8201*0bfacb9bSmrg
8202*0bfacb9bSmrg;;
8203*0bfacb9bSmrg;; [vldrwq_gather_base_f]
8204*0bfacb9bSmrg;;
8205*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_base_fv4sf"
8206*0bfacb9bSmrg  [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8207*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8208*0bfacb9bSmrg		      (match_operand:SI 2 "immediate_operand" "i")]
8209*0bfacb9bSmrg	 VLDRWQGB_F))
8210*0bfacb9bSmrg  ]
8211*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8212*0bfacb9bSmrg{
8213*0bfacb9bSmrg   rtx ops[3];
8214*0bfacb9bSmrg   ops[0] = operands[0];
8215*0bfacb9bSmrg   ops[1] = operands[1];
8216*0bfacb9bSmrg   ops[2] = operands[2];
8217*0bfacb9bSmrg   output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
8218*0bfacb9bSmrg   return "";
8219*0bfacb9bSmrg}
8220*0bfacb9bSmrg  [(set_attr "length" "4")])
8221*0bfacb9bSmrg
8222*0bfacb9bSmrg;;
8223*0bfacb9bSmrg;; [vldrwq_gather_base_z_f]
8224*0bfacb9bSmrg;;
8225*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_base_z_fv4sf"
8226*0bfacb9bSmrg  [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8227*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8228*0bfacb9bSmrg		      (match_operand:SI 2 "immediate_operand" "i")
8229*0bfacb9bSmrg		      (match_operand:HI 3 "vpr_register_operand" "Up")]
8230*0bfacb9bSmrg	 VLDRWQGB_F))
8231*0bfacb9bSmrg  ]
8232*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8233*0bfacb9bSmrg{
8234*0bfacb9bSmrg   rtx ops[3];
8235*0bfacb9bSmrg   ops[0] = operands[0];
8236*0bfacb9bSmrg   ops[1] = operands[1];
8237*0bfacb9bSmrg   ops[2] = operands[2];
8238*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
8239*0bfacb9bSmrg   return "";
8240*0bfacb9bSmrg}
8241*0bfacb9bSmrg  [(set_attr "length" "8")])
8242*0bfacb9bSmrg
8243*0bfacb9bSmrg;;
8244*0bfacb9bSmrg;; [vldrwq_gather_offset_f]
8245*0bfacb9bSmrg;;
8246*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_offset_fv4sf"
8247*0bfacb9bSmrg  [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8248*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8249*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")]
8250*0bfacb9bSmrg	 VLDRWQGO_F))
8251*0bfacb9bSmrg  ]
8252*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8253*0bfacb9bSmrg{
8254*0bfacb9bSmrg   rtx ops[3];
8255*0bfacb9bSmrg   ops[0] = operands[0];
8256*0bfacb9bSmrg   ops[1] = operands[1];
8257*0bfacb9bSmrg   ops[2] = operands[2];
8258*0bfacb9bSmrg   output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8259*0bfacb9bSmrg   return "";
8260*0bfacb9bSmrg}
8261*0bfacb9bSmrg  [(set_attr "length" "4")])
8262*0bfacb9bSmrg
8263*0bfacb9bSmrg;;
8264*0bfacb9bSmrg;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
8265*0bfacb9bSmrg;;
8266*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_offset_<supf>v4si"
8267*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8268*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8269*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")]
8270*0bfacb9bSmrg	 VLDRWGOQ))
8271*0bfacb9bSmrg  ]
8272*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8273*0bfacb9bSmrg{
8274*0bfacb9bSmrg   rtx ops[3];
8275*0bfacb9bSmrg   ops[0] = operands[0];
8276*0bfacb9bSmrg   ops[1] = operands[1];
8277*0bfacb9bSmrg   ops[2] = operands[2];
8278*0bfacb9bSmrg   output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8279*0bfacb9bSmrg   return "";
8280*0bfacb9bSmrg}
8281*0bfacb9bSmrg  [(set_attr "length" "4")])
8282*0bfacb9bSmrg
8283*0bfacb9bSmrg;;
8284*0bfacb9bSmrg;; [vldrwq_gather_offset_z_f]
8285*0bfacb9bSmrg;;
8286*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_offset_z_fv4sf"
8287*0bfacb9bSmrg  [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8288*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8289*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")
8290*0bfacb9bSmrg		      (match_operand:HI 3 "vpr_register_operand" "Up")]
8291*0bfacb9bSmrg	 VLDRWQGO_F))
8292*0bfacb9bSmrg  ]
8293*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8294*0bfacb9bSmrg{
8295*0bfacb9bSmrg   rtx ops[4];
8296*0bfacb9bSmrg   ops[0] = operands[0];
8297*0bfacb9bSmrg   ops[1] = operands[1];
8298*0bfacb9bSmrg   ops[2] = operands[2];
8299*0bfacb9bSmrg   ops[3] = operands[3];
8300*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8301*0bfacb9bSmrg   return "";
8302*0bfacb9bSmrg}
8303*0bfacb9bSmrg  [(set_attr "length" "8")])
8304*0bfacb9bSmrg
8305*0bfacb9bSmrg;;
8306*0bfacb9bSmrg;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
8307*0bfacb9bSmrg;;
8308*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
8309*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8310*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8311*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")
8312*0bfacb9bSmrg		      (match_operand:HI 3 "vpr_register_operand" "Up")]
8313*0bfacb9bSmrg	 VLDRWGOQ))
8314*0bfacb9bSmrg  ]
8315*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8316*0bfacb9bSmrg{
8317*0bfacb9bSmrg   rtx ops[4];
8318*0bfacb9bSmrg   ops[0] = operands[0];
8319*0bfacb9bSmrg   ops[1] = operands[1];
8320*0bfacb9bSmrg   ops[2] = operands[2];
8321*0bfacb9bSmrg   ops[3] = operands[3];
8322*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8323*0bfacb9bSmrg   return "";
8324*0bfacb9bSmrg}
8325*0bfacb9bSmrg  [(set_attr "length" "8")])
8326*0bfacb9bSmrg
8327*0bfacb9bSmrg;;
8328*0bfacb9bSmrg;; [vldrwq_gather_shifted_offset_f]
8329*0bfacb9bSmrg;;
8330*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
8331*0bfacb9bSmrg  [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8332*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8333*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")]
8334*0bfacb9bSmrg	 VLDRWQGSO_F))
8335*0bfacb9bSmrg  ]
8336*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8337*0bfacb9bSmrg{
8338*0bfacb9bSmrg   rtx ops[3];
8339*0bfacb9bSmrg   ops[0] = operands[0];
8340*0bfacb9bSmrg   ops[1] = operands[1];
8341*0bfacb9bSmrg   ops[2] = operands[2];
8342*0bfacb9bSmrg   output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8343*0bfacb9bSmrg   return "";
8344*0bfacb9bSmrg}
8345*0bfacb9bSmrg  [(set_attr "length" "4")])
8346*0bfacb9bSmrg
8347*0bfacb9bSmrg;;
8348*0bfacb9bSmrg;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
8349*0bfacb9bSmrg;;
8350*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
8351*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8352*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8353*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")]
8354*0bfacb9bSmrg	 VLDRWGSOQ))
8355*0bfacb9bSmrg  ]
8356*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8357*0bfacb9bSmrg{
8358*0bfacb9bSmrg   rtx ops[3];
8359*0bfacb9bSmrg   ops[0] = operands[0];
8360*0bfacb9bSmrg   ops[1] = operands[1];
8361*0bfacb9bSmrg   ops[2] = operands[2];
8362*0bfacb9bSmrg   output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8363*0bfacb9bSmrg   return "";
8364*0bfacb9bSmrg}
8365*0bfacb9bSmrg  [(set_attr "length" "4")])
8366*0bfacb9bSmrg
8367*0bfacb9bSmrg;;
8368*0bfacb9bSmrg;; [vldrwq_gather_shifted_offset_z_f]
8369*0bfacb9bSmrg;;
8370*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
8371*0bfacb9bSmrg  [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8372*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8373*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")
8374*0bfacb9bSmrg		      (match_operand:HI 3 "vpr_register_operand" "Up")]
8375*0bfacb9bSmrg	 VLDRWQGSO_F))
8376*0bfacb9bSmrg  ]
8377*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8378*0bfacb9bSmrg{
8379*0bfacb9bSmrg   rtx ops[4];
8380*0bfacb9bSmrg   ops[0] = operands[0];
8381*0bfacb9bSmrg   ops[1] = operands[1];
8382*0bfacb9bSmrg   ops[2] = operands[2];
8383*0bfacb9bSmrg   ops[3] = operands[3];
8384*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8385*0bfacb9bSmrg   return "";
8386*0bfacb9bSmrg}
8387*0bfacb9bSmrg  [(set_attr "length" "8")])
8388*0bfacb9bSmrg
8389*0bfacb9bSmrg;;
8390*0bfacb9bSmrg;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
8391*0bfacb9bSmrg;;
8392*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
8393*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8394*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8395*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")
8396*0bfacb9bSmrg		      (match_operand:HI 3 "vpr_register_operand" "Up")]
8397*0bfacb9bSmrg	 VLDRWGSOQ))
8398*0bfacb9bSmrg  ]
8399*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8400*0bfacb9bSmrg{
8401*0bfacb9bSmrg   rtx ops[4];
8402*0bfacb9bSmrg   ops[0] = operands[0];
8403*0bfacb9bSmrg   ops[1] = operands[1];
8404*0bfacb9bSmrg   ops[2] = operands[2];
8405*0bfacb9bSmrg   ops[3] = operands[3];
8406*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8407*0bfacb9bSmrg   return "";
8408*0bfacb9bSmrg}
8409*0bfacb9bSmrg  [(set_attr "length" "8")])
8410*0bfacb9bSmrg
8411*0bfacb9bSmrg;;
8412*0bfacb9bSmrg;; [vstrhq_f]
8413*0bfacb9bSmrg;;
8414*0bfacb9bSmrg(define_insn "mve_vstrhq_fv8hf"
8415*0bfacb9bSmrg  [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8416*0bfacb9bSmrg	(unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
8417*0bfacb9bSmrg	 VSTRHQ_F))
8418*0bfacb9bSmrg  ]
8419*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8420*0bfacb9bSmrg{
8421*0bfacb9bSmrg   rtx ops[2];
8422*0bfacb9bSmrg   int regno = REGNO (operands[1]);
8423*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno);
8424*0bfacb9bSmrg   ops[0]  = operands[0];
8425*0bfacb9bSmrg   output_asm_insn ("vstrh.16\t%q1, %E0",ops);
8426*0bfacb9bSmrg   return "";
8427*0bfacb9bSmrg}
8428*0bfacb9bSmrg  [(set_attr "length" "4")])
8429*0bfacb9bSmrg
8430*0bfacb9bSmrg;;
8431*0bfacb9bSmrg;; [vstrhq_p_f]
8432*0bfacb9bSmrg;;
8433*0bfacb9bSmrg(define_insn "mve_vstrhq_p_fv8hf"
8434*0bfacb9bSmrg  [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
8435*0bfacb9bSmrg	(unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
8436*0bfacb9bSmrg		      (match_operand:HI 2 "vpr_register_operand" "Up")]
8437*0bfacb9bSmrg	 VSTRHQ_F))
8438*0bfacb9bSmrg  ]
8439*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8440*0bfacb9bSmrg{
8441*0bfacb9bSmrg   rtx ops[2];
8442*0bfacb9bSmrg   int regno = REGNO (operands[1]);
8443*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno);
8444*0bfacb9bSmrg   ops[0]  = operands[0];
8445*0bfacb9bSmrg   output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops);
8446*0bfacb9bSmrg   return "";
8447*0bfacb9bSmrg}
8448*0bfacb9bSmrg  [(set_attr "length" "8")])
8449*0bfacb9bSmrg
8450*0bfacb9bSmrg;;
8451*0bfacb9bSmrg;; [vstrhq_p_s vstrhq_p_u]
8452*0bfacb9bSmrg;;
8453*0bfacb9bSmrg(define_insn "mve_vstrhq_p_<supf><mode>"
8454*0bfacb9bSmrg  [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8455*0bfacb9bSmrg	(unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
8456*0bfacb9bSmrg			      (match_operand:HI 2 "vpr_register_operand" "Up")]
8457*0bfacb9bSmrg	 VSTRHQ))
8458*0bfacb9bSmrg  ]
8459*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8460*0bfacb9bSmrg{
8461*0bfacb9bSmrg   rtx ops[2];
8462*0bfacb9bSmrg   int regno = REGNO (operands[1]);
8463*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno);
8464*0bfacb9bSmrg   ops[0]  = operands[0];
8465*0bfacb9bSmrg   output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops);
8466*0bfacb9bSmrg   return "";
8467*0bfacb9bSmrg}
8468*0bfacb9bSmrg  [(set_attr "length" "8")])
8469*0bfacb9bSmrg
8470*0bfacb9bSmrg;;
8471*0bfacb9bSmrg;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
8472*0bfacb9bSmrg;;
8473*0bfacb9bSmrg(define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>"
8474*0bfacb9bSmrg  [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8475*0bfacb9bSmrg   (match_operand:MVE_6 1 "s_register_operand")
8476*0bfacb9bSmrg   (match_operand:MVE_6 2 "s_register_operand")
8477*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
8478*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8479*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8480*0bfacb9bSmrg{
8481*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8482*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8483*0bfacb9bSmrg  emit_insn (
8484*0bfacb9bSmrg    gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
8485*0bfacb9bSmrg						       operands[2],
8486*0bfacb9bSmrg						       operands[3]));
8487*0bfacb9bSmrg  DONE;
8488*0bfacb9bSmrg})
8489*0bfacb9bSmrg
8490*0bfacb9bSmrg(define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn"
8491*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8492*0bfacb9bSmrg	(unspec:BLK
8493*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8494*0bfacb9bSmrg	   (match_operand:MVE_6 1 "s_register_operand" "w")
8495*0bfacb9bSmrg	   (match_operand:MVE_6 2 "s_register_operand" "w")
8496*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
8497*0bfacb9bSmrg	  VSTRHSOQ))]
8498*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8499*0bfacb9bSmrg  "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]"
8500*0bfacb9bSmrg  [(set_attr "length" "8")])
8501*0bfacb9bSmrg
8502*0bfacb9bSmrg;;
8503*0bfacb9bSmrg;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
8504*0bfacb9bSmrg;;
8505*0bfacb9bSmrg(define_expand "mve_vstrhq_scatter_offset_<supf><mode>"
8506*0bfacb9bSmrg  [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8507*0bfacb9bSmrg   (match_operand:MVE_6 1 "s_register_operand")
8508*0bfacb9bSmrg   (match_operand:MVE_6 2 "s_register_operand")
8509*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
8510*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8511*0bfacb9bSmrg{
8512*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8513*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8514*0bfacb9bSmrg  emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1],
8515*0bfacb9bSmrg							      operands[2]));
8516*0bfacb9bSmrg  DONE;
8517*0bfacb9bSmrg})
8518*0bfacb9bSmrg
8519*0bfacb9bSmrg(define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn"
8520*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8521*0bfacb9bSmrg	(unspec:BLK
8522*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8523*0bfacb9bSmrg	   (match_operand:MVE_6 1 "s_register_operand" "w")
8524*0bfacb9bSmrg	   (match_operand:MVE_6 2 "s_register_operand" "w")]
8525*0bfacb9bSmrg	  VSTRHSOQ))]
8526*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8527*0bfacb9bSmrg  "vstrh.<V_sz_elem>\t%q2, [%0, %q1]"
8528*0bfacb9bSmrg  [(set_attr "length" "4")])
8529*0bfacb9bSmrg
8530*0bfacb9bSmrg;;
8531*0bfacb9bSmrg;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
8532*0bfacb9bSmrg;;
8533*0bfacb9bSmrg(define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
8534*0bfacb9bSmrg  [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8535*0bfacb9bSmrg   (match_operand:MVE_6 1 "s_register_operand")
8536*0bfacb9bSmrg   (match_operand:MVE_6 2 "s_register_operand")
8537*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
8538*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8539*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8540*0bfacb9bSmrg{
8541*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8542*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8543*0bfacb9bSmrg  emit_insn (
8544*0bfacb9bSmrg    gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1],
8545*0bfacb9bSmrg							       operands[2],
8546*0bfacb9bSmrg							       operands[3]));
8547*0bfacb9bSmrg  DONE;
8548*0bfacb9bSmrg})
8549*0bfacb9bSmrg
8550*0bfacb9bSmrg(define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn"
8551*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8552*0bfacb9bSmrg	(unspec:BLK
8553*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8554*0bfacb9bSmrg	   (match_operand:MVE_6 1 "s_register_operand" "w")
8555*0bfacb9bSmrg	   (match_operand:MVE_6 2 "s_register_operand" "w")
8556*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
8557*0bfacb9bSmrg	  VSTRHSSOQ))]
8558*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8559*0bfacb9bSmrg  "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8560*0bfacb9bSmrg  [(set_attr "length" "8")])
8561*0bfacb9bSmrg
8562*0bfacb9bSmrg;;
8563*0bfacb9bSmrg;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
8564*0bfacb9bSmrg;;
8565*0bfacb9bSmrg(define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
8566*0bfacb9bSmrg  [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8567*0bfacb9bSmrg   (match_operand:MVE_6 1 "s_register_operand")
8568*0bfacb9bSmrg   (match_operand:MVE_6 2 "s_register_operand")
8569*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
8570*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8571*0bfacb9bSmrg{
8572*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8573*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8574*0bfacb9bSmrg  emit_insn (
8575*0bfacb9bSmrg    gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1],
8576*0bfacb9bSmrg							     operands[2]));
8577*0bfacb9bSmrg  DONE;
8578*0bfacb9bSmrg})
8579*0bfacb9bSmrg
8580*0bfacb9bSmrg(define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn"
8581*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8582*0bfacb9bSmrg	(unspec:BLK
8583*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8584*0bfacb9bSmrg	   (match_operand:MVE_6 1 "s_register_operand" "w")
8585*0bfacb9bSmrg	   (match_operand:MVE_6 2 "s_register_operand" "w")]
8586*0bfacb9bSmrg	  VSTRHSSOQ))]
8587*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8588*0bfacb9bSmrg  "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
8589*0bfacb9bSmrg  [(set_attr "length" "4")])
8590*0bfacb9bSmrg
8591*0bfacb9bSmrg;;
8592*0bfacb9bSmrg;; [vstrhq_s, vstrhq_u]
8593*0bfacb9bSmrg;;
8594*0bfacb9bSmrg(define_insn "mve_vstrhq_<supf><mode>"
8595*0bfacb9bSmrg  [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
8596*0bfacb9bSmrg	(unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
8597*0bfacb9bSmrg	 VSTRHQ))
8598*0bfacb9bSmrg  ]
8599*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8600*0bfacb9bSmrg{
8601*0bfacb9bSmrg   rtx ops[2];
8602*0bfacb9bSmrg   int regno = REGNO (operands[1]);
8603*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno);
8604*0bfacb9bSmrg   ops[0]  = operands[0];
8605*0bfacb9bSmrg   output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
8606*0bfacb9bSmrg   return "";
8607*0bfacb9bSmrg}
8608*0bfacb9bSmrg  [(set_attr "length" "4")])
8609*0bfacb9bSmrg
8610*0bfacb9bSmrg;;
8611*0bfacb9bSmrg;; [vstrwq_f]
8612*0bfacb9bSmrg;;
8613*0bfacb9bSmrg(define_insn "mve_vstrwq_fv4sf"
8614*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8615*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
8616*0bfacb9bSmrg	 VSTRWQ_F))
8617*0bfacb9bSmrg  ]
8618*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8619*0bfacb9bSmrg{
8620*0bfacb9bSmrg   rtx ops[2];
8621*0bfacb9bSmrg   int regno = REGNO (operands[1]);
8622*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno);
8623*0bfacb9bSmrg   ops[0]  = operands[0];
8624*0bfacb9bSmrg   output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8625*0bfacb9bSmrg   return "";
8626*0bfacb9bSmrg}
8627*0bfacb9bSmrg  [(set_attr "length" "4")])
8628*0bfacb9bSmrg
8629*0bfacb9bSmrg;;
8630*0bfacb9bSmrg;; [vstrwq_p_f]
8631*0bfacb9bSmrg;;
8632*0bfacb9bSmrg(define_insn "mve_vstrwq_p_fv4sf"
8633*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8634*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
8635*0bfacb9bSmrg		      (match_operand:HI 2 "vpr_register_operand" "Up")]
8636*0bfacb9bSmrg	 VSTRWQ_F))
8637*0bfacb9bSmrg  ]
8638*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8639*0bfacb9bSmrg{
8640*0bfacb9bSmrg   rtx ops[2];
8641*0bfacb9bSmrg   int regno = REGNO (operands[1]);
8642*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno);
8643*0bfacb9bSmrg   ops[0]  = operands[0];
8644*0bfacb9bSmrg   output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8645*0bfacb9bSmrg   return "";
8646*0bfacb9bSmrg}
8647*0bfacb9bSmrg  [(set_attr "length" "8")])
8648*0bfacb9bSmrg
8649*0bfacb9bSmrg;;
8650*0bfacb9bSmrg;; [vstrwq_p_s vstrwq_p_u]
8651*0bfacb9bSmrg;;
8652*0bfacb9bSmrg(define_insn "mve_vstrwq_p_<supf>v4si"
8653*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8654*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8655*0bfacb9bSmrg		      (match_operand:HI 2 "vpr_register_operand" "Up")]
8656*0bfacb9bSmrg	 VSTRWQ))
8657*0bfacb9bSmrg  ]
8658*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8659*0bfacb9bSmrg{
8660*0bfacb9bSmrg   rtx ops[2];
8661*0bfacb9bSmrg   int regno = REGNO (operands[1]);
8662*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno);
8663*0bfacb9bSmrg   ops[0]  = operands[0];
8664*0bfacb9bSmrg   output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
8665*0bfacb9bSmrg   return "";
8666*0bfacb9bSmrg}
8667*0bfacb9bSmrg  [(set_attr "length" "8")])
8668*0bfacb9bSmrg
8669*0bfacb9bSmrg;;
8670*0bfacb9bSmrg;; [vstrwq_s vstrwq_u]
8671*0bfacb9bSmrg;;
8672*0bfacb9bSmrg(define_insn "mve_vstrwq_<supf>v4si"
8673*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
8674*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
8675*0bfacb9bSmrg	 VSTRWQ))
8676*0bfacb9bSmrg  ]
8677*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8678*0bfacb9bSmrg{
8679*0bfacb9bSmrg   rtx ops[2];
8680*0bfacb9bSmrg   int regno = REGNO (operands[1]);
8681*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno);
8682*0bfacb9bSmrg   ops[0]  = operands[0];
8683*0bfacb9bSmrg   output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8684*0bfacb9bSmrg   return "";
8685*0bfacb9bSmrg}
8686*0bfacb9bSmrg  [(set_attr "length" "4")])
8687*0bfacb9bSmrg
8688*0bfacb9bSmrg(define_expand "mve_vst1q_f<mode>"
8689*0bfacb9bSmrg  [(match_operand:<MVE_CNVT> 0 "mve_memory_operand")
8690*0bfacb9bSmrg   (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
8691*0bfacb9bSmrg  ]
8692*0bfacb9bSmrg  "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8693*0bfacb9bSmrg{
8694*0bfacb9bSmrg  emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8695*0bfacb9bSmrg  DONE;
8696*0bfacb9bSmrg})
8697*0bfacb9bSmrg
8698*0bfacb9bSmrg(define_expand "mve_vst1q_<supf><mode>"
8699*0bfacb9bSmrg  [(match_operand:MVE_2 0 "mve_memory_operand")
8700*0bfacb9bSmrg   (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
8701*0bfacb9bSmrg  ]
8702*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8703*0bfacb9bSmrg{
8704*0bfacb9bSmrg  emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8705*0bfacb9bSmrg  DONE;
8706*0bfacb9bSmrg})
8707*0bfacb9bSmrg
8708*0bfacb9bSmrg;;
8709*0bfacb9bSmrg;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
8710*0bfacb9bSmrg;;
8711*0bfacb9bSmrg(define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
8712*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8713*0bfacb9bSmrg	(unspec:BLK
8714*0bfacb9bSmrg		[(match_operand:V2DI 0 "s_register_operand" "w")
8715*0bfacb9bSmrg		 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8716*0bfacb9bSmrg		 (match_operand:V2DI 2 "s_register_operand" "w")
8717*0bfacb9bSmrg		 (match_operand:HI 3 "vpr_register_operand" "Up")]
8718*0bfacb9bSmrg	 VSTRDSBQ))
8719*0bfacb9bSmrg  ]
8720*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8721*0bfacb9bSmrg{
8722*0bfacb9bSmrg   rtx ops[3];
8723*0bfacb9bSmrg   ops[0] = operands[0];
8724*0bfacb9bSmrg   ops[1] = operands[1];
8725*0bfacb9bSmrg   ops[2] = operands[2];
8726*0bfacb9bSmrg   output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
8727*0bfacb9bSmrg   return "";
8728*0bfacb9bSmrg}
8729*0bfacb9bSmrg  [(set_attr "length" "8")])
8730*0bfacb9bSmrg
8731*0bfacb9bSmrg;;
8732*0bfacb9bSmrg;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
8733*0bfacb9bSmrg;;
8734*0bfacb9bSmrg(define_insn "mve_vstrdq_scatter_base_<supf>v2di"
8735*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8736*0bfacb9bSmrg	(unspec:BLK
8737*0bfacb9bSmrg		[(match_operand:V2DI 0 "s_register_operand" "=w")
8738*0bfacb9bSmrg		 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8739*0bfacb9bSmrg		 (match_operand:V2DI 2 "s_register_operand" "w")]
8740*0bfacb9bSmrg	 VSTRDSBQ))
8741*0bfacb9bSmrg  ]
8742*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8743*0bfacb9bSmrg{
8744*0bfacb9bSmrg   rtx ops[3];
8745*0bfacb9bSmrg   ops[0] = operands[0];
8746*0bfacb9bSmrg   ops[1] = operands[1];
8747*0bfacb9bSmrg   ops[2] = operands[2];
8748*0bfacb9bSmrg   output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
8749*0bfacb9bSmrg   return "";
8750*0bfacb9bSmrg}
8751*0bfacb9bSmrg  [(set_attr "length" "4")])
8752*0bfacb9bSmrg
8753*0bfacb9bSmrg;;
8754*0bfacb9bSmrg;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
8755*0bfacb9bSmrg;;
8756*0bfacb9bSmrg(define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di"
8757*0bfacb9bSmrg  [(match_operand:V2DI 0 "mve_scatter_memory")
8758*0bfacb9bSmrg   (match_operand:V2DI 1 "s_register_operand")
8759*0bfacb9bSmrg   (match_operand:V2DI 2 "s_register_operand")
8760*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
8761*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8762*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8763*0bfacb9bSmrg{
8764*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8765*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8766*0bfacb9bSmrg  emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1],
8767*0bfacb9bSmrg							      operands[2],
8768*0bfacb9bSmrg							      operands[3]));
8769*0bfacb9bSmrg  DONE;
8770*0bfacb9bSmrg})
8771*0bfacb9bSmrg
8772*0bfacb9bSmrg(define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn"
8773*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8774*0bfacb9bSmrg	(unspec:BLK
8775*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8776*0bfacb9bSmrg	   (match_operand:V2DI 1 "s_register_operand" "w")
8777*0bfacb9bSmrg	   (match_operand:V2DI 2 "s_register_operand" "w")
8778*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
8779*0bfacb9bSmrg	  VSTRDSOQ))]
8780*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8781*0bfacb9bSmrg  "vpst\;vstrdt.64\t%q2, [%0, %q1]"
8782*0bfacb9bSmrg  [(set_attr "length" "8")])
8783*0bfacb9bSmrg
8784*0bfacb9bSmrg;;
8785*0bfacb9bSmrg;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
8786*0bfacb9bSmrg;;
8787*0bfacb9bSmrg(define_expand "mve_vstrdq_scatter_offset_<supf>v2di"
8788*0bfacb9bSmrg  [(match_operand:V2DI 0 "mve_scatter_memory")
8789*0bfacb9bSmrg   (match_operand:V2DI 1 "s_register_operand")
8790*0bfacb9bSmrg   (match_operand:V2DI 2 "s_register_operand")
8791*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
8792*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8793*0bfacb9bSmrg{
8794*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8795*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8796*0bfacb9bSmrg  emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1],
8797*0bfacb9bSmrg							    operands[2]));
8798*0bfacb9bSmrg  DONE;
8799*0bfacb9bSmrg})
8800*0bfacb9bSmrg
8801*0bfacb9bSmrg(define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn"
8802*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8803*0bfacb9bSmrg	(unspec:BLK
8804*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8805*0bfacb9bSmrg	   (match_operand:V2DI 1 "s_register_operand" "w")
8806*0bfacb9bSmrg	   (match_operand:V2DI 2 "s_register_operand" "w")]
8807*0bfacb9bSmrg	  VSTRDSOQ))]
8808*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8809*0bfacb9bSmrg  "vstrd.64\t%q2, [%0, %q1]"
8810*0bfacb9bSmrg  [(set_attr "length" "4")])
8811*0bfacb9bSmrg
8812*0bfacb9bSmrg;;
8813*0bfacb9bSmrg;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
8814*0bfacb9bSmrg;;
8815*0bfacb9bSmrg(define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
8816*0bfacb9bSmrg  [(match_operand:V2DI 0 "mve_scatter_memory")
8817*0bfacb9bSmrg   (match_operand:V2DI 1 "s_register_operand")
8818*0bfacb9bSmrg   (match_operand:V2DI 2 "s_register_operand")
8819*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
8820*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8821*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8822*0bfacb9bSmrg{
8823*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8824*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8825*0bfacb9bSmrg  emit_insn (
8826*0bfacb9bSmrg    gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1],
8827*0bfacb9bSmrg							     operands[2],
8828*0bfacb9bSmrg							     operands[3]));
8829*0bfacb9bSmrg  DONE;
8830*0bfacb9bSmrg})
8831*0bfacb9bSmrg
8832*0bfacb9bSmrg(define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn"
8833*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8834*0bfacb9bSmrg	(unspec:BLK
8835*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8836*0bfacb9bSmrg	   (match_operand:V2DI 1 "s_register_operand" "w")
8837*0bfacb9bSmrg	   (match_operand:V2DI 2 "s_register_operand" "w")
8838*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
8839*0bfacb9bSmrg	  VSTRDSSOQ))]
8840*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8841*0bfacb9bSmrg  "vpst\;vstrdt.64\t%q2, [%0, %q1, UXTW #3]"
8842*0bfacb9bSmrg  [(set_attr "length" "8")])
8843*0bfacb9bSmrg
8844*0bfacb9bSmrg;;
8845*0bfacb9bSmrg;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
8846*0bfacb9bSmrg;;
8847*0bfacb9bSmrg(define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
8848*0bfacb9bSmrg  [(match_operand:V2DI 0 "mve_scatter_memory")
8849*0bfacb9bSmrg   (match_operand:V2DI 1 "s_register_operand")
8850*0bfacb9bSmrg   (match_operand:V2DI 2 "s_register_operand")
8851*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
8852*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8853*0bfacb9bSmrg{
8854*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8855*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8856*0bfacb9bSmrg  emit_insn (
8857*0bfacb9bSmrg    gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1],
8858*0bfacb9bSmrg							   operands[2]));
8859*0bfacb9bSmrg  DONE;
8860*0bfacb9bSmrg})
8861*0bfacb9bSmrg
8862*0bfacb9bSmrg(define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn"
8863*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8864*0bfacb9bSmrg	(unspec:BLK
8865*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8866*0bfacb9bSmrg	   (match_operand:V2DI 1 "s_register_operand" "w")
8867*0bfacb9bSmrg	   (match_operand:V2DI 2 "s_register_operand" "w")]
8868*0bfacb9bSmrg	  VSTRDSSOQ))]
8869*0bfacb9bSmrg  "TARGET_HAVE_MVE"
8870*0bfacb9bSmrg  "vstrd.64\t%q2, [%0, %q1, UXTW #3]"
8871*0bfacb9bSmrg  [(set_attr "length" "4")])
8872*0bfacb9bSmrg
8873*0bfacb9bSmrg;;
8874*0bfacb9bSmrg;; [vstrhq_scatter_offset_f]
8875*0bfacb9bSmrg;;
8876*0bfacb9bSmrg(define_expand "mve_vstrhq_scatter_offset_fv8hf"
8877*0bfacb9bSmrg  [(match_operand:V8HI 0 "mve_scatter_memory")
8878*0bfacb9bSmrg   (match_operand:V8HI 1 "s_register_operand")
8879*0bfacb9bSmrg   (match_operand:V8HF 2 "s_register_operand")
8880*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8881*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8882*0bfacb9bSmrg{
8883*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8884*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8885*0bfacb9bSmrg  emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1],
8886*0bfacb9bSmrg						       operands[2]));
8887*0bfacb9bSmrg  DONE;
8888*0bfacb9bSmrg})
8889*0bfacb9bSmrg
8890*0bfacb9bSmrg(define_insn "mve_vstrhq_scatter_offset_fv8hf_insn"
8891*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8892*0bfacb9bSmrg	(unspec:BLK
8893*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8894*0bfacb9bSmrg	   (match_operand:V8HI 1 "s_register_operand" "w")
8895*0bfacb9bSmrg	   (match_operand:V8HF 2 "s_register_operand" "w")]
8896*0bfacb9bSmrg	  VSTRHQSO_F))]
8897*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8898*0bfacb9bSmrg  "vstrh.16\t%q2, [%0, %q1]"
8899*0bfacb9bSmrg  [(set_attr "length" "4")])
8900*0bfacb9bSmrg
8901*0bfacb9bSmrg;;
8902*0bfacb9bSmrg;; [vstrhq_scatter_offset_p_f]
8903*0bfacb9bSmrg;;
8904*0bfacb9bSmrg(define_expand "mve_vstrhq_scatter_offset_p_fv8hf"
8905*0bfacb9bSmrg  [(match_operand:V8HI 0 "mve_scatter_memory")
8906*0bfacb9bSmrg   (match_operand:V8HI 1 "s_register_operand")
8907*0bfacb9bSmrg   (match_operand:V8HF 2 "s_register_operand")
8908*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
8909*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
8910*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8911*0bfacb9bSmrg{
8912*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8913*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8914*0bfacb9bSmrg  emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1],
8915*0bfacb9bSmrg							 operands[2],
8916*0bfacb9bSmrg							 operands[3]));
8917*0bfacb9bSmrg  DONE;
8918*0bfacb9bSmrg})
8919*0bfacb9bSmrg
8920*0bfacb9bSmrg(define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn"
8921*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8922*0bfacb9bSmrg	(unspec:BLK
8923*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8924*0bfacb9bSmrg	   (match_operand:V8HI 1 "s_register_operand" "w")
8925*0bfacb9bSmrg	   (match_operand:V8HF 2 "s_register_operand" "w")
8926*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
8927*0bfacb9bSmrg	  VSTRHQSO_F))]
8928*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8929*0bfacb9bSmrg  "vpst\;vstrht.16\t%q2, [%0, %q1]"
8930*0bfacb9bSmrg  [(set_attr "length" "8")])
8931*0bfacb9bSmrg
8932*0bfacb9bSmrg;;
8933*0bfacb9bSmrg;; [vstrhq_scatter_shifted_offset_f]
8934*0bfacb9bSmrg;;
8935*0bfacb9bSmrg(define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf"
8936*0bfacb9bSmrg  [(match_operand:V8HI 0 "memory_operand" "=Us")
8937*0bfacb9bSmrg   (match_operand:V8HI 1 "s_register_operand" "w")
8938*0bfacb9bSmrg   (match_operand:V8HF 2 "s_register_operand" "w")
8939*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8940*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8941*0bfacb9bSmrg{
8942*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8943*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8944*0bfacb9bSmrg  emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1],
8945*0bfacb9bSmrg							       operands[2]));
8946*0bfacb9bSmrg  DONE;
8947*0bfacb9bSmrg})
8948*0bfacb9bSmrg
8949*0bfacb9bSmrg(define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn"
8950*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8951*0bfacb9bSmrg	(unspec:BLK
8952*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8953*0bfacb9bSmrg	   (match_operand:V8HI 1 "s_register_operand" "w")
8954*0bfacb9bSmrg	   (match_operand:V8HF 2 "s_register_operand" "w")]
8955*0bfacb9bSmrg	  VSTRHQSSO_F))]
8956*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8957*0bfacb9bSmrg  "vstrh.16\t%q2, [%0, %q1, uxtw #1]"
8958*0bfacb9bSmrg  [(set_attr "length" "4")])
8959*0bfacb9bSmrg
8960*0bfacb9bSmrg;;
8961*0bfacb9bSmrg;; [vstrhq_scatter_shifted_offset_p_f]
8962*0bfacb9bSmrg;;
8963*0bfacb9bSmrg(define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
8964*0bfacb9bSmrg  [(match_operand:V8HI 0 "memory_operand" "=Us")
8965*0bfacb9bSmrg   (match_operand:V8HI 1 "s_register_operand" "w")
8966*0bfacb9bSmrg   (match_operand:V8HF 2 "s_register_operand" "w")
8967*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand" "Up")
8968*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
8969*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8970*0bfacb9bSmrg{
8971*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
8972*0bfacb9bSmrg  gcc_assert (REG_P (ind));
8973*0bfacb9bSmrg  emit_insn (
8974*0bfacb9bSmrg    gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1],
8975*0bfacb9bSmrg							operands[2],
8976*0bfacb9bSmrg							operands[3]));
8977*0bfacb9bSmrg  DONE;
8978*0bfacb9bSmrg})
8979*0bfacb9bSmrg
8980*0bfacb9bSmrg(define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn"
8981*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8982*0bfacb9bSmrg	(unspec:BLK
8983*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
8984*0bfacb9bSmrg	   (match_operand:V8HI 1 "s_register_operand" "w")
8985*0bfacb9bSmrg	   (match_operand:V8HF 2 "s_register_operand" "w")
8986*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
8987*0bfacb9bSmrg	  VSTRHQSSO_F))]
8988*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8989*0bfacb9bSmrg  "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]"
8990*0bfacb9bSmrg  [(set_attr "length" "8")])
8991*0bfacb9bSmrg
8992*0bfacb9bSmrg;;
8993*0bfacb9bSmrg;; [vstrwq_scatter_base_f]
8994*0bfacb9bSmrg;;
8995*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_base_fv4sf"
8996*0bfacb9bSmrg  [(set (mem:BLK (scratch))
8997*0bfacb9bSmrg	(unspec:BLK
8998*0bfacb9bSmrg		[(match_operand:V4SI 0 "s_register_operand" "w")
8999*0bfacb9bSmrg		 (match_operand:SI 1 "immediate_operand" "i")
9000*0bfacb9bSmrg		 (match_operand:V4SF 2 "s_register_operand" "w")]
9001*0bfacb9bSmrg	 VSTRWQSB_F))
9002*0bfacb9bSmrg  ]
9003*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9004*0bfacb9bSmrg{
9005*0bfacb9bSmrg   rtx ops[3];
9006*0bfacb9bSmrg   ops[0] = operands[0];
9007*0bfacb9bSmrg   ops[1] = operands[1];
9008*0bfacb9bSmrg   ops[2] = operands[2];
9009*0bfacb9bSmrg   output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
9010*0bfacb9bSmrg   return "";
9011*0bfacb9bSmrg}
9012*0bfacb9bSmrg  [(set_attr "length" "4")])
9013*0bfacb9bSmrg
9014*0bfacb9bSmrg;;
9015*0bfacb9bSmrg;; [vstrwq_scatter_base_p_f]
9016*0bfacb9bSmrg;;
9017*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_base_p_fv4sf"
9018*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9019*0bfacb9bSmrg	(unspec:BLK
9020*0bfacb9bSmrg		[(match_operand:V4SI 0 "s_register_operand" "w")
9021*0bfacb9bSmrg		 (match_operand:SI 1 "immediate_operand" "i")
9022*0bfacb9bSmrg		 (match_operand:V4SF 2 "s_register_operand" "w")
9023*0bfacb9bSmrg		 (match_operand:HI 3 "vpr_register_operand" "Up")]
9024*0bfacb9bSmrg	 VSTRWQSB_F))
9025*0bfacb9bSmrg  ]
9026*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9027*0bfacb9bSmrg{
9028*0bfacb9bSmrg   rtx ops[3];
9029*0bfacb9bSmrg   ops[0] = operands[0];
9030*0bfacb9bSmrg   ops[1] = operands[1];
9031*0bfacb9bSmrg   ops[2] = operands[2];
9032*0bfacb9bSmrg   output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
9033*0bfacb9bSmrg   return "";
9034*0bfacb9bSmrg}
9035*0bfacb9bSmrg  [(set_attr "length" "8")])
9036*0bfacb9bSmrg
9037*0bfacb9bSmrg;;
9038*0bfacb9bSmrg;; [vstrwq_scatter_offset_f]
9039*0bfacb9bSmrg;;
9040*0bfacb9bSmrg(define_expand "mve_vstrwq_scatter_offset_fv4sf"
9041*0bfacb9bSmrg  [(match_operand:V4SI 0 "mve_scatter_memory")
9042*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9043*0bfacb9bSmrg   (match_operand:V4SF 2 "s_register_operand")
9044*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9045*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9046*0bfacb9bSmrg{
9047*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
9048*0bfacb9bSmrg  gcc_assert (REG_P (ind));
9049*0bfacb9bSmrg  emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1],
9050*0bfacb9bSmrg						       operands[2]));
9051*0bfacb9bSmrg  DONE;
9052*0bfacb9bSmrg})
9053*0bfacb9bSmrg
9054*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_offset_fv4sf_insn"
9055*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9056*0bfacb9bSmrg	(unspec:BLK
9057*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
9058*0bfacb9bSmrg	   (match_operand:V4SI 1 "s_register_operand" "w")
9059*0bfacb9bSmrg	   (match_operand:V4SF 2 "s_register_operand" "w")]
9060*0bfacb9bSmrg	  VSTRWQSO_F))]
9061*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9062*0bfacb9bSmrg  "vstrw.32\t%q2, [%0, %q1]"
9063*0bfacb9bSmrg  [(set_attr "length" "4")])
9064*0bfacb9bSmrg
9065*0bfacb9bSmrg;;
9066*0bfacb9bSmrg;; [vstrwq_scatter_offset_p_f]
9067*0bfacb9bSmrg;;
9068*0bfacb9bSmrg(define_expand "mve_vstrwq_scatter_offset_p_fv4sf"
9069*0bfacb9bSmrg  [(match_operand:V4SI 0 "mve_scatter_memory")
9070*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9071*0bfacb9bSmrg   (match_operand:V4SF 2 "s_register_operand")
9072*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
9073*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9074*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9075*0bfacb9bSmrg{
9076*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
9077*0bfacb9bSmrg  gcc_assert (REG_P (ind));
9078*0bfacb9bSmrg  emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1],
9079*0bfacb9bSmrg							 operands[2],
9080*0bfacb9bSmrg							 operands[3]));
9081*0bfacb9bSmrg  DONE;
9082*0bfacb9bSmrg})
9083*0bfacb9bSmrg
9084*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn"
9085*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9086*0bfacb9bSmrg	(unspec:BLK
9087*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
9088*0bfacb9bSmrg	   (match_operand:V4SI 1 "s_register_operand" "w")
9089*0bfacb9bSmrg	   (match_operand:V4SF 2 "s_register_operand" "w")
9090*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
9091*0bfacb9bSmrg	  VSTRWQSO_F))]
9092*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9093*0bfacb9bSmrg  "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9094*0bfacb9bSmrg  [(set_attr "length" "8")])
9095*0bfacb9bSmrg
9096*0bfacb9bSmrg;;
9097*0bfacb9bSmrg;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9098*0bfacb9bSmrg;;
9099*0bfacb9bSmrg(define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si"
9100*0bfacb9bSmrg  [(match_operand:V4SI 0 "mve_scatter_memory")
9101*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9102*0bfacb9bSmrg   (match_operand:V4SI 2 "s_register_operand")
9103*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
9104*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9105*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9106*0bfacb9bSmrg{
9107*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
9108*0bfacb9bSmrg  gcc_assert (REG_P (ind));
9109*0bfacb9bSmrg  emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1],
9110*0bfacb9bSmrg							      operands[2],
9111*0bfacb9bSmrg							      operands[3]));
9112*0bfacb9bSmrg  DONE;
9113*0bfacb9bSmrg})
9114*0bfacb9bSmrg
9115*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn"
9116*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9117*0bfacb9bSmrg	(unspec:BLK
9118*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
9119*0bfacb9bSmrg	   (match_operand:V4SI 1 "s_register_operand" "w")
9120*0bfacb9bSmrg	   (match_operand:V4SI 2 "s_register_operand" "w")
9121*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
9122*0bfacb9bSmrg	  VSTRWSOQ))]
9123*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9124*0bfacb9bSmrg  "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9125*0bfacb9bSmrg  [(set_attr "length" "8")])
9126*0bfacb9bSmrg
9127*0bfacb9bSmrg;;
9128*0bfacb9bSmrg;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9129*0bfacb9bSmrg;;
9130*0bfacb9bSmrg(define_expand "mve_vstrwq_scatter_offset_<supf>v4si"
9131*0bfacb9bSmrg  [(match_operand:V4SI 0 "mve_scatter_memory")
9132*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9133*0bfacb9bSmrg   (match_operand:V4SI 2 "s_register_operand")
9134*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9135*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9136*0bfacb9bSmrg{
9137*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
9138*0bfacb9bSmrg  gcc_assert (REG_P (ind));
9139*0bfacb9bSmrg  emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1],
9140*0bfacb9bSmrg							    operands[2]));
9141*0bfacb9bSmrg  DONE;
9142*0bfacb9bSmrg})
9143*0bfacb9bSmrg
9144*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn"
9145*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9146*0bfacb9bSmrg	(unspec:BLK
9147*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
9148*0bfacb9bSmrg	   (match_operand:V4SI 1 "s_register_operand" "w")
9149*0bfacb9bSmrg	   (match_operand:V4SI 2 "s_register_operand" "w")]
9150*0bfacb9bSmrg	  VSTRWSOQ))]
9151*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9152*0bfacb9bSmrg  "vstrw.32\t%q2, [%0, %q1]"
9153*0bfacb9bSmrg  [(set_attr "length" "4")])
9154*0bfacb9bSmrg
9155*0bfacb9bSmrg;;
9156*0bfacb9bSmrg;; [vstrwq_scatter_shifted_offset_f]
9157*0bfacb9bSmrg;;
9158*0bfacb9bSmrg(define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf"
9159*0bfacb9bSmrg  [(match_operand:V4SI 0 "mve_scatter_memory")
9160*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9161*0bfacb9bSmrg   (match_operand:V4SF 2 "s_register_operand")
9162*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9163*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9164*0bfacb9bSmrg{
9165*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
9166*0bfacb9bSmrg  gcc_assert (REG_P (ind));
9167*0bfacb9bSmrg  emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1],
9168*0bfacb9bSmrg							       operands[2]));
9169*0bfacb9bSmrg  DONE;
9170*0bfacb9bSmrg})
9171*0bfacb9bSmrg
9172*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn"
9173*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9174*0bfacb9bSmrg	(unspec:BLK
9175*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
9176*0bfacb9bSmrg	   (match_operand:V4SI 1 "s_register_operand" "w")
9177*0bfacb9bSmrg	   (match_operand:V4SF 2 "s_register_operand" "w")]
9178*0bfacb9bSmrg	 VSTRWQSSO_F))]
9179*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9180*0bfacb9bSmrg  "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9181*0bfacb9bSmrg  [(set_attr "length" "8")])
9182*0bfacb9bSmrg
9183*0bfacb9bSmrg;;
9184*0bfacb9bSmrg;; [vstrwq_scatter_shifted_offset_p_f]
9185*0bfacb9bSmrg;;
9186*0bfacb9bSmrg(define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
9187*0bfacb9bSmrg  [(match_operand:V4SI 0 "mve_scatter_memory")
9188*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9189*0bfacb9bSmrg   (match_operand:V4SF 2 "s_register_operand")
9190*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
9191*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9192*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9193*0bfacb9bSmrg{
9194*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
9195*0bfacb9bSmrg  gcc_assert (REG_P (ind));
9196*0bfacb9bSmrg  emit_insn (
9197*0bfacb9bSmrg    gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1],
9198*0bfacb9bSmrg							operands[2],
9199*0bfacb9bSmrg							operands[3]));
9200*0bfacb9bSmrg  DONE;
9201*0bfacb9bSmrg})
9202*0bfacb9bSmrg
9203*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn"
9204*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9205*0bfacb9bSmrg	(unspec:BLK
9206*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
9207*0bfacb9bSmrg	   (match_operand:V4SI 1 "s_register_operand" "w")
9208*0bfacb9bSmrg	   (match_operand:V4SF 2 "s_register_operand" "w")
9209*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
9210*0bfacb9bSmrg	  VSTRWQSSO_F))]
9211*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9212*0bfacb9bSmrg  "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9213*0bfacb9bSmrg  [(set_attr "length" "8")])
9214*0bfacb9bSmrg
9215*0bfacb9bSmrg;;
9216*0bfacb9bSmrg;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
9217*0bfacb9bSmrg;;
9218*0bfacb9bSmrg(define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
9219*0bfacb9bSmrg  [(match_operand:V4SI 0 "mve_scatter_memory")
9220*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9221*0bfacb9bSmrg   (match_operand:V4SI 2 "s_register_operand")
9222*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
9223*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9224*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9225*0bfacb9bSmrg{
9226*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
9227*0bfacb9bSmrg  gcc_assert (REG_P (ind));
9228*0bfacb9bSmrg  emit_insn (
9229*0bfacb9bSmrg    gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1],
9230*0bfacb9bSmrg							     operands[2],
9231*0bfacb9bSmrg							     operands[3]));
9232*0bfacb9bSmrg  DONE;
9233*0bfacb9bSmrg})
9234*0bfacb9bSmrg
9235*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn"
9236*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9237*0bfacb9bSmrg	(unspec:BLK
9238*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
9239*0bfacb9bSmrg	   (match_operand:V4SI 1 "s_register_operand" "w")
9240*0bfacb9bSmrg	   (match_operand:V4SI 2 "s_register_operand" "w")
9241*0bfacb9bSmrg	   (match_operand:HI 3 "vpr_register_operand" "Up")]
9242*0bfacb9bSmrg	  VSTRWSSOQ))]
9243*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9244*0bfacb9bSmrg  "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9245*0bfacb9bSmrg  [(set_attr "length" "8")])
9246*0bfacb9bSmrg
9247*0bfacb9bSmrg;;
9248*0bfacb9bSmrg;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
9249*0bfacb9bSmrg;;
9250*0bfacb9bSmrg(define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
9251*0bfacb9bSmrg  [(match_operand:V4SI 0 "mve_scatter_memory")
9252*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9253*0bfacb9bSmrg   (match_operand:V4SI 2 "s_register_operand")
9254*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9255*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9256*0bfacb9bSmrg{
9257*0bfacb9bSmrg  rtx ind = XEXP (operands[0], 0);
9258*0bfacb9bSmrg  gcc_assert (REG_P (ind));
9259*0bfacb9bSmrg  emit_insn (
9260*0bfacb9bSmrg    gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1],
9261*0bfacb9bSmrg							   operands[2]));
9262*0bfacb9bSmrg  DONE;
9263*0bfacb9bSmrg})
9264*0bfacb9bSmrg
9265*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn"
9266*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9267*0bfacb9bSmrg	(unspec:BLK
9268*0bfacb9bSmrg	  [(match_operand:SI 0 "register_operand" "r")
9269*0bfacb9bSmrg	   (match_operand:V4SI 1 "s_register_operand" "w")
9270*0bfacb9bSmrg	   (match_operand:V4SI 2 "s_register_operand" "w")]
9271*0bfacb9bSmrg	  VSTRWSSOQ))]
9272*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9273*0bfacb9bSmrg  "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9274*0bfacb9bSmrg  [(set_attr "length" "4")])
9275*0bfacb9bSmrg
9276*0bfacb9bSmrg;;
9277*0bfacb9bSmrg;; [vaddq_s, vaddq_u])
9278*0bfacb9bSmrg;;
9279*0bfacb9bSmrg(define_insn "mve_vaddq<mode>"
9280*0bfacb9bSmrg  [
9281*0bfacb9bSmrg   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
9282*0bfacb9bSmrg	(plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
9283*0bfacb9bSmrg		    (match_operand:MVE_2 2 "s_register_operand" "w")))
9284*0bfacb9bSmrg  ]
9285*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9286*0bfacb9bSmrg  "vadd.i%#<V_sz_elem>  %q0, %q1, %q2"
9287*0bfacb9bSmrg  [(set_attr "type" "mve_move")
9288*0bfacb9bSmrg])
9289*0bfacb9bSmrg
9290*0bfacb9bSmrg;;
9291*0bfacb9bSmrg;; [vaddq_f])
9292*0bfacb9bSmrg;;
9293*0bfacb9bSmrg(define_insn "mve_vaddq_f<mode>"
9294*0bfacb9bSmrg  [
9295*0bfacb9bSmrg   (set (match_operand:MVE_0 0 "s_register_operand" "=w")
9296*0bfacb9bSmrg	(plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
9297*0bfacb9bSmrg		    (match_operand:MVE_0 2 "s_register_operand" "w")))
9298*0bfacb9bSmrg  ]
9299*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9300*0bfacb9bSmrg  "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
9301*0bfacb9bSmrg  [(set_attr "type" "mve_move")
9302*0bfacb9bSmrg])
9303*0bfacb9bSmrg
9304*0bfacb9bSmrg;;
9305*0bfacb9bSmrg;; [vidupq_n_u])
9306*0bfacb9bSmrg;;
9307*0bfacb9bSmrg(define_expand "mve_vidupq_n_u<mode>"
9308*0bfacb9bSmrg [(match_operand:MVE_2 0 "s_register_operand")
9309*0bfacb9bSmrg  (match_operand:SI 1 "s_register_operand")
9310*0bfacb9bSmrg  (match_operand:SI 2 "mve_imm_selective_upto_8")]
9311*0bfacb9bSmrg "TARGET_HAVE_MVE"
9312*0bfacb9bSmrg{
9313*0bfacb9bSmrg  rtx temp = gen_reg_rtx (SImode);
9314*0bfacb9bSmrg  emit_move_insn (temp, operands[1]);
9315*0bfacb9bSmrg  rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9316*0bfacb9bSmrg  emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
9317*0bfacb9bSmrg					  operands[2], inc));
9318*0bfacb9bSmrg  DONE;
9319*0bfacb9bSmrg})
9320*0bfacb9bSmrg
9321*0bfacb9bSmrg;;
9322*0bfacb9bSmrg;; [vidupq_u_insn])
9323*0bfacb9bSmrg;;
9324*0bfacb9bSmrg(define_insn "mve_vidupq_u<mode>_insn"
9325*0bfacb9bSmrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9326*0bfacb9bSmrg       (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9327*0bfacb9bSmrg		      (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
9328*0bfacb9bSmrg	 VIDUPQ))
9329*0bfacb9bSmrg  (set (match_operand:SI 1 "s_register_operand" "=Te")
9330*0bfacb9bSmrg       (plus:SI (match_dup 2)
9331*0bfacb9bSmrg		(match_operand:SI 4 "immediate_operand" "i")))]
9332*0bfacb9bSmrg "TARGET_HAVE_MVE"
9333*0bfacb9bSmrg "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
9334*0bfacb9bSmrg
9335*0bfacb9bSmrg;;
9336*0bfacb9bSmrg;; [vidupq_m_n_u])
9337*0bfacb9bSmrg;;
9338*0bfacb9bSmrg(define_expand "mve_vidupq_m_n_u<mode>"
9339*0bfacb9bSmrg  [(match_operand:MVE_2 0 "s_register_operand")
9340*0bfacb9bSmrg   (match_operand:MVE_2 1 "s_register_operand")
9341*0bfacb9bSmrg   (match_operand:SI 2 "s_register_operand")
9342*0bfacb9bSmrg   (match_operand:SI 3 "mve_imm_selective_upto_8")
9343*0bfacb9bSmrg   (match_operand:HI 4 "vpr_register_operand")]
9344*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9345*0bfacb9bSmrg{
9346*0bfacb9bSmrg  rtx temp = gen_reg_rtx (SImode);
9347*0bfacb9bSmrg  emit_move_insn (temp, operands[2]);
9348*0bfacb9bSmrg  rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9349*0bfacb9bSmrg  emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9350*0bfacb9bSmrg					     operands[2], operands[3],
9351*0bfacb9bSmrg					     operands[4], inc));
9352*0bfacb9bSmrg  DONE;
9353*0bfacb9bSmrg})
9354*0bfacb9bSmrg
9355*0bfacb9bSmrg;;
9356*0bfacb9bSmrg;; [vidupq_m_wb_u_insn])
9357*0bfacb9bSmrg;;
9358*0bfacb9bSmrg(define_insn "mve_vidupq_m_wb_u<mode>_insn"
9359*0bfacb9bSmrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9360*0bfacb9bSmrg       (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9361*0bfacb9bSmrg		      (match_operand:SI 3 "s_register_operand" "2")
9362*0bfacb9bSmrg		      (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9363*0bfacb9bSmrg		      (match_operand:HI 5 "vpr_register_operand" "Up")]
9364*0bfacb9bSmrg	VIDUPQ_M))
9365*0bfacb9bSmrg  (set (match_operand:SI 2 "s_register_operand" "=Te")
9366*0bfacb9bSmrg       (plus:SI (match_dup 3)
9367*0bfacb9bSmrg		(match_operand:SI 6 "immediate_operand" "i")))]
9368*0bfacb9bSmrg "TARGET_HAVE_MVE"
9369*0bfacb9bSmrg "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
9370*0bfacb9bSmrg [(set_attr "length""8")])
9371*0bfacb9bSmrg
9372*0bfacb9bSmrg;;
9373*0bfacb9bSmrg;; [vddupq_n_u])
9374*0bfacb9bSmrg;;
9375*0bfacb9bSmrg(define_expand "mve_vddupq_n_u<mode>"
9376*0bfacb9bSmrg [(match_operand:MVE_2 0 "s_register_operand")
9377*0bfacb9bSmrg  (match_operand:SI 1 "s_register_operand")
9378*0bfacb9bSmrg  (match_operand:SI 2 "mve_imm_selective_upto_8")]
9379*0bfacb9bSmrg "TARGET_HAVE_MVE"
9380*0bfacb9bSmrg{
9381*0bfacb9bSmrg  rtx temp = gen_reg_rtx (SImode);
9382*0bfacb9bSmrg  emit_move_insn (temp, operands[1]);
9383*0bfacb9bSmrg  rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9384*0bfacb9bSmrg  emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
9385*0bfacb9bSmrg					  operands[2], inc));
9386*0bfacb9bSmrg  DONE;
9387*0bfacb9bSmrg})
9388*0bfacb9bSmrg
9389*0bfacb9bSmrg;;
9390*0bfacb9bSmrg;; [vddupq_u_insn])
9391*0bfacb9bSmrg;;
9392*0bfacb9bSmrg(define_insn "mve_vddupq_u<mode>_insn"
9393*0bfacb9bSmrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9394*0bfacb9bSmrg       (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9395*0bfacb9bSmrg		      (match_operand:SI 3 "immediate_operand" "i")]
9396*0bfacb9bSmrg	VDDUPQ))
9397*0bfacb9bSmrg  (set (match_operand:SI 1 "s_register_operand" "=Te")
9398*0bfacb9bSmrg       (minus:SI (match_dup 2)
9399*0bfacb9bSmrg		 (match_operand:SI 4 "immediate_operand" "i")))]
9400*0bfacb9bSmrg "TARGET_HAVE_MVE"
9401*0bfacb9bSmrg "vddup.u%#<V_sz_elem>  %q0, %1, %3")
9402*0bfacb9bSmrg
9403*0bfacb9bSmrg;;
9404*0bfacb9bSmrg;; [vddupq_m_n_u])
9405*0bfacb9bSmrg;;
9406*0bfacb9bSmrg(define_expand "mve_vddupq_m_n_u<mode>"
9407*0bfacb9bSmrg  [(match_operand:MVE_2 0 "s_register_operand")
9408*0bfacb9bSmrg   (match_operand:MVE_2 1 "s_register_operand")
9409*0bfacb9bSmrg   (match_operand:SI 2 "s_register_operand")
9410*0bfacb9bSmrg   (match_operand:SI 3 "mve_imm_selective_upto_8")
9411*0bfacb9bSmrg   (match_operand:HI 4 "vpr_register_operand")]
9412*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9413*0bfacb9bSmrg{
9414*0bfacb9bSmrg  rtx temp = gen_reg_rtx (SImode);
9415*0bfacb9bSmrg  emit_move_insn (temp, operands[2]);
9416*0bfacb9bSmrg  rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9417*0bfacb9bSmrg  emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9418*0bfacb9bSmrg					     operands[2], operands[3],
9419*0bfacb9bSmrg					     operands[4], inc));
9420*0bfacb9bSmrg  DONE;
9421*0bfacb9bSmrg})
9422*0bfacb9bSmrg
9423*0bfacb9bSmrg;;
9424*0bfacb9bSmrg;; [vddupq_m_wb_u_insn])
9425*0bfacb9bSmrg;;
9426*0bfacb9bSmrg(define_insn "mve_vddupq_m_wb_u<mode>_insn"
9427*0bfacb9bSmrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9428*0bfacb9bSmrg       (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9429*0bfacb9bSmrg		      (match_operand:SI 3 "s_register_operand" "2")
9430*0bfacb9bSmrg		      (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9431*0bfacb9bSmrg		      (match_operand:HI 5 "vpr_register_operand" "Up")]
9432*0bfacb9bSmrg	VDDUPQ_M))
9433*0bfacb9bSmrg  (set (match_operand:SI 2 "s_register_operand" "=Te")
9434*0bfacb9bSmrg       (minus:SI (match_dup 3)
9435*0bfacb9bSmrg		 (match_operand:SI 6 "immediate_operand" "i")))]
9436*0bfacb9bSmrg "TARGET_HAVE_MVE"
9437*0bfacb9bSmrg "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
9438*0bfacb9bSmrg [(set_attr "length""8")])
9439*0bfacb9bSmrg
9440*0bfacb9bSmrg;;
9441*0bfacb9bSmrg;; [vdwdupq_n_u])
9442*0bfacb9bSmrg;;
9443*0bfacb9bSmrg(define_expand "mve_vdwdupq_n_u<mode>"
9444*0bfacb9bSmrg [(match_operand:MVE_2 0 "s_register_operand")
9445*0bfacb9bSmrg  (match_operand:SI 1 "s_register_operand")
9446*0bfacb9bSmrg  (match_operand:DI 2 "s_register_operand")
9447*0bfacb9bSmrg  (match_operand:SI 3 "mve_imm_selective_upto_8")]
9448*0bfacb9bSmrg "TARGET_HAVE_MVE"
9449*0bfacb9bSmrg{
9450*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (SImode);
9451*0bfacb9bSmrg  emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9452*0bfacb9bSmrg					      operands[1], operands[2],
9453*0bfacb9bSmrg					      operands[3]));
9454*0bfacb9bSmrg  DONE;
9455*0bfacb9bSmrg})
9456*0bfacb9bSmrg
9457*0bfacb9bSmrg;;
9458*0bfacb9bSmrg;; [vdwdupq_wb_u])
9459*0bfacb9bSmrg;;
9460*0bfacb9bSmrg(define_expand "mve_vdwdupq_wb_u<mode>"
9461*0bfacb9bSmrg [(match_operand:SI 0 "s_register_operand")
9462*0bfacb9bSmrg  (match_operand:SI 1 "s_register_operand")
9463*0bfacb9bSmrg  (match_operand:DI 2 "s_register_operand")
9464*0bfacb9bSmrg  (match_operand:SI 3 "mve_imm_selective_upto_8")
9465*0bfacb9bSmrg  (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9466*0bfacb9bSmrg "TARGET_HAVE_MVE"
9467*0bfacb9bSmrg{
9468*0bfacb9bSmrg  rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9469*0bfacb9bSmrg  emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9470*0bfacb9bSmrg					      operands[1], operands[2],
9471*0bfacb9bSmrg					      operands[3]));
9472*0bfacb9bSmrg  DONE;
9473*0bfacb9bSmrg})
9474*0bfacb9bSmrg
9475*0bfacb9bSmrg;;
9476*0bfacb9bSmrg;; [vdwdupq_wb_u_insn])
9477*0bfacb9bSmrg;;
9478*0bfacb9bSmrg(define_insn "mve_vdwdupq_wb_u<mode>_insn"
9479*0bfacb9bSmrg  [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9480*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9481*0bfacb9bSmrg		       (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9482*0bfacb9bSmrg		       (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9483*0bfacb9bSmrg	 VDWDUPQ))
9484*0bfacb9bSmrg   (set (match_operand:SI 1 "s_register_operand" "=Te")
9485*0bfacb9bSmrg	(unspec:SI [(match_dup 2)
9486*0bfacb9bSmrg		    (subreg:SI (match_dup 3) 4)
9487*0bfacb9bSmrg		    (match_dup 4)]
9488*0bfacb9bSmrg	 VDWDUPQ))]
9489*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9490*0bfacb9bSmrg  "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9491*0bfacb9bSmrg)
9492*0bfacb9bSmrg
9493*0bfacb9bSmrg;;
9494*0bfacb9bSmrg;; [vdwdupq_m_n_u])
9495*0bfacb9bSmrg;;
9496*0bfacb9bSmrg(define_expand "mve_vdwdupq_m_n_u<mode>"
9497*0bfacb9bSmrg [(match_operand:MVE_2 0 "s_register_operand")
9498*0bfacb9bSmrg  (match_operand:MVE_2 1 "s_register_operand")
9499*0bfacb9bSmrg  (match_operand:SI 2 "s_register_operand")
9500*0bfacb9bSmrg  (match_operand:DI 3 "s_register_operand")
9501*0bfacb9bSmrg  (match_operand:SI 4 "mve_imm_selective_upto_8")
9502*0bfacb9bSmrg  (match_operand:HI 5 "vpr_register_operand")]
9503*0bfacb9bSmrg "TARGET_HAVE_MVE"
9504*0bfacb9bSmrg{
9505*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (SImode);
9506*0bfacb9bSmrg  emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9507*0bfacb9bSmrg						operands[1], operands[2],
9508*0bfacb9bSmrg						operands[3], operands[4],
9509*0bfacb9bSmrg						operands[5]));
9510*0bfacb9bSmrg  DONE;
9511*0bfacb9bSmrg})
9512*0bfacb9bSmrg
9513*0bfacb9bSmrg;;
9514*0bfacb9bSmrg;; [vdwdupq_m_wb_u])
9515*0bfacb9bSmrg;;
9516*0bfacb9bSmrg(define_expand "mve_vdwdupq_m_wb_u<mode>"
9517*0bfacb9bSmrg [(match_operand:SI 0 "s_register_operand")
9518*0bfacb9bSmrg  (match_operand:MVE_2 1 "s_register_operand")
9519*0bfacb9bSmrg  (match_operand:SI 2 "s_register_operand")
9520*0bfacb9bSmrg  (match_operand:DI 3 "s_register_operand")
9521*0bfacb9bSmrg  (match_operand:SI 4 "mve_imm_selective_upto_8")
9522*0bfacb9bSmrg  (match_operand:HI 5 "vpr_register_operand")]
9523*0bfacb9bSmrg "TARGET_HAVE_MVE"
9524*0bfacb9bSmrg{
9525*0bfacb9bSmrg  rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9526*0bfacb9bSmrg  emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9527*0bfacb9bSmrg						operands[1], operands[2],
9528*0bfacb9bSmrg						operands[3], operands[4],
9529*0bfacb9bSmrg						operands[5]));
9530*0bfacb9bSmrg  DONE;
9531*0bfacb9bSmrg})
9532*0bfacb9bSmrg
9533*0bfacb9bSmrg;;
9534*0bfacb9bSmrg;; [vdwdupq_m_wb_u_insn])
9535*0bfacb9bSmrg;;
9536*0bfacb9bSmrg(define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
9537*0bfacb9bSmrg  [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9538*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9539*0bfacb9bSmrg		       (match_operand:SI 3 "s_register_operand" "1")
9540*0bfacb9bSmrg		       (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9541*0bfacb9bSmrg		       (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9542*0bfacb9bSmrg		       (match_operand:HI 6 "vpr_register_operand" "Up")]
9543*0bfacb9bSmrg	 VDWDUPQ_M))
9544*0bfacb9bSmrg   (set (match_operand:SI 1 "s_register_operand" "=Te")
9545*0bfacb9bSmrg	(unspec:SI [(match_dup 2)
9546*0bfacb9bSmrg		    (match_dup 3)
9547*0bfacb9bSmrg		    (subreg:SI (match_dup 4) 4)
9548*0bfacb9bSmrg		    (match_dup 5)
9549*0bfacb9bSmrg		    (match_dup 6)]
9550*0bfacb9bSmrg	 VDWDUPQ_M))
9551*0bfacb9bSmrg  ]
9552*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9553*0bfacb9bSmrg  "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9554*0bfacb9bSmrg  [(set_attr "type" "mve_move")
9555*0bfacb9bSmrg   (set_attr "length""8")])
9556*0bfacb9bSmrg
9557*0bfacb9bSmrg;;
9558*0bfacb9bSmrg;; [viwdupq_n_u])
9559*0bfacb9bSmrg;;
9560*0bfacb9bSmrg(define_expand "mve_viwdupq_n_u<mode>"
9561*0bfacb9bSmrg [(match_operand:MVE_2 0 "s_register_operand")
9562*0bfacb9bSmrg  (match_operand:SI 1 "s_register_operand")
9563*0bfacb9bSmrg  (match_operand:DI 2 "s_register_operand")
9564*0bfacb9bSmrg  (match_operand:SI 3 "mve_imm_selective_upto_8")]
9565*0bfacb9bSmrg "TARGET_HAVE_MVE"
9566*0bfacb9bSmrg{
9567*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (SImode);
9568*0bfacb9bSmrg  emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9569*0bfacb9bSmrg					      operands[1], operands[2],
9570*0bfacb9bSmrg					      operands[3]));
9571*0bfacb9bSmrg  DONE;
9572*0bfacb9bSmrg})
9573*0bfacb9bSmrg
9574*0bfacb9bSmrg;;
9575*0bfacb9bSmrg;; [viwdupq_wb_u])
9576*0bfacb9bSmrg;;
9577*0bfacb9bSmrg(define_expand "mve_viwdupq_wb_u<mode>"
9578*0bfacb9bSmrg [(match_operand:SI 0 "s_register_operand")
9579*0bfacb9bSmrg  (match_operand:SI 1 "s_register_operand")
9580*0bfacb9bSmrg  (match_operand:DI 2 "s_register_operand")
9581*0bfacb9bSmrg  (match_operand:SI 3 "mve_imm_selective_upto_8")
9582*0bfacb9bSmrg  (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9583*0bfacb9bSmrg "TARGET_HAVE_MVE"
9584*0bfacb9bSmrg{
9585*0bfacb9bSmrg  rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9586*0bfacb9bSmrg  emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9587*0bfacb9bSmrg					      operands[1], operands[2],
9588*0bfacb9bSmrg					      operands[3]));
9589*0bfacb9bSmrg  DONE;
9590*0bfacb9bSmrg})
9591*0bfacb9bSmrg
9592*0bfacb9bSmrg;;
9593*0bfacb9bSmrg;; [viwdupq_wb_u_insn])
9594*0bfacb9bSmrg;;
9595*0bfacb9bSmrg(define_insn "mve_viwdupq_wb_u<mode>_insn"
9596*0bfacb9bSmrg  [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9597*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9598*0bfacb9bSmrg		       (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
9599*0bfacb9bSmrg		       (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9600*0bfacb9bSmrg	 VIWDUPQ))
9601*0bfacb9bSmrg   (set (match_operand:SI 1 "s_register_operand" "=Te")
9602*0bfacb9bSmrg	(unspec:SI [(match_dup 2)
9603*0bfacb9bSmrg		    (subreg:SI (match_dup 3) 4)
9604*0bfacb9bSmrg		    (match_dup 4)]
9605*0bfacb9bSmrg	 VIWDUPQ))]
9606*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9607*0bfacb9bSmrg  "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
9608*0bfacb9bSmrg)
9609*0bfacb9bSmrg
9610*0bfacb9bSmrg;;
9611*0bfacb9bSmrg;; [viwdupq_m_n_u])
9612*0bfacb9bSmrg;;
9613*0bfacb9bSmrg(define_expand "mve_viwdupq_m_n_u<mode>"
9614*0bfacb9bSmrg [(match_operand:MVE_2 0 "s_register_operand")
9615*0bfacb9bSmrg  (match_operand:MVE_2 1 "s_register_operand")
9616*0bfacb9bSmrg  (match_operand:SI 2 "s_register_operand")
9617*0bfacb9bSmrg  (match_operand:DI 3 "s_register_operand")
9618*0bfacb9bSmrg  (match_operand:SI 4 "mve_imm_selective_upto_8")
9619*0bfacb9bSmrg  (match_operand:HI 5 "vpr_register_operand")]
9620*0bfacb9bSmrg "TARGET_HAVE_MVE"
9621*0bfacb9bSmrg{
9622*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (SImode);
9623*0bfacb9bSmrg  emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9624*0bfacb9bSmrg						operands[1], operands[2],
9625*0bfacb9bSmrg						operands[3], operands[4],
9626*0bfacb9bSmrg						operands[5]));
9627*0bfacb9bSmrg  DONE;
9628*0bfacb9bSmrg})
9629*0bfacb9bSmrg
9630*0bfacb9bSmrg;;
9631*0bfacb9bSmrg;; [viwdupq_m_wb_u])
9632*0bfacb9bSmrg;;
9633*0bfacb9bSmrg(define_expand "mve_viwdupq_m_wb_u<mode>"
9634*0bfacb9bSmrg [(match_operand:SI 0 "s_register_operand")
9635*0bfacb9bSmrg  (match_operand:MVE_2 1 "s_register_operand")
9636*0bfacb9bSmrg  (match_operand:SI 2 "s_register_operand")
9637*0bfacb9bSmrg  (match_operand:DI 3 "s_register_operand")
9638*0bfacb9bSmrg  (match_operand:SI 4 "mve_imm_selective_upto_8")
9639*0bfacb9bSmrg  (match_operand:HI 5 "vpr_register_operand")]
9640*0bfacb9bSmrg "TARGET_HAVE_MVE"
9641*0bfacb9bSmrg{
9642*0bfacb9bSmrg  rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9643*0bfacb9bSmrg  emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9644*0bfacb9bSmrg						operands[1], operands[2],
9645*0bfacb9bSmrg						operands[3], operands[4],
9646*0bfacb9bSmrg						operands[5]));
9647*0bfacb9bSmrg  DONE;
9648*0bfacb9bSmrg})
9649*0bfacb9bSmrg
9650*0bfacb9bSmrg;;
9651*0bfacb9bSmrg;; [viwdupq_m_wb_u_insn])
9652*0bfacb9bSmrg;;
9653*0bfacb9bSmrg(define_insn "mve_viwdupq_m_wb_u<mode>_insn"
9654*0bfacb9bSmrg  [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9655*0bfacb9bSmrg	(unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
9656*0bfacb9bSmrg		       (match_operand:SI 3 "s_register_operand" "1")
9657*0bfacb9bSmrg		       (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
9658*0bfacb9bSmrg		       (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9659*0bfacb9bSmrg		       (match_operand:HI 6 "vpr_register_operand" "Up")]
9660*0bfacb9bSmrg	 VIWDUPQ_M))
9661*0bfacb9bSmrg   (set (match_operand:SI 1 "s_register_operand" "=Te")
9662*0bfacb9bSmrg	(unspec:SI [(match_dup 2)
9663*0bfacb9bSmrg		    (match_dup 3)
9664*0bfacb9bSmrg		    (subreg:SI (match_dup 4) 4)
9665*0bfacb9bSmrg		    (match_dup 5)
9666*0bfacb9bSmrg		    (match_dup 6)]
9667*0bfacb9bSmrg	 VIWDUPQ_M))
9668*0bfacb9bSmrg  ]
9669*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9670*0bfacb9bSmrg  "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
9671*0bfacb9bSmrg  [(set_attr "type" "mve_move")
9672*0bfacb9bSmrg   (set_attr "length""8")])
9673*0bfacb9bSmrg
9674*0bfacb9bSmrg;;
9675*0bfacb9bSmrg;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u]
9676*0bfacb9bSmrg;;
9677*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si"
9678*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9679*0bfacb9bSmrg	(unspec:BLK
9680*0bfacb9bSmrg		[(match_operand:V4SI 1 "s_register_operand" "0")
9681*0bfacb9bSmrg		 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9682*0bfacb9bSmrg		 (match_operand:V4SI 3 "s_register_operand" "w")]
9683*0bfacb9bSmrg	 VSTRWSBWBQ))
9684*0bfacb9bSmrg   (set (match_operand:V4SI 0 "s_register_operand" "=w")
9685*0bfacb9bSmrg	(unspec:V4SI [(match_dup 1) (match_dup 2)]
9686*0bfacb9bSmrg	 VSTRWSBWBQ))
9687*0bfacb9bSmrg  ]
9688*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9689*0bfacb9bSmrg{
9690*0bfacb9bSmrg   rtx ops[3];
9691*0bfacb9bSmrg   ops[0] = operands[1];
9692*0bfacb9bSmrg   ops[1] = operands[2];
9693*0bfacb9bSmrg   ops[2] = operands[3];
9694*0bfacb9bSmrg   output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9695*0bfacb9bSmrg   return "";
9696*0bfacb9bSmrg}
9697*0bfacb9bSmrg  [(set_attr "length" "4")])
9698*0bfacb9bSmrg
9699*0bfacb9bSmrg;;
9700*0bfacb9bSmrg;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
9701*0bfacb9bSmrg;;
9702*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
9703*0bfacb9bSmrg [(set (mem:BLK (scratch))
9704*0bfacb9bSmrg       (unspec:BLK
9705*0bfacb9bSmrg		[(match_operand:V4SI 1 "s_register_operand" "0")
9706*0bfacb9bSmrg		 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9707*0bfacb9bSmrg		 (match_operand:V4SI 3 "s_register_operand" "w")
9708*0bfacb9bSmrg		 (match_operand:HI 4 "vpr_register_operand")]
9709*0bfacb9bSmrg	VSTRWSBWBQ))
9710*0bfacb9bSmrg   (set (match_operand:V4SI 0 "s_register_operand" "=w")
9711*0bfacb9bSmrg	(unspec:V4SI [(match_dup 1) (match_dup 2)]
9712*0bfacb9bSmrg	 VSTRWSBWBQ))
9713*0bfacb9bSmrg  ]
9714*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9715*0bfacb9bSmrg{
9716*0bfacb9bSmrg   rtx ops[3];
9717*0bfacb9bSmrg   ops[0] = operands[1];
9718*0bfacb9bSmrg   ops[1] = operands[2];
9719*0bfacb9bSmrg   ops[2] = operands[3];
9720*0bfacb9bSmrg   output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9721*0bfacb9bSmrg   return "";
9722*0bfacb9bSmrg}
9723*0bfacb9bSmrg  [(set_attr "length" "8")])
9724*0bfacb9bSmrg
9725*0bfacb9bSmrg;;
9726*0bfacb9bSmrg;; [vstrwq_scatter_base_wb_f]
9727*0bfacb9bSmrg;;
9728*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_base_wb_fv4sf"
9729*0bfacb9bSmrg [(set (mem:BLK (scratch))
9730*0bfacb9bSmrg       (unspec:BLK
9731*0bfacb9bSmrg		[(match_operand:V4SI 1 "s_register_operand" "0")
9732*0bfacb9bSmrg		 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9733*0bfacb9bSmrg		 (match_operand:V4SF 3 "s_register_operand" "w")]
9734*0bfacb9bSmrg	 VSTRWQSBWB_F))
9735*0bfacb9bSmrg   (set (match_operand:V4SI 0 "s_register_operand" "=w")
9736*0bfacb9bSmrg	(unspec:V4SI [(match_dup 1) (match_dup 2)]
9737*0bfacb9bSmrg	 VSTRWQSBWB_F))
9738*0bfacb9bSmrg  ]
9739*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9740*0bfacb9bSmrg{
9741*0bfacb9bSmrg   rtx ops[3];
9742*0bfacb9bSmrg   ops[0] = operands[1];
9743*0bfacb9bSmrg   ops[1] = operands[2];
9744*0bfacb9bSmrg   ops[2] = operands[3];
9745*0bfacb9bSmrg   output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9746*0bfacb9bSmrg   return "";
9747*0bfacb9bSmrg}
9748*0bfacb9bSmrg  [(set_attr "length" "4")])
9749*0bfacb9bSmrg
9750*0bfacb9bSmrg;;
9751*0bfacb9bSmrg;; [vstrwq_scatter_base_wb_p_f]
9752*0bfacb9bSmrg;;
9753*0bfacb9bSmrg(define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf"
9754*0bfacb9bSmrg [(set (mem:BLK (scratch))
9755*0bfacb9bSmrg       (unspec:BLK
9756*0bfacb9bSmrg		[(match_operand:V4SI 1 "s_register_operand" "0")
9757*0bfacb9bSmrg		 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9758*0bfacb9bSmrg		 (match_operand:V4SF 3 "s_register_operand" "w")
9759*0bfacb9bSmrg		 (match_operand:HI 4 "vpr_register_operand")]
9760*0bfacb9bSmrg	VSTRWQSBWB_F))
9761*0bfacb9bSmrg   (set (match_operand:V4SI 0 "s_register_operand" "=w")
9762*0bfacb9bSmrg	(unspec:V4SI [(match_dup 1) (match_dup 2)]
9763*0bfacb9bSmrg	 VSTRWQSBWB_F))
9764*0bfacb9bSmrg  ]
9765*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9766*0bfacb9bSmrg{
9767*0bfacb9bSmrg   rtx ops[3];
9768*0bfacb9bSmrg   ops[0] = operands[1];
9769*0bfacb9bSmrg   ops[1] = operands[2];
9770*0bfacb9bSmrg   ops[2] = operands[3];
9771*0bfacb9bSmrg   output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9772*0bfacb9bSmrg   return "";
9773*0bfacb9bSmrg}
9774*0bfacb9bSmrg  [(set_attr "length" "8")])
9775*0bfacb9bSmrg
9776*0bfacb9bSmrg;;
9777*0bfacb9bSmrg;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
9778*0bfacb9bSmrg;;
9779*0bfacb9bSmrg(define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di"
9780*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9781*0bfacb9bSmrg	(unspec:BLK
9782*0bfacb9bSmrg		[(match_operand:V2DI 1 "s_register_operand" "0")
9783*0bfacb9bSmrg		 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9784*0bfacb9bSmrg		 (match_operand:V2DI 3 "s_register_operand" "w")]
9785*0bfacb9bSmrg	 VSTRDSBWBQ))
9786*0bfacb9bSmrg   (set (match_operand:V2DI 0 "s_register_operand" "=&w")
9787*0bfacb9bSmrg	(unspec:V2DI [(match_dup 1) (match_dup 2)]
9788*0bfacb9bSmrg	 VSTRDSBWBQ))
9789*0bfacb9bSmrg  ]
9790*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9791*0bfacb9bSmrg{
9792*0bfacb9bSmrg   rtx ops[3];
9793*0bfacb9bSmrg   ops[0] = operands[1];
9794*0bfacb9bSmrg   ops[1] = operands[2];
9795*0bfacb9bSmrg   ops[2] = operands[3];
9796*0bfacb9bSmrg   output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
9797*0bfacb9bSmrg   return "";
9798*0bfacb9bSmrg}
9799*0bfacb9bSmrg  [(set_attr "length" "4")])
9800*0bfacb9bSmrg
9801*0bfacb9bSmrg;;
9802*0bfacb9bSmrg;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
9803*0bfacb9bSmrg;;
9804*0bfacb9bSmrg(define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
9805*0bfacb9bSmrg  [(set (mem:BLK (scratch))
9806*0bfacb9bSmrg	(unspec:BLK
9807*0bfacb9bSmrg		[(match_operand:V2DI 1 "s_register_operand" "0")
9808*0bfacb9bSmrg		 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9809*0bfacb9bSmrg		 (match_operand:V2DI 3 "s_register_operand" "w")
9810*0bfacb9bSmrg		 (match_operand:HI 4 "vpr_register_operand")]
9811*0bfacb9bSmrg	 VSTRDSBWBQ))
9812*0bfacb9bSmrg   (set (match_operand:V2DI 0 "s_register_operand" "=w")
9813*0bfacb9bSmrg	(unspec:V2DI [(match_dup 1) (match_dup 2)]
9814*0bfacb9bSmrg	 VSTRDSBWBQ))
9815*0bfacb9bSmrg  ]
9816*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9817*0bfacb9bSmrg{
9818*0bfacb9bSmrg   rtx ops[3];
9819*0bfacb9bSmrg   ops[0] = operands[1];
9820*0bfacb9bSmrg   ops[1] = operands[2];
9821*0bfacb9bSmrg   ops[2] = operands[3];
9822*0bfacb9bSmrg   output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops);
9823*0bfacb9bSmrg   return "";
9824*0bfacb9bSmrg}
9825*0bfacb9bSmrg  [(set_attr "length" "8")])
9826*0bfacb9bSmrg
9827*0bfacb9bSmrg(define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
9828*0bfacb9bSmrg  [(match_operand:V4SI 0 "s_register_operand")
9829*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9830*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
9831*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9832*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9833*0bfacb9bSmrg{
9834*0bfacb9bSmrg  rtx ignore_result = gen_reg_rtx (V4SImode);
9835*0bfacb9bSmrg  emit_insn (
9836*0bfacb9bSmrg  gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0],
9837*0bfacb9bSmrg						 operands[1], operands[2]));
9838*0bfacb9bSmrg  DONE;
9839*0bfacb9bSmrg})
9840*0bfacb9bSmrg
9841*0bfacb9bSmrg(define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si"
9842*0bfacb9bSmrg  [(match_operand:V4SI 0 "s_register_operand")
9843*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9844*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
9845*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9846*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9847*0bfacb9bSmrg{
9848*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (V4SImode);
9849*0bfacb9bSmrg  emit_insn (
9850*0bfacb9bSmrg  gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
9851*0bfacb9bSmrg						 operands[1], operands[2]));
9852*0bfacb9bSmrg  DONE;
9853*0bfacb9bSmrg})
9854*0bfacb9bSmrg
9855*0bfacb9bSmrg;;
9856*0bfacb9bSmrg;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
9857*0bfacb9bSmrg;;
9858*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
9859*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9860*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9861*0bfacb9bSmrg		      (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9862*0bfacb9bSmrg		      (mem:BLK (scratch))]
9863*0bfacb9bSmrg	 VLDRWGBWBQ))
9864*0bfacb9bSmrg   (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9865*0bfacb9bSmrg	(unspec:V4SI [(match_dup 2) (match_dup 3)]
9866*0bfacb9bSmrg	 VLDRWGBWBQ))
9867*0bfacb9bSmrg  ]
9868*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9869*0bfacb9bSmrg{
9870*0bfacb9bSmrg   rtx ops[3];
9871*0bfacb9bSmrg   ops[0] = operands[0];
9872*0bfacb9bSmrg   ops[1] = operands[2];
9873*0bfacb9bSmrg   ops[2] = operands[3];
9874*0bfacb9bSmrg   output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9875*0bfacb9bSmrg   return "";
9876*0bfacb9bSmrg}
9877*0bfacb9bSmrg  [(set_attr "length" "4")])
9878*0bfacb9bSmrg
9879*0bfacb9bSmrg(define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
9880*0bfacb9bSmrg  [(match_operand:V4SI 0 "s_register_operand")
9881*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9882*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
9883*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
9884*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9885*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9886*0bfacb9bSmrg{
9887*0bfacb9bSmrg  rtx ignore_result = gen_reg_rtx (V4SImode);
9888*0bfacb9bSmrg  emit_insn (
9889*0bfacb9bSmrg  gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0],
9890*0bfacb9bSmrg						   operands[1], operands[2],
9891*0bfacb9bSmrg						   operands[3]));
9892*0bfacb9bSmrg  DONE;
9893*0bfacb9bSmrg})
9894*0bfacb9bSmrg(define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si"
9895*0bfacb9bSmrg  [(match_operand:V4SI 0 "s_register_operand")
9896*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9897*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
9898*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
9899*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9900*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9901*0bfacb9bSmrg{
9902*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (V4SImode);
9903*0bfacb9bSmrg  emit_insn (
9904*0bfacb9bSmrg  gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
9905*0bfacb9bSmrg						   operands[1], operands[2],
9906*0bfacb9bSmrg						   operands[3]));
9907*0bfacb9bSmrg  DONE;
9908*0bfacb9bSmrg})
9909*0bfacb9bSmrg
9910*0bfacb9bSmrg;;
9911*0bfacb9bSmrg;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
9912*0bfacb9bSmrg;;
9913*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
9914*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9915*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9916*0bfacb9bSmrg		      (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9917*0bfacb9bSmrg		      (match_operand:HI 4 "vpr_register_operand" "Up")
9918*0bfacb9bSmrg		      (mem:BLK (scratch))]
9919*0bfacb9bSmrg	 VLDRWGBWBQ))
9920*0bfacb9bSmrg   (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9921*0bfacb9bSmrg	(unspec:V4SI [(match_dup 2) (match_dup 3)]
9922*0bfacb9bSmrg	 VLDRWGBWBQ))
9923*0bfacb9bSmrg  ]
9924*0bfacb9bSmrg  "TARGET_HAVE_MVE"
9925*0bfacb9bSmrg{
9926*0bfacb9bSmrg   rtx ops[3];
9927*0bfacb9bSmrg   ops[0] = operands[0];
9928*0bfacb9bSmrg   ops[1] = operands[2];
9929*0bfacb9bSmrg   ops[2] = operands[3];
9930*0bfacb9bSmrg   output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
9931*0bfacb9bSmrg   return "";
9932*0bfacb9bSmrg}
9933*0bfacb9bSmrg  [(set_attr "length" "8")])
9934*0bfacb9bSmrg
9935*0bfacb9bSmrg(define_expand "mve_vldrwq_gather_base_wb_fv4sf"
9936*0bfacb9bSmrg  [(match_operand:V4SI 0 "s_register_operand")
9937*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9938*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
9939*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9940*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9941*0bfacb9bSmrg{
9942*0bfacb9bSmrg  rtx ignore_result = gen_reg_rtx (V4SFmode);
9943*0bfacb9bSmrg  emit_insn (
9944*0bfacb9bSmrg  gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0],
9945*0bfacb9bSmrg					    operands[1], operands[2]));
9946*0bfacb9bSmrg  DONE;
9947*0bfacb9bSmrg})
9948*0bfacb9bSmrg
9949*0bfacb9bSmrg(define_expand "mve_vldrwq_gather_base_nowb_fv4sf"
9950*0bfacb9bSmrg  [(match_operand:V4SF 0 "s_register_operand")
9951*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9952*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
9953*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9954*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9955*0bfacb9bSmrg{
9956*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (V4SImode);
9957*0bfacb9bSmrg  emit_insn (
9958*0bfacb9bSmrg  gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
9959*0bfacb9bSmrg					    operands[1], operands[2]));
9960*0bfacb9bSmrg  DONE;
9961*0bfacb9bSmrg})
9962*0bfacb9bSmrg
9963*0bfacb9bSmrg;;
9964*0bfacb9bSmrg;; [vldrwq_gather_base_wb_f]
9965*0bfacb9bSmrg;;
9966*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
9967*0bfacb9bSmrg  [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9968*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
9969*0bfacb9bSmrg		      (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9970*0bfacb9bSmrg		      (mem:BLK (scratch))]
9971*0bfacb9bSmrg	 VLDRWQGBWB_F))
9972*0bfacb9bSmrg   (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9973*0bfacb9bSmrg	(unspec:V4SI [(match_dup 2) (match_dup 3)]
9974*0bfacb9bSmrg	 VLDRWQGBWB_F))
9975*0bfacb9bSmrg  ]
9976*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9977*0bfacb9bSmrg{
9978*0bfacb9bSmrg   rtx ops[3];
9979*0bfacb9bSmrg   ops[0] = operands[0];
9980*0bfacb9bSmrg   ops[1] = operands[2];
9981*0bfacb9bSmrg   ops[2] = operands[3];
9982*0bfacb9bSmrg   output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9983*0bfacb9bSmrg   return "";
9984*0bfacb9bSmrg}
9985*0bfacb9bSmrg  [(set_attr "length" "4")])
9986*0bfacb9bSmrg
9987*0bfacb9bSmrg(define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
9988*0bfacb9bSmrg  [(match_operand:V4SI 0 "s_register_operand")
9989*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
9990*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
9991*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
9992*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9993*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9994*0bfacb9bSmrg{
9995*0bfacb9bSmrg  rtx ignore_result = gen_reg_rtx (V4SFmode);
9996*0bfacb9bSmrg  emit_insn (
9997*0bfacb9bSmrg  gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0],
9998*0bfacb9bSmrg					      operands[1], operands[2],
9999*0bfacb9bSmrg					      operands[3]));
10000*0bfacb9bSmrg  DONE;
10001*0bfacb9bSmrg})
10002*0bfacb9bSmrg
10003*0bfacb9bSmrg(define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf"
10004*0bfacb9bSmrg  [(match_operand:V4SF 0 "s_register_operand")
10005*0bfacb9bSmrg   (match_operand:V4SI 1 "s_register_operand")
10006*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
10007*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
10008*0bfacb9bSmrg   (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10009*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10010*0bfacb9bSmrg{
10011*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (V4SImode);
10012*0bfacb9bSmrg  emit_insn (
10013*0bfacb9bSmrg  gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
10014*0bfacb9bSmrg					      operands[1], operands[2],
10015*0bfacb9bSmrg					      operands[3]));
10016*0bfacb9bSmrg  DONE;
10017*0bfacb9bSmrg})
10018*0bfacb9bSmrg
10019*0bfacb9bSmrg;;
10020*0bfacb9bSmrg;; [vldrwq_gather_base_wb_z_f]
10021*0bfacb9bSmrg;;
10022*0bfacb9bSmrg(define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
10023*0bfacb9bSmrg  [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10024*0bfacb9bSmrg	(unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10025*0bfacb9bSmrg		      (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10026*0bfacb9bSmrg		      (match_operand:HI 4 "vpr_register_operand" "Up")
10027*0bfacb9bSmrg		      (mem:BLK (scratch))]
10028*0bfacb9bSmrg	 VLDRWQGBWB_F))
10029*0bfacb9bSmrg   (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10030*0bfacb9bSmrg	(unspec:V4SI [(match_dup 2) (match_dup 3)]
10031*0bfacb9bSmrg	 VLDRWQGBWB_F))
10032*0bfacb9bSmrg  ]
10033*0bfacb9bSmrg  "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10034*0bfacb9bSmrg{
10035*0bfacb9bSmrg   rtx ops[3];
10036*0bfacb9bSmrg   ops[0] = operands[0];
10037*0bfacb9bSmrg   ops[1] = operands[2];
10038*0bfacb9bSmrg   ops[2] = operands[3];
10039*0bfacb9bSmrg   output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
10040*0bfacb9bSmrg   return "";
10041*0bfacb9bSmrg}
10042*0bfacb9bSmrg  [(set_attr "length" "8")])
10043*0bfacb9bSmrg
10044*0bfacb9bSmrg(define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
10045*0bfacb9bSmrg  [(match_operand:V2DI 0 "s_register_operand")
10046*0bfacb9bSmrg   (match_operand:V2DI 1 "s_register_operand")
10047*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
10048*0bfacb9bSmrg   (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10049*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10050*0bfacb9bSmrg{
10051*0bfacb9bSmrg  rtx ignore_result = gen_reg_rtx (V2DImode);
10052*0bfacb9bSmrg  emit_insn (
10053*0bfacb9bSmrg  gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0],
10054*0bfacb9bSmrg						 operands[1], operands[2]));
10055*0bfacb9bSmrg  DONE;
10056*0bfacb9bSmrg})
10057*0bfacb9bSmrg
10058*0bfacb9bSmrg(define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di"
10059*0bfacb9bSmrg  [(match_operand:V2DI 0 "s_register_operand")
10060*0bfacb9bSmrg   (match_operand:V2DI 1 "s_register_operand")
10061*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
10062*0bfacb9bSmrg   (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10063*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10064*0bfacb9bSmrg{
10065*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (V2DImode);
10066*0bfacb9bSmrg  emit_insn (
10067*0bfacb9bSmrg  gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
10068*0bfacb9bSmrg						 operands[1], operands[2]));
10069*0bfacb9bSmrg  DONE;
10070*0bfacb9bSmrg})
10071*0bfacb9bSmrg
10072*0bfacb9bSmrg
10073*0bfacb9bSmrg;;
10074*0bfacb9bSmrg;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
10075*0bfacb9bSmrg;;
10076*0bfacb9bSmrg(define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn"
10077*0bfacb9bSmrg  [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10078*0bfacb9bSmrg	(unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10079*0bfacb9bSmrg		      (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10080*0bfacb9bSmrg		      (mem:BLK (scratch))]
10081*0bfacb9bSmrg	 VLDRDGBWBQ))
10082*0bfacb9bSmrg   (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10083*0bfacb9bSmrg	(unspec:V2DI [(match_dup 2) (match_dup 3)]
10084*0bfacb9bSmrg	 VLDRDGBWBQ))
10085*0bfacb9bSmrg  ]
10086*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10087*0bfacb9bSmrg{
10088*0bfacb9bSmrg   rtx ops[3];
10089*0bfacb9bSmrg   ops[0] = operands[0];
10090*0bfacb9bSmrg   ops[1] = operands[2];
10091*0bfacb9bSmrg   ops[2] = operands[3];
10092*0bfacb9bSmrg   output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
10093*0bfacb9bSmrg   return "";
10094*0bfacb9bSmrg}
10095*0bfacb9bSmrg  [(set_attr "length" "4")])
10096*0bfacb9bSmrg
10097*0bfacb9bSmrg(define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
10098*0bfacb9bSmrg  [(match_operand:V2DI 0 "s_register_operand")
10099*0bfacb9bSmrg   (match_operand:V2DI 1 "s_register_operand")
10100*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
10101*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
10102*0bfacb9bSmrg   (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10103*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10104*0bfacb9bSmrg{
10105*0bfacb9bSmrg  rtx ignore_result = gen_reg_rtx (V2DImode);
10106*0bfacb9bSmrg  emit_insn (
10107*0bfacb9bSmrg  gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0],
10108*0bfacb9bSmrg						   operands[1], operands[2],
10109*0bfacb9bSmrg						   operands[3]));
10110*0bfacb9bSmrg  DONE;
10111*0bfacb9bSmrg})
10112*0bfacb9bSmrg
10113*0bfacb9bSmrg(define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di"
10114*0bfacb9bSmrg  [(match_operand:V2DI 0 "s_register_operand")
10115*0bfacb9bSmrg   (match_operand:V2DI 1 "s_register_operand")
10116*0bfacb9bSmrg   (match_operand:SI 2 "mve_vldrd_immediate")
10117*0bfacb9bSmrg   (match_operand:HI 3 "vpr_register_operand")
10118*0bfacb9bSmrg   (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10119*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10120*0bfacb9bSmrg{
10121*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (V2DImode);
10122*0bfacb9bSmrg  emit_insn (
10123*0bfacb9bSmrg  gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
10124*0bfacb9bSmrg						   operands[1], operands[2],
10125*0bfacb9bSmrg						   operands[3]));
10126*0bfacb9bSmrg  DONE;
10127*0bfacb9bSmrg})
10128*0bfacb9bSmrg
10129*0bfacb9bSmrg(define_insn "get_fpscr_nzcvqc"
10130*0bfacb9bSmrg [(set (match_operand:SI 0 "register_operand" "=r")
10131*0bfacb9bSmrg   (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
10132*0bfacb9bSmrg "TARGET_HAVE_MVE"
10133*0bfacb9bSmrg "vmrs\\t%0, FPSCR_nzcvqc"
10134*0bfacb9bSmrg  [(set_attr "type" "mve_move")])
10135*0bfacb9bSmrg
10136*0bfacb9bSmrg(define_insn "set_fpscr_nzcvqc"
10137*0bfacb9bSmrg [(set (reg:SI VFPCC_REGNUM)
10138*0bfacb9bSmrg   (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
10139*0bfacb9bSmrg    VUNSPEC_SET_FPSCR_NZCVQC))]
10140*0bfacb9bSmrg "TARGET_HAVE_MVE"
10141*0bfacb9bSmrg "vmsr\\tFPSCR_nzcvqc, %0"
10142*0bfacb9bSmrg  [(set_attr "type" "mve_move")])
10143*0bfacb9bSmrg
10144*0bfacb9bSmrg;;
10145*0bfacb9bSmrg;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
10146*0bfacb9bSmrg;;
10147*0bfacb9bSmrg(define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
10148*0bfacb9bSmrg  [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10149*0bfacb9bSmrg	(unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10150*0bfacb9bSmrg		      (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10151*0bfacb9bSmrg		      (match_operand:HI 4 "vpr_register_operand" "Up")
10152*0bfacb9bSmrg		      (mem:BLK (scratch))]
10153*0bfacb9bSmrg	 VLDRDGBWBQ))
10154*0bfacb9bSmrg   (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10155*0bfacb9bSmrg	(unspec:V2DI [(match_dup 2) (match_dup 3)]
10156*0bfacb9bSmrg	 VLDRDGBWBQ))
10157*0bfacb9bSmrg  ]
10158*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10159*0bfacb9bSmrg{
10160*0bfacb9bSmrg   rtx ops[3];
10161*0bfacb9bSmrg   ops[0] = operands[0];
10162*0bfacb9bSmrg   ops[1] = operands[2];
10163*0bfacb9bSmrg   ops[2] = operands[3];
10164*0bfacb9bSmrg   output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops);
10165*0bfacb9bSmrg   return "";
10166*0bfacb9bSmrg}
10167*0bfacb9bSmrg  [(set_attr "length" "8")])
10168*0bfacb9bSmrg;;
10169*0bfacb9bSmrg;; [vadciq_m_s, vadciq_m_u])
10170*0bfacb9bSmrg;;
10171*0bfacb9bSmrg(define_insn "mve_vadciq_m_<supf>v4si"
10172*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10173*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10174*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")
10175*0bfacb9bSmrg		      (match_operand:V4SI 3 "s_register_operand" "w")
10176*0bfacb9bSmrg		      (match_operand:HI 4 "vpr_register_operand" "Up")]
10177*0bfacb9bSmrg	 VADCIQ_M))
10178*0bfacb9bSmrg   (set (reg:SI VFPCC_REGNUM)
10179*0bfacb9bSmrg	(unspec:SI [(const_int 0)]
10180*0bfacb9bSmrg	 VADCIQ_M))
10181*0bfacb9bSmrg  ]
10182*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10183*0bfacb9bSmrg  "vpst\;vadcit.i32\t%q0, %q2, %q3"
10184*0bfacb9bSmrg  [(set_attr "type" "mve_move")
10185*0bfacb9bSmrg   (set_attr "length" "8")])
10186*0bfacb9bSmrg
10187*0bfacb9bSmrg;;
10188*0bfacb9bSmrg;; [vadciq_u, vadciq_s])
10189*0bfacb9bSmrg;;
10190*0bfacb9bSmrg(define_insn "mve_vadciq_<supf>v4si"
10191*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10192*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10193*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")]
10194*0bfacb9bSmrg	 VADCIQ))
10195*0bfacb9bSmrg   (set (reg:SI VFPCC_REGNUM)
10196*0bfacb9bSmrg	(unspec:SI [(const_int 0)]
10197*0bfacb9bSmrg	 VADCIQ))
10198*0bfacb9bSmrg  ]
10199*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10200*0bfacb9bSmrg  "vadci.i32\t%q0, %q1, %q2"
10201*0bfacb9bSmrg  [(set_attr "type" "mve_move")
10202*0bfacb9bSmrg   (set_attr "length" "4")])
10203*0bfacb9bSmrg
10204*0bfacb9bSmrg;;
10205*0bfacb9bSmrg;; [vadcq_m_s, vadcq_m_u])
10206*0bfacb9bSmrg;;
10207*0bfacb9bSmrg(define_insn "mve_vadcq_m_<supf>v4si"
10208*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10209*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10210*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")
10211*0bfacb9bSmrg		      (match_operand:V4SI 3 "s_register_operand" "w")
10212*0bfacb9bSmrg		      (match_operand:HI 4 "vpr_register_operand" "Up")]
10213*0bfacb9bSmrg	 VADCQ_M))
10214*0bfacb9bSmrg   (set (reg:SI VFPCC_REGNUM)
10215*0bfacb9bSmrg	(unspec:SI [(reg:SI VFPCC_REGNUM)]
10216*0bfacb9bSmrg	 VADCQ_M))
10217*0bfacb9bSmrg  ]
10218*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10219*0bfacb9bSmrg  "vpst\;vadct.i32\t%q0, %q2, %q3"
10220*0bfacb9bSmrg  [(set_attr "type" "mve_move")
10221*0bfacb9bSmrg   (set_attr "length" "8")])
10222*0bfacb9bSmrg
10223*0bfacb9bSmrg;;
10224*0bfacb9bSmrg;; [vadcq_u, vadcq_s])
10225*0bfacb9bSmrg;;
10226*0bfacb9bSmrg(define_insn "mve_vadcq_<supf>v4si"
10227*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10228*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10229*0bfacb9bSmrg		       (match_operand:V4SI 2 "s_register_operand" "w")]
10230*0bfacb9bSmrg	 VADCQ))
10231*0bfacb9bSmrg   (set (reg:SI VFPCC_REGNUM)
10232*0bfacb9bSmrg	(unspec:SI [(reg:SI VFPCC_REGNUM)]
10233*0bfacb9bSmrg	 VADCQ))
10234*0bfacb9bSmrg  ]
10235*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10236*0bfacb9bSmrg  "vadc.i32\t%q0, %q1, %q2"
10237*0bfacb9bSmrg  [(set_attr "type" "mve_move")
10238*0bfacb9bSmrg   (set_attr "length" "4")
10239*0bfacb9bSmrg   (set_attr "conds" "set")])
10240*0bfacb9bSmrg
10241*0bfacb9bSmrg;;
10242*0bfacb9bSmrg;; [vsbciq_m_u, vsbciq_m_s])
10243*0bfacb9bSmrg;;
10244*0bfacb9bSmrg(define_insn "mve_vsbciq_m_<supf>v4si"
10245*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10246*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10247*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")
10248*0bfacb9bSmrg		      (match_operand:V4SI 3 "s_register_operand" "w")
10249*0bfacb9bSmrg		      (match_operand:HI 4 "vpr_register_operand" "Up")]
10250*0bfacb9bSmrg	 VSBCIQ_M))
10251*0bfacb9bSmrg   (set (reg:SI VFPCC_REGNUM)
10252*0bfacb9bSmrg	(unspec:SI [(const_int 0)]
10253*0bfacb9bSmrg	 VSBCIQ_M))
10254*0bfacb9bSmrg  ]
10255*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10256*0bfacb9bSmrg  "vpst\;vsbcit.i32\t%q0, %q2, %q3"
10257*0bfacb9bSmrg  [(set_attr "type" "mve_move")
10258*0bfacb9bSmrg   (set_attr "length" "8")])
10259*0bfacb9bSmrg
10260*0bfacb9bSmrg;;
10261*0bfacb9bSmrg;; [vsbciq_s, vsbciq_u])
10262*0bfacb9bSmrg;;
10263*0bfacb9bSmrg(define_insn "mve_vsbciq_<supf>v4si"
10264*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10265*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10266*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")]
10267*0bfacb9bSmrg	 VSBCIQ))
10268*0bfacb9bSmrg   (set (reg:SI VFPCC_REGNUM)
10269*0bfacb9bSmrg	(unspec:SI [(const_int 0)]
10270*0bfacb9bSmrg	 VSBCIQ))
10271*0bfacb9bSmrg  ]
10272*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10273*0bfacb9bSmrg  "vsbci.i32\t%q0, %q1, %q2"
10274*0bfacb9bSmrg  [(set_attr "type" "mve_move")
10275*0bfacb9bSmrg   (set_attr "length" "4")])
10276*0bfacb9bSmrg
10277*0bfacb9bSmrg;;
10278*0bfacb9bSmrg;; [vsbcq_m_u, vsbcq_m_s])
10279*0bfacb9bSmrg;;
10280*0bfacb9bSmrg(define_insn "mve_vsbcq_m_<supf>v4si"
10281*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10282*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10283*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")
10284*0bfacb9bSmrg		      (match_operand:V4SI 3 "s_register_operand" "w")
10285*0bfacb9bSmrg		      (match_operand:HI 4 "vpr_register_operand" "Up")]
10286*0bfacb9bSmrg	 VSBCQ_M))
10287*0bfacb9bSmrg   (set (reg:SI VFPCC_REGNUM)
10288*0bfacb9bSmrg	(unspec:SI [(reg:SI VFPCC_REGNUM)]
10289*0bfacb9bSmrg	 VSBCQ_M))
10290*0bfacb9bSmrg  ]
10291*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10292*0bfacb9bSmrg  "vpst\;vsbct.i32\t%q0, %q2, %q3"
10293*0bfacb9bSmrg  [(set_attr "type" "mve_move")
10294*0bfacb9bSmrg   (set_attr "length" "8")])
10295*0bfacb9bSmrg
10296*0bfacb9bSmrg;;
10297*0bfacb9bSmrg;; [vsbcq_s, vsbcq_u])
10298*0bfacb9bSmrg;;
10299*0bfacb9bSmrg(define_insn "mve_vsbcq_<supf>v4si"
10300*0bfacb9bSmrg  [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10301*0bfacb9bSmrg	(unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10302*0bfacb9bSmrg		      (match_operand:V4SI 2 "s_register_operand" "w")]
10303*0bfacb9bSmrg	 VSBCQ))
10304*0bfacb9bSmrg   (set (reg:SI VFPCC_REGNUM)
10305*0bfacb9bSmrg	(unspec:SI [(reg:SI VFPCC_REGNUM)]
10306*0bfacb9bSmrg	 VSBCQ))
10307*0bfacb9bSmrg  ]
10308*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10309*0bfacb9bSmrg  "vsbc.i32\t%q0, %q1, %q2"
10310*0bfacb9bSmrg  [(set_attr "type" "mve_move")
10311*0bfacb9bSmrg   (set_attr "length" "4")])
10312*0bfacb9bSmrg
10313*0bfacb9bSmrg;;
10314*0bfacb9bSmrg;; [vst2q])
10315*0bfacb9bSmrg;;
10316*0bfacb9bSmrg(define_insn "mve_vst2q<mode>"
10317*0bfacb9bSmrg  [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
10318*0bfacb9bSmrg	(unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
10319*0bfacb9bSmrg		    (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10320*0bfacb9bSmrg	 VST2Q))
10321*0bfacb9bSmrg  ]
10322*0bfacb9bSmrg  "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10323*0bfacb9bSmrg   || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10324*0bfacb9bSmrg{
10325*0bfacb9bSmrg   rtx ops[4];
10326*0bfacb9bSmrg   int regno = REGNO (operands[1]);
10327*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
10328*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno + 4);
10329*0bfacb9bSmrg   rtx reg  = operands[0];
10330*0bfacb9bSmrg   while (reg && !REG_P (reg))
10331*0bfacb9bSmrg    reg = XEXP (reg, 0);
10332*0bfacb9bSmrg   gcc_assert (REG_P (reg));
10333*0bfacb9bSmrg   ops[2] = reg;
10334*0bfacb9bSmrg   ops[3] = operands[0];
10335*0bfacb9bSmrg   output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10336*0bfacb9bSmrg		    "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10337*0bfacb9bSmrg   return "";
10338*0bfacb9bSmrg}
10339*0bfacb9bSmrg  [(set_attr "length" "8")])
10340*0bfacb9bSmrg
10341*0bfacb9bSmrg;;
10342*0bfacb9bSmrg;; [vld2q])
10343*0bfacb9bSmrg;;
10344*0bfacb9bSmrg(define_insn "mve_vld2q<mode>"
10345*0bfacb9bSmrg  [(set (match_operand:OI 0 "s_register_operand" "=w")
10346*0bfacb9bSmrg	(unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
10347*0bfacb9bSmrg		    (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10348*0bfacb9bSmrg	 VLD2Q))
10349*0bfacb9bSmrg  ]
10350*0bfacb9bSmrg  "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10351*0bfacb9bSmrg   || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10352*0bfacb9bSmrg{
10353*0bfacb9bSmrg   rtx ops[4];
10354*0bfacb9bSmrg   int regno = REGNO (operands[0]);
10355*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
10356*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno + 4);
10357*0bfacb9bSmrg   rtx reg  = operands[1];
10358*0bfacb9bSmrg   while (reg && !REG_P (reg))
10359*0bfacb9bSmrg    reg = XEXP (reg, 0);
10360*0bfacb9bSmrg   gcc_assert (REG_P (reg));
10361*0bfacb9bSmrg   ops[2] = reg;
10362*0bfacb9bSmrg   ops[3] = operands[1];
10363*0bfacb9bSmrg   output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10364*0bfacb9bSmrg		    "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10365*0bfacb9bSmrg   return "";
10366*0bfacb9bSmrg}
10367*0bfacb9bSmrg  [(set_attr "length" "8")])
10368*0bfacb9bSmrg
10369*0bfacb9bSmrg;;
10370*0bfacb9bSmrg;; [vld4q])
10371*0bfacb9bSmrg;;
10372*0bfacb9bSmrg(define_insn "mve_vld4q<mode>"
10373*0bfacb9bSmrg  [(set (match_operand:XI 0 "s_register_operand" "=w")
10374*0bfacb9bSmrg	(unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
10375*0bfacb9bSmrg		    (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10376*0bfacb9bSmrg	 VLD4Q))
10377*0bfacb9bSmrg  ]
10378*0bfacb9bSmrg  "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10379*0bfacb9bSmrg   || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10380*0bfacb9bSmrg{
10381*0bfacb9bSmrg   rtx ops[6];
10382*0bfacb9bSmrg   int regno = REGNO (operands[0]);
10383*0bfacb9bSmrg   ops[0] = gen_rtx_REG (TImode, regno);
10384*0bfacb9bSmrg   ops[1] = gen_rtx_REG (TImode, regno+4);
10385*0bfacb9bSmrg   ops[2] = gen_rtx_REG (TImode, regno+8);
10386*0bfacb9bSmrg   ops[3] = gen_rtx_REG (TImode, regno + 12);
10387*0bfacb9bSmrg   rtx reg  = operands[1];
10388*0bfacb9bSmrg   while (reg && !REG_P (reg))
10389*0bfacb9bSmrg    reg = XEXP (reg, 0);
10390*0bfacb9bSmrg   gcc_assert (REG_P (reg));
10391*0bfacb9bSmrg   ops[4] = reg;
10392*0bfacb9bSmrg   ops[5] = operands[1];
10393*0bfacb9bSmrg   output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10394*0bfacb9bSmrg		    "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10395*0bfacb9bSmrg		    "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10396*0bfacb9bSmrg		    "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
10397*0bfacb9bSmrg   return "";
10398*0bfacb9bSmrg}
10399*0bfacb9bSmrg  [(set_attr "length" "16")])
10400*0bfacb9bSmrg;;
10401*0bfacb9bSmrg;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
10402*0bfacb9bSmrg;;
10403*0bfacb9bSmrg(define_insn "mve_vec_extract<mode><V_elem_l>"
10404*0bfacb9bSmrg [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r")
10405*0bfacb9bSmrg   (vec_select:<V_elem>
10406*0bfacb9bSmrg    (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
10407*0bfacb9bSmrg    (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10408*0bfacb9bSmrg  "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10409*0bfacb9bSmrg   || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10410*0bfacb9bSmrg{
10411*0bfacb9bSmrg  if (BYTES_BIG_ENDIAN)
10412*0bfacb9bSmrg    {
10413*0bfacb9bSmrg      int elt = INTVAL (operands[2]);
10414*0bfacb9bSmrg      elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10415*0bfacb9bSmrg      operands[2] = GEN_INT (elt);
10416*0bfacb9bSmrg    }
10417*0bfacb9bSmrg  return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
10418*0bfacb9bSmrg}
10419*0bfacb9bSmrg [(set_attr "type" "mve_move")])
10420*0bfacb9bSmrg
10421*0bfacb9bSmrg(define_insn "mve_vec_extractv2didi"
10422*0bfacb9bSmrg [(set (match_operand:DI 0 "nonimmediate_operand" "=r")
10423*0bfacb9bSmrg   (vec_select:DI
10424*0bfacb9bSmrg    (match_operand:V2DI 1 "s_register_operand" "w")
10425*0bfacb9bSmrg    (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10426*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10427*0bfacb9bSmrg{
10428*0bfacb9bSmrg  int elt = INTVAL (operands[2]);
10429*0bfacb9bSmrg  if (BYTES_BIG_ENDIAN)
10430*0bfacb9bSmrg    elt = 1 - elt;
10431*0bfacb9bSmrg
10432*0bfacb9bSmrg  if (elt == 0)
10433*0bfacb9bSmrg   return "vmov\t%Q0, %R0, %e1";
10434*0bfacb9bSmrg  else
10435*0bfacb9bSmrg   return "vmov\t%Q0, %R0, %f1";
10436*0bfacb9bSmrg}
10437*0bfacb9bSmrg [(set_attr "type" "mve_move")])
10438*0bfacb9bSmrg
10439*0bfacb9bSmrg(define_insn "*mve_vec_extract_sext_internal<mode>"
10440*0bfacb9bSmrg [(set (match_operand:SI 0 "s_register_operand" "=r")
10441*0bfacb9bSmrg   (sign_extend:SI
10442*0bfacb9bSmrg    (vec_select:<V_elem>
10443*0bfacb9bSmrg     (match_operand:MVE_2 1 "s_register_operand" "w")
10444*0bfacb9bSmrg     (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10445*0bfacb9bSmrg  "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10446*0bfacb9bSmrg   || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10447*0bfacb9bSmrg{
10448*0bfacb9bSmrg  if (BYTES_BIG_ENDIAN)
10449*0bfacb9bSmrg    {
10450*0bfacb9bSmrg      int elt = INTVAL (operands[2]);
10451*0bfacb9bSmrg      elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10452*0bfacb9bSmrg      operands[2] = GEN_INT (elt);
10453*0bfacb9bSmrg    }
10454*0bfacb9bSmrg  return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
10455*0bfacb9bSmrg}
10456*0bfacb9bSmrg [(set_attr "type" "mve_move")])
10457*0bfacb9bSmrg
10458*0bfacb9bSmrg(define_insn "*mve_vec_extract_zext_internal<mode>"
10459*0bfacb9bSmrg [(set (match_operand:SI 0 "s_register_operand" "=r")
10460*0bfacb9bSmrg   (zero_extend:SI
10461*0bfacb9bSmrg    (vec_select:<V_elem>
10462*0bfacb9bSmrg     (match_operand:MVE_2 1 "s_register_operand" "w")
10463*0bfacb9bSmrg     (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10464*0bfacb9bSmrg  "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10465*0bfacb9bSmrg   || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10466*0bfacb9bSmrg{
10467*0bfacb9bSmrg  if (BYTES_BIG_ENDIAN)
10468*0bfacb9bSmrg    {
10469*0bfacb9bSmrg      int elt = INTVAL (operands[2]);
10470*0bfacb9bSmrg      elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10471*0bfacb9bSmrg      operands[2] = GEN_INT (elt);
10472*0bfacb9bSmrg    }
10473*0bfacb9bSmrg  return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
10474*0bfacb9bSmrg}
10475*0bfacb9bSmrg [(set_attr "type" "mve_move")])
10476*0bfacb9bSmrg
10477*0bfacb9bSmrg;;
10478*0bfacb9bSmrg;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
10479*0bfacb9bSmrg;;
10480*0bfacb9bSmrg(define_insn "mve_vec_set<mode>_internal"
10481*0bfacb9bSmrg [(set (match_operand:VQ2 0 "s_register_operand" "=w")
10482*0bfacb9bSmrg       (vec_merge:VQ2
10483*0bfacb9bSmrg	(vec_duplicate:VQ2
10484*0bfacb9bSmrg	  (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
10485*0bfacb9bSmrg	(match_operand:VQ2 3 "s_register_operand" "0")
10486*0bfacb9bSmrg	(match_operand:SI 2 "immediate_operand" "i")))]
10487*0bfacb9bSmrg  "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10488*0bfacb9bSmrg   || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10489*0bfacb9bSmrg{
10490*0bfacb9bSmrg  int elt = ffs ((int) INTVAL (operands[2])) - 1;
10491*0bfacb9bSmrg  if (BYTES_BIG_ENDIAN)
10492*0bfacb9bSmrg    elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10493*0bfacb9bSmrg  operands[2] = GEN_INT (elt);
10494*0bfacb9bSmrg
10495*0bfacb9bSmrg  return "vmov.<V_sz_elem>\t%q0[%c2], %1";
10496*0bfacb9bSmrg}
10497*0bfacb9bSmrg [(set_attr "type" "mve_move")])
10498*0bfacb9bSmrg
10499*0bfacb9bSmrg(define_insn "mve_vec_setv2di_internal"
10500*0bfacb9bSmrg [(set (match_operand:V2DI 0 "s_register_operand" "=w")
10501*0bfacb9bSmrg       (vec_merge:V2DI
10502*0bfacb9bSmrg	(vec_duplicate:V2DI
10503*0bfacb9bSmrg	  (match_operand:DI 1 "nonimmediate_operand" "r"))
10504*0bfacb9bSmrg	(match_operand:V2DI 3 "s_register_operand" "0")
10505*0bfacb9bSmrg	(match_operand:SI 2 "immediate_operand" "i")))]
10506*0bfacb9bSmrg "TARGET_HAVE_MVE"
10507*0bfacb9bSmrg{
10508*0bfacb9bSmrg  int elt = ffs ((int) INTVAL (operands[2])) - 1;
10509*0bfacb9bSmrg  if (BYTES_BIG_ENDIAN)
10510*0bfacb9bSmrg    elt = 1 - elt;
10511*0bfacb9bSmrg
10512*0bfacb9bSmrg  if (elt == 0)
10513*0bfacb9bSmrg   return "vmov\t%e0, %Q1, %R1";
10514*0bfacb9bSmrg  else
10515*0bfacb9bSmrg   return "vmov\t%f0, %J1, %K1";
10516*0bfacb9bSmrg}
10517*0bfacb9bSmrg [(set_attr "type" "mve_move")])
10518*0bfacb9bSmrg
10519*0bfacb9bSmrg;;
10520*0bfacb9bSmrg;; [uqrshll_di]
10521*0bfacb9bSmrg;;
10522*0bfacb9bSmrg(define_insn "mve_uqrshll_sat<supf>_di"
10523*0bfacb9bSmrg  [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10524*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10525*0bfacb9bSmrg		    (match_operand:SI 2 "register_operand" "r")]
10526*0bfacb9bSmrg	 UQRSHLLQ))]
10527*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10528*0bfacb9bSmrg  "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
10529*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10530*0bfacb9bSmrg
10531*0bfacb9bSmrg;;
10532*0bfacb9bSmrg;; [sqrshrl_di]
10533*0bfacb9bSmrg;;
10534*0bfacb9bSmrg(define_insn "mve_sqrshrl_sat<supf>_di"
10535*0bfacb9bSmrg  [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10536*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10537*0bfacb9bSmrg		    (match_operand:SI 2 "register_operand" "r")]
10538*0bfacb9bSmrg	 SQRSHRLQ))]
10539*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10540*0bfacb9bSmrg  "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
10541*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10542*0bfacb9bSmrg
10543*0bfacb9bSmrg;;
10544*0bfacb9bSmrg;; [uqrshl_si]
10545*0bfacb9bSmrg;;
10546*0bfacb9bSmrg(define_insn "mve_uqrshl_si"
10547*0bfacb9bSmrg  [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10548*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10549*0bfacb9bSmrg		    (match_operand:SI 2 "register_operand" "r")]
10550*0bfacb9bSmrg	 UQRSHL))]
10551*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10552*0bfacb9bSmrg  "uqrshl%?\\t%1, %2"
10553*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10554*0bfacb9bSmrg
10555*0bfacb9bSmrg;;
10556*0bfacb9bSmrg;; [sqrshr_si]
10557*0bfacb9bSmrg;;
10558*0bfacb9bSmrg(define_insn "mve_sqrshr_si"
10559*0bfacb9bSmrg  [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10560*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10561*0bfacb9bSmrg		    (match_operand:SI 2 "register_operand" "r")]
10562*0bfacb9bSmrg	 SQRSHR))]
10563*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10564*0bfacb9bSmrg  "sqrshr%?\\t%1, %2"
10565*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10566*0bfacb9bSmrg
10567*0bfacb9bSmrg;;
10568*0bfacb9bSmrg;; [uqshll_di]
10569*0bfacb9bSmrg;;
10570*0bfacb9bSmrg(define_insn "mve_uqshll_di"
10571*0bfacb9bSmrg  [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10572*0bfacb9bSmrg	(us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10573*0bfacb9bSmrg		      (match_operand:SI 2 "immediate_operand" "Pg")))]
10574*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10575*0bfacb9bSmrg  "uqshll%?\\t%Q1, %R1, %2"
10576*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10577*0bfacb9bSmrg
10578*0bfacb9bSmrg;;
10579*0bfacb9bSmrg;; [urshrl_di]
10580*0bfacb9bSmrg;;
10581*0bfacb9bSmrg(define_insn "mve_urshrl_di"
10582*0bfacb9bSmrg  [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10583*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10584*0bfacb9bSmrg		    (match_operand:SI 2 "immediate_operand" "Pg")]
10585*0bfacb9bSmrg	 URSHRL))]
10586*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10587*0bfacb9bSmrg  "urshrl%?\\t%Q1, %R1, %2"
10588*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10589*0bfacb9bSmrg
10590*0bfacb9bSmrg;;
10591*0bfacb9bSmrg;; [uqshl_si]
10592*0bfacb9bSmrg;;
10593*0bfacb9bSmrg(define_insn "mve_uqshl_si"
10594*0bfacb9bSmrg  [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10595*0bfacb9bSmrg	(us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0")
10596*0bfacb9bSmrg		      (match_operand:SI 2 "immediate_operand" "Pg")))]
10597*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10598*0bfacb9bSmrg  "uqshl%?\\t%1, %2"
10599*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10600*0bfacb9bSmrg
10601*0bfacb9bSmrg;;
10602*0bfacb9bSmrg;; [urshr_si]
10603*0bfacb9bSmrg;;
10604*0bfacb9bSmrg(define_insn "mve_urshr_si"
10605*0bfacb9bSmrg  [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10606*0bfacb9bSmrg	(unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10607*0bfacb9bSmrg		    (match_operand:SI 2 "immediate_operand" "Pg")]
10608*0bfacb9bSmrg	 URSHR))]
10609*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10610*0bfacb9bSmrg  "urshr%?\\t%1, %2"
10611*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10612*0bfacb9bSmrg
10613*0bfacb9bSmrg;;
10614*0bfacb9bSmrg;; [sqshl_si]
10615*0bfacb9bSmrg;;
10616*0bfacb9bSmrg(define_insn "mve_sqshl_si"
10617*0bfacb9bSmrg  [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10618*0bfacb9bSmrg	(ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0")
10619*0bfacb9bSmrg		      (match_operand:SI 2 "immediate_operand" "Pg")))]
10620*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10621*0bfacb9bSmrg  "sqshl%?\\t%1, %2"
10622*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10623*0bfacb9bSmrg
10624*0bfacb9bSmrg;;
10625*0bfacb9bSmrg;; [srshr_si]
10626*0bfacb9bSmrg;;
10627*0bfacb9bSmrg(define_insn "mve_srshr_si"
10628*0bfacb9bSmrg  [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10629*0bfacb9bSmrg	(unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0")
10630*0bfacb9bSmrg		    (match_operand:SI 2 "immediate_operand" "Pg")]
10631*0bfacb9bSmrg	 SRSHR))]
10632*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10633*0bfacb9bSmrg  "srshr%?\\t%1, %2"
10634*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10635*0bfacb9bSmrg
10636*0bfacb9bSmrg;;
10637*0bfacb9bSmrg;; [srshrl_di]
10638*0bfacb9bSmrg;;
10639*0bfacb9bSmrg(define_insn "mve_srshrl_di"
10640*0bfacb9bSmrg  [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10641*0bfacb9bSmrg	(unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10642*0bfacb9bSmrg		    (match_operand:SI 2 "immediate_operand" "Pg")]
10643*0bfacb9bSmrg	 SRSHRL))]
10644*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10645*0bfacb9bSmrg  "srshrl%?\\t%Q1, %R1, %2"
10646*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10647*0bfacb9bSmrg
10648*0bfacb9bSmrg;;
10649*0bfacb9bSmrg;; [sqshll_di]
10650*0bfacb9bSmrg;;
10651*0bfacb9bSmrg(define_insn "mve_sqshll_di"
10652*0bfacb9bSmrg  [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10653*0bfacb9bSmrg	(ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10654*0bfacb9bSmrg		      (match_operand:SI 2 "immediate_operand" "Pg")))]
10655*0bfacb9bSmrg  "TARGET_HAVE_MVE"
10656*0bfacb9bSmrg  "sqshll%?\\t%Q1, %R1, %2"
10657*0bfacb9bSmrg  [(set_attr "predicable" "yes")])
10658*0bfacb9bSmrg
10659*0bfacb9bSmrg;;
10660*0bfacb9bSmrg;; [vshlcq_m_u vshlcq_m_s]
10661*0bfacb9bSmrg;;
10662*0bfacb9bSmrg(define_expand "mve_vshlcq_m_vec_<supf><mode>"
10663*0bfacb9bSmrg [(match_operand:MVE_2 0 "s_register_operand")
10664*0bfacb9bSmrg  (match_operand:MVE_2 1 "s_register_operand")
10665*0bfacb9bSmrg  (match_operand:SI 2 "s_register_operand")
10666*0bfacb9bSmrg  (match_operand:SI 3 "mve_imm_32")
10667*0bfacb9bSmrg  (match_operand:HI 4 "vpr_register_operand")
10668*0bfacb9bSmrg  (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10669*0bfacb9bSmrg "TARGET_HAVE_MVE"
10670*0bfacb9bSmrg{
10671*0bfacb9bSmrg  rtx ignore_wb = gen_reg_rtx (SImode);
10672*0bfacb9bSmrg  emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1],
10673*0bfacb9bSmrg					    operands[2], operands[3],
10674*0bfacb9bSmrg					    operands[4]));
10675*0bfacb9bSmrg  DONE;
10676*0bfacb9bSmrg})
10677*0bfacb9bSmrg
10678*0bfacb9bSmrg(define_expand "mve_vshlcq_m_carry_<supf><mode>"
10679*0bfacb9bSmrg [(match_operand:SI 0 "s_register_operand")
10680*0bfacb9bSmrg  (match_operand:MVE_2 1 "s_register_operand")
10681*0bfacb9bSmrg  (match_operand:SI 2 "s_register_operand")
10682*0bfacb9bSmrg  (match_operand:SI 3 "mve_imm_32")
10683*0bfacb9bSmrg  (match_operand:HI 4 "vpr_register_operand")
10684*0bfacb9bSmrg  (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10685*0bfacb9bSmrg "TARGET_HAVE_MVE"
10686*0bfacb9bSmrg{
10687*0bfacb9bSmrg  rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10688*0bfacb9bSmrg  emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0],
10689*0bfacb9bSmrg					    operands[1], operands[2],
10690*0bfacb9bSmrg					    operands[3], operands[4]));
10691*0bfacb9bSmrg  DONE;
10692*0bfacb9bSmrg})
10693*0bfacb9bSmrg
10694*0bfacb9bSmrg(define_insn "mve_vshlcq_m_<supf><mode>"
10695*0bfacb9bSmrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10696*0bfacb9bSmrg       (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10697*0bfacb9bSmrg		      (match_operand:SI 3 "s_register_operand" "1")
10698*0bfacb9bSmrg		      (match_operand:SI 4 "mve_imm_32" "Rf")
10699*0bfacb9bSmrg		      (match_operand:HI 5 "vpr_register_operand" "Up")]
10700*0bfacb9bSmrg	VSHLCQ_M))
10701*0bfacb9bSmrg  (set (match_operand:SI  1 "s_register_operand" "=r")
10702*0bfacb9bSmrg       (unspec:SI [(match_dup 2)
10703*0bfacb9bSmrg		   (match_dup 3)
10704*0bfacb9bSmrg		   (match_dup 4)
10705*0bfacb9bSmrg		   (match_dup 5)]
10706*0bfacb9bSmrg	VSHLCQ_M))
10707*0bfacb9bSmrg ]
10708*0bfacb9bSmrg "TARGET_HAVE_MVE"
10709*0bfacb9bSmrg "vpst\;vshlct\t%q0, %1, %4"
10710*0bfacb9bSmrg [(set_attr "type" "mve_move")
10711*0bfacb9bSmrg  (set_attr "length" "8")])
10712*0bfacb9bSmrg
10713*0bfacb9bSmrg;; CDE instructions on MVE registers.
10714*0bfacb9bSmrg
10715*0bfacb9bSmrg(define_insn "arm_vcx1qv16qi"
10716*0bfacb9bSmrg  [(set (match_operand:V16QI 0 "register_operand" "=t")
10717*0bfacb9bSmrg	(unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10718*0bfacb9bSmrg			   (match_operand:SI 2 "const_int_mve_cde1_operand" "i")]
10719*0bfacb9bSmrg	 UNSPEC_VCDE))]
10720*0bfacb9bSmrg  "TARGET_CDE && TARGET_HAVE_MVE"
10721*0bfacb9bSmrg  "vcx1\\tp%c1, %q0, #%c2"
10722*0bfacb9bSmrg  [(set_attr "type" "coproc")]
10723*0bfacb9bSmrg)
10724*0bfacb9bSmrg
10725*0bfacb9bSmrg(define_insn "arm_vcx1qav16qi"
10726*0bfacb9bSmrg  [(set (match_operand:V16QI 0 "register_operand" "=t")
10727*0bfacb9bSmrg	(unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10728*0bfacb9bSmrg			    (match_operand:V16QI 2 "register_operand" "0")
10729*0bfacb9bSmrg			    (match_operand:SI 3 "const_int_mve_cde1_operand" "i")]
10730*0bfacb9bSmrg	 UNSPEC_VCDEA))]
10731*0bfacb9bSmrg  "TARGET_CDE && TARGET_HAVE_MVE"
10732*0bfacb9bSmrg  "vcx1a\\tp%c1, %q0, #%c3"
10733*0bfacb9bSmrg  [(set_attr "type" "coproc")]
10734*0bfacb9bSmrg)
10735*0bfacb9bSmrg
10736*0bfacb9bSmrg(define_insn "arm_vcx2qv16qi"
10737*0bfacb9bSmrg  [(set (match_operand:V16QI 0 "register_operand" "=t")
10738*0bfacb9bSmrg	(unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10739*0bfacb9bSmrg			  (match_operand:V16QI 2 "register_operand" "t")
10740*0bfacb9bSmrg			  (match_operand:SI 3 "const_int_mve_cde2_operand" "i")]
10741*0bfacb9bSmrg	 UNSPEC_VCDE))]
10742*0bfacb9bSmrg  "TARGET_CDE && TARGET_HAVE_MVE"
10743*0bfacb9bSmrg  "vcx2\\tp%c1, %q0, %q2, #%c3"
10744*0bfacb9bSmrg  [(set_attr "type" "coproc")]
10745*0bfacb9bSmrg)
10746*0bfacb9bSmrg
10747*0bfacb9bSmrg(define_insn "arm_vcx2qav16qi"
10748*0bfacb9bSmrg  [(set (match_operand:V16QI 0 "register_operand" "=t")
10749*0bfacb9bSmrg	(unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10750*0bfacb9bSmrg			  (match_operand:V16QI 2 "register_operand" "0")
10751*0bfacb9bSmrg			  (match_operand:V16QI 3 "register_operand" "t")
10752*0bfacb9bSmrg			  (match_operand:SI 4 "const_int_mve_cde2_operand" "i")]
10753*0bfacb9bSmrg	 UNSPEC_VCDEA))]
10754*0bfacb9bSmrg  "TARGET_CDE && TARGET_HAVE_MVE"
10755*0bfacb9bSmrg  "vcx2a\\tp%c1, %q0, %q3, #%c4"
10756*0bfacb9bSmrg  [(set_attr "type" "coproc")]
10757*0bfacb9bSmrg)
10758*0bfacb9bSmrg
10759*0bfacb9bSmrg(define_insn "arm_vcx3qv16qi"
10760*0bfacb9bSmrg  [(set (match_operand:V16QI 0 "register_operand" "=t")
10761*0bfacb9bSmrg	(unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10762*0bfacb9bSmrg			  (match_operand:V16QI 2 "register_operand" "t")
10763*0bfacb9bSmrg			  (match_operand:V16QI 3 "register_operand" "t")
10764*0bfacb9bSmrg			  (match_operand:SI 4 "const_int_mve_cde3_operand" "i")]
10765*0bfacb9bSmrg	 UNSPEC_VCDE))]
10766*0bfacb9bSmrg  "TARGET_CDE && TARGET_HAVE_MVE"
10767*0bfacb9bSmrg  "vcx3\\tp%c1, %q0, %q2, %q3, #%c4"
10768*0bfacb9bSmrg  [(set_attr "type" "coproc")]
10769*0bfacb9bSmrg)
10770*0bfacb9bSmrg
10771*0bfacb9bSmrg(define_insn "arm_vcx3qav16qi"
10772*0bfacb9bSmrg  [(set (match_operand:V16QI 0 "register_operand" "=t")
10773*0bfacb9bSmrg	(unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10774*0bfacb9bSmrg			  (match_operand:V16QI 2 "register_operand" "0")
10775*0bfacb9bSmrg			  (match_operand:V16QI 3 "register_operand" "t")
10776*0bfacb9bSmrg			  (match_operand:V16QI 4 "register_operand" "t")
10777*0bfacb9bSmrg			  (match_operand:SI 5 "const_int_mve_cde3_operand" "i")]
10778*0bfacb9bSmrg	 UNSPEC_VCDEA))]
10779*0bfacb9bSmrg  "TARGET_CDE && TARGET_HAVE_MVE"
10780*0bfacb9bSmrg  "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5"
10781*0bfacb9bSmrg  [(set_attr "type" "coproc")]
10782*0bfacb9bSmrg)
10783*0bfacb9bSmrg
10784*0bfacb9bSmrg(define_insn "arm_vcx1q<a>_p_v16qi"
10785*0bfacb9bSmrg  [(set (match_operand:V16QI 0 "register_operand" "=t")
10786*0bfacb9bSmrg	(unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10787*0bfacb9bSmrg			   (match_operand:V16QI 2 "register_operand" "0")
10788*0bfacb9bSmrg			   (match_operand:SI 3 "const_int_mve_cde1_operand" "i")
10789*0bfacb9bSmrg			   (match_operand:HI 4 "vpr_register_operand" "Up")]
10790*0bfacb9bSmrg	 CDE_VCX))]
10791*0bfacb9bSmrg  "TARGET_CDE && TARGET_HAVE_MVE"
10792*0bfacb9bSmrg  "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3"
10793*0bfacb9bSmrg  [(set_attr "type" "coproc")
10794*0bfacb9bSmrg   (set_attr "length" "8")]
10795*0bfacb9bSmrg)
10796*0bfacb9bSmrg
10797*0bfacb9bSmrg(define_insn "arm_vcx2q<a>_p_v16qi"
10798*0bfacb9bSmrg  [(set (match_operand:V16QI 0 "register_operand" "=t")
10799*0bfacb9bSmrg	(unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10800*0bfacb9bSmrg			  (match_operand:V16QI 2 "register_operand" "0")
10801*0bfacb9bSmrg			  (match_operand:V16QI 3 "register_operand" "t")
10802*0bfacb9bSmrg			  (match_operand:SI 4 "const_int_mve_cde2_operand" "i")
10803*0bfacb9bSmrg			  (match_operand:HI 5 "vpr_register_operand" "Up")]
10804*0bfacb9bSmrg	 CDE_VCX))]
10805*0bfacb9bSmrg  "TARGET_CDE && TARGET_HAVE_MVE"
10806*0bfacb9bSmrg  "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4"
10807*0bfacb9bSmrg  [(set_attr "type" "coproc")
10808*0bfacb9bSmrg   (set_attr "length" "8")]
10809*0bfacb9bSmrg)
10810*0bfacb9bSmrg
10811*0bfacb9bSmrg(define_insn "arm_vcx3q<a>_p_v16qi"
10812*0bfacb9bSmrg  [(set (match_operand:V16QI 0 "register_operand" "=t")
10813*0bfacb9bSmrg	(unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10814*0bfacb9bSmrg			  (match_operand:V16QI 2 "register_operand" "0")
10815*0bfacb9bSmrg			  (match_operand:V16QI 3 "register_operand" "t")
10816*0bfacb9bSmrg			  (match_operand:V16QI 4 "register_operand" "t")
10817*0bfacb9bSmrg			  (match_operand:SI 5 "const_int_mve_cde3_operand" "i")
10818*0bfacb9bSmrg			  (match_operand:HI 6 "vpr_register_operand" "Up")]
10819*0bfacb9bSmrg	 CDE_VCX))]
10820*0bfacb9bSmrg  "TARGET_CDE && TARGET_HAVE_MVE"
10821*0bfacb9bSmrg  "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5"
10822*0bfacb9bSmrg  [(set_attr "type" "coproc")
10823*0bfacb9bSmrg   (set_attr "length" "8")]
10824*0bfacb9bSmrg)
10825