]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/arm/mve.md
[PR97969] LRA: Transform pattern `plus (plus (hard reg, const), pseudo)` after elimin...
[thirdparty/gcc.git] / gcc / config / arm / mve.md
CommitLineData
63c8f7d6 1;; Arm M-profile Vector Extension Machine Description
99dee823 2;; Copyright (C) 2019-2021 Free Software Foundation, Inc.
63c8f7d6
SP
3;;
4;; This file is part of GCC.
5;;
6;; GCC is free software; you can redistribute it and/or modify it
7;; under the terms of the GNU General Public License as published by
8;; the Free Software Foundation; either version 3, or (at your option)
9;; any later version.
10;;
11;; GCC is distributed in the hope that it will be useful, but
12;; WITHOUT ANY WARRANTY; without even the implied warranty of
13;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14;; General Public License for more details.
15;;
16;; You should have received a copy of the GNU General Public License
17;; along with GCC; see the file COPYING3. If not see
18;; <http://www.gnu.org/licenses/>.
19
63c8f7d6 20(define_insn "*mve_mov<mode>"
d91524d5
SP
21 [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w,w,r,w,Ux,w")
22 (match_operand:MVE_types 1 "general_operand" "w,r,w,Dn,Uxi,r,Dm,w,Ul"))]
63c8f7d6
SP
23 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
24{
25 if (which_alternative == 3 || which_alternative == 6)
26 {
27 int width, is_valid;
28 static char templ[40];
29
30 is_valid = simd_immediate_valid_for_move (operands[1], <MODE>mode,
31 &operands[1], &width);
32
33 gcc_assert (is_valid != 0);
34
35 if (width == 0)
36 return "vmov.f32\t%q0, %1 @ <mode>";
37 else
38 sprintf (templ, "vmov.i%d\t%%q0, %%x1 @ <mode>", width);
39 return templ;
40 }
d91524d5
SP
41
42 if (which_alternative == 4 || which_alternative == 7)
43 {
44 rtx ops[2];
45 int regno = (which_alternative == 7)
46 ? REGNO (operands[1]) : REGNO (operands[0]);
47
48 ops[0] = operands[0];
49 ops[1] = operands[1];
50 if (<MODE>mode == V2DFmode || <MODE>mode == V2DImode)
51 {
52 if (which_alternative == 7)
53 {
54 ops[1] = gen_rtx_REG (DImode, regno);
55 output_asm_insn ("vstr.64\t%P1, %E0",ops);
56 }
57 else
58 {
59 ops[0] = gen_rtx_REG (DImode, regno);
60 output_asm_insn ("vldr.64\t%P0, %E1",ops);
61 }
62 }
63 else if (<MODE>mode == TImode)
64 {
65 if (which_alternative == 7)
66 output_asm_insn ("vstr.64\t%q1, %E0",ops);
67 else
68 output_asm_insn ("vldr.64\t%q0, %E1",ops);
69 }
70 else
71 {
72 if (which_alternative == 7)
73 {
74 ops[1] = gen_rtx_REG (TImode, regno);
75 output_asm_insn ("vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0",ops);
76 }
77 else
78 {
79 ops[0] = gen_rtx_REG (TImode, regno);
80 output_asm_insn ("vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1",ops);
81 }
82 }
83 return "";
84 }
63c8f7d6
SP
85 switch (which_alternative)
86 {
87 case 0:
88 return "vmov\t%q0, %q1";
89 case 1:
90 return "vmov\t%e0, %Q1, %R1 @ <mode>\;vmov\t%f0, %J1, %K1";
91 case 2:
92 return "vmov\t%Q0, %R0, %e1 @ <mode>\;vmov\t%J0, %K0, %f1";
63c8f7d6 93 case 5:
0efe7d87 94 return output_move_quad (operands);
d91524d5
SP
95 case 8:
96 return output_move_neon (operands);
63c8f7d6
SP
97 default:
98 gcc_unreachable ();
99 return "";
100 }
101}
d91524d5
SP
102 [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_move,mve_store,mve_load")
103 (set_attr "length" "4,8,8,4,8,8,4,4,4")
104 (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*,*")
105 (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*,*")])
63c8f7d6
SP
106
107(define_insn "*mve_mov<mode>"
108 [(set (match_operand:MVE_types 0 "s_register_operand" "=w,w")
109 (vec_duplicate:MVE_types
110 (match_operand:SI 1 "nonmemory_operand" "r,i")))]
111 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
112{
113 if (which_alternative == 0)
114 return "vdup.<V_sz_elem>\t%q0, %1";
115 return "vmov.<V_sz_elem>\t%q0, %1";
116}
117 [(set_attr "length" "4,4")
118 (set_attr "type" "mve_move,mve_move")])
14782c81
SP
119
120;;
121;; [vst4q])
122;;
123(define_insn "mve_vst4q<mode>"
124 [(set (match_operand:XI 0 "neon_struct_operand" "=Um")
125 (unspec:XI [(match_operand:XI 1 "s_register_operand" "w")
126 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
127 VST4Q))
128 ]
129 "TARGET_HAVE_MVE"
130{
131 rtx ops[6];
132 int regno = REGNO (operands[1]);
133 ops[0] = gen_rtx_REG (TImode, regno);
134 ops[1] = gen_rtx_REG (TImode, regno+4);
135 ops[2] = gen_rtx_REG (TImode, regno+8);
136 ops[3] = gen_rtx_REG (TImode, regno+12);
137 rtx reg = operands[0];
138 while (reg && !REG_P (reg))
139 reg = XEXP (reg, 0);
140 gcc_assert (REG_P (reg));
141 ops[4] = reg;
142 ops[5] = operands[0];
143 /* Here in first three instructions data is stored to ops[4]'s location but
144 in the fourth instruction data is stored to operands[0], this is to
145 support the writeback. */
146 output_asm_insn ("vst40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
147 "vst41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
148 "vst42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
149 "vst43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
150 return "";
151}
152 [(set_attr "length" "16")])
a50f6abf 153
e3678b44
SP
154;;
155;; [vrndq_m_f])
156;;
157(define_insn "mve_vrndq_m_f<mode>"
158 [
159 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
160 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
161 (match_operand:MVE_0 2 "s_register_operand" "w")
162 (match_operand:HI 3 "vpr_register_operand" "Up")]
163 VRNDQ_M_F))
164 ]
165 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
166 "vpst\;vrintzt.f%#<V_sz_elem> %q0, %q2"
167 [(set_attr "type" "mve_move")
168 (set_attr "length""8")])
169
a50f6abf
SP
170;;
171;; [vrndxq_f])
172;;
173(define_insn "mve_vrndxq_f<mode>"
174 [
175 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
176 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
177 VRNDXQ_F))
178 ]
179 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
180 "vrintx.f%#<V_sz_elem> %q0, %q1"
181 [(set_attr "type" "mve_move")
182])
183
184;;
185;; [vrndq_f])
186;;
187(define_insn "mve_vrndq_f<mode>"
188 [
189 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
190 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
191 VRNDQ_F))
192 ]
193 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
194 "vrintz.f%#<V_sz_elem> %q0, %q1"
195 [(set_attr "type" "mve_move")
196])
197
198;;
199;; [vrndpq_f])
200;;
201(define_insn "mve_vrndpq_f<mode>"
202 [
203 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
204 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
205 VRNDPQ_F))
206 ]
207 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
208 "vrintp.f%#<V_sz_elem> %q0, %q1"
209 [(set_attr "type" "mve_move")
210])
211
212;;
213;; [vrndnq_f])
214;;
215(define_insn "mve_vrndnq_f<mode>"
216 [
217 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
218 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
219 VRNDNQ_F))
220 ]
221 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
222 "vrintn.f%#<V_sz_elem> %q0, %q1"
223 [(set_attr "type" "mve_move")
224])
225
226;;
227;; [vrndmq_f])
228;;
229(define_insn "mve_vrndmq_f<mode>"
230 [
231 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
232 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
233 VRNDMQ_F))
234 ]
235 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
236 "vrintm.f%#<V_sz_elem> %q0, %q1"
237 [(set_attr "type" "mve_move")
238])
239
240;;
241;; [vrndaq_f])
242;;
243(define_insn "mve_vrndaq_f<mode>"
244 [
245 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
246 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
247 VRNDAQ_F))
248 ]
249 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
250 "vrinta.f%#<V_sz_elem> %q0, %q1"
251 [(set_attr "type" "mve_move")
252])
253
254;;
255;; [vrev64q_f])
256;;
257(define_insn "mve_vrev64q_f<mode>"
258 [
6debbff6 259 (set (match_operand:MVE_0 0 "s_register_operand" "=&w")
a50f6abf
SP
260 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
261 VREV64Q_F))
262 ]
263 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
264 "vrev64.%#<V_sz_elem> %q0, %q1"
265 [(set_attr "type" "mve_move")
266])
267
268;;
269;; [vnegq_f])
270;;
271(define_insn "mve_vnegq_f<mode>"
272 [
273 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4cbb7cab 274 (neg:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")))
a50f6abf
SP
275 ]
276 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
277 "vneg.f%#<V_sz_elem> %q0, %q1"
278 [(set_attr "type" "mve_move")
279])
280
281;;
282;; [vdupq_n_f])
283;;
284(define_insn "mve_vdupq_n_f<mode>"
285 [
286 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
287 (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
288 VDUPQ_N_F))
289 ]
290 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
291 "vdup.%#<V_sz_elem> %q0, %1"
292 [(set_attr "type" "mve_move")
293])
294
295;;
296;; [vabsq_f])
297;;
298(define_insn "mve_vabsq_f<mode>"
299 [
300 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
301 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
302 VABSQ_F))
303 ]
304 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
305 "vabs.f%#<V_sz_elem> %q0, %q1"
306 [(set_attr "type" "mve_move")
307])
308
309;;
310;; [vrev32q_f])
311;;
312(define_insn "mve_vrev32q_fv8hf"
313 [
314 (set (match_operand:V8HF 0 "s_register_operand" "=w")
315 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")]
316 VREV32Q_F))
317 ]
318 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
319 "vrev32.16 %q0, %q1"
320 [(set_attr "type" "mve_move")
321])
322;;
323;; [vcvttq_f32_f16])
324;;
325(define_insn "mve_vcvttq_f32_f16v4sf"
326 [
327 (set (match_operand:V4SF 0 "s_register_operand" "=w")
328 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
329 VCVTTQ_F32_F16))
330 ]
331 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
332 "vcvtt.f32.f16 %q0, %q1"
333 [(set_attr "type" "mve_move")
334])
335
336;;
337;; [vcvtbq_f32_f16])
338;;
339(define_insn "mve_vcvtbq_f32_f16v4sf"
340 [
341 (set (match_operand:V4SF 0 "s_register_operand" "=w")
342 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
343 VCVTBQ_F32_F16))
344 ]
345 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
346 "vcvtb.f32.f16 %q0, %q1"
347 [(set_attr "type" "mve_move")
348])
349
350;;
351;; [vcvtq_to_f_s, vcvtq_to_f_u])
352;;
353(define_insn "mve_vcvtq_to_f_<supf><mode>"
354 [
355 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
356 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
357 VCVTQ_TO_F))
358 ]
359 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
360 "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q1"
361 [(set_attr "type" "mve_move")
362])
5db0eb95
SP
363
364;;
365;; [vrev64q_u, vrev64q_s])
366;;
367(define_insn "mve_vrev64q_<supf><mode>"
368 [
6debbff6 369 (set (match_operand:MVE_2 0 "s_register_operand" "=&w")
5db0eb95
SP
370 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
371 VREV64Q))
372 ]
373 "TARGET_HAVE_MVE"
374 "vrev64.%#<V_sz_elem> %q0, %q1"
375 [(set_attr "type" "mve_move")
376])
377
378;;
379;; [vcvtq_from_f_s, vcvtq_from_f_u])
380;;
381(define_insn "mve_vcvtq_from_f_<supf><mode>"
382 [
383 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
384 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
385 VCVTQ_FROM_F))
386 ]
387 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
388 "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
389 [(set_attr "type" "mve_move")
390])
6df4618c
SP
391;; [vqnegq_s])
392;;
393(define_insn "mve_vqnegq_s<mode>"
394 [
395 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
396 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
397 VQNEGQ_S))
398 ]
399 "TARGET_HAVE_MVE"
400 "vqneg.s%#<V_sz_elem> %q0, %q1"
401 [(set_attr "type" "mve_move")
402])
403
404;;
405;; [vqabsq_s])
406;;
407(define_insn "mve_vqabsq_s<mode>"
408 [
409 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
410 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
411 VQABSQ_S))
412 ]
413 "TARGET_HAVE_MVE"
414 "vqabs.s%#<V_sz_elem> %q0, %q1"
415 [(set_attr "type" "mve_move")
416])
417
418;;
419;; [vnegq_s])
420;;
421(define_insn "mve_vnegq_s<mode>"
422 [
423 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4cbb7cab 424 (neg:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
6df4618c
SP
425 ]
426 "TARGET_HAVE_MVE"
427 "vneg.s%#<V_sz_elem> %q0, %q1"
428 [(set_attr "type" "mve_move")
429])
430
431;;
432;; [vmvnq_u, vmvnq_s])
433;;
fd436034 434(define_insn "mve_vmvnq_u<mode>"
6df4618c
SP
435 [
436 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
fd436034 437 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")))
6df4618c
SP
438 ]
439 "TARGET_HAVE_MVE"
fd436034 440 "vmvn\t%q0, %q1"
6df4618c
SP
441 [(set_attr "type" "mve_move")
442])
fd436034
CL
443(define_expand "mve_vmvnq_s<mode>"
444 [
445 (set (match_operand:MVE_2 0 "s_register_operand")
446 (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand")))
447 ]
448 "TARGET_HAVE_MVE"
449)
6df4618c
SP
450
451;;
452;; [vdupq_n_u, vdupq_n_s])
453;;
454(define_insn "mve_vdupq_n_<supf><mode>"
455 [
456 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
457 (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
458 VDUPQ_N))
459 ]
460 "TARGET_HAVE_MVE"
461 "vdup.%#<V_sz_elem> %q0, %1"
462 [(set_attr "type" "mve_move")
463])
464
465;;
466;; [vclzq_u, vclzq_s])
467;;
468(define_insn "mve_vclzq_<supf><mode>"
469 [
470 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
471 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
472 VCLZQ))
473 ]
474 "TARGET_HAVE_MVE"
475 "vclz.i%#<V_sz_elem> %q0, %q1"
476 [(set_attr "type" "mve_move")
477])
478
479;;
480;; [vclsq_s])
481;;
482(define_insn "mve_vclsq_s<mode>"
483 [
484 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
485 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
486 VCLSQ_S))
487 ]
488 "TARGET_HAVE_MVE"
489 "vcls.s%#<V_sz_elem> %q0, %q1"
490 [(set_attr "type" "mve_move")
491])
492
493;;
494;; [vaddvq_s, vaddvq_u])
495;;
496(define_insn "mve_vaddvq_<supf><mode>"
497 [
3d537943 498 (set (match_operand:SI 0 "s_register_operand" "=Te")
6df4618c
SP
499 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
500 VADDVQ))
501 ]
502 "TARGET_HAVE_MVE"
503 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
504 [(set_attr "type" "mve_move")
505])
506
507;;
508;; [vabsq_s])
509;;
510(define_insn "mve_vabsq_s<mode>"
511 [
512 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
513 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
514 VABSQ_S))
515 ]
516 "TARGET_HAVE_MVE"
517 "vabs.s%#<V_sz_elem>\t%q0, %q1"
518 [(set_attr "type" "mve_move")
519])
520
521;;
522;; [vrev32q_u, vrev32q_s])
523;;
524(define_insn "mve_vrev32q_<supf><mode>"
525 [
526 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
527 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
528 VREV32Q))
529 ]
530 "TARGET_HAVE_MVE"
531 "vrev32.%#<V_sz_elem>\t%q0, %q1"
532 [(set_attr "type" "mve_move")
533])
534
535;;
536;; [vmovltq_u, vmovltq_s])
537;;
538(define_insn "mve_vmovltq_<supf><mode>"
539 [
540 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
541 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
542 VMOVLTQ))
543 ]
544 "TARGET_HAVE_MVE"
545 "vmovlt.<supf>%#<V_sz_elem> %q0, %q1"
546 [(set_attr "type" "mve_move")
547])
548
549;;
550;; [vmovlbq_s, vmovlbq_u])
551;;
552(define_insn "mve_vmovlbq_<supf><mode>"
553 [
554 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
555 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
556 VMOVLBQ))
557 ]
558 "TARGET_HAVE_MVE"
559 "vmovlb.<supf>%#<V_sz_elem> %q0, %q1"
560 [(set_attr "type" "mve_move")
561])
562
563;;
564;; [vcvtpq_s, vcvtpq_u])
565;;
566(define_insn "mve_vcvtpq_<supf><mode>"
567 [
568 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
569 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
570 VCVTPQ))
571 ]
572 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
573 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
574 [(set_attr "type" "mve_move")
575])
576
577;;
578;; [vcvtnq_s, vcvtnq_u])
579;;
580(define_insn "mve_vcvtnq_<supf><mode>"
581 [
582 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
583 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
584 VCVTNQ))
585 ]
586 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
587 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
588 [(set_attr "type" "mve_move")
589])
590
591;;
592;; [vcvtmq_s, vcvtmq_u])
593;;
594(define_insn "mve_vcvtmq_<supf><mode>"
595 [
596 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
597 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
598 VCVTMQ))
599 ]
600 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
601 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
602 [(set_attr "type" "mve_move")
603])
604
605;;
606;; [vcvtaq_u, vcvtaq_s])
607;;
608(define_insn "mve_vcvtaq_<supf><mode>"
609 [
610 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
611 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
612 VCVTAQ))
613 ]
614 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
615 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
616 [(set_attr "type" "mve_move")
617])
5db0eb95
SP
618
619;;
620;; [vmvnq_n_u, vmvnq_n_s])
621;;
622(define_insn "mve_vmvnq_n_<supf><mode>"
623 [
624 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
625 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
626 VMVNQ_N))
627 ]
628 "TARGET_HAVE_MVE"
629 "vmvn.i%#<V_sz_elem> %q0, %1"
630 [(set_attr "type" "mve_move")
631])
6df4618c
SP
632
633;;
634;; [vrev16q_u, vrev16q_s])
635;;
636(define_insn "mve_vrev16q_<supf>v16qi"
637 [
638 (set (match_operand:V16QI 0 "s_register_operand" "=w")
639 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
640 VREV16Q))
641 ]
642 "TARGET_HAVE_MVE"
643 "vrev16.8 %q0, %q1"
644 [(set_attr "type" "mve_move")
645])
646
647;;
648;; [vaddlvq_s vaddlvq_u])
649;;
650(define_insn "mve_vaddlvq_<supf>v4si"
651 [
652 (set (match_operand:DI 0 "s_register_operand" "=r")
653 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
654 VADDLVQ))
655 ]
656 "TARGET_HAVE_MVE"
657 "vaddlv.<supf>32 %Q0, %R0, %q1"
658 [(set_attr "type" "mve_move")
659])
a475f153
SP
660
661;;
662;; [vctp8q vctp16q vctp32q vctp64q])
663;;
664(define_insn "mve_vctp<mode1>qhi"
665 [
666 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
667 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
668 VCTPQ))
669 ]
670 "TARGET_HAVE_MVE"
671 "vctp.<mode1> %1"
672 [(set_attr "type" "mve_move")
673])
674
675;;
676;; [vpnot])
677;;
678(define_insn "mve_vpnothi"
679 [
680 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
681 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
682 VPNOT))
683 ]
684 "TARGET_HAVE_MVE"
685 "vpnot"
686 [(set_attr "type" "mve_move")
687])
4be8cf77
SP
688
689;;
690;; [vsubq_n_f])
691;;
692(define_insn "mve_vsubq_n_f<mode>"
693 [
694 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
695 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
696 (match_operand:<V_elem> 2 "s_register_operand" "r")]
697 VSUBQ_N_F))
698 ]
699 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
700 "vsub.f<V_sz_elem> %q0, %q1, %2"
701 [(set_attr "type" "mve_move")
702])
703
704;;
705;; [vbrsrq_n_f])
706;;
707(define_insn "mve_vbrsrq_n_f<mode>"
708 [
709 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
710 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
711 (match_operand:SI 2 "s_register_operand" "r")]
712 VBRSRQ_N_F))
713 ]
714 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
715 "vbrsr.<V_sz_elem> %q0, %q1, %2"
716 [(set_attr "type" "mve_move")
717])
718
719;;
720;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
721;;
722(define_insn "mve_vcvtq_n_to_f_<supf><mode>"
723 [
724 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
725 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
d2ce75fe 726 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
4be8cf77
SP
727 VCVTQ_N_TO_F))
728 ]
729 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
730 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
731 [(set_attr "type" "mve_move")
732])
733
734;; [vcreateq_f])
735;;
736(define_insn "mve_vcreateq_f<mode>"
737 [
738 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
739 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
740 (match_operand:DI 2 "s_register_operand" "r")]
741 VCREATEQ_F))
742 ]
743 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
744 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
745 [(set_attr "type" "mve_move")
746 (set_attr "length""8")])
f166a8cd
SP
747
748;;
749;; [vcreateq_u, vcreateq_s])
750;;
751(define_insn "mve_vcreateq_<supf><mode>"
752 [
753 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
754 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
755 (match_operand:DI 2 "s_register_operand" "r")]
756 VCREATEQ))
757 ]
758 "TARGET_HAVE_MVE"
759 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
760 [(set_attr "type" "mve_move")
761 (set_attr "length""8")])
762
763;;
764;; [vshrq_n_s, vshrq_n_u])
765;;
766(define_insn "mve_vshrq_n_<supf><mode>"
767 [
768 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
769 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
770 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
771 VSHRQ_N))
772 ]
773 "TARGET_HAVE_MVE"
774 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
775 [(set_attr "type" "mve_move")
776])
777
778;;
779;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
780;;
781(define_insn "mve_vcvtq_n_from_f_<supf><mode>"
782 [
783 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
784 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
d2ce75fe 785 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
f166a8cd
SP
786 VCVTQ_N_FROM_F))
787 ]
788 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
789 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
790 [(set_attr "type" "mve_move")
791])
d71dba7b
SP
792
793;;
794;; [vaddlvq_p_s])
795;;
796(define_insn "mve_vaddlvq_p_<supf>v4si"
797 [
798 (set (match_operand:DI 0 "s_register_operand" "=r")
799 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
800 (match_operand:HI 2 "vpr_register_operand" "Up")]
801 VADDLVQ_P))
802 ]
803 "TARGET_HAVE_MVE"
804 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
805 [(set_attr "type" "mve_move")
806 (set_attr "length""8")])
807
808;;
809;; [vcmpneq_u, vcmpneq_s])
810;;
811(define_insn "mve_vcmpneq_<supf><mode>"
812 [
813 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
814 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
815 (match_operand:MVE_2 2 "s_register_operand" "w")]
816 VCMPNEQ))
817 ]
818 "TARGET_HAVE_MVE"
819 "vcmp.i%#<V_sz_elem> ne, %q1, %q2"
820 [(set_attr "type" "mve_move")
821])
822
823;;
824;; [vshlq_s, vshlq_u])
825;;
826(define_insn "mve_vshlq_<supf><mode>"
827 [
828 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
829 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
830 (match_operand:MVE_2 2 "s_register_operand" "w")]
831 VSHLQ))
832 ]
833 "TARGET_HAVE_MVE"
834 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
835 [(set_attr "type" "mve_move")
836])
33203b4c
SP
837
838;;
839;; [vabdq_s, vabdq_u])
840;;
841(define_insn "mve_vabdq_<supf><mode>"
842 [
843 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
844 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
845 (match_operand:MVE_2 2 "s_register_operand" "w")]
846 VABDQ))
847 ]
848 "TARGET_HAVE_MVE"
849 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
850 [(set_attr "type" "mve_move")
851])
852
853;;
854;; [vaddq_n_s, vaddq_n_u])
855;;
856(define_insn "mve_vaddq_n_<supf><mode>"
857 [
858 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
859 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
860 (match_operand:<V_elem> 2 "s_register_operand" "r")]
861 VADDQ_N))
862 ]
863 "TARGET_HAVE_MVE"
864 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
865 [(set_attr "type" "mve_move")
866])
867
868;;
869;; [vaddvaq_s, vaddvaq_u])
870;;
871(define_insn "mve_vaddvaq_<supf><mode>"
872 [
3d537943 873 (set (match_operand:SI 0 "s_register_operand" "=Te")
33203b4c
SP
874 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
875 (match_operand:MVE_2 2 "s_register_operand" "w")]
876 VADDVAQ))
877 ]
878 "TARGET_HAVE_MVE"
879 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
880 [(set_attr "type" "mve_move")
881])
882
883;;
884;; [vaddvq_p_u, vaddvq_p_s])
885;;
886(define_insn "mve_vaddvq_p_<supf><mode>"
887 [
3d537943 888 (set (match_operand:SI 0 "s_register_operand" "=Te")
33203b4c
SP
889 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
890 (match_operand:HI 2 "vpr_register_operand" "Up")]
891 VADDVQ_P))
892 ]
893 "TARGET_HAVE_MVE"
894 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
895 [(set_attr "type" "mve_move")
896 (set_attr "length""8")])
897
898;;
899;; [vandq_u, vandq_s])
900;;
11a0beff
CL
901;; signed and unsigned versions are the same: define the unsigned
902;; insn, and use an expander for the signed one as we still reference
903;; both names from arm_mve.h.
904;; We use the same code as in neon.md (TODO: avoid this duplication).
905(define_insn "mve_vandq_u<mode>"
33203b4c 906 [
11a0beff
CL
907 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
908 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
909 (match_operand:MVE_2 2 "neon_inv_logic_op2" "w,DL")))
33203b4c
SP
910 ]
911 "TARGET_HAVE_MVE"
11a0beff
CL
912 "@
913 vand\t%q0, %q1, %q2
914 * return neon_output_logic_immediate (\"vand\", &operands[2], <MODE>mode, 1, VALID_NEON_QREG_MODE (<MODE>mode));"
33203b4c
SP
915 [(set_attr "type" "mve_move")
916])
11a0beff
CL
917(define_expand "mve_vandq_s<mode>"
918 [
919 (set (match_operand:MVE_2 0 "s_register_operand")
920 (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
921 (match_operand:MVE_2 2 "neon_inv_logic_op2")))
922 ]
923 "TARGET_HAVE_MVE"
924)
33203b4c
SP
925
926;;
927;; [vbicq_s, vbicq_u])
928;;
5391cf07 929(define_insn "mve_vbicq_u<mode>"
33203b4c
SP
930 [
931 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5391cf07
CL
932 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w"))
933 (match_operand:MVE_2 1 "s_register_operand" "w")))
33203b4c
SP
934 ]
935 "TARGET_HAVE_MVE"
5391cf07 936 "vbic\t%q0, %q1, %q2"
33203b4c
SP
937 [(set_attr "type" "mve_move")
938])
939
5391cf07
CL
940(define_expand "mve_vbicq_s<mode>"
941 [
942 (set (match_operand:MVE_2 0 "s_register_operand")
943 (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand"))
944 (match_operand:MVE_2 1 "s_register_operand")))
945 ]
946 "TARGET_HAVE_MVE"
947)
948
33203b4c
SP
949;;
950;; [vbrsrq_n_u, vbrsrq_n_s])
951;;
952(define_insn "mve_vbrsrq_n_<supf><mode>"
953 [
954 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
955 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
956 (match_operand:SI 2 "s_register_operand" "r")]
957 VBRSRQ_N))
958 ]
959 "TARGET_HAVE_MVE"
960 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
961 [(set_attr "type" "mve_move")
962])
963
964;;
9732dc85 965;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
33203b4c 966;;
9732dc85 967(define_insn "mve_vcaddq<mve_rot><mode>"
33203b4c 968 [
6debbff6 969 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
33203b4c
SP
970 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
971 (match_operand:MVE_2 2 "s_register_operand" "w")]
9732dc85 972 VCADD))
33203b4c
SP
973 ]
974 "TARGET_HAVE_MVE"
9732dc85 975 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
33203b4c
SP
976 [(set_attr "type" "mve_move")
977])
978
9732dc85
TC
979;; Auto vectorizer pattern for int vcadd
980(define_expand "cadd<rot><mode>3"
981 [(set (match_operand:MVE_2 0 "register_operand")
982 (unspec:MVE_2 [(match_operand:MVE_2 1 "register_operand")
983 (match_operand:MVE_2 2 "register_operand")]
984 VCADD))]
985 "TARGET_HAVE_MVE && !BYTES_BIG_ENDIAN"
986)
33203b4c
SP
987
988;;
989;; [vcmpcsq_n_u])
990;;
991(define_insn "mve_vcmpcsq_n_u<mode>"
992 [
993 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
994 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
995 (match_operand:<V_elem> 2 "s_register_operand" "r")]
996 VCMPCSQ_N_U))
997 ]
998 "TARGET_HAVE_MVE"
999 "vcmp.u%#<V_sz_elem> cs, %q1, %2"
1000 [(set_attr "type" "mve_move")
1001])
1002
1003;;
1004;; [vcmpcsq_u])
1005;;
1006(define_insn "mve_vcmpcsq_u<mode>"
1007 [
1008 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1009 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1010 (match_operand:MVE_2 2 "s_register_operand" "w")]
1011 VCMPCSQ_U))
1012 ]
1013 "TARGET_HAVE_MVE"
1014 "vcmp.u%#<V_sz_elem> cs, %q1, %q2"
1015 [(set_attr "type" "mve_move")
1016])
1017
1018;;
1019;; [vcmpeqq_n_s, vcmpeqq_n_u])
1020;;
1021(define_insn "mve_vcmpeqq_n_<supf><mode>"
1022 [
1023 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1024 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1025 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1026 VCMPEQQ_N))
1027 ]
1028 "TARGET_HAVE_MVE"
1029 "vcmp.i%#<V_sz_elem> eq, %q1, %2"
1030 [(set_attr "type" "mve_move")
1031])
1032
1033;;
1034;; [vcmpeqq_u, vcmpeqq_s])
1035;;
1036(define_insn "mve_vcmpeqq_<supf><mode>"
1037 [
1038 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1039 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1040 (match_operand:MVE_2 2 "s_register_operand" "w")]
1041 VCMPEQQ))
1042 ]
1043 "TARGET_HAVE_MVE"
1044 "vcmp.i%#<V_sz_elem> eq, %q1, %q2"
1045 [(set_attr "type" "mve_move")
1046])
1047
1048;;
1049;; [vcmpgeq_n_s])
1050;;
1051(define_insn "mve_vcmpgeq_n_s<mode>"
1052 [
1053 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1054 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1055 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1056 VCMPGEQ_N_S))
1057 ]
1058 "TARGET_HAVE_MVE"
1059 "vcmp.s%#<V_sz_elem> ge, %q1, %2"
1060 [(set_attr "type" "mve_move")
1061])
1062
1063;;
1064;; [vcmpgeq_s])
1065;;
1066(define_insn "mve_vcmpgeq_s<mode>"
1067 [
1068 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1069 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1070 (match_operand:MVE_2 2 "s_register_operand" "w")]
1071 VCMPGEQ_S))
1072 ]
1073 "TARGET_HAVE_MVE"
1074 "vcmp.s%#<V_sz_elem> ge, %q1, %q2"
1075 [(set_attr "type" "mve_move")
1076])
1077
1078;;
1079;; [vcmpgtq_n_s])
1080;;
1081(define_insn "mve_vcmpgtq_n_s<mode>"
1082 [
1083 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1084 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1085 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1086 VCMPGTQ_N_S))
1087 ]
1088 "TARGET_HAVE_MVE"
1089 "vcmp.s%#<V_sz_elem> gt, %q1, %2"
1090 [(set_attr "type" "mve_move")
1091])
1092
1093;;
1094;; [vcmpgtq_s])
1095;;
1096(define_insn "mve_vcmpgtq_s<mode>"
1097 [
1098 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1099 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1100 (match_operand:MVE_2 2 "s_register_operand" "w")]
1101 VCMPGTQ_S))
1102 ]
1103 "TARGET_HAVE_MVE"
1104 "vcmp.s%#<V_sz_elem> gt, %q1, %q2"
1105 [(set_attr "type" "mve_move")
1106])
1107
1108;;
1109;; [vcmphiq_n_u])
1110;;
1111(define_insn "mve_vcmphiq_n_u<mode>"
1112 [
1113 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1114 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1115 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1116 VCMPHIQ_N_U))
1117 ]
1118 "TARGET_HAVE_MVE"
1119 "vcmp.u%#<V_sz_elem> hi, %q1, %2"
1120 [(set_attr "type" "mve_move")
1121])
1122
1123;;
1124;; [vcmphiq_u])
1125;;
1126(define_insn "mve_vcmphiq_u<mode>"
1127 [
1128 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1129 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1130 (match_operand:MVE_2 2 "s_register_operand" "w")]
1131 VCMPHIQ_U))
1132 ]
1133 "TARGET_HAVE_MVE"
1134 "vcmp.u%#<V_sz_elem> hi, %q1, %q2"
1135 [(set_attr "type" "mve_move")
1136])
1137
1138;;
1139;; [vcmpleq_n_s])
1140;;
1141(define_insn "mve_vcmpleq_n_s<mode>"
1142 [
1143 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1144 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1145 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1146 VCMPLEQ_N_S))
1147 ]
1148 "TARGET_HAVE_MVE"
1149 "vcmp.s%#<V_sz_elem> le, %q1, %2"
1150 [(set_attr "type" "mve_move")
1151])
1152
1153;;
1154;; [vcmpleq_s])
1155;;
1156(define_insn "mve_vcmpleq_s<mode>"
1157 [
1158 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1159 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1160 (match_operand:MVE_2 2 "s_register_operand" "w")]
1161 VCMPLEQ_S))
1162 ]
1163 "TARGET_HAVE_MVE"
1164 "vcmp.s%#<V_sz_elem> le, %q1, %q2"
1165 [(set_attr "type" "mve_move")
1166])
1167
1168;;
1169;; [vcmpltq_n_s])
1170;;
1171(define_insn "mve_vcmpltq_n_s<mode>"
1172 [
1173 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1174 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1175 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1176 VCMPLTQ_N_S))
1177 ]
1178 "TARGET_HAVE_MVE"
1179 "vcmp.s%#<V_sz_elem> lt, %q1, %2"
1180 [(set_attr "type" "mve_move")
1181])
1182
1183;;
1184;; [vcmpltq_s])
1185;;
1186(define_insn "mve_vcmpltq_s<mode>"
1187 [
1188 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1189 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1190 (match_operand:MVE_2 2 "s_register_operand" "w")]
1191 VCMPLTQ_S))
1192 ]
1193 "TARGET_HAVE_MVE"
1194 "vcmp.s%#<V_sz_elem> lt, %q1, %q2"
1195 [(set_attr "type" "mve_move")
1196])
1197
1198;;
1199;; [vcmpneq_n_u, vcmpneq_n_s])
1200;;
1201(define_insn "mve_vcmpneq_n_<supf><mode>"
1202 [
1203 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1204 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1205 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1206 VCMPNEQ_N))
1207 ]
1208 "TARGET_HAVE_MVE"
1209 "vcmp.i%#<V_sz_elem> ne, %q1, %2"
1210 [(set_attr "type" "mve_move")
1211])
1212
1213;;
1214;; [veorq_u, veorq_s])
1215;;
434fb3b6 1216(define_insn "mve_veorq_u<mode>"
33203b4c
SP
1217 [
1218 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
434fb3b6
CL
1219 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1220 (match_operand:MVE_2 2 "s_register_operand" "w")))
33203b4c
SP
1221 ]
1222 "TARGET_HAVE_MVE"
434fb3b6 1223 "veor\t%q0, %q1, %q2"
33203b4c
SP
1224 [(set_attr "type" "mve_move")
1225])
434fb3b6
CL
1226(define_expand "mve_veorq_s<mode>"
1227 [
1228 (set (match_operand:MVE_2 0 "s_register_operand")
1229 (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1230 (match_operand:MVE_2 2 "s_register_operand")))
1231 ]
1232 "TARGET_HAVE_MVE"
1233)
33203b4c
SP
1234
1235;;
1236;; [vhaddq_n_u, vhaddq_n_s])
1237;;
1238(define_insn "mve_vhaddq_n_<supf><mode>"
1239 [
1240 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1241 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1242 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1243 VHADDQ_N))
1244 ]
1245 "TARGET_HAVE_MVE"
1246 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1247 [(set_attr "type" "mve_move")
1248])
1249
1250;;
1251;; [vhaddq_s, vhaddq_u])
1252;;
1253(define_insn "mve_vhaddq_<supf><mode>"
1254 [
1255 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1256 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1257 (match_operand:MVE_2 2 "s_register_operand" "w")]
1258 VHADDQ))
1259 ]
1260 "TARGET_HAVE_MVE"
1261 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1262 [(set_attr "type" "mve_move")
1263])
1264
1265;;
1266;; [vhcaddq_rot270_s])
1267;;
1268(define_insn "mve_vhcaddq_rot270_s<mode>"
1269 [
6debbff6 1270 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
33203b4c
SP
1271 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1272 (match_operand:MVE_2 2 "s_register_operand" "w")]
1273 VHCADDQ_ROT270_S))
1274 ]
1275 "TARGET_HAVE_MVE"
1276 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1277 [(set_attr "type" "mve_move")
1278])
1279
1280;;
1281;; [vhcaddq_rot90_s])
1282;;
1283(define_insn "mve_vhcaddq_rot90_s<mode>"
1284 [
6debbff6 1285 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
33203b4c
SP
1286 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1287 (match_operand:MVE_2 2 "s_register_operand" "w")]
1288 VHCADDQ_ROT90_S))
1289 ]
1290 "TARGET_HAVE_MVE"
1291 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1292 [(set_attr "type" "mve_move")
1293])
1294
1295;;
1296;; [vhsubq_n_u, vhsubq_n_s])
1297;;
1298(define_insn "mve_vhsubq_n_<supf><mode>"
1299 [
1300 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1301 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1302 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1303 VHSUBQ_N))
1304 ]
1305 "TARGET_HAVE_MVE"
1306 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1307 [(set_attr "type" "mve_move")
1308])
1309
1310;;
1311;; [vhsubq_s, vhsubq_u])
1312;;
1313(define_insn "mve_vhsubq_<supf><mode>"
1314 [
1315 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1316 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1317 (match_operand:MVE_2 2 "s_register_operand" "w")]
1318 VHSUBQ))
1319 ]
1320 "TARGET_HAVE_MVE"
1321 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1322 [(set_attr "type" "mve_move")
1323])
1324
1325;;
1326;; [vmaxaq_s])
1327;;
1328(define_insn "mve_vmaxaq_s<mode>"
1329 [
1330 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1331 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1332 (match_operand:MVE_2 2 "s_register_operand" "w")]
1333 VMAXAQ_S))
1334 ]
1335 "TARGET_HAVE_MVE"
1336 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1337 [(set_attr "type" "mve_move")
1338])
1339
1340;;
1341;; [vmaxavq_s])
1342;;
1343(define_insn "mve_vmaxavq_s<mode>"
1344 [
1345 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1346 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1347 (match_operand:MVE_2 2 "s_register_operand" "w")]
1348 VMAXAVQ_S))
1349 ]
1350 "TARGET_HAVE_MVE"
1351 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1352 [(set_attr "type" "mve_move")
1353])
1354
1355;;
1356;; [vmaxq_u, vmaxq_s])
1357;;
76835dca 1358(define_insn "mve_vmaxq_s<mode>"
33203b4c
SP
1359 [
1360 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
76835dca
DZ
1361 (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1362 (match_operand:MVE_2 2 "s_register_operand" "w")))
33203b4c
SP
1363 ]
1364 "TARGET_HAVE_MVE"
76835dca
DZ
1365 "vmax.%#<V_s_elem>\t%q0, %q1, %q2"
1366 [(set_attr "type" "mve_move")
1367])
1368
1369(define_insn "mve_vmaxq_u<mode>"
1370 [
1371 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1372 (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1373 (match_operand:MVE_2 2 "s_register_operand" "w")))
1374 ]
1375 "TARGET_HAVE_MVE"
1376 "vmax.%#<V_u_elem>\t%q0, %q1, %q2"
33203b4c
SP
1377 [(set_attr "type" "mve_move")
1378])
1379
1380;;
1381;; [vmaxvq_u, vmaxvq_s])
1382;;
1383(define_insn "mve_vmaxvq_<supf><mode>"
1384 [
1385 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1386 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1387 (match_operand:MVE_2 2 "s_register_operand" "w")]
1388 VMAXVQ))
1389 ]
1390 "TARGET_HAVE_MVE"
1391 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1392 [(set_attr "type" "mve_move")
1393])
1394
1395;;
1396;; [vminaq_s])
1397;;
1398(define_insn "mve_vminaq_s<mode>"
1399 [
1400 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1401 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1402 (match_operand:MVE_2 2 "s_register_operand" "w")]
1403 VMINAQ_S))
1404 ]
1405 "TARGET_HAVE_MVE"
1406 "vmina.s%#<V_sz_elem>\t%q0, %q2"
1407 [(set_attr "type" "mve_move")
1408])
1409
1410;;
1411;; [vminavq_s])
1412;;
1413(define_insn "mve_vminavq_s<mode>"
1414 [
1415 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1416 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1417 (match_operand:MVE_2 2 "s_register_operand" "w")]
1418 VMINAVQ_S))
1419 ]
1420 "TARGET_HAVE_MVE"
1421 "vminav.s%#<V_sz_elem>\t%0, %q2"
1422 [(set_attr "type" "mve_move")
1423])
1424
1425;;
1426;; [vminq_s, vminq_u])
1427;;
76835dca 1428(define_insn "mve_vminq_s<mode>"
33203b4c
SP
1429 [
1430 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
76835dca
DZ
1431 (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1432 (match_operand:MVE_2 2 "s_register_operand" "w")))
33203b4c
SP
1433 ]
1434 "TARGET_HAVE_MVE"
76835dca
DZ
1435 "vmin.%#<V_s_elem>\t%q0, %q1, %q2"
1436 [(set_attr "type" "mve_move")
1437])
1438
1439(define_insn "mve_vminq_u<mode>"
1440 [
1441 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1442 (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1443 (match_operand:MVE_2 2 "s_register_operand" "w")))
1444 ]
1445 "TARGET_HAVE_MVE"
1446 "vmin.%#<V_u_elem>\t%q0, %q1, %q2"
33203b4c
SP
1447 [(set_attr "type" "mve_move")
1448])
1449
1450;;
1451;; [vminvq_u, vminvq_s])
1452;;
1453(define_insn "mve_vminvq_<supf><mode>"
1454 [
1455 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1456 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1457 (match_operand:MVE_2 2 "s_register_operand" "w")]
1458 VMINVQ))
1459 ]
1460 "TARGET_HAVE_MVE"
1461 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
1462 [(set_attr "type" "mve_move")
1463])
1464
1465;;
1466;; [vmladavq_u, vmladavq_s])
1467;;
1468(define_insn "mve_vmladavq_<supf><mode>"
1469 [
3d537943 1470 (set (match_operand:SI 0 "s_register_operand" "=Te")
33203b4c
SP
1471 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1472 (match_operand:MVE_2 2 "s_register_operand" "w")]
1473 VMLADAVQ))
1474 ]
1475 "TARGET_HAVE_MVE"
1476 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
1477 [(set_attr "type" "mve_move")
1478])
1479
1480;;
1481;; [vmladavxq_s])
1482;;
1483(define_insn "mve_vmladavxq_s<mode>"
1484 [
3d537943 1485 (set (match_operand:SI 0 "s_register_operand" "=Te")
33203b4c
SP
1486 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1487 (match_operand:MVE_2 2 "s_register_operand" "w")]
1488 VMLADAVXQ_S))
1489 ]
1490 "TARGET_HAVE_MVE"
1491 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1492 [(set_attr "type" "mve_move")
1493])
1494
1495;;
1496;; [vmlsdavq_s])
1497;;
1498(define_insn "mve_vmlsdavq_s<mode>"
1499 [
3d537943 1500 (set (match_operand:SI 0 "s_register_operand" "=Te")
33203b4c
SP
1501 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1502 (match_operand:MVE_2 2 "s_register_operand" "w")]
1503 VMLSDAVQ_S))
1504 ]
1505 "TARGET_HAVE_MVE"
1506 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
1507 [(set_attr "type" "mve_move")
1508])
1509
1510;;
1511;; [vmlsdavxq_s])
1512;;
1513(define_insn "mve_vmlsdavxq_s<mode>"
1514 [
3d537943 1515 (set (match_operand:SI 0 "s_register_operand" "=Te")
33203b4c
SP
1516 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1517 (match_operand:MVE_2 2 "s_register_operand" "w")]
1518 VMLSDAVXQ_S))
1519 ]
1520 "TARGET_HAVE_MVE"
1521 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1522 [(set_attr "type" "mve_move")
1523])
1524
1525;;
1526;; [vmulhq_s, vmulhq_u])
1527;;
1528(define_insn "mve_vmulhq_<supf><mode>"
1529 [
1530 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1531 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1532 (match_operand:MVE_2 2 "s_register_operand" "w")]
1533 VMULHQ))
1534 ]
1535 "TARGET_HAVE_MVE"
1536 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1537 [(set_attr "type" "mve_move")
1538])
1539
1540;;
1541;; [vmullbq_int_u, vmullbq_int_s])
1542;;
1543(define_insn "mve_vmullbq_int_<supf><mode>"
1544 [
6debbff6 1545 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
33203b4c
SP
1546 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1547 (match_operand:MVE_2 2 "s_register_operand" "w")]
1548 VMULLBQ_INT))
1549 ]
1550 "TARGET_HAVE_MVE"
1551 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1552 [(set_attr "type" "mve_move")
1553])
1554
1555;;
1556;; [vmulltq_int_u, vmulltq_int_s])
1557;;
1558(define_insn "mve_vmulltq_int_<supf><mode>"
1559 [
6debbff6 1560 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
33203b4c
SP
1561 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1562 (match_operand:MVE_2 2 "s_register_operand" "w")]
1563 VMULLTQ_INT))
1564 ]
1565 "TARGET_HAVE_MVE"
1566 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1567 [(set_attr "type" "mve_move")
1568])
1569
1570;;
1571;; [vmulq_n_u, vmulq_n_s])
1572;;
1573(define_insn "mve_vmulq_n_<supf><mode>"
1574 [
1575 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1576 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1577 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1578 VMULQ_N))
1579 ]
1580 "TARGET_HAVE_MVE"
1581 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
1582 [(set_attr "type" "mve_move")
1583])
1584
1585;;
1586;; [vmulq_u, vmulq_s])
1587;;
1588(define_insn "mve_vmulq_<supf><mode>"
1589 [
1590 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1591 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1592 (match_operand:MVE_2 2 "s_register_operand" "w")]
1593 VMULQ))
1594 ]
1595 "TARGET_HAVE_MVE"
1596 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1597 [(set_attr "type" "mve_move")
1598])
1599
0f41b5e0
DZ
1600(define_insn "mve_vmulq<mode>"
1601 [
1602 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1603 (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
1604 (match_operand:MVE_2 2 "s_register_operand" "w")))
1605 ]
1606 "TARGET_HAVE_MVE"
1607 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1608 [(set_attr "type" "mve_move")
1609])
1610
33203b4c
SP
1611;;
1612;; [vornq_u, vornq_s])
1613;;
1614(define_insn "mve_vornq_<supf><mode>"
1615 [
1616 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1617 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1618 (match_operand:MVE_2 2 "s_register_operand" "w")]
1619 VORNQ))
1620 ]
1621 "TARGET_HAVE_MVE"
1622 "vorn %q0, %q1, %q2"
1623 [(set_attr "type" "mve_move")
1624])
1625
1626;;
1627;; [vorrq_s, vorrq_u])
1628;;
75de6a28
CL
1629;; signed and unsigned versions are the same: define the unsigned
1630;; insn, and use an expander for the signed one as we still reference
1631;; both names from arm_mve.h.
1632;; We use the same code as in neon.md (TODO: avoid this duplication).
1633(define_insn "mve_vorrq_s<mode>"
33203b4c 1634 [
75de6a28
CL
1635 (set (match_operand:MVE_2 0 "s_register_operand" "=w,w")
1636 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0")
1637 (match_operand:MVE_2 2 "neon_logic_op2" "w,Dl")))
33203b4c
SP
1638 ]
1639 "TARGET_HAVE_MVE"
75de6a28
CL
1640 "@
1641 vorr\t%q0, %q1, %q2
1642 * return neon_output_logic_immediate (\"vorr\", &operands[2], <MODE>mode, 0, VALID_NEON_QREG_MODE (<MODE>mode));"
33203b4c
SP
1643 [(set_attr "type" "mve_move")
1644])
75de6a28
CL
1645(define_expand "mve_vorrq_u<mode>"
1646 [
1647 (set (match_operand:MVE_2 0 "s_register_operand")
1648 (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand")
1649 (match_operand:MVE_2 2 "neon_logic_op2")))
1650 ]
1651 "TARGET_HAVE_MVE"
1652)
33203b4c
SP
1653
1654;;
1655;; [vqaddq_n_s, vqaddq_n_u])
1656;;
1657(define_insn "mve_vqaddq_n_<supf><mode>"
1658 [
1659 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1660 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1661 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1662 VQADDQ_N))
1663 ]
1664 "TARGET_HAVE_MVE"
1665 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1666 [(set_attr "type" "mve_move")
1667])
1668
1669;;
1670;; [vqaddq_u, vqaddq_s])
1671;;
1672(define_insn "mve_vqaddq_<supf><mode>"
1673 [
1674 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1675 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1676 (match_operand:MVE_2 2 "s_register_operand" "w")]
1677 VQADDQ))
1678 ]
1679 "TARGET_HAVE_MVE"
1680 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1681 [(set_attr "type" "mve_move")
1682])
1683
1684;;
1685;; [vqdmulhq_n_s])
1686;;
1687(define_insn "mve_vqdmulhq_n_s<mode>"
1688 [
1689 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1690 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1691 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1692 VQDMULHQ_N_S))
1693 ]
1694 "TARGET_HAVE_MVE"
1695 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1696 [(set_attr "type" "mve_move")
1697])
1698
1699;;
1700;; [vqdmulhq_s])
1701;;
1702(define_insn "mve_vqdmulhq_s<mode>"
1703 [
1704 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1705 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1706 (match_operand:MVE_2 2 "s_register_operand" "w")]
1707 VQDMULHQ_S))
1708 ]
1709 "TARGET_HAVE_MVE"
1710 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1711 [(set_attr "type" "mve_move")
1712])
1713
1714;;
1715;; [vqrdmulhq_n_s])
1716;;
1717(define_insn "mve_vqrdmulhq_n_s<mode>"
1718 [
1719 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1720 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1721 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1722 VQRDMULHQ_N_S))
1723 ]
1724 "TARGET_HAVE_MVE"
1725 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1726 [(set_attr "type" "mve_move")
1727])
1728
1729;;
1730;; [vqrdmulhq_s])
1731;;
1732(define_insn "mve_vqrdmulhq_s<mode>"
1733 [
1734 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1735 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1736 (match_operand:MVE_2 2 "s_register_operand" "w")]
1737 VQRDMULHQ_S))
1738 ]
1739 "TARGET_HAVE_MVE"
1740 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
1741 [(set_attr "type" "mve_move")
1742])
1743
1744;;
1745;; [vqrshlq_n_s, vqrshlq_n_u])
1746;;
1747(define_insn "mve_vqrshlq_n_<supf><mode>"
1748 [
1749 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1750 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1751 (match_operand:SI 2 "s_register_operand" "r")]
1752 VQRSHLQ_N))
1753 ]
1754 "TARGET_HAVE_MVE"
1755 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1756 [(set_attr "type" "mve_move")
1757])
1758
1759;;
1760;; [vqrshlq_s, vqrshlq_u])
1761;;
1762(define_insn "mve_vqrshlq_<supf><mode>"
1763 [
1764 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1765 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1766 (match_operand:MVE_2 2 "s_register_operand" "w")]
1767 VQRSHLQ))
1768 ]
1769 "TARGET_HAVE_MVE"
1770 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1771 [(set_attr "type" "mve_move")
1772])
1773
1774;;
1775;; [vqshlq_n_s, vqshlq_n_u])
1776;;
1777(define_insn "mve_vqshlq_n_<supf><mode>"
1778 [
1779 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1780 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1781 (match_operand:SI 2 "immediate_operand" "i")]
1782 VQSHLQ_N))
1783 ]
1784 "TARGET_HAVE_MVE"
1785 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1786 [(set_attr "type" "mve_move")
1787])
1788
1789;;
1790;; [vqshlq_r_u, vqshlq_r_s])
1791;;
1792(define_insn "mve_vqshlq_r_<supf><mode>"
1793 [
1794 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1795 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1796 (match_operand:SI 2 "s_register_operand" "r")]
1797 VQSHLQ_R))
1798 ]
1799 "TARGET_HAVE_MVE"
1800 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
1801 [(set_attr "type" "mve_move")
1802])
1803
1804;;
1805;; [vqshlq_s, vqshlq_u])
1806;;
1807(define_insn "mve_vqshlq_<supf><mode>"
1808 [
1809 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1810 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1811 (match_operand:MVE_2 2 "s_register_operand" "w")]
1812 VQSHLQ))
1813 ]
1814 "TARGET_HAVE_MVE"
1815 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1816 [(set_attr "type" "mve_move")
1817])
1818
1819;;
1820;; [vqshluq_n_s])
1821;;
1822(define_insn "mve_vqshluq_n_s<mode>"
1823 [
1824 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1825 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1826 (match_operand:SI 2 "mve_imm_7" "Ra")]
1827 VQSHLUQ_N_S))
1828 ]
1829 "TARGET_HAVE_MVE"
1830 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
1831 [(set_attr "type" "mve_move")
1832])
1833
1834;;
1835;; [vqsubq_n_s, vqsubq_n_u])
1836;;
1837(define_insn "mve_vqsubq_n_<supf><mode>"
1838 [
1839 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1840 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1841 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1842 VQSUBQ_N))
1843 ]
1844 "TARGET_HAVE_MVE"
1845 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1846 [(set_attr "type" "mve_move")
1847])
1848
1849;;
1850;; [vqsubq_u, vqsubq_s])
1851;;
1852(define_insn "mve_vqsubq_<supf><mode>"
1853 [
1854 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1855 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1856 (match_operand:MVE_2 2 "s_register_operand" "w")]
1857 VQSUBQ))
1858 ]
1859 "TARGET_HAVE_MVE"
1860 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1861 [(set_attr "type" "mve_move")
1862])
1863
1864;;
1865;; [vrhaddq_s, vrhaddq_u])
1866;;
1867(define_insn "mve_vrhaddq_<supf><mode>"
1868 [
1869 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1870 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1871 (match_operand:MVE_2 2 "s_register_operand" "w")]
1872 VRHADDQ))
1873 ]
1874 "TARGET_HAVE_MVE"
1875 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1876 [(set_attr "type" "mve_move")
1877])
1878
1879;;
1880;; [vrmulhq_s, vrmulhq_u])
1881;;
1882(define_insn "mve_vrmulhq_<supf><mode>"
1883 [
1884 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1885 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1886 (match_operand:MVE_2 2 "s_register_operand" "w")]
1887 VRMULHQ))
1888 ]
1889 "TARGET_HAVE_MVE"
1890 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1891 [(set_attr "type" "mve_move")
1892])
1893
1894;;
1895;; [vrshlq_n_u, vrshlq_n_s])
1896;;
1897(define_insn "mve_vrshlq_n_<supf><mode>"
1898 [
1899 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1900 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1901 (match_operand:SI 2 "s_register_operand" "r")]
1902 VRSHLQ_N))
1903 ]
1904 "TARGET_HAVE_MVE"
1905 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
1906 [(set_attr "type" "mve_move")
1907])
1908
1909;;
1910;; [vrshlq_s, vrshlq_u])
1911;;
1912(define_insn "mve_vrshlq_<supf><mode>"
1913 [
1914 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1915 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1916 (match_operand:MVE_2 2 "s_register_operand" "w")]
1917 VRSHLQ))
1918 ]
1919 "TARGET_HAVE_MVE"
1920 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1921 [(set_attr "type" "mve_move")
1922])
1923
1924;;
1925;; [vrshrq_n_s, vrshrq_n_u])
1926;;
1927(define_insn "mve_vrshrq_n_<supf><mode>"
1928 [
1929 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1930 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1931 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1932 VRSHRQ_N))
1933 ]
1934 "TARGET_HAVE_MVE"
1935 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1936 [(set_attr "type" "mve_move")
1937])
1938
1939;;
1940;; [vshlq_n_u, vshlq_n_s])
1941;;
1942(define_insn "mve_vshlq_n_<supf><mode>"
1943 [
1944 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1945 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1946 (match_operand:SI 2 "immediate_operand" "i")]
1947 VSHLQ_N))
1948 ]
1949 "TARGET_HAVE_MVE"
1950 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1951 [(set_attr "type" "mve_move")
1952])
1953
1954;;
1955;; [vshlq_r_s, vshlq_r_u])
1956;;
1957(define_insn "mve_vshlq_r_<supf><mode>"
1958 [
1959 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1960 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1961 (match_operand:SI 2 "s_register_operand" "r")]
1962 VSHLQ_R))
1963 ]
1964 "TARGET_HAVE_MVE"
1965 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
1966 [(set_attr "type" "mve_move")
1967])
1968
1969;;
1970;; [vsubq_n_s, vsubq_n_u])
1971;;
1972(define_insn "mve_vsubq_n_<supf><mode>"
1973 [
1974 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1975 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1976 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1977 VSUBQ_N))
1978 ]
1979 "TARGET_HAVE_MVE"
1980 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
1981 [(set_attr "type" "mve_move")
1982])
1983
1984;;
1985;; [vsubq_s, vsubq_u])
1986;;
1987(define_insn "mve_vsubq_<supf><mode>"
1988 [
1989 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1990 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1991 (match_operand:MVE_2 2 "s_register_operand" "w")]
1992 VSUBQ))
1993 ]
1994 "TARGET_HAVE_MVE"
1995 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
1996 [(set_attr "type" "mve_move")
1997])
f9355dee 1998
98161c24
DZ
1999(define_insn "mve_vsubq<mode>"
2000 [
2001 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2002 (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
2003 (match_operand:MVE_2 2 "s_register_operand" "w")))
2004 ]
2005 "TARGET_HAVE_MVE"
2006 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
2007 [(set_attr "type" "mve_move")
2008])
2009
f9355dee
SP
2010;;
2011;; [vabdq_f])
2012;;
2013(define_insn "mve_vabdq_f<mode>"
2014 [
2015 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2016 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2017 (match_operand:MVE_0 2 "s_register_operand" "w")]
2018 VABDQ_F))
2019 ]
2020 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2021 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
2022 [(set_attr "type" "mve_move")
2023])
2024
2025;;
2026;; [vaddlvaq_s vaddlvaq_u])
2027;;
2028(define_insn "mve_vaddlvaq_<supf>v4si"
2029 [
2030 (set (match_operand:DI 0 "s_register_operand" "=r")
2031 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2032 (match_operand:V4SI 2 "s_register_operand" "w")]
2033 VADDLVAQ))
2034 ]
2035 "TARGET_HAVE_MVE"
2036 "vaddlva.<supf>32 %Q0, %R0, %q2"
2037 [(set_attr "type" "mve_move")
2038])
2039
2040;;
2041;; [vaddq_n_f])
2042;;
2043(define_insn "mve_vaddq_n_f<mode>"
2044 [
2045 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2046 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2047 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2048 VADDQ_N_F))
2049 ]
2050 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2051 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
2052 [(set_attr "type" "mve_move")
2053])
2054
2055;;
2056;; [vandq_f])
2057;;
2058(define_insn "mve_vandq_f<mode>"
2059 [
2060 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
11a0beff
CL
2061 (and:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2062 (match_operand:MVE_0 2 "s_register_operand" "w")))
f9355dee
SP
2063 ]
2064 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2065 "vand %q0, %q1, %q2"
2066 [(set_attr "type" "mve_move")
2067])
2068
2069;;
2070;; [vbicq_f])
2071;;
2072(define_insn "mve_vbicq_f<mode>"
2073 [
2074 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5391cf07
CL
2075 (and:MVE_0 (not:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))
2076 (match_operand:MVE_0 2 "s_register_operand" "w")))
f9355dee
SP
2077 ]
2078 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2079 "vbic %q0, %q1, %q2"
2080 [(set_attr "type" "mve_move")
2081])
2082
2083;;
2084;; [vbicq_n_s, vbicq_n_u])
2085;;
2086(define_insn "mve_vbicq_n_<supf><mode>"
2087 [
2088 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2089 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2090 (match_operand:SI 2 "immediate_operand" "i")]
2091 VBICQ_N))
2092 ]
2093 "TARGET_HAVE_MVE"
2094 "vbic.i%#<V_sz_elem> %q0, %2"
2095 [(set_attr "type" "mve_move")
2096])
2097
2098;;
9732dc85 2099;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270])
3cc4e183 2100;;
9732dc85 2101(define_insn "mve_vcaddq<mve_rot><mode>"
3cc4e183
TC
2102 [
2103 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2104 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2105 (match_operand:MVE_0 2 "s_register_operand" "w")]
9732dc85 2106 VCADD))
3cc4e183
TC
2107 ]
2108 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9732dc85 2109 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
f9355dee
SP
2110 [(set_attr "type" "mve_move")
2111])
2112
2113;;
2114;; [vcmpeqq_f])
2115;;
2116(define_insn "mve_vcmpeqq_f<mode>"
2117 [
2118 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2119 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2120 (match_operand:MVE_0 2 "s_register_operand" "w")]
2121 VCMPEQQ_F))
2122 ]
2123 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2124 "vcmp.f%#<V_sz_elem> eq, %q1, %q2"
2125 [(set_attr "type" "mve_move")
2126])
2127
2128;;
2129;; [vcmpeqq_n_f])
2130;;
2131(define_insn "mve_vcmpeqq_n_f<mode>"
2132 [
2133 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2134 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2135 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2136 VCMPEQQ_N_F))
2137 ]
2138 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2139 "vcmp.f%#<V_sz_elem> eq, %q1, %2"
2140 [(set_attr "type" "mve_move")
2141])
2142
2143;;
2144;; [vcmpgeq_f])
2145;;
2146(define_insn "mve_vcmpgeq_f<mode>"
2147 [
2148 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2149 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2150 (match_operand:MVE_0 2 "s_register_operand" "w")]
2151 VCMPGEQ_F))
2152 ]
2153 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2154 "vcmp.f%#<V_sz_elem> ge, %q1, %q2"
2155 [(set_attr "type" "mve_move")
2156])
2157
2158;;
2159;; [vcmpgeq_n_f])
2160;;
2161(define_insn "mve_vcmpgeq_n_f<mode>"
2162 [
2163 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2164 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2165 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2166 VCMPGEQ_N_F))
2167 ]
2168 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2169 "vcmp.f%#<V_sz_elem> ge, %q1, %2"
2170 [(set_attr "type" "mve_move")
2171])
2172
2173;;
2174;; [vcmpgtq_f])
2175;;
2176(define_insn "mve_vcmpgtq_f<mode>"
2177 [
2178 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2179 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2180 (match_operand:MVE_0 2 "s_register_operand" "w")]
2181 VCMPGTQ_F))
2182 ]
2183 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2184 "vcmp.f%#<V_sz_elem> gt, %q1, %q2"
2185 [(set_attr "type" "mve_move")
2186])
2187
2188;;
2189;; [vcmpgtq_n_f])
2190;;
2191(define_insn "mve_vcmpgtq_n_f<mode>"
2192 [
2193 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2194 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2195 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2196 VCMPGTQ_N_F))
2197 ]
2198 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2199 "vcmp.f%#<V_sz_elem> gt, %q1, %2"
2200 [(set_attr "type" "mve_move")
2201])
2202
2203;;
2204;; [vcmpleq_f])
2205;;
2206(define_insn "mve_vcmpleq_f<mode>"
2207 [
2208 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2209 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2210 (match_operand:MVE_0 2 "s_register_operand" "w")]
2211 VCMPLEQ_F))
2212 ]
2213 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2214 "vcmp.f%#<V_sz_elem> le, %q1, %q2"
2215 [(set_attr "type" "mve_move")
2216])
2217
2218;;
2219;; [vcmpleq_n_f])
2220;;
2221(define_insn "mve_vcmpleq_n_f<mode>"
2222 [
2223 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2224 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2225 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2226 VCMPLEQ_N_F))
2227 ]
2228 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2229 "vcmp.f%#<V_sz_elem> le, %q1, %2"
2230 [(set_attr "type" "mve_move")
2231])
2232
2233;;
2234;; [vcmpltq_f])
2235;;
2236(define_insn "mve_vcmpltq_f<mode>"
2237 [
2238 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2239 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2240 (match_operand:MVE_0 2 "s_register_operand" "w")]
2241 VCMPLTQ_F))
2242 ]
2243 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2244 "vcmp.f%#<V_sz_elem> lt, %q1, %q2"
2245 [(set_attr "type" "mve_move")
2246])
2247
2248;;
2249;; [vcmpltq_n_f])
2250;;
2251(define_insn "mve_vcmpltq_n_f<mode>"
2252 [
2253 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2254 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2255 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2256 VCMPLTQ_N_F))
2257 ]
2258 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2259 "vcmp.f%#<V_sz_elem> lt, %q1, %2"
2260 [(set_attr "type" "mve_move")
2261])
2262
2263;;
2264;; [vcmpneq_f])
2265;;
2266(define_insn "mve_vcmpneq_f<mode>"
2267 [
2268 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2269 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2270 (match_operand:MVE_0 2 "s_register_operand" "w")]
2271 VCMPNEQ_F))
2272 ]
2273 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2274 "vcmp.f%#<V_sz_elem> ne, %q1, %q2"
2275 [(set_attr "type" "mve_move")
2276])
2277
2278;;
2279;; [vcmpneq_n_f])
2280;;
2281(define_insn "mve_vcmpneq_n_f<mode>"
2282 [
2283 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2284 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2285 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2286 VCMPNEQ_N_F))
2287 ]
2288 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2289 "vcmp.f%#<V_sz_elem> ne, %q1, %2"
2290 [(set_attr "type" "mve_move")
2291])
2292
2293;;
db253e8b 2294;; [vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270])
3cc4e183 2295;;
db253e8b 2296(define_insn "mve_vcmulq<mve_rot><mode>"
3cc4e183
TC
2297 [
2298 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2299 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2300 (match_operand:MVE_0 2 "s_register_operand" "w")]
db253e8b 2301 VCMUL))
3cc4e183
TC
2302 ]
2303 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
db253e8b 2304 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>"
f9355dee
SP
2305 [(set_attr "type" "mve_move")
2306])
2307
2308;;
2309;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
2310;;
2311(define_insn "mve_vctp<mode1>q_mhi"
2312 [
2313 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2314 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
2315 (match_operand:HI 2 "vpr_register_operand" "Up")]
2316 VCTPQ_M))
2317 ]
2318 "TARGET_HAVE_MVE"
2319 "vpst\;vctpt.<mode1> %1"
2320 [(set_attr "type" "mve_move")
2321 (set_attr "length""8")])
2322
2323;;
2324;; [vcvtbq_f16_f32])
2325;;
2326(define_insn "mve_vcvtbq_f16_f32v8hf"
2327 [
2328 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2329 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2330 (match_operand:V4SF 2 "s_register_operand" "w")]
2331 VCVTBQ_F16_F32))
2332 ]
2333 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2334 "vcvtb.f16.f32 %q0, %q2"
2335 [(set_attr "type" "mve_move")
2336])
2337
2338;;
2339;; [vcvttq_f16_f32])
2340;;
2341(define_insn "mve_vcvttq_f16_f32v8hf"
2342 [
2343 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2344 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2345 (match_operand:V4SF 2 "s_register_operand" "w")]
2346 VCVTTQ_F16_F32))
2347 ]
2348 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2349 "vcvtt.f16.f32 %q0, %q2"
2350 [(set_attr "type" "mve_move")
2351])
2352
2353;;
2354;; [veorq_f])
2355;;
2356(define_insn "mve_veorq_f<mode>"
2357 [
2358 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
434fb3b6
CL
2359 (xor:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2360 (match_operand:MVE_0 2 "s_register_operand" "w")))
f9355dee
SP
2361 ]
2362 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2363 "veor %q0, %q1, %q2"
2364 [(set_attr "type" "mve_move")
2365])
2366
2367;;
2368;; [vmaxnmaq_f])
2369;;
2370(define_insn "mve_vmaxnmaq_f<mode>"
2371 [
2372 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2373 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2374 (match_operand:MVE_0 2 "s_register_operand" "w")]
2375 VMAXNMAQ_F))
2376 ]
2377 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2378 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
2379 [(set_attr "type" "mve_move")
2380])
2381
2382;;
2383;; [vmaxnmavq_f])
2384;;
2385(define_insn "mve_vmaxnmavq_f<mode>"
2386 [
2387 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2388 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2389 (match_operand:MVE_0 2 "s_register_operand" "w")]
2390 VMAXNMAVQ_F))
2391 ]
2392 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2393 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
2394 [(set_attr "type" "mve_move")
2395])
2396
2397;;
2398;; [vmaxnmq_f])
2399;;
2400(define_insn "mve_vmaxnmq_f<mode>"
2401 [
2402 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
76835dca
DZ
2403 (smax:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2404 (match_operand:MVE_0 2 "s_register_operand" "w")))
f9355dee
SP
2405 ]
2406 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2407 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
2408 [(set_attr "type" "mve_move")
2409])
2410
2411;;
2412;; [vmaxnmvq_f])
2413;;
2414(define_insn "mve_vmaxnmvq_f<mode>"
2415 [
2416 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2417 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2418 (match_operand:MVE_0 2 "s_register_operand" "w")]
2419 VMAXNMVQ_F))
2420 ]
2421 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2422 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
2423 [(set_attr "type" "mve_move")
2424])
2425
2426;;
2427;; [vminnmaq_f])
2428;;
2429(define_insn "mve_vminnmaq_f<mode>"
2430 [
2431 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2432 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2433 (match_operand:MVE_0 2 "s_register_operand" "w")]
2434 VMINNMAQ_F))
2435 ]
2436 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2437 "vminnma.f%#<V_sz_elem> %q0, %q2"
2438 [(set_attr "type" "mve_move")
2439])
2440
2441;;
2442;; [vminnmavq_f])
2443;;
2444(define_insn "mve_vminnmavq_f<mode>"
2445 [
2446 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2447 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2448 (match_operand:MVE_0 2 "s_register_operand" "w")]
2449 VMINNMAVQ_F))
2450 ]
2451 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2452 "vminnmav.f%#<V_sz_elem> %0, %q2"
2453 [(set_attr "type" "mve_move")
2454])
2455
2456;;
2457;; [vminnmq_f])
2458;;
2459(define_insn "mve_vminnmq_f<mode>"
2460 [
2461 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
76835dca
DZ
2462 (smin:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2463 (match_operand:MVE_0 2 "s_register_operand" "w")))
f9355dee
SP
2464 ]
2465 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2466 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
2467 [(set_attr "type" "mve_move")
2468])
2469
2470;;
2471;; [vminnmvq_f])
2472;;
2473(define_insn "mve_vminnmvq_f<mode>"
2474 [
2475 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2476 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2477 (match_operand:MVE_0 2 "s_register_operand" "w")]
2478 VMINNMVQ_F))
2479 ]
2480 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2481 "vminnmv.f%#<V_sz_elem> %0, %q2"
2482 [(set_attr "type" "mve_move")
2483])
2484
2485;;
2486;; [vmlaldavq_u, vmlaldavq_s])
2487;;
2488(define_insn "mve_vmlaldavq_<supf><mode>"
2489 [
2490 (set (match_operand:DI 0 "s_register_operand" "=r")
2491 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2492 (match_operand:MVE_5 2 "s_register_operand" "w")]
2493 VMLALDAVQ))
2494 ]
2495 "TARGET_HAVE_MVE"
2496 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2497 [(set_attr "type" "mve_move")
2498])
2499
2500;;
2501;; [vmlaldavxq_s])
2502;;
2503(define_insn "mve_vmlaldavxq_s<mode>"
2504 [
2505 (set (match_operand:DI 0 "s_register_operand" "=r")
2506 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2507 (match_operand:MVE_5 2 "s_register_operand" "w")]
2508 VMLALDAVXQ_S))
2509 ]
2510 "TARGET_HAVE_MVE"
2511 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2512 [(set_attr "type" "mve_move")
2513])
2514
2515;;
2516;; [vmlsldavq_s])
2517;;
2518(define_insn "mve_vmlsldavq_s<mode>"
2519 [
2520 (set (match_operand:DI 0 "s_register_operand" "=r")
2521 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2522 (match_operand:MVE_5 2 "s_register_operand" "w")]
2523 VMLSLDAVQ_S))
2524 ]
2525 "TARGET_HAVE_MVE"
2526 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2527 [(set_attr "type" "mve_move")
2528])
2529
2530;;
2531;; [vmlsldavxq_s])
2532;;
2533(define_insn "mve_vmlsldavxq_s<mode>"
2534 [
2535 (set (match_operand:DI 0 "s_register_operand" "=r")
2536 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2537 (match_operand:MVE_5 2 "s_register_operand" "w")]
2538 VMLSLDAVXQ_S))
2539 ]
2540 "TARGET_HAVE_MVE"
2541 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2542 [(set_attr "type" "mve_move")
2543])
2544
2545;;
2546;; [vmovnbq_u, vmovnbq_s])
2547;;
2548(define_insn "mve_vmovnbq_<supf><mode>"
2549 [
2550 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2551 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2552 (match_operand:MVE_5 2 "s_register_operand" "w")]
2553 VMOVNBQ))
2554 ]
2555 "TARGET_HAVE_MVE"
2556 "vmovnb.i%#<V_sz_elem> %q0, %q2"
2557 [(set_attr "type" "mve_move")
2558])
2559
2560;;
2561;; [vmovntq_s, vmovntq_u])
2562;;
2563(define_insn "mve_vmovntq_<supf><mode>"
2564 [
2565 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2566 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2567 (match_operand:MVE_5 2 "s_register_operand" "w")]
2568 VMOVNTQ))
2569 ]
2570 "TARGET_HAVE_MVE"
2571 "vmovnt.i%#<V_sz_elem> %q0, %q2"
2572 [(set_attr "type" "mve_move")
2573])
2574
2575;;
2576;; [vmulq_f])
2577;;
2578(define_insn "mve_vmulq_f<mode>"
2579 [
2580 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
0f41b5e0
DZ
2581 (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2582 (match_operand:MVE_0 2 "s_register_operand" "w")))
f9355dee
SP
2583 ]
2584 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2585 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
2586 [(set_attr "type" "mve_move")
2587])
2588
2589;;
2590;; [vmulq_n_f])
2591;;
2592(define_insn "mve_vmulq_n_f<mode>"
2593 [
2594 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2595 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2596 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2597 VMULQ_N_F))
2598 ]
2599 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2600 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
2601 [(set_attr "type" "mve_move")
2602])
2603
2604;;
2605;; [vornq_f])
2606;;
2607(define_insn "mve_vornq_f<mode>"
2608 [
2609 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2610 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2611 (match_operand:MVE_0 2 "s_register_operand" "w")]
2612 VORNQ_F))
2613 ]
2614 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2615 "vorn %q0, %q1, %q2"
2616 [(set_attr "type" "mve_move")
2617])
2618
2619;;
2620;; [vorrq_f])
2621;;
2622(define_insn "mve_vorrq_f<mode>"
2623 [
2624 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
75de6a28
CL
2625 (ior:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2626 (match_operand:MVE_0 2 "s_register_operand" "w")))
f9355dee
SP
2627 ]
2628 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2629 "vorr %q0, %q1, %q2"
2630 [(set_attr "type" "mve_move")
2631])
2632
2633;;
2634;; [vorrq_n_u, vorrq_n_s])
2635;;
2636(define_insn "mve_vorrq_n_<supf><mode>"
2637 [
2638 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2639 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2640 (match_operand:SI 2 "immediate_operand" "i")]
2641 VORRQ_N))
2642 ]
2643 "TARGET_HAVE_MVE"
2644 "vorr.i%#<V_sz_elem> %q0, %2"
2645 [(set_attr "type" "mve_move")
2646])
2647
2648;;
2649;; [vqdmullbq_n_s])
2650;;
2651(define_insn "mve_vqdmullbq_n_s<mode>"
2652 [
6debbff6 2653 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
f9355dee
SP
2654 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2655 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2656 VQDMULLBQ_N_S))
2657 ]
2658 "TARGET_HAVE_MVE"
2659 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
2660 [(set_attr "type" "mve_move")
2661])
2662
2663;;
2664;; [vqdmullbq_s])
2665;;
2666(define_insn "mve_vqdmullbq_s<mode>"
2667 [
6debbff6 2668 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
f9355dee
SP
2669 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2670 (match_operand:MVE_5 2 "s_register_operand" "w")]
2671 VQDMULLBQ_S))
2672 ]
2673 "TARGET_HAVE_MVE"
2674 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
2675 [(set_attr "type" "mve_move")
2676])
2677
2678;;
2679;; [vqdmulltq_n_s])
2680;;
2681(define_insn "mve_vqdmulltq_n_s<mode>"
2682 [
6debbff6 2683 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
f9355dee
SP
2684 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2685 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2686 VQDMULLTQ_N_S))
2687 ]
2688 "TARGET_HAVE_MVE"
2689 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
2690 [(set_attr "type" "mve_move")
2691])
2692
2693;;
2694;; [vqdmulltq_s])
2695;;
2696(define_insn "mve_vqdmulltq_s<mode>"
2697 [
6debbff6 2698 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
f9355dee
SP
2699 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
2700 (match_operand:MVE_5 2 "s_register_operand" "w")]
2701 VQDMULLTQ_S))
2702 ]
2703 "TARGET_HAVE_MVE"
2704 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
2705 [(set_attr "type" "mve_move")
2706])
2707
2708;;
2709;; [vqmovnbq_u, vqmovnbq_s])
2710;;
2711(define_insn "mve_vqmovnbq_<supf><mode>"
2712 [
2713 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2714 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2715 (match_operand:MVE_5 2 "s_register_operand" "w")]
2716 VQMOVNBQ))
2717 ]
2718 "TARGET_HAVE_MVE"
2719 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
2720 [(set_attr "type" "mve_move")
2721])
2722
2723;;
2724;; [vqmovntq_u, vqmovntq_s])
2725;;
2726(define_insn "mve_vqmovntq_<supf><mode>"
2727 [
2728 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2729 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2730 (match_operand:MVE_5 2 "s_register_operand" "w")]
2731 VQMOVNTQ))
2732 ]
2733 "TARGET_HAVE_MVE"
2734 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
2735 [(set_attr "type" "mve_move")
2736])
2737
2738;;
2739;; [vqmovunbq_s])
2740;;
2741(define_insn "mve_vqmovunbq_s<mode>"
2742 [
2743 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2744 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2745 (match_operand:MVE_5 2 "s_register_operand" "w")]
2746 VQMOVUNBQ_S))
2747 ]
2748 "TARGET_HAVE_MVE"
2749 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
2750 [(set_attr "type" "mve_move")
2751])
2752
2753;;
2754;; [vqmovuntq_s])
2755;;
2756(define_insn "mve_vqmovuntq_s<mode>"
2757 [
2758 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2759 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2760 (match_operand:MVE_5 2 "s_register_operand" "w")]
2761 VQMOVUNTQ_S))
2762 ]
2763 "TARGET_HAVE_MVE"
2764 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
2765 [(set_attr "type" "mve_move")
2766])
2767
2768;;
2769;; [vrmlaldavhxq_s])
2770;;
2771(define_insn "mve_vrmlaldavhxq_sv4si"
2772 [
2773 (set (match_operand:DI 0 "s_register_operand" "=r")
2774 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2775 (match_operand:V4SI 2 "s_register_operand" "w")]
2776 VRMLALDAVHXQ_S))
2777 ]
2778 "TARGET_HAVE_MVE"
2779 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
2780 [(set_attr "type" "mve_move")
2781])
2782
2783;;
2784;; [vrmlsldavhq_s])
2785;;
2786(define_insn "mve_vrmlsldavhq_sv4si"
2787 [
2788 (set (match_operand:DI 0 "s_register_operand" "=r")
2789 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2790 (match_operand:V4SI 2 "s_register_operand" "w")]
2791 VRMLSLDAVHQ_S))
2792 ]
2793 "TARGET_HAVE_MVE"
2794 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
2795 [(set_attr "type" "mve_move")
2796])
2797
2798;;
2799;; [vrmlsldavhxq_s])
2800;;
2801(define_insn "mve_vrmlsldavhxq_sv4si"
2802 [
2803 (set (match_operand:DI 0 "s_register_operand" "=r")
2804 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2805 (match_operand:V4SI 2 "s_register_operand" "w")]
2806 VRMLSLDAVHXQ_S))
2807 ]
2808 "TARGET_HAVE_MVE"
2809 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
2810 [(set_attr "type" "mve_move")
2811])
2812
2813;;
2814;; [vshllbq_n_s, vshllbq_n_u])
2815;;
2816(define_insn "mve_vshllbq_n_<supf><mode>"
2817 [
2818 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2819 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2820 (match_operand:SI 2 "immediate_operand" "i")]
2821 VSHLLBQ_N))
2822 ]
2823 "TARGET_HAVE_MVE"
2824 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2825 [(set_attr "type" "mve_move")
2826])
2827
2828;;
2829;; [vshlltq_n_u, vshlltq_n_s])
2830;;
2831(define_insn "mve_vshlltq_n_<supf><mode>"
2832 [
2833 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2834 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2835 (match_operand:SI 2 "immediate_operand" "i")]
2836 VSHLLTQ_N))
2837 ]
2838 "TARGET_HAVE_MVE"
2839 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2840 [(set_attr "type" "mve_move")
2841])
2842
2843;;
2844;; [vsubq_f])
2845;;
2846(define_insn "mve_vsubq_f<mode>"
2847 [
2848 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
98161c24
DZ
2849 (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
2850 (match_operand:MVE_0 2 "s_register_operand" "w")))
f9355dee
SP
2851 ]
2852 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2853 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
2854 [(set_attr "type" "mve_move")
2855])
2856
2857;;
2858;; [vmulltq_poly_p])
2859;;
2860(define_insn "mve_vmulltq_poly_p<mode>"
2861 [
2862 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2863 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2864 (match_operand:MVE_3 2 "s_register_operand" "w")]
2865 VMULLTQ_POLY_P))
2866 ]
2867 "TARGET_HAVE_MVE"
2868 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
2869 [(set_attr "type" "mve_move")
2870])
2871
2872;;
2873;; [vmullbq_poly_p])
2874;;
2875(define_insn "mve_vmullbq_poly_p<mode>"
2876 [
2877 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
2878 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
2879 (match_operand:MVE_3 2 "s_register_operand" "w")]
2880 VMULLBQ_POLY_P))
2881 ]
2882 "TARGET_HAVE_MVE"
2883 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
2884 [(set_attr "type" "mve_move")
2885])
2886
2887;;
2888;; [vrmlaldavhq_u vrmlaldavhq_s])
2889;;
2890(define_insn "mve_vrmlaldavhq_<supf>v4si"
2891 [
2892 (set (match_operand:DI 0 "s_register_operand" "=r")
2893 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
2894 (match_operand:V4SI 2 "s_register_operand" "w")]
2895 VRMLALDAVHQ))
2896 ]
2897 "TARGET_HAVE_MVE"
2898 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
2899 [(set_attr "type" "mve_move")
2900])
0dad5b33
SP
2901
2902;;
2903;; [vbicq_m_n_s, vbicq_m_n_u])
2904;;
2905(define_insn "mve_vbicq_m_n_<supf><mode>"
2906 [
2907 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2908 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2909 (match_operand:SI 2 "immediate_operand" "i")
2910 (match_operand:HI 3 "vpr_register_operand" "Up")]
2911 VBICQ_M_N))
2912 ]
2913 "TARGET_HAVE_MVE"
2914 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
2915 [(set_attr "type" "mve_move")
2916 (set_attr "length""8")])
2917;;
2918;; [vcmpeqq_m_f])
2919;;
2920(define_insn "mve_vcmpeqq_m_f<mode>"
2921 [
2922 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2923 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2924 (match_operand:MVE_0 2 "s_register_operand" "w")
2925 (match_operand:HI 3 "vpr_register_operand" "Up")]
2926 VCMPEQQ_M_F))
2927 ]
2928 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2929 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
2930 [(set_attr "type" "mve_move")
2931 (set_attr "length""8")])
2932;;
2933;; [vcvtaq_m_u, vcvtaq_m_s])
2934;;
2935(define_insn "mve_vcvtaq_m_<supf><mode>"
2936 [
2937 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2938 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2939 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2940 (match_operand:HI 3 "vpr_register_operand" "Up")]
2941 VCVTAQ_M))
2942 ]
2943 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2944 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
2945 [(set_attr "type" "mve_move")
2946 (set_attr "length""8")])
2947;;
2948;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
2949;;
2950(define_insn "mve_vcvtq_m_to_f_<supf><mode>"
2951 [
2952 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2953 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2954 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
2955 (match_operand:HI 3 "vpr_register_operand" "Up")]
2956 VCVTQ_M_TO_F))
2957 ]
2958 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2959 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
2960 [(set_attr "type" "mve_move")
2961 (set_attr "length""8")])
2962;;
2963;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
2964;;
2965(define_insn "mve_vqrshrnbq_n_<supf><mode>"
2966 [
2967 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2968 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2969 (match_operand:MVE_5 2 "s_register_operand" "w")
2970 (match_operand:SI 3 "mve_imm_8" "Rb")]
2971 VQRSHRNBQ_N))
2972 ]
2973 "TARGET_HAVE_MVE"
2974 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
2975 [(set_attr "type" "mve_move")
2976])
2977;;
2978;; [vqrshrunbq_n_s])
2979;;
2980(define_insn "mve_vqrshrunbq_n_s<mode>"
2981 [
2982 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2983 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2984 (match_operand:MVE_5 2 "s_register_operand" "w")
2985 (match_operand:SI 3 "mve_imm_8" "Rb")]
2986 VQRSHRUNBQ_N_S))
2987 ]
2988 "TARGET_HAVE_MVE"
2989 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
2990 [(set_attr "type" "mve_move")
2991])
2992;;
2993;; [vrmlaldavhaq_s vrmlaldavhaq_u])
2994;;
2995(define_insn "mve_vrmlaldavhaq_<supf>v4si"
2996 [
2997 (set (match_operand:DI 0 "s_register_operand" "=r")
2998 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2999 (match_operand:V4SI 2 "s_register_operand" "w")
3000 (match_operand:V4SI 3 "s_register_operand" "w")]
3001 VRMLALDAVHAQ))
3002 ]
3003 "TARGET_HAVE_MVE"
3004 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
3005 [(set_attr "type" "mve_move")
3006])
3007
3008;;
3009;; [vabavq_s, vabavq_u])
3010;;
3011(define_insn "mve_vabavq_<supf><mode>"
3012 [
3013 (set (match_operand:SI 0 "s_register_operand" "=r")
3014 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3015 (match_operand:MVE_2 2 "s_register_operand" "w")
3016 (match_operand:MVE_2 3 "s_register_operand" "w")]
3017 VABAVQ))
3018 ]
3019 "TARGET_HAVE_MVE"
3020 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
3021 [(set_attr "type" "mve_move")
3022])
3023
3024;;
3025;; [vshlcq_u vshlcq_s]
3026;;
3027(define_expand "mve_vshlcq_vec_<supf><mode>"
3028 [(match_operand:MVE_2 0 "s_register_operand")
3029 (match_operand:MVE_2 1 "s_register_operand")
3030 (match_operand:SI 2 "s_register_operand")
3031 (match_operand:SI 3 "mve_imm_32")
3032 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3033 "TARGET_HAVE_MVE"
3034{
3035 rtx ignore_wb = gen_reg_rtx (SImode);
3036 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
8165795c 3037 operands[2], operands[3]));
0dad5b33
SP
3038 DONE;
3039})
3040
3041(define_expand "mve_vshlcq_carry_<supf><mode>"
3042 [(match_operand:SI 0 "s_register_operand")
3043 (match_operand:MVE_2 1 "s_register_operand")
3044 (match_operand:SI 2 "s_register_operand")
3045 (match_operand:SI 3 "mve_imm_32")
3046 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3047 "TARGET_HAVE_MVE"
3048{
3049 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
3050 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
3051 operands[2], operands[3]));
3052 DONE;
3053})
3054
3055(define_insn "mve_vshlcq_<supf><mode>"
3056 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
3057 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
3058 (match_operand:SI 3 "s_register_operand" "1")
3059 (match_operand:SI 4 "mve_imm_32" "Rf")]
3060 VSHLCQ))
3061 (set (match_operand:SI 1 "s_register_operand" "=r")
3062 (unspec:SI [(match_dup 2)
3063 (match_dup 3)
3064 (match_dup 4)]
3065 VSHLCQ))]
3066 "TARGET_HAVE_MVE"
3067 "vshlc %q0, %1, %4")
8165795c
SP
3068
3069;;
3070;; [vabsq_m_s])
3071;;
3072(define_insn "mve_vabsq_m_s<mode>"
3073 [
3074 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3075 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3076 (match_operand:MVE_2 2 "s_register_operand" "w")
3077 (match_operand:HI 3 "vpr_register_operand" "Up")]
3078 VABSQ_M_S))
3079 ]
3080 "TARGET_HAVE_MVE"
3081 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
3082 [(set_attr "type" "mve_move")
3083 (set_attr "length""8")])
3084
3085;;
3086;; [vaddvaq_p_u, vaddvaq_p_s])
3087;;
3088(define_insn "mve_vaddvaq_p_<supf><mode>"
3089 [
3d537943 3090 (set (match_operand:SI 0 "s_register_operand" "=Te")
8165795c
SP
3091 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3092 (match_operand:MVE_2 2 "s_register_operand" "w")
3093 (match_operand:HI 3 "vpr_register_operand" "Up")]
3094 VADDVAQ_P))
3095 ]
3096 "TARGET_HAVE_MVE"
3097 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
3098 [(set_attr "type" "mve_move")
3099 (set_attr "length""8")])
3100
3101;;
3102;; [vclsq_m_s])
3103;;
3104(define_insn "mve_vclsq_m_s<mode>"
3105 [
3106 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3107 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3108 (match_operand:MVE_2 2 "s_register_operand" "w")
3109 (match_operand:HI 3 "vpr_register_operand" "Up")]
3110 VCLSQ_M_S))
3111 ]
3112 "TARGET_HAVE_MVE"
3113 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
3114 [(set_attr "type" "mve_move")
3115 (set_attr "length""8")])
3116
3117;;
3118;; [vclzq_m_s, vclzq_m_u])
3119;;
3120(define_insn "mve_vclzq_m_<supf><mode>"
3121 [
3122 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3123 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3124 (match_operand:MVE_2 2 "s_register_operand" "w")
3125 (match_operand:HI 3 "vpr_register_operand" "Up")]
3126 VCLZQ_M))
3127 ]
3128 "TARGET_HAVE_MVE"
3129 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
3130 [(set_attr "type" "mve_move")
3131 (set_attr "length""8")])
3132
3133;;
3134;; [vcmpcsq_m_n_u])
3135;;
3136(define_insn "mve_vcmpcsq_m_n_u<mode>"
3137 [
3138 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3139 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3140 (match_operand:<V_elem> 2 "s_register_operand" "r")
3141 (match_operand:HI 3 "vpr_register_operand" "Up")]
3142 VCMPCSQ_M_N_U))
3143 ]
3144 "TARGET_HAVE_MVE"
3145 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
3146 [(set_attr "type" "mve_move")
3147 (set_attr "length""8")])
3148
3149;;
3150;; [vcmpcsq_m_u])
3151;;
3152(define_insn "mve_vcmpcsq_m_u<mode>"
3153 [
3154 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3155 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3156 (match_operand:MVE_2 2 "s_register_operand" "w")
3157 (match_operand:HI 3 "vpr_register_operand" "Up")]
3158 VCMPCSQ_M_U))
3159 ]
3160 "TARGET_HAVE_MVE"
3161 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
3162 [(set_attr "type" "mve_move")
3163 (set_attr "length""8")])
3164
3165;;
3166;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
3167;;
3168(define_insn "mve_vcmpeqq_m_n_<supf><mode>"
3169 [
3170 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3171 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3172 (match_operand:<V_elem> 2 "s_register_operand" "r")
3173 (match_operand:HI 3 "vpr_register_operand" "Up")]
3174 VCMPEQQ_M_N))
3175 ]
3176 "TARGET_HAVE_MVE"
3177 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
3178 [(set_attr "type" "mve_move")
3179 (set_attr "length""8")])
3180
3181;;
3182;; [vcmpeqq_m_u, vcmpeqq_m_s])
3183;;
3184(define_insn "mve_vcmpeqq_m_<supf><mode>"
3185 [
3186 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3187 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3188 (match_operand:MVE_2 2 "s_register_operand" "w")
3189 (match_operand:HI 3 "vpr_register_operand" "Up")]
3190 VCMPEQQ_M))
3191 ]
3192 "TARGET_HAVE_MVE"
3193 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
3194 [(set_attr "type" "mve_move")
3195 (set_attr "length""8")])
3196
3197;;
3198;; [vcmpgeq_m_n_s])
3199;;
3200(define_insn "mve_vcmpgeq_m_n_s<mode>"
3201 [
3202 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3203 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3204 (match_operand:<V_elem> 2 "s_register_operand" "r")
3205 (match_operand:HI 3 "vpr_register_operand" "Up")]
3206 VCMPGEQ_M_N_S))
3207 ]
3208 "TARGET_HAVE_MVE"
3209 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
3210 [(set_attr "type" "mve_move")
3211 (set_attr "length""8")])
3212
3213;;
3214;; [vcmpgeq_m_s])
3215;;
3216(define_insn "mve_vcmpgeq_m_s<mode>"
3217 [
3218 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3219 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3220 (match_operand:MVE_2 2 "s_register_operand" "w")
3221 (match_operand:HI 3 "vpr_register_operand" "Up")]
3222 VCMPGEQ_M_S))
3223 ]
3224 "TARGET_HAVE_MVE"
3225 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
3226 [(set_attr "type" "mve_move")
3227 (set_attr "length""8")])
3228
3229;;
3230;; [vcmpgtq_m_n_s])
3231;;
3232(define_insn "mve_vcmpgtq_m_n_s<mode>"
3233 [
3234 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3235 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3236 (match_operand:<V_elem> 2 "s_register_operand" "r")
3237 (match_operand:HI 3 "vpr_register_operand" "Up")]
3238 VCMPGTQ_M_N_S))
3239 ]
3240 "TARGET_HAVE_MVE"
3241 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
3242 [(set_attr "type" "mve_move")
3243 (set_attr "length""8")])
3244
3245;;
3246;; [vcmpgtq_m_s])
3247;;
3248(define_insn "mve_vcmpgtq_m_s<mode>"
3249 [
3250 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3251 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3252 (match_operand:MVE_2 2 "s_register_operand" "w")
3253 (match_operand:HI 3 "vpr_register_operand" "Up")]
3254 VCMPGTQ_M_S))
3255 ]
3256 "TARGET_HAVE_MVE"
3257 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
3258 [(set_attr "type" "mve_move")
3259 (set_attr "length""8")])
3260
3261;;
3262;; [vcmphiq_m_n_u])
3263;;
3264(define_insn "mve_vcmphiq_m_n_u<mode>"
3265 [
3266 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3267 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3268 (match_operand:<V_elem> 2 "s_register_operand" "r")
3269 (match_operand:HI 3 "vpr_register_operand" "Up")]
3270 VCMPHIQ_M_N_U))
3271 ]
3272 "TARGET_HAVE_MVE"
3273 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
3274 [(set_attr "type" "mve_move")
3275 (set_attr "length""8")])
3276
3277;;
3278;; [vcmphiq_m_u])
3279;;
3280(define_insn "mve_vcmphiq_m_u<mode>"
3281 [
3282 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3283 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3284 (match_operand:MVE_2 2 "s_register_operand" "w")
3285 (match_operand:HI 3 "vpr_register_operand" "Up")]
3286 VCMPHIQ_M_U))
3287 ]
3288 "TARGET_HAVE_MVE"
3289 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
3290 [(set_attr "type" "mve_move")
3291 (set_attr "length""8")])
3292
3293;;
3294;; [vcmpleq_m_n_s])
3295;;
3296(define_insn "mve_vcmpleq_m_n_s<mode>"
3297 [
3298 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3299 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3300 (match_operand:<V_elem> 2 "s_register_operand" "r")
3301 (match_operand:HI 3 "vpr_register_operand" "Up")]
3302 VCMPLEQ_M_N_S))
3303 ]
3304 "TARGET_HAVE_MVE"
3305 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
3306 [(set_attr "type" "mve_move")
3307 (set_attr "length""8")])
3308
3309;;
3310;; [vcmpleq_m_s])
3311;;
3312(define_insn "mve_vcmpleq_m_s<mode>"
3313 [
3314 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3315 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3316 (match_operand:MVE_2 2 "s_register_operand" "w")
3317 (match_operand:HI 3 "vpr_register_operand" "Up")]
3318 VCMPLEQ_M_S))
3319 ]
3320 "TARGET_HAVE_MVE"
3321 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
3322 [(set_attr "type" "mve_move")
3323 (set_attr "length""8")])
3324
3325;;
3326;; [vcmpltq_m_n_s])
3327;;
3328(define_insn "mve_vcmpltq_m_n_s<mode>"
3329 [
3330 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3331 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3332 (match_operand:<V_elem> 2 "s_register_operand" "r")
3333 (match_operand:HI 3 "vpr_register_operand" "Up")]
3334 VCMPLTQ_M_N_S))
3335 ]
3336 "TARGET_HAVE_MVE"
3337 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
3338 [(set_attr "type" "mve_move")
3339 (set_attr "length""8")])
3340
3341;;
3342;; [vcmpltq_m_s])
3343;;
3344(define_insn "mve_vcmpltq_m_s<mode>"
3345 [
3346 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3347 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3348 (match_operand:MVE_2 2 "s_register_operand" "w")
3349 (match_operand:HI 3 "vpr_register_operand" "Up")]
3350 VCMPLTQ_M_S))
3351 ]
3352 "TARGET_HAVE_MVE"
3353 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
3354 [(set_attr "type" "mve_move")
3355 (set_attr "length""8")])
3356
3357;;
3358;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3359;;
3360(define_insn "mve_vcmpneq_m_n_<supf><mode>"
3361 [
3362 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3363 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3364 (match_operand:<V_elem> 2 "s_register_operand" "r")
3365 (match_operand:HI 3 "vpr_register_operand" "Up")]
3366 VCMPNEQ_M_N))
3367 ]
3368 "TARGET_HAVE_MVE"
3369 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
3370 [(set_attr "type" "mve_move")
3371 (set_attr "length""8")])
3372
3373;;
3374;; [vcmpneq_m_s, vcmpneq_m_u])
3375;;
3376(define_insn "mve_vcmpneq_m_<supf><mode>"
3377 [
3378 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3379 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3380 (match_operand:MVE_2 2 "s_register_operand" "w")
3381 (match_operand:HI 3 "vpr_register_operand" "Up")]
3382 VCMPNEQ_M))
3383 ]
3384 "TARGET_HAVE_MVE"
3385 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
3386 [(set_attr "type" "mve_move")
3387 (set_attr "length""8")])
3388
3389;;
3390;; [vdupq_m_n_s, vdupq_m_n_u])
3391;;
3392(define_insn "mve_vdupq_m_n_<supf><mode>"
3393 [
3394 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3395 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3396 (match_operand:<V_elem> 2 "s_register_operand" "r")
3397 (match_operand:HI 3 "vpr_register_operand" "Up")]
3398 VDUPQ_M_N))
3399 ]
3400 "TARGET_HAVE_MVE"
3401 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3402 [(set_attr "type" "mve_move")
3403 (set_attr "length""8")])
3404
3405;;
3406;; [vmaxaq_m_s])
3407;;
3408(define_insn "mve_vmaxaq_m_s<mode>"
3409 [
3410 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3411 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3412 (match_operand:MVE_2 2 "s_register_operand" "w")
3413 (match_operand:HI 3 "vpr_register_operand" "Up")]
3414 VMAXAQ_M_S))
3415 ]
3416 "TARGET_HAVE_MVE"
3417 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
3418 [(set_attr "type" "mve_move")
3419 (set_attr "length""8")])
3420
3421;;
3422;; [vmaxavq_p_s])
3423;;
3424(define_insn "mve_vmaxavq_p_s<mode>"
3425 [
3426 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3427 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3428 (match_operand:MVE_2 2 "s_register_operand" "w")
3429 (match_operand:HI 3 "vpr_register_operand" "Up")]
3430 VMAXAVQ_P_S))
3431 ]
3432 "TARGET_HAVE_MVE"
3433 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
3434 [(set_attr "type" "mve_move")
3435 (set_attr "length""8")])
3436
3437;;
3438;; [vmaxvq_p_u, vmaxvq_p_s])
3439;;
3440(define_insn "mve_vmaxvq_p_<supf><mode>"
3441 [
3442 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3443 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3444 (match_operand:MVE_2 2 "s_register_operand" "w")
3445 (match_operand:HI 3 "vpr_register_operand" "Up")]
3446 VMAXVQ_P))
3447 ]
3448 "TARGET_HAVE_MVE"
3449 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
3450 [(set_attr "type" "mve_move")
3451 (set_attr "length""8")])
3452
3453;;
3454;; [vminaq_m_s])
3455;;
3456(define_insn "mve_vminaq_m_s<mode>"
3457 [
3458 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3459 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3460 (match_operand:MVE_2 2 "s_register_operand" "w")
3461 (match_operand:HI 3 "vpr_register_operand" "Up")]
3462 VMINAQ_M_S))
3463 ]
3464 "TARGET_HAVE_MVE"
3465 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
3466 [(set_attr "type" "mve_move")
3467 (set_attr "length""8")])
3468
3469;;
3470;; [vminavq_p_s])
3471;;
3472(define_insn "mve_vminavq_p_s<mode>"
3473 [
3474 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3475 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3476 (match_operand:MVE_2 2 "s_register_operand" "w")
3477 (match_operand:HI 3 "vpr_register_operand" "Up")]
3478 VMINAVQ_P_S))
3479 ]
3480 "TARGET_HAVE_MVE"
3481 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
3482 [(set_attr "type" "mve_move")
3483 (set_attr "length""8")])
3484
3485;;
3486;; [vminvq_p_s, vminvq_p_u])
3487;;
3488(define_insn "mve_vminvq_p_<supf><mode>"
3489 [
3490 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3491 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3492 (match_operand:MVE_2 2 "s_register_operand" "w")
3493 (match_operand:HI 3 "vpr_register_operand" "Up")]
3494 VMINVQ_P))
3495 ]
3496 "TARGET_HAVE_MVE"
3497 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
3498 [(set_attr "type" "mve_move")
3499 (set_attr "length""8")])
3500
3501;;
3502;; [vmladavaq_u, vmladavaq_s])
3503;;
3504(define_insn "mve_vmladavaq_<supf><mode>"
3505 [
3d537943 3506 (set (match_operand:SI 0 "s_register_operand" "=Te")
8165795c
SP
3507 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3508 (match_operand:MVE_2 2 "s_register_operand" "w")
3509 (match_operand:MVE_2 3 "s_register_operand" "w")]
3510 VMLADAVAQ))
3511 ]
3512 "TARGET_HAVE_MVE"
3513 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
3514 [(set_attr "type" "mve_move")
3515])
3516
3517;;
3518;; [vmladavq_p_u, vmladavq_p_s])
3519;;
3520(define_insn "mve_vmladavq_p_<supf><mode>"
3521 [
3d537943 3522 (set (match_operand:SI 0 "s_register_operand" "=Te")
8165795c
SP
3523 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3524 (match_operand:MVE_2 2 "s_register_operand" "w")
3525 (match_operand:HI 3 "vpr_register_operand" "Up")]
3526 VMLADAVQ_P))
3527 ]
3528 "TARGET_HAVE_MVE"
3529 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
3530 [(set_attr "type" "mve_move")
3531 (set_attr "length""8")])
3532
3533;;
3534;; [vmladavxq_p_s])
3535;;
3536(define_insn "mve_vmladavxq_p_s<mode>"
3537 [
3d537943 3538 (set (match_operand:SI 0 "s_register_operand" "=Te")
8165795c
SP
3539 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3540 (match_operand:MVE_2 2 "s_register_operand" "w")
3541 (match_operand:HI 3 "vpr_register_operand" "Up")]
3542 VMLADAVXQ_P_S))
3543 ]
3544 "TARGET_HAVE_MVE"
3545 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
3546 [(set_attr "type" "mve_move")
3547 (set_attr "length""8")])
3548
3549;;
3550;; [vmlaq_n_u, vmlaq_n_s])
3551;;
3552(define_insn "mve_vmlaq_n_<supf><mode>"
3553 [
3554 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3555 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3556 (match_operand:MVE_2 2 "s_register_operand" "w")
3557 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3558 VMLAQ_N))
3559 ]
3560 "TARGET_HAVE_MVE"
3561 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
3562 [(set_attr "type" "mve_move")
3563])
3564
3565;;
3566;; [vmlasq_n_u, vmlasq_n_s])
3567;;
3568(define_insn "mve_vmlasq_n_<supf><mode>"
3569 [
3570 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3571 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3572 (match_operand:MVE_2 2 "s_register_operand" "w")
3573 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3574 VMLASQ_N))
3575 ]
3576 "TARGET_HAVE_MVE"
3577 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
3578 [(set_attr "type" "mve_move")
3579])
3580
3581;;
3582;; [vmlsdavq_p_s])
3583;;
3584(define_insn "mve_vmlsdavq_p_s<mode>"
3585 [
3d537943 3586 (set (match_operand:SI 0 "s_register_operand" "=Te")
8165795c
SP
3587 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3588 (match_operand:MVE_2 2 "s_register_operand" "w")
3589 (match_operand:HI 3 "vpr_register_operand" "Up")]
3590 VMLSDAVQ_P_S))
3591 ]
3592 "TARGET_HAVE_MVE"
3593 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
3594 [(set_attr "type" "mve_move")
3595 (set_attr "length""8")])
3596
3597;;
3598;; [vmlsdavxq_p_s])
3599;;
3600(define_insn "mve_vmlsdavxq_p_s<mode>"
3601 [
3d537943 3602 (set (match_operand:SI 0 "s_register_operand" "=Te")
8165795c
SP
3603 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3604 (match_operand:MVE_2 2 "s_register_operand" "w")
3605 (match_operand:HI 3 "vpr_register_operand" "Up")]
3606 VMLSDAVXQ_P_S))
3607 ]
3608 "TARGET_HAVE_MVE"
3609 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
3610 [(set_attr "type" "mve_move")
3611 (set_attr "length""8")])
3612
3613;;
3614;; [vmvnq_m_s, vmvnq_m_u])
3615;;
3616(define_insn "mve_vmvnq_m_<supf><mode>"
3617 [
3618 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3619 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3620 (match_operand:MVE_2 2 "s_register_operand" "w")
3621 (match_operand:HI 3 "vpr_register_operand" "Up")]
3622 VMVNQ_M))
3623 ]
3624 "TARGET_HAVE_MVE"
3625 "vpst\;vmvnt %q0, %q2"
3626 [(set_attr "type" "mve_move")
3627 (set_attr "length""8")])
3628
3629;;
3630;; [vnegq_m_s])
3631;;
3632(define_insn "mve_vnegq_m_s<mode>"
3633 [
3634 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3635 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3636 (match_operand:MVE_2 2 "s_register_operand" "w")
3637 (match_operand:HI 3 "vpr_register_operand" "Up")]
3638 VNEGQ_M_S))
3639 ]
3640 "TARGET_HAVE_MVE"
3641 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
3642 [(set_attr "type" "mve_move")
3643 (set_attr "length""8")])
3644
3645;;
3646;; [vpselq_u, vpselq_s])
3647;;
3648(define_insn "mve_vpselq_<supf><mode>"
3649 [
3650 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
3651 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
3652 (match_operand:MVE_1 2 "s_register_operand" "w")
3653 (match_operand:HI 3 "vpr_register_operand" "Up")]
3654 VPSELQ))
3655 ]
3656 "TARGET_HAVE_MVE"
3657 "vpsel %q0, %q1, %q2"
3658 [(set_attr "type" "mve_move")
3659])
3660
3661;;
3662;; [vqabsq_m_s])
3663;;
3664(define_insn "mve_vqabsq_m_s<mode>"
3665 [
3666 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3667 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3668 (match_operand:MVE_2 2 "s_register_operand" "w")
3669 (match_operand:HI 3 "vpr_register_operand" "Up")]
3670 VQABSQ_M_S))
3671 ]
3672 "TARGET_HAVE_MVE"
3673 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
3674 [(set_attr "type" "mve_move")
3675 (set_attr "length""8")])
3676
3677;;
237f12da 3678;; [vqdmlahq_n_s])
8165795c
SP
3679;;
3680(define_insn "mve_vqdmlahq_n_<supf><mode>"
3681 [
3682 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3683 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3684 (match_operand:MVE_2 2 "s_register_operand" "w")
3685 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3686 VQDMLAHQ_N))
3687 ]
3688 "TARGET_HAVE_MVE"
3689 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3690 [(set_attr "type" "mve_move")
3691])
3692
afb198ee
CL
3693;;
3694;; [vqdmlashq_n_s])
3695;;
3696(define_insn "mve_vqdmlashq_n_<supf><mode>"
3697 [
3698 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3699 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3700 (match_operand:MVE_2 2 "s_register_operand" "w")
3701 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3702 VQDMLASHQ_N))
3703 ]
3704 "TARGET_HAVE_MVE"
3705 "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3706 [(set_attr "type" "mve_move")
3707])
3708
8165795c
SP
3709;;
3710;; [vqnegq_m_s])
3711;;
3712(define_insn "mve_vqnegq_m_s<mode>"
3713 [
3714 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3715 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3716 (match_operand:MVE_2 2 "s_register_operand" "w")
3717 (match_operand:HI 3 "vpr_register_operand" "Up")]
3718 VQNEGQ_M_S))
3719 ]
3720 "TARGET_HAVE_MVE"
3721 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
3722 [(set_attr "type" "mve_move")
3723 (set_attr "length""8")])
3724
3725;;
3726;; [vqrdmladhq_s])
3727;;
3728(define_insn "mve_vqrdmladhq_s<mode>"
3729 [
3730 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3731 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3732 (match_operand:MVE_2 2 "s_register_operand" "w")
3733 (match_operand:MVE_2 3 "s_register_operand" "w")]
3734 VQRDMLADHQ_S))
3735 ]
3736 "TARGET_HAVE_MVE"
3737 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3738 [(set_attr "type" "mve_move")
3739])
3740
3741;;
3742;; [vqrdmladhxq_s])
3743;;
3744(define_insn "mve_vqrdmladhxq_s<mode>"
3745 [
3746 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3747 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3748 (match_operand:MVE_2 2 "s_register_operand" "w")
3749 (match_operand:MVE_2 3 "s_register_operand" "w")]
3750 VQRDMLADHXQ_S))
3751 ]
3752 "TARGET_HAVE_MVE"
3753 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3754 [(set_attr "type" "mve_move")
3755])
3756
3757;;
237f12da 3758;; [vqrdmlahq_n_s])
8165795c
SP
3759;;
3760(define_insn "mve_vqrdmlahq_n_<supf><mode>"
3761 [
3762 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3763 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3764 (match_operand:MVE_2 2 "s_register_operand" "w")
3765 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3766 VQRDMLAHQ_N))
3767 ]
3768 "TARGET_HAVE_MVE"
3769 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
3770 [(set_attr "type" "mve_move")
3771])
3772
3773;;
237f12da 3774;; [vqrdmlashq_n_s])
8165795c
SP
3775;;
3776(define_insn "mve_vqrdmlashq_n_<supf><mode>"
3777 [
3778 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3779 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3780 (match_operand:MVE_2 2 "s_register_operand" "w")
3781 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3782 VQRDMLASHQ_N))
3783 ]
3784 "TARGET_HAVE_MVE"
3785 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
3786 [(set_attr "type" "mve_move")
3787])
3788
3789;;
3790;; [vqrdmlsdhq_s])
3791;;
3792(define_insn "mve_vqrdmlsdhq_s<mode>"
3793 [
3794 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3795 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3796 (match_operand:MVE_2 2 "s_register_operand" "w")
3797 (match_operand:MVE_2 3 "s_register_operand" "w")]
3798 VQRDMLSDHQ_S))
3799 ]
3800 "TARGET_HAVE_MVE"
3801 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3802 [(set_attr "type" "mve_move")
3803])
3804
3805;;
3806;; [vqrdmlsdhxq_s])
3807;;
3808(define_insn "mve_vqrdmlsdhxq_s<mode>"
3809 [
3810 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3811 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3812 (match_operand:MVE_2 2 "s_register_operand" "w")
3813 (match_operand:MVE_2 3 "s_register_operand" "w")]
3814 VQRDMLSDHXQ_S))
3815 ]
3816 "TARGET_HAVE_MVE"
3817 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3818 [(set_attr "type" "mve_move")
3819])
3820
3821;;
3822;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
3823;;
3824(define_insn "mve_vqrshlq_m_n_<supf><mode>"
3825 [
3826 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3827 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3828 (match_operand:SI 2 "s_register_operand" "r")
3829 (match_operand:HI 3 "vpr_register_operand" "Up")]
3830 VQRSHLQ_M_N))
3831 ]
3832 "TARGET_HAVE_MVE"
3833 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
3834 [(set_attr "type" "mve_move")
3835 (set_attr "length""8")])
3836
3837;;
3838;; [vqshlq_m_r_u, vqshlq_m_r_s])
3839;;
3840(define_insn "mve_vqshlq_m_r_<supf><mode>"
3841 [
3842 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3843 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3844 (match_operand:SI 2 "s_register_operand" "r")
3845 (match_operand:HI 3 "vpr_register_operand" "Up")]
3846 VQSHLQ_M_R))
3847 ]
3848 "TARGET_HAVE_MVE"
3849 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3850 [(set_attr "type" "mve_move")
3851 (set_attr "length""8")])
3852
3853;;
3854;; [vrev64q_m_u, vrev64q_m_s])
3855;;
3856(define_insn "mve_vrev64q_m_<supf><mode>"
3857 [
3858 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3859 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3860 (match_operand:MVE_2 2 "s_register_operand" "w")
3861 (match_operand:HI 3 "vpr_register_operand" "Up")]
3862 VREV64Q_M))
3863 ]
3864 "TARGET_HAVE_MVE"
3865 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
3866 [(set_attr "type" "mve_move")
3867 (set_attr "length""8")])
3868
3869;;
3870;; [vrshlq_m_n_s, vrshlq_m_n_u])
3871;;
3872(define_insn "mve_vrshlq_m_n_<supf><mode>"
3873 [
3874 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3875 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3876 (match_operand:SI 2 "s_register_operand" "r")
3877 (match_operand:HI 3 "vpr_register_operand" "Up")]
3878 VRSHLQ_M_N))
3879 ]
3880 "TARGET_HAVE_MVE"
3881 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3882 [(set_attr "type" "mve_move")
3883 (set_attr "length""8")])
3884
3885;;
3886;; [vshlq_m_r_u, vshlq_m_r_s])
3887;;
3888(define_insn "mve_vshlq_m_r_<supf><mode>"
3889 [
3890 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3891 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3892 (match_operand:SI 2 "s_register_operand" "r")
3893 (match_operand:HI 3 "vpr_register_operand" "Up")]
3894 VSHLQ_M_R))
3895 ]
3896 "TARGET_HAVE_MVE"
3897 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
3898 [(set_attr "type" "mve_move")
3899 (set_attr "length""8")])
3900
3901;;
3902;; [vsliq_n_u, vsliq_n_s])
3903;;
3904(define_insn "mve_vsliq_n_<supf><mode>"
3905 [
3906 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3907 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3908 (match_operand:MVE_2 2 "s_register_operand" "w")
3909 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
3910 VSLIQ_N))
3911 ]
3912 "TARGET_HAVE_MVE"
3913 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
3914 [(set_attr "type" "mve_move")
3915])
3916
3917;;
3918;; [vsriq_n_u, vsriq_n_s])
3919;;
3920(define_insn "mve_vsriq_n_<supf><mode>"
3921 [
3922 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3923 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3924 (match_operand:MVE_2 2 "s_register_operand" "w")
3925 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
3926 VSRIQ_N))
3927 ]
3928 "TARGET_HAVE_MVE"
3929 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
3930 [(set_attr "type" "mve_move")
3931])
3932
3933;;
3934;; [vqdmlsdhxq_s])
3935;;
3936(define_insn "mve_vqdmlsdhxq_s<mode>"
3937 [
3938 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3939 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3940 (match_operand:MVE_2 2 "s_register_operand" "w")
3941 (match_operand:MVE_2 3 "s_register_operand" "w")]
3942 VQDMLSDHXQ_S))
3943 ]
3944 "TARGET_HAVE_MVE"
3945 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3946 [(set_attr "type" "mve_move")
3947])
3948
3949;;
3950;; [vqdmlsdhq_s])
3951;;
3952(define_insn "mve_vqdmlsdhq_s<mode>"
3953 [
3954 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3955 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3956 (match_operand:MVE_2 2 "s_register_operand" "w")
3957 (match_operand:MVE_2 3 "s_register_operand" "w")]
3958 VQDMLSDHQ_S))
3959 ]
3960 "TARGET_HAVE_MVE"
3961 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3962 [(set_attr "type" "mve_move")
3963])
3964
3965;;
3966;; [vqdmladhxq_s])
3967;;
3968(define_insn "mve_vqdmladhxq_s<mode>"
3969 [
3970 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3971 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3972 (match_operand:MVE_2 2 "s_register_operand" "w")
3973 (match_operand:MVE_2 3 "s_register_operand" "w")]
3974 VQDMLADHXQ_S))
3975 ]
3976 "TARGET_HAVE_MVE"
3977 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
3978 [(set_attr "type" "mve_move")
3979])
3980
3981;;
3982;; [vqdmladhq_s])
3983;;
3984(define_insn "mve_vqdmladhq_s<mode>"
3985 [
3986 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3987 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3988 (match_operand:MVE_2 2 "s_register_operand" "w")
3989 (match_operand:MVE_2 3 "s_register_operand" "w")]
3990 VQDMLADHQ_S))
3991 ]
3992 "TARGET_HAVE_MVE"
3993 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
3994 [(set_attr "type" "mve_move")
3995])
3996
3997;;
3998;; [vmlsdavaxq_s])
3999;;
4000(define_insn "mve_vmlsdavaxq_s<mode>"
4001 [
3d537943 4002 (set (match_operand:SI 0 "s_register_operand" "=Te")
8165795c
SP
4003 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4004 (match_operand:MVE_2 2 "s_register_operand" "w")
4005 (match_operand:MVE_2 3 "s_register_operand" "w")]
4006 VMLSDAVAXQ_S))
4007 ]
4008 "TARGET_HAVE_MVE"
4009 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4010 [(set_attr "type" "mve_move")
4011])
4012
4013;;
4014;; [vmlsdavaq_s])
4015;;
4016(define_insn "mve_vmlsdavaq_s<mode>"
4017 [
3d537943 4018 (set (match_operand:SI 0 "s_register_operand" "=Te")
8165795c
SP
4019 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4020 (match_operand:MVE_2 2 "s_register_operand" "w")
4021 (match_operand:MVE_2 3 "s_register_operand" "w")]
4022 VMLSDAVAQ_S))
4023 ]
4024 "TARGET_HAVE_MVE"
4025 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
4026 [(set_attr "type" "mve_move")
4027])
4028
4029;;
4030;; [vmladavaxq_s])
4031;;
4032(define_insn "mve_vmladavaxq_s<mode>"
4033 [
3d537943 4034 (set (match_operand:SI 0 "s_register_operand" "=Te")
8165795c
SP
4035 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4036 (match_operand:MVE_2 2 "s_register_operand" "w")
4037 (match_operand:MVE_2 3 "s_register_operand" "w")]
4038 VMLADAVAXQ_S))
4039 ]
4040 "TARGET_HAVE_MVE"
4041 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4042 [(set_attr "type" "mve_move")
4043])
e3678b44
SP
4044;;
4045;; [vabsq_m_f])
4046;;
4047(define_insn "mve_vabsq_m_f<mode>"
4048 [
4049 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4050 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4051 (match_operand:MVE_0 2 "s_register_operand" "w")
4052 (match_operand:HI 3 "vpr_register_operand" "Up")]
4053 VABSQ_M_F))
4054 ]
4055 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4056 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
4057 [(set_attr "type" "mve_move")
4058 (set_attr "length""8")])
4059
4060;;
4061;; [vaddlvaq_p_s vaddlvaq_p_u])
4062;;
4063(define_insn "mve_vaddlvaq_p_<supf>v4si"
4064 [
4065 (set (match_operand:DI 0 "s_register_operand" "=r")
4066 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4067 (match_operand:V4SI 2 "s_register_operand" "w")
4068 (match_operand:HI 3 "vpr_register_operand" "Up")]
4069 VADDLVAQ_P))
4070 ]
4071 "TARGET_HAVE_MVE"
4072 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
4073 [(set_attr "type" "mve_move")
4074 (set_attr "length""8")])
4075;;
db253e8b 4076;; [vcmlaq, vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270])
3cc4e183 4077;;
db253e8b 4078(define_insn "mve_vcmlaq<mve_rot><mode>"
3cc4e183 4079 [
db253e8b
TC
4080 (set (match_operand:MVE_0 0 "s_register_operand" "=w,w")
4081 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0,Dz")
4082 (match_operand:MVE_0 2 "s_register_operand" "w,w")
4083 (match_operand:MVE_0 3 "s_register_operand" "w,w")]
4084 VCMLA))
3cc4e183
TC
4085 ]
4086 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
db253e8b
TC
4087 "@
4088 vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>
4089 vcmul.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>"
e3678b44
SP
4090 [(set_attr "type" "mve_move")
4091])
4092
4093;;
4094;; [vcmpeqq_m_n_f])
4095;;
4096(define_insn "mve_vcmpeqq_m_n_f<mode>"
4097 [
4098 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4099 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4100 (match_operand:<V_elem> 2 "s_register_operand" "r")
4101 (match_operand:HI 3 "vpr_register_operand" "Up")]
4102 VCMPEQQ_M_N_F))
4103 ]
4104 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4105 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
4106 [(set_attr "type" "mve_move")
4107 (set_attr "length""8")])
4108
4109;;
4110;; [vcmpgeq_m_f])
4111;;
4112(define_insn "mve_vcmpgeq_m_f<mode>"
4113 [
4114 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4115 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4116 (match_operand:MVE_0 2 "s_register_operand" "w")
4117 (match_operand:HI 3 "vpr_register_operand" "Up")]
4118 VCMPGEQ_M_F))
4119 ]
4120 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4121 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
4122 [(set_attr "type" "mve_move")
4123 (set_attr "length""8")])
4124
4125;;
4126;; [vcmpgeq_m_n_f])
4127;;
4128(define_insn "mve_vcmpgeq_m_n_f<mode>"
4129 [
4130 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4131 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4132 (match_operand:<V_elem> 2 "s_register_operand" "r")
4133 (match_operand:HI 3 "vpr_register_operand" "Up")]
4134 VCMPGEQ_M_N_F))
4135 ]
4136 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4137 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
4138 [(set_attr "type" "mve_move")
4139 (set_attr "length""8")])
4140
4141;;
4142;; [vcmpgtq_m_f])
4143;;
4144(define_insn "mve_vcmpgtq_m_f<mode>"
4145 [
4146 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4147 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4148 (match_operand:MVE_0 2 "s_register_operand" "w")
4149 (match_operand:HI 3 "vpr_register_operand" "Up")]
4150 VCMPGTQ_M_F))
4151 ]
4152 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4153 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
4154 [(set_attr "type" "mve_move")
4155 (set_attr "length""8")])
4156
4157;;
4158;; [vcmpgtq_m_n_f])
4159;;
4160(define_insn "mve_vcmpgtq_m_n_f<mode>"
4161 [
4162 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4163 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4164 (match_operand:<V_elem> 2 "s_register_operand" "r")
4165 (match_operand:HI 3 "vpr_register_operand" "Up")]
4166 VCMPGTQ_M_N_F))
4167 ]
4168 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4169 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
4170 [(set_attr "type" "mve_move")
4171 (set_attr "length""8")])
4172
4173;;
4174;; [vcmpleq_m_f])
4175;;
4176(define_insn "mve_vcmpleq_m_f<mode>"
4177 [
4178 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4179 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4180 (match_operand:MVE_0 2 "s_register_operand" "w")
4181 (match_operand:HI 3 "vpr_register_operand" "Up")]
4182 VCMPLEQ_M_F))
4183 ]
4184 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4185 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
4186 [(set_attr "type" "mve_move")
4187 (set_attr "length""8")])
4188
4189;;
4190;; [vcmpleq_m_n_f])
4191;;
4192(define_insn "mve_vcmpleq_m_n_f<mode>"
4193 [
4194 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4195 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4196 (match_operand:<V_elem> 2 "s_register_operand" "r")
4197 (match_operand:HI 3 "vpr_register_operand" "Up")]
4198 VCMPLEQ_M_N_F))
4199 ]
4200 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4201 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
4202 [(set_attr "type" "mve_move")
4203 (set_attr "length""8")])
4204
4205;;
4206;; [vcmpltq_m_f])
4207;;
4208(define_insn "mve_vcmpltq_m_f<mode>"
4209 [
4210 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4211 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4212 (match_operand:MVE_0 2 "s_register_operand" "w")
4213 (match_operand:HI 3 "vpr_register_operand" "Up")]
4214 VCMPLTQ_M_F))
4215 ]
4216 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4217 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
4218 [(set_attr "type" "mve_move")
4219 (set_attr "length""8")])
4220
4221;;
4222;; [vcmpltq_m_n_f])
4223;;
4224(define_insn "mve_vcmpltq_m_n_f<mode>"
4225 [
4226 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4227 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4228 (match_operand:<V_elem> 2 "s_register_operand" "r")
4229 (match_operand:HI 3 "vpr_register_operand" "Up")]
4230 VCMPLTQ_M_N_F))
4231 ]
4232 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4233 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
4234 [(set_attr "type" "mve_move")
4235 (set_attr "length""8")])
4236
4237;;
4238;; [vcmpneq_m_f])
4239;;
4240(define_insn "mve_vcmpneq_m_f<mode>"
4241 [
4242 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4243 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4244 (match_operand:MVE_0 2 "s_register_operand" "w")
4245 (match_operand:HI 3 "vpr_register_operand" "Up")]
4246 VCMPNEQ_M_F))
4247 ]
4248 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4249 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
4250 [(set_attr "type" "mve_move")
4251 (set_attr "length""8")])
4252
4253;;
4254;; [vcmpneq_m_n_f])
4255;;
4256(define_insn "mve_vcmpneq_m_n_f<mode>"
4257 [
4258 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4259 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4260 (match_operand:<V_elem> 2 "s_register_operand" "r")
4261 (match_operand:HI 3 "vpr_register_operand" "Up")]
4262 VCMPNEQ_M_N_F))
4263 ]
4264 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4265 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
4266 [(set_attr "type" "mve_move")
4267 (set_attr "length""8")])
4268
4269;;
4270;; [vcvtbq_m_f16_f32])
4271;;
4272(define_insn "mve_vcvtbq_m_f16_f32v8hf"
4273 [
4274 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4275 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4276 (match_operand:V4SF 2 "s_register_operand" "w")
4277 (match_operand:HI 3 "vpr_register_operand" "Up")]
4278 VCVTBQ_M_F16_F32))
4279 ]
4280 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4281 "vpst\;vcvtbt.f16.f32 %q0, %q2"
4282 [(set_attr "type" "mve_move")
4283 (set_attr "length""8")])
4284
4285;;
4286;; [vcvtbq_m_f32_f16])
4287;;
4288(define_insn "mve_vcvtbq_m_f32_f16v4sf"
4289 [
4290 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4291 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4292 (match_operand:V8HF 2 "s_register_operand" "w")
4293 (match_operand:HI 3 "vpr_register_operand" "Up")]
4294 VCVTBQ_M_F32_F16))
4295 ]
4296 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4297 "vpst\;vcvtbt.f32.f16 %q0, %q2"
4298 [(set_attr "type" "mve_move")
4299 (set_attr "length""8")])
4300
4301;;
4302;; [vcvttq_m_f16_f32])
4303;;
4304(define_insn "mve_vcvttq_m_f16_f32v8hf"
4305 [
4306 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4307 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4308 (match_operand:V4SF 2 "s_register_operand" "w")
4309 (match_operand:HI 3 "vpr_register_operand" "Up")]
4310 VCVTTQ_M_F16_F32))
4311 ]
4312 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4313 "vpst\;vcvttt.f16.f32 %q0, %q2"
4314 [(set_attr "type" "mve_move")
4315 (set_attr "length""8")])
4316
4317;;
4318;; [vcvttq_m_f32_f16])
4319;;
4320(define_insn "mve_vcvttq_m_f32_f16v4sf"
4321 [
4322 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4323 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4324 (match_operand:V8HF 2 "s_register_operand" "w")
4325 (match_operand:HI 3 "vpr_register_operand" "Up")]
4326 VCVTTQ_M_F32_F16))
4327 ]
4328 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4329 "vpst\;vcvttt.f32.f16 %q0, %q2"
4330 [(set_attr "type" "mve_move")
4331 (set_attr "length""8")])
4332
4333;;
4334;; [vdupq_m_n_f])
4335;;
4336(define_insn "mve_vdupq_m_n_f<mode>"
4337 [
4338 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4339 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4340 (match_operand:<V_elem> 2 "s_register_operand" "r")
4341 (match_operand:HI 3 "vpr_register_operand" "Up")]
4342 VDUPQ_M_N_F))
4343 ]
4344 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4345 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
4346 [(set_attr "type" "mve_move")
4347 (set_attr "length""8")])
4348
4349;;
4350;; [vfmaq_f])
4351;;
4352(define_insn "mve_vfmaq_f<mode>"
4353 [
4354 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4355 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4356 (match_operand:MVE_0 2 "s_register_operand" "w")
4357 (match_operand:MVE_0 3 "s_register_operand" "w")]
4358 VFMAQ_F))
4359 ]
4360 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4361 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
4362 [(set_attr "type" "mve_move")
4363])
4364
4365;;
4366;; [vfmaq_n_f])
4367;;
4368(define_insn "mve_vfmaq_n_f<mode>"
4369 [
4370 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4371 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4372 (match_operand:MVE_0 2 "s_register_operand" "w")
4373 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4374 VFMAQ_N_F))
4375 ]
4376 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4377 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
4378 [(set_attr "type" "mve_move")
4379])
4380
4381;;
4382;; [vfmasq_n_f])
4383;;
4384(define_insn "mve_vfmasq_n_f<mode>"
4385 [
4386 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4387 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4388 (match_operand:MVE_0 2 "s_register_operand" "w")
4389 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4390 VFMASQ_N_F))
4391 ]
4392 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4393 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
4394 [(set_attr "type" "mve_move")
4395])
4396;;
4397;; [vfmsq_f])
4398;;
4399(define_insn "mve_vfmsq_f<mode>"
4400 [
4401 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4402 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4403 (match_operand:MVE_0 2 "s_register_operand" "w")
4404 (match_operand:MVE_0 3 "s_register_operand" "w")]
4405 VFMSQ_F))
4406 ]
4407 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4408 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
4409 [(set_attr "type" "mve_move")
4410])
4411
4412;;
4413;; [vmaxnmaq_m_f])
4414;;
4415(define_insn "mve_vmaxnmaq_m_f<mode>"
4416 [
4417 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4418 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4419 (match_operand:MVE_0 2 "s_register_operand" "w")
4420 (match_operand:HI 3 "vpr_register_operand" "Up")]
4421 VMAXNMAQ_M_F))
4422 ]
4423 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4424 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
4425 [(set_attr "type" "mve_move")
4426 (set_attr "length""8")])
4427;;
4428;; [vmaxnmavq_p_f])
4429;;
4430(define_insn "mve_vmaxnmavq_p_f<mode>"
4431 [
4432 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4433 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4434 (match_operand:MVE_0 2 "s_register_operand" "w")
4435 (match_operand:HI 3 "vpr_register_operand" "Up")]
4436 VMAXNMAVQ_P_F))
4437 ]
4438 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4439 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
4440 [(set_attr "type" "mve_move")
4441 (set_attr "length""8")])
4442
4443;;
4444;; [vmaxnmvq_p_f])
4445;;
4446(define_insn "mve_vmaxnmvq_p_f<mode>"
4447 [
4448 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4449 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4450 (match_operand:MVE_0 2 "s_register_operand" "w")
4451 (match_operand:HI 3 "vpr_register_operand" "Up")]
4452 VMAXNMVQ_P_F))
4453 ]
4454 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4455 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
4456 [(set_attr "type" "mve_move")
4457 (set_attr "length""8")])
4458;;
4459;; [vminnmaq_m_f])
4460;;
4461(define_insn "mve_vminnmaq_m_f<mode>"
4462 [
4463 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4464 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4465 (match_operand:MVE_0 2 "s_register_operand" "w")
4466 (match_operand:HI 3 "vpr_register_operand" "Up")]
4467 VMINNMAQ_M_F))
4468 ]
4469 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4470 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
4471 [(set_attr "type" "mve_move")
4472 (set_attr "length""8")])
4473
4474;;
4475;; [vminnmavq_p_f])
4476;;
4477(define_insn "mve_vminnmavq_p_f<mode>"
4478 [
4479 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4480 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4481 (match_operand:MVE_0 2 "s_register_operand" "w")
4482 (match_operand:HI 3 "vpr_register_operand" "Up")]
4483 VMINNMAVQ_P_F))
4484 ]
4485 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4486 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
4487 [(set_attr "type" "mve_move")
4488 (set_attr "length""8")])
4489;;
4490;; [vminnmvq_p_f])
4491;;
4492(define_insn "mve_vminnmvq_p_f<mode>"
4493 [
4494 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4495 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4496 (match_operand:MVE_0 2 "s_register_operand" "w")
4497 (match_operand:HI 3 "vpr_register_operand" "Up")]
4498 VMINNMVQ_P_F))
4499 ]
4500 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4501 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
4502 [(set_attr "type" "mve_move")
4503 (set_attr "length""8")])
4504
4505;;
4506;; [vmlaldavaq_s, vmlaldavaq_u])
4507;;
4508(define_insn "mve_vmlaldavaq_<supf><mode>"
4509 [
4510 (set (match_operand:DI 0 "s_register_operand" "=r")
4511 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4512 (match_operand:MVE_5 2 "s_register_operand" "w")
4513 (match_operand:MVE_5 3 "s_register_operand" "w")]
4514 VMLALDAVAQ))
4515 ]
4516 "TARGET_HAVE_MVE"
4517 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4518 [(set_attr "type" "mve_move")
4519])
4520
4521;;
4522;; [vmlaldavaxq_s])
4523;;
4524(define_insn "mve_vmlaldavaxq_s<mode>"
4525 [
4526 (set (match_operand:DI 0 "s_register_operand" "=r")
4527 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4528 (match_operand:MVE_5 2 "s_register_operand" "w")
4529 (match_operand:MVE_5 3 "s_register_operand" "w")]
4530 VMLALDAVAXQ_S))
4531 ]
4532 "TARGET_HAVE_MVE"
4533 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4534 [(set_attr "type" "mve_move")
4535])
4536
4537;;
4538;; [vmlaldavq_p_u, vmlaldavq_p_s])
4539;;
4540(define_insn "mve_vmlaldavq_p_<supf><mode>"
4541 [
4542 (set (match_operand:DI 0 "s_register_operand" "=r")
4543 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4544 (match_operand:MVE_5 2 "s_register_operand" "w")
4545 (match_operand:HI 3 "vpr_register_operand" "Up")]
4546 VMLALDAVQ_P))
4547 ]
4548 "TARGET_HAVE_MVE"
4549 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4550 [(set_attr "type" "mve_move")
4551 (set_attr "length""8")])
4552
4553;;
4554;; [vmlaldavxq_p_s])
4555;;
4556(define_insn "mve_vmlaldavxq_p_s<mode>"
4557 [
4558 (set (match_operand:DI 0 "s_register_operand" "=r")
4559 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4560 (match_operand:MVE_5 2 "s_register_operand" "w")
4561 (match_operand:HI 3 "vpr_register_operand" "Up")]
4562 VMLALDAVXQ_P_S))
4563 ]
4564 "TARGET_HAVE_MVE"
4565 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
4566 [(set_attr "type" "mve_move")
4567 (set_attr "length""8")])
4568;;
4569;; [vmlsldavaq_s])
4570;;
4571(define_insn "mve_vmlsldavaq_s<mode>"
4572 [
4573 (set (match_operand:DI 0 "s_register_operand" "=r")
4574 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4575 (match_operand:MVE_5 2 "s_register_operand" "w")
4576 (match_operand:MVE_5 3 "s_register_operand" "w")]
4577 VMLSLDAVAQ_S))
4578 ]
4579 "TARGET_HAVE_MVE"
4580 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4581 [(set_attr "type" "mve_move")
4582])
4583
4584;;
4585;; [vmlsldavaxq_s])
4586;;
4587(define_insn "mve_vmlsldavaxq_s<mode>"
4588 [
4589 (set (match_operand:DI 0 "s_register_operand" "=r")
4590 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4591 (match_operand:MVE_5 2 "s_register_operand" "w")
4592 (match_operand:MVE_5 3 "s_register_operand" "w")]
4593 VMLSLDAVAXQ_S))
4594 ]
4595 "TARGET_HAVE_MVE"
4596 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4597 [(set_attr "type" "mve_move")
4598])
4599
4600;;
4601;; [vmlsldavq_p_s])
4602;;
4603(define_insn "mve_vmlsldavq_p_s<mode>"
4604 [
4605 (set (match_operand:DI 0 "s_register_operand" "=r")
4606 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4607 (match_operand:MVE_5 2 "s_register_operand" "w")
4608 (match_operand:HI 3 "vpr_register_operand" "Up")]
4609 VMLSLDAVQ_P_S))
4610 ]
4611 "TARGET_HAVE_MVE"
4612 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4613 [(set_attr "type" "mve_move")
4614 (set_attr "length""8")])
4615
4616;;
4617;; [vmlsldavxq_p_s])
4618;;
4619(define_insn "mve_vmlsldavxq_p_s<mode>"
4620 [
4621 (set (match_operand:DI 0 "s_register_operand" "=r")
4622 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4623 (match_operand:MVE_5 2 "s_register_operand" "w")
4624 (match_operand:HI 3 "vpr_register_operand" "Up")]
4625 VMLSLDAVXQ_P_S))
4626 ]
4627 "TARGET_HAVE_MVE"
4628 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4629 [(set_attr "type" "mve_move")
4630 (set_attr "length""8")])
4631;;
4632;; [vmovlbq_m_u, vmovlbq_m_s])
4633;;
4634(define_insn "mve_vmovlbq_m_<supf><mode>"
4635 [
4636 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4637 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4638 (match_operand:MVE_3 2 "s_register_operand" "w")
4639 (match_operand:HI 3 "vpr_register_operand" "Up")]
4640 VMOVLBQ_M))
4641 ]
4642 "TARGET_HAVE_MVE"
4643 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
4644 [(set_attr "type" "mve_move")
4645 (set_attr "length""8")])
4646;;
4647;; [vmovltq_m_u, vmovltq_m_s])
4648;;
4649(define_insn "mve_vmovltq_m_<supf><mode>"
4650 [
4651 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
4652 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
4653 (match_operand:MVE_3 2 "s_register_operand" "w")
4654 (match_operand:HI 3 "vpr_register_operand" "Up")]
4655 VMOVLTQ_M))
4656 ]
4657 "TARGET_HAVE_MVE"
4658 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
4659 [(set_attr "type" "mve_move")
4660 (set_attr "length""8")])
4661;;
4662;; [vmovnbq_m_u, vmovnbq_m_s])
4663;;
4664(define_insn "mve_vmovnbq_m_<supf><mode>"
4665 [
4666 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4667 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4668 (match_operand:MVE_5 2 "s_register_operand" "w")
4669 (match_operand:HI 3 "vpr_register_operand" "Up")]
4670 VMOVNBQ_M))
4671 ]
4672 "TARGET_HAVE_MVE"
4673 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
4674 [(set_attr "type" "mve_move")
4675 (set_attr "length""8")])
4676
4677;;
4678;; [vmovntq_m_u, vmovntq_m_s])
4679;;
4680(define_insn "mve_vmovntq_m_<supf><mode>"
4681 [
4682 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4683 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4684 (match_operand:MVE_5 2 "s_register_operand" "w")
4685 (match_operand:HI 3 "vpr_register_operand" "Up")]
4686 VMOVNTQ_M))
4687 ]
4688 "TARGET_HAVE_MVE"
4689 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
4690 [(set_attr "type" "mve_move")
4691 (set_attr "length""8")])
4692
4693;;
4694;; [vmvnq_m_n_u, vmvnq_m_n_s])
4695;;
4696(define_insn "mve_vmvnq_m_n_<supf><mode>"
4697 [
4698 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4699 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4700 (match_operand:SI 2 "immediate_operand" "i")
4701 (match_operand:HI 3 "vpr_register_operand" "Up")]
4702 VMVNQ_M_N))
4703 ]
4704 "TARGET_HAVE_MVE"
4705 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
4706 [(set_attr "type" "mve_move")
4707 (set_attr "length""8")])
4708;;
4709;; [vnegq_m_f])
4710;;
4711(define_insn "mve_vnegq_m_f<mode>"
4712 [
4713 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4714 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4715 (match_operand:MVE_0 2 "s_register_operand" "w")
4716 (match_operand:HI 3 "vpr_register_operand" "Up")]
4717 VNEGQ_M_F))
4718 ]
4719 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4720 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
4721 [(set_attr "type" "mve_move")
4722 (set_attr "length""8")])
4723
4724;;
4725;; [vorrq_m_n_s, vorrq_m_n_u])
4726;;
4727(define_insn "mve_vorrq_m_n_<supf><mode>"
4728 [
4729 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
4730 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
4731 (match_operand:SI 2 "immediate_operand" "i")
4732 (match_operand:HI 3 "vpr_register_operand" "Up")]
4733 VORRQ_M_N))
4734 ]
4735 "TARGET_HAVE_MVE"
4736 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
4737 [(set_attr "type" "mve_move")
4738 (set_attr "length""8")])
4739;;
4740;; [vpselq_f])
4741;;
4742(define_insn "mve_vpselq_f<mode>"
4743 [
4744 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4745 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
4746 (match_operand:MVE_0 2 "s_register_operand" "w")
4747 (match_operand:HI 3 "vpr_register_operand" "Up")]
4748 VPSELQ_F))
4749 ]
4750 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4751 "vpsel %q0, %q1, %q2"
4752 [(set_attr "type" "mve_move")
4753])
4754
4755;;
4756;; [vqmovnbq_m_s, vqmovnbq_m_u])
4757;;
4758(define_insn "mve_vqmovnbq_m_<supf><mode>"
4759 [
4760 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4761 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4762 (match_operand:MVE_5 2 "s_register_operand" "w")
4763 (match_operand:HI 3 "vpr_register_operand" "Up")]
4764 VQMOVNBQ_M))
4765 ]
4766 "TARGET_HAVE_MVE"
4767 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
4768 [(set_attr "type" "mve_move")
4769 (set_attr "length""8")])
4770
4771;;
4772;; [vqmovntq_m_u, vqmovntq_m_s])
4773;;
4774(define_insn "mve_vqmovntq_m_<supf><mode>"
4775 [
4776 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4777 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4778 (match_operand:MVE_5 2 "s_register_operand" "w")
4779 (match_operand:HI 3 "vpr_register_operand" "Up")]
4780 VQMOVNTQ_M))
4781 ]
4782 "TARGET_HAVE_MVE"
4783 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
4784 [(set_attr "type" "mve_move")
4785 (set_attr "length""8")])
4786
4787;;
4788;; [vqmovunbq_m_s])
4789;;
4790(define_insn "mve_vqmovunbq_m_s<mode>"
4791 [
4792 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4793 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4794 (match_operand:MVE_5 2 "s_register_operand" "w")
4795 (match_operand:HI 3 "vpr_register_operand" "Up")]
4796 VQMOVUNBQ_M_S))
4797 ]
4798 "TARGET_HAVE_MVE"
4799 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
4800 [(set_attr "type" "mve_move")
4801 (set_attr "length""8")])
4802
4803;;
4804;; [vqmovuntq_m_s])
4805;;
4806(define_insn "mve_vqmovuntq_m_s<mode>"
4807 [
4808 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4809 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4810 (match_operand:MVE_5 2 "s_register_operand" "w")
4811 (match_operand:HI 3 "vpr_register_operand" "Up")]
4812 VQMOVUNTQ_M_S))
4813 ]
4814 "TARGET_HAVE_MVE"
4815 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
4816 [(set_attr "type" "mve_move")
4817 (set_attr "length""8")])
4818
4819;;
4820;; [vqrshrntq_n_u, vqrshrntq_n_s])
4821;;
4822(define_insn "mve_vqrshrntq_n_<supf><mode>"
4823 [
4824 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4825 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4826 (match_operand:MVE_5 2 "s_register_operand" "w")
4827 (match_operand:SI 3 "mve_imm_8" "Rb")]
4828 VQRSHRNTQ_N))
4829 ]
4830 "TARGET_HAVE_MVE"
4831 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4832 [(set_attr "type" "mve_move")
4833])
4834
4835;;
4836;; [vqrshruntq_n_s])
4837;;
4838(define_insn "mve_vqrshruntq_n_s<mode>"
4839 [
4840 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4841 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4842 (match_operand:MVE_5 2 "s_register_operand" "w")
4843 (match_operand:SI 3 "mve_imm_8" "Rb")]
4844 VQRSHRUNTQ_N_S))
4845 ]
4846 "TARGET_HAVE_MVE"
4847 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4848 [(set_attr "type" "mve_move")
4849])
4850
4851;;
4852;; [vqshrnbq_n_u, vqshrnbq_n_s])
4853;;
4854(define_insn "mve_vqshrnbq_n_<supf><mode>"
4855 [
4856 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4857 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4858 (match_operand:MVE_5 2 "s_register_operand" "w")
d2ce75fe 4859 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
e3678b44
SP
4860 VQSHRNBQ_N))
4861 ]
4862 "TARGET_HAVE_MVE"
4863 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4864 [(set_attr "type" "mve_move")
4865])
4866
4867;;
4868;; [vqshrntq_n_u, vqshrntq_n_s])
4869;;
4870(define_insn "mve_vqshrntq_n_<supf><mode>"
4871 [
4872 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4873 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4874 (match_operand:MVE_5 2 "s_register_operand" "w")
d2ce75fe 4875 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
e3678b44
SP
4876 VQSHRNTQ_N))
4877 ]
4878 "TARGET_HAVE_MVE"
4879 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
4880 [(set_attr "type" "mve_move")
4881])
4882
4883;;
4884;; [vqshrunbq_n_s])
4885;;
4886(define_insn "mve_vqshrunbq_n_s<mode>"
4887 [
4888 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4889 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4890 (match_operand:MVE_5 2 "s_register_operand" "w")
d2ce75fe 4891 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
e3678b44
SP
4892 VQSHRUNBQ_N_S))
4893 ]
4894 "TARGET_HAVE_MVE"
4895 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
4896 [(set_attr "type" "mve_move")
4897])
4898
4899;;
4900;; [vqshruntq_n_s])
4901;;
4902(define_insn "mve_vqshruntq_n_s<mode>"
4903 [
4904 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
4905 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
4906 (match_operand:MVE_5 2 "s_register_operand" "w")
d2ce75fe 4907 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
e3678b44
SP
4908 VQSHRUNTQ_N_S))
4909 ]
4910 "TARGET_HAVE_MVE"
4911 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
4912 [(set_attr "type" "mve_move")
4913])
4914
4915;;
4916;; [vrev32q_m_f])
4917;;
4918(define_insn "mve_vrev32q_m_fv8hf"
4919 [
4920 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4921 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4922 (match_operand:V8HF 2 "s_register_operand" "w")
4923 (match_operand:HI 3 "vpr_register_operand" "Up")]
4924 VREV32Q_M_F))
4925 ]
4926 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4927 "vpst\;vrev32t.16 %q0, %q2"
4928 [(set_attr "type" "mve_move")
4929 (set_attr "length""8")])
4930
4931;;
4932;; [vrev32q_m_s, vrev32q_m_u])
4933;;
4934(define_insn "mve_vrev32q_m_<supf><mode>"
4935 [
4936 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
4937 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
4938 (match_operand:MVE_3 2 "s_register_operand" "w")
4939 (match_operand:HI 3 "vpr_register_operand" "Up")]
4940 VREV32Q_M))
4941 ]
4942 "TARGET_HAVE_MVE"
4943 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
4944 [(set_attr "type" "mve_move")
4945 (set_attr "length""8")])
4946
4947;;
4948;; [vrev64q_m_f])
4949;;
4950(define_insn "mve_vrev64q_m_f<mode>"
4951 [
4952 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4953 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4954 (match_operand:MVE_0 2 "s_register_operand" "w")
4955 (match_operand:HI 3 "vpr_register_operand" "Up")]
4956 VREV64Q_M_F))
4957 ]
4958 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4959 "vpst\;vrev64t.%#<V_sz_elem> %q0, %q2"
4960 [(set_attr "type" "mve_move")
4961 (set_attr "length""8")])
4962
4963;;
4964;; [vrmlaldavhaxq_s])
4965;;
4966(define_insn "mve_vrmlaldavhaxq_sv4si"
4967 [
4968 (set (match_operand:DI 0 "s_register_operand" "=r")
4969 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4970 (match_operand:V4SI 2 "s_register_operand" "w")
4971 (match_operand:V4SI 3 "s_register_operand" "w")]
4972 VRMLALDAVHAXQ_S))
4973 ]
4974 "TARGET_HAVE_MVE"
4975 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
4976 [(set_attr "type" "mve_move")
4977])
4978
4979;;
4980;; [vrmlaldavhxq_p_s])
4981;;
4982(define_insn "mve_vrmlaldavhxq_p_sv4si"
4983 [
4984 (set (match_operand:DI 0 "s_register_operand" "=r")
4985 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
4986 (match_operand:V4SI 2 "s_register_operand" "w")
4987 (match_operand:HI 3 "vpr_register_operand" "Up")]
4988 VRMLALDAVHXQ_P_S))
4989 ]
4990 "TARGET_HAVE_MVE"
4991 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
4992 [(set_attr "type" "mve_move")
4993 (set_attr "length""8")])
4994
4995;;
4996;; [vrmlsldavhaxq_s])
4997;;
4998(define_insn "mve_vrmlsldavhaxq_sv4si"
4999 [
5000 (set (match_operand:DI 0 "s_register_operand" "=r")
5001 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5002 (match_operand:V4SI 2 "s_register_operand" "w")
5003 (match_operand:V4SI 3 "s_register_operand" "w")]
5004 VRMLSLDAVHAXQ_S))
5005 ]
5006 "TARGET_HAVE_MVE"
5007 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
5008 [(set_attr "type" "mve_move")
5009])
5010
5011;;
5012;; [vrmlsldavhq_p_s])
5013;;
5014(define_insn "mve_vrmlsldavhq_p_sv4si"
5015 [
5016 (set (match_operand:DI 0 "s_register_operand" "=r")
5017 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5018 (match_operand:V4SI 2 "s_register_operand" "w")
5019 (match_operand:HI 3 "vpr_register_operand" "Up")]
5020 VRMLSLDAVHQ_P_S))
5021 ]
5022 "TARGET_HAVE_MVE"
5023 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
5024 [(set_attr "type" "mve_move")
5025 (set_attr "length""8")])
5026
5027;;
5028;; [vrmlsldavhxq_p_s])
5029;;
5030(define_insn "mve_vrmlsldavhxq_p_sv4si"
5031 [
5032 (set (match_operand:DI 0 "s_register_operand" "=r")
5033 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5034 (match_operand:V4SI 2 "s_register_operand" "w")
5035 (match_operand:HI 3 "vpr_register_operand" "Up")]
5036 VRMLSLDAVHXQ_P_S))
5037 ]
5038 "TARGET_HAVE_MVE"
5039 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
5040 [(set_attr "type" "mve_move")
5041 (set_attr "length""8")])
5042
5043;;
5044;; [vrndaq_m_f])
5045;;
5046(define_insn "mve_vrndaq_m_f<mode>"
5047 [
5048 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5049 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5050 (match_operand:MVE_0 2 "s_register_operand" "w")
5051 (match_operand:HI 3 "vpr_register_operand" "Up")]
5052 VRNDAQ_M_F))
5053 ]
5054 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5055 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
5056 [(set_attr "type" "mve_move")
5057 (set_attr "length""8")])
5058
5059;;
5060;; [vrndmq_m_f])
5061;;
5062(define_insn "mve_vrndmq_m_f<mode>"
5063 [
5064 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5065 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5066 (match_operand:MVE_0 2 "s_register_operand" "w")
5067 (match_operand:HI 3 "vpr_register_operand" "Up")]
5068 VRNDMQ_M_F))
5069 ]
5070 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5071 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
5072 [(set_attr "type" "mve_move")
5073 (set_attr "length""8")])
5074
5075;;
5076;; [vrndnq_m_f])
5077;;
5078(define_insn "mve_vrndnq_m_f<mode>"
5079 [
5080 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5081 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5082 (match_operand:MVE_0 2 "s_register_operand" "w")
5083 (match_operand:HI 3 "vpr_register_operand" "Up")]
5084 VRNDNQ_M_F))
5085 ]
5086 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5087 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
5088 [(set_attr "type" "mve_move")
5089 (set_attr "length""8")])
5090
5091;;
5092;; [vrndpq_m_f])
5093;;
5094(define_insn "mve_vrndpq_m_f<mode>"
5095 [
5096 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5097 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5098 (match_operand:MVE_0 2 "s_register_operand" "w")
5099 (match_operand:HI 3 "vpr_register_operand" "Up")]
5100 VRNDPQ_M_F))
5101 ]
5102 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5103 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
5104 [(set_attr "type" "mve_move")
5105 (set_attr "length""8")])
5106
5107;;
5108;; [vrndxq_m_f])
5109;;
5110(define_insn "mve_vrndxq_m_f<mode>"
5111 [
5112 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5113 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5114 (match_operand:MVE_0 2 "s_register_operand" "w")
5115 (match_operand:HI 3 "vpr_register_operand" "Up")]
5116 VRNDXQ_M_F))
5117 ]
5118 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5119 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
5120 [(set_attr "type" "mve_move")
5121 (set_attr "length""8")])
5122
5123;;
5124;; [vrshrnbq_n_s, vrshrnbq_n_u])
5125;;
5126(define_insn "mve_vrshrnbq_n_<supf><mode>"
5127 [
5128 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5129 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5130 (match_operand:MVE_5 2 "s_register_operand" "w")
5131 (match_operand:SI 3 "mve_imm_8" "Rb")]
5132 VRSHRNBQ_N))
5133 ]
5134 "TARGET_HAVE_MVE"
5135 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5136 [(set_attr "type" "mve_move")
5137])
5138
5139;;
5140;; [vrshrntq_n_u, vrshrntq_n_s])
5141;;
5142(define_insn "mve_vrshrntq_n_<supf><mode>"
5143 [
5144 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5145 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5146 (match_operand:MVE_5 2 "s_register_operand" "w")
5147 (match_operand:SI 3 "mve_imm_8" "Rb")]
5148 VRSHRNTQ_N))
5149 ]
5150 "TARGET_HAVE_MVE"
5151 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
5152 [(set_attr "type" "mve_move")
5153])
5154
5155;;
5156;; [vshrnbq_n_u, vshrnbq_n_s])
5157;;
5158(define_insn "mve_vshrnbq_n_<supf><mode>"
5159 [
5160 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5161 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5162 (match_operand:MVE_5 2 "s_register_operand" "w")
5163 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5164 VSHRNBQ_N))
5165 ]
5166 "TARGET_HAVE_MVE"
5167 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5168 [(set_attr "type" "mve_move")
5169])
5170
5171;;
5172;; [vshrntq_n_s, vshrntq_n_u])
5173;;
5174(define_insn "mve_vshrntq_n_<supf><mode>"
5175 [
5176 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5177 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5178 (match_operand:MVE_5 2 "s_register_operand" "w")
5179 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5180 VSHRNTQ_N))
5181 ]
5182 "TARGET_HAVE_MVE"
db5db9d2 5183 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
e3678b44
SP
5184 [(set_attr "type" "mve_move")
5185])
5186
5187;;
5188;; [vcvtmq_m_s, vcvtmq_m_u])
5189;;
5190(define_insn "mve_vcvtmq_m_<supf><mode>"
5191 [
5192 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5193 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5194 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5195 (match_operand:HI 3 "vpr_register_operand" "Up")]
5196 VCVTMQ_M))
5197 ]
5198 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
db5db9d2 5199 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
e3678b44
SP
5200 [(set_attr "type" "mve_move")
5201 (set_attr "length""8")])
5202
5203;;
5204;; [vcvtpq_m_u, vcvtpq_m_s])
5205;;
5206(define_insn "mve_vcvtpq_m_<supf><mode>"
5207 [
5208 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5209 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5210 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5211 (match_operand:HI 3 "vpr_register_operand" "Up")]
5212 VCVTPQ_M))
5213 ]
5214 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
db5db9d2 5215 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
e3678b44
SP
5216 [(set_attr "type" "mve_move")
5217 (set_attr "length""8")])
5218
5219;;
5220;; [vcvtnq_m_s, vcvtnq_m_u])
5221;;
5222(define_insn "mve_vcvtnq_m_<supf><mode>"
5223 [
5224 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5225 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5226 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5227 (match_operand:HI 3 "vpr_register_operand" "Up")]
5228 VCVTNQ_M))
5229 ]
5230 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
db5db9d2 5231 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
e3678b44
SP
5232 [(set_attr "type" "mve_move")
5233 (set_attr "length""8")])
5234
5235;;
5236;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
5237;;
5238(define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
5239 [
5240 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5241 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5242 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
d2ce75fe 5243 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
e3678b44
SP
5244 (match_operand:HI 4 "vpr_register_operand" "Up")]
5245 VCVTQ_M_N_FROM_F))
5246 ]
5247 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
db5db9d2 5248 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
e3678b44
SP
5249 [(set_attr "type" "mve_move")
5250 (set_attr "length""8")])
5251
5252;;
5253;; [vrev16q_m_u, vrev16q_m_s])
5254;;
5255(define_insn "mve_vrev16q_m_<supf>v16qi"
5256 [
5257 (set (match_operand:V16QI 0 "s_register_operand" "=w")
5258 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
5259 (match_operand:V16QI 2 "s_register_operand" "w")
5260 (match_operand:HI 3 "vpr_register_operand" "Up")]
5261 VREV16Q_M))
5262 ]
5263 "TARGET_HAVE_MVE"
5264 "vpst\;vrev16t.8 %q0, %q2"
5265 [(set_attr "type" "mve_move")
5266 (set_attr "length""8")])
5267
5268;;
5269;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
5270;;
5271(define_insn "mve_vcvtq_m_from_f_<supf><mode>"
5272 [
5273 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5274 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5275 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5276 (match_operand:HI 3 "vpr_register_operand" "Up")]
5277 VCVTQ_M_FROM_F))
5278 ]
5279 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
db5db9d2 5280 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
e3678b44
SP
5281 [(set_attr "type" "mve_move")
5282 (set_attr "length""8")])
5283
5284;;
5285;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
5286;;
5287(define_insn "mve_vrmlaldavhq_p_<supf>v4si"
5288 [
5289 (set (match_operand:DI 0 "s_register_operand" "=r")
5290 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5291 (match_operand:V4SI 2 "s_register_operand" "w")
5292 (match_operand:HI 3 "vpr_register_operand" "Up")]
5293 VRMLALDAVHQ_P))
5294 ]
5295 "TARGET_HAVE_MVE"
5296 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
5297 [(set_attr "type" "mve_move")
5298 (set_attr "length""8")])
5299
5300;;
5301;; [vrmlsldavhaq_s])
5302;;
5303(define_insn "mve_vrmlsldavhaq_sv4si"
5304 [
5305 (set (match_operand:DI 0 "s_register_operand" "=r")
5306 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5307 (match_operand:V4SI 2 "s_register_operand" "w")
5308 (match_operand:V4SI 3 "s_register_operand" "w")]
5309 VRMLSLDAVHAQ_S))
5310 ]
5311 "TARGET_HAVE_MVE"
5312 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
5313 [(set_attr "type" "mve_move")
5314])
db5db9d2
SP
5315
5316;;
5317;; [vabavq_p_s, vabavq_p_u])
5318;;
5319(define_insn "mve_vabavq_p_<supf><mode>"
5320 [
5321 (set (match_operand:SI 0 "s_register_operand" "=r")
5322 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5323 (match_operand:MVE_2 2 "s_register_operand" "w")
5324 (match_operand:MVE_2 3 "s_register_operand" "w")
5325 (match_operand:HI 4 "vpr_register_operand" "Up")]
5326 VABAVQ_P))
5327 ]
5328 "TARGET_HAVE_MVE"
5329 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
5330 [(set_attr "type" "mve_move")
5331])
5332
5333;;
5334;; [vqshluq_m_n_s])
5335;;
5336(define_insn "mve_vqshluq_m_n_s<mode>"
5337 [
5338 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5339 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5340 (match_operand:MVE_2 2 "s_register_operand" "w")
5341 (match_operand:SI 3 "mve_imm_7" "Ra")
5342 (match_operand:HI 4 "vpr_register_operand" "Up")]
5343 VQSHLUQ_M_N_S))
5344 ]
5345 "TARGET_HAVE_MVE"
5346 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
5347 [(set_attr "type" "mve_move")])
5348
5349;;
5350;; [vshlq_m_s, vshlq_m_u])
5351;;
5352(define_insn "mve_vshlq_m_<supf><mode>"
5353 [
5354 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5355 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5356 (match_operand:MVE_2 2 "s_register_operand" "w")
5357 (match_operand:MVE_2 3 "s_register_operand" "w")
5358 (match_operand:HI 4 "vpr_register_operand" "Up")]
5359 VSHLQ_M))
5360 ]
5361 "TARGET_HAVE_MVE"
5362 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5363 [(set_attr "type" "mve_move")])
5364
5365;;
5366;; [vsriq_m_n_s, vsriq_m_n_u])
5367;;
5368(define_insn "mve_vsriq_m_n_<supf><mode>"
5369 [
5370 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5371 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5372 (match_operand:MVE_2 2 "s_register_operand" "w")
5373 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
5374 (match_operand:HI 4 "vpr_register_operand" "Up")]
5375 VSRIQ_M_N))
5376 ]
5377 "TARGET_HAVE_MVE"
5378 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
5379 [(set_attr "type" "mve_move")])
5380
5381;;
5382;; [vsubq_m_u, vsubq_m_s])
5383;;
5384(define_insn "mve_vsubq_m_<supf><mode>"
5385 [
5386 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5387 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5388 (match_operand:MVE_2 2 "s_register_operand" "w")
5389 (match_operand:MVE_2 3 "s_register_operand" "w")
5390 (match_operand:HI 4 "vpr_register_operand" "Up")]
5391 VSUBQ_M))
5392 ]
5393 "TARGET_HAVE_MVE"
5394 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
5395 [(set_attr "type" "mve_move")])
5396
5397;;
5398;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
5399;;
5400(define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
5401 [
5402 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5403 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5404 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
d2ce75fe 5405 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
db5db9d2
SP
5406 (match_operand:HI 4 "vpr_register_operand" "Up")]
5407 VCVTQ_M_N_TO_F))
5408 ]
5409 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5410 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5411 [(set_attr "type" "mve_move")
5412 (set_attr "length""8")])
8eb3b6b9
SP
5413;;
5414;; [vabdq_m_s, vabdq_m_u])
5415;;
5416(define_insn "mve_vabdq_m_<supf><mode>"
5417 [
5418 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5419 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5420 (match_operand:MVE_2 2 "s_register_operand" "w")
5421 (match_operand:MVE_2 3 "s_register_operand" "w")
5422 (match_operand:HI 4 "vpr_register_operand" "Up")]
5423 VABDQ_M))
5424 ]
5425 "TARGET_HAVE_MVE"
5426 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5427 [(set_attr "type" "mve_move")
5428 (set_attr "length""8")])
5429
5430;;
5431;; [vaddq_m_n_s, vaddq_m_n_u])
5432;;
5433(define_insn "mve_vaddq_m_n_<supf><mode>"
5434 [
5435 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5436 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5437 (match_operand:MVE_2 2 "s_register_operand" "w")
5438 (match_operand:<V_elem> 3 "s_register_operand" "r")
5439 (match_operand:HI 4 "vpr_register_operand" "Up")]
5440 VADDQ_M_N))
5441 ]
5442 "TARGET_HAVE_MVE"
5443 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3"
5444 [(set_attr "type" "mve_move")
5445 (set_attr "length""8")])
5446
5447;;
5448;; [vaddq_m_u, vaddq_m_s])
5449;;
5450(define_insn "mve_vaddq_m_<supf><mode>"
5451 [
5452 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5453 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5454 (match_operand:MVE_2 2 "s_register_operand" "w")
5455 (match_operand:MVE_2 3 "s_register_operand" "w")
5456 (match_operand:HI 4 "vpr_register_operand" "Up")]
5457 VADDQ_M))
5458 ]
5459 "TARGET_HAVE_MVE"
5460 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3"
5461 [(set_attr "type" "mve_move")
5462 (set_attr "length""8")])
5463
5464;;
5465;; [vandq_m_u, vandq_m_s])
5466;;
5467(define_insn "mve_vandq_m_<supf><mode>"
5468 [
5469 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5470 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5471 (match_operand:MVE_2 2 "s_register_operand" "w")
5472 (match_operand:MVE_2 3 "s_register_operand" "w")
5473 (match_operand:HI 4 "vpr_register_operand" "Up")]
5474 VANDQ_M))
5475 ]
5476 "TARGET_HAVE_MVE"
5477 "vpst\;vandt %q0, %q2, %q3"
5478 [(set_attr "type" "mve_move")
5479 (set_attr "length""8")])
5480
5481;;
5482;; [vbicq_m_u, vbicq_m_s])
5483;;
5484(define_insn "mve_vbicq_m_<supf><mode>"
5485 [
5486 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5487 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5488 (match_operand:MVE_2 2 "s_register_operand" "w")
5489 (match_operand:MVE_2 3 "s_register_operand" "w")
5490 (match_operand:HI 4 "vpr_register_operand" "Up")]
5491 VBICQ_M))
5492 ]
5493 "TARGET_HAVE_MVE"
5494 "vpst\;vbict %q0, %q2, %q3"
5495 [(set_attr "type" "mve_move")
5496 (set_attr "length""8")])
5497
5498;;
5499;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
5500;;
5501(define_insn "mve_vbrsrq_m_n_<supf><mode>"
5502 [
5503 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5504 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5505 (match_operand:MVE_2 2 "s_register_operand" "w")
5506 (match_operand:SI 3 "s_register_operand" "r")
5507 (match_operand:HI 4 "vpr_register_operand" "Up")]
5508 VBRSRQ_M_N))
5509 ]
5510 "TARGET_HAVE_MVE"
5511 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
5512 [(set_attr "type" "mve_move")
5513 (set_attr "length""8")])
5514
5515;;
5516;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
5517;;
5518(define_insn "mve_vcaddq_rot270_m_<supf><mode>"
5519 [
6debbff6 5520 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
8eb3b6b9
SP
5521 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5522 (match_operand:MVE_2 2 "s_register_operand" "w")
5523 (match_operand:MVE_2 3 "s_register_operand" "w")
5524 (match_operand:HI 4 "vpr_register_operand" "Up")]
5525 VCADDQ_ROT270_M))
5526 ]
5527 "TARGET_HAVE_MVE"
5528 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270"
5529 [(set_attr "type" "mve_move")
5530 (set_attr "length""8")])
5531
5532;;
5533;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
5534;;
5535(define_insn "mve_vcaddq_rot90_m_<supf><mode>"
5536 [
6debbff6 5537 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
8eb3b6b9
SP
5538 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5539 (match_operand:MVE_2 2 "s_register_operand" "w")
5540 (match_operand:MVE_2 3 "s_register_operand" "w")
5541 (match_operand:HI 4 "vpr_register_operand" "Up")]
5542 VCADDQ_ROT90_M))
5543 ]
5544 "TARGET_HAVE_MVE"
5545 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90"
5546 [(set_attr "type" "mve_move")
5547 (set_attr "length""8")])
5548
5549;;
5550;; [veorq_m_s, veorq_m_u])
5551;;
5552(define_insn "mve_veorq_m_<supf><mode>"
5553 [
5554 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5555 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5556 (match_operand:MVE_2 2 "s_register_operand" "w")
5557 (match_operand:MVE_2 3 "s_register_operand" "w")
5558 (match_operand:HI 4 "vpr_register_operand" "Up")]
5559 VEORQ_M))
5560 ]
5561 "TARGET_HAVE_MVE"
5562 "vpst\;veort %q0, %q2, %q3"
5563 [(set_attr "type" "mve_move")
5564 (set_attr "length""8")])
5565
5566;;
5567;; [vhaddq_m_n_s, vhaddq_m_n_u])
5568;;
5569(define_insn "mve_vhaddq_m_n_<supf><mode>"
5570 [
5571 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5572 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5573 (match_operand:MVE_2 2 "s_register_operand" "w")
5574 (match_operand:<V_elem> 3 "s_register_operand" "r")
5575 (match_operand:HI 4 "vpr_register_operand" "Up")]
5576 VHADDQ_M_N))
5577 ]
5578 "TARGET_HAVE_MVE"
5579 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5580 [(set_attr "type" "mve_move")
5581 (set_attr "length""8")])
5582
5583;;
5584;; [vhaddq_m_s, vhaddq_m_u])
5585;;
5586(define_insn "mve_vhaddq_m_<supf><mode>"
5587 [
5588 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5589 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5590 (match_operand:MVE_2 2 "s_register_operand" "w")
5591 (match_operand:MVE_2 3 "s_register_operand" "w")
5592 (match_operand:HI 4 "vpr_register_operand" "Up")]
5593 VHADDQ_M))
5594 ]
5595 "TARGET_HAVE_MVE"
5596 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5597 [(set_attr "type" "mve_move")
5598 (set_attr "length""8")])
5599
5600;;
5601;; [vhsubq_m_n_s, vhsubq_m_n_u])
5602;;
5603(define_insn "mve_vhsubq_m_n_<supf><mode>"
5604 [
5605 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5606 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5607 (match_operand:MVE_2 2 "s_register_operand" "w")
5608 (match_operand:<V_elem> 3 "s_register_operand" "r")
5609 (match_operand:HI 4 "vpr_register_operand" "Up")]
5610 VHSUBQ_M_N))
5611 ]
5612 "TARGET_HAVE_MVE"
5613 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5614 [(set_attr "type" "mve_move")
5615 (set_attr "length""8")])
5616
5617;;
5618;; [vhsubq_m_s, vhsubq_m_u])
5619;;
5620(define_insn "mve_vhsubq_m_<supf><mode>"
5621 [
5622 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5623 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5624 (match_operand:MVE_2 2 "s_register_operand" "w")
5625 (match_operand:MVE_2 3 "s_register_operand" "w")
5626 (match_operand:HI 4 "vpr_register_operand" "Up")]
5627 VHSUBQ_M))
5628 ]
5629 "TARGET_HAVE_MVE"
5630 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5631 [(set_attr "type" "mve_move")
5632 (set_attr "length""8")])
5633
5634;;
5635;; [vmaxq_m_s, vmaxq_m_u])
5636;;
5637(define_insn "mve_vmaxq_m_<supf><mode>"
5638 [
5639 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5640 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5641 (match_operand:MVE_2 2 "s_register_operand" "w")
5642 (match_operand:MVE_2 3 "s_register_operand" "w")
5643 (match_operand:HI 4 "vpr_register_operand" "Up")]
5644 VMAXQ_M))
5645 ]
5646 "TARGET_HAVE_MVE"
5647 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5648 [(set_attr "type" "mve_move")
5649 (set_attr "length""8")])
5650
5651;;
5652;; [vminq_m_s, vminq_m_u])
5653;;
5654(define_insn "mve_vminq_m_<supf><mode>"
5655 [
5656 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5657 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5658 (match_operand:MVE_2 2 "s_register_operand" "w")
5659 (match_operand:MVE_2 3 "s_register_operand" "w")
5660 (match_operand:HI 4 "vpr_register_operand" "Up")]
5661 VMINQ_M))
5662 ]
5663 "TARGET_HAVE_MVE"
5664 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5665 [(set_attr "type" "mve_move")
5666 (set_attr "length""8")])
5667
5668;;
5669;; [vmladavaq_p_u, vmladavaq_p_s])
5670;;
5671(define_insn "mve_vmladavaq_p_<supf><mode>"
5672 [
3d537943 5673 (set (match_operand:SI 0 "s_register_operand" "=Te")
8eb3b6b9
SP
5674 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5675 (match_operand:MVE_2 2 "s_register_operand" "w")
5676 (match_operand:MVE_2 3 "s_register_operand" "w")
5677 (match_operand:HI 4 "vpr_register_operand" "Up")]
5678 VMLADAVAQ_P))
5679 ]
5680 "TARGET_HAVE_MVE"
5681 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3"
5682 [(set_attr "type" "mve_move")
5683 (set_attr "length""8")])
5684
5685;;
5686;; [vmlaq_m_n_s, vmlaq_m_n_u])
5687;;
5688(define_insn "mve_vmlaq_m_n_<supf><mode>"
5689 [
5690 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5691 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5692 (match_operand:MVE_2 2 "s_register_operand" "w")
5693 (match_operand:<V_elem> 3 "s_register_operand" "r")
5694 (match_operand:HI 4 "vpr_register_operand" "Up")]
5695 VMLAQ_M_N))
5696 ]
5697 "TARGET_HAVE_MVE"
5698 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3"
5699 [(set_attr "type" "mve_move")
5700 (set_attr "length""8")])
5701
5702;;
5703;; [vmlasq_m_n_u, vmlasq_m_n_s])
5704;;
5705(define_insn "mve_vmlasq_m_n_<supf><mode>"
5706 [
5707 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5708 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5709 (match_operand:MVE_2 2 "s_register_operand" "w")
5710 (match_operand:<V_elem> 3 "s_register_operand" "r")
5711 (match_operand:HI 4 "vpr_register_operand" "Up")]
5712 VMLASQ_M_N))
5713 ]
5714 "TARGET_HAVE_MVE"
5715 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3"
5716 [(set_attr "type" "mve_move")
5717 (set_attr "length""8")])
5718
5719;;
5720;; [vmulhq_m_s, vmulhq_m_u])
5721;;
5722(define_insn "mve_vmulhq_m_<supf><mode>"
5723 [
5724 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5725 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5726 (match_operand:MVE_2 2 "s_register_operand" "w")
5727 (match_operand:MVE_2 3 "s_register_operand" "w")
5728 (match_operand:HI 4 "vpr_register_operand" "Up")]
5729 VMULHQ_M))
5730 ]
5731 "TARGET_HAVE_MVE"
5732 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5733 [(set_attr "type" "mve_move")
5734 (set_attr "length""8")])
5735
5736;;
5737;; [vmullbq_int_m_u, vmullbq_int_m_s])
5738;;
5739(define_insn "mve_vmullbq_int_m_<supf><mode>"
5740 [
6debbff6 5741 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
8eb3b6b9
SP
5742 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5743 (match_operand:MVE_2 2 "s_register_operand" "w")
5744 (match_operand:MVE_2 3 "s_register_operand" "w")
5745 (match_operand:HI 4 "vpr_register_operand" "Up")]
5746 VMULLBQ_INT_M))
5747 ]
5748 "TARGET_HAVE_MVE"
5749 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5750 [(set_attr "type" "mve_move")
5751 (set_attr "length""8")])
5752
5753;;
5754;; [vmulltq_int_m_s, vmulltq_int_m_u])
5755;;
5756(define_insn "mve_vmulltq_int_m_<supf><mode>"
5757 [
6debbff6 5758 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
8eb3b6b9
SP
5759 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5760 (match_operand:MVE_2 2 "s_register_operand" "w")
5761 (match_operand:MVE_2 3 "s_register_operand" "w")
5762 (match_operand:HI 4 "vpr_register_operand" "Up")]
5763 VMULLTQ_INT_M))
5764 ]
5765 "TARGET_HAVE_MVE"
5766 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
5767 [(set_attr "type" "mve_move")
5768 (set_attr "length""8")])
5769
5770;;
5771;; [vmulq_m_n_u, vmulq_m_n_s])
5772;;
5773(define_insn "mve_vmulq_m_n_<supf><mode>"
5774 [
5775 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5776 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5777 (match_operand:MVE_2 2 "s_register_operand" "w")
5778 (match_operand:<V_elem> 3 "s_register_operand" "r")
5779 (match_operand:HI 4 "vpr_register_operand" "Up")]
5780 VMULQ_M_N))
5781 ]
5782 "TARGET_HAVE_MVE"
5783 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3"
5784 [(set_attr "type" "mve_move")
5785 (set_attr "length""8")])
5786
5787;;
5788;; [vmulq_m_s, vmulq_m_u])
5789;;
5790(define_insn "mve_vmulq_m_<supf><mode>"
5791 [
5792 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5793 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5794 (match_operand:MVE_2 2 "s_register_operand" "w")
5795 (match_operand:MVE_2 3 "s_register_operand" "w")
5796 (match_operand:HI 4 "vpr_register_operand" "Up")]
5797 VMULQ_M))
5798 ]
5799 "TARGET_HAVE_MVE"
5800 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3"
5801 [(set_attr "type" "mve_move")
5802 (set_attr "length""8")])
5803
5804;;
5805;; [vornq_m_u, vornq_m_s])
5806;;
5807(define_insn "mve_vornq_m_<supf><mode>"
5808 [
5809 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5810 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5811 (match_operand:MVE_2 2 "s_register_operand" "w")
5812 (match_operand:MVE_2 3 "s_register_operand" "w")
5813 (match_operand:HI 4 "vpr_register_operand" "Up")]
5814 VORNQ_M))
5815 ]
5816 "TARGET_HAVE_MVE"
5817 "vpst\;vornt %q0, %q2, %q3"
5818 [(set_attr "type" "mve_move")
5819 (set_attr "length""8")])
5820
5821;;
5822;; [vorrq_m_s, vorrq_m_u])
5823;;
5824(define_insn "mve_vorrq_m_<supf><mode>"
5825 [
5826 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5827 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5828 (match_operand:MVE_2 2 "s_register_operand" "w")
5829 (match_operand:MVE_2 3 "s_register_operand" "w")
5830 (match_operand:HI 4 "vpr_register_operand" "Up")]
5831 VORRQ_M))
5832 ]
5833 "TARGET_HAVE_MVE"
5834 "vpst\;vorrt %q0, %q2, %q3"
5835 [(set_attr "type" "mve_move")
5836 (set_attr "length""8")])
5837
5838;;
5839;; [vqaddq_m_n_u, vqaddq_m_n_s])
5840;;
5841(define_insn "mve_vqaddq_m_n_<supf><mode>"
5842 [
5843 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5844 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5845 (match_operand:MVE_2 2 "s_register_operand" "w")
5846 (match_operand:<V_elem> 3 "s_register_operand" "r")
5847 (match_operand:HI 4 "vpr_register_operand" "Up")]
5848 VQADDQ_M_N))
5849 ]
5850 "TARGET_HAVE_MVE"
5851 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5852 [(set_attr "type" "mve_move")
5853 (set_attr "length""8")])
5854
5855;;
5856;; [vqaddq_m_u, vqaddq_m_s])
5857;;
5858(define_insn "mve_vqaddq_m_<supf><mode>"
5859 [
5860 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5861 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5862 (match_operand:MVE_2 2 "s_register_operand" "w")
5863 (match_operand:MVE_2 3 "s_register_operand" "w")
5864 (match_operand:HI 4 "vpr_register_operand" "Up")]
5865 VQADDQ_M))
5866 ]
5867 "TARGET_HAVE_MVE"
5868 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5869 [(set_attr "type" "mve_move")
5870 (set_attr "length""8")])
5871
5872;;
5873;; [vqdmlahq_m_n_s])
5874;;
5875(define_insn "mve_vqdmlahq_m_n_s<mode>"
5876 [
5877 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5878 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5879 (match_operand:MVE_2 2 "s_register_operand" "w")
5880 (match_operand:<V_elem> 3 "s_register_operand" "r")
5881 (match_operand:HI 4 "vpr_register_operand" "Up")]
5882 VQDMLAHQ_M_N_S))
5883 ]
5884 "TARGET_HAVE_MVE"
5885 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5886 [(set_attr "type" "mve_move")
5887 (set_attr "length""8")])
5888
afb198ee
CL
5889;;
5890;; [vqdmlashq_m_n_s])
5891;;
5892(define_insn "mve_vqdmlashq_m_n_s<mode>"
5893 [
5894 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5895 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5896 (match_operand:MVE_2 2 "s_register_operand" "w")
5897 (match_operand:<V_elem> 3 "s_register_operand" "r")
5898 (match_operand:HI 4 "vpr_register_operand" "Up")]
5899 VQDMLASHQ_M_N_S))
5900 ]
5901 "TARGET_HAVE_MVE"
5902 "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5903 [(set_attr "type" "mve_move")
5904 (set_attr "length""8")])
5905
8eb3b6b9
SP
5906;;
5907;; [vqrdmlahq_m_n_s])
5908;;
5909(define_insn "mve_vqrdmlahq_m_n_s<mode>"
5910 [
5911 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5912 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5913 (match_operand:MVE_2 2 "s_register_operand" "w")
5914 (match_operand:<V_elem> 3 "s_register_operand" "r")
5915 (match_operand:HI 4 "vpr_register_operand" "Up")]
5916 VQRDMLAHQ_M_N_S))
5917 ]
5918 "TARGET_HAVE_MVE"
5919 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
5920 [(set_attr "type" "mve_move")
5921 (set_attr "length""8")])
5922
5923;;
5924;; [vqrdmlashq_m_n_s])
5925;;
5926(define_insn "mve_vqrdmlashq_m_n_s<mode>"
5927 [
5928 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5929 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5930 (match_operand:MVE_2 2 "s_register_operand" "w")
5931 (match_operand:<V_elem> 3 "s_register_operand" "r")
5932 (match_operand:HI 4 "vpr_register_operand" "Up")]
5933 VQRDMLASHQ_M_N_S))
5934 ]
5935 "TARGET_HAVE_MVE"
5936 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
5937 [(set_attr "type" "mve_move")
5938 (set_attr "length""8")])
5939
5940;;
5941;; [vqrshlq_m_u, vqrshlq_m_s])
5942;;
5943(define_insn "mve_vqrshlq_m_<supf><mode>"
5944 [
5945 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5946 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5947 (match_operand:MVE_2 2 "s_register_operand" "w")
5948 (match_operand:MVE_2 3 "s_register_operand" "w")
5949 (match_operand:HI 4 "vpr_register_operand" "Up")]
5950 VQRSHLQ_M))
5951 ]
5952 "TARGET_HAVE_MVE"
5953 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5954 [(set_attr "type" "mve_move")
5955 (set_attr "length""8")])
5956
5957;;
5958;; [vqshlq_m_n_s, vqshlq_m_n_u])
5959;;
5960(define_insn "mve_vqshlq_m_n_<supf><mode>"
5961 [
5962 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5963 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5964 (match_operand:MVE_2 2 "s_register_operand" "w")
5965 (match_operand:SI 3 "immediate_operand" "i")
5966 (match_operand:HI 4 "vpr_register_operand" "Up")]
5967 VQSHLQ_M_N))
5968 ]
5969 "TARGET_HAVE_MVE"
5970 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5971 [(set_attr "type" "mve_move")
5972 (set_attr "length""8")])
5973
5974;;
5975;; [vqshlq_m_u, vqshlq_m_s])
5976;;
5977(define_insn "mve_vqshlq_m_<supf><mode>"
5978 [
5979 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5980 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5981 (match_operand:MVE_2 2 "s_register_operand" "w")
5982 (match_operand:MVE_2 3 "s_register_operand" "w")
5983 (match_operand:HI 4 "vpr_register_operand" "Up")]
5984 VQSHLQ_M))
5985 ]
5986 "TARGET_HAVE_MVE"
5987 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5988 [(set_attr "type" "mve_move")
5989 (set_attr "length""8")])
5990
5991;;
5992;; [vqsubq_m_n_u, vqsubq_m_n_s])
5993;;
5994(define_insn "mve_vqsubq_m_n_<supf><mode>"
5995 [
5996 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5997 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5998 (match_operand:MVE_2 2 "s_register_operand" "w")
5999 (match_operand:<V_elem> 3 "s_register_operand" "r")
6000 (match_operand:HI 4 "vpr_register_operand" "Up")]
6001 VQSUBQ_M_N))
6002 ]
6003 "TARGET_HAVE_MVE"
6004 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6005 [(set_attr "type" "mve_move")
6006 (set_attr "length""8")])
6007
6008;;
6009;; [vqsubq_m_u, vqsubq_m_s])
6010;;
6011(define_insn "mve_vqsubq_m_<supf><mode>"
6012 [
6013 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6014 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6015 (match_operand:MVE_2 2 "s_register_operand" "w")
6016 (match_operand:MVE_2 3 "s_register_operand" "w")
6017 (match_operand:HI 4 "vpr_register_operand" "Up")]
6018 VQSUBQ_M))
6019 ]
6020 "TARGET_HAVE_MVE"
6021 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6022 [(set_attr "type" "mve_move")
6023 (set_attr "length""8")])
6024
6025;;
6026;; [vrhaddq_m_u, vrhaddq_m_s])
6027;;
6028(define_insn "mve_vrhaddq_m_<supf><mode>"
6029 [
6030 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6031 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6032 (match_operand:MVE_2 2 "s_register_operand" "w")
6033 (match_operand:MVE_2 3 "s_register_operand" "w")
6034 (match_operand:HI 4 "vpr_register_operand" "Up")]
6035 VRHADDQ_M))
6036 ]
6037 "TARGET_HAVE_MVE"
6038 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6039 [(set_attr "type" "mve_move")
6040 (set_attr "length""8")])
6041
6042;;
6043;; [vrmulhq_m_u, vrmulhq_m_s])
6044;;
6045(define_insn "mve_vrmulhq_m_<supf><mode>"
6046 [
6047 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6048 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6049 (match_operand:MVE_2 2 "s_register_operand" "w")
6050 (match_operand:MVE_2 3 "s_register_operand" "w")
6051 (match_operand:HI 4 "vpr_register_operand" "Up")]
6052 VRMULHQ_M))
6053 ]
6054 "TARGET_HAVE_MVE"
6055 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6056 [(set_attr "type" "mve_move")
6057 (set_attr "length""8")])
6058
6059;;
6060;; [vrshlq_m_s, vrshlq_m_u])
6061;;
6062(define_insn "mve_vrshlq_m_<supf><mode>"
6063 [
6064 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6065 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6066 (match_operand:MVE_2 2 "s_register_operand" "w")
6067 (match_operand:MVE_2 3 "s_register_operand" "w")
6068 (match_operand:HI 4 "vpr_register_operand" "Up")]
6069 VRSHLQ_M))
6070 ]
6071 "TARGET_HAVE_MVE"
6072 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6073 [(set_attr "type" "mve_move")
6074 (set_attr "length""8")])
6075
6076;;
6077;; [vrshrq_m_n_s, vrshrq_m_n_u])
6078;;
6079(define_insn "mve_vrshrq_m_n_<supf><mode>"
6080 [
6081 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6082 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6083 (match_operand:MVE_2 2 "s_register_operand" "w")
6084 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6085 (match_operand:HI 4 "vpr_register_operand" "Up")]
6086 VRSHRQ_M_N))
6087 ]
6088 "TARGET_HAVE_MVE"
6089 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6090 [(set_attr "type" "mve_move")
6091 (set_attr "length""8")])
6092
6093;;
6094;; [vshlq_m_n_s, vshlq_m_n_u])
6095;;
6096(define_insn "mve_vshlq_m_n_<supf><mode>"
6097 [
6098 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6099 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6100 (match_operand:MVE_2 2 "s_register_operand" "w")
6101 (match_operand:SI 3 "immediate_operand" "i")
6102 (match_operand:HI 4 "vpr_register_operand" "Up")]
6103 VSHLQ_M_N))
6104 ]
6105 "TARGET_HAVE_MVE"
6106 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6107 [(set_attr "type" "mve_move")
6108 (set_attr "length""8")])
6109
6110;;
6111;; [vshrq_m_n_s, vshrq_m_n_u])
6112;;
6113(define_insn "mve_vshrq_m_n_<supf><mode>"
6114 [
6115 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6116 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6117 (match_operand:MVE_2 2 "s_register_operand" "w")
6118 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6119 (match_operand:HI 4 "vpr_register_operand" "Up")]
6120 VSHRQ_M_N))
6121 ]
6122 "TARGET_HAVE_MVE"
6123 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6124 [(set_attr "type" "mve_move")
6125 (set_attr "length""8")])
6126
6127;;
6128;; [vsliq_m_n_u, vsliq_m_n_s])
6129;;
6130(define_insn "mve_vsliq_m_n_<supf><mode>"
6131 [
6132 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6133 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6134 (match_operand:MVE_2 2 "s_register_operand" "w")
6135 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
6136 (match_operand:HI 4 "vpr_register_operand" "Up")]
6137 VSLIQ_M_N))
6138 ]
6139 "TARGET_HAVE_MVE"
6140 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
6141 [(set_attr "type" "mve_move")
6142 (set_attr "length""8")])
6143
6144;;
6145;; [vsubq_m_n_s, vsubq_m_n_u])
6146;;
6147(define_insn "mve_vsubq_m_n_<supf><mode>"
6148 [
6149 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6150 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6151 (match_operand:MVE_2 2 "s_register_operand" "w")
6152 (match_operand:<V_elem> 3 "s_register_operand" "r")
6153 (match_operand:HI 4 "vpr_register_operand" "Up")]
6154 VSUBQ_M_N))
6155 ]
6156 "TARGET_HAVE_MVE"
6157 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
6158 [(set_attr "type" "mve_move")
6159 (set_attr "length""8")])
6160
6161;;
6162;; [vhcaddq_rot270_m_s])
6163;;
6164(define_insn "mve_vhcaddq_rot270_m_s<mode>"
6165 [
6debbff6 6166 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
8eb3b6b9
SP
6167 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6168 (match_operand:MVE_2 2 "s_register_operand" "w")
6169 (match_operand:MVE_2 3 "s_register_operand" "w")
6170 (match_operand:HI 4 "vpr_register_operand" "Up")]
6171 VHCADDQ_ROT270_M_S))
6172 ]
6173 "TARGET_HAVE_MVE"
6174 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
6175 [(set_attr "type" "mve_move")
6176 (set_attr "length""8")])
6177
6178;;
6179;; [vhcaddq_rot90_m_s])
6180;;
6181(define_insn "mve_vhcaddq_rot90_m_s<mode>"
6182 [
6debbff6 6183 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
8eb3b6b9
SP
6184 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6185 (match_operand:MVE_2 2 "s_register_operand" "w")
6186 (match_operand:MVE_2 3 "s_register_operand" "w")
6187 (match_operand:HI 4 "vpr_register_operand" "Up")]
6188 VHCADDQ_ROT90_M_S))
6189 ]
6190 "TARGET_HAVE_MVE"
6191 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
6192 [(set_attr "type" "mve_move")
6193 (set_attr "length""8")])
6194
6195;;
6196;; [vmladavaxq_p_s])
6197;;
6198(define_insn "mve_vmladavaxq_p_s<mode>"
6199 [
3d537943 6200 (set (match_operand:SI 0 "s_register_operand" "=Te")
8eb3b6b9
SP
6201 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6202 (match_operand:MVE_2 2 "s_register_operand" "w")
6203 (match_operand:MVE_2 3 "s_register_operand" "w")
6204 (match_operand:HI 4 "vpr_register_operand" "Up")]
6205 VMLADAVAXQ_P_S))
6206 ]
6207 "TARGET_HAVE_MVE"
6208 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6209 [(set_attr "type" "mve_move")
6210 (set_attr "length""8")])
6211
6212;;
6213;; [vmlsdavaq_p_s])
6214;;
6215(define_insn "mve_vmlsdavaq_p_s<mode>"
6216 [
3d537943 6217 (set (match_operand:SI 0 "s_register_operand" "=Te")
8eb3b6b9
SP
6218 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6219 (match_operand:MVE_2 2 "s_register_operand" "w")
6220 (match_operand:MVE_2 3 "s_register_operand" "w")
6221 (match_operand:HI 4 "vpr_register_operand" "Up")]
6222 VMLSDAVAQ_P_S))
6223 ]
6224 "TARGET_HAVE_MVE"
6225 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
6226 [(set_attr "type" "mve_move")
6227 (set_attr "length""8")])
6228
6229;;
6230;; [vmlsdavaxq_p_s])
6231;;
6232(define_insn "mve_vmlsdavaxq_p_s<mode>"
6233 [
3d537943 6234 (set (match_operand:SI 0 "s_register_operand" "=Te")
8eb3b6b9
SP
6235 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6236 (match_operand:MVE_2 2 "s_register_operand" "w")
6237 (match_operand:MVE_2 3 "s_register_operand" "w")
6238 (match_operand:HI 4 "vpr_register_operand" "Up")]
6239 VMLSDAVAXQ_P_S))
6240 ]
6241 "TARGET_HAVE_MVE"
6242 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6243 [(set_attr "type" "mve_move")
6244 (set_attr "length""8")])
6245
6246;;
6247;; [vqdmladhq_m_s])
6248;;
6249(define_insn "mve_vqdmladhq_m_s<mode>"
6250 [
6251 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6252 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6253 (match_operand:MVE_2 2 "s_register_operand" "w")
6254 (match_operand:MVE_2 3 "s_register_operand" "w")
6255 (match_operand:HI 4 "vpr_register_operand" "Up")]
6256 VQDMLADHQ_M_S))
6257 ]
6258 "TARGET_HAVE_MVE"
6259 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6260 [(set_attr "type" "mve_move")
6261 (set_attr "length""8")])
6262
6263;;
6264;; [vqdmladhxq_m_s])
6265;;
6266(define_insn "mve_vqdmladhxq_m_s<mode>"
6267 [
6268 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6269 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6270 (match_operand:MVE_2 2 "s_register_operand" "w")
6271 (match_operand:MVE_2 3 "s_register_operand" "w")
6272 (match_operand:HI 4 "vpr_register_operand" "Up")]
6273 VQDMLADHXQ_M_S))
6274 ]
6275 "TARGET_HAVE_MVE"
6276 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6277 [(set_attr "type" "mve_move")
6278 (set_attr "length""8")])
6279
6280;;
6281;; [vqdmlsdhq_m_s])
6282;;
6283(define_insn "mve_vqdmlsdhq_m_s<mode>"
6284 [
6285 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6286 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6287 (match_operand:MVE_2 2 "s_register_operand" "w")
6288 (match_operand:MVE_2 3 "s_register_operand" "w")
6289 (match_operand:HI 4 "vpr_register_operand" "Up")]
6290 VQDMLSDHQ_M_S))
6291 ]
6292 "TARGET_HAVE_MVE"
6293 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6294 [(set_attr "type" "mve_move")
6295 (set_attr "length""8")])
6296
6297;;
6298;; [vqdmlsdhxq_m_s])
6299;;
6300(define_insn "mve_vqdmlsdhxq_m_s<mode>"
6301 [
6302 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6303 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6304 (match_operand:MVE_2 2 "s_register_operand" "w")
6305 (match_operand:MVE_2 3 "s_register_operand" "w")
6306 (match_operand:HI 4 "vpr_register_operand" "Up")]
6307 VQDMLSDHXQ_M_S))
6308 ]
6309 "TARGET_HAVE_MVE"
6310 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6311 [(set_attr "type" "mve_move")
6312 (set_attr "length""8")])
6313
6314;;
6315;; [vqdmulhq_m_n_s])
6316;;
6317(define_insn "mve_vqdmulhq_m_n_s<mode>"
6318 [
6319 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6320 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6321 (match_operand:MVE_2 2 "s_register_operand" "w")
6322 (match_operand:<V_elem> 3 "s_register_operand" "r")
6323 (match_operand:HI 4 "vpr_register_operand" "Up")]
6324 VQDMULHQ_M_N_S))
6325 ]
6326 "TARGET_HAVE_MVE"
6327 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6328 [(set_attr "type" "mve_move")
6329 (set_attr "length""8")])
6330
6331;;
6332;; [vqdmulhq_m_s])
6333;;
6334(define_insn "mve_vqdmulhq_m_s<mode>"
6335 [
6336 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6337 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6338 (match_operand:MVE_2 2 "s_register_operand" "w")
6339 (match_operand:MVE_2 3 "s_register_operand" "w")
6340 (match_operand:HI 4 "vpr_register_operand" "Up")]
6341 VQDMULHQ_M_S))
6342 ]
6343 "TARGET_HAVE_MVE"
6344 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6345 [(set_attr "type" "mve_move")
6346 (set_attr "length""8")])
6347
6348;;
6349;; [vqrdmladhq_m_s])
6350;;
6351(define_insn "mve_vqrdmladhq_m_s<mode>"
6352 [
6353 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6354 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6355 (match_operand:MVE_2 2 "s_register_operand" "w")
6356 (match_operand:MVE_2 3 "s_register_operand" "w")
6357 (match_operand:HI 4 "vpr_register_operand" "Up")]
6358 VQRDMLADHQ_M_S))
6359 ]
6360 "TARGET_HAVE_MVE"
6361 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6362 [(set_attr "type" "mve_move")
6363 (set_attr "length""8")])
6364
6365;;
6366;; [vqrdmladhxq_m_s])
6367;;
6368(define_insn "mve_vqrdmladhxq_m_s<mode>"
6369 [
6370 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6371 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6372 (match_operand:MVE_2 2 "s_register_operand" "w")
6373 (match_operand:MVE_2 3 "s_register_operand" "w")
6374 (match_operand:HI 4 "vpr_register_operand" "Up")]
6375 VQRDMLADHXQ_M_S))
6376 ]
6377 "TARGET_HAVE_MVE"
6378 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6379 [(set_attr "type" "mve_move")
6380 (set_attr "length""8")])
6381
6382;;
6383;; [vqrdmlsdhq_m_s])
6384;;
6385(define_insn "mve_vqrdmlsdhq_m_s<mode>"
6386 [
6387 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6388 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6389 (match_operand:MVE_2 2 "s_register_operand" "w")
6390 (match_operand:MVE_2 3 "s_register_operand" "w")
6391 (match_operand:HI 4 "vpr_register_operand" "Up")]
6392 VQRDMLSDHQ_M_S))
6393 ]
6394 "TARGET_HAVE_MVE"
6395 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6396 [(set_attr "type" "mve_move")
6397 (set_attr "length""8")])
6398
6399;;
6400;; [vqrdmlsdhxq_m_s])
6401;;
6402(define_insn "mve_vqrdmlsdhxq_m_s<mode>"
6403 [
6404 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6405 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6406 (match_operand:MVE_2 2 "s_register_operand" "w")
6407 (match_operand:MVE_2 3 "s_register_operand" "w")
6408 (match_operand:HI 4 "vpr_register_operand" "Up")]
6409 VQRDMLSDHXQ_M_S))
6410 ]
6411 "TARGET_HAVE_MVE"
6412 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6413 [(set_attr "type" "mve_move")
6414 (set_attr "length""8")])
6415
6416;;
6417;; [vqrdmulhq_m_n_s])
6418;;
6419(define_insn "mve_vqrdmulhq_m_n_s<mode>"
6420 [
6421 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6422 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6423 (match_operand:MVE_2 2 "s_register_operand" "w")
6424 (match_operand:<V_elem> 3 "s_register_operand" "r")
6425 (match_operand:HI 4 "vpr_register_operand" "Up")]
6426 VQRDMULHQ_M_N_S))
6427 ]
6428 "TARGET_HAVE_MVE"
6429 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6430 [(set_attr "type" "mve_move")
6431 (set_attr "length""8")])
6432
6433;;
6434;; [vqrdmulhq_m_s])
6435;;
6436(define_insn "mve_vqrdmulhq_m_s<mode>"
6437 [
6438 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6439 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6440 (match_operand:MVE_2 2 "s_register_operand" "w")
6441 (match_operand:MVE_2 3 "s_register_operand" "w")
6442 (match_operand:HI 4 "vpr_register_operand" "Up")]
6443 VQRDMULHQ_M_S))
6444 ]
6445 "TARGET_HAVE_MVE"
6446 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6447 [(set_attr "type" "mve_move")
6448 (set_attr "length""8")])
6449
f2170a37
SP
6450;;
6451;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
6452;;
6453(define_insn "mve_vmlaldavaq_p_<supf><mode>"
6454 [
6455 (set (match_operand:DI 0 "s_register_operand" "=r")
6456 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6457 (match_operand:MVE_5 2 "s_register_operand" "w")
6458 (match_operand:MVE_5 3 "s_register_operand" "w")
6459 (match_operand:HI 4 "vpr_register_operand" "Up")]
6460 VMLALDAVAQ_P))
6461 ]
6462 "TARGET_HAVE_MVE"
6463 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6464 [(set_attr "type" "mve_move")
6465 (set_attr "length""8")])
6466
6467;;
237f12da 6468;; [vmlaldavaxq_p_s])
f2170a37
SP
6469;;
6470(define_insn "mve_vmlaldavaxq_p_<supf><mode>"
6471 [
6472 (set (match_operand:DI 0 "s_register_operand" "=r")
6473 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6474 (match_operand:MVE_5 2 "s_register_operand" "w")
6475 (match_operand:MVE_5 3 "s_register_operand" "w")
6476 (match_operand:HI 4 "vpr_register_operand" "Up")]
6477 VMLALDAVAXQ_P))
6478 ]
6479 "TARGET_HAVE_MVE"
6480 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
6481 [(set_attr "type" "mve_move")
6482 (set_attr "length""8")])
6483
6484;;
6485;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
6486;;
6487(define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
6488 [
6489 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6490 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6491 (match_operand:MVE_5 2 "s_register_operand" "w")
6492 (match_operand:SI 3 "mve_imm_8" "Rb")
6493 (match_operand:HI 4 "vpr_register_operand" "Up")]
6494 VQRSHRNBQ_M_N))
6495 ]
6496 "TARGET_HAVE_MVE"
6497 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6498 [(set_attr "type" "mve_move")
6499 (set_attr "length""8")])
6500
6501;;
6502;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
6503;;
6504(define_insn "mve_vqrshrntq_m_n_<supf><mode>"
6505 [
6506 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6507 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6508 (match_operand:MVE_5 2 "s_register_operand" "w")
6509 (match_operand:SI 3 "mve_imm_8" "Rb")
6510 (match_operand:HI 4 "vpr_register_operand" "Up")]
6511 VQRSHRNTQ_M_N))
6512 ]
6513 "TARGET_HAVE_MVE"
6514 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6515 [(set_attr "type" "mve_move")
6516 (set_attr "length""8")])
6517
6518;;
6519;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
6520;;
6521(define_insn "mve_vqshrnbq_m_n_<supf><mode>"
6522 [
6523 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6524 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6525 (match_operand:MVE_5 2 "s_register_operand" "w")
d2ce75fe 6526 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
f2170a37
SP
6527 (match_operand:HI 4 "vpr_register_operand" "Up")]
6528 VQSHRNBQ_M_N))
6529 ]
d2ce75fe 6530 "TARGET_HAVE_MVE"
f2170a37
SP
6531 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6532 [(set_attr "type" "mve_move")
6533 (set_attr "length""8")])
6534
6535;;
6536;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
6537;;
6538(define_insn "mve_vqshrntq_m_n_<supf><mode>"
6539 [
6540 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6541 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6542 (match_operand:MVE_5 2 "s_register_operand" "w")
d2ce75fe 6543 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
f2170a37
SP
6544 (match_operand:HI 4 "vpr_register_operand" "Up")]
6545 VQSHRNTQ_M_N))
6546 ]
6547 "TARGET_HAVE_MVE"
6548 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6549 [(set_attr "type" "mve_move")
6550 (set_attr "length""8")])
6551
6552;;
6553;; [vrmlaldavhaq_p_s])
6554;;
6555(define_insn "mve_vrmlaldavhaq_p_sv4si"
6556 [
6557 (set (match_operand:DI 0 "s_register_operand" "=r")
6558 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6559 (match_operand:V4SI 2 "s_register_operand" "w")
6560 (match_operand:V4SI 3 "s_register_operand" "w")
6561 (match_operand:HI 4 "vpr_register_operand" "Up")]
6562 VRMLALDAVHAQ_P_S))
6563 ]
6564 "TARGET_HAVE_MVE"
6565 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
6566 [(set_attr "type" "mve_move")
6567 (set_attr "length""8")])
6568
6569;;
6570;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
6571;;
6572(define_insn "mve_vrshrnbq_m_n_<supf><mode>"
6573 [
6574 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6575 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6576 (match_operand:MVE_5 2 "s_register_operand" "w")
6577 (match_operand:SI 3 "mve_imm_8" "Rb")
6578 (match_operand:HI 4 "vpr_register_operand" "Up")]
6579 VRSHRNBQ_M_N))
6580 ]
6581 "TARGET_HAVE_MVE"
6582 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6583 [(set_attr "type" "mve_move")
6584 (set_attr "length""8")])
6585
6586;;
6587;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
6588;;
6589(define_insn "mve_vrshrntq_m_n_<supf><mode>"
6590 [
6591 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6592 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6593 (match_operand:MVE_5 2 "s_register_operand" "w")
6594 (match_operand:SI 3 "mve_imm_8" "Rb")
6595 (match_operand:HI 4 "vpr_register_operand" "Up")]
6596 VRSHRNTQ_M_N))
6597 ]
6598 "TARGET_HAVE_MVE"
6599 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6600 [(set_attr "type" "mve_move")
6601 (set_attr "length""8")])
6602
6603;;
6604;; [vshllbq_m_n_u, vshllbq_m_n_s])
6605;;
6606(define_insn "mve_vshllbq_m_n_<supf><mode>"
6607 [
6608 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6609 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6610 (match_operand:MVE_3 2 "s_register_operand" "w")
6611 (match_operand:SI 3 "immediate_operand" "i")
6612 (match_operand:HI 4 "vpr_register_operand" "Up")]
6613 VSHLLBQ_M_N))
6614 ]
6615 "TARGET_HAVE_MVE"
6616 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6617 [(set_attr "type" "mve_move")
6618 (set_attr "length""8")])
6619
6620;;
6621;; [vshlltq_m_n_u, vshlltq_m_n_s])
6622;;
6623(define_insn "mve_vshlltq_m_n_<supf><mode>"
6624 [
6625 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6626 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6627 (match_operand:MVE_3 2 "s_register_operand" "w")
6628 (match_operand:SI 3 "immediate_operand" "i")
6629 (match_operand:HI 4 "vpr_register_operand" "Up")]
6630 VSHLLTQ_M_N))
6631 ]
6632 "TARGET_HAVE_MVE"
6633 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6634 [(set_attr "type" "mve_move")
6635 (set_attr "length""8")])
6636
6637;;
6638;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
6639;;
6640(define_insn "mve_vshrnbq_m_n_<supf><mode>"
6641 [
6642 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6643 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6644 (match_operand:MVE_5 2 "s_register_operand" "w")
6645 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6646 (match_operand:HI 4 "vpr_register_operand" "Up")]
6647 VSHRNBQ_M_N))
6648 ]
6649 "TARGET_HAVE_MVE"
6650 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
6651 [(set_attr "type" "mve_move")
6652 (set_attr "length""8")])
6653
6654;;
6655;; [vshrntq_m_n_s, vshrntq_m_n_u])
6656;;
6657(define_insn "mve_vshrntq_m_n_<supf><mode>"
6658 [
6659 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6660 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6661 (match_operand:MVE_5 2 "s_register_operand" "w")
6662 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
6663 (match_operand:HI 4 "vpr_register_operand" "Up")]
6664 VSHRNTQ_M_N))
6665 ]
6666 "TARGET_HAVE_MVE"
6667 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
6668 [(set_attr "type" "mve_move")
6669 (set_attr "length""8")])
6670
6671;;
6672;; [vmlsldavaq_p_s])
6673;;
6674(define_insn "mve_vmlsldavaq_p_s<mode>"
6675 [
6676 (set (match_operand:DI 0 "s_register_operand" "=r")
6677 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6678 (match_operand:MVE_5 2 "s_register_operand" "w")
6679 (match_operand:MVE_5 3 "s_register_operand" "w")
6680 (match_operand:HI 4 "vpr_register_operand" "Up")]
6681 VMLSLDAVAQ_P_S))
6682 ]
6683 "TARGET_HAVE_MVE"
6684 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6685 [(set_attr "type" "mve_move")
6686 (set_attr "length""8")])
6687
6688;;
6689;; [vmlsldavaxq_p_s])
6690;;
6691(define_insn "mve_vmlsldavaxq_p_s<mode>"
6692 [
6693 (set (match_operand:DI 0 "s_register_operand" "=r")
6694 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6695 (match_operand:MVE_5 2 "s_register_operand" "w")
6696 (match_operand:MVE_5 3 "s_register_operand" "w")
6697 (match_operand:HI 4 "vpr_register_operand" "Up")]
6698 VMLSLDAVAXQ_P_S))
6699 ]
6700 "TARGET_HAVE_MVE"
6701 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
6702 [(set_attr "type" "mve_move")
6703 (set_attr "length""8")])
6704
6705;;
6706;; [vmullbq_poly_m_p])
6707;;
6708(define_insn "mve_vmullbq_poly_m_p<mode>"
6709 [
6710 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6711 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6712 (match_operand:MVE_3 2 "s_register_operand" "w")
6713 (match_operand:MVE_3 3 "s_register_operand" "w")
6714 (match_operand:HI 4 "vpr_register_operand" "Up")]
6715 VMULLBQ_POLY_M_P))
6716 ]
6717 "TARGET_HAVE_MVE"
6718 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6719 [(set_attr "type" "mve_move")
6720 (set_attr "length""8")])
6721
6722;;
6723;; [vmulltq_poly_m_p])
6724;;
6725(define_insn "mve_vmulltq_poly_m_p<mode>"
6726 [
6727 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
6728 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6729 (match_operand:MVE_3 2 "s_register_operand" "w")
6730 (match_operand:MVE_3 3 "s_register_operand" "w")
6731 (match_operand:HI 4 "vpr_register_operand" "Up")]
6732 VMULLTQ_POLY_M_P))
6733 ]
6734 "TARGET_HAVE_MVE"
6735 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
6736 [(set_attr "type" "mve_move")
6737 (set_attr "length""8")])
6738
6739;;
6740;; [vqdmullbq_m_n_s])
6741;;
6742(define_insn "mve_vqdmullbq_m_n_s<mode>"
6743 [
6debbff6 6744 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
f2170a37
SP
6745 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6746 (match_operand:MVE_5 2 "s_register_operand" "w")
6747 (match_operand:<V_elem> 3 "s_register_operand" "r")
6748 (match_operand:HI 4 "vpr_register_operand" "Up")]
6749 VQDMULLBQ_M_N_S))
6750 ]
6751 "TARGET_HAVE_MVE"
6752 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6753 [(set_attr "type" "mve_move")
6754 (set_attr "length""8")])
6755
6756;;
6757;; [vqdmullbq_m_s])
6758;;
6759(define_insn "mve_vqdmullbq_m_s<mode>"
6760 [
6debbff6 6761 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
f2170a37
SP
6762 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6763 (match_operand:MVE_5 2 "s_register_operand" "w")
6764 (match_operand:MVE_5 3 "s_register_operand" "w")
6765 (match_operand:HI 4 "vpr_register_operand" "Up")]
6766 VQDMULLBQ_M_S))
6767 ]
6768 "TARGET_HAVE_MVE"
6769 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6770 [(set_attr "type" "mve_move")
6771 (set_attr "length""8")])
6772
6773;;
6774;; [vqdmulltq_m_n_s])
6775;;
6776(define_insn "mve_vqdmulltq_m_n_s<mode>"
6777 [
6debbff6 6778 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
f2170a37
SP
6779 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6780 (match_operand:MVE_5 2 "s_register_operand" "w")
6781 (match_operand:<V_elem> 3 "s_register_operand" "r")
6782 (match_operand:HI 4 "vpr_register_operand" "Up")]
6783 VQDMULLTQ_M_N_S))
6784 ]
6785 "TARGET_HAVE_MVE"
6786 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
6787 [(set_attr "type" "mve_move")
6788 (set_attr "length""8")])
6789
6790;;
6791;; [vqdmulltq_m_s])
6792;;
6793(define_insn "mve_vqdmulltq_m_s<mode>"
6794 [
6debbff6 6795 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
f2170a37
SP
6796 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6797 (match_operand:MVE_5 2 "s_register_operand" "w")
6798 (match_operand:MVE_5 3 "s_register_operand" "w")
6799 (match_operand:HI 4 "vpr_register_operand" "Up")]
6800 VQDMULLTQ_M_S))
6801 ]
6802 "TARGET_HAVE_MVE"
6803 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6804 [(set_attr "type" "mve_move")
6805 (set_attr "length""8")])
6806
6807;;
6808;; [vqrshrunbq_m_n_s])
6809;;
6810(define_insn "mve_vqrshrunbq_m_n_s<mode>"
6811 [
6812 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6813 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6814 (match_operand:MVE_5 2 "s_register_operand" "w")
6815 (match_operand:SI 3 "mve_imm_8" "Rb")
6816 (match_operand:HI 4 "vpr_register_operand" "Up")]
6817 VQRSHRUNBQ_M_N_S))
6818 ]
6819 "TARGET_HAVE_MVE"
6820 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6821 [(set_attr "type" "mve_move")
6822 (set_attr "length""8")])
6823
6824;;
6825;; [vqrshruntq_m_n_s])
6826;;
6827(define_insn "mve_vqrshruntq_m_n_s<mode>"
6828 [
6829 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6830 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6831 (match_operand:MVE_5 2 "s_register_operand" "w")
d2ce75fe 6832 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
f2170a37
SP
6833 (match_operand:HI 4 "vpr_register_operand" "Up")]
6834 VQRSHRUNTQ_M_N_S))
6835 ]
6836 "TARGET_HAVE_MVE"
6837 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6838 [(set_attr "type" "mve_move")
6839 (set_attr "length""8")])
6840
6841;;
6842;; [vqshrunbq_m_n_s])
6843;;
6844(define_insn "mve_vqshrunbq_m_n_s<mode>"
6845 [
6846 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6847 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6848 (match_operand:MVE_5 2 "s_register_operand" "w")
d2ce75fe 6849 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
f2170a37
SP
6850 (match_operand:HI 4 "vpr_register_operand" "Up")]
6851 VQSHRUNBQ_M_N_S))
6852 ]
6853 "TARGET_HAVE_MVE"
6854 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
6855 [(set_attr "type" "mve_move")
6856 (set_attr "length""8")])
6857
6858;;
6859;; [vqshruntq_m_n_s])
6860;;
6861(define_insn "mve_vqshruntq_m_n_s<mode>"
6862 [
6863 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
6864 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
6865 (match_operand:MVE_5 2 "s_register_operand" "w")
d2ce75fe 6866 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
f2170a37
SP
6867 (match_operand:HI 4 "vpr_register_operand" "Up")]
6868 VQSHRUNTQ_M_N_S))
6869 ]
6870 "TARGET_HAVE_MVE"
6871 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
6872 [(set_attr "type" "mve_move")
6873 (set_attr "length""8")])
6874
6875;;
6876;; [vrmlaldavhaq_p_u])
6877;;
6878(define_insn "mve_vrmlaldavhaq_p_uv4si"
6879 [
6880 (set (match_operand:DI 0 "s_register_operand" "=r")
6881 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6882 (match_operand:V4SI 2 "s_register_operand" "w")
6883 (match_operand:V4SI 3 "s_register_operand" "w")
6884 (match_operand:HI 4 "vpr_register_operand" "Up")]
6885 VRMLALDAVHAQ_P_U))
6886 ]
6887 "TARGET_HAVE_MVE"
6888 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
6889 [(set_attr "type" "mve_move")
6890 (set_attr "length""8")])
6891
6892;;
6893;; [vrmlaldavhaxq_p_s])
6894;;
6895(define_insn "mve_vrmlaldavhaxq_p_sv4si"
6896 [
6897 (set (match_operand:DI 0 "s_register_operand" "=r")
6898 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6899 (match_operand:V4SI 2 "s_register_operand" "w")
6900 (match_operand:V4SI 3 "s_register_operand" "w")
6901 (match_operand:HI 4 "vpr_register_operand" "Up")]
6902 VRMLALDAVHAXQ_P_S))
6903 ]
6904 "TARGET_HAVE_MVE"
6905 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6906 [(set_attr "type" "mve_move")
6907 (set_attr "length""8")])
6908
6909;;
6910;; [vrmlsldavhaq_p_s])
6911;;
6912(define_insn "mve_vrmlsldavhaq_p_sv4si"
6913 [
6914 (set (match_operand:DI 0 "s_register_operand" "=r")
6915 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6916 (match_operand:V4SI 2 "s_register_operand" "w")
6917 (match_operand:V4SI 3 "s_register_operand" "w")
6918 (match_operand:HI 4 "vpr_register_operand" "Up")]
6919 VRMLSLDAVHAQ_P_S))
6920 ]
6921 "TARGET_HAVE_MVE"
6922 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
6923 [(set_attr "type" "mve_move")
6924 (set_attr "length""8")])
6925
6926;;
6927;; [vrmlsldavhaxq_p_s])
6928;;
6929(define_insn "mve_vrmlsldavhaxq_p_sv4si"
6930 [
6931 (set (match_operand:DI 0 "s_register_operand" "=r")
6932 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
6933 (match_operand:V4SI 2 "s_register_operand" "w")
6934 (match_operand:V4SI 3 "s_register_operand" "w")
6935 (match_operand:HI 4 "vpr_register_operand" "Up")]
6936 VRMLSLDAVHAXQ_P_S))
6937 ]
6938 "TARGET_HAVE_MVE"
6939 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
6940 [(set_attr "type" "mve_move")
6941 (set_attr "length""8")])
532e9e24
SP
6942;;
6943;; [vabdq_m_f])
6944;;
6945(define_insn "mve_vabdq_m_f<mode>"
6946 [
6947 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6948 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6949 (match_operand:MVE_0 2 "s_register_operand" "w")
6950 (match_operand:MVE_0 3 "s_register_operand" "w")
6951 (match_operand:HI 4 "vpr_register_operand" "Up")]
6952 VABDQ_M_F))
6953 ]
6954 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6955 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3"
6956 [(set_attr "type" "mve_move")
6957 (set_attr "length""8")])
6958
6959;;
6960;; [vaddq_m_f])
6961;;
6962(define_insn "mve_vaddq_m_f<mode>"
6963 [
6964 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6965 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6966 (match_operand:MVE_0 2 "s_register_operand" "w")
6967 (match_operand:MVE_0 3 "s_register_operand" "w")
6968 (match_operand:HI 4 "vpr_register_operand" "Up")]
6969 VADDQ_M_F))
6970 ]
6971 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6972 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3"
6973 [(set_attr "type" "mve_move")
6974 (set_attr "length""8")])
6975
6976;;
6977;; [vaddq_m_n_f])
6978;;
6979(define_insn "mve_vaddq_m_n_f<mode>"
6980 [
6981 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6982 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6983 (match_operand:MVE_0 2 "s_register_operand" "w")
6984 (match_operand:<V_elem> 3 "s_register_operand" "r")
6985 (match_operand:HI 4 "vpr_register_operand" "Up")]
6986 VADDQ_M_N_F))
6987 ]
6988 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6989 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3"
6990 [(set_attr "type" "mve_move")
6991 (set_attr "length""8")])
6992
6993;;
6994;; [vandq_m_f])
6995;;
6996(define_insn "mve_vandq_m_f<mode>"
6997 [
6998 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6999 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7000 (match_operand:MVE_0 2 "s_register_operand" "w")
7001 (match_operand:MVE_0 3 "s_register_operand" "w")
7002 (match_operand:HI 4 "vpr_register_operand" "Up")]
7003 VANDQ_M_F))
7004 ]
7005 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7006 "vpst\;vandt %q0, %q2, %q3"
7007 [(set_attr "type" "mve_move")
7008 (set_attr "length""8")])
7009
7010;;
7011;; [vbicq_m_f])
7012;;
7013(define_insn "mve_vbicq_m_f<mode>"
7014 [
7015 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7016 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7017 (match_operand:MVE_0 2 "s_register_operand" "w")
7018 (match_operand:MVE_0 3 "s_register_operand" "w")
7019 (match_operand:HI 4 "vpr_register_operand" "Up")]
7020 VBICQ_M_F))
7021 ]
7022 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7023 "vpst\;vbict %q0, %q2, %q3"
7024 [(set_attr "type" "mve_move")
7025 (set_attr "length""8")])
7026
7027;;
7028;; [vbrsrq_m_n_f])
7029;;
7030(define_insn "mve_vbrsrq_m_n_f<mode>"
7031 [
7032 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7033 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7034 (match_operand:MVE_0 2 "s_register_operand" "w")
7035 (match_operand:SI 3 "s_register_operand" "r")
7036 (match_operand:HI 4 "vpr_register_operand" "Up")]
7037 VBRSRQ_M_N_F))
7038 ]
7039 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7040 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
7041 [(set_attr "type" "mve_move")
7042 (set_attr "length""8")])
7043
7044;;
7045;; [vcaddq_rot270_m_f])
7046;;
7047(define_insn "mve_vcaddq_rot270_m_f<mode>"
7048 [
6debbff6 7049 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
532e9e24
SP
7050 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7051 (match_operand:MVE_0 2 "s_register_operand" "w")
7052 (match_operand:MVE_0 3 "s_register_operand" "w")
7053 (match_operand:HI 4 "vpr_register_operand" "Up")]
7054 VCADDQ_ROT270_M_F))
7055 ]
7056 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7057 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7058 [(set_attr "type" "mve_move")
7059 (set_attr "length""8")])
7060
7061;;
7062;; [vcaddq_rot90_m_f])
7063;;
7064(define_insn "mve_vcaddq_rot90_m_f<mode>"
7065 [
6debbff6 7066 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
532e9e24
SP
7067 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7068 (match_operand:MVE_0 2 "s_register_operand" "w")
7069 (match_operand:MVE_0 3 "s_register_operand" "w")
7070 (match_operand:HI 4 "vpr_register_operand" "Up")]
7071 VCADDQ_ROT90_M_F))
7072 ]
7073 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7074 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7075 [(set_attr "type" "mve_move")
7076 (set_attr "length""8")])
7077
7078;;
7079;; [vcmlaq_m_f])
7080;;
7081(define_insn "mve_vcmlaq_m_f<mode>"
7082 [
7083 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7084 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7085 (match_operand:MVE_0 2 "s_register_operand" "w")
7086 (match_operand:MVE_0 3 "s_register_operand" "w")
7087 (match_operand:HI 4 "vpr_register_operand" "Up")]
7088 VCMLAQ_M_F))
7089 ]
7090 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7091 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7092 [(set_attr "type" "mve_move")
7093 (set_attr "length""8")])
7094
7095;;
7096;; [vcmlaq_rot180_m_f])
7097;;
7098(define_insn "mve_vcmlaq_rot180_m_f<mode>"
7099 [
7100 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7101 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7102 (match_operand:MVE_0 2 "s_register_operand" "w")
7103 (match_operand:MVE_0 3 "s_register_operand" "w")
7104 (match_operand:HI 4 "vpr_register_operand" "Up")]
7105 VCMLAQ_ROT180_M_F))
7106 ]
7107 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7108 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7109 [(set_attr "type" "mve_move")
7110 (set_attr "length""8")])
7111
7112;;
7113;; [vcmlaq_rot270_m_f])
7114;;
7115(define_insn "mve_vcmlaq_rot270_m_f<mode>"
7116 [
7117 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7118 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7119 (match_operand:MVE_0 2 "s_register_operand" "w")
7120 (match_operand:MVE_0 3 "s_register_operand" "w")
7121 (match_operand:HI 4 "vpr_register_operand" "Up")]
7122 VCMLAQ_ROT270_M_F))
7123 ]
7124 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7125 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7126 [(set_attr "type" "mve_move")
7127 (set_attr "length""8")])
7128
7129;;
7130;; [vcmlaq_rot90_m_f])
7131;;
7132(define_insn "mve_vcmlaq_rot90_m_f<mode>"
7133 [
7134 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7135 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7136 (match_operand:MVE_0 2 "s_register_operand" "w")
7137 (match_operand:MVE_0 3 "s_register_operand" "w")
7138 (match_operand:HI 4 "vpr_register_operand" "Up")]
7139 VCMLAQ_ROT90_M_F))
7140 ]
7141 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7142 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7143 [(set_attr "type" "mve_move")
7144 (set_attr "length""8")])
7145
7146;;
7147;; [vcmulq_m_f])
7148;;
7149(define_insn "mve_vcmulq_m_f<mode>"
7150 [
6debbff6 7151 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
532e9e24
SP
7152 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7153 (match_operand:MVE_0 2 "s_register_operand" "w")
7154 (match_operand:MVE_0 3 "s_register_operand" "w")
7155 (match_operand:HI 4 "vpr_register_operand" "Up")]
7156 VCMULQ_M_F))
7157 ]
7158 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7159 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7160 [(set_attr "type" "mve_move")
7161 (set_attr "length""8")])
7162
7163;;
7164;; [vcmulq_rot180_m_f])
7165;;
7166(define_insn "mve_vcmulq_rot180_m_f<mode>"
7167 [
6debbff6 7168 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
532e9e24
SP
7169 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7170 (match_operand:MVE_0 2 "s_register_operand" "w")
7171 (match_operand:MVE_0 3 "s_register_operand" "w")
7172 (match_operand:HI 4 "vpr_register_operand" "Up")]
7173 VCMULQ_ROT180_M_F))
7174 ]
7175 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7176 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7177 [(set_attr "type" "mve_move")
7178 (set_attr "length""8")])
7179
7180;;
7181;; [vcmulq_rot270_m_f])
7182;;
7183(define_insn "mve_vcmulq_rot270_m_f<mode>"
7184 [
6debbff6 7185 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
532e9e24
SP
7186 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7187 (match_operand:MVE_0 2 "s_register_operand" "w")
7188 (match_operand:MVE_0 3 "s_register_operand" "w")
7189 (match_operand:HI 4 "vpr_register_operand" "Up")]
7190 VCMULQ_ROT270_M_F))
7191 ]
7192 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7193 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7194 [(set_attr "type" "mve_move")
7195 (set_attr "length""8")])
7196
7197;;
7198;; [vcmulq_rot90_m_f])
7199;;
7200(define_insn "mve_vcmulq_rot90_m_f<mode>"
7201 [
6debbff6 7202 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
532e9e24
SP
7203 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7204 (match_operand:MVE_0 2 "s_register_operand" "w")
7205 (match_operand:MVE_0 3 "s_register_operand" "w")
7206 (match_operand:HI 4 "vpr_register_operand" "Up")]
7207 VCMULQ_ROT90_M_F))
7208 ]
7209 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7210 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7211 [(set_attr "type" "mve_move")
7212 (set_attr "length""8")])
7213
7214;;
7215;; [veorq_m_f])
7216;;
7217(define_insn "mve_veorq_m_f<mode>"
7218 [
7219 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7220 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7221 (match_operand:MVE_0 2 "s_register_operand" "w")
7222 (match_operand:MVE_0 3 "s_register_operand" "w")
7223 (match_operand:HI 4 "vpr_register_operand" "Up")]
7224 VEORQ_M_F))
7225 ]
7226 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7227 "vpst\;veort %q0, %q2, %q3"
7228 [(set_attr "type" "mve_move")
7229 (set_attr "length""8")])
7230
7231;;
7232;; [vfmaq_m_f])
7233;;
7234(define_insn "mve_vfmaq_m_f<mode>"
7235 [
7236 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7237 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7238 (match_operand:MVE_0 2 "s_register_operand" "w")
7239 (match_operand:MVE_0 3 "s_register_operand" "w")
7240 (match_operand:HI 4 "vpr_register_operand" "Up")]
7241 VFMAQ_M_F))
7242 ]
7243 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7244 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3"
7245 [(set_attr "type" "mve_move")
7246 (set_attr "length""8")])
7247
7248;;
7249;; [vfmaq_m_n_f])
7250;;
7251(define_insn "mve_vfmaq_m_n_f<mode>"
7252 [
7253 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7254 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7255 (match_operand:MVE_0 2 "s_register_operand" "w")
7256 (match_operand:<V_elem> 3 "s_register_operand" "r")
7257 (match_operand:HI 4 "vpr_register_operand" "Up")]
7258 VFMAQ_M_N_F))
7259 ]
7260 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7261 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3"
7262 [(set_attr "type" "mve_move")
7263 (set_attr "length""8")])
7264
7265;;
7266;; [vfmasq_m_n_f])
7267;;
7268(define_insn "mve_vfmasq_m_n_f<mode>"
7269 [
7270 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7271 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7272 (match_operand:MVE_0 2 "s_register_operand" "w")
7273 (match_operand:<V_elem> 3 "s_register_operand" "r")
7274 (match_operand:HI 4 "vpr_register_operand" "Up")]
7275 VFMASQ_M_N_F))
7276 ]
7277 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7278 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3"
7279 [(set_attr "type" "mve_move")
7280 (set_attr "length""8")])
7281
7282;;
7283;; [vfmsq_m_f])
7284;;
7285(define_insn "mve_vfmsq_m_f<mode>"
7286 [
7287 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7288 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7289 (match_operand:MVE_0 2 "s_register_operand" "w")
7290 (match_operand:MVE_0 3 "s_register_operand" "w")
7291 (match_operand:HI 4 "vpr_register_operand" "Up")]
7292 VFMSQ_M_F))
7293 ]
7294 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7295 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3"
7296 [(set_attr "type" "mve_move")
7297 (set_attr "length""8")])
7298
7299;;
7300;; [vmaxnmq_m_f])
7301;;
7302(define_insn "mve_vmaxnmq_m_f<mode>"
7303 [
7304 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7305 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7306 (match_operand:MVE_0 2 "s_register_operand" "w")
7307 (match_operand:MVE_0 3 "s_register_operand" "w")
7308 (match_operand:HI 4 "vpr_register_operand" "Up")]
7309 VMAXNMQ_M_F))
7310 ]
7311 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7312 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7313 [(set_attr "type" "mve_move")
7314 (set_attr "length""8")])
7315
7316;;
7317;; [vminnmq_m_f])
7318;;
7319(define_insn "mve_vminnmq_m_f<mode>"
7320 [
7321 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7322 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7323 (match_operand:MVE_0 2 "s_register_operand" "w")
7324 (match_operand:MVE_0 3 "s_register_operand" "w")
7325 (match_operand:HI 4 "vpr_register_operand" "Up")]
7326 VMINNMQ_M_F))
7327 ]
7328 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7329 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7330 [(set_attr "type" "mve_move")
7331 (set_attr "length""8")])
7332
7333;;
7334;; [vmulq_m_f])
7335;;
7336(define_insn "mve_vmulq_m_f<mode>"
7337 [
7338 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7339 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7340 (match_operand:MVE_0 2 "s_register_operand" "w")
7341 (match_operand:MVE_0 3 "s_register_operand" "w")
7342 (match_operand:HI 4 "vpr_register_operand" "Up")]
7343 VMULQ_M_F))
7344 ]
7345 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7346 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3"
7347 [(set_attr "type" "mve_move")
7348 (set_attr "length""8")])
7349
7350;;
7351;; [vmulq_m_n_f])
7352;;
7353(define_insn "mve_vmulq_m_n_f<mode>"
7354 [
7355 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7356 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7357 (match_operand:MVE_0 2 "s_register_operand" "w")
7358 (match_operand:<V_elem> 3 "s_register_operand" "r")
7359 (match_operand:HI 4 "vpr_register_operand" "Up")]
7360 VMULQ_M_N_F))
7361 ]
7362 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7363 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3"
7364 [(set_attr "type" "mve_move")
7365 (set_attr "length""8")])
7366
7367;;
7368;; [vornq_m_f])
7369;;
7370(define_insn "mve_vornq_m_f<mode>"
7371 [
7372 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7373 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7374 (match_operand:MVE_0 2 "s_register_operand" "w")
7375 (match_operand:MVE_0 3 "s_register_operand" "w")
7376 (match_operand:HI 4 "vpr_register_operand" "Up")]
7377 VORNQ_M_F))
7378 ]
7379 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7380 "vpst\;vornt %q0, %q2, %q3"
7381 [(set_attr "type" "mve_move")
7382 (set_attr "length""8")])
7383
7384;;
7385;; [vorrq_m_f])
7386;;
7387(define_insn "mve_vorrq_m_f<mode>"
7388 [
7389 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7390 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7391 (match_operand:MVE_0 2 "s_register_operand" "w")
7392 (match_operand:MVE_0 3 "s_register_operand" "w")
7393 (match_operand:HI 4 "vpr_register_operand" "Up")]
7394 VORRQ_M_F))
7395 ]
7396 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7397 "vpst\;vorrt %q0, %q2, %q3"
7398 [(set_attr "type" "mve_move")
7399 (set_attr "length""8")])
7400
7401;;
7402;; [vsubq_m_f])
7403;;
7404(define_insn "mve_vsubq_m_f<mode>"
7405 [
7406 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7407 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7408 (match_operand:MVE_0 2 "s_register_operand" "w")
7409 (match_operand:MVE_0 3 "s_register_operand" "w")
7410 (match_operand:HI 4 "vpr_register_operand" "Up")]
7411 VSUBQ_M_F))
7412 ]
7413 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7414 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
7415 [(set_attr "type" "mve_move")
7416 (set_attr "length""8")])
7417
7418;;
7419;; [vsubq_m_n_f])
7420;;
7421(define_insn "mve_vsubq_m_n_f<mode>"
7422 [
7423 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7424 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7425 (match_operand:MVE_0 2 "s_register_operand" "w")
7426 (match_operand:<V_elem> 3 "s_register_operand" "r")
7427 (match_operand:HI 4 "vpr_register_operand" "Up")]
7428 VSUBQ_M_N_F))
7429 ]
7430 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7431 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
7432 [(set_attr "type" "mve_move")
7433 (set_attr "length""8")])
4ff68575
SP
7434
7435;;
7436;; [vstrbq_s vstrbq_u]
7437;;
7438(define_insn "mve_vstrbq_<supf><mode>"
d91524d5 7439 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
4ff68575
SP
7440 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
7441 VSTRBQ))
7442 ]
7443 "TARGET_HAVE_MVE"
7444{
7445 rtx ops[2];
7446 int regno = REGNO (operands[1]);
7447 ops[1] = gen_rtx_REG (TImode, regno);
7448 ops[0] = operands[0];
7449 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
7450 return "";
7451}
7452 [(set_attr "length" "4")])
7453
7454;;
7455;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
7456;;
9a810e57
SP
7457(define_expand "mve_vstrbq_scatter_offset_<supf><mode>"
7458 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7459 (match_operand:MVE_2 1 "s_register_operand")
7460 (match_operand:MVE_2 2 "s_register_operand")
7461 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
4ff68575
SP
7462 "TARGET_HAVE_MVE"
7463{
9a810e57
SP
7464 rtx ind = XEXP (operands[0], 0);
7465 gcc_assert (REG_P (ind));
7466 emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1],
7467 operands[2]));
7468 DONE;
7469})
7470
7471(define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn"
7472 [(set (mem:BLK (scratch))
7473 (unspec:BLK
7474 [(match_operand:SI 0 "register_operand" "r")
7475 (match_operand:MVE_2 1 "s_register_operand" "w")
7476 (match_operand:MVE_2 2 "s_register_operand" "w")]
7477 VSTRBSOQ))]
7478 "TARGET_HAVE_MVE"
7479 "vstrb.<V_sz_elem>\t%q2, [%0, %q1]"
4ff68575
SP
7480 [(set_attr "length" "4")])
7481
7482;;
7483;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
7484;;
7485(define_insn "mve_vstrwq_scatter_base_<supf>v4si"
7486 [(set (mem:BLK (scratch))
7487 (unspec:BLK
7488 [(match_operand:V4SI 0 "s_register_operand" "w")
7489 (match_operand:SI 1 "immediate_operand" "i")
7490 (match_operand:V4SI 2 "s_register_operand" "w")]
7491 VSTRWSBQ))
7492 ]
7493 "TARGET_HAVE_MVE"
7494{
7495 rtx ops[3];
7496 ops[0] = operands[0];
7497 ops[1] = operands[1];
7498 ops[2] = operands[2];
7499 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
7500 return "";
7501}
7502 [(set_attr "length" "4")])
535a8645
SP
7503
7504;;
7505;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
7506;;
7507(define_insn "mve_vldrbq_gather_offset_<supf><mode>"
7508 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7509 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7510 (match_operand:MVE_2 2 "s_register_operand" "w")]
7511 VLDRBGOQ))
7512 ]
7513 "TARGET_HAVE_MVE"
7514{
7515 rtx ops[3];
7516 ops[0] = operands[0];
7517 ops[1] = operands[1];
7518 ops[2] = operands[2];
7519 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7520 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
7521 else
7522 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7523 return "";
7524}
7525 [(set_attr "length" "4")])
7526
7527;;
7528;; [vldrbq_s vldrbq_u]
7529;;
7530(define_insn "mve_vldrbq_<supf><mode>"
7531 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
d91524d5 7532 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")]
535a8645
SP
7533 VLDRBQ))
7534 ]
7535 "TARGET_HAVE_MVE"
7536{
7537 rtx ops[2];
7538 int regno = REGNO (operands[0]);
7539 ops[0] = gen_rtx_REG (TImode, regno);
7540 ops[1] = operands[1];
d91524d5
SP
7541 if (<V_sz_elem> == 8)
7542 output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops);
7543 else
7544 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
535a8645
SP
7545 return "";
7546}
7547 [(set_attr "length" "4")])
7548
7549;;
7550;; [vldrwq_gather_base_s vldrwq_gather_base_u]
7551;;
7552(define_insn "mve_vldrwq_gather_base_<supf>v4si"
7553 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7554 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7555 (match_operand:SI 2 "immediate_operand" "i")]
7556 VLDRWGBQ))
7557 ]
7558 "TARGET_HAVE_MVE"
7559{
7560 rtx ops[3];
7561 ops[0] = operands[0];
7562 ops[1] = operands[1];
7563 ops[2] = operands[2];
7564 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
7565 return "";
7566}
7567 [(set_attr "length" "4")])
405e918c
SP
7568
7569;;
7570;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
7571;;
9a810e57
SP
7572(define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>"
7573 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
7574 (match_operand:MVE_2 1 "s_register_operand")
7575 (match_operand:MVE_2 2 "s_register_operand")
7576 (match_operand:HI 3 "vpr_register_operand" "Up")
7577 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
405e918c
SP
7578 "TARGET_HAVE_MVE"
7579{
9a810e57
SP
7580 rtx ind = XEXP (operands[0], 0);
7581 gcc_assert (REG_P (ind));
7582 emit_insn (
7583 gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
7584 operands[2],
7585 operands[3]));
7586 DONE;
7587})
7588
7589(define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn"
7590 [(set (mem:BLK (scratch))
7591 (unspec:BLK
7592 [(match_operand:SI 0 "register_operand" "r")
7593 (match_operand:MVE_2 1 "s_register_operand" "w")
7594 (match_operand:MVE_2 2 "s_register_operand" "w")
7595 (match_operand:HI 3 "vpr_register_operand" "Up")]
7596 VSTRBSOQ))]
7597 "TARGET_HAVE_MVE"
7598 "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]"
405e918c
SP
7599 [(set_attr "length" "8")])
7600
7601;;
7602;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
7603;;
7604(define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
7605 [(set (mem:BLK (scratch))
7606 (unspec:BLK
7607 [(match_operand:V4SI 0 "s_register_operand" "w")
7608 (match_operand:SI 1 "immediate_operand" "i")
7609 (match_operand:V4SI 2 "s_register_operand" "w")
7610 (match_operand:HI 3 "vpr_register_operand" "Up")]
7611 VSTRWSBQ))
7612 ]
7613 "TARGET_HAVE_MVE"
7614{
7615 rtx ops[3];
7616 ops[0] = operands[0];
7617 ops[1] = operands[1];
7618 ops[2] = operands[2];
7619 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
7620 return "";
7621}
7622 [(set_attr "length" "8")])
7623
7624;;
7625;; [vstrbq_p_s vstrbq_p_u]
7626;;
7627(define_insn "mve_vstrbq_p_<supf><mode>"
d91524d5 7628 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
405e918c
SP
7629 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
7630 (match_operand:HI 2 "vpr_register_operand" "Up")]
7631 VSTRBQ))
7632 ]
7633 "TARGET_HAVE_MVE"
7634{
7635 rtx ops[2];
7636 int regno = REGNO (operands[1]);
7637 ops[1] = gen_rtx_REG (TImode, regno);
7638 ops[0] = operands[0];
d91524d5 7639 output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops);
405e918c
SP
7640 return "";
7641}
7642 [(set_attr "length" "8")])
429d607b
SP
7643
7644;;
7645;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
7646;;
7647(define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
7648 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
7649 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
7650 (match_operand:MVE_2 2 "s_register_operand" "w")
7651 (match_operand:HI 3 "vpr_register_operand" "Up")]
7652 VLDRBGOQ))
7653 ]
7654 "TARGET_HAVE_MVE"
7655{
7656 rtx ops[4];
7657 ops[0] = operands[0];
7658 ops[1] = operands[1];
7659 ops[2] = operands[2];
7660 ops[3] = operands[3];
7661 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
7662 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
7663 else
7664 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7665 return "";
7666}
7667 [(set_attr "length" "8")])
7668
7669;;
7670;; [vldrbq_z_s vldrbq_z_u]
7671;;
7672(define_insn "mve_vldrbq_z_<supf><mode>"
7673 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
d91524d5 7674 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")
429d607b
SP
7675 (match_operand:HI 2 "vpr_register_operand" "Up")]
7676 VLDRBQ))
7677 ]
7678 "TARGET_HAVE_MVE"
7679{
7680 rtx ops[2];
7681 int regno = REGNO (operands[0]);
7682 ops[0] = gen_rtx_REG (TImode, regno);
7683 ops[1] = operands[1];
d91524d5
SP
7684 if (<V_sz_elem> == 8)
7685 output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops);
7686 else
7687 output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
429d607b
SP
7688 return "";
7689}
7690 [(set_attr "length" "8")])
7691
7692;;
7693;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
7694;;
7695(define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
7696 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
7697 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
7698 (match_operand:SI 2 "immediate_operand" "i")
7699 (match_operand:HI 3 "vpr_register_operand" "Up")]
7700 VLDRWGBQ))
7701 ]
7702 "TARGET_HAVE_MVE"
7703{
7704 rtx ops[3];
7705 ops[0] = operands[0];
7706 ops[1] = operands[1];
7707 ops[2] = operands[2];
7708 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
7709 return "";
7710}
7711 [(set_attr "length" "8")])
bf1e3d5a
SP
7712
7713;;
7714;; [vldrhq_f]
7715;;
7716(define_insn "mve_vldrhq_fv8hf"
7717 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
d91524d5 7718 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")]
bf1e3d5a
SP
7719 VLDRHQ_F))
7720 ]
7721 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7722{
7723 rtx ops[2];
7724 int regno = REGNO (operands[0]);
7725 ops[0] = gen_rtx_REG (TImode, regno);
7726 ops[1] = operands[1];
d91524d5 7727 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
bf1e3d5a
SP
7728 return "";
7729}
7730 [(set_attr "length" "4")])
7731
7732;;
7733;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
7734;;
7735(define_insn "mve_vldrhq_gather_offset_<supf><mode>"
7736 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7737 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7738 (match_operand:MVE_6 2 "s_register_operand" "w")]
7739 VLDRHGOQ))
7740 ]
7741 "TARGET_HAVE_MVE"
7742{
7743 rtx ops[3];
7744 ops[0] = operands[0];
7745 ops[1] = operands[1];
7746 ops[2] = operands[2];
7747 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7748 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
7749 else
7750 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7751 return "";
7752}
7753 [(set_attr "length" "4")])
7754
7755;;
7756;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
7757;;
7758(define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
7759 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7760 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7761 (match_operand:MVE_6 2 "s_register_operand" "w")
7762 (match_operand:HI 3 "vpr_register_operand" "Up")
7763 ]VLDRHGOQ))
7764 ]
7765 "TARGET_HAVE_MVE"
7766{
7767 rtx ops[4];
7768 ops[0] = operands[0];
7769 ops[1] = operands[1];
7770 ops[2] = operands[2];
7771 ops[3] = operands[3];
7772 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7773 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
7774 else
7775 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
7776 return "";
7777}
7778 [(set_attr "length" "8")])
7779
7780;;
7781;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
7782;;
7783(define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
7784 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7785 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7786 (match_operand:MVE_6 2 "s_register_operand" "w")]
7787 VLDRHGSOQ))
7788 ]
7789 "TARGET_HAVE_MVE"
7790{
7791 rtx ops[3];
7792 ops[0] = operands[0];
7793 ops[1] = operands[1];
7794 ops[2] = operands[2];
7795 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7796 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7797 else
7798 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7799 return "";
7800}
7801 [(set_attr "length" "4")])
7802
7803;;
7804;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
7805;;
7806(define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
7807 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
7808 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
7809 (match_operand:MVE_6 2 "s_register_operand" "w")
7810 (match_operand:HI 3 "vpr_register_operand" "Up")
7811 ]VLDRHGSOQ))
7812 ]
7813 "TARGET_HAVE_MVE"
7814{
7815 rtx ops[4];
7816 ops[0] = operands[0];
7817 ops[1] = operands[1];
7818 ops[2] = operands[2];
7819 ops[3] = operands[3];
7820 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
7821 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
7822 else
7823 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
7824 return "";
7825}
7826 [(set_attr "length" "8")])
7827
bf1e3d5a
SP
7828;;
7829;; [vldrhq_s, vldrhq_u]
7830;;
7831(define_insn "mve_vldrhq_<supf><mode>"
7832 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
d91524d5 7833 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")]
bf1e3d5a
SP
7834 VLDRHQ))
7835 ]
7836 "TARGET_HAVE_MVE"
7837{
7838 rtx ops[2];
7839 int regno = REGNO (operands[0]);
7840 ops[0] = gen_rtx_REG (TImode, regno);
7841 ops[1] = operands[1];
d91524d5
SP
7842 if (<V_sz_elem> == 16)
7843 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
7844 else
7845 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
bf1e3d5a
SP
7846 return "";
7847}
7848 [(set_attr "length" "4")])
7849
7850;;
7851;; [vldrhq_z_f]
7852;;
7853(define_insn "mve_vldrhq_z_fv8hf"
7854 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
d91524d5 7855 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")
bf1e3d5a
SP
7856 (match_operand:HI 2 "vpr_register_operand" "Up")]
7857 VLDRHQ_F))
7858 ]
7859 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7860{
7861 rtx ops[2];
7862 int regno = REGNO (operands[0]);
7863 ops[0] = gen_rtx_REG (TImode, regno);
7864 ops[1] = operands[1];
d91524d5 7865 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
bf1e3d5a
SP
7866 return "";
7867}
7868 [(set_attr "length" "8")])
7869
7870;;
7871;; [vldrhq_z_s vldrhq_z_u]
7872;;
7873(define_insn "mve_vldrhq_z_<supf><mode>"
7874 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
d91524d5 7875 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")
bf1e3d5a
SP
7876 (match_operand:HI 2 "vpr_register_operand" "Up")]
7877 VLDRHQ))
7878 ]
7879 "TARGET_HAVE_MVE"
7880{
7881 rtx ops[2];
7882 int regno = REGNO (operands[0]);
7883 ops[0] = gen_rtx_REG (TImode, regno);
7884 ops[1] = operands[1];
d91524d5
SP
7885 if (<V_sz_elem> == 16)
7886 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
7887 else
7888 output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
bf1e3d5a
SP
7889 return "";
7890}
7891 [(set_attr "length" "8")])
7892
7893;;
7894;; [vldrwq_f]
7895;;
7896(define_insn "mve_vldrwq_fv4sf"
7897 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
d91524d5 7898 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")]
bf1e3d5a
SP
7899 VLDRWQ_F))
7900 ]
7901 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7902{
7903 rtx ops[2];
7904 int regno = REGNO (operands[0]);
7905 ops[0] = gen_rtx_REG (TImode, regno);
7906 ops[1] = operands[1];
d91524d5 7907 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
bf1e3d5a
SP
7908 return "";
7909}
7910 [(set_attr "length" "4")])
7911
7912;;
7913;; [vldrwq_s vldrwq_u]
7914;;
7915(define_insn "mve_vldrwq_<supf>v4si"
7916 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
d91524d5 7917 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")]
bf1e3d5a
SP
7918 VLDRWQ))
7919 ]
7920 "TARGET_HAVE_MVE"
7921{
7922 rtx ops[2];
7923 int regno = REGNO (operands[0]);
7924 ops[0] = gen_rtx_REG (TImode, regno);
7925 ops[1] = operands[1];
d91524d5 7926 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
bf1e3d5a
SP
7927 return "";
7928}
7929 [(set_attr "length" "4")])
7930
7931;;
7932;; [vldrwq_z_f]
7933;;
7934(define_insn "mve_vldrwq_z_fv4sf"
7935 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
d91524d5 7936 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")
bf1e3d5a
SP
7937 (match_operand:HI 2 "vpr_register_operand" "Up")]
7938 VLDRWQ_F))
7939 ]
7940 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7941{
7942 rtx ops[2];
7943 int regno = REGNO (operands[0]);
7944 ops[0] = gen_rtx_REG (TImode, regno);
7945 ops[1] = operands[1];
d91524d5 7946 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
bf1e3d5a
SP
7947 return "";
7948}
7949 [(set_attr "length" "8")])
7950
7951;;
7952;; [vldrwq_z_s vldrwq_z_u]
7953;;
7954(define_insn "mve_vldrwq_z_<supf>v4si"
7955 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
d91524d5 7956 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")
bf1e3d5a
SP
7957 (match_operand:HI 2 "vpr_register_operand" "Up")]
7958 VLDRWQ))
7959 ]
7960 "TARGET_HAVE_MVE"
7961{
7962 rtx ops[2];
7963 int regno = REGNO (operands[0]);
7964 ops[0] = gen_rtx_REG (TImode, regno);
7965 ops[1] = operands[1];
d91524d5 7966 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
bf1e3d5a
SP
7967 return "";
7968}
7969 [(set_attr "length" "8")])
7970
7971(define_expand "mve_vld1q_f<mode>"
7972 [(match_operand:MVE_0 0 "s_register_operand")
d91524d5 7973 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F)
bf1e3d5a
SP
7974 ]
7975 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
7976{
7977 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
7978 DONE;
7979})
7980
7981(define_expand "mve_vld1q_<supf><mode>"
7982 [(match_operand:MVE_2 0 "s_register_operand")
d91524d5 7983 (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q)
bf1e3d5a
SP
7984 ]
7985 "TARGET_HAVE_MVE"
7986{
7987 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
7988 DONE;
7989})
4cc23303
SP
7990
7991;;
7992;; [vldrdq_gather_base_s vldrdq_gather_base_u]
7993;;
7994(define_insn "mve_vldrdq_gather_base_<supf>v2di"
7995 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
7996 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
7997 (match_operand:SI 2 "immediate_operand" "i")]
7998 VLDRDGBQ))
7999 ]
8000 "TARGET_HAVE_MVE"
8001{
8002 rtx ops[3];
8003 ops[0] = operands[0];
8004 ops[1] = operands[1];
8005 ops[2] = operands[2];
8006 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
8007 return "";
8008}
8009 [(set_attr "length" "4")])
8010
8011;;
8012;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
8013;;
8014(define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
8015 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8016 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8017 (match_operand:SI 2 "immediate_operand" "i")
8018 (match_operand:HI 3 "vpr_register_operand" "Up")]
8019 VLDRDGBQ))
8020 ]
8021 "TARGET_HAVE_MVE"
8022{
8023 rtx ops[3];
8024 ops[0] = operands[0];
8025 ops[1] = operands[1];
8026 ops[2] = operands[2];
8027 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
8028 return "";
8029}
8030 [(set_attr "length" "8")])
8031
8032;;
8033;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
8034;;
8035(define_insn "mve_vldrdq_gather_offset_<supf>v2di"
8036 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8037 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8038 (match_operand:V2DI 2 "s_register_operand" "w")]
8039 VLDRDGOQ))
8040 ]
8041 "TARGET_HAVE_MVE"
8042{
8043 rtx ops[3];
8044 ops[0] = operands[0];
8045 ops[1] = operands[1];
8046 ops[2] = operands[2];
8047 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
8048 return "";
8049}
8050 [(set_attr "length" "4")])
8051
8052;;
8053;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
8054;;
8055(define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
8056 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8057 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8058 (match_operand:V2DI 2 "s_register_operand" "w")
8059 (match_operand:HI 3 "vpr_register_operand" "Up")]
8060 VLDRDGOQ))
8061 ]
8062 "TARGET_HAVE_MVE"
8063{
8064 rtx ops[3];
8065 ops[0] = operands[0];
8066 ops[1] = operands[1];
8067 ops[2] = operands[2];
8068 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
8069 return "";
8070}
8071 [(set_attr "length" "8")])
8072
8073;;
8074;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
8075;;
8076(define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
8077 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8078 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8079 (match_operand:V2DI 2 "s_register_operand" "w")]
8080 VLDRDGSOQ))
8081 ]
8082 "TARGET_HAVE_MVE"
8083{
8084 rtx ops[3];
8085 ops[0] = operands[0];
8086 ops[1] = operands[1];
8087 ops[2] = operands[2];
8088 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8089 return "";
8090}
8091 [(set_attr "length" "4")])
8092
8093;;
8094;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
8095;;
8096(define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
8097 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8098 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8099 (match_operand:V2DI 2 "s_register_operand" "w")
8100 (match_operand:HI 3 "vpr_register_operand" "Up")]
8101 VLDRDGSOQ))
8102 ]
8103 "TARGET_HAVE_MVE"
8104{
8105 rtx ops[3];
8106 ops[0] = operands[0];
8107 ops[1] = operands[1];
8108 ops[2] = operands[2];
8109 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8110 return "";
8111}
8112 [(set_attr "length" "8")])
8113
8114;;
8115;; [vldrhq_gather_offset_f]
8116;;
8117(define_insn "mve_vldrhq_gather_offset_fv8hf"
8118 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8119 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8120 (match_operand:V8HI 2 "s_register_operand" "w")]
8121 VLDRHQGO_F))
8122 ]
8123 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8124{
8125 rtx ops[3];
8126 ops[0] = operands[0];
8127 ops[1] = operands[1];
8128 ops[2] = operands[2];
8129 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
8130 return "";
8131}
8132 [(set_attr "length" "4")])
8133
8134;;
8135;; [vldrhq_gather_offset_z_f]
8136;;
8137(define_insn "mve_vldrhq_gather_offset_z_fv8hf"
8138 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8139 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8140 (match_operand:V8HI 2 "s_register_operand" "w")
8141 (match_operand:HI 3 "vpr_register_operand" "Up")]
8142 VLDRHQGO_F))
8143 ]
8144 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8145{
8146 rtx ops[4];
8147 ops[0] = operands[0];
8148 ops[1] = operands[1];
8149 ops[2] = operands[2];
8150 ops[3] = operands[3];
8151 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
8152 return "";
8153}
8154 [(set_attr "length" "8")])
8155
8156;;
8157;; [vldrhq_gather_shifted_offset_f]
8158;;
8159(define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
8160 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8161 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8162 (match_operand:V8HI 2 "s_register_operand" "w")]
8163 VLDRHQGSO_F))
8164 ]
8165 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8166{
8167 rtx ops[3];
8168 ops[0] = operands[0];
8169 ops[1] = operands[1];
8170 ops[2] = operands[2];
8171 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8172 return "";
8173}
8174 [(set_attr "length" "4")])
8175
8176;;
8177;; [vldrhq_gather_shifted_offset_z_f]
8178;;
8179(define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
8180 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8181 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8182 (match_operand:V8HI 2 "s_register_operand" "w")
8183 (match_operand:HI 3 "vpr_register_operand" "Up")]
8184 VLDRHQGSO_F))
8185 ]
8186 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8187{
8188 rtx ops[4];
8189 ops[0] = operands[0];
8190 ops[1] = operands[1];
8191 ops[2] = operands[2];
8192 ops[3] = operands[3];
8193 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8194 return "";
8195}
8196 [(set_attr "length" "8")])
8197
8198;;
8199;; [vldrwq_gather_base_f]
8200;;
8201(define_insn "mve_vldrwq_gather_base_fv4sf"
8202 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8203 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8204 (match_operand:SI 2 "immediate_operand" "i")]
8205 VLDRWQGB_F))
8206 ]
8207 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8208{
8209 rtx ops[3];
8210 ops[0] = operands[0];
8211 ops[1] = operands[1];
8212 ops[2] = operands[2];
8213 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
8214 return "";
8215}
8216 [(set_attr "length" "4")])
8217
8218;;
8219;; [vldrwq_gather_base_z_f]
8220;;
8221(define_insn "mve_vldrwq_gather_base_z_fv4sf"
8222 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8223 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8224 (match_operand:SI 2 "immediate_operand" "i")
8225 (match_operand:HI 3 "vpr_register_operand" "Up")]
8226 VLDRWQGB_F))
8227 ]
8228 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8229{
8230 rtx ops[3];
8231 ops[0] = operands[0];
8232 ops[1] = operands[1];
8233 ops[2] = operands[2];
8234 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
8235 return "";
8236}
8237 [(set_attr "length" "8")])
8238
8239;;
8240;; [vldrwq_gather_offset_f]
8241;;
8242(define_insn "mve_vldrwq_gather_offset_fv4sf"
8243 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8244 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8245 (match_operand:V4SI 2 "s_register_operand" "w")]
8246 VLDRWQGO_F))
8247 ]
8248 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8249{
8250 rtx ops[3];
8251 ops[0] = operands[0];
8252 ops[1] = operands[1];
8253 ops[2] = operands[2];
8254 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8255 return "";
8256}
8257 [(set_attr "length" "4")])
8258
8259;;
8260;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
8261;;
8262(define_insn "mve_vldrwq_gather_offset_<supf>v4si"
8263 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8264 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8265 (match_operand:V4SI 2 "s_register_operand" "w")]
8266 VLDRWGOQ))
8267 ]
8268 "TARGET_HAVE_MVE"
8269{
8270 rtx ops[3];
8271 ops[0] = operands[0];
8272 ops[1] = operands[1];
8273 ops[2] = operands[2];
8274 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8275 return "";
8276}
8277 [(set_attr "length" "4")])
8278
8279;;
8280;; [vldrwq_gather_offset_z_f]
8281;;
8282(define_insn "mve_vldrwq_gather_offset_z_fv4sf"
8283 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8284 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8285 (match_operand:V4SI 2 "s_register_operand" "w")
8286 (match_operand:HI 3 "vpr_register_operand" "Up")]
8287 VLDRWQGO_F))
8288 ]
8289 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8290{
8291 rtx ops[4];
8292 ops[0] = operands[0];
8293 ops[1] = operands[1];
8294 ops[2] = operands[2];
8295 ops[3] = operands[3];
8296 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8297 return "";
8298}
8299 [(set_attr "length" "8")])
8300
8301;;
8302;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
8303;;
8304(define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
8305 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8306 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8307 (match_operand:V4SI 2 "s_register_operand" "w")
8308 (match_operand:HI 3 "vpr_register_operand" "Up")]
8309 VLDRWGOQ))
8310 ]
8311 "TARGET_HAVE_MVE"
8312{
8313 rtx ops[4];
8314 ops[0] = operands[0];
8315 ops[1] = operands[1];
8316 ops[2] = operands[2];
8317 ops[3] = operands[3];
8318 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8319 return "";
8320}
8321 [(set_attr "length" "8")])
8322
8323;;
8324;; [vldrwq_gather_shifted_offset_f]
8325;;
8326(define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
8327 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8328 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8329 (match_operand:V4SI 2 "s_register_operand" "w")]
8330 VLDRWQGSO_F))
8331 ]
8332 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8333{
8334 rtx ops[3];
8335 ops[0] = operands[0];
8336 ops[1] = operands[1];
8337 ops[2] = operands[2];
8338 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8339 return "";
8340}
8341 [(set_attr "length" "4")])
8342
8343;;
8344;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
8345;;
8346(define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
8347 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8348 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8349 (match_operand:V4SI 2 "s_register_operand" "w")]
8350 VLDRWGSOQ))
8351 ]
8352 "TARGET_HAVE_MVE"
8353{
8354 rtx ops[3];
8355 ops[0] = operands[0];
8356 ops[1] = operands[1];
8357 ops[2] = operands[2];
8358 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8359 return "";
8360}
8361 [(set_attr "length" "4")])
8362
8363;;
8364;; [vldrwq_gather_shifted_offset_z_f]
8365;;
8366(define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
8367 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8368 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8369 (match_operand:V4SI 2 "s_register_operand" "w")
8370 (match_operand:HI 3 "vpr_register_operand" "Up")]
8371 VLDRWQGSO_F))
8372 ]
8373 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8374{
8375 rtx ops[4];
8376 ops[0] = operands[0];
8377 ops[1] = operands[1];
8378 ops[2] = operands[2];
8379 ops[3] = operands[3];
8380 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8381 return "";
8382}
8383 [(set_attr "length" "8")])
8384
8385;;
8386;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
8387;;
8388(define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
8389 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8390 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8391 (match_operand:V4SI 2 "s_register_operand" "w")
8392 (match_operand:HI 3 "vpr_register_operand" "Up")]
8393 VLDRWGSOQ))
8394 ]
8395 "TARGET_HAVE_MVE"
8396{
8397 rtx ops[4];
8398 ops[0] = operands[0];
8399 ops[1] = operands[1];
8400 ops[2] = operands[2];
8401 ops[3] = operands[3];
8402 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8403 return "";
8404}
8405 [(set_attr "length" "8")])
5cad47e0
SP
8406
8407;;
8408;; [vstrhq_f]
8409;;
8410(define_insn "mve_vstrhq_fv8hf"
d91524d5 8411 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
5cad47e0
SP
8412 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
8413 VSTRHQ_F))
8414 ]
8415 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8416{
8417 rtx ops[2];
8418 int regno = REGNO (operands[1]);
8419 ops[1] = gen_rtx_REG (TImode, regno);
8420 ops[0] = operands[0];
8421 output_asm_insn ("vstrh.16\t%q1, %E0",ops);
8422 return "";
8423}
8424 [(set_attr "length" "4")])
8425
8426;;
8427;; [vstrhq_p_f]
8428;;
8429(define_insn "mve_vstrhq_p_fv8hf"
d91524d5 8430 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
5cad47e0
SP
8431 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
8432 (match_operand:HI 2 "vpr_register_operand" "Up")]
8433 VSTRHQ_F))
8434 ]
8435 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8436{
8437 rtx ops[2];
8438 int regno = REGNO (operands[1]);
8439 ops[1] = gen_rtx_REG (TImode, regno);
8440 ops[0] = operands[0];
d91524d5 8441 output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops);
5cad47e0
SP
8442 return "";
8443}
8444 [(set_attr "length" "8")])
8445
8446;;
8447;; [vstrhq_p_s vstrhq_p_u]
8448;;
8449(define_insn "mve_vstrhq_p_<supf><mode>"
d91524d5 8450 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
5cad47e0
SP
8451 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
8452 (match_operand:HI 2 "vpr_register_operand" "Up")]
8453 VSTRHQ))
8454 ]
8455 "TARGET_HAVE_MVE"
8456{
8457 rtx ops[2];
8458 int regno = REGNO (operands[1]);
8459 ops[1] = gen_rtx_REG (TImode, regno);
8460 ops[0] = operands[0];
d91524d5 8461 output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops);
5cad47e0
SP
8462 return "";
8463}
8464 [(set_attr "length" "8")])
8465
8466;;
8467;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
8468;;
9a810e57
SP
8469(define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>"
8470 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8471 (match_operand:MVE_6 1 "s_register_operand")
8472 (match_operand:MVE_6 2 "s_register_operand")
8473 (match_operand:HI 3 "vpr_register_operand")
8474 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
5cad47e0
SP
8475 "TARGET_HAVE_MVE"
8476{
9a810e57
SP
8477 rtx ind = XEXP (operands[0], 0);
8478 gcc_assert (REG_P (ind));
8479 emit_insn (
8480 gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
8481 operands[2],
8482 operands[3]));
8483 DONE;
8484})
8485
8486(define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn"
8487 [(set (mem:BLK (scratch))
8488 (unspec:BLK
8489 [(match_operand:SI 0 "register_operand" "r")
8490 (match_operand:MVE_6 1 "s_register_operand" "w")
8491 (match_operand:MVE_6 2 "s_register_operand" "w")
8492 (match_operand:HI 3 "vpr_register_operand" "Up")]
8493 VSTRHSOQ))]
8494 "TARGET_HAVE_MVE"
8495 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]"
5cad47e0
SP
8496 [(set_attr "length" "8")])
8497
8498;;
8499;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
8500;;
9a810e57
SP
8501(define_expand "mve_vstrhq_scatter_offset_<supf><mode>"
8502 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8503 (match_operand:MVE_6 1 "s_register_operand")
8504 (match_operand:MVE_6 2 "s_register_operand")
8505 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
5cad47e0
SP
8506 "TARGET_HAVE_MVE"
8507{
9a810e57
SP
8508 rtx ind = XEXP (operands[0], 0);
8509 gcc_assert (REG_P (ind));
8510 emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1],
8511 operands[2]));
8512 DONE;
8513})
8514
8515(define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn"
8516 [(set (mem:BLK (scratch))
8517 (unspec:BLK
8518 [(match_operand:SI 0 "register_operand" "r")
8519 (match_operand:MVE_6 1 "s_register_operand" "w")
8520 (match_operand:MVE_6 2 "s_register_operand" "w")]
8521 VSTRHSOQ))]
8522 "TARGET_HAVE_MVE"
8523 "vstrh.<V_sz_elem>\t%q2, [%0, %q1]"
5cad47e0
SP
8524 [(set_attr "length" "4")])
8525
8526;;
8527;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
8528;;
9a810e57
SP
8529(define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
8530 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8531 (match_operand:MVE_6 1 "s_register_operand")
8532 (match_operand:MVE_6 2 "s_register_operand")
8533 (match_operand:HI 3 "vpr_register_operand")
8534 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
5cad47e0
SP
8535 "TARGET_HAVE_MVE"
8536{
9a810e57
SP
8537 rtx ind = XEXP (operands[0], 0);
8538 gcc_assert (REG_P (ind));
8539 emit_insn (
8540 gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1],
8541 operands[2],
8542 operands[3]));
8543 DONE;
8544})
8545
8546(define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn"
8547 [(set (mem:BLK (scratch))
8548 (unspec:BLK
8549 [(match_operand:SI 0 "register_operand" "r")
8550 (match_operand:MVE_6 1 "s_register_operand" "w")
8551 (match_operand:MVE_6 2 "s_register_operand" "w")
8552 (match_operand:HI 3 "vpr_register_operand" "Up")]
8553 VSTRHSSOQ))]
8554 "TARGET_HAVE_MVE"
8555 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
5cad47e0
SP
8556 [(set_attr "length" "8")])
8557
8558;;
8559;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
8560;;
9a810e57
SP
8561(define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
8562 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
8563 (match_operand:MVE_6 1 "s_register_operand")
8564 (match_operand:MVE_6 2 "s_register_operand")
8565 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
5cad47e0
SP
8566 "TARGET_HAVE_MVE"
8567{
9a810e57
SP
8568 rtx ind = XEXP (operands[0], 0);
8569 gcc_assert (REG_P (ind));
8570 emit_insn (
8571 gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1],
8572 operands[2]));
8573 DONE;
8574})
8575
8576(define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn"
8577 [(set (mem:BLK (scratch))
8578 (unspec:BLK
8579 [(match_operand:SI 0 "register_operand" "r")
8580 (match_operand:MVE_6 1 "s_register_operand" "w")
8581 (match_operand:MVE_6 2 "s_register_operand" "w")]
8582 VSTRHSSOQ))]
8583 "TARGET_HAVE_MVE"
8584 "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
5cad47e0
SP
8585 [(set_attr "length" "4")])
8586
8587;;
8588;; [vstrhq_s, vstrhq_u]
8589;;
8590(define_insn "mve_vstrhq_<supf><mode>"
d91524d5 8591 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
5cad47e0
SP
8592 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
8593 VSTRHQ))
8594 ]
8595 "TARGET_HAVE_MVE"
8596{
8597 rtx ops[2];
8598 int regno = REGNO (operands[1]);
8599 ops[1] = gen_rtx_REG (TImode, regno);
8600 ops[0] = operands[0];
8601 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
8602 return "";
8603}
8604 [(set_attr "length" "4")])
8605
8606;;
8607;; [vstrwq_f]
8608;;
8609(define_insn "mve_vstrwq_fv4sf"
d91524d5 8610 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
5cad47e0
SP
8611 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
8612 VSTRWQ_F))
8613 ]
8614 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8615{
8616 rtx ops[2];
8617 int regno = REGNO (operands[1]);
8618 ops[1] = gen_rtx_REG (TImode, regno);
8619 ops[0] = operands[0];
8620 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8621 return "";
8622}
8623 [(set_attr "length" "4")])
8624
8625;;
8626;; [vstrwq_p_f]
8627;;
8628(define_insn "mve_vstrwq_p_fv4sf"
d91524d5 8629 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
5cad47e0
SP
8630 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
8631 (match_operand:HI 2 "vpr_register_operand" "Up")]
8632 VSTRWQ_F))
8633 ]
8634 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8635{
8636 rtx ops[2];
8637 int regno = REGNO (operands[1]);
8638 ops[1] = gen_rtx_REG (TImode, regno);
8639 ops[0] = operands[0];
d91524d5 8640 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
5cad47e0
SP
8641 return "";
8642}
8643 [(set_attr "length" "8")])
8644
8645;;
8646;; [vstrwq_p_s vstrwq_p_u]
8647;;
8648(define_insn "mve_vstrwq_p_<supf>v4si"
d91524d5 8649 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
5cad47e0
SP
8650 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8651 (match_operand:HI 2 "vpr_register_operand" "Up")]
8652 VSTRWQ))
8653 ]
8654 "TARGET_HAVE_MVE"
8655{
8656 rtx ops[2];
8657 int regno = REGNO (operands[1]);
8658 ops[1] = gen_rtx_REG (TImode, regno);
8659 ops[0] = operands[0];
d91524d5 8660 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
5cad47e0
SP
8661 return "";
8662}
8663 [(set_attr "length" "8")])
8664
8665;;
8666;; [vstrwq_s vstrwq_u]
8667;;
8668(define_insn "mve_vstrwq_<supf>v4si"
d91524d5 8669 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
5cad47e0
SP
8670 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
8671 VSTRWQ))
8672 ]
8673 "TARGET_HAVE_MVE"
8674{
8675 rtx ops[2];
8676 int regno = REGNO (operands[1]);
8677 ops[1] = gen_rtx_REG (TImode, regno);
8678 ops[0] = operands[0];
8679 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
8680 return "";
8681}
8682 [(set_attr "length" "4")])
8683
8684(define_expand "mve_vst1q_f<mode>"
91d206ad 8685 [(match_operand:<MVE_CNVT> 0 "mve_memory_operand")
5cad47e0
SP
8686 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
8687 ]
8688 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8689{
8690 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8691 DONE;
8692})
8693
8694(define_expand "mve_vst1q_<supf><mode>"
91d206ad 8695 [(match_operand:MVE_2 0 "mve_memory_operand")
5cad47e0
SP
8696 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
8697 ]
8698 "TARGET_HAVE_MVE"
8699{
8700 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8701 DONE;
8702})
7a5fffa5
SP
8703
8704;;
8705;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
8706;;
8707(define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
8708 [(set (mem:BLK (scratch))
8709 (unspec:BLK
8710 [(match_operand:V2DI 0 "s_register_operand" "w")
8711 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8712 (match_operand:V2DI 2 "s_register_operand" "w")
8713 (match_operand:HI 3 "vpr_register_operand" "Up")]
8714 VSTRDSBQ))
8715 ]
8716 "TARGET_HAVE_MVE"
8717{
8718 rtx ops[3];
8719 ops[0] = operands[0];
8720 ops[1] = operands[1];
8721 ops[2] = operands[2];
8722 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
8723 return "";
8724}
8725 [(set_attr "length" "8")])
8726
8727;;
8728;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
8729;;
8730(define_insn "mve_vstrdq_scatter_base_<supf>v2di"
8731 [(set (mem:BLK (scratch))
8732 (unspec:BLK
8733 [(match_operand:V2DI 0 "s_register_operand" "=w")
8734 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
8735 (match_operand:V2DI 2 "s_register_operand" "w")]
8736 VSTRDSBQ))
8737 ]
8738 "TARGET_HAVE_MVE"
8739{
8740 rtx ops[3];
8741 ops[0] = operands[0];
8742 ops[1] = operands[1];
8743 ops[2] = operands[2];
8744 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
8745 return "";
8746}
8747 [(set_attr "length" "4")])
8748
8749;;
8750;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
8751;;
9a810e57
SP
8752(define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di"
8753 [(match_operand:V2DI 0 "mve_scatter_memory")
8754 (match_operand:V2DI 1 "s_register_operand")
8755 (match_operand:V2DI 2 "s_register_operand")
8756 (match_operand:HI 3 "vpr_register_operand")
8757 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
7a5fffa5
SP
8758 "TARGET_HAVE_MVE"
8759{
9a810e57
SP
8760 rtx ind = XEXP (operands[0], 0);
8761 gcc_assert (REG_P (ind));
8762 emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1],
8763 operands[2],
8764 operands[3]));
8765 DONE;
8766})
8767
8768(define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn"
8769 [(set (mem:BLK (scratch))
8770 (unspec:BLK
8771 [(match_operand:SI 0 "register_operand" "r")
8772 (match_operand:V2DI 1 "s_register_operand" "w")
8773 (match_operand:V2DI 2 "s_register_operand" "w")
8774 (match_operand:HI 3 "vpr_register_operand" "Up")]
8775 VSTRDSOQ))]
8776 "TARGET_HAVE_MVE"
8777 "vpst\;vstrdt.64\t%q2, [%0, %q1]"
7a5fffa5
SP
8778 [(set_attr "length" "8")])
8779
8780;;
8781;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
8782;;
9a810e57
SP
8783(define_expand "mve_vstrdq_scatter_offset_<supf>v2di"
8784 [(match_operand:V2DI 0 "mve_scatter_memory")
8785 (match_operand:V2DI 1 "s_register_operand")
8786 (match_operand:V2DI 2 "s_register_operand")
8787 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
7a5fffa5
SP
8788 "TARGET_HAVE_MVE"
8789{
9a810e57
SP
8790 rtx ind = XEXP (operands[0], 0);
8791 gcc_assert (REG_P (ind));
8792 emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1],
8793 operands[2]));
8794 DONE;
8795})
8796
8797(define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn"
8798 [(set (mem:BLK (scratch))
8799 (unspec:BLK
8800 [(match_operand:SI 0 "register_operand" "r")
8801 (match_operand:V2DI 1 "s_register_operand" "w")
8802 (match_operand:V2DI 2 "s_register_operand" "w")]
8803 VSTRDSOQ))]
8804 "TARGET_HAVE_MVE"
8805 "vstrd.64\t%q2, [%0, %q1]"
7a5fffa5
SP
8806 [(set_attr "length" "4")])
8807
8808;;
8809;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
8810;;
9a810e57
SP
8811(define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
8812 [(match_operand:V2DI 0 "mve_scatter_memory")
8813 (match_operand:V2DI 1 "s_register_operand")
8814 (match_operand:V2DI 2 "s_register_operand")
8815 (match_operand:HI 3 "vpr_register_operand")
8816 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
7a5fffa5
SP
8817 "TARGET_HAVE_MVE"
8818{
9a810e57
SP
8819 rtx ind = XEXP (operands[0], 0);
8820 gcc_assert (REG_P (ind));
8821 emit_insn (
8822 gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1],
8823 operands[2],
8824 operands[3]));
8825 DONE;
8826})
8827
8828(define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn"
8829 [(set (mem:BLK (scratch))
8830 (unspec:BLK
8831 [(match_operand:SI 0 "register_operand" "r")
8832 (match_operand:V2DI 1 "s_register_operand" "w")
8833 (match_operand:V2DI 2 "s_register_operand" "w")
8834 (match_operand:HI 3 "vpr_register_operand" "Up")]
8835 VSTRDSSOQ))]
8836 "TARGET_HAVE_MVE"
8837 "vpst\;vstrdt.64\t%q2, [%0, %q1, UXTW #3]"
7a5fffa5
SP
8838 [(set_attr "length" "8")])
8839
8840;;
8841;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
8842;;
9a810e57
SP
8843(define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
8844 [(match_operand:V2DI 0 "mve_scatter_memory")
8845 (match_operand:V2DI 1 "s_register_operand")
8846 (match_operand:V2DI 2 "s_register_operand")
8847 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
7a5fffa5
SP
8848 "TARGET_HAVE_MVE"
8849{
9a810e57
SP
8850 rtx ind = XEXP (operands[0], 0);
8851 gcc_assert (REG_P (ind));
8852 emit_insn (
8853 gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1],
8854 operands[2]));
8855 DONE;
8856})
8857
8858(define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn"
8859 [(set (mem:BLK (scratch))
8860 (unspec:BLK
8861 [(match_operand:SI 0 "register_operand" "r")
8862 (match_operand:V2DI 1 "s_register_operand" "w")
8863 (match_operand:V2DI 2 "s_register_operand" "w")]
8864 VSTRDSSOQ))]
8865 "TARGET_HAVE_MVE"
8866 "vstrd.64\t%q2, [%0, %q1, UXTW #3]"
7a5fffa5
SP
8867 [(set_attr "length" "4")])
8868
8869;;
8870;; [vstrhq_scatter_offset_f]
8871;;
9a810e57
SP
8872(define_expand "mve_vstrhq_scatter_offset_fv8hf"
8873 [(match_operand:V8HI 0 "mve_scatter_memory")
8874 (match_operand:V8HI 1 "s_register_operand")
8875 (match_operand:V8HF 2 "s_register_operand")
8876 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
7a5fffa5
SP
8877 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8878{
9a810e57
SP
8879 rtx ind = XEXP (operands[0], 0);
8880 gcc_assert (REG_P (ind));
8881 emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1],
8882 operands[2]));
8883 DONE;
8884})
8885
8886(define_insn "mve_vstrhq_scatter_offset_fv8hf_insn"
8887 [(set (mem:BLK (scratch))
8888 (unspec:BLK
8889 [(match_operand:SI 0 "register_operand" "r")
8890 (match_operand:V8HI 1 "s_register_operand" "w")
8891 (match_operand:V8HF 2 "s_register_operand" "w")]
8892 VSTRHQSO_F))]
8893 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8894 "vstrh.16\t%q2, [%0, %q1]"
7a5fffa5
SP
8895 [(set_attr "length" "4")])
8896
8897;;
8898;; [vstrhq_scatter_offset_p_f]
8899;;
9a810e57
SP
8900(define_expand "mve_vstrhq_scatter_offset_p_fv8hf"
8901 [(match_operand:V8HI 0 "mve_scatter_memory")
8902 (match_operand:V8HI 1 "s_register_operand")
8903 (match_operand:V8HF 2 "s_register_operand")
8904 (match_operand:HI 3 "vpr_register_operand")
8905 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
7a5fffa5
SP
8906 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8907{
9a810e57
SP
8908 rtx ind = XEXP (operands[0], 0);
8909 gcc_assert (REG_P (ind));
8910 emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1],
8911 operands[2],
8912 operands[3]));
8913 DONE;
8914})
8915
8916(define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn"
8917 [(set (mem:BLK (scratch))
8918 (unspec:BLK
8919 [(match_operand:SI 0 "register_operand" "r")
8920 (match_operand:V8HI 1 "s_register_operand" "w")
8921 (match_operand:V8HF 2 "s_register_operand" "w")
8922 (match_operand:HI 3 "vpr_register_operand" "Up")]
8923 VSTRHQSO_F))]
8924 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8925 "vpst\;vstrht.16\t%q2, [%0, %q1]"
7a5fffa5
SP
8926 [(set_attr "length" "8")])
8927
8928;;
8929;; [vstrhq_scatter_shifted_offset_f]
8930;;
9a810e57
SP
8931(define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf"
8932 [(match_operand:V8HI 0 "memory_operand" "=Us")
8933 (match_operand:V8HI 1 "s_register_operand" "w")
8934 (match_operand:V8HF 2 "s_register_operand" "w")
8935 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
7a5fffa5
SP
8936 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8937{
9a810e57
SP
8938 rtx ind = XEXP (operands[0], 0);
8939 gcc_assert (REG_P (ind));
8940 emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1],
8941 operands[2]));
8942 DONE;
8943})
8944
8945(define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn"
8946 [(set (mem:BLK (scratch))
8947 (unspec:BLK
8948 [(match_operand:SI 0 "register_operand" "r")
8949 (match_operand:V8HI 1 "s_register_operand" "w")
8950 (match_operand:V8HF 2 "s_register_operand" "w")]
8951 VSTRHQSSO_F))]
8952 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8953 "vstrh.16\t%q2, [%0, %q1, uxtw #1]"
7a5fffa5
SP
8954 [(set_attr "length" "4")])
8955
8956;;
8957;; [vstrhq_scatter_shifted_offset_p_f]
8958;;
9a810e57
SP
8959(define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
8960 [(match_operand:V8HI 0 "memory_operand" "=Us")
8961 (match_operand:V8HI 1 "s_register_operand" "w")
8962 (match_operand:V8HF 2 "s_register_operand" "w")
8963 (match_operand:HI 3 "vpr_register_operand" "Up")
8964 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
7a5fffa5
SP
8965 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8966{
9a810e57
SP
8967 rtx ind = XEXP (operands[0], 0);
8968 gcc_assert (REG_P (ind));
8969 emit_insn (
8970 gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1],
8971 operands[2],
8972 operands[3]));
8973 DONE;
8974})
8975
8976(define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn"
8977 [(set (mem:BLK (scratch))
8978 (unspec:BLK
8979 [(match_operand:SI 0 "register_operand" "r")
8980 (match_operand:V8HI 1 "s_register_operand" "w")
8981 (match_operand:V8HF 2 "s_register_operand" "w")
8982 (match_operand:HI 3 "vpr_register_operand" "Up")]
8983 VSTRHQSSO_F))]
8984 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8985 "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]"
7a5fffa5
SP
8986 [(set_attr "length" "8")])
8987
8988;;
8989;; [vstrwq_scatter_base_f]
8990;;
8991(define_insn "mve_vstrwq_scatter_base_fv4sf"
8992 [(set (mem:BLK (scratch))
8993 (unspec:BLK
8994 [(match_operand:V4SI 0 "s_register_operand" "w")
8995 (match_operand:SI 1 "immediate_operand" "i")
8996 (match_operand:V4SF 2 "s_register_operand" "w")]
8997 VSTRWQSB_F))
8998 ]
8999 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9000{
9001 rtx ops[3];
9002 ops[0] = operands[0];
9003 ops[1] = operands[1];
9004 ops[2] = operands[2];
9005 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
9006 return "";
9007}
9008 [(set_attr "length" "4")])
9009
9010;;
9011;; [vstrwq_scatter_base_p_f]
9012;;
9013(define_insn "mve_vstrwq_scatter_base_p_fv4sf"
9014 [(set (mem:BLK (scratch))
9015 (unspec:BLK
9016 [(match_operand:V4SI 0 "s_register_operand" "w")
9017 (match_operand:SI 1 "immediate_operand" "i")
9018 (match_operand:V4SF 2 "s_register_operand" "w")
9019 (match_operand:HI 3 "vpr_register_operand" "Up")]
9020 VSTRWQSB_F))
9021 ]
9022 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9023{
9024 rtx ops[3];
9025 ops[0] = operands[0];
9026 ops[1] = operands[1];
9027 ops[2] = operands[2];
9028 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
9029 return "";
9030}
9031 [(set_attr "length" "8")])
9032
9033;;
9034;; [vstrwq_scatter_offset_f]
9035;;
9a810e57
SP
9036(define_expand "mve_vstrwq_scatter_offset_fv4sf"
9037 [(match_operand:V4SI 0 "mve_scatter_memory")
9038 (match_operand:V4SI 1 "s_register_operand")
9039 (match_operand:V4SF 2 "s_register_operand")
9040 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
7a5fffa5
SP
9041 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9042{
9a810e57
SP
9043 rtx ind = XEXP (operands[0], 0);
9044 gcc_assert (REG_P (ind));
9045 emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1],
9046 operands[2]));
9047 DONE;
9048})
9049
9050(define_insn "mve_vstrwq_scatter_offset_fv4sf_insn"
9051 [(set (mem:BLK (scratch))
9052 (unspec:BLK
9053 [(match_operand:SI 0 "register_operand" "r")
9054 (match_operand:V4SI 1 "s_register_operand" "w")
9055 (match_operand:V4SF 2 "s_register_operand" "w")]
9056 VSTRWQSO_F))]
9057 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9058 "vstrw.32\t%q2, [%0, %q1]"
7a5fffa5
SP
9059 [(set_attr "length" "4")])
9060
9061;;
9062;; [vstrwq_scatter_offset_p_f]
9063;;
9a810e57
SP
9064(define_expand "mve_vstrwq_scatter_offset_p_fv4sf"
9065 [(match_operand:V4SI 0 "mve_scatter_memory")
9066 (match_operand:V4SI 1 "s_register_operand")
9067 (match_operand:V4SF 2 "s_register_operand")
9068 (match_operand:HI 3 "vpr_register_operand")
9069 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
7a5fffa5
SP
9070 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9071{
9a810e57
SP
9072 rtx ind = XEXP (operands[0], 0);
9073 gcc_assert (REG_P (ind));
9074 emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1],
9075 operands[2],
9076 operands[3]));
9077 DONE;
9078})
9079
9080(define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn"
9081 [(set (mem:BLK (scratch))
9082 (unspec:BLK
9083 [(match_operand:SI 0 "register_operand" "r")
9084 (match_operand:V4SI 1 "s_register_operand" "w")
9085 (match_operand:V4SF 2 "s_register_operand" "w")
9086 (match_operand:HI 3 "vpr_register_operand" "Up")]
9087 VSTRWQSO_F))]
9088 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9089 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
7a5fffa5
SP
9090 [(set_attr "length" "8")])
9091
9092;;
9a810e57 9093;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
7a5fffa5 9094;;
9a810e57
SP
9095(define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si"
9096 [(match_operand:V4SI 0 "mve_scatter_memory")
9097 (match_operand:V4SI 1 "s_register_operand")
9098 (match_operand:V4SI 2 "s_register_operand")
9099 (match_operand:HI 3 "vpr_register_operand")
9100 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
7a5fffa5
SP
9101 "TARGET_HAVE_MVE"
9102{
9a810e57
SP
9103 rtx ind = XEXP (operands[0], 0);
9104 gcc_assert (REG_P (ind));
9105 emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1],
9106 operands[2],
9107 operands[3]));
9108 DONE;
9109})
9110
9111(define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn"
9112 [(set (mem:BLK (scratch))
9113 (unspec:BLK
9114 [(match_operand:SI 0 "register_operand" "r")
9115 (match_operand:V4SI 1 "s_register_operand" "w")
9116 (match_operand:V4SI 2 "s_register_operand" "w")
9117 (match_operand:HI 3 "vpr_register_operand" "Up")]
9118 VSTRWSOQ))]
9119 "TARGET_HAVE_MVE"
9120 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
7a5fffa5
SP
9121 [(set_attr "length" "8")])
9122
9123;;
9124;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9125;;
9a810e57
SP
9126(define_expand "mve_vstrwq_scatter_offset_<supf>v4si"
9127 [(match_operand:V4SI 0 "mve_scatter_memory")
9128 (match_operand:V4SI 1 "s_register_operand")
9129 (match_operand:V4SI 2 "s_register_operand")
9130 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
7a5fffa5
SP
9131 "TARGET_HAVE_MVE"
9132{
9a810e57
SP
9133 rtx ind = XEXP (operands[0], 0);
9134 gcc_assert (REG_P (ind));
9135 emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1],
9136 operands[2]));
9137 DONE;
9138})
9139
9140(define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn"
9141 [(set (mem:BLK (scratch))
9142 (unspec:BLK
9143 [(match_operand:SI 0 "register_operand" "r")
9144 (match_operand:V4SI 1 "s_register_operand" "w")
9145 (match_operand:V4SI 2 "s_register_operand" "w")]
9146 VSTRWSOQ))]
9147 "TARGET_HAVE_MVE"
9148 "vstrw.32\t%q2, [%0, %q1]"
7a5fffa5
SP
9149 [(set_attr "length" "4")])
9150
9151;;
9152;; [vstrwq_scatter_shifted_offset_f]
9153;;
9a810e57
SP
9154(define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf"
9155 [(match_operand:V4SI 0 "mve_scatter_memory")
9156 (match_operand:V4SI 1 "s_register_operand")
9157 (match_operand:V4SF 2 "s_register_operand")
9158 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
7a5fffa5
SP
9159 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9160{
9a810e57
SP
9161 rtx ind = XEXP (operands[0], 0);
9162 gcc_assert (REG_P (ind));
9163 emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1],
9164 operands[2]));
9165 DONE;
9166})
9167
9168(define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn"
9169 [(set (mem:BLK (scratch))
9170 (unspec:BLK
9171 [(match_operand:SI 0 "register_operand" "r")
9172 (match_operand:V4SI 1 "s_register_operand" "w")
9173 (match_operand:V4SF 2 "s_register_operand" "w")]
9174 VSTRWQSSO_F))]
9175 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9176 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9177 [(set_attr "length" "8")])
7a5fffa5
SP
9178
9179;;
9180;; [vstrwq_scatter_shifted_offset_p_f]
9181;;
9a810e57
SP
9182(define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
9183 [(match_operand:V4SI 0 "mve_scatter_memory")
9184 (match_operand:V4SI 1 "s_register_operand")
9185 (match_operand:V4SF 2 "s_register_operand")
9186 (match_operand:HI 3 "vpr_register_operand")
9187 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
7a5fffa5
SP
9188 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9189{
9a810e57
SP
9190 rtx ind = XEXP (operands[0], 0);
9191 gcc_assert (REG_P (ind));
9192 emit_insn (
9193 gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1],
9194 operands[2],
9195 operands[3]));
9196 DONE;
9197})
9198
9199(define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn"
9200 [(set (mem:BLK (scratch))
9201 (unspec:BLK
9202 [(match_operand:SI 0 "register_operand" "r")
9203 (match_operand:V4SI 1 "s_register_operand" "w")
9204 (match_operand:V4SF 2 "s_register_operand" "w")
9205 (match_operand:HI 3 "vpr_register_operand" "Up")]
9206 VSTRWQSSO_F))]
9207 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9208 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
7a5fffa5
SP
9209 [(set_attr "length" "8")])
9210
9211;;
9212;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
9213;;
9a810e57
SP
9214(define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
9215 [(match_operand:V4SI 0 "mve_scatter_memory")
9216 (match_operand:V4SI 1 "s_register_operand")
9217 (match_operand:V4SI 2 "s_register_operand")
9218 (match_operand:HI 3 "vpr_register_operand")
9219 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
7a5fffa5
SP
9220 "TARGET_HAVE_MVE"
9221{
9a810e57
SP
9222 rtx ind = XEXP (operands[0], 0);
9223 gcc_assert (REG_P (ind));
9224 emit_insn (
9225 gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1],
9226 operands[2],
9227 operands[3]));
9228 DONE;
9229})
9230
9231(define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn"
9232 [(set (mem:BLK (scratch))
9233 (unspec:BLK
9234 [(match_operand:SI 0 "register_operand" "r")
9235 (match_operand:V4SI 1 "s_register_operand" "w")
9236 (match_operand:V4SI 2 "s_register_operand" "w")
9237 (match_operand:HI 3 "vpr_register_operand" "Up")]
9238 VSTRWSSOQ))]
9239 "TARGET_HAVE_MVE"
9240 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
7a5fffa5
SP
9241 [(set_attr "length" "8")])
9242
9243;;
9244;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
9245;;
9a810e57
SP
9246(define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
9247 [(match_operand:V4SI 0 "mve_scatter_memory")
9248 (match_operand:V4SI 1 "s_register_operand")
9249 (match_operand:V4SI 2 "s_register_operand")
9250 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
7a5fffa5
SP
9251 "TARGET_HAVE_MVE"
9252{
9a810e57
SP
9253 rtx ind = XEXP (operands[0], 0);
9254 gcc_assert (REG_P (ind));
9255 emit_insn (
9256 gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1],
9257 operands[2]));
9258 DONE;
9259})
9260
9261(define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn"
9262 [(set (mem:BLK (scratch))
9263 (unspec:BLK
9264 [(match_operand:SI 0 "register_operand" "r")
9265 (match_operand:V4SI 1 "s_register_operand" "w")
9266 (match_operand:V4SI 2 "s_register_operand" "w")]
9267 VSTRWSSOQ))]
9268 "TARGET_HAVE_MVE"
9269 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
7a5fffa5 9270 [(set_attr "length" "4")])
3eff57aa
SP
9271
9272;;
9273;; [vaddq_s, vaddq_u])
9274;;
9275(define_insn "mve_vaddq<mode>"
9276 [
9277 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
9278 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
9279 (match_operand:MVE_2 2 "s_register_operand" "w")))
9280 ]
9281 "TARGET_HAVE_MVE"
9282 "vadd.i%#<V_sz_elem> %q0, %q1, %q2"
9283 [(set_attr "type" "mve_move")
9284])
9285
9286;;
9287;; [vaddq_f])
9288;;
9289(define_insn "mve_vaddq_f<mode>"
9290 [
9291 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
9292 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
9293 (match_operand:MVE_0 2 "s_register_operand" "w")))
9294 ]
9295 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9296 "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
9297 [(set_attr "type" "mve_move")
9298])
92f80065
SP
9299
9300;;
9301;; [vidupq_n_u])
9302;;
9303(define_expand "mve_vidupq_n_u<mode>"
9304 [(match_operand:MVE_2 0 "s_register_operand")
9305 (match_operand:SI 1 "s_register_operand")
9306 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9307 "TARGET_HAVE_MVE"
9308{
9309 rtx temp = gen_reg_rtx (SImode);
9310 emit_move_insn (temp, operands[1]);
9311 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9312 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
9313 operands[2], inc));
9314 DONE;
9315})
9316
9317;;
9318;; [vidupq_u_insn])
9319;;
9320(define_insn "mve_vidupq_u<mode>_insn"
9321 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9322 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9323 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
9324 VIDUPQ))
3d537943 9325 (set (match_operand:SI 1 "s_register_operand" "=Te")
92f80065
SP
9326 (plus:SI (match_dup 2)
9327 (match_operand:SI 4 "immediate_operand" "i")))]
9328 "TARGET_HAVE_MVE"
9329 "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
9330
9331;;
9332;; [vidupq_m_n_u])
9333;;
9334(define_expand "mve_vidupq_m_n_u<mode>"
9335 [(match_operand:MVE_2 0 "s_register_operand")
9336 (match_operand:MVE_2 1 "s_register_operand")
9337 (match_operand:SI 2 "s_register_operand")
9338 (match_operand:SI 3 "mve_imm_selective_upto_8")
9339 (match_operand:HI 4 "vpr_register_operand")]
9340 "TARGET_HAVE_MVE"
9341{
9342 rtx temp = gen_reg_rtx (SImode);
9343 emit_move_insn (temp, operands[2]);
9344 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9345 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9346 operands[2], operands[3],
9347 operands[4], inc));
9348 DONE;
9349})
9350
9351;;
9352;; [vidupq_m_wb_u_insn])
9353;;
9354(define_insn "mve_vidupq_m_wb_u<mode>_insn"
9355 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9356 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9357 (match_operand:SI 3 "s_register_operand" "2")
9358 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9359 (match_operand:HI 5 "vpr_register_operand" "Up")]
9360 VIDUPQ_M))
3d537943 9361 (set (match_operand:SI 2 "s_register_operand" "=Te")
92f80065
SP
9362 (plus:SI (match_dup 3)
9363 (match_operand:SI 6 "immediate_operand" "i")))]
9364 "TARGET_HAVE_MVE"
9365 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
9366 [(set_attr "length""8")])
9367
9368;;
9369;; [vddupq_n_u])
9370;;
9371(define_expand "mve_vddupq_n_u<mode>"
9372 [(match_operand:MVE_2 0 "s_register_operand")
9373 (match_operand:SI 1 "s_register_operand")
9374 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9375 "TARGET_HAVE_MVE"
9376{
9377 rtx temp = gen_reg_rtx (SImode);
9378 emit_move_insn (temp, operands[1]);
9379 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9380 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
9381 operands[2], inc));
9382 DONE;
9383})
9384
9385;;
9386;; [vddupq_u_insn])
9387;;
9388(define_insn "mve_vddupq_u<mode>_insn"
9389 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9390 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9391 (match_operand:SI 3 "immediate_operand" "i")]
9392 VDDUPQ))
3d537943 9393 (set (match_operand:SI 1 "s_register_operand" "=Te")
92f80065
SP
9394 (minus:SI (match_dup 2)
9395 (match_operand:SI 4 "immediate_operand" "i")))]
9396 "TARGET_HAVE_MVE"
9397 "vddup.u%#<V_sz_elem> %q0, %1, %3")
9398
9399;;
9400;; [vddupq_m_n_u])
9401;;
9402(define_expand "mve_vddupq_m_n_u<mode>"
9403 [(match_operand:MVE_2 0 "s_register_operand")
9404 (match_operand:MVE_2 1 "s_register_operand")
9405 (match_operand:SI 2 "s_register_operand")
9406 (match_operand:SI 3 "mve_imm_selective_upto_8")
9407 (match_operand:HI 4 "vpr_register_operand")]
9408 "TARGET_HAVE_MVE"
9409{
9410 rtx temp = gen_reg_rtx (SImode);
9411 emit_move_insn (temp, operands[2]);
9412 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9413 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9414 operands[2], operands[3],
9415 operands[4], inc));
9416 DONE;
9417})
9418
9419;;
9420;; [vddupq_m_wb_u_insn])
9421;;
9422(define_insn "mve_vddupq_m_wb_u<mode>_insn"
9423 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9424 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9425 (match_operand:SI 3 "s_register_operand" "2")
9426 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9427 (match_operand:HI 5 "vpr_register_operand" "Up")]
9428 VDDUPQ_M))
3d537943 9429 (set (match_operand:SI 2 "s_register_operand" "=Te")
92f80065
SP
9430 (minus:SI (match_dup 3)
9431 (match_operand:SI 6 "immediate_operand" "i")))]
9432 "TARGET_HAVE_MVE"
9433 "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
9434 [(set_attr "length""8")])
9435
9436;;
9437;; [vdwdupq_n_u])
9438;;
9439(define_expand "mve_vdwdupq_n_u<mode>"
9440 [(match_operand:MVE_2 0 "s_register_operand")
9441 (match_operand:SI 1 "s_register_operand")
9ce780ef 9442 (match_operand:DI 2 "s_register_operand")
92f80065
SP
9443 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9444 "TARGET_HAVE_MVE"
9445{
9446 rtx ignore_wb = gen_reg_rtx (SImode);
9447 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9448 operands[1], operands[2],
9449 operands[3]));
9450 DONE;
9451})
9452
9453;;
9454;; [vdwdupq_wb_u])
9455;;
9456(define_expand "mve_vdwdupq_wb_u<mode>"
9457 [(match_operand:SI 0 "s_register_operand")
9458 (match_operand:SI 1 "s_register_operand")
9ce780ef 9459 (match_operand:DI 2 "s_register_operand")
92f80065
SP
9460 (match_operand:SI 3 "mve_imm_selective_upto_8")
9461 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9462 "TARGET_HAVE_MVE"
9463{
9464 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9465 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9466 operands[1], operands[2],
9467 operands[3]));
9468 DONE;
9469})
9470
9471;;
9472;; [vdwdupq_wb_u_insn])
9473;;
9474(define_insn "mve_vdwdupq_wb_u<mode>_insn"
9475 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9476 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9ce780ef 9477 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
92f80065
SP
9478 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9479 VDWDUPQ))
3d537943 9480 (set (match_operand:SI 1 "s_register_operand" "=Te")
92f80065 9481 (unspec:SI [(match_dup 2)
9ce780ef 9482 (subreg:SI (match_dup 3) 4)
92f80065
SP
9483 (match_dup 4)]
9484 VDWDUPQ))]
9485 "TARGET_HAVE_MVE"
9ce780ef 9486 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
92f80065
SP
9487)
9488
9489;;
9490;; [vdwdupq_m_n_u])
9491;;
9492(define_expand "mve_vdwdupq_m_n_u<mode>"
9493 [(match_operand:MVE_2 0 "s_register_operand")
9494 (match_operand:MVE_2 1 "s_register_operand")
9495 (match_operand:SI 2 "s_register_operand")
9ce780ef 9496 (match_operand:DI 3 "s_register_operand")
92f80065
SP
9497 (match_operand:SI 4 "mve_imm_selective_upto_8")
9498 (match_operand:HI 5 "vpr_register_operand")]
9499 "TARGET_HAVE_MVE"
9500{
9501 rtx ignore_wb = gen_reg_rtx (SImode);
9502 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9503 operands[1], operands[2],
9504 operands[3], operands[4],
9505 operands[5]));
9506 DONE;
9507})
9508
9509;;
9510;; [vdwdupq_m_wb_u])
9511;;
9512(define_expand "mve_vdwdupq_m_wb_u<mode>"
9513 [(match_operand:SI 0 "s_register_operand")
9514 (match_operand:MVE_2 1 "s_register_operand")
9515 (match_operand:SI 2 "s_register_operand")
9ce780ef 9516 (match_operand:DI 3 "s_register_operand")
92f80065
SP
9517 (match_operand:SI 4 "mve_imm_selective_upto_8")
9518 (match_operand:HI 5 "vpr_register_operand")]
9519 "TARGET_HAVE_MVE"
9520{
9521 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9522 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9523 operands[1], operands[2],
9524 operands[3], operands[4],
9525 operands[5]));
9526 DONE;
9527})
9528
9529;;
9530;; [vdwdupq_m_wb_u_insn])
9531;;
9532(define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
9533 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9ce780ef 9534 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
92f80065 9535 (match_operand:SI 3 "s_register_operand" "1")
9ce780ef 9536 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
92f80065
SP
9537 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9538 (match_operand:HI 6 "vpr_register_operand" "Up")]
9539 VDWDUPQ_M))
3d537943 9540 (set (match_operand:SI 1 "s_register_operand" "=Te")
92f80065
SP
9541 (unspec:SI [(match_dup 2)
9542 (match_dup 3)
9ce780ef 9543 (subreg:SI (match_dup 4) 4)
92f80065
SP
9544 (match_dup 5)
9545 (match_dup 6)]
9546 VDWDUPQ_M))
9547 ]
9548 "TARGET_HAVE_MVE"
9ce780ef 9549 "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
92f80065
SP
9550 [(set_attr "type" "mve_move")
9551 (set_attr "length""8")])
9552
9553;;
9554;; [viwdupq_n_u])
9555;;
9556(define_expand "mve_viwdupq_n_u<mode>"
9557 [(match_operand:MVE_2 0 "s_register_operand")
9558 (match_operand:SI 1 "s_register_operand")
9ce780ef 9559 (match_operand:DI 2 "s_register_operand")
92f80065
SP
9560 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9561 "TARGET_HAVE_MVE"
9562{
9563 rtx ignore_wb = gen_reg_rtx (SImode);
9564 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9565 operands[1], operands[2],
9566 operands[3]));
9567 DONE;
9568})
9569
9570;;
9571;; [viwdupq_wb_u])
9572;;
9573(define_expand "mve_viwdupq_wb_u<mode>"
9574 [(match_operand:SI 0 "s_register_operand")
9575 (match_operand:SI 1 "s_register_operand")
9ce780ef 9576 (match_operand:DI 2 "s_register_operand")
92f80065
SP
9577 (match_operand:SI 3 "mve_imm_selective_upto_8")
9578 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9579 "TARGET_HAVE_MVE"
9580{
9581 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9582 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9583 operands[1], operands[2],
9584 operands[3]));
9585 DONE;
9586})
9587
9588;;
9589;; [viwdupq_wb_u_insn])
9590;;
9591(define_insn "mve_viwdupq_wb_u<mode>_insn"
9592 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9593 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9ce780ef 9594 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
92f80065
SP
9595 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9596 VIWDUPQ))
3d537943 9597 (set (match_operand:SI 1 "s_register_operand" "=Te")
92f80065 9598 (unspec:SI [(match_dup 2)
9ce780ef 9599 (subreg:SI (match_dup 3) 4)
92f80065
SP
9600 (match_dup 4)]
9601 VIWDUPQ))]
9602 "TARGET_HAVE_MVE"
9ce780ef 9603 "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
92f80065
SP
9604)
9605
9606;;
9607;; [viwdupq_m_n_u])
9608;;
9609(define_expand "mve_viwdupq_m_n_u<mode>"
9610 [(match_operand:MVE_2 0 "s_register_operand")
9611 (match_operand:MVE_2 1 "s_register_operand")
9612 (match_operand:SI 2 "s_register_operand")
9ce780ef 9613 (match_operand:DI 3 "s_register_operand")
92f80065
SP
9614 (match_operand:SI 4 "mve_imm_selective_upto_8")
9615 (match_operand:HI 5 "vpr_register_operand")]
9616 "TARGET_HAVE_MVE"
9617{
9618 rtx ignore_wb = gen_reg_rtx (SImode);
9619 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9620 operands[1], operands[2],
9621 operands[3], operands[4],
9622 operands[5]));
9623 DONE;
9624})
9625
9626;;
9627;; [viwdupq_m_wb_u])
9628;;
9629(define_expand "mve_viwdupq_m_wb_u<mode>"
9630 [(match_operand:SI 0 "s_register_operand")
9631 (match_operand:MVE_2 1 "s_register_operand")
9632 (match_operand:SI 2 "s_register_operand")
9ce780ef 9633 (match_operand:DI 3 "s_register_operand")
92f80065
SP
9634 (match_operand:SI 4 "mve_imm_selective_upto_8")
9635 (match_operand:HI 5 "vpr_register_operand")]
9636 "TARGET_HAVE_MVE"
9637{
9638 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9639 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9640 operands[1], operands[2],
9641 operands[3], operands[4],
9642 operands[5]));
9643 DONE;
9644})
9645
9646;;
9647;; [viwdupq_m_wb_u_insn])
9648;;
9649(define_insn "mve_viwdupq_m_wb_u<mode>_insn"
9650 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9ce780ef 9651 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
92f80065 9652 (match_operand:SI 3 "s_register_operand" "1")
9ce780ef 9653 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
92f80065
SP
9654 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9655 (match_operand:HI 6 "vpr_register_operand" "Up")]
9656 VIWDUPQ_M))
3d537943 9657 (set (match_operand:SI 1 "s_register_operand" "=Te")
92f80065
SP
9658 (unspec:SI [(match_dup 2)
9659 (match_dup 3)
9ce780ef 9660 (subreg:SI (match_dup 4) 4)
92f80065
SP
9661 (match_dup 5)
9662 (match_dup 6)]
9663 VIWDUPQ_M))
9664 ]
9665 "TARGET_HAVE_MVE"
9ce780ef 9666 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
92f80065
SP
9667 [(set_attr "type" "mve_move")
9668 (set_attr "length""8")])
9ce780ef 9669
41e1a7ff 9670;;
37753588 9671;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u]
41e1a7ff 9672;;
37753588 9673(define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si"
41e1a7ff
SP
9674 [(set (mem:BLK (scratch))
9675 (unspec:BLK
9676 [(match_operand:V4SI 1 "s_register_operand" "0")
9677 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9678 (match_operand:V4SI 3 "s_register_operand" "w")]
9679 VSTRWSBWBQ))
9680 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9681 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9682 VSTRWSBWBQ))
9683 ]
9684 "TARGET_HAVE_MVE"
9685{
9686 rtx ops[3];
9687 ops[0] = operands[1];
9688 ops[1] = operands[2];
9689 ops[2] = operands[3];
9690 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9691 return "";
9692}
9693 [(set_attr "length" "4")])
9694
41e1a7ff
SP
9695;;
9696;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
9697;;
37753588 9698(define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
41e1a7ff
SP
9699 [(set (mem:BLK (scratch))
9700 (unspec:BLK
9701 [(match_operand:V4SI 1 "s_register_operand" "0")
9702 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9703 (match_operand:V4SI 3 "s_register_operand" "w")
9704 (match_operand:HI 4 "vpr_register_operand")]
9705 VSTRWSBWBQ))
9706 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9707 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9708 VSTRWSBWBQ))
9709 ]
9710 "TARGET_HAVE_MVE"
9711{
9712 rtx ops[3];
9713 ops[0] = operands[1];
9714 ops[1] = operands[2];
9715 ops[2] = operands[3];
9716 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9717 return "";
9718}
9719 [(set_attr "length" "8")])
9720
41e1a7ff
SP
9721;;
9722;; [vstrwq_scatter_base_wb_f]
9723;;
37753588 9724(define_insn "mve_vstrwq_scatter_base_wb_fv4sf"
41e1a7ff
SP
9725 [(set (mem:BLK (scratch))
9726 (unspec:BLK
9727 [(match_operand:V4SI 1 "s_register_operand" "0")
9728 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9729 (match_operand:V4SF 3 "s_register_operand" "w")]
9730 VSTRWQSBWB_F))
9731 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9732 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9733 VSTRWQSBWB_F))
9734 ]
9735 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9736{
9737 rtx ops[3];
9738 ops[0] = operands[1];
9739 ops[1] = operands[2];
9740 ops[2] = operands[3];
9741 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
9742 return "";
9743}
9744 [(set_attr "length" "4")])
9745
41e1a7ff
SP
9746;;
9747;; [vstrwq_scatter_base_wb_p_f]
9748;;
37753588 9749(define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf"
41e1a7ff
SP
9750 [(set (mem:BLK (scratch))
9751 (unspec:BLK
9752 [(match_operand:V4SI 1 "s_register_operand" "0")
9753 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9754 (match_operand:V4SF 3 "s_register_operand" "w")
9755 (match_operand:HI 4 "vpr_register_operand")]
9756 VSTRWQSBWB_F))
9757 (set (match_operand:V4SI 0 "s_register_operand" "=w")
9758 (unspec:V4SI [(match_dup 1) (match_dup 2)]
9759 VSTRWQSBWB_F))
9760 ]
9761 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9762{
9763 rtx ops[3];
9764 ops[0] = operands[1];
9765 ops[1] = operands[2];
9766 ops[2] = operands[3];
9767 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
9768 return "";
9769}
9770 [(set_attr "length" "8")])
9771
41e1a7ff
SP
9772;;
9773;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
9774;;
37753588 9775(define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di"
41e1a7ff
SP
9776 [(set (mem:BLK (scratch))
9777 (unspec:BLK
9778 [(match_operand:V2DI 1 "s_register_operand" "0")
9779 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9780 (match_operand:V2DI 3 "s_register_operand" "w")]
9781 VSTRDSBWBQ))
9782 (set (match_operand:V2DI 0 "s_register_operand" "=&w")
9783 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9784 VSTRDSBWBQ))
9785 ]
9786 "TARGET_HAVE_MVE"
9787{
9788 rtx ops[3];
9789 ops[0] = operands[1];
9790 ops[1] = operands[2];
9791 ops[2] = operands[3];
9792 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
9793 return "";
9794}
9795 [(set_attr "length" "4")])
9796
41e1a7ff
SP
9797;;
9798;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
9799;;
37753588 9800(define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
41e1a7ff
SP
9801 [(set (mem:BLK (scratch))
9802 (unspec:BLK
9803 [(match_operand:V2DI 1 "s_register_operand" "0")
9804 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
9805 (match_operand:V2DI 3 "s_register_operand" "w")
9806 (match_operand:HI 4 "vpr_register_operand")]
9807 VSTRDSBWBQ))
9808 (set (match_operand:V2DI 0 "s_register_operand" "=w")
9809 (unspec:V2DI [(match_dup 1) (match_dup 2)]
9810 VSTRDSBWBQ))
9811 ]
9812 "TARGET_HAVE_MVE"
9813{
9814 rtx ops[3];
9815 ops[0] = operands[1];
9816 ops[1] = operands[2];
9817 ops[2] = operands[3];
37753588 9818 output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops);
41e1a7ff
SP
9819 return "";
9820}
9821 [(set_attr "length" "8")])
9822
9823(define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
9824 [(match_operand:V4SI 0 "s_register_operand")
9825 (match_operand:V4SI 1 "s_register_operand")
9826 (match_operand:SI 2 "mve_vldrd_immediate")
9827 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9828 "TARGET_HAVE_MVE"
ff825b81
SP
9829{
9830 rtx ignore_result = gen_reg_rtx (V4SImode);
9831 emit_insn (
9832 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0],
9833 operands[1], operands[2]));
9834 DONE;
9835})
9836
9837(define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si"
9838 [(match_operand:V4SI 0 "s_register_operand")
9839 (match_operand:V4SI 1 "s_register_operand")
9840 (match_operand:SI 2 "mve_vldrd_immediate")
9841 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9842 "TARGET_HAVE_MVE"
41e1a7ff
SP
9843{
9844 rtx ignore_wb = gen_reg_rtx (V4SImode);
9845 emit_insn (
9846 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
9847 operands[1], operands[2]));
9848 DONE;
9849})
9850
9851;;
9852;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
9853;;
9854(define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
9855 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9856 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9857 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9858 (mem:BLK (scratch))]
9859 VLDRWGBWBQ))
9860 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9861 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9862 VLDRWGBWBQ))
9863 ]
9864 "TARGET_HAVE_MVE"
9865{
9866 rtx ops[3];
9867 ops[0] = operands[0];
9868 ops[1] = operands[2];
9869 ops[2] = operands[3];
9870 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9871 return "";
9872}
9873 [(set_attr "length" "4")])
9874
9875(define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
9876 [(match_operand:V4SI 0 "s_register_operand")
9877 (match_operand:V4SI 1 "s_register_operand")
9878 (match_operand:SI 2 "mve_vldrd_immediate")
9879 (match_operand:HI 3 "vpr_register_operand")
9880 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9881 "TARGET_HAVE_MVE"
ff825b81
SP
9882{
9883 rtx ignore_result = gen_reg_rtx (V4SImode);
9884 emit_insn (
9885 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0],
9886 operands[1], operands[2],
9887 operands[3]));
9888 DONE;
9889})
9890(define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si"
9891 [(match_operand:V4SI 0 "s_register_operand")
9892 (match_operand:V4SI 1 "s_register_operand")
9893 (match_operand:SI 2 "mve_vldrd_immediate")
9894 (match_operand:HI 3 "vpr_register_operand")
9895 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
9896 "TARGET_HAVE_MVE"
41e1a7ff
SP
9897{
9898 rtx ignore_wb = gen_reg_rtx (V4SImode);
9899 emit_insn (
9900 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
9901 operands[1], operands[2],
9902 operands[3]));
9903 DONE;
9904})
9905
9906;;
9907;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
9908;;
9909(define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
9910 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9911 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
9912 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9913 (match_operand:HI 4 "vpr_register_operand" "Up")
9914 (mem:BLK (scratch))]
9915 VLDRWGBWBQ))
9916 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9917 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9918 VLDRWGBWBQ))
9919 ]
9920 "TARGET_HAVE_MVE"
9921{
9922 rtx ops[3];
9923 ops[0] = operands[0];
9924 ops[1] = operands[2];
9925 ops[2] = operands[3];
ff825b81 9926 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
41e1a7ff
SP
9927 return "";
9928}
9929 [(set_attr "length" "8")])
9930
9931(define_expand "mve_vldrwq_gather_base_wb_fv4sf"
ff825b81
SP
9932 [(match_operand:V4SI 0 "s_register_operand")
9933 (match_operand:V4SI 1 "s_register_operand")
9934 (match_operand:SI 2 "mve_vldrd_immediate")
9935 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9936 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9937{
9938 rtx ignore_result = gen_reg_rtx (V4SFmode);
9939 emit_insn (
9940 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0],
9941 operands[1], operands[2]));
9942 DONE;
9943})
9944
9945(define_expand "mve_vldrwq_gather_base_nowb_fv4sf"
41e1a7ff
SP
9946 [(match_operand:V4SF 0 "s_register_operand")
9947 (match_operand:V4SI 1 "s_register_operand")
9948 (match_operand:SI 2 "mve_vldrd_immediate")
9949 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9950 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9951{
9952 rtx ignore_wb = gen_reg_rtx (V4SImode);
9953 emit_insn (
9954 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
9955 operands[1], operands[2]));
9956 DONE;
9957})
9958
9959;;
9960;; [vldrwq_gather_base_wb_f]
9961;;
9962(define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
9963 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9964 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
9965 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
9966 (mem:BLK (scratch))]
9967 VLDRWQGBWB_F))
9968 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
9969 (unspec:V4SI [(match_dup 2) (match_dup 3)]
9970 VLDRWQGBWB_F))
9971 ]
9972 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9973{
9974 rtx ops[3];
9975 ops[0] = operands[0];
9976 ops[1] = operands[2];
9977 ops[2] = operands[3];
9978 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
9979 return "";
9980}
9981 [(set_attr "length" "4")])
9982
9983(define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
ff825b81
SP
9984 [(match_operand:V4SI 0 "s_register_operand")
9985 (match_operand:V4SI 1 "s_register_operand")
9986 (match_operand:SI 2 "mve_vldrd_immediate")
9987 (match_operand:HI 3 "vpr_register_operand")
9988 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
9989 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9990{
9991 rtx ignore_result = gen_reg_rtx (V4SFmode);
9992 emit_insn (
9993 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0],
9994 operands[1], operands[2],
9995 operands[3]));
9996 DONE;
9997})
9998
9999(define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf"
41e1a7ff
SP
10000 [(match_operand:V4SF 0 "s_register_operand")
10001 (match_operand:V4SI 1 "s_register_operand")
10002 (match_operand:SI 2 "mve_vldrd_immediate")
10003 (match_operand:HI 3 "vpr_register_operand")
10004 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10005 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10006{
10007 rtx ignore_wb = gen_reg_rtx (V4SImode);
10008 emit_insn (
10009 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
10010 operands[1], operands[2],
10011 operands[3]));
10012 DONE;
10013})
10014
10015;;
10016;; [vldrwq_gather_base_wb_z_f]
10017;;
10018(define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
10019 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10020 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10021 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10022 (match_operand:HI 4 "vpr_register_operand" "Up")
10023 (mem:BLK (scratch))]
10024 VLDRWQGBWB_F))
10025 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10026 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10027 VLDRWQGBWB_F))
10028 ]
10029 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10030{
10031 rtx ops[3];
10032 ops[0] = operands[0];
10033 ops[1] = operands[2];
10034 ops[2] = operands[3];
ff825b81 10035 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
41e1a7ff
SP
10036 return "";
10037}
10038 [(set_attr "length" "8")])
10039
10040(define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
10041 [(match_operand:V2DI 0 "s_register_operand")
10042 (match_operand:V2DI 1 "s_register_operand")
10043 (match_operand:SI 2 "mve_vldrd_immediate")
10044 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10045 "TARGET_HAVE_MVE"
ff825b81
SP
10046{
10047 rtx ignore_result = gen_reg_rtx (V2DImode);
10048 emit_insn (
10049 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0],
10050 operands[1], operands[2]));
10051 DONE;
10052})
10053
10054(define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di"
10055 [(match_operand:V2DI 0 "s_register_operand")
10056 (match_operand:V2DI 1 "s_register_operand")
10057 (match_operand:SI 2 "mve_vldrd_immediate")
10058 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10059 "TARGET_HAVE_MVE"
41e1a7ff
SP
10060{
10061 rtx ignore_wb = gen_reg_rtx (V2DImode);
10062 emit_insn (
10063 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
10064 operands[1], operands[2]));
10065 DONE;
10066})
10067
ff825b81 10068
41e1a7ff
SP
10069;;
10070;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
10071;;
10072(define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn"
10073 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10074 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10075 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10076 (mem:BLK (scratch))]
10077 VLDRDGBWBQ))
10078 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10079 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10080 VLDRDGBWBQ))
10081 ]
10082 "TARGET_HAVE_MVE"
10083{
10084 rtx ops[3];
10085 ops[0] = operands[0];
10086 ops[1] = operands[2];
10087 ops[2] = operands[3];
10088 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
10089 return "";
10090}
10091 [(set_attr "length" "4")])
10092
10093(define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
10094 [(match_operand:V2DI 0 "s_register_operand")
10095 (match_operand:V2DI 1 "s_register_operand")
10096 (match_operand:SI 2 "mve_vldrd_immediate")
10097 (match_operand:HI 3 "vpr_register_operand")
10098 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10099 "TARGET_HAVE_MVE"
ff825b81
SP
10100{
10101 rtx ignore_result = gen_reg_rtx (V2DImode);
10102 emit_insn (
10103 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0],
10104 operands[1], operands[2],
10105 operands[3]));
10106 DONE;
10107})
10108
10109(define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di"
10110 [(match_operand:V2DI 0 "s_register_operand")
10111 (match_operand:V2DI 1 "s_register_operand")
10112 (match_operand:SI 2 "mve_vldrd_immediate")
10113 (match_operand:HI 3 "vpr_register_operand")
10114 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10115 "TARGET_HAVE_MVE"
41e1a7ff
SP
10116{
10117 rtx ignore_wb = gen_reg_rtx (V2DImode);
10118 emit_insn (
10119 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
10120 operands[1], operands[2],
10121 operands[3]));
10122 DONE;
10123})
10124
c3562f81
SP
10125(define_insn "get_fpscr_nzcvqc"
10126 [(set (match_operand:SI 0 "register_operand" "=r")
10127 (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
10128 "TARGET_HAVE_MVE"
10129 "vmrs\\t%0, FPSCR_nzcvqc"
10130 [(set_attr "type" "mve_move")])
10131
10132(define_insn "set_fpscr_nzcvqc"
10133 [(set (reg:SI VFPCC_REGNUM)
10134 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
10135 VUNSPEC_SET_FPSCR_NZCVQC))]
10136 "TARGET_HAVE_MVE"
10137 "vmsr\\tFPSCR_nzcvqc, %0"
10138 [(set_attr "type" "mve_move")])
10139
41e1a7ff
SP
10140;;
10141;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
10142;;
10143(define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
10144 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10145 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10146 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10147 (match_operand:HI 4 "vpr_register_operand" "Up")
10148 (mem:BLK (scratch))]
10149 VLDRDGBWBQ))
10150 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10151 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10152 VLDRDGBWBQ))
10153 ]
10154 "TARGET_HAVE_MVE"
10155{
10156 rtx ops[3];
10157 ops[0] = operands[0];
10158 ops[1] = operands[2];
10159 ops[2] = operands[3];
ff825b81 10160 output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops);
41e1a7ff
SP
10161 return "";
10162}
10163 [(set_attr "length" "8")])
c3562f81
SP
10164;;
10165;; [vadciq_m_s, vadciq_m_u])
10166;;
10167(define_insn "mve_vadciq_m_<supf>v4si"
10168 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10169 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10170 (match_operand:V4SI 2 "s_register_operand" "w")
10171 (match_operand:V4SI 3 "s_register_operand" "w")
10172 (match_operand:HI 4 "vpr_register_operand" "Up")]
10173 VADCIQ_M))
10174 (set (reg:SI VFPCC_REGNUM)
10175 (unspec:SI [(const_int 0)]
10176 VADCIQ_M))
10177 ]
10178 "TARGET_HAVE_MVE"
10179 "vpst\;vadcit.i32\t%q0, %q2, %q3"
10180 [(set_attr "type" "mve_move")
10181 (set_attr "length" "8")])
10182
10183;;
10184;; [vadciq_u, vadciq_s])
10185;;
10186(define_insn "mve_vadciq_<supf>v4si"
10187 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10188 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10189 (match_operand:V4SI 2 "s_register_operand" "w")]
10190 VADCIQ))
10191 (set (reg:SI VFPCC_REGNUM)
10192 (unspec:SI [(const_int 0)]
10193 VADCIQ))
10194 ]
10195 "TARGET_HAVE_MVE"
10196 "vadci.i32\t%q0, %q1, %q2"
10197 [(set_attr "type" "mve_move")
10198 (set_attr "length" "4")])
10199
10200;;
10201;; [vadcq_m_s, vadcq_m_u])
10202;;
10203(define_insn "mve_vadcq_m_<supf>v4si"
10204 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10205 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10206 (match_operand:V4SI 2 "s_register_operand" "w")
10207 (match_operand:V4SI 3 "s_register_operand" "w")
10208 (match_operand:HI 4 "vpr_register_operand" "Up")]
10209 VADCQ_M))
10210 (set (reg:SI VFPCC_REGNUM)
10211 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10212 VADCQ_M))
10213 ]
10214 "TARGET_HAVE_MVE"
10215 "vpst\;vadct.i32\t%q0, %q2, %q3"
10216 [(set_attr "type" "mve_move")
10217 (set_attr "length" "8")])
10218
10219;;
10220;; [vadcq_u, vadcq_s])
10221;;
10222(define_insn "mve_vadcq_<supf>v4si"
10223 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10224 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10225 (match_operand:V4SI 2 "s_register_operand" "w")]
10226 VADCQ))
10227 (set (reg:SI VFPCC_REGNUM)
10228 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10229 VADCQ))
10230 ]
10231 "TARGET_HAVE_MVE"
10232 "vadc.i32\t%q0, %q1, %q2"
10233 [(set_attr "type" "mve_move")
10234 (set_attr "length" "4")
10235 (set_attr "conds" "set")])
10236
10237;;
10238;; [vsbciq_m_u, vsbciq_m_s])
10239;;
10240(define_insn "mve_vsbciq_m_<supf>v4si"
10241 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10242 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10243 (match_operand:V4SI 2 "s_register_operand" "w")
10244 (match_operand:V4SI 3 "s_register_operand" "w")
10245 (match_operand:HI 4 "vpr_register_operand" "Up")]
10246 VSBCIQ_M))
10247 (set (reg:SI VFPCC_REGNUM)
10248 (unspec:SI [(const_int 0)]
10249 VSBCIQ_M))
10250 ]
10251 "TARGET_HAVE_MVE"
10252 "vpst\;vsbcit.i32\t%q0, %q2, %q3"
10253 [(set_attr "type" "mve_move")
10254 (set_attr "length" "8")])
10255
10256;;
10257;; [vsbciq_s, vsbciq_u])
10258;;
10259(define_insn "mve_vsbciq_<supf>v4si"
10260 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10261 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10262 (match_operand:V4SI 2 "s_register_operand" "w")]
10263 VSBCIQ))
10264 (set (reg:SI VFPCC_REGNUM)
10265 (unspec:SI [(const_int 0)]
10266 VSBCIQ))
10267 ]
10268 "TARGET_HAVE_MVE"
10269 "vsbci.i32\t%q0, %q1, %q2"
10270 [(set_attr "type" "mve_move")
10271 (set_attr "length" "4")])
10272
10273;;
10274;; [vsbcq_m_u, vsbcq_m_s])
10275;;
10276(define_insn "mve_vsbcq_m_<supf>v4si"
10277 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10278 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10279 (match_operand:V4SI 2 "s_register_operand" "w")
10280 (match_operand:V4SI 3 "s_register_operand" "w")
10281 (match_operand:HI 4 "vpr_register_operand" "Up")]
10282 VSBCQ_M))
10283 (set (reg:SI VFPCC_REGNUM)
10284 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10285 VSBCQ_M))
10286 ]
10287 "TARGET_HAVE_MVE"
10288 "vpst\;vsbct.i32\t%q0, %q2, %q3"
10289 [(set_attr "type" "mve_move")
10290 (set_attr "length" "8")])
10291
10292;;
10293;; [vsbcq_s, vsbcq_u])
10294;;
10295(define_insn "mve_vsbcq_<supf>v4si"
10296 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10297 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10298 (match_operand:V4SI 2 "s_register_operand" "w")]
10299 VSBCQ))
10300 (set (reg:SI VFPCC_REGNUM)
10301 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10302 VSBCQ))
10303 ]
10304 "TARGET_HAVE_MVE"
10305 "vsbc.i32\t%q0, %q1, %q2"
10306 [(set_attr "type" "mve_move")
10307 (set_attr "length" "4")])
1dfcc3b5
SP
10308
10309;;
10310;; [vst2q])
10311;;
10312(define_insn "mve_vst2q<mode>"
10313 [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
10314 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
10315 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10316 VST2Q))
10317 ]
10318 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10319 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10320{
10321 rtx ops[4];
10322 int regno = REGNO (operands[1]);
10323 ops[0] = gen_rtx_REG (TImode, regno);
10324 ops[1] = gen_rtx_REG (TImode, regno + 4);
10325 rtx reg = operands[0];
10326 while (reg && !REG_P (reg))
10327 reg = XEXP (reg, 0);
10328 gcc_assert (REG_P (reg));
10329 ops[2] = reg;
10330 ops[3] = operands[0];
10331 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10332 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10333 return "";
10334}
10335 [(set_attr "length" "8")])
10336
10337;;
10338;; [vld2q])
10339;;
10340(define_insn "mve_vld2q<mode>"
10341 [(set (match_operand:OI 0 "s_register_operand" "=w")
10342 (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
10343 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10344 VLD2Q))
10345 ]
10346 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10347 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10348{
10349 rtx ops[4];
10350 int regno = REGNO (operands[0]);
10351 ops[0] = gen_rtx_REG (TImode, regno);
10352 ops[1] = gen_rtx_REG (TImode, regno + 4);
10353 rtx reg = operands[1];
10354 while (reg && !REG_P (reg))
10355 reg = XEXP (reg, 0);
10356 gcc_assert (REG_P (reg));
10357 ops[2] = reg;
10358 ops[3] = operands[1];
10359 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10360 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10361 return "";
10362}
10363 [(set_attr "length" "8")])
10364
10365;;
10366;; [vld4q])
10367;;
10368(define_insn "mve_vld4q<mode>"
10369 [(set (match_operand:XI 0 "s_register_operand" "=w")
10370 (unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
10371 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10372 VLD4Q))
10373 ]
10374 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10375 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10376{
10377 rtx ops[6];
10378 int regno = REGNO (operands[0]);
10379 ops[0] = gen_rtx_REG (TImode, regno);
10380 ops[1] = gen_rtx_REG (TImode, regno+4);
10381 ops[2] = gen_rtx_REG (TImode, regno+8);
10382 ops[3] = gen_rtx_REG (TImode, regno + 12);
10383 rtx reg = operands[1];
10384 while (reg && !REG_P (reg))
10385 reg = XEXP (reg, 0);
10386 gcc_assert (REG_P (reg));
10387 ops[4] = reg;
10388 ops[5] = operands[1];
10389 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10390 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10391 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10392 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
10393 return "";
10394}
10395 [(set_attr "length" "16")])
1a5c27b1
SP
10396;;
10397;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
10398;;
10399(define_insn "mve_vec_extract<mode><V_elem_l>"
302b6836 10400 [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r")
1a5c27b1
SP
10401 (vec_select:<V_elem>
10402 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
10403 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10404 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10405 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10406{
10407 if (BYTES_BIG_ENDIAN)
10408 {
10409 int elt = INTVAL (operands[2]);
10410 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10411 operands[2] = GEN_INT (elt);
10412 }
10413 return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
10414}
10415 [(set_attr "type" "mve_move")])
10416
10417(define_insn "mve_vec_extractv2didi"
302b6836 10418 [(set (match_operand:DI 0 "nonimmediate_operand" "=r")
1a5c27b1
SP
10419 (vec_select:DI
10420 (match_operand:V2DI 1 "s_register_operand" "w")
10421 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10422 "TARGET_HAVE_MVE"
10423{
10424 int elt = INTVAL (operands[2]);
10425 if (BYTES_BIG_ENDIAN)
10426 elt = 1 - elt;
10427
10428 if (elt == 0)
10429 return "vmov\t%Q0, %R0, %e1";
10430 else
302b6836 10431 return "vmov\t%Q0, %R0, %f1";
1a5c27b1
SP
10432}
10433 [(set_attr "type" "mve_move")])
10434
10435(define_insn "*mve_vec_extract_sext_internal<mode>"
10436 [(set (match_operand:SI 0 "s_register_operand" "=r")
10437 (sign_extend:SI
10438 (vec_select:<V_elem>
10439 (match_operand:MVE_2 1 "s_register_operand" "w")
10440 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10441 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10442 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10443{
10444 if (BYTES_BIG_ENDIAN)
10445 {
10446 int elt = INTVAL (operands[2]);
10447 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10448 operands[2] = GEN_INT (elt);
10449 }
10450 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
10451}
10452 [(set_attr "type" "mve_move")])
10453
10454(define_insn "*mve_vec_extract_zext_internal<mode>"
10455 [(set (match_operand:SI 0 "s_register_operand" "=r")
10456 (zero_extend:SI
10457 (vec_select:<V_elem>
10458 (match_operand:MVE_2 1 "s_register_operand" "w")
10459 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10460 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10461 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10462{
10463 if (BYTES_BIG_ENDIAN)
10464 {
10465 int elt = INTVAL (operands[2]);
10466 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10467 operands[2] = GEN_INT (elt);
10468 }
10469 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
10470}
10471 [(set_attr "type" "mve_move")])
10472
10473;;
10474;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
10475;;
10476(define_insn "mve_vec_set<mode>_internal"
10477 [(set (match_operand:VQ2 0 "s_register_operand" "=w")
10478 (vec_merge:VQ2
10479 (vec_duplicate:VQ2
10480 (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
10481 (match_operand:VQ2 3 "s_register_operand" "0")
10482 (match_operand:SI 2 "immediate_operand" "i")))]
10483 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10484 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10485{
10486 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10487 if (BYTES_BIG_ENDIAN)
10488 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10489 operands[2] = GEN_INT (elt);
10490
10491 return "vmov.<V_sz_elem>\t%q0[%c2], %1";
10492}
10493 [(set_attr "type" "mve_move")])
10494
10495(define_insn "mve_vec_setv2di_internal"
10496 [(set (match_operand:V2DI 0 "s_register_operand" "=w")
10497 (vec_merge:V2DI
10498 (vec_duplicate:V2DI
10499 (match_operand:DI 1 "nonimmediate_operand" "r"))
10500 (match_operand:V2DI 3 "s_register_operand" "0")
10501 (match_operand:SI 2 "immediate_operand" "i")))]
10502 "TARGET_HAVE_MVE"
10503{
10504 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10505 if (BYTES_BIG_ENDIAN)
10506 elt = 1 - elt;
10507
10508 if (elt == 0)
10509 return "vmov\t%e0, %Q1, %R1";
10510 else
10511 return "vmov\t%f0, %J1, %K1";
10512}
10513 [(set_attr "type" "mve_move")])
85244449
SP
10514
10515;;
10516;; [uqrshll_di]
10517;;
10518(define_insn "mve_uqrshll_sat<supf>_di"
6af59870
SP
10519 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10520 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10521 (match_operand:SI 2 "register_operand" "r")]
85244449
SP
10522 UQRSHLLQ))]
10523 "TARGET_HAVE_MVE"
10524 "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
10525 [(set_attr "predicable" "yes")])
10526
10527;;
10528;; [sqrshrl_di]
10529;;
10530(define_insn "mve_sqrshrl_sat<supf>_di"
6af59870
SP
10531 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10532 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10533 (match_operand:SI 2 "register_operand" "r")]
85244449
SP
10534 SQRSHRLQ))]
10535 "TARGET_HAVE_MVE"
10536 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
10537 [(set_attr "predicable" "yes")])
10538
10539;;
10540;; [uqrshl_si]
10541;;
10542(define_insn "mve_uqrshl_si"
6af59870
SP
10543 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10544 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10545 (match_operand:SI 2 "register_operand" "r")]
85244449
SP
10546 UQRSHL))]
10547 "TARGET_HAVE_MVE"
10548 "uqrshl%?\\t%1, %2"
10549 [(set_attr "predicable" "yes")])
10550
10551;;
10552;; [sqrshr_si]
10553;;
10554(define_insn "mve_sqrshr_si"
6af59870
SP
10555 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10556 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10557 (match_operand:SI 2 "register_operand" "r")]
85244449
SP
10558 SQRSHR))]
10559 "TARGET_HAVE_MVE"
10560 "sqrshr%?\\t%1, %2"
10561 [(set_attr "predicable" "yes")])
10562
10563;;
10564;; [uqshll_di]
10565;;
10566(define_insn "mve_uqshll_di"
6af59870
SP
10567 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10568 (us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10569 (match_operand:SI 2 "immediate_operand" "Pg")))]
85244449
SP
10570 "TARGET_HAVE_MVE"
10571 "uqshll%?\\t%Q1, %R1, %2"
10572 [(set_attr "predicable" "yes")])
10573
10574;;
10575;; [urshrl_di]
10576;;
10577(define_insn "mve_urshrl_di"
6af59870
SP
10578 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10579 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10580 (match_operand:SI 2 "immediate_operand" "Pg")]
85244449
SP
10581 URSHRL))]
10582 "TARGET_HAVE_MVE"
10583 "urshrl%?\\t%Q1, %R1, %2"
10584 [(set_attr "predicable" "yes")])
10585
10586;;
10587;; [uqshl_si]
10588;;
10589(define_insn "mve_uqshl_si"
6af59870
SP
10590 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10591 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0")
10592 (match_operand:SI 2 "immediate_operand" "Pg")))]
85244449
SP
10593 "TARGET_HAVE_MVE"
10594 "uqshl%?\\t%1, %2"
10595 [(set_attr "predicable" "yes")])
10596
10597;;
10598;; [urshr_si]
10599;;
10600(define_insn "mve_urshr_si"
6af59870
SP
10601 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10602 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0")
10603 (match_operand:SI 2 "immediate_operand" "Pg")]
85244449
SP
10604 URSHR))]
10605 "TARGET_HAVE_MVE"
10606 "urshr%?\\t%1, %2"
10607 [(set_attr "predicable" "yes")])
10608
10609;;
10610;; [sqshl_si]
10611;;
10612(define_insn "mve_sqshl_si"
6af59870
SP
10613 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10614 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0")
10615 (match_operand:SI 2 "immediate_operand" "Pg")))]
85244449
SP
10616 "TARGET_HAVE_MVE"
10617 "sqshl%?\\t%1, %2"
10618 [(set_attr "predicable" "yes")])
10619
10620;;
10621;; [srshr_si]
10622;;
10623(define_insn "mve_srshr_si"
6af59870
SP
10624 [(set (match_operand:SI 0 "arm_general_register_operand" "=r")
10625 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0")
10626 (match_operand:SI 2 "immediate_operand" "Pg")]
85244449
SP
10627 SRSHR))]
10628 "TARGET_HAVE_MVE"
10629 "srshr%?\\t%1, %2"
10630 [(set_attr "predicable" "yes")])
10631
10632;;
10633;; [srshrl_di]
10634;;
10635(define_insn "mve_srshrl_di"
6af59870
SP
10636 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10637 (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0")
10638 (match_operand:SI 2 "immediate_operand" "Pg")]
85244449
SP
10639 SRSHRL))]
10640 "TARGET_HAVE_MVE"
10641 "srshrl%?\\t%Q1, %R1, %2"
10642 [(set_attr "predicable" "yes")])
10643
10644;;
10645;; [sqshll_di]
10646;;
10647(define_insn "mve_sqshll_di"
6af59870
SP
10648 [(set (match_operand:DI 0 "arm_low_register_operand" "=l")
10649 (ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0")
10650 (match_operand:SI 2 "immediate_operand" "Pg")))]
85244449
SP
10651 "TARGET_HAVE_MVE"
10652 "sqshll%?\\t%Q1, %R1, %2"
10653 [(set_attr "predicable" "yes")])
88c9a831
SP
10654
10655;;
10656;; [vshlcq_m_u vshlcq_m_s]
10657;;
10658(define_expand "mve_vshlcq_m_vec_<supf><mode>"
10659 [(match_operand:MVE_2 0 "s_register_operand")
10660 (match_operand:MVE_2 1 "s_register_operand")
10661 (match_operand:SI 2 "s_register_operand")
10662 (match_operand:SI 3 "mve_imm_32")
10663 (match_operand:HI 4 "vpr_register_operand")
10664 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10665 "TARGET_HAVE_MVE"
10666{
10667 rtx ignore_wb = gen_reg_rtx (SImode);
10668 emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1],
10669 operands[2], operands[3],
10670 operands[4]));
10671 DONE;
10672})
10673
10674(define_expand "mve_vshlcq_m_carry_<supf><mode>"
10675 [(match_operand:SI 0 "s_register_operand")
10676 (match_operand:MVE_2 1 "s_register_operand")
10677 (match_operand:SI 2 "s_register_operand")
10678 (match_operand:SI 3 "mve_imm_32")
10679 (match_operand:HI 4 "vpr_register_operand")
10680 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
10681 "TARGET_HAVE_MVE"
10682{
10683 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10684 emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0],
10685 operands[1], operands[2],
10686 operands[3], operands[4]));
10687 DONE;
10688})
10689
10690(define_insn "mve_vshlcq_m_<supf><mode>"
10691 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10692 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10693 (match_operand:SI 3 "s_register_operand" "1")
10694 (match_operand:SI 4 "mve_imm_32" "Rf")
10695 (match_operand:HI 5 "vpr_register_operand" "Up")]
10696 VSHLCQ_M))
10697 (set (match_operand:SI 1 "s_register_operand" "=r")
10698 (unspec:SI [(match_dup 2)
10699 (match_dup 3)
10700 (match_dup 4)
10701 (match_dup 5)]
10702 VSHLCQ_M))
10703 ]
10704 "TARGET_HAVE_MVE"
10705 "vpst\;vshlct\t%q0, %1, %4"
10706 [(set_attr "type" "mve_move")
10707 (set_attr "length" "8")])
479ccabc
AV
10708
10709(define_insn "*mve_vec_duplicate<mode>"
10710 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
10711 (vec_duplicate:MVE_VLD_ST (match_operand:<V_elem> 1 "general_operand" "r")))]
10712 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
10713 "vdup.<V_sz_elem>\t%q0, %1"
10714 [(set_attr "type" "mve_move")])
78bf9163
MM
10715
10716;; CDE instructions on MVE registers.
10717
10718(define_insn "arm_vcx1qv16qi"
10719 [(set (match_operand:V16QI 0 "register_operand" "=t")
10720 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10721 (match_operand:SI 2 "const_int_mve_cde1_operand" "i")]
10722 UNSPEC_VCDE))]
10723 "TARGET_CDE && TARGET_HAVE_MVE"
10724 "vcx1\\tp%c1, %q0, #%c2"
10725 [(set_attr "type" "coproc")]
10726)
10727
10728(define_insn "arm_vcx1qav16qi"
10729 [(set (match_operand:V16QI 0 "register_operand" "=t")
10730 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10731 (match_operand:V16QI 2 "register_operand" "0")
10732 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")]
10733 UNSPEC_VCDEA))]
10734 "TARGET_CDE && TARGET_HAVE_MVE"
10735 "vcx1a\\tp%c1, %q0, #%c3"
10736 [(set_attr "type" "coproc")]
10737)
10738
10739(define_insn "arm_vcx2qv16qi"
10740 [(set (match_operand:V16QI 0 "register_operand" "=t")
10741 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10742 (match_operand:V16QI 2 "register_operand" "t")
10743 (match_operand:SI 3 "const_int_mve_cde2_operand" "i")]
10744 UNSPEC_VCDE))]
10745 "TARGET_CDE && TARGET_HAVE_MVE"
10746 "vcx2\\tp%c1, %q0, %q2, #%c3"
10747 [(set_attr "type" "coproc")]
10748)
10749
10750(define_insn "arm_vcx2qav16qi"
10751 [(set (match_operand:V16QI 0 "register_operand" "=t")
10752 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10753 (match_operand:V16QI 2 "register_operand" "0")
10754 (match_operand:V16QI 3 "register_operand" "t")
10755 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")]
10756 UNSPEC_VCDEA))]
10757 "TARGET_CDE && TARGET_HAVE_MVE"
10758 "vcx2a\\tp%c1, %q0, %q3, #%c4"
10759 [(set_attr "type" "coproc")]
10760)
10761
10762(define_insn "arm_vcx3qv16qi"
10763 [(set (match_operand:V16QI 0 "register_operand" "=t")
10764 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10765 (match_operand:V16QI 2 "register_operand" "t")
10766 (match_operand:V16QI 3 "register_operand" "t")
10767 (match_operand:SI 4 "const_int_mve_cde3_operand" "i")]
10768 UNSPEC_VCDE))]
10769 "TARGET_CDE && TARGET_HAVE_MVE"
10770 "vcx3\\tp%c1, %q0, %q2, %q3, #%c4"
10771 [(set_attr "type" "coproc")]
10772)
10773
10774(define_insn "arm_vcx3qav16qi"
10775 [(set (match_operand:V16QI 0 "register_operand" "=t")
10776 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10777 (match_operand:V16QI 2 "register_operand" "0")
10778 (match_operand:V16QI 3 "register_operand" "t")
10779 (match_operand:V16QI 4 "register_operand" "t")
10780 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")]
10781 UNSPEC_VCDEA))]
10782 "TARGET_CDE && TARGET_HAVE_MVE"
10783 "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5"
10784 [(set_attr "type" "coproc")]
10785)
ef684c78
MM
10786
10787(define_insn "arm_vcx1q<a>_p_v16qi"
10788 [(set (match_operand:V16QI 0 "register_operand" "=t")
10789 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10790 (match_operand:V16QI 2 "register_operand" "0")
10791 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")
10792 (match_operand:HI 4 "vpr_register_operand" "Up")]
10793 CDE_VCX))]
10794 "TARGET_CDE && TARGET_HAVE_MVE"
10795 "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3"
10796 [(set_attr "type" "coproc")
10797 (set_attr "length" "8")]
10798)
10799
10800(define_insn "arm_vcx2q<a>_p_v16qi"
10801 [(set (match_operand:V16QI 0 "register_operand" "=t")
10802 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10803 (match_operand:V16QI 2 "register_operand" "0")
10804 (match_operand:V16QI 3 "register_operand" "t")
10805 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")
10806 (match_operand:HI 5 "vpr_register_operand" "Up")]
10807 CDE_VCX))]
10808 "TARGET_CDE && TARGET_HAVE_MVE"
10809 "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4"
10810 [(set_attr "type" "coproc")
10811 (set_attr "length" "8")]
10812)
10813
10814(define_insn "arm_vcx3q<a>_p_v16qi"
10815 [(set (match_operand:V16QI 0 "register_operand" "=t")
10816 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
10817 (match_operand:V16QI 2 "register_operand" "0")
10818 (match_operand:V16QI 3 "register_operand" "t")
10819 (match_operand:V16QI 4 "register_operand" "t")
10820 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")
10821 (match_operand:HI 6 "vpr_register_operand" "Up")]
10822 CDE_VCX))]
10823 "TARGET_CDE && TARGET_HAVE_MVE"
10824 "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5"
10825 [(set_attr "type" "coproc")
10826 (set_attr "length" "8")]
10827)