1 ;; Arm M-profile Vector Extension Machine Description
2 ;; Copyright (C) 2019-2020 Free Software Foundation, Inc.
4 ;; This file is part of GCC.
6 ;; GCC is free software; you can redistribute it and/or modify it
7 ;; under the terms of the GNU General Public License as published by
8 ;; the Free Software Foundation; either version 3, or (at your option)
11 ;; GCC is distributed in the hope that it will be useful, but
12 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 ;; General Public License for more details.
16 ;; You should have received a copy of the GNU General Public License
17 ;; along with GCC; see the file COPYING3. If not see
18 ;; <http://www.gnu.org/licenses/>.
20 (define_mode_attr V_sz_elem2 [(V16QI "s8") (V8HI "u16") (V4SI "u32")
22 (define_mode_iterator MVE_types [V16QI V8HI V4SI V2DI TI V8HF V4SF V2DF])
23 (define_mode_iterator MVE_VLD_ST [V16QI V8HI V4SI V8HF V4SF])
24 (define_mode_iterator MVE_0 [V8HF V4SF])
25 (define_mode_iterator MVE_1 [V16QI V8HI V4SI V2DI])
26 (define_mode_iterator MVE_3 [V16QI V8HI])
27 (define_mode_iterator MVE_2 [V16QI V8HI V4SI])
28 (define_mode_iterator MVE_5 [V8HI V4SI])
30 (define_c_enum "unspec" [VST4Q VRNDXQ_F VRNDQ_F VRNDPQ_F VRNDNQ_F VRNDMQ_F
31 VRNDAQ_F VREV64Q_F VNEGQ_F VDUPQ_N_F VABSQ_F VREV32Q_F
32 VCVTTQ_F32_F16 VCVTBQ_F32_F16 VCVTQ_TO_F_S VQNEGQ_S
33 VCVTQ_TO_F_U VREV16Q_S VREV16Q_U VADDLVQ_S VMVNQ_N_S
34 VMVNQ_N_U VCVTAQ_S VCVTAQ_U VREV64Q_S VREV64Q_U
35 VQABSQ_S VNEGQ_S VMVNQ_S VMVNQ_U VDUPQ_N_U VDUPQ_N_S
36 VCLZQ_U VCLZQ_S VCLSQ_S VADDVQ_S VADDVQ_U VABSQ_S
37 VREV32Q_U VREV32Q_S VMOVLTQ_U VMOVLTQ_S VMOVLBQ_S
38 VMOVLBQ_U VCVTQ_FROM_F_S VCVTQ_FROM_F_U VCVTPQ_S
39 VCVTPQ_U VCVTNQ_S VCVTNQ_U VCVTMQ_S VCVTMQ_U
40 VADDLVQ_U VCTP8Q VCTP16Q VCTP32Q VCTP64Q VPNOT
41 VCREATEQ_F VCVTQ_N_TO_F_S VCVTQ_N_TO_F_U VBRSRQ_N_F
42 VSUBQ_N_F VCREATEQ_U VCREATEQ_S VSHRQ_N_S VSHRQ_N_U
43 VCVTQ_N_FROM_F_S VCVTQ_N_FROM_F_U VADDLVQ_P_S
44 VADDLVQ_P_U VCMPNEQ_U VCMPNEQ_S VSHLQ_S VSHLQ_U VABDQ_S
45 VADDQ_N_S VADDVAQ_S VADDVQ_P_S VANDQ_S VBICQ_S
46 VBRSRQ_N_S VCADDQ_ROT270_S VCADDQ_ROT90_S VCMPEQQ_S
47 VCMPEQQ_N_S VCMPNEQ_N_S VEORQ_S VHADDQ_S VHADDQ_N_S
48 VHSUBQ_S VHSUBQ_N_S VMAXQ_S VMAXVQ_S VMINQ_S VMINVQ_S
49 VMLADAVQ_S VMULHQ_S VMULLBQ_INT_S VMULLTQ_INT_S VMULQ_S
50 VMULQ_N_S VORNQ_S VORRQ_S VQADDQ_S VQADDQ_N_S VQRSHLQ_S
51 VQRSHLQ_N_S VQSHLQ_S VQSHLQ_N_S VQSHLQ_R_S VQSUBQ_S
52 VQSUBQ_N_S VRHADDQ_S VRMULHQ_S VRSHLQ_S VRSHLQ_N_S
53 VRSHRQ_N_S VSHLQ_N_S VSHLQ_R_S VSUBQ_S VSUBQ_N_S
54 VABDQ_U VADDQ_N_U VADDVAQ_U VADDVQ_P_U VANDQ_U VBICQ_U
55 VBRSRQ_N_U VCADDQ_ROT270_U VCADDQ_ROT90_U VCMPEQQ_U
56 VCMPEQQ_N_U VCMPNEQ_N_U VEORQ_U VHADDQ_U VHADDQ_N_U
57 VHSUBQ_U VHSUBQ_N_U VMAXQ_U VMAXVQ_U VMINQ_U VMINVQ_U
58 VMLADAVQ_U VMULHQ_U VMULLBQ_INT_U VMULLTQ_INT_U VMULQ_U
59 VMULQ_N_U VORNQ_U VORRQ_U VQADDQ_U VQADDQ_N_U VQRSHLQ_U
60 VQRSHLQ_N_U VQSHLQ_U VQSHLQ_N_U VQSHLQ_R_U VQSUBQ_U
61 VQSUBQ_N_U VRHADDQ_U VRMULHQ_U VRSHLQ_U VRSHLQ_N_U
62 VRSHRQ_N_U VSHLQ_N_U VSHLQ_R_U VSUBQ_U VSUBQ_N_U
63 VCMPGEQ_N_S VCMPGEQ_S VCMPGTQ_N_S VCMPGTQ_S VCMPLEQ_N_S
64 VCMPLEQ_S VCMPLTQ_N_S VCMPLTQ_S VHCADDQ_ROT270_S
65 VHCADDQ_ROT90_S VMAXAQ_S VMAXAVQ_S VMINAQ_S VMINAVQ_S
66 VMLADAVXQ_S VMLSDAVQ_S VMLSDAVXQ_S VQDMULHQ_N_S
67 VQDMULHQ_S VQRDMULHQ_N_S VQRDMULHQ_S VQSHLUQ_N_S
68 VCMPCSQ_N_U VCMPCSQ_U VCMPHIQ_N_U VCMPHIQ_U VABDQ_M_S
69 VABDQ_M_U VABDQ_F VADDQ_N_F VANDQ_F VBICQ_F
70 VCADDQ_ROT270_F VCADDQ_ROT90_F VCMPEQQ_F VCMPEQQ_N_F
71 VCMPGEQ_F VCMPGEQ_N_F VCMPGTQ_F VCMPGTQ_N_F VCMPLEQ_F
72 VCMPLEQ_N_F VCMPLTQ_F VCMPLTQ_N_F VCMPNEQ_F VCMPNEQ_N_F
73 VCMULQ_F VCMULQ_ROT180_F VCMULQ_ROT270_F VCMULQ_ROT90_F
74 VEORQ_F VMAXNMAQ_F VMAXNMAVQ_F VMAXNMQ_F VMAXNMVQ_F
75 VMINNMAQ_F VMINNMAVQ_F VMINNMQ_F VMINNMVQ_F VMULQ_F
76 VMULQ_N_F VORNQ_F VORRQ_F VSUBQ_F VADDLVAQ_U
77 VADDLVAQ_S VBICQ_N_U VBICQ_N_S VCTP8Q_M VCTP16Q_M
78 VCTP32Q_M VCTP64Q_M VCVTBQ_F16_F32 VCVTTQ_F16_F32
79 VMLALDAVQ_U VMLALDAVXQ_U VMLALDAVXQ_S VMLALDAVQ_S
80 VMLSLDAVQ_S VMLSLDAVXQ_S VMOVNBQ_U VMOVNBQ_S
81 VMOVNTQ_U VMOVNTQ_S VORRQ_N_S VORRQ_N_U VQDMULLBQ_N_S
82 VQDMULLBQ_S VQDMULLTQ_N_S VQDMULLTQ_S VQMOVNBQ_U
83 VQMOVNBQ_S VQMOVUNBQ_S VQMOVUNTQ_S VRMLALDAVHXQ_S
84 VRMLSLDAVHQ_S VRMLSLDAVHXQ_S VSHLLBQ_S
85 VSHLLBQ_U VSHLLTQ_U VSHLLTQ_S VQMOVNTQ_U VQMOVNTQ_S
86 VSHLLBQ_N_S VSHLLBQ_N_U VSHLLTQ_N_U VSHLLTQ_N_S
87 VRMLALDAVHQ_U VRMLALDAVHQ_S VMULLTQ_POLY_P
88 VMULLBQ_POLY_P VBICQ_M_N_S VBICQ_M_N_U VCMPEQQ_M_F
89 VCVTAQ_M_S VCVTAQ_M_U VCVTQ_M_TO_F_S VCVTQ_M_TO_F_U
90 VQRSHRNBQ_N_U VQRSHRNBQ_N_S VQRSHRUNBQ_N_S
91 VRMLALDAVHAQ_S VABAVQ_S VABAVQ_U VSHLCQ_S VSHLCQ_U
92 VRMLALDAVHAQ_U VABSQ_M_S VADDVAQ_P_S VADDVAQ_P_U
93 VCLSQ_M_S VCLZQ_M_S VCLZQ_M_U VCMPCSQ_M_N_U
94 VCMPCSQ_M_U VCMPEQQ_M_N_S VCMPEQQ_M_N_U VCMPEQQ_M_S
95 VCMPEQQ_M_U VCMPGEQ_M_N_S VCMPGEQ_M_S VCMPGTQ_M_N_S
96 VCMPGTQ_M_S VCMPHIQ_M_N_U VCMPHIQ_M_U VCMPLEQ_M_N_S
97 VCMPLEQ_M_S VCMPLTQ_M_N_S VCMPLTQ_M_S VCMPNEQ_M_N_S
98 VCMPNEQ_M_N_U VCMPNEQ_M_S VCMPNEQ_M_U VDUPQ_M_N_S
99 VDUPQ_M_N_U VDWDUPQ_N_U VDWDUPQ_WB_U VIWDUPQ_N_U
100 VIWDUPQ_WB_U VMAXAQ_M_S VMAXAVQ_P_S VMAXVQ_P_S
101 VMAXVQ_P_U VMINAQ_M_S VMINAVQ_P_S VMINVQ_P_S VMINVQ_P_U
102 VMLADAVAQ_S VMLADAVAQ_U VMLADAVQ_P_S VMLADAVQ_P_U
103 VMLADAVXQ_P_S VMLAQ_N_S VMLAQ_N_U VMLASQ_N_S VMLASQ_N_U
104 VMLSDAVQ_P_S VMLSDAVXQ_P_S VMVNQ_M_S VMVNQ_M_U
105 VNEGQ_M_S VPSELQ_S VPSELQ_U VQABSQ_M_S VQDMLAHQ_N_S
106 VQDMLAHQ_N_U VQNEGQ_M_S VQRDMLADHQ_S VQRDMLADHXQ_S
107 VQRDMLAHQ_N_S VQRDMLAHQ_N_U VQRDMLASHQ_N_S
108 VQRDMLASHQ_N_U VQRDMLSDHQ_S VQRDMLSDHXQ_S VQRSHLQ_M_N_S
109 VQRSHLQ_M_N_U VQSHLQ_M_R_S VQSHLQ_M_R_U VREV64Q_M_S
110 VREV64Q_M_U VRSHLQ_M_N_S VRSHLQ_M_N_U VSHLQ_M_R_S
111 VSHLQ_M_R_U VSLIQ_N_S VSLIQ_N_U VSRIQ_N_S VSRIQ_N_U
112 VQDMLSDHXQ_S VQDMLSDHQ_S VQDMLADHXQ_S VQDMLADHQ_S
113 VMLSDAVAXQ_S VMLSDAVAQ_S VMLADAVAXQ_S
114 VCMPGEQ_M_F VCMPGTQ_M_N_F VMLSLDAVQ_P_S VRMLALDAVHAXQ_S
115 VMLSLDAVXQ_P_S VFMAQ_F VMLSLDAVAQ_S VQSHRUNBQ_N_S
116 VQRSHRUNTQ_N_S VCMLAQ_F VMINNMAQ_M_F VFMASQ_N_F
117 VDUPQ_M_N_F VCMPGTQ_M_F VCMPLTQ_M_F VRMLSLDAVHQ_P_S
118 VQSHRUNTQ_N_S VABSQ_M_F VMAXNMAVQ_P_F VFMAQ_N_F
119 VRMLSLDAVHXQ_P_S VREV32Q_M_F VRMLSLDAVHAQ_S
120 VRMLSLDAVHAXQ_S VCMPLTQ_M_N_F VCMPNEQ_M_F VRNDAQ_M_F
121 VRNDPQ_M_F VADDLVAQ_P_S VQMOVUNBQ_M_S VCMPLEQ_M_F
122 VCMLAQ_ROT180_F VMLSLDAVAXQ_S VRNDXQ_M_F VFMSQ_F
123 VMINNMVQ_P_F VMAXNMVQ_P_F VPSELQ_F VCMLAQ_ROT90_F
124 VQMOVUNTQ_M_S VREV64Q_M_F VNEGQ_M_F VRNDMQ_M_F
125 VCMPLEQ_M_N_F VCMPGEQ_M_N_F VRNDNQ_M_F VMINNMAVQ_P_F
126 VCMPNEQ_M_N_F VRMLALDAVHQ_P_S VRMLALDAVHXQ_P_S
127 VCMPEQQ_M_N_F VCMLAQ_ROT270_F VMAXNMAQ_M_F VRNDQ_M_F
128 VMLALDAVQ_P_U VMLALDAVQ_P_S VQMOVNBQ_M_S VQMOVNBQ_M_U
129 VMOVLTQ_M_U VMOVLTQ_M_S VMOVNBQ_M_U VMOVNBQ_M_S
130 VRSHRNTQ_N_U VRSHRNTQ_N_S VORRQ_M_N_S VORRQ_M_N_U
131 VREV32Q_M_S VREV32Q_M_U VQRSHRNTQ_N_U VQRSHRNTQ_N_S
132 VMOVNTQ_M_U VMOVNTQ_M_S VMOVLBQ_M_U VMOVLBQ_M_S
133 VMLALDAVAQ_S VMLALDAVAQ_U VQSHRNBQ_N_U VQSHRNBQ_N_S
134 VSHRNBQ_N_U VSHRNBQ_N_S VRSHRNBQ_N_S VRSHRNBQ_N_U
135 VMLALDAVXQ_P_U VMLALDAVXQ_P_S VQMOVNTQ_M_U VQMOVNTQ_M_S
136 VMVNQ_M_N_U VMVNQ_M_N_S VQSHRNTQ_N_U VQSHRNTQ_N_S
137 VMLALDAVAXQ_S VMLALDAVAXQ_U VSHRNTQ_N_S VSHRNTQ_N_U
138 VCVTBQ_M_F16_F32 VCVTBQ_M_F32_F16 VCVTTQ_M_F16_F32
139 VCVTTQ_M_F32_F16 VCVTMQ_M_S VCVTMQ_M_U VCVTNQ_M_S
140 VCVTPQ_M_S VCVTPQ_M_U VCVTQ_M_N_FROM_F_S VCVTNQ_M_U
141 VREV16Q_M_S VREV16Q_M_U VREV32Q_M VCVTQ_M_FROM_F_U
142 VCVTQ_M_FROM_F_S VRMLALDAVHQ_P_U VADDLVAQ_P_U
143 VCVTQ_M_N_FROM_F_U VQSHLUQ_M_N_S VABAVQ_P_S
144 VABAVQ_P_U VSHLQ_M_S VSHLQ_M_U VSRIQ_M_N_S
145 VSRIQ_M_N_U VSUBQ_M_U VSUBQ_M_S VCVTQ_M_N_TO_F_U
148 (define_mode_attr MVE_CNVT [(V8HI "V8HF") (V4SI "V4SF")
149 (V8HF "V8HI") (V4SF "V4SI")])
151 (define_int_attr supf [(VCVTQ_TO_F_S "s") (VCVTQ_TO_F_U "u") (VREV16Q_S "s")
152 (VREV16Q_U "u") (VMVNQ_N_S "s") (VMVNQ_N_U "u")
153 (VCVTAQ_U "u") (VCVTAQ_S "s") (VREV64Q_S "s")
154 (VREV64Q_U "u") (VMVNQ_S "s") (VMVNQ_U "u")
155 (VDUPQ_N_U "u") (VDUPQ_N_S"s") (VADDVQ_S "s")
156 (VADDVQ_U "u") (VADDVQ_S "s") (VADDVQ_U "u")
157 (VMOVLTQ_U "u") (VMOVLTQ_S "s") (VMOVLBQ_S "s")
158 (VMOVLBQ_U "u") (VCVTQ_FROM_F_S "s") (VCVTQ_FROM_F_U "u")
159 (VCVTPQ_S "s") (VCVTPQ_U "u") (VCVTNQ_S "s")
160 (VCVTNQ_U "u") (VCVTMQ_S "s") (VCVTMQ_U "u")
161 (VCLZQ_U "u") (VCLZQ_S "s") (VREV32Q_U "u")
162 (VREV32Q_S "s") (VADDLVQ_U "u") (VADDLVQ_S "s")
163 (VCVTQ_N_TO_F_S "s") (VCVTQ_N_TO_F_U "u")
164 (VCREATEQ_U "u") (VCREATEQ_S "s") (VSHRQ_N_S "s")
165 (VSHRQ_N_U "u") (VCVTQ_N_FROM_F_S "s") (VSHLQ_U "u")
166 (VCVTQ_N_FROM_F_U "u") (VADDLVQ_P_S "s") (VSHLQ_S "s")
167 (VADDLVQ_P_U "u") (VCMPNEQ_U "u") (VCMPNEQ_S "s")
168 (VABDQ_M_S "s") (VABDQ_M_U "u") (VABDQ_S "s")
169 (VABDQ_U "u") (VADDQ_N_S "s") (VADDQ_N_U "u")
170 (VADDVQ_P_S "s") (VADDVQ_P_U "u") (VANDQ_S "s")
171 (VANDQ_U "u") (VBICQ_S "s") (VBICQ_U "u")
172 (VBRSRQ_N_S "s") (VBRSRQ_N_U "u") (VCADDQ_ROT270_S "s")
173 (VCADDQ_ROT270_U "u") (VCADDQ_ROT90_S "s")
174 (VCMPEQQ_S "s") (VCMPEQQ_U "u") (VCADDQ_ROT90_U "u")
175 (VCMPEQQ_N_S "s") (VCMPEQQ_N_U "u") (VCMPNEQ_N_S "s")
176 (VCMPNEQ_N_U "u") (VEORQ_S "s") (VEORQ_U "u")
177 (VHADDQ_N_S "s") (VHADDQ_N_U "u") (VHADDQ_S "s")
178 (VHADDQ_U "u") (VHSUBQ_N_S "s") (VHSUBQ_N_U "u")
179 (VHSUBQ_S "s") (VMAXQ_S "s") (VMAXQ_U "u") (VHSUBQ_U "u")
180 (VMAXVQ_S "s") (VMAXVQ_U "u") (VMINQ_S "s") (VMINQ_U "u")
181 (VMINVQ_S "s") (VMINVQ_U "u") (VMLADAVQ_S "s")
182 (VMLADAVQ_U "u") (VMULHQ_S "s") (VMULHQ_U "u")
183 (VMULLBQ_INT_S "s") (VMULLBQ_INT_U "u") (VQADDQ_S "s")
184 (VMULLTQ_INT_S "s") (VMULLTQ_INT_U "u") (VQADDQ_U "u")
185 (VMULQ_N_S "s") (VMULQ_N_U "u") (VMULQ_S "s")
186 (VMULQ_U "u") (VORNQ_S "s") (VORNQ_U "u") (VORRQ_S "s")
187 (VORRQ_U "u") (VQADDQ_N_S "s") (VQADDQ_N_U "u")
188 (VQRSHLQ_N_S "s") (VQRSHLQ_N_U "u") (VQRSHLQ_S "s")
189 (VQRSHLQ_U "u") (VQSHLQ_N_S "s") (VQSHLQ_N_U "u")
190 (VQSHLQ_R_S "s") (VQSHLQ_R_U "u") (VQSHLQ_S "s")
191 (VQSHLQ_U "u") (VQSUBQ_N_S "s") (VQSUBQ_N_U "u")
192 (VQSUBQ_S "s") (VQSUBQ_U "u") (VRHADDQ_S "s")
193 (VRHADDQ_U "u") (VRMULHQ_S "s") (VRMULHQ_U "u")
194 (VRSHLQ_N_S "s") (VRSHLQ_N_U "u") (VRSHLQ_S "s")
195 (VRSHLQ_U "u") (VRSHRQ_N_S "s") (VRSHRQ_N_U "u")
196 (VSHLQ_N_S "s") (VSHLQ_N_U "u") (VSHLQ_R_S "s")
197 (VSHLQ_R_U "u") (VSUBQ_N_S "s") (VSUBQ_N_U "u")
198 (VSUBQ_S "s") (VSUBQ_U "u") (VADDVAQ_S "s")
199 (VADDVAQ_U "u") (VADDLVAQ_S "s") (VADDLVAQ_U "u")
200 (VBICQ_N_S "s") (VBICQ_N_U "u") (VMLALDAVQ_U "u")
201 (VMLALDAVQ_S "s") (VMLALDAVXQ_U "u") (VMLALDAVXQ_S "s")
202 (VMOVNBQ_U "u") (VMOVNBQ_S "s") (VMOVNTQ_U "u")
203 (VMOVNTQ_S "s") (VORRQ_N_S "s") (VORRQ_N_U "u")
204 (VQMOVNBQ_U "u") (VQMOVNBQ_S "s") (VQMOVNTQ_S "s")
205 (VQMOVNTQ_U "u") (VSHLLBQ_N_U "u") (VSHLLBQ_N_S "s")
206 (VSHLLTQ_N_U "u") (VSHLLTQ_N_S "s") (VRMLALDAVHQ_U "u")
207 (VRMLALDAVHQ_S "s") (VBICQ_M_N_S "s") (VBICQ_M_N_U "u")
208 (VCVTAQ_M_S "s") (VCVTAQ_M_U "u") (VCVTQ_M_TO_F_S "s")
209 (VCVTQ_M_TO_F_U "u") (VQRSHRNBQ_N_S "s")
210 (VQRSHRNBQ_N_U "u") (VABAVQ_S "s") (VABAVQ_U "u")
211 (VRMLALDAVHAQ_U "u") (VRMLALDAVHAQ_S "s") (VSHLCQ_S "s")
212 (VSHLCQ_U "u") (VADDVAQ_P_S "s") (VADDVAQ_P_U "u")
213 (VCLZQ_M_S "s") (VCLZQ_M_U "u") (VCMPEQQ_M_N_S "s")
214 (VCMPEQQ_M_N_U "u") (VCMPEQQ_M_S "s") (VCMPEQQ_M_U "u")
215 (VCMPNEQ_M_N_S "s") (VCMPNEQ_M_N_U "u") (VCMPNEQ_M_S "s")
216 (VCMPNEQ_M_U "u") (VDUPQ_M_N_S "s") (VDUPQ_M_N_U "u")
217 (VMAXVQ_P_S "s") (VMAXVQ_P_U "u") (VMINVQ_P_S "s")
218 (VMINVQ_P_U "u") (VMLADAVAQ_S "s") (VMLADAVAQ_U "u")
219 (VMLADAVQ_P_S "s") (VMLADAVQ_P_U "u") (VMLAQ_N_S "s")
220 (VMLAQ_N_U "u") (VMLASQ_N_S "s") (VMLASQ_N_U "u")
221 (VMVNQ_M_S "s") (VMVNQ_M_U "u") (VPSELQ_S "s")
222 (VPSELQ_U "u") (VQDMLAHQ_N_S "s") (VQDMLAHQ_N_U "u")
223 (VQRDMLAHQ_N_S "s") (VQRDMLAHQ_N_U "u")
224 (VQRDMLASHQ_N_S "s") (VQRDMLASHQ_N_U "u")
225 (VQRSHLQ_M_N_S "s") (VQRSHLQ_M_N_U "u")
226 (VQSHLQ_M_R_S "s") (VQSHLQ_M_R_U "u") (VSRIQ_N_S "s")
227 (VREV64Q_M_S "s") (VREV64Q_M_U "u") (VSRIQ_N_U "u")
228 (VRSHLQ_M_N_S "s") (VRSHLQ_M_N_U "u") (VSHLQ_M_R_S "s")
229 (VSHLQ_M_R_U "u") (VSLIQ_N_S "s") (VSLIQ_N_U "u")
230 (VMLALDAVQ_P_S "s") (VQMOVNBQ_M_S "s") (VMOVLTQ_M_S "s")
231 (VMOVNBQ_M_S "s") (VRSHRNTQ_N_S "s") (VORRQ_M_N_S "s")
232 (VREV32Q_M_S "s") (VQRSHRNTQ_N_S "s") (VMOVNTQ_M_S "s")
233 (VMOVLBQ_M_S "s") (VMLALDAVAQ_S "s") (VQSHRNBQ_N_S "s")
234 (VSHRNBQ_N_S "s") (VRSHRNBQ_N_S "s") (VMLALDAVXQ_P_S "s")
235 (VQMOVNTQ_M_S "s") (VMVNQ_M_N_S "s") (VQSHRNTQ_N_S "s")
236 (VMLALDAVAXQ_S "s") (VSHRNTQ_N_S "s") (VMLALDAVQ_P_U "u")
237 (VQMOVNBQ_M_U "u") (VMOVLTQ_M_U "u") (VMOVNBQ_M_U "u")
238 (VRSHRNTQ_N_U "u") (VORRQ_M_N_U "u") (VREV32Q_M_U "u")
239 (VREV16Q_M_S "s") (VREV16Q_M_U "u")
240 (VQRSHRNTQ_N_U "u") (VMOVNTQ_M_U "u") (VMOVLBQ_M_U "u")
241 (VMLALDAVAQ_U "u") (VQSHRNBQ_N_U "u") (VSHRNBQ_N_U "u")
242 (VRSHRNBQ_N_U "u") (VMLALDAVXQ_P_U "u")
243 (VMVNQ_M_N_U "u") (VQSHRNTQ_N_U "u") (VMLALDAVAXQ_U "u")
244 (VQMOVNTQ_M_U "u") (VSHRNTQ_N_U "u") (VCVTMQ_M_S "s")
245 (VCVTMQ_M_U "u") (VCVTNQ_M_S "s") (VCVTNQ_M_U "u")
246 (VCVTPQ_M_S "s") (VCVTPQ_M_U "u") (VADDLVAQ_P_S "s")
247 (VCVTQ_M_N_FROM_F_U "u") (VCVTQ_M_FROM_F_S "s")
248 (VCVTQ_M_FROM_F_U "u") (VRMLALDAVHQ_P_U "u")
249 (VRMLALDAVHQ_P_S "s") (VADDLVAQ_P_U "u")
250 (VCVTQ_M_N_FROM_F_S "s") (VABAVQ_P_U "u")
251 (VABAVQ_P_S "s") (VSHLQ_M_S "s") (VSHLQ_M_U "u")
252 (VSRIQ_M_N_S "s") (VSRIQ_M_N_U "u") (VSUBQ_M_S "s")
253 (VSUBQ_M_U "u") (VCVTQ_M_N_TO_F_S "s")
254 (VCVTQ_M_N_TO_F_U "u")])
256 (define_int_attr mode1 [(VCTP8Q "8") (VCTP16Q "16") (VCTP32Q "32")
257 (VCTP64Q "64") (VCTP8Q_M "8") (VCTP16Q_M "16")
258 (VCTP32Q_M "32") (VCTP64Q_M "64")])
259 (define_mode_attr MVE_pred2 [(V16QI "mve_imm_8") (V8HI "mve_imm_16")
260 (V4SI "mve_imm_32")])
261 (define_mode_attr MVE_constraint2 [(V16QI "Rb") (V8HI "Rd") (V4SI "Rf")])
262 (define_mode_attr MVE_LANES [(V16QI "16") (V8HI "8") (V4SI "4")])
263 (define_mode_attr MVE_constraint [ (V16QI "Ra") (V8HI "Rc") (V4SI "Re")])
264 (define_mode_attr MVE_pred [ (V16QI "mve_imm_7") (V8HI "mve_imm_15")
265 (V4SI "mve_imm_31")])
266 (define_mode_attr MVE_constraint3 [ (V8HI "Rb") (V4SI "Rd")])
267 (define_mode_attr MVE_pred3 [ (V8HI "mve_imm_8") (V4SI "mve_imm_16")])
269 (define_mode_attr MVE_constraint1 [ (V8HI "Ra") (V4SI "Rc")])
270 (define_mode_attr MVE_pred1 [ (V8HI "mve_imm_7") (V4SI "mve_imm_15")])
272 (define_int_iterator VCVTQ_TO_F [VCVTQ_TO_F_S VCVTQ_TO_F_U])
273 (define_int_iterator VMVNQ_N [VMVNQ_N_U VMVNQ_N_S])
274 (define_int_iterator VREV64Q [VREV64Q_S VREV64Q_U])
275 (define_int_iterator VCVTQ_FROM_F [VCVTQ_FROM_F_S VCVTQ_FROM_F_U])
276 (define_int_iterator VREV16Q [VREV16Q_U VREV16Q_S])
277 (define_int_iterator VCVTAQ [VCVTAQ_U VCVTAQ_S])
278 (define_int_iterator VMVNQ [VMVNQ_U VMVNQ_S])
279 (define_int_iterator VDUPQ_N [VDUPQ_N_U VDUPQ_N_S])
280 (define_int_iterator VCLZQ [VCLZQ_U VCLZQ_S])
281 (define_int_iterator VADDVQ [VADDVQ_U VADDVQ_S])
282 (define_int_iterator VREV32Q [VREV32Q_U VREV32Q_S])
283 (define_int_iterator VMOVLBQ [VMOVLBQ_S VMOVLBQ_U])
284 (define_int_iterator VMOVLTQ [VMOVLTQ_U VMOVLTQ_S])
285 (define_int_iterator VCVTPQ [VCVTPQ_S VCVTPQ_U])
286 (define_int_iterator VCVTNQ [VCVTNQ_S VCVTNQ_U])
287 (define_int_iterator VCVTMQ [VCVTMQ_S VCVTMQ_U])
288 (define_int_iterator VADDLVQ [VADDLVQ_U VADDLVQ_S])
289 (define_int_iterator VCTPQ [VCTP8Q VCTP16Q VCTP32Q VCTP64Q])
290 (define_int_iterator VCTPQ_M [VCTP8Q_M VCTP16Q_M VCTP32Q_M VCTP64Q_M])
291 (define_int_iterator VCVTQ_N_TO_F [VCVTQ_N_TO_F_S VCVTQ_N_TO_F_U])
292 (define_int_iterator VCREATEQ [VCREATEQ_U VCREATEQ_S])
293 (define_int_iterator VSHRQ_N [VSHRQ_N_S VSHRQ_N_U])
294 (define_int_iterator VCVTQ_N_FROM_F [VCVTQ_N_FROM_F_S VCVTQ_N_FROM_F_U])
295 (define_int_iterator VADDLVQ_P [VADDLVQ_P_S VADDLVQ_P_U])
296 (define_int_iterator VCMPNEQ [VCMPNEQ_U VCMPNEQ_S])
297 (define_int_iterator VSHLQ [VSHLQ_S VSHLQ_U])
298 (define_int_iterator VABDQ [VABDQ_S VABDQ_U])
299 (define_int_iterator VADDQ_N [VADDQ_N_S VADDQ_N_U])
300 (define_int_iterator VADDVAQ [VADDVAQ_S VADDVAQ_U])
301 (define_int_iterator VADDVQ_P [VADDVQ_P_U VADDVQ_P_S])
302 (define_int_iterator VANDQ [VANDQ_U VANDQ_S])
303 (define_int_iterator VBICQ [VBICQ_S VBICQ_U])
304 (define_int_iterator VBRSRQ_N [VBRSRQ_N_U VBRSRQ_N_S])
305 (define_int_iterator VCADDQ_ROT270 [VCADDQ_ROT270_S VCADDQ_ROT270_U])
306 (define_int_iterator VCADDQ_ROT90 [VCADDQ_ROT90_U VCADDQ_ROT90_S])
307 (define_int_iterator VCMPEQQ [VCMPEQQ_U VCMPEQQ_S])
308 (define_int_iterator VCMPEQQ_N [VCMPEQQ_N_S VCMPEQQ_N_U])
309 (define_int_iterator VCMPNEQ_N [VCMPNEQ_N_U VCMPNEQ_N_S])
310 (define_int_iterator VEORQ [VEORQ_U VEORQ_S])
311 (define_int_iterator VHADDQ [VHADDQ_S VHADDQ_U])
312 (define_int_iterator VHADDQ_N [VHADDQ_N_U VHADDQ_N_S])
313 (define_int_iterator VHSUBQ [VHSUBQ_S VHSUBQ_U])
314 (define_int_iterator VHSUBQ_N [VHSUBQ_N_U VHSUBQ_N_S])
315 (define_int_iterator VMAXQ [VMAXQ_U VMAXQ_S])
316 (define_int_iterator VMAXVQ [VMAXVQ_U VMAXVQ_S])
317 (define_int_iterator VMINQ [VMINQ_S VMINQ_U])
318 (define_int_iterator VMINVQ [VMINVQ_U VMINVQ_S])
319 (define_int_iterator VMLADAVQ [VMLADAVQ_U VMLADAVQ_S])
320 (define_int_iterator VMULHQ [VMULHQ_S VMULHQ_U])
321 (define_int_iterator VMULLBQ_INT [VMULLBQ_INT_U VMULLBQ_INT_S])
322 (define_int_iterator VMULLTQ_INT [VMULLTQ_INT_U VMULLTQ_INT_S])
323 (define_int_iterator VMULQ [VMULQ_U VMULQ_S])
324 (define_int_iterator VMULQ_N [VMULQ_N_U VMULQ_N_S])
325 (define_int_iterator VORNQ [VORNQ_U VORNQ_S])
326 (define_int_iterator VORRQ [VORRQ_S VORRQ_U])
327 (define_int_iterator VQADDQ [VQADDQ_U VQADDQ_S])
328 (define_int_iterator VQADDQ_N [VQADDQ_N_S VQADDQ_N_U])
329 (define_int_iterator VQRSHLQ [VQRSHLQ_S VQRSHLQ_U])
330 (define_int_iterator VQRSHLQ_N [VQRSHLQ_N_S VQRSHLQ_N_U])
331 (define_int_iterator VQSHLQ [VQSHLQ_S VQSHLQ_U])
332 (define_int_iterator VQSHLQ_N [VQSHLQ_N_S VQSHLQ_N_U])
333 (define_int_iterator VQSHLQ_R [VQSHLQ_R_U VQSHLQ_R_S])
334 (define_int_iterator VQSUBQ [VQSUBQ_U VQSUBQ_S])
335 (define_int_iterator VQSUBQ_N [VQSUBQ_N_S VQSUBQ_N_U])
336 (define_int_iterator VRHADDQ [VRHADDQ_S VRHADDQ_U])
337 (define_int_iterator VRMULHQ [VRMULHQ_S VRMULHQ_U])
338 (define_int_iterator VRSHLQ [VRSHLQ_S VRSHLQ_U])
339 (define_int_iterator VRSHLQ_N [VRSHLQ_N_U VRSHLQ_N_S])
340 (define_int_iterator VRSHRQ_N [VRSHRQ_N_S VRSHRQ_N_U])
341 (define_int_iterator VSHLQ_N [VSHLQ_N_U VSHLQ_N_S])
342 (define_int_iterator VSHLQ_R [VSHLQ_R_S VSHLQ_R_U])
343 (define_int_iterator VSUBQ [VSUBQ_S VSUBQ_U])
344 (define_int_iterator VSUBQ_N [VSUBQ_N_S VSUBQ_N_U])
345 (define_int_iterator VADDLVAQ [VADDLVAQ_S VADDLVAQ_U])
346 (define_int_iterator VBICQ_N [VBICQ_N_S VBICQ_N_U])
347 (define_int_iterator VMLALDAVQ [VMLALDAVQ_U VMLALDAVQ_S])
348 (define_int_iterator VMLALDAVXQ [VMLALDAVXQ_U VMLALDAVXQ_S])
349 (define_int_iterator VMOVNBQ [VMOVNBQ_U VMOVNBQ_S])
350 (define_int_iterator VMOVNTQ [VMOVNTQ_S VMOVNTQ_U])
351 (define_int_iterator VORRQ_N [VORRQ_N_U VORRQ_N_S])
352 (define_int_iterator VQMOVNBQ [VQMOVNBQ_U VQMOVNBQ_S])
353 (define_int_iterator VQMOVNTQ [VQMOVNTQ_U VQMOVNTQ_S])
354 (define_int_iterator VSHLLBQ_N [VSHLLBQ_N_S VSHLLBQ_N_U])
355 (define_int_iterator VSHLLTQ_N [VSHLLTQ_N_U VSHLLTQ_N_S])
356 (define_int_iterator VRMLALDAVHQ [VRMLALDAVHQ_U VRMLALDAVHQ_S])
357 (define_int_iterator VBICQ_M_N [VBICQ_M_N_S VBICQ_M_N_U])
358 (define_int_iterator VCVTAQ_M [VCVTAQ_M_S VCVTAQ_M_U])
359 (define_int_iterator VCVTQ_M_TO_F [VCVTQ_M_TO_F_S VCVTQ_M_TO_F_U])
360 (define_int_iterator VQRSHRNBQ_N [VQRSHRNBQ_N_U VQRSHRNBQ_N_S])
361 (define_int_iterator VABAVQ [VABAVQ_S VABAVQ_U])
362 (define_int_iterator VSHLCQ [VSHLCQ_S VSHLCQ_U])
363 (define_int_iterator VRMLALDAVHAQ [VRMLALDAVHAQ_S VRMLALDAVHAQ_U])
364 (define_int_iterator VADDVAQ_P [VADDVAQ_P_S VADDVAQ_P_U])
365 (define_int_iterator VCLZQ_M [VCLZQ_M_S VCLZQ_M_U])
366 (define_int_iterator VCMPEQQ_M_N [VCMPEQQ_M_N_S VCMPEQQ_M_N_U])
367 (define_int_iterator VCMPEQQ_M [VCMPEQQ_M_S VCMPEQQ_M_U])
368 (define_int_iterator VCMPNEQ_M_N [VCMPNEQ_M_N_S VCMPNEQ_M_N_U])
369 (define_int_iterator VCMPNEQ_M [VCMPNEQ_M_S VCMPNEQ_M_U])
370 (define_int_iterator VDUPQ_M_N [VDUPQ_M_N_S VDUPQ_M_N_U])
371 (define_int_iterator VMAXVQ_P [VMAXVQ_P_S VMAXVQ_P_U])
372 (define_int_iterator VMINVQ_P [VMINVQ_P_S VMINVQ_P_U])
373 (define_int_iterator VMLADAVAQ [VMLADAVAQ_S VMLADAVAQ_U])
374 (define_int_iterator VMLADAVQ_P [VMLADAVQ_P_S VMLADAVQ_P_U])
375 (define_int_iterator VMLAQ_N [VMLAQ_N_S VMLAQ_N_U])
376 (define_int_iterator VMLASQ_N [VMLASQ_N_S VMLASQ_N_U])
377 (define_int_iterator VMVNQ_M [VMVNQ_M_S VMVNQ_M_U])
378 (define_int_iterator VPSELQ [VPSELQ_S VPSELQ_U])
379 (define_int_iterator VQDMLAHQ_N [VQDMLAHQ_N_S VQDMLAHQ_N_U])
380 (define_int_iterator VQRDMLAHQ_N [VQRDMLAHQ_N_S VQRDMLAHQ_N_U])
381 (define_int_iterator VQRDMLASHQ_N [VQRDMLASHQ_N_S VQRDMLASHQ_N_U])
382 (define_int_iterator VQRSHLQ_M_N [VQRSHLQ_M_N_S VQRSHLQ_M_N_U])
383 (define_int_iterator VQSHLQ_M_R [VQSHLQ_M_R_S VQSHLQ_M_R_U])
384 (define_int_iterator VREV64Q_M [VREV64Q_M_S VREV64Q_M_U])
385 (define_int_iterator VRSHLQ_M_N [VRSHLQ_M_N_S VRSHLQ_M_N_U])
386 (define_int_iterator VSHLQ_M_R [VSHLQ_M_R_S VSHLQ_M_R_U])
387 (define_int_iterator VSLIQ_N [VSLIQ_N_S VSLIQ_N_U])
388 (define_int_iterator VSRIQ_N [VSRIQ_N_S VSRIQ_N_U])
389 (define_int_iterator VMLALDAVQ_P [VMLALDAVQ_P_U VMLALDAVQ_P_S])
390 (define_int_iterator VQMOVNBQ_M [VQMOVNBQ_M_S VQMOVNBQ_M_U])
391 (define_int_iterator VMOVLTQ_M [VMOVLTQ_M_U VMOVLTQ_M_S])
392 (define_int_iterator VMOVNBQ_M [VMOVNBQ_M_U VMOVNBQ_M_S])
393 (define_int_iterator VRSHRNTQ_N [VRSHRNTQ_N_U VRSHRNTQ_N_S])
394 (define_int_iterator VORRQ_M_N [VORRQ_M_N_S VORRQ_M_N_U])
395 (define_int_iterator VREV32Q_M [VREV32Q_M_S VREV32Q_M_U])
396 (define_int_iterator VREV16Q_M [VREV16Q_M_S VREV16Q_M_U])
397 (define_int_iterator VQRSHRNTQ_N [VQRSHRNTQ_N_U VQRSHRNTQ_N_S])
398 (define_int_iterator VMOVNTQ_M [VMOVNTQ_M_U VMOVNTQ_M_S])
399 (define_int_iterator VMOVLBQ_M [VMOVLBQ_M_U VMOVLBQ_M_S])
400 (define_int_iterator VMLALDAVAQ [VMLALDAVAQ_S VMLALDAVAQ_U])
401 (define_int_iterator VQSHRNBQ_N [VQSHRNBQ_N_U VQSHRNBQ_N_S])
402 (define_int_iterator VSHRNBQ_N [VSHRNBQ_N_U VSHRNBQ_N_S])
403 (define_int_iterator VRSHRNBQ_N [VRSHRNBQ_N_S VRSHRNBQ_N_U])
404 (define_int_iterator VMLALDAVXQ_P [VMLALDAVXQ_P_U VMLALDAVXQ_P_S])
405 (define_int_iterator VQMOVNTQ_M [VQMOVNTQ_M_U VQMOVNTQ_M_S])
406 (define_int_iterator VMVNQ_M_N [VMVNQ_M_N_U VMVNQ_M_N_S])
407 (define_int_iterator VQSHRNTQ_N [VQSHRNTQ_N_U VQSHRNTQ_N_S])
408 (define_int_iterator VMLALDAVAXQ [VMLALDAVAXQ_S VMLALDAVAXQ_U])
409 (define_int_iterator VSHRNTQ_N [VSHRNTQ_N_S VSHRNTQ_N_U])
410 (define_int_iterator VCVTMQ_M [VCVTMQ_M_S VCVTMQ_M_U])
411 (define_int_iterator VCVTNQ_M [VCVTNQ_M_S VCVTNQ_M_U])
412 (define_int_iterator VCVTPQ_M [VCVTPQ_M_S VCVTPQ_M_U])
413 (define_int_iterator VCVTQ_M_N_FROM_F [VCVTQ_M_N_FROM_F_S VCVTQ_M_N_FROM_F_U])
414 (define_int_iterator VCVTQ_M_FROM_F [VCVTQ_M_FROM_F_U VCVTQ_M_FROM_F_S])
415 (define_int_iterator VRMLALDAVHQ_P [VRMLALDAVHQ_P_S VRMLALDAVHQ_P_U])
416 (define_int_iterator VADDLVAQ_P [VADDLVAQ_P_U VADDLVAQ_P_S])
417 (define_int_iterator VABAVQ_P [VABAVQ_P_S VABAVQ_P_U])
418 (define_int_iterator VSHLQ_M [VSHLQ_M_S VSHLQ_M_U])
419 (define_int_iterator VSRIQ_M_N [VSRIQ_M_N_S VSRIQ_M_N_U])
420 (define_int_iterator VSUBQ_M [VSUBQ_M_U VSUBQ_M_S])
421 (define_int_iterator VCVTQ_M_N_TO_F [VCVTQ_M_N_TO_F_U VCVTQ_M_N_TO_F_S])
423 (define_insn "*mve_mov<mode>"
424 [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w,w,r,w,Us")
425 (match_operand:MVE_types 1 "general_operand" "w,r,w,Dn,Usi,r,Dm,w"))]
426 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
428 if (which_alternative == 3 || which_alternative == 6)
431 static char templ[40];
433 is_valid = simd_immediate_valid_for_move (operands[1], <MODE>mode,
434 &operands[1], &width);
436 gcc_assert (is_valid != 0);
439 return "vmov.f32\t%q0, %1 @ <mode>";
441 sprintf (templ, "vmov.i%d\t%%q0, %%x1 @ <mode>", width);
444 switch (which_alternative)
447 return "vmov\t%q0, %q1";
449 return "vmov\t%e0, %Q1, %R1 @ <mode>\;vmov\t%f0, %J1, %K1";
451 return "vmov\t%Q0, %R0, %e1 @ <mode>\;vmov\t%J0, %K0, %f1";
453 if ((TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))
454 || (MEM_P (operands[1])
455 && GET_CODE (XEXP (operands[1], 0)) == LABEL_REF))
456 return output_move_neon (operands);
458 return "vldrb.8 %q0, %E1";
460 return output_move_neon (operands);
462 return "vstrb.8 %q1, %E0";
468 [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,mve_move,mve_move,mve_store")
469 (set_attr "length" "4,8,8,4,8,8,4,4")
470 (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*")
471 (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*")])
473 (define_insn "*mve_mov<mode>"
474 [(set (match_operand:MVE_types 0 "s_register_operand" "=w,w")
475 (vec_duplicate:MVE_types
476 (match_operand:SI 1 "nonmemory_operand" "r,i")))]
477 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
479 if (which_alternative == 0)
480 return "vdup.<V_sz_elem>\t%q0, %1";
481 return "vmov.<V_sz_elem>\t%q0, %1";
483 [(set_attr "length" "4,4")
484 (set_attr "type" "mve_move,mve_move")])
489 (define_insn "mve_vst4q<mode>"
490 [(set (match_operand:XI 0 "neon_struct_operand" "=Um")
491 (unspec:XI [(match_operand:XI 1 "s_register_operand" "w")
492 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
498 int regno = REGNO (operands[1]);
499 ops[0] = gen_rtx_REG (TImode, regno);
500 ops[1] = gen_rtx_REG (TImode, regno+4);
501 ops[2] = gen_rtx_REG (TImode, regno+8);
502 ops[3] = gen_rtx_REG (TImode, regno+12);
503 rtx reg = operands[0];
504 while (reg && !REG_P (reg))
506 gcc_assert (REG_P (reg));
508 ops[5] = operands[0];
509 /* Here in first three instructions data is stored to ops[4]'s location but
510 in the fourth instruction data is stored to operands[0], this is to
511 support the writeback. */
512 output_asm_insn ("vst40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
513 "vst41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
514 "vst42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
515 "vst43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
518 [(set_attr "length" "16")])
523 (define_insn "mve_vrndq_m_f<mode>"
525 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
526 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
527 (match_operand:MVE_0 2 "s_register_operand" "w")
528 (match_operand:HI 3 "vpr_register_operand" "Up")]
531 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
532 "vpst\;vrintzt.f%#<V_sz_elem> %q0, %q2"
533 [(set_attr "type" "mve_move")
534 (set_attr "length""8")])
539 (define_insn "mve_vrndxq_f<mode>"
541 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
542 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
545 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
546 "vrintx.f%#<V_sz_elem> %q0, %q1"
547 [(set_attr "type" "mve_move")
553 (define_insn "mve_vrndq_f<mode>"
555 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
556 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
559 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
560 "vrintz.f%#<V_sz_elem> %q0, %q1"
561 [(set_attr "type" "mve_move")
567 (define_insn "mve_vrndpq_f<mode>"
569 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
570 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
573 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
574 "vrintp.f%#<V_sz_elem> %q0, %q1"
575 [(set_attr "type" "mve_move")
581 (define_insn "mve_vrndnq_f<mode>"
583 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
584 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
587 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
588 "vrintn.f%#<V_sz_elem> %q0, %q1"
589 [(set_attr "type" "mve_move")
595 (define_insn "mve_vrndmq_f<mode>"
597 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
598 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
601 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
602 "vrintm.f%#<V_sz_elem> %q0, %q1"
603 [(set_attr "type" "mve_move")
609 (define_insn "mve_vrndaq_f<mode>"
611 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
612 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
615 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
616 "vrinta.f%#<V_sz_elem> %q0, %q1"
617 [(set_attr "type" "mve_move")
623 (define_insn "mve_vrev64q_f<mode>"
625 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
626 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
629 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
630 "vrev64.%#<V_sz_elem> %q0, %q1"
631 [(set_attr "type" "mve_move")
637 (define_insn "mve_vnegq_f<mode>"
639 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
640 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
643 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
644 "vneg.f%#<V_sz_elem> %q0, %q1"
645 [(set_attr "type" "mve_move")
651 (define_insn "mve_vdupq_n_f<mode>"
653 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
654 (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
657 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
658 "vdup.%#<V_sz_elem> %q0, %1"
659 [(set_attr "type" "mve_move")
665 (define_insn "mve_vabsq_f<mode>"
667 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
668 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
671 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
672 "vabs.f%#<V_sz_elem> %q0, %q1"
673 [(set_attr "type" "mve_move")
679 (define_insn "mve_vrev32q_fv8hf"
681 (set (match_operand:V8HF 0 "s_register_operand" "=w")
682 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")]
685 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
687 [(set_attr "type" "mve_move")
692 (define_insn "mve_vcvttq_f32_f16v4sf"
694 (set (match_operand:V4SF 0 "s_register_operand" "=w")
695 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
698 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
699 "vcvtt.f32.f16 %q0, %q1"
700 [(set_attr "type" "mve_move")
706 (define_insn "mve_vcvtbq_f32_f16v4sf"
708 (set (match_operand:V4SF 0 "s_register_operand" "=w")
709 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
712 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
713 "vcvtb.f32.f16 %q0, %q1"
714 [(set_attr "type" "mve_move")
718 ;; [vcvtq_to_f_s, vcvtq_to_f_u])
720 (define_insn "mve_vcvtq_to_f_<supf><mode>"
722 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
723 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
726 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
727 "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q1"
728 [(set_attr "type" "mve_move")
732 ;; [vrev64q_u, vrev64q_s])
734 (define_insn "mve_vrev64q_<supf><mode>"
736 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
737 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
741 "vrev64.%#<V_sz_elem> %q0, %q1"
742 [(set_attr "type" "mve_move")
746 ;; [vcvtq_from_f_s, vcvtq_from_f_u])
748 (define_insn "mve_vcvtq_from_f_<supf><mode>"
750 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
751 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
754 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
755 "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
756 [(set_attr "type" "mve_move")
760 (define_insn "mve_vqnegq_s<mode>"
762 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
763 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
767 "vqneg.s%#<V_sz_elem> %q0, %q1"
768 [(set_attr "type" "mve_move")
774 (define_insn "mve_vqabsq_s<mode>"
776 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
777 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
781 "vqabs.s%#<V_sz_elem> %q0, %q1"
782 [(set_attr "type" "mve_move")
788 (define_insn "mve_vnegq_s<mode>"
790 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
791 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
795 "vneg.s%#<V_sz_elem> %q0, %q1"
796 [(set_attr "type" "mve_move")
800 ;; [vmvnq_u, vmvnq_s])
802 (define_insn "mve_vmvnq_<supf><mode>"
804 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
805 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
810 [(set_attr "type" "mve_move")
814 ;; [vdupq_n_u, vdupq_n_s])
816 (define_insn "mve_vdupq_n_<supf><mode>"
818 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
819 (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
823 "vdup.%#<V_sz_elem> %q0, %1"
824 [(set_attr "type" "mve_move")
828 ;; [vclzq_u, vclzq_s])
830 (define_insn "mve_vclzq_<supf><mode>"
832 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
833 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
837 "vclz.i%#<V_sz_elem> %q0, %q1"
838 [(set_attr "type" "mve_move")
844 (define_insn "mve_vclsq_s<mode>"
846 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
847 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
851 "vcls.s%#<V_sz_elem> %q0, %q1"
852 [(set_attr "type" "mve_move")
856 ;; [vaddvq_s, vaddvq_u])
858 (define_insn "mve_vaddvq_<supf><mode>"
860 (set (match_operand:SI 0 "s_register_operand" "=e")
861 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
865 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
866 [(set_attr "type" "mve_move")
872 (define_insn "mve_vabsq_s<mode>"
874 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
875 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
879 "vabs.s%#<V_sz_elem>\t%q0, %q1"
880 [(set_attr "type" "mve_move")
884 ;; [vrev32q_u, vrev32q_s])
886 (define_insn "mve_vrev32q_<supf><mode>"
888 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
889 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
893 "vrev32.%#<V_sz_elem>\t%q0, %q1"
894 [(set_attr "type" "mve_move")
898 ;; [vmovltq_u, vmovltq_s])
900 (define_insn "mve_vmovltq_<supf><mode>"
902 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
903 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
907 "vmovlt.<supf>%#<V_sz_elem> %q0, %q1"
908 [(set_attr "type" "mve_move")
912 ;; [vmovlbq_s, vmovlbq_u])
914 (define_insn "mve_vmovlbq_<supf><mode>"
916 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
917 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
921 "vmovlb.<supf>%#<V_sz_elem> %q0, %q1"
922 [(set_attr "type" "mve_move")
926 ;; [vcvtpq_s, vcvtpq_u])
928 (define_insn "mve_vcvtpq_<supf><mode>"
930 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
931 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
934 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
935 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
936 [(set_attr "type" "mve_move")
940 ;; [vcvtnq_s, vcvtnq_u])
942 (define_insn "mve_vcvtnq_<supf><mode>"
944 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
945 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
948 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
949 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
950 [(set_attr "type" "mve_move")
954 ;; [vcvtmq_s, vcvtmq_u])
956 (define_insn "mve_vcvtmq_<supf><mode>"
958 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
959 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
962 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
963 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
964 [(set_attr "type" "mve_move")
968 ;; [vcvtaq_u, vcvtaq_s])
970 (define_insn "mve_vcvtaq_<supf><mode>"
972 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
973 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
976 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
977 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
978 [(set_attr "type" "mve_move")
982 ;; [vmvnq_n_u, vmvnq_n_s])
984 (define_insn "mve_vmvnq_n_<supf><mode>"
986 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
987 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
991 "vmvn.i%#<V_sz_elem> %q0, %1"
992 [(set_attr "type" "mve_move")
996 ;; [vrev16q_u, vrev16q_s])
998 (define_insn "mve_vrev16q_<supf>v16qi"
1000 (set (match_operand:V16QI 0 "s_register_operand" "=w")
1001 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
1006 [(set_attr "type" "mve_move")
1010 ;; [vaddlvq_s vaddlvq_u])
1012 (define_insn "mve_vaddlvq_<supf>v4si"
1014 (set (match_operand:DI 0 "s_register_operand" "=r")
1015 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
1019 "vaddlv.<supf>32 %Q0, %R0, %q1"
1020 [(set_attr "type" "mve_move")
1024 ;; [vctp8q vctp16q vctp32q vctp64q])
1026 (define_insn "mve_vctp<mode1>qhi"
1028 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1029 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
1034 [(set_attr "type" "mve_move")
1040 (define_insn "mve_vpnothi"
1042 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1043 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
1048 [(set_attr "type" "mve_move")
1054 (define_insn "mve_vsubq_n_f<mode>"
1056 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1057 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1058 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1061 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1062 "vsub.f<V_sz_elem> %q0, %q1, %2"
1063 [(set_attr "type" "mve_move")
1069 (define_insn "mve_vbrsrq_n_f<mode>"
1071 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1072 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1073 (match_operand:SI 2 "s_register_operand" "r")]
1076 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1077 "vbrsr.<V_sz_elem> %q0, %q1, %2"
1078 [(set_attr "type" "mve_move")
1082 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
1084 (define_insn "mve_vcvtq_n_to_f_<supf><mode>"
1086 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1087 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
1088 (match_operand:SI 2 "mve_imm_16" "Rd")]
1091 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1092 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
1093 [(set_attr "type" "mve_move")
1098 (define_insn "mve_vcreateq_f<mode>"
1100 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1101 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
1102 (match_operand:DI 2 "s_register_operand" "r")]
1105 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1106 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
1107 [(set_attr "type" "mve_move")
1108 (set_attr "length""8")])
1111 ;; [vcreateq_u, vcreateq_s])
1113 (define_insn "mve_vcreateq_<supf><mode>"
1115 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
1116 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
1117 (match_operand:DI 2 "s_register_operand" "r")]
1121 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
1122 [(set_attr "type" "mve_move")
1123 (set_attr "length""8")])
1126 ;; [vshrq_n_s, vshrq_n_u])
1128 (define_insn "mve_vshrq_n_<supf><mode>"
1130 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1131 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1132 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1136 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
1137 [(set_attr "type" "mve_move")
1141 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
1143 (define_insn "mve_vcvtq_n_from_f_<supf><mode>"
1145 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1146 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
1147 (match_operand:SI 2 "mve_imm_16" "Rd")]
1150 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1151 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
1152 [(set_attr "type" "mve_move")
1158 (define_insn "mve_vaddlvq_p_<supf>v4si"
1160 (set (match_operand:DI 0 "s_register_operand" "=r")
1161 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
1162 (match_operand:HI 2 "vpr_register_operand" "Up")]
1166 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
1167 [(set_attr "type" "mve_move")
1168 (set_attr "length""8")])
1171 ;; [vcmpneq_u, vcmpneq_s])
1173 (define_insn "mve_vcmpneq_<supf><mode>"
1175 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1176 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1177 (match_operand:MVE_2 2 "s_register_operand" "w")]
1181 "vcmp.i%#<V_sz_elem> ne, %q1, %q2"
1182 [(set_attr "type" "mve_move")
1186 ;; [vshlq_s, vshlq_u])
1188 (define_insn "mve_vshlq_<supf><mode>"
1190 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1191 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1192 (match_operand:MVE_2 2 "s_register_operand" "w")]
1196 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1197 [(set_attr "type" "mve_move")
1201 ;; [vabdq_s, vabdq_u])
1203 (define_insn "mve_vabdq_<supf><mode>"
1205 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1206 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1207 (match_operand:MVE_2 2 "s_register_operand" "w")]
1211 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
1212 [(set_attr "type" "mve_move")
1216 ;; [vaddq_n_s, vaddq_n_u])
1218 (define_insn "mve_vaddq_n_<supf><mode>"
1220 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1221 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1222 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1226 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
1227 [(set_attr "type" "mve_move")
1231 ;; [vaddvaq_s, vaddvaq_u])
1233 (define_insn "mve_vaddvaq_<supf><mode>"
1235 (set (match_operand:SI 0 "s_register_operand" "=e")
1236 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
1237 (match_operand:MVE_2 2 "s_register_operand" "w")]
1241 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
1242 [(set_attr "type" "mve_move")
1246 ;; [vaddvq_p_u, vaddvq_p_s])
1248 (define_insn "mve_vaddvq_p_<supf><mode>"
1250 (set (match_operand:SI 0 "s_register_operand" "=e")
1251 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1252 (match_operand:HI 2 "vpr_register_operand" "Up")]
1256 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
1257 [(set_attr "type" "mve_move")
1258 (set_attr "length""8")])
1261 ;; [vandq_u, vandq_s])
1263 (define_insn "mve_vandq_<supf><mode>"
1265 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1266 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1267 (match_operand:MVE_2 2 "s_register_operand" "w")]
1271 "vand %q0, %q1, %q2"
1272 [(set_attr "type" "mve_move")
1276 ;; [vbicq_s, vbicq_u])
1278 (define_insn "mve_vbicq_<supf><mode>"
1280 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1281 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1282 (match_operand:MVE_2 2 "s_register_operand" "w")]
1286 "vbic %q0, %q1, %q2"
1287 [(set_attr "type" "mve_move")
1291 ;; [vbrsrq_n_u, vbrsrq_n_s])
1293 (define_insn "mve_vbrsrq_n_<supf><mode>"
1295 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1296 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1297 (match_operand:SI 2 "s_register_operand" "r")]
1301 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
1302 [(set_attr "type" "mve_move")
1306 ;; [vcaddq_rot270_s, vcaddq_rot270_u])
1308 (define_insn "mve_vcaddq_rot270_<supf><mode>"
1310 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1311 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1312 (match_operand:MVE_2 2 "s_register_operand" "w")]
1316 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #270"
1317 [(set_attr "type" "mve_move")
1321 ;; [vcaddq_rot90_u, vcaddq_rot90_s])
1323 (define_insn "mve_vcaddq_rot90_<supf><mode>"
1325 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1326 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1327 (match_operand:MVE_2 2 "s_register_operand" "w")]
1331 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #90"
1332 [(set_attr "type" "mve_move")
1338 (define_insn "mve_vcmpcsq_n_u<mode>"
1340 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1341 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1342 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1346 "vcmp.u%#<V_sz_elem> cs, %q1, %2"
1347 [(set_attr "type" "mve_move")
1353 (define_insn "mve_vcmpcsq_u<mode>"
1355 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1356 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1357 (match_operand:MVE_2 2 "s_register_operand" "w")]
1361 "vcmp.u%#<V_sz_elem> cs, %q1, %q2"
1362 [(set_attr "type" "mve_move")
1366 ;; [vcmpeqq_n_s, vcmpeqq_n_u])
1368 (define_insn "mve_vcmpeqq_n_<supf><mode>"
1370 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1371 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1372 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1376 "vcmp.i%#<V_sz_elem> eq, %q1, %2"
1377 [(set_attr "type" "mve_move")
1381 ;; [vcmpeqq_u, vcmpeqq_s])
1383 (define_insn "mve_vcmpeqq_<supf><mode>"
1385 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1386 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1387 (match_operand:MVE_2 2 "s_register_operand" "w")]
1391 "vcmp.i%#<V_sz_elem> eq, %q1, %q2"
1392 [(set_attr "type" "mve_move")
1398 (define_insn "mve_vcmpgeq_n_s<mode>"
1400 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1401 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1402 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1406 "vcmp.s%#<V_sz_elem> ge, %q1, %2"
1407 [(set_attr "type" "mve_move")
1413 (define_insn "mve_vcmpgeq_s<mode>"
1415 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1416 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1417 (match_operand:MVE_2 2 "s_register_operand" "w")]
1421 "vcmp.s%#<V_sz_elem> ge, %q1, %q2"
1422 [(set_attr "type" "mve_move")
1428 (define_insn "mve_vcmpgtq_n_s<mode>"
1430 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1431 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1432 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1436 "vcmp.s%#<V_sz_elem> gt, %q1, %2"
1437 [(set_attr "type" "mve_move")
1443 (define_insn "mve_vcmpgtq_s<mode>"
1445 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1446 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1447 (match_operand:MVE_2 2 "s_register_operand" "w")]
1451 "vcmp.s%#<V_sz_elem> gt, %q1, %q2"
1452 [(set_attr "type" "mve_move")
1458 (define_insn "mve_vcmphiq_n_u<mode>"
1460 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1461 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1462 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1466 "vcmp.u%#<V_sz_elem> hi, %q1, %2"
1467 [(set_attr "type" "mve_move")
1473 (define_insn "mve_vcmphiq_u<mode>"
1475 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1476 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1477 (match_operand:MVE_2 2 "s_register_operand" "w")]
1481 "vcmp.u%#<V_sz_elem> hi, %q1, %q2"
1482 [(set_attr "type" "mve_move")
1488 (define_insn "mve_vcmpleq_n_s<mode>"
1490 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1491 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1492 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1496 "vcmp.s%#<V_sz_elem> le, %q1, %2"
1497 [(set_attr "type" "mve_move")
1503 (define_insn "mve_vcmpleq_s<mode>"
1505 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1506 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1507 (match_operand:MVE_2 2 "s_register_operand" "w")]
1511 "vcmp.s%#<V_sz_elem> le, %q1, %q2"
1512 [(set_attr "type" "mve_move")
1518 (define_insn "mve_vcmpltq_n_s<mode>"
1520 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1521 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1522 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1526 "vcmp.s%#<V_sz_elem> lt, %q1, %2"
1527 [(set_attr "type" "mve_move")
1533 (define_insn "mve_vcmpltq_s<mode>"
1535 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1536 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1537 (match_operand:MVE_2 2 "s_register_operand" "w")]
1541 "vcmp.s%#<V_sz_elem> lt, %q1, %q2"
1542 [(set_attr "type" "mve_move")
1546 ;; [vcmpneq_n_u, vcmpneq_n_s])
1548 (define_insn "mve_vcmpneq_n_<supf><mode>"
1550 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1551 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1552 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1556 "vcmp.i%#<V_sz_elem> ne, %q1, %2"
1557 [(set_attr "type" "mve_move")
1561 ;; [veorq_u, veorq_s])
1563 (define_insn "mve_veorq_<supf><mode>"
1565 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1566 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1567 (match_operand:MVE_2 2 "s_register_operand" "w")]
1571 "veor %q0, %q1, %q2"
1572 [(set_attr "type" "mve_move")
1576 ;; [vhaddq_n_u, vhaddq_n_s])
1578 (define_insn "mve_vhaddq_n_<supf><mode>"
1580 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1581 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1582 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1586 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1587 [(set_attr "type" "mve_move")
1591 ;; [vhaddq_s, vhaddq_u])
1593 (define_insn "mve_vhaddq_<supf><mode>"
1595 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1596 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1597 (match_operand:MVE_2 2 "s_register_operand" "w")]
1601 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1602 [(set_attr "type" "mve_move")
1606 ;; [vhcaddq_rot270_s])
1608 (define_insn "mve_vhcaddq_rot270_s<mode>"
1610 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1611 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1612 (match_operand:MVE_2 2 "s_register_operand" "w")]
1616 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1617 [(set_attr "type" "mve_move")
1621 ;; [vhcaddq_rot90_s])
1623 (define_insn "mve_vhcaddq_rot90_s<mode>"
1625 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1626 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1627 (match_operand:MVE_2 2 "s_register_operand" "w")]
1631 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1632 [(set_attr "type" "mve_move")
1636 ;; [vhsubq_n_u, vhsubq_n_s])
1638 (define_insn "mve_vhsubq_n_<supf><mode>"
1640 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1641 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1642 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1646 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1647 [(set_attr "type" "mve_move")
1651 ;; [vhsubq_s, vhsubq_u])
1653 (define_insn "mve_vhsubq_<supf><mode>"
1655 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1656 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1657 (match_operand:MVE_2 2 "s_register_operand" "w")]
1661 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1662 [(set_attr "type" "mve_move")
1668 (define_insn "mve_vmaxaq_s<mode>"
1670 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1671 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1672 (match_operand:MVE_2 2 "s_register_operand" "w")]
1676 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1677 [(set_attr "type" "mve_move")
1683 (define_insn "mve_vmaxavq_s<mode>"
1685 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1686 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1687 (match_operand:MVE_2 2 "s_register_operand" "w")]
1691 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1692 [(set_attr "type" "mve_move")
1696 ;; [vmaxq_u, vmaxq_s])
1698 (define_insn "mve_vmaxq_<supf><mode>"
1700 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1701 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1702 (match_operand:MVE_2 2 "s_register_operand" "w")]
1706 "vmax.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1707 [(set_attr "type" "mve_move")
1711 ;; [vmaxvq_u, vmaxvq_s])
1713 (define_insn "mve_vmaxvq_<supf><mode>"
1715 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1716 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1717 (match_operand:MVE_2 2 "s_register_operand" "w")]
1721 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1722 [(set_attr "type" "mve_move")
1728 (define_insn "mve_vminaq_s<mode>"
1730 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1731 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1732 (match_operand:MVE_2 2 "s_register_operand" "w")]
1736 "vmina.s%#<V_sz_elem>\t%q0, %q2"
1737 [(set_attr "type" "mve_move")
1743 (define_insn "mve_vminavq_s<mode>"
1745 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1746 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1747 (match_operand:MVE_2 2 "s_register_operand" "w")]
1751 "vminav.s%#<V_sz_elem>\t%0, %q2"
1752 [(set_attr "type" "mve_move")
1756 ;; [vminq_s, vminq_u])
1758 (define_insn "mve_vminq_<supf><mode>"
1760 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1761 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1762 (match_operand:MVE_2 2 "s_register_operand" "w")]
1766 "vmin.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1767 [(set_attr "type" "mve_move")
1771 ;; [vminvq_u, vminvq_s])
1773 (define_insn "mve_vminvq_<supf><mode>"
1775 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1776 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1777 (match_operand:MVE_2 2 "s_register_operand" "w")]
1781 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
1782 [(set_attr "type" "mve_move")
1786 ;; [vmladavq_u, vmladavq_s])
1788 (define_insn "mve_vmladavq_<supf><mode>"
1790 (set (match_operand:SI 0 "s_register_operand" "=e")
1791 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1792 (match_operand:MVE_2 2 "s_register_operand" "w")]
1796 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
1797 [(set_attr "type" "mve_move")
1803 (define_insn "mve_vmladavxq_s<mode>"
1805 (set (match_operand:SI 0 "s_register_operand" "=e")
1806 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1807 (match_operand:MVE_2 2 "s_register_operand" "w")]
1811 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1812 [(set_attr "type" "mve_move")
1818 (define_insn "mve_vmlsdavq_s<mode>"
1820 (set (match_operand:SI 0 "s_register_operand" "=e")
1821 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1822 (match_operand:MVE_2 2 "s_register_operand" "w")]
1826 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
1827 [(set_attr "type" "mve_move")
1833 (define_insn "mve_vmlsdavxq_s<mode>"
1835 (set (match_operand:SI 0 "s_register_operand" "=e")
1836 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1837 (match_operand:MVE_2 2 "s_register_operand" "w")]
1841 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
1842 [(set_attr "type" "mve_move")
1846 ;; [vmulhq_s, vmulhq_u])
1848 (define_insn "mve_vmulhq_<supf><mode>"
1850 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1851 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1852 (match_operand:MVE_2 2 "s_register_operand" "w")]
1856 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1857 [(set_attr "type" "mve_move")
1861 ;; [vmullbq_int_u, vmullbq_int_s])
1863 (define_insn "mve_vmullbq_int_<supf><mode>"
1865 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
1866 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1867 (match_operand:MVE_2 2 "s_register_operand" "w")]
1871 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1872 [(set_attr "type" "mve_move")
1876 ;; [vmulltq_int_u, vmulltq_int_s])
1878 (define_insn "mve_vmulltq_int_<supf><mode>"
1880 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
1881 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
1882 (match_operand:MVE_2 2 "s_register_operand" "w")]
1886 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1887 [(set_attr "type" "mve_move")
1891 ;; [vmulq_n_u, vmulq_n_s])
1893 (define_insn "mve_vmulq_n_<supf><mode>"
1895 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1896 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1897 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1901 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
1902 [(set_attr "type" "mve_move")
1906 ;; [vmulq_u, vmulq_s])
1908 (define_insn "mve_vmulq_<supf><mode>"
1910 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1911 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1912 (match_operand:MVE_2 2 "s_register_operand" "w")]
1916 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
1917 [(set_attr "type" "mve_move")
1921 ;; [vornq_u, vornq_s])
1923 (define_insn "mve_vornq_<supf><mode>"
1925 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1926 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1927 (match_operand:MVE_2 2 "s_register_operand" "w")]
1931 "vorn %q0, %q1, %q2"
1932 [(set_attr "type" "mve_move")
1936 ;; [vorrq_s, vorrq_u])
1938 (define_insn "mve_vorrq_<supf><mode>"
1940 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1941 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1942 (match_operand:MVE_2 2 "s_register_operand" "w")]
1946 "vorr %q0, %q1, %q2"
1947 [(set_attr "type" "mve_move")
1951 ;; [vqaddq_n_s, vqaddq_n_u])
1953 (define_insn "mve_vqaddq_n_<supf><mode>"
1955 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1956 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1957 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1961 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1962 [(set_attr "type" "mve_move")
1966 ;; [vqaddq_u, vqaddq_s])
1968 (define_insn "mve_vqaddq_<supf><mode>"
1970 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1971 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1972 (match_operand:MVE_2 2 "s_register_operand" "w")]
1976 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1977 [(set_attr "type" "mve_move")
1983 (define_insn "mve_vqdmulhq_n_s<mode>"
1985 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1986 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1987 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1991 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
1992 [(set_attr "type" "mve_move")
1998 (define_insn "mve_vqdmulhq_s<mode>"
2000 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2001 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2002 (match_operand:MVE_2 2 "s_register_operand" "w")]
2006 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
2007 [(set_attr "type" "mve_move")
2013 (define_insn "mve_vqrdmulhq_n_s<mode>"
2015 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2016 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2017 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2021 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
2022 [(set_attr "type" "mve_move")
2028 (define_insn "mve_vqrdmulhq_s<mode>"
2030 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2031 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2032 (match_operand:MVE_2 2 "s_register_operand" "w")]
2036 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
2037 [(set_attr "type" "mve_move")
2041 ;; [vqrshlq_n_s, vqrshlq_n_u])
2043 (define_insn "mve_vqrshlq_n_<supf><mode>"
2045 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2046 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2047 (match_operand:SI 2 "s_register_operand" "r")]
2051 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
2052 [(set_attr "type" "mve_move")
2056 ;; [vqrshlq_s, vqrshlq_u])
2058 (define_insn "mve_vqrshlq_<supf><mode>"
2060 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2061 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2062 (match_operand:MVE_2 2 "s_register_operand" "w")]
2066 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2067 [(set_attr "type" "mve_move")
2071 ;; [vqshlq_n_s, vqshlq_n_u])
2073 (define_insn "mve_vqshlq_n_<supf><mode>"
2075 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2076 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2077 (match_operand:SI 2 "immediate_operand" "i")]
2081 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2082 [(set_attr "type" "mve_move")
2086 ;; [vqshlq_r_u, vqshlq_r_s])
2088 (define_insn "mve_vqshlq_r_<supf><mode>"
2090 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2091 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2092 (match_operand:SI 2 "s_register_operand" "r")]
2096 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
2097 [(set_attr "type" "mve_move")
2101 ;; [vqshlq_s, vqshlq_u])
2103 (define_insn "mve_vqshlq_<supf><mode>"
2105 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2106 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2107 (match_operand:MVE_2 2 "s_register_operand" "w")]
2111 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2112 [(set_attr "type" "mve_move")
2118 (define_insn "mve_vqshluq_n_s<mode>"
2120 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2121 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2122 (match_operand:SI 2 "mve_imm_7" "Ra")]
2126 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
2127 [(set_attr "type" "mve_move")
2131 ;; [vqsubq_n_s, vqsubq_n_u])
2133 (define_insn "mve_vqsubq_n_<supf><mode>"
2135 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2136 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2137 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2141 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2142 [(set_attr "type" "mve_move")
2146 ;; [vqsubq_u, vqsubq_s])
2148 (define_insn "mve_vqsubq_<supf><mode>"
2150 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2151 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2152 (match_operand:MVE_2 2 "s_register_operand" "w")]
2156 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2157 [(set_attr "type" "mve_move")
2161 ;; [vrhaddq_s, vrhaddq_u])
2163 (define_insn "mve_vrhaddq_<supf><mode>"
2165 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2166 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2167 (match_operand:MVE_2 2 "s_register_operand" "w")]
2171 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2172 [(set_attr "type" "mve_move")
2176 ;; [vrmulhq_s, vrmulhq_u])
2178 (define_insn "mve_vrmulhq_<supf><mode>"
2180 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2181 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2182 (match_operand:MVE_2 2 "s_register_operand" "w")]
2186 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2187 [(set_attr "type" "mve_move")
2191 ;; [vrshlq_n_u, vrshlq_n_s])
2193 (define_insn "mve_vrshlq_n_<supf><mode>"
2195 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2196 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2197 (match_operand:SI 2 "s_register_operand" "r")]
2201 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
2202 [(set_attr "type" "mve_move")
2206 ;; [vrshlq_s, vrshlq_u])
2208 (define_insn "mve_vrshlq_<supf><mode>"
2210 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2211 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2212 (match_operand:MVE_2 2 "s_register_operand" "w")]
2216 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2217 [(set_attr "type" "mve_move")
2221 ;; [vrshrq_n_s, vrshrq_n_u])
2223 (define_insn "mve_vrshrq_n_<supf><mode>"
2225 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2226 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2227 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
2231 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2232 [(set_attr "type" "mve_move")
2236 ;; [vshlq_n_u, vshlq_n_s])
2238 (define_insn "mve_vshlq_n_<supf><mode>"
2240 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2241 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2242 (match_operand:SI 2 "immediate_operand" "i")]
2246 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2247 [(set_attr "type" "mve_move")
2251 ;; [vshlq_r_s, vshlq_r_u])
2253 (define_insn "mve_vshlq_r_<supf><mode>"
2255 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2256 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2257 (match_operand:SI 2 "s_register_operand" "r")]
2261 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
2262 [(set_attr "type" "mve_move")
2266 ;; [vsubq_n_s, vsubq_n_u])
2268 (define_insn "mve_vsubq_n_<supf><mode>"
2270 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2271 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2272 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2276 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
2277 [(set_attr "type" "mve_move")
2281 ;; [vsubq_s, vsubq_u])
2283 (define_insn "mve_vsubq_<supf><mode>"
2285 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2286 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2287 (match_operand:MVE_2 2 "s_register_operand" "w")]
2291 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
2292 [(set_attr "type" "mve_move")
2298 (define_insn "mve_vabdq_f<mode>"
2300 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2301 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2302 (match_operand:MVE_0 2 "s_register_operand" "w")]
2305 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2306 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
2307 [(set_attr "type" "mve_move")
2311 ;; [vaddlvaq_s vaddlvaq_u])
2313 (define_insn "mve_vaddlvaq_<supf>v4si"
2315 (set (match_operand:DI 0 "s_register_operand" "=r")
2316 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2317 (match_operand:V4SI 2 "s_register_operand" "w")]
2321 "vaddlva.<supf>32 %Q0, %R0, %q2"
2322 [(set_attr "type" "mve_move")
2328 (define_insn "mve_vaddq_n_f<mode>"
2330 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2331 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2332 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2335 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2336 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
2337 [(set_attr "type" "mve_move")
2343 (define_insn "mve_vandq_f<mode>"
2345 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2346 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2347 (match_operand:MVE_0 2 "s_register_operand" "w")]
2350 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2351 "vand %q0, %q1, %q2"
2352 [(set_attr "type" "mve_move")
2358 (define_insn "mve_vbicq_f<mode>"
2360 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2361 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2362 (match_operand:MVE_0 2 "s_register_operand" "w")]
2365 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2366 "vbic %q0, %q1, %q2"
2367 [(set_attr "type" "mve_move")
2371 ;; [vbicq_n_s, vbicq_n_u])
2373 (define_insn "mve_vbicq_n_<supf><mode>"
2375 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2376 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2377 (match_operand:SI 2 "immediate_operand" "i")]
2381 "vbic.i%#<V_sz_elem> %q0, %2"
2382 [(set_attr "type" "mve_move")
2386 ;; [vcaddq_rot270_f])
2388 (define_insn "mve_vcaddq_rot270_f<mode>"
2390 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2391 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2392 (match_operand:MVE_0 2 "s_register_operand" "w")]
2395 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2396 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #270"
2397 [(set_attr "type" "mve_move")
2401 ;; [vcaddq_rot90_f])
2403 (define_insn "mve_vcaddq_rot90_f<mode>"
2405 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2406 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2407 (match_operand:MVE_0 2 "s_register_operand" "w")]
2410 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2411 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #90"
2412 [(set_attr "type" "mve_move")
2418 (define_insn "mve_vcmpeqq_f<mode>"
2420 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2421 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2422 (match_operand:MVE_0 2 "s_register_operand" "w")]
2425 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2426 "vcmp.f%#<V_sz_elem> eq, %q1, %q2"
2427 [(set_attr "type" "mve_move")
2433 (define_insn "mve_vcmpeqq_n_f<mode>"
2435 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2436 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2437 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2440 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2441 "vcmp.f%#<V_sz_elem> eq, %q1, %2"
2442 [(set_attr "type" "mve_move")
2448 (define_insn "mve_vcmpgeq_f<mode>"
2450 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2451 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2452 (match_operand:MVE_0 2 "s_register_operand" "w")]
2455 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2456 "vcmp.f%#<V_sz_elem> ge, %q1, %q2"
2457 [(set_attr "type" "mve_move")
2463 (define_insn "mve_vcmpgeq_n_f<mode>"
2465 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2466 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2467 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2470 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2471 "vcmp.f%#<V_sz_elem> ge, %q1, %2"
2472 [(set_attr "type" "mve_move")
2478 (define_insn "mve_vcmpgtq_f<mode>"
2480 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2481 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2482 (match_operand:MVE_0 2 "s_register_operand" "w")]
2485 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2486 "vcmp.f%#<V_sz_elem> gt, %q1, %q2"
2487 [(set_attr "type" "mve_move")
2493 (define_insn "mve_vcmpgtq_n_f<mode>"
2495 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2496 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2497 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2500 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2501 "vcmp.f%#<V_sz_elem> gt, %q1, %2"
2502 [(set_attr "type" "mve_move")
2508 (define_insn "mve_vcmpleq_f<mode>"
2510 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2511 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2512 (match_operand:MVE_0 2 "s_register_operand" "w")]
2515 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2516 "vcmp.f%#<V_sz_elem> le, %q1, %q2"
2517 [(set_attr "type" "mve_move")
2523 (define_insn "mve_vcmpleq_n_f<mode>"
2525 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2526 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2527 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2530 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2531 "vcmp.f%#<V_sz_elem> le, %q1, %2"
2532 [(set_attr "type" "mve_move")
2538 (define_insn "mve_vcmpltq_f<mode>"
2540 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2541 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2542 (match_operand:MVE_0 2 "s_register_operand" "w")]
2545 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2546 "vcmp.f%#<V_sz_elem> lt, %q1, %q2"
2547 [(set_attr "type" "mve_move")
2553 (define_insn "mve_vcmpltq_n_f<mode>"
2555 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2556 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2557 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2560 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2561 "vcmp.f%#<V_sz_elem> lt, %q1, %2"
2562 [(set_attr "type" "mve_move")
2568 (define_insn "mve_vcmpneq_f<mode>"
2570 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2571 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2572 (match_operand:MVE_0 2 "s_register_operand" "w")]
2575 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2576 "vcmp.f%#<V_sz_elem> ne, %q1, %q2"
2577 [(set_attr "type" "mve_move")
2583 (define_insn "mve_vcmpneq_n_f<mode>"
2585 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2586 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2587 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2590 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2591 "vcmp.f%#<V_sz_elem> ne, %q1, %2"
2592 [(set_attr "type" "mve_move")
2598 (define_insn "mve_vcmulq_f<mode>"
2600 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2601 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2602 (match_operand:MVE_0 2 "s_register_operand" "w")]
2605 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2606 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #0"
2607 [(set_attr "type" "mve_move")
2611 ;; [vcmulq_rot180_f])
2613 (define_insn "mve_vcmulq_rot180_f<mode>"
2615 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2616 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2617 (match_operand:MVE_0 2 "s_register_operand" "w")]
2620 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2621 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #180"
2622 [(set_attr "type" "mve_move")
2626 ;; [vcmulq_rot270_f])
2628 (define_insn "mve_vcmulq_rot270_f<mode>"
2630 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2631 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2632 (match_operand:MVE_0 2 "s_register_operand" "w")]
2635 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2636 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #270"
2637 [(set_attr "type" "mve_move")
2641 ;; [vcmulq_rot90_f])
2643 (define_insn "mve_vcmulq_rot90_f<mode>"
2645 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2646 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2647 (match_operand:MVE_0 2 "s_register_operand" "w")]
2650 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2651 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #90"
2652 [(set_attr "type" "mve_move")
2656 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
2658 (define_insn "mve_vctp<mode1>q_mhi"
2660 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2661 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
2662 (match_operand:HI 2 "vpr_register_operand" "Up")]
2666 "vpst\;vctpt.<mode1> %1"
2667 [(set_attr "type" "mve_move")
2668 (set_attr "length""8")])
2671 ;; [vcvtbq_f16_f32])
2673 (define_insn "mve_vcvtbq_f16_f32v8hf"
2675 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2676 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2677 (match_operand:V4SF 2 "s_register_operand" "w")]
2680 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2681 "vcvtb.f16.f32 %q0, %q2"
2682 [(set_attr "type" "mve_move")
2686 ;; [vcvttq_f16_f32])
2688 (define_insn "mve_vcvttq_f16_f32v8hf"
2690 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2691 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2692 (match_operand:V4SF 2 "s_register_operand" "w")]
2695 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2696 "vcvtt.f16.f32 %q0, %q2"
2697 [(set_attr "type" "mve_move")
2703 (define_insn "mve_veorq_f<mode>"
2705 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2706 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2707 (match_operand:MVE_0 2 "s_register_operand" "w")]
2710 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2711 "veor %q0, %q1, %q2"
2712 [(set_attr "type" "mve_move")
2718 (define_insn "mve_vmaxnmaq_f<mode>"
2720 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2721 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2722 (match_operand:MVE_0 2 "s_register_operand" "w")]
2725 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2726 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
2727 [(set_attr "type" "mve_move")
2733 (define_insn "mve_vmaxnmavq_f<mode>"
2735 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2736 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2737 (match_operand:MVE_0 2 "s_register_operand" "w")]
2740 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2741 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
2742 [(set_attr "type" "mve_move")
2748 (define_insn "mve_vmaxnmq_f<mode>"
2750 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2751 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2752 (match_operand:MVE_0 2 "s_register_operand" "w")]
2755 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2756 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
2757 [(set_attr "type" "mve_move")
2763 (define_insn "mve_vmaxnmvq_f<mode>"
2765 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2766 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2767 (match_operand:MVE_0 2 "s_register_operand" "w")]
2770 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2771 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
2772 [(set_attr "type" "mve_move")
2778 (define_insn "mve_vminnmaq_f<mode>"
2780 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2781 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2782 (match_operand:MVE_0 2 "s_register_operand" "w")]
2785 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2786 "vminnma.f%#<V_sz_elem> %q0, %q2"
2787 [(set_attr "type" "mve_move")
2793 (define_insn "mve_vminnmavq_f<mode>"
2795 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2796 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2797 (match_operand:MVE_0 2 "s_register_operand" "w")]
2800 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2801 "vminnmav.f%#<V_sz_elem> %0, %q2"
2802 [(set_attr "type" "mve_move")
2808 (define_insn "mve_vminnmq_f<mode>"
2810 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2811 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2812 (match_operand:MVE_0 2 "s_register_operand" "w")]
2815 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2816 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
2817 [(set_attr "type" "mve_move")
2823 (define_insn "mve_vminnmvq_f<mode>"
2825 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2826 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2827 (match_operand:MVE_0 2 "s_register_operand" "w")]
2830 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2831 "vminnmv.f%#<V_sz_elem> %0, %q2"
2832 [(set_attr "type" "mve_move")
2836 ;; [vmlaldavq_u, vmlaldavq_s])
2838 (define_insn "mve_vmlaldavq_<supf><mode>"
2840 (set (match_operand:DI 0 "s_register_operand" "=r")
2841 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2842 (match_operand:MVE_5 2 "s_register_operand" "w")]
2846 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2847 [(set_attr "type" "mve_move")
2853 (define_insn "mve_vmlaldavxq_s<mode>"
2855 (set (match_operand:DI 0 "s_register_operand" "=r")
2856 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2857 (match_operand:MVE_5 2 "s_register_operand" "w")]
2861 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2862 [(set_attr "type" "mve_move")
2868 (define_insn "mve_vmlsldavq_s<mode>"
2870 (set (match_operand:DI 0 "s_register_operand" "=r")
2871 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2872 (match_operand:MVE_5 2 "s_register_operand" "w")]
2876 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2877 [(set_attr "type" "mve_move")
2883 (define_insn "mve_vmlsldavxq_s<mode>"
2885 (set (match_operand:DI 0 "s_register_operand" "=r")
2886 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
2887 (match_operand:MVE_5 2 "s_register_operand" "w")]
2891 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
2892 [(set_attr "type" "mve_move")
2896 ;; [vmovnbq_u, vmovnbq_s])
2898 (define_insn "mve_vmovnbq_<supf><mode>"
2900 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2901 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2902 (match_operand:MVE_5 2 "s_register_operand" "w")]
2906 "vmovnb.i%#<V_sz_elem> %q0, %q2"
2907 [(set_attr "type" "mve_move")
2911 ;; [vmovntq_s, vmovntq_u])
2913 (define_insn "mve_vmovntq_<supf><mode>"
2915 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
2916 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
2917 (match_operand:MVE_5 2 "s_register_operand" "w")]
2921 "vmovnt.i%#<V_sz_elem> %q0, %q2"
2922 [(set_attr "type" "mve_move")
2928 (define_insn "mve_vmulq_f<mode>"
2930 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2931 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2932 (match_operand:MVE_0 2 "s_register_operand" "w")]
2935 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2936 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
2937 [(set_attr "type" "mve_move")
2943 (define_insn "mve_vmulq_n_f<mode>"
2945 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2946 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2947 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2950 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2951 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
2952 [(set_attr "type" "mve_move")
2958 (define_insn "mve_vornq_f<mode>"
2960 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2961 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2962 (match_operand:MVE_0 2 "s_register_operand" "w")]
2965 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2966 "vorn %q0, %q1, %q2"
2967 [(set_attr "type" "mve_move")
2973 (define_insn "mve_vorrq_f<mode>"
2975 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2976 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2977 (match_operand:MVE_0 2 "s_register_operand" "w")]
2980 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2981 "vorr %q0, %q1, %q2"
2982 [(set_attr "type" "mve_move")
2986 ;; [vorrq_n_u, vorrq_n_s])
2988 (define_insn "mve_vorrq_n_<supf><mode>"
2990 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2991 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2992 (match_operand:SI 2 "immediate_operand" "i")]
2996 "vorr.i%#<V_sz_elem> %q0, %2"
2997 [(set_attr "type" "mve_move")
3003 (define_insn "mve_vqdmullbq_n_s<mode>"
3005 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3006 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3007 (match_operand:<V_elem> 2 "s_register_operand" "r")]
3011 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
3012 [(set_attr "type" "mve_move")
3018 (define_insn "mve_vqdmullbq_s<mode>"
3020 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3021 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3022 (match_operand:MVE_5 2 "s_register_operand" "w")]
3026 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
3027 [(set_attr "type" "mve_move")
3033 (define_insn "mve_vqdmulltq_n_s<mode>"
3035 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3036 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3037 (match_operand:<V_elem> 2 "s_register_operand" "r")]
3041 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
3042 [(set_attr "type" "mve_move")
3048 (define_insn "mve_vqdmulltq_s<mode>"
3050 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3051 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3052 (match_operand:MVE_5 2 "s_register_operand" "w")]
3056 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
3057 [(set_attr "type" "mve_move")
3061 ;; [vqmovnbq_u, vqmovnbq_s])
3063 (define_insn "mve_vqmovnbq_<supf><mode>"
3065 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3066 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3067 (match_operand:MVE_5 2 "s_register_operand" "w")]
3071 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
3072 [(set_attr "type" "mve_move")
3076 ;; [vqmovntq_u, vqmovntq_s])
3078 (define_insn "mve_vqmovntq_<supf><mode>"
3080 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3081 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3082 (match_operand:MVE_5 2 "s_register_operand" "w")]
3086 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
3087 [(set_attr "type" "mve_move")
3093 (define_insn "mve_vqmovunbq_s<mode>"
3095 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3096 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3097 (match_operand:MVE_5 2 "s_register_operand" "w")]
3101 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
3102 [(set_attr "type" "mve_move")
3108 (define_insn "mve_vqmovuntq_s<mode>"
3110 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3111 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3112 (match_operand:MVE_5 2 "s_register_operand" "w")]
3116 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
3117 [(set_attr "type" "mve_move")
3121 ;; [vrmlaldavhxq_s])
3123 (define_insn "mve_vrmlaldavhxq_sv4si"
3125 (set (match_operand:DI 0 "s_register_operand" "=r")
3126 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3127 (match_operand:V4SI 2 "s_register_operand" "w")]
3131 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
3132 [(set_attr "type" "mve_move")
3138 (define_insn "mve_vrmlsldavhq_sv4si"
3140 (set (match_operand:DI 0 "s_register_operand" "=r")
3141 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3142 (match_operand:V4SI 2 "s_register_operand" "w")]
3146 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
3147 [(set_attr "type" "mve_move")
3151 ;; [vrmlsldavhxq_s])
3153 (define_insn "mve_vrmlsldavhxq_sv4si"
3155 (set (match_operand:DI 0 "s_register_operand" "=r")
3156 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3157 (match_operand:V4SI 2 "s_register_operand" "w")]
3161 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
3162 [(set_attr "type" "mve_move")
3166 ;; [vshllbq_n_s, vshllbq_n_u])
3168 (define_insn "mve_vshllbq_n_<supf><mode>"
3170 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3171 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3172 (match_operand:SI 2 "immediate_operand" "i")]
3176 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
3177 [(set_attr "type" "mve_move")
3181 ;; [vshlltq_n_u, vshlltq_n_s])
3183 (define_insn "mve_vshlltq_n_<supf><mode>"
3185 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3186 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3187 (match_operand:SI 2 "immediate_operand" "i")]
3191 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
3192 [(set_attr "type" "mve_move")
3198 (define_insn "mve_vsubq_f<mode>"
3200 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3201 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3202 (match_operand:MVE_0 2 "s_register_operand" "w")]
3205 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3206 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
3207 [(set_attr "type" "mve_move")
3211 ;; [vmulltq_poly_p])
3213 (define_insn "mve_vmulltq_poly_p<mode>"
3215 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3216 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3217 (match_operand:MVE_3 2 "s_register_operand" "w")]
3221 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
3222 [(set_attr "type" "mve_move")
3226 ;; [vmullbq_poly_p])
3228 (define_insn "mve_vmullbq_poly_p<mode>"
3230 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3231 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3232 (match_operand:MVE_3 2 "s_register_operand" "w")]
3236 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
3237 [(set_attr "type" "mve_move")
3241 ;; [vrmlaldavhq_u vrmlaldavhq_s])
3243 (define_insn "mve_vrmlaldavhq_<supf>v4si"
3245 (set (match_operand:DI 0 "s_register_operand" "=r")
3246 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3247 (match_operand:V4SI 2 "s_register_operand" "w")]
3251 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
3252 [(set_attr "type" "mve_move")
3256 ;; [vbicq_m_n_s, vbicq_m_n_u])
3258 (define_insn "mve_vbicq_m_n_<supf><mode>"
3260 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
3261 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
3262 (match_operand:SI 2 "immediate_operand" "i")
3263 (match_operand:HI 3 "vpr_register_operand" "Up")]
3267 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
3268 [(set_attr "type" "mve_move")
3269 (set_attr "length""8")])
3273 (define_insn "mve_vcmpeqq_m_f<mode>"
3275 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3276 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3277 (match_operand:MVE_0 2 "s_register_operand" "w")
3278 (match_operand:HI 3 "vpr_register_operand" "Up")]
3281 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3282 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
3283 [(set_attr "type" "mve_move")
3284 (set_attr "length""8")])
3286 ;; [vcvtaq_m_u, vcvtaq_m_s])
3288 (define_insn "mve_vcvtaq_m_<supf><mode>"
3290 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
3291 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
3292 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
3293 (match_operand:HI 3 "vpr_register_operand" "Up")]
3296 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3297 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
3298 [(set_attr "type" "mve_move")
3299 (set_attr "length""8")])
3301 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
3303 (define_insn "mve_vcvtq_m_to_f_<supf><mode>"
3305 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3306 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3307 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
3308 (match_operand:HI 3 "vpr_register_operand" "Up")]
3311 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3312 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
3313 [(set_attr "type" "mve_move")
3314 (set_attr "length""8")])
3316 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
3318 (define_insn "mve_vqrshrnbq_n_<supf><mode>"
3320 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3321 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3322 (match_operand:MVE_5 2 "s_register_operand" "w")
3323 (match_operand:SI 3 "mve_imm_8" "Rb")]
3327 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
3328 [(set_attr "type" "mve_move")
3331 ;; [vqrshrunbq_n_s])
3333 (define_insn "mve_vqrshrunbq_n_s<mode>"
3335 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3336 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3337 (match_operand:MVE_5 2 "s_register_operand" "w")
3338 (match_operand:SI 3 "mve_imm_8" "Rb")]
3342 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
3343 [(set_attr "type" "mve_move")
3346 ;; [vrmlaldavhaq_s vrmlaldavhaq_u])
3348 (define_insn "mve_vrmlaldavhaq_<supf>v4si"
3350 (set (match_operand:DI 0 "s_register_operand" "=r")
3351 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
3352 (match_operand:V4SI 2 "s_register_operand" "w")
3353 (match_operand:V4SI 3 "s_register_operand" "w")]
3357 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
3358 [(set_attr "type" "mve_move")
3362 ;; [vabavq_s, vabavq_u])
3364 (define_insn "mve_vabavq_<supf><mode>"
3366 (set (match_operand:SI 0 "s_register_operand" "=r")
3367 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3368 (match_operand:MVE_2 2 "s_register_operand" "w")
3369 (match_operand:MVE_2 3 "s_register_operand" "w")]
3373 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
3374 [(set_attr "type" "mve_move")
3378 ;; [vshlcq_u vshlcq_s]
3380 (define_expand "mve_vshlcq_vec_<supf><mode>"
3381 [(match_operand:MVE_2 0 "s_register_operand")
3382 (match_operand:MVE_2 1 "s_register_operand")
3383 (match_operand:SI 2 "s_register_operand")
3384 (match_operand:SI 3 "mve_imm_32")
3385 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3388 rtx ignore_wb = gen_reg_rtx (SImode);
3389 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
3390 operands[2], operands[3]));
3394 (define_expand "mve_vshlcq_carry_<supf><mode>"
3395 [(match_operand:SI 0 "s_register_operand")
3396 (match_operand:MVE_2 1 "s_register_operand")
3397 (match_operand:SI 2 "s_register_operand")
3398 (match_operand:SI 3 "mve_imm_32")
3399 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3402 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
3403 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
3404 operands[2], operands[3]));
3408 (define_insn "mve_vshlcq_<supf><mode>"
3409 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
3410 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
3411 (match_operand:SI 3 "s_register_operand" "1")
3412 (match_operand:SI 4 "mve_imm_32" "Rf")]
3414 (set (match_operand:SI 1 "s_register_operand" "=r")
3415 (unspec:SI [(match_dup 2)
3420 "vshlc %q0, %1, %4")
3425 (define_insn "mve_vabsq_m_s<mode>"
3427 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3428 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3429 (match_operand:MVE_2 2 "s_register_operand" "w")
3430 (match_operand:HI 3 "vpr_register_operand" "Up")]
3434 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
3435 [(set_attr "type" "mve_move")
3436 (set_attr "length""8")])
3439 ;; [vaddvaq_p_u, vaddvaq_p_s])
3441 (define_insn "mve_vaddvaq_p_<supf><mode>"
3443 (set (match_operand:SI 0 "s_register_operand" "=e")
3444 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3445 (match_operand:MVE_2 2 "s_register_operand" "w")
3446 (match_operand:HI 3 "vpr_register_operand" "Up")]
3450 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
3451 [(set_attr "type" "mve_move")
3452 (set_attr "length""8")])
3457 (define_insn "mve_vclsq_m_s<mode>"
3459 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3460 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3461 (match_operand:MVE_2 2 "s_register_operand" "w")
3462 (match_operand:HI 3 "vpr_register_operand" "Up")]
3466 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
3467 [(set_attr "type" "mve_move")
3468 (set_attr "length""8")])
3471 ;; [vclzq_m_s, vclzq_m_u])
3473 (define_insn "mve_vclzq_m_<supf><mode>"
3475 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3476 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3477 (match_operand:MVE_2 2 "s_register_operand" "w")
3478 (match_operand:HI 3 "vpr_register_operand" "Up")]
3482 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
3483 [(set_attr "type" "mve_move")
3484 (set_attr "length""8")])
3489 (define_insn "mve_vcmpcsq_m_n_u<mode>"
3491 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3492 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3493 (match_operand:<V_elem> 2 "s_register_operand" "r")
3494 (match_operand:HI 3 "vpr_register_operand" "Up")]
3498 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
3499 [(set_attr "type" "mve_move")
3500 (set_attr "length""8")])
3505 (define_insn "mve_vcmpcsq_m_u<mode>"
3507 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3508 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3509 (match_operand:MVE_2 2 "s_register_operand" "w")
3510 (match_operand:HI 3 "vpr_register_operand" "Up")]
3514 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
3515 [(set_attr "type" "mve_move")
3516 (set_attr "length""8")])
3519 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
3521 (define_insn "mve_vcmpeqq_m_n_<supf><mode>"
3523 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3524 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3525 (match_operand:<V_elem> 2 "s_register_operand" "r")
3526 (match_operand:HI 3 "vpr_register_operand" "Up")]
3530 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
3531 [(set_attr "type" "mve_move")
3532 (set_attr "length""8")])
3535 ;; [vcmpeqq_m_u, vcmpeqq_m_s])
3537 (define_insn "mve_vcmpeqq_m_<supf><mode>"
3539 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3540 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3541 (match_operand:MVE_2 2 "s_register_operand" "w")
3542 (match_operand:HI 3 "vpr_register_operand" "Up")]
3546 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
3547 [(set_attr "type" "mve_move")
3548 (set_attr "length""8")])
3553 (define_insn "mve_vcmpgeq_m_n_s<mode>"
3555 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3556 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3557 (match_operand:<V_elem> 2 "s_register_operand" "r")
3558 (match_operand:HI 3 "vpr_register_operand" "Up")]
3562 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
3563 [(set_attr "type" "mve_move")
3564 (set_attr "length""8")])
3569 (define_insn "mve_vcmpgeq_m_s<mode>"
3571 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3572 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3573 (match_operand:MVE_2 2 "s_register_operand" "w")
3574 (match_operand:HI 3 "vpr_register_operand" "Up")]
3578 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
3579 [(set_attr "type" "mve_move")
3580 (set_attr "length""8")])
3585 (define_insn "mve_vcmpgtq_m_n_s<mode>"
3587 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3588 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3589 (match_operand:<V_elem> 2 "s_register_operand" "r")
3590 (match_operand:HI 3 "vpr_register_operand" "Up")]
3594 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
3595 [(set_attr "type" "mve_move")
3596 (set_attr "length""8")])
3601 (define_insn "mve_vcmpgtq_m_s<mode>"
3603 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3604 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3605 (match_operand:MVE_2 2 "s_register_operand" "w")
3606 (match_operand:HI 3 "vpr_register_operand" "Up")]
3610 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
3611 [(set_attr "type" "mve_move")
3612 (set_attr "length""8")])
3617 (define_insn "mve_vcmphiq_m_n_u<mode>"
3619 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3620 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3621 (match_operand:<V_elem> 2 "s_register_operand" "r")
3622 (match_operand:HI 3 "vpr_register_operand" "Up")]
3626 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
3627 [(set_attr "type" "mve_move")
3628 (set_attr "length""8")])
3633 (define_insn "mve_vcmphiq_m_u<mode>"
3635 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3636 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3637 (match_operand:MVE_2 2 "s_register_operand" "w")
3638 (match_operand:HI 3 "vpr_register_operand" "Up")]
3642 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
3643 [(set_attr "type" "mve_move")
3644 (set_attr "length""8")])
3649 (define_insn "mve_vcmpleq_m_n_s<mode>"
3651 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3652 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3653 (match_operand:<V_elem> 2 "s_register_operand" "r")
3654 (match_operand:HI 3 "vpr_register_operand" "Up")]
3658 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
3659 [(set_attr "type" "mve_move")
3660 (set_attr "length""8")])
3665 (define_insn "mve_vcmpleq_m_s<mode>"
3667 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3668 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3669 (match_operand:MVE_2 2 "s_register_operand" "w")
3670 (match_operand:HI 3 "vpr_register_operand" "Up")]
3674 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
3675 [(set_attr "type" "mve_move")
3676 (set_attr "length""8")])
3681 (define_insn "mve_vcmpltq_m_n_s<mode>"
3683 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3684 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3685 (match_operand:<V_elem> 2 "s_register_operand" "r")
3686 (match_operand:HI 3 "vpr_register_operand" "Up")]
3690 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
3691 [(set_attr "type" "mve_move")
3692 (set_attr "length""8")])
3697 (define_insn "mve_vcmpltq_m_s<mode>"
3699 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3700 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3701 (match_operand:MVE_2 2 "s_register_operand" "w")
3702 (match_operand:HI 3 "vpr_register_operand" "Up")]
3706 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
3707 [(set_attr "type" "mve_move")
3708 (set_attr "length""8")])
3711 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3713 (define_insn "mve_vcmpneq_m_n_<supf><mode>"
3715 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3716 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3717 (match_operand:<V_elem> 2 "s_register_operand" "r")
3718 (match_operand:HI 3 "vpr_register_operand" "Up")]
3722 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
3723 [(set_attr "type" "mve_move")
3724 (set_attr "length""8")])
3727 ;; [vcmpneq_m_s, vcmpneq_m_u])
3729 (define_insn "mve_vcmpneq_m_<supf><mode>"
3731 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3732 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3733 (match_operand:MVE_2 2 "s_register_operand" "w")
3734 (match_operand:HI 3 "vpr_register_operand" "Up")]
3738 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
3739 [(set_attr "type" "mve_move")
3740 (set_attr "length""8")])
3743 ;; [vdupq_m_n_s, vdupq_m_n_u])
3745 (define_insn "mve_vdupq_m_n_<supf><mode>"
3747 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3748 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3749 (match_operand:<V_elem> 2 "s_register_operand" "r")
3750 (match_operand:HI 3 "vpr_register_operand" "Up")]
3754 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3755 [(set_attr "type" "mve_move")
3756 (set_attr "length""8")])
3761 (define_insn "mve_vmaxaq_m_s<mode>"
3763 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3764 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3765 (match_operand:MVE_2 2 "s_register_operand" "w")
3766 (match_operand:HI 3 "vpr_register_operand" "Up")]
3770 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
3771 [(set_attr "type" "mve_move")
3772 (set_attr "length""8")])
3777 (define_insn "mve_vmaxavq_p_s<mode>"
3779 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3780 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3781 (match_operand:MVE_2 2 "s_register_operand" "w")
3782 (match_operand:HI 3 "vpr_register_operand" "Up")]
3786 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
3787 [(set_attr "type" "mve_move")
3788 (set_attr "length""8")])
3791 ;; [vmaxvq_p_u, vmaxvq_p_s])
3793 (define_insn "mve_vmaxvq_p_<supf><mode>"
3795 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3796 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3797 (match_operand:MVE_2 2 "s_register_operand" "w")
3798 (match_operand:HI 3 "vpr_register_operand" "Up")]
3802 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
3803 [(set_attr "type" "mve_move")
3804 (set_attr "length""8")])
3809 (define_insn "mve_vminaq_m_s<mode>"
3811 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3812 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3813 (match_operand:MVE_2 2 "s_register_operand" "w")
3814 (match_operand:HI 3 "vpr_register_operand" "Up")]
3818 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
3819 [(set_attr "type" "mve_move")
3820 (set_attr "length""8")])
3825 (define_insn "mve_vminavq_p_s<mode>"
3827 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3828 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3829 (match_operand:MVE_2 2 "s_register_operand" "w")
3830 (match_operand:HI 3 "vpr_register_operand" "Up")]
3834 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
3835 [(set_attr "type" "mve_move")
3836 (set_attr "length""8")])
3839 ;; [vminvq_p_s, vminvq_p_u])
3841 (define_insn "mve_vminvq_p_<supf><mode>"
3843 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3844 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3845 (match_operand:MVE_2 2 "s_register_operand" "w")
3846 (match_operand:HI 3 "vpr_register_operand" "Up")]
3850 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
3851 [(set_attr "type" "mve_move")
3852 (set_attr "length""8")])
3855 ;; [vmladavaq_u, vmladavaq_s])
3857 (define_insn "mve_vmladavaq_<supf><mode>"
3859 (set (match_operand:SI 0 "s_register_operand" "=e")
3860 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3861 (match_operand:MVE_2 2 "s_register_operand" "w")
3862 (match_operand:MVE_2 3 "s_register_operand" "w")]
3866 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
3867 [(set_attr "type" "mve_move")
3871 ;; [vmladavq_p_u, vmladavq_p_s])
3873 (define_insn "mve_vmladavq_p_<supf><mode>"
3875 (set (match_operand:SI 0 "s_register_operand" "=e")
3876 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3877 (match_operand:MVE_2 2 "s_register_operand" "w")
3878 (match_operand:HI 3 "vpr_register_operand" "Up")]
3882 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
3883 [(set_attr "type" "mve_move")
3884 (set_attr "length""8")])
3889 (define_insn "mve_vmladavxq_p_s<mode>"
3891 (set (match_operand:SI 0 "s_register_operand" "=e")
3892 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3893 (match_operand:MVE_2 2 "s_register_operand" "w")
3894 (match_operand:HI 3 "vpr_register_operand" "Up")]
3898 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
3899 [(set_attr "type" "mve_move")
3900 (set_attr "length""8")])
3903 ;; [vmlaq_n_u, vmlaq_n_s])
3905 (define_insn "mve_vmlaq_n_<supf><mode>"
3907 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3908 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3909 (match_operand:MVE_2 2 "s_register_operand" "w")
3910 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3914 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
3915 [(set_attr "type" "mve_move")
3919 ;; [vmlasq_n_u, vmlasq_n_s])
3921 (define_insn "mve_vmlasq_n_<supf><mode>"
3923 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3924 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3925 (match_operand:MVE_2 2 "s_register_operand" "w")
3926 (match_operand:<V_elem> 3 "s_register_operand" "r")]
3930 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
3931 [(set_attr "type" "mve_move")
3937 (define_insn "mve_vmlsdavq_p_s<mode>"
3939 (set (match_operand:SI 0 "s_register_operand" "=e")
3940 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3941 (match_operand:MVE_2 2 "s_register_operand" "w")
3942 (match_operand:HI 3 "vpr_register_operand" "Up")]
3946 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
3947 [(set_attr "type" "mve_move")
3948 (set_attr "length""8")])
3953 (define_insn "mve_vmlsdavxq_p_s<mode>"
3955 (set (match_operand:SI 0 "s_register_operand" "=e")
3956 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
3957 (match_operand:MVE_2 2 "s_register_operand" "w")
3958 (match_operand:HI 3 "vpr_register_operand" "Up")]
3962 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
3963 [(set_attr "type" "mve_move")
3964 (set_attr "length""8")])
3967 ;; [vmvnq_m_s, vmvnq_m_u])
3969 (define_insn "mve_vmvnq_m_<supf><mode>"
3971 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3972 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3973 (match_operand:MVE_2 2 "s_register_operand" "w")
3974 (match_operand:HI 3 "vpr_register_operand" "Up")]
3978 "vpst\;vmvnt %q0, %q2"
3979 [(set_attr "type" "mve_move")
3980 (set_attr "length""8")])
3985 (define_insn "mve_vnegq_m_s<mode>"
3987 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3988 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3989 (match_operand:MVE_2 2 "s_register_operand" "w")
3990 (match_operand:HI 3 "vpr_register_operand" "Up")]
3994 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
3995 [(set_attr "type" "mve_move")
3996 (set_attr "length""8")])
3999 ;; [vpselq_u, vpselq_s])
4001 (define_insn "mve_vpselq_<supf><mode>"
4003 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
4004 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
4005 (match_operand:MVE_1 2 "s_register_operand" "w")
4006 (match_operand:HI 3 "vpr_register_operand" "Up")]
4010 "vpsel %q0, %q1, %q2"
4011 [(set_attr "type" "mve_move")
4017 (define_insn "mve_vqabsq_m_s<mode>"
4019 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4020 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4021 (match_operand:MVE_2 2 "s_register_operand" "w")
4022 (match_operand:HI 3 "vpr_register_operand" "Up")]
4026 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
4027 [(set_attr "type" "mve_move")
4028 (set_attr "length""8")])
4031 ;; [vqdmlahq_n_s, vqdmlahq_n_u])
4033 (define_insn "mve_vqdmlahq_n_<supf><mode>"
4035 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4036 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4037 (match_operand:MVE_2 2 "s_register_operand" "w")
4038 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4042 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
4043 [(set_attr "type" "mve_move")
4049 (define_insn "mve_vqnegq_m_s<mode>"
4051 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4052 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4053 (match_operand:MVE_2 2 "s_register_operand" "w")
4054 (match_operand:HI 3 "vpr_register_operand" "Up")]
4058 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
4059 [(set_attr "type" "mve_move")
4060 (set_attr "length""8")])
4065 (define_insn "mve_vqrdmladhq_s<mode>"
4067 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4068 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4069 (match_operand:MVE_2 2 "s_register_operand" "w")
4070 (match_operand:MVE_2 3 "s_register_operand" "w")]
4074 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4075 [(set_attr "type" "mve_move")
4081 (define_insn "mve_vqrdmladhxq_s<mode>"
4083 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4084 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4085 (match_operand:MVE_2 2 "s_register_operand" "w")
4086 (match_operand:MVE_2 3 "s_register_operand" "w")]
4090 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4091 [(set_attr "type" "mve_move")
4095 ;; [vqrdmlahq_n_s, vqrdmlahq_n_u])
4097 (define_insn "mve_vqrdmlahq_n_<supf><mode>"
4099 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4100 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4101 (match_operand:MVE_2 2 "s_register_operand" "w")
4102 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4106 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
4107 [(set_attr "type" "mve_move")
4111 ;; [vqrdmlashq_n_s, vqrdmlashq_n_u])
4113 (define_insn "mve_vqrdmlashq_n_<supf><mode>"
4115 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4116 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4117 (match_operand:MVE_2 2 "s_register_operand" "w")
4118 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4122 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
4123 [(set_attr "type" "mve_move")
4129 (define_insn "mve_vqrdmlsdhq_s<mode>"
4131 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4132 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4133 (match_operand:MVE_2 2 "s_register_operand" "w")
4134 (match_operand:MVE_2 3 "s_register_operand" "w")]
4138 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4139 [(set_attr "type" "mve_move")
4145 (define_insn "mve_vqrdmlsdhxq_s<mode>"
4147 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4148 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4149 (match_operand:MVE_2 2 "s_register_operand" "w")
4150 (match_operand:MVE_2 3 "s_register_operand" "w")]
4154 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4155 [(set_attr "type" "mve_move")
4159 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
4161 (define_insn "mve_vqrshlq_m_n_<supf><mode>"
4163 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4164 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4165 (match_operand:SI 2 "s_register_operand" "r")
4166 (match_operand:HI 3 "vpr_register_operand" "Up")]
4170 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
4171 [(set_attr "type" "mve_move")
4172 (set_attr "length""8")])
4175 ;; [vqshlq_m_r_u, vqshlq_m_r_s])
4177 (define_insn "mve_vqshlq_m_r_<supf><mode>"
4179 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4180 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4181 (match_operand:SI 2 "s_register_operand" "r")
4182 (match_operand:HI 3 "vpr_register_operand" "Up")]
4186 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
4187 [(set_attr "type" "mve_move")
4188 (set_attr "length""8")])
4191 ;; [vrev64q_m_u, vrev64q_m_s])
4193 (define_insn "mve_vrev64q_m_<supf><mode>"
4195 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4196 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4197 (match_operand:MVE_2 2 "s_register_operand" "w")
4198 (match_operand:HI 3 "vpr_register_operand" "Up")]
4202 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
4203 [(set_attr "type" "mve_move")
4204 (set_attr "length""8")])
4207 ;; [vrshlq_m_n_s, vrshlq_m_n_u])
4209 (define_insn "mve_vrshlq_m_n_<supf><mode>"
4211 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4212 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4213 (match_operand:SI 2 "s_register_operand" "r")
4214 (match_operand:HI 3 "vpr_register_operand" "Up")]
4218 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
4219 [(set_attr "type" "mve_move")
4220 (set_attr "length""8")])
4223 ;; [vshlq_m_r_u, vshlq_m_r_s])
4225 (define_insn "mve_vshlq_m_r_<supf><mode>"
4227 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4228 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4229 (match_operand:SI 2 "s_register_operand" "r")
4230 (match_operand:HI 3 "vpr_register_operand" "Up")]
4234 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
4235 [(set_attr "type" "mve_move")
4236 (set_attr "length""8")])
4239 ;; [vsliq_n_u, vsliq_n_s])
4241 (define_insn "mve_vsliq_n_<supf><mode>"
4243 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4244 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4245 (match_operand:MVE_2 2 "s_register_operand" "w")
4246 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
4250 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
4251 [(set_attr "type" "mve_move")
4255 ;; [vsriq_n_u, vsriq_n_s])
4257 (define_insn "mve_vsriq_n_<supf><mode>"
4259 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4260 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4261 (match_operand:MVE_2 2 "s_register_operand" "w")
4262 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
4266 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
4267 [(set_attr "type" "mve_move")
4273 (define_insn "mve_vqdmlsdhxq_s<mode>"
4275 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4276 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4277 (match_operand:MVE_2 2 "s_register_operand" "w")
4278 (match_operand:MVE_2 3 "s_register_operand" "w")]
4282 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4283 [(set_attr "type" "mve_move")
4289 (define_insn "mve_vqdmlsdhq_s<mode>"
4291 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4292 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4293 (match_operand:MVE_2 2 "s_register_operand" "w")
4294 (match_operand:MVE_2 3 "s_register_operand" "w")]
4298 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4299 [(set_attr "type" "mve_move")
4305 (define_insn "mve_vqdmladhxq_s<mode>"
4307 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4308 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4309 (match_operand:MVE_2 2 "s_register_operand" "w")
4310 (match_operand:MVE_2 3 "s_register_operand" "w")]
4314 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4315 [(set_attr "type" "mve_move")
4321 (define_insn "mve_vqdmladhq_s<mode>"
4323 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4324 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4325 (match_operand:MVE_2 2 "s_register_operand" "w")
4326 (match_operand:MVE_2 3 "s_register_operand" "w")]
4330 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4331 [(set_attr "type" "mve_move")
4337 (define_insn "mve_vmlsdavaxq_s<mode>"
4339 (set (match_operand:SI 0 "s_register_operand" "=e")
4340 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4341 (match_operand:MVE_2 2 "s_register_operand" "w")
4342 (match_operand:MVE_2 3 "s_register_operand" "w")]
4346 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4347 [(set_attr "type" "mve_move")
4353 (define_insn "mve_vmlsdavaq_s<mode>"
4355 (set (match_operand:SI 0 "s_register_operand" "=e")
4356 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4357 (match_operand:MVE_2 2 "s_register_operand" "w")
4358 (match_operand:MVE_2 3 "s_register_operand" "w")]
4362 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
4363 [(set_attr "type" "mve_move")
4369 (define_insn "mve_vmladavaxq_s<mode>"
4371 (set (match_operand:SI 0 "s_register_operand" "=e")
4372 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4373 (match_operand:MVE_2 2 "s_register_operand" "w")
4374 (match_operand:MVE_2 3 "s_register_operand" "w")]
4378 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4379 [(set_attr "type" "mve_move")
4384 (define_insn "mve_vabsq_m_f<mode>"
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:HI 3 "vpr_register_operand" "Up")]
4392 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4393 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
4394 [(set_attr "type" "mve_move")
4395 (set_attr "length""8")])
4398 ;; [vaddlvaq_p_s vaddlvaq_p_u])
4400 (define_insn "mve_vaddlvaq_p_<supf>v4si"
4402 (set (match_operand:DI 0 "s_register_operand" "=r")
4403 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4404 (match_operand:V4SI 2 "s_register_operand" "w")
4405 (match_operand:HI 3 "vpr_register_operand" "Up")]
4409 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
4410 [(set_attr "type" "mve_move")
4411 (set_attr "length""8")])
4415 (define_insn "mve_vcmlaq_f<mode>"
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:MVE_0 3 "s_register_operand" "w")]
4423 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4424 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #0"
4425 [(set_attr "type" "mve_move")
4429 ;; [vcmlaq_rot180_f])
4431 (define_insn "mve_vcmlaq_rot180_f<mode>"
4433 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4434 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4435 (match_operand:MVE_0 2 "s_register_operand" "w")
4436 (match_operand:MVE_0 3 "s_register_operand" "w")]
4439 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4440 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #180"
4441 [(set_attr "type" "mve_move")
4445 ;; [vcmlaq_rot270_f])
4447 (define_insn "mve_vcmlaq_rot270_f<mode>"
4449 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4450 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4451 (match_operand:MVE_0 2 "s_register_operand" "w")
4452 (match_operand:MVE_0 3 "s_register_operand" "w")]
4455 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4456 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #270"
4457 [(set_attr "type" "mve_move")
4461 ;; [vcmlaq_rot90_f])
4463 (define_insn "mve_vcmlaq_rot90_f<mode>"
4465 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4466 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4467 (match_operand:MVE_0 2 "s_register_operand" "w")
4468 (match_operand:MVE_0 3 "s_register_operand" "w")]
4471 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4472 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #90"
4473 [(set_attr "type" "mve_move")
4479 (define_insn "mve_vcmpeqq_m_n_f<mode>"
4481 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4482 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4483 (match_operand:<V_elem> 2 "s_register_operand" "r")
4484 (match_operand:HI 3 "vpr_register_operand" "Up")]
4487 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4488 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
4489 [(set_attr "type" "mve_move")
4490 (set_attr "length""8")])
4495 (define_insn "mve_vcmpgeq_m_f<mode>"
4497 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4498 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4499 (match_operand:MVE_0 2 "s_register_operand" "w")
4500 (match_operand:HI 3 "vpr_register_operand" "Up")]
4503 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4504 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
4505 [(set_attr "type" "mve_move")
4506 (set_attr "length""8")])
4511 (define_insn "mve_vcmpgeq_m_n_f<mode>"
4513 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4514 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4515 (match_operand:<V_elem> 2 "s_register_operand" "r")
4516 (match_operand:HI 3 "vpr_register_operand" "Up")]
4519 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4520 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
4521 [(set_attr "type" "mve_move")
4522 (set_attr "length""8")])
4527 (define_insn "mve_vcmpgtq_m_f<mode>"
4529 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4530 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4531 (match_operand:MVE_0 2 "s_register_operand" "w")
4532 (match_operand:HI 3 "vpr_register_operand" "Up")]
4535 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4536 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
4537 [(set_attr "type" "mve_move")
4538 (set_attr "length""8")])
4543 (define_insn "mve_vcmpgtq_m_n_f<mode>"
4545 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4546 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4547 (match_operand:<V_elem> 2 "s_register_operand" "r")
4548 (match_operand:HI 3 "vpr_register_operand" "Up")]
4551 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4552 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
4553 [(set_attr "type" "mve_move")
4554 (set_attr "length""8")])
4559 (define_insn "mve_vcmpleq_m_f<mode>"
4561 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4562 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4563 (match_operand:MVE_0 2 "s_register_operand" "w")
4564 (match_operand:HI 3 "vpr_register_operand" "Up")]
4567 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4568 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
4569 [(set_attr "type" "mve_move")
4570 (set_attr "length""8")])
4575 (define_insn "mve_vcmpleq_m_n_f<mode>"
4577 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4578 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4579 (match_operand:<V_elem> 2 "s_register_operand" "r")
4580 (match_operand:HI 3 "vpr_register_operand" "Up")]
4583 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4584 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
4585 [(set_attr "type" "mve_move")
4586 (set_attr "length""8")])
4591 (define_insn "mve_vcmpltq_m_f<mode>"
4593 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4594 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4595 (match_operand:MVE_0 2 "s_register_operand" "w")
4596 (match_operand:HI 3 "vpr_register_operand" "Up")]
4599 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4600 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
4601 [(set_attr "type" "mve_move")
4602 (set_attr "length""8")])
4607 (define_insn "mve_vcmpltq_m_n_f<mode>"
4609 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4610 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4611 (match_operand:<V_elem> 2 "s_register_operand" "r")
4612 (match_operand:HI 3 "vpr_register_operand" "Up")]
4615 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4616 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
4617 [(set_attr "type" "mve_move")
4618 (set_attr "length""8")])
4623 (define_insn "mve_vcmpneq_m_f<mode>"
4625 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4626 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4627 (match_operand:MVE_0 2 "s_register_operand" "w")
4628 (match_operand:HI 3 "vpr_register_operand" "Up")]
4631 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4632 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
4633 [(set_attr "type" "mve_move")
4634 (set_attr "length""8")])
4639 (define_insn "mve_vcmpneq_m_n_f<mode>"
4641 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4642 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4643 (match_operand:<V_elem> 2 "s_register_operand" "r")
4644 (match_operand:HI 3 "vpr_register_operand" "Up")]
4647 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4648 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
4649 [(set_attr "type" "mve_move")
4650 (set_attr "length""8")])
4653 ;; [vcvtbq_m_f16_f32])
4655 (define_insn "mve_vcvtbq_m_f16_f32v8hf"
4657 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4658 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4659 (match_operand:V4SF 2 "s_register_operand" "w")
4660 (match_operand:HI 3 "vpr_register_operand" "Up")]
4663 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4664 "vpst\;vcvtbt.f16.f32 %q0, %q2"
4665 [(set_attr "type" "mve_move")
4666 (set_attr "length""8")])
4669 ;; [vcvtbq_m_f32_f16])
4671 (define_insn "mve_vcvtbq_m_f32_f16v4sf"
4673 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4674 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4675 (match_operand:V8HF 2 "s_register_operand" "w")
4676 (match_operand:HI 3 "vpr_register_operand" "Up")]
4679 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4680 "vpst\;vcvtbt.f32.f16 %q0, %q2"
4681 [(set_attr "type" "mve_move")
4682 (set_attr "length""8")])
4685 ;; [vcvttq_m_f16_f32])
4687 (define_insn "mve_vcvttq_m_f16_f32v8hf"
4689 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4690 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4691 (match_operand:V4SF 2 "s_register_operand" "w")
4692 (match_operand:HI 3 "vpr_register_operand" "Up")]
4695 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4696 "vpst\;vcvttt.f16.f32 %q0, %q2"
4697 [(set_attr "type" "mve_move")
4698 (set_attr "length""8")])
4701 ;; [vcvttq_m_f32_f16])
4703 (define_insn "mve_vcvttq_m_f32_f16v4sf"
4705 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4706 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4707 (match_operand:V8HF 2 "s_register_operand" "w")
4708 (match_operand:HI 3 "vpr_register_operand" "Up")]
4711 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4712 "vpst\;vcvttt.f32.f16 %q0, %q2"
4713 [(set_attr "type" "mve_move")
4714 (set_attr "length""8")])
4719 (define_insn "mve_vdupq_m_n_f<mode>"
4721 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4722 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4723 (match_operand:<V_elem> 2 "s_register_operand" "r")
4724 (match_operand:HI 3 "vpr_register_operand" "Up")]
4727 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4728 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
4729 [(set_attr "type" "mve_move")
4730 (set_attr "length""8")])
4735 (define_insn "mve_vfmaq_f<mode>"
4737 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4738 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4739 (match_operand:MVE_0 2 "s_register_operand" "w")
4740 (match_operand:MVE_0 3 "s_register_operand" "w")]
4743 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4744 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
4745 [(set_attr "type" "mve_move")
4751 (define_insn "mve_vfmaq_n_f<mode>"
4753 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4754 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4755 (match_operand:MVE_0 2 "s_register_operand" "w")
4756 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4759 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4760 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
4761 [(set_attr "type" "mve_move")
4767 (define_insn "mve_vfmasq_n_f<mode>"
4769 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4770 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4771 (match_operand:MVE_0 2 "s_register_operand" "w")
4772 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4775 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4776 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
4777 [(set_attr "type" "mve_move")
4782 (define_insn "mve_vfmsq_f<mode>"
4784 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4785 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4786 (match_operand:MVE_0 2 "s_register_operand" "w")
4787 (match_operand:MVE_0 3 "s_register_operand" "w")]
4790 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4791 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
4792 [(set_attr "type" "mve_move")
4798 (define_insn "mve_vmaxnmaq_m_f<mode>"
4800 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4801 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4802 (match_operand:MVE_0 2 "s_register_operand" "w")
4803 (match_operand:HI 3 "vpr_register_operand" "Up")]
4806 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4807 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
4808 [(set_attr "type" "mve_move")
4809 (set_attr "length""8")])
4813 (define_insn "mve_vmaxnmavq_p_f<mode>"
4815 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4816 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4817 (match_operand:MVE_0 2 "s_register_operand" "w")
4818 (match_operand:HI 3 "vpr_register_operand" "Up")]
4821 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4822 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
4823 [(set_attr "type" "mve_move")
4824 (set_attr "length""8")])
4829 (define_insn "mve_vmaxnmvq_p_f<mode>"
4831 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4832 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4833 (match_operand:MVE_0 2 "s_register_operand" "w")
4834 (match_operand:HI 3 "vpr_register_operand" "Up")]
4837 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4838 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
4839 [(set_attr "type" "mve_move")
4840 (set_attr "length""8")])
4844 (define_insn "mve_vminnmaq_m_f<mode>"
4846 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4847 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4848 (match_operand:MVE_0 2 "s_register_operand" "w")
4849 (match_operand:HI 3 "vpr_register_operand" "Up")]
4852 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4853 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
4854 [(set_attr "type" "mve_move")
4855 (set_attr "length""8")])
4860 (define_insn "mve_vminnmavq_p_f<mode>"
4862 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4863 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4864 (match_operand:MVE_0 2 "s_register_operand" "w")
4865 (match_operand:HI 3 "vpr_register_operand" "Up")]
4868 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4869 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
4870 [(set_attr "type" "mve_move")
4871 (set_attr "length""8")])
4875 (define_insn "mve_vminnmvq_p_f<mode>"
4877 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4878 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4879 (match_operand:MVE_0 2 "s_register_operand" "w")
4880 (match_operand:HI 3 "vpr_register_operand" "Up")]
4883 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4884 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
4885 [(set_attr "type" "mve_move")
4886 (set_attr "length""8")])
4889 ;; [vmlaldavaq_s, vmlaldavaq_u])
4891 (define_insn "mve_vmlaldavaq_<supf><mode>"
4893 (set (match_operand:DI 0 "s_register_operand" "=r")
4894 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4895 (match_operand:MVE_5 2 "s_register_operand" "w")
4896 (match_operand:MVE_5 3 "s_register_operand" "w")]
4900 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4901 [(set_attr "type" "mve_move")
4907 (define_insn "mve_vmlaldavaxq_s<mode>"
4909 (set (match_operand:DI 0 "s_register_operand" "=r")
4910 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4911 (match_operand:MVE_5 2 "s_register_operand" "w")
4912 (match_operand:MVE_5 3 "s_register_operand" "w")]
4916 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4917 [(set_attr "type" "mve_move")
4921 ;; [vmlaldavq_p_u, vmlaldavq_p_s])
4923 (define_insn "mve_vmlaldavq_p_<supf><mode>"
4925 (set (match_operand:DI 0 "s_register_operand" "=r")
4926 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4927 (match_operand:MVE_5 2 "s_register_operand" "w")
4928 (match_operand:HI 3 "vpr_register_operand" "Up")]
4932 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4933 [(set_attr "type" "mve_move")
4934 (set_attr "length""8")])
4937 ;; [vmlaldavxq_p_s])
4939 (define_insn "mve_vmlaldavxq_p_s<mode>"
4941 (set (match_operand:DI 0 "s_register_operand" "=r")
4942 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4943 (match_operand:MVE_5 2 "s_register_operand" "w")
4944 (match_operand:HI 3 "vpr_register_operand" "Up")]
4948 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
4949 [(set_attr "type" "mve_move")
4950 (set_attr "length""8")])
4954 (define_insn "mve_vmlsldavaq_s<mode>"
4956 (set (match_operand:DI 0 "s_register_operand" "=r")
4957 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4958 (match_operand:MVE_5 2 "s_register_operand" "w")
4959 (match_operand:MVE_5 3 "s_register_operand" "w")]
4963 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4964 [(set_attr "type" "mve_move")
4970 (define_insn "mve_vmlsldavaxq_s<mode>"
4972 (set (match_operand:DI 0 "s_register_operand" "=r")
4973 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4974 (match_operand:MVE_5 2 "s_register_operand" "w")
4975 (match_operand:MVE_5 3 "s_register_operand" "w")]
4979 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
4980 [(set_attr "type" "mve_move")
4986 (define_insn "mve_vmlsldavq_p_s<mode>"
4988 (set (match_operand:DI 0 "s_register_operand" "=r")
4989 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
4990 (match_operand:MVE_5 2 "s_register_operand" "w")
4991 (match_operand:HI 3 "vpr_register_operand" "Up")]
4995 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
4996 [(set_attr "type" "mve_move")
4997 (set_attr "length""8")])
5000 ;; [vmlsldavxq_p_s])
5002 (define_insn "mve_vmlsldavxq_p_s<mode>"
5004 (set (match_operand:DI 0 "s_register_operand" "=r")
5005 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
5006 (match_operand:MVE_5 2 "s_register_operand" "w")
5007 (match_operand:HI 3 "vpr_register_operand" "Up")]
5011 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
5012 [(set_attr "type" "mve_move")
5013 (set_attr "length""8")])
5015 ;; [vmovlbq_m_u, vmovlbq_m_s])
5017 (define_insn "mve_vmovlbq_m_<supf><mode>"
5019 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
5020 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5021 (match_operand:MVE_3 2 "s_register_operand" "w")
5022 (match_operand:HI 3 "vpr_register_operand" "Up")]
5026 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
5027 [(set_attr "type" "mve_move")
5028 (set_attr "length""8")])
5030 ;; [vmovltq_m_u, vmovltq_m_s])
5032 (define_insn "mve_vmovltq_m_<supf><mode>"
5034 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
5035 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5036 (match_operand:MVE_3 2 "s_register_operand" "w")
5037 (match_operand:HI 3 "vpr_register_operand" "Up")]
5041 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
5042 [(set_attr "type" "mve_move")
5043 (set_attr "length""8")])
5045 ;; [vmovnbq_m_u, vmovnbq_m_s])
5047 (define_insn "mve_vmovnbq_m_<supf><mode>"
5049 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5050 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5051 (match_operand:MVE_5 2 "s_register_operand" "w")
5052 (match_operand:HI 3 "vpr_register_operand" "Up")]
5056 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
5057 [(set_attr "type" "mve_move")
5058 (set_attr "length""8")])
5061 ;; [vmovntq_m_u, vmovntq_m_s])
5063 (define_insn "mve_vmovntq_m_<supf><mode>"
5065 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5066 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5067 (match_operand:MVE_5 2 "s_register_operand" "w")
5068 (match_operand:HI 3 "vpr_register_operand" "Up")]
5072 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
5073 [(set_attr "type" "mve_move")
5074 (set_attr "length""8")])
5077 ;; [vmvnq_m_n_u, vmvnq_m_n_s])
5079 (define_insn "mve_vmvnq_m_n_<supf><mode>"
5081 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5082 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5083 (match_operand:SI 2 "immediate_operand" "i")
5084 (match_operand:HI 3 "vpr_register_operand" "Up")]
5088 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
5089 [(set_attr "type" "mve_move")
5090 (set_attr "length""8")])
5094 (define_insn "mve_vnegq_m_f<mode>"
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")]
5102 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5103 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
5104 [(set_attr "type" "mve_move")
5105 (set_attr "length""8")])
5108 ;; [vorrq_m_n_s, vorrq_m_n_u])
5110 (define_insn "mve_vorrq_m_n_<supf><mode>"
5112 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5113 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5114 (match_operand:SI 2 "immediate_operand" "i")
5115 (match_operand:HI 3 "vpr_register_operand" "Up")]
5119 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
5120 [(set_attr "type" "mve_move")
5121 (set_attr "length""8")])
5125 (define_insn "mve_vpselq_f<mode>"
5127 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5128 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
5129 (match_operand:MVE_0 2 "s_register_operand" "w")
5130 (match_operand:HI 3 "vpr_register_operand" "Up")]
5133 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5134 "vpsel %q0, %q1, %q2"
5135 [(set_attr "type" "mve_move")
5139 ;; [vqmovnbq_m_s, vqmovnbq_m_u])
5141 (define_insn "mve_vqmovnbq_m_<supf><mode>"
5143 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5144 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5145 (match_operand:MVE_5 2 "s_register_operand" "w")
5146 (match_operand:HI 3 "vpr_register_operand" "Up")]
5150 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
5151 [(set_attr "type" "mve_move")
5152 (set_attr "length""8")])
5155 ;; [vqmovntq_m_u, vqmovntq_m_s])
5157 (define_insn "mve_vqmovntq_m_<supf><mode>"
5159 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5160 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5161 (match_operand:MVE_5 2 "s_register_operand" "w")
5162 (match_operand:HI 3 "vpr_register_operand" "Up")]
5166 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
5167 [(set_attr "type" "mve_move")
5168 (set_attr "length""8")])
5173 (define_insn "mve_vqmovunbq_m_s<mode>"
5175 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5176 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5177 (match_operand:MVE_5 2 "s_register_operand" "w")
5178 (match_operand:HI 3 "vpr_register_operand" "Up")]
5182 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
5183 [(set_attr "type" "mve_move")
5184 (set_attr "length""8")])
5189 (define_insn "mve_vqmovuntq_m_s<mode>"
5191 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5192 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5193 (match_operand:MVE_5 2 "s_register_operand" "w")
5194 (match_operand:HI 3 "vpr_register_operand" "Up")]
5198 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
5199 [(set_attr "type" "mve_move")
5200 (set_attr "length""8")])
5203 ;; [vqrshrntq_n_u, vqrshrntq_n_s])
5205 (define_insn "mve_vqrshrntq_n_<supf><mode>"
5207 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5208 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5209 (match_operand:MVE_5 2 "s_register_operand" "w")
5210 (match_operand:SI 3 "mve_imm_8" "Rb")]
5214 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5215 [(set_attr "type" "mve_move")
5219 ;; [vqrshruntq_n_s])
5221 (define_insn "mve_vqrshruntq_n_s<mode>"
5223 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5224 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5225 (match_operand:MVE_5 2 "s_register_operand" "w")
5226 (match_operand:SI 3 "mve_imm_8" "Rb")]
5230 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
5231 [(set_attr "type" "mve_move")
5235 ;; [vqshrnbq_n_u, vqshrnbq_n_s])
5237 (define_insn "mve_vqshrnbq_n_<supf><mode>"
5239 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5240 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5241 (match_operand:MVE_5 2 "s_register_operand" "w")
5242 (match_operand:SI 3 "<MVE_pred1>" "<MVE_constraint1>")]
5246 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5247 [(set_attr "type" "mve_move")
5251 ;; [vqshrntq_n_u, vqshrntq_n_s])
5253 (define_insn "mve_vqshrntq_n_<supf><mode>"
5255 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5256 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5257 (match_operand:MVE_5 2 "s_register_operand" "w")
5258 (match_operand:SI 3 "mve_imm_8" "Rb")]
5262 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5263 [(set_attr "type" "mve_move")
5269 (define_insn "mve_vqshrunbq_n_s<mode>"
5271 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5272 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5273 (match_operand:MVE_5 2 "s_register_operand" "w")
5274 (match_operand:SI 3 "immediate_operand" "i")]
5278 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
5279 [(set_attr "type" "mve_move")
5285 (define_insn "mve_vqshruntq_n_s<mode>"
5287 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5288 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5289 (match_operand:MVE_5 2 "s_register_operand" "w")
5290 (match_operand:SI 3 "mve_imm_8" "Rb")]
5294 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
5295 [(set_attr "type" "mve_move")
5301 (define_insn "mve_vrev32q_m_fv8hf"
5303 (set (match_operand:V8HF 0 "s_register_operand" "=w")
5304 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
5305 (match_operand:V8HF 2 "s_register_operand" "w")
5306 (match_operand:HI 3 "vpr_register_operand" "Up")]
5309 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5310 "vpst\;vrev32t.16 %q0, %q2"
5311 [(set_attr "type" "mve_move")
5312 (set_attr "length""8")])
5315 ;; [vrev32q_m_s, vrev32q_m_u])
5317 (define_insn "mve_vrev32q_m_<supf><mode>"
5319 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
5320 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
5321 (match_operand:MVE_3 2 "s_register_operand" "w")
5322 (match_operand:HI 3 "vpr_register_operand" "Up")]
5326 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
5327 [(set_attr "type" "mve_move")
5328 (set_attr "length""8")])
5333 (define_insn "mve_vrev64q_m_f<mode>"
5335 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5336 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5337 (match_operand:MVE_0 2 "s_register_operand" "w")
5338 (match_operand:HI 3 "vpr_register_operand" "Up")]
5341 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5342 "vpst\;vrev64t.%#<V_sz_elem> %q0, %q2"
5343 [(set_attr "type" "mve_move")
5344 (set_attr "length""8")])
5347 ;; [vrmlaldavhaxq_s])
5349 (define_insn "mve_vrmlaldavhaxq_sv4si"
5351 (set (match_operand:DI 0 "s_register_operand" "=r")
5352 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5353 (match_operand:V4SI 2 "s_register_operand" "w")
5354 (match_operand:V4SI 3 "s_register_operand" "w")]
5358 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
5359 [(set_attr "type" "mve_move")
5363 ;; [vrmlaldavhxq_p_s])
5365 (define_insn "mve_vrmlaldavhxq_p_sv4si"
5367 (set (match_operand:DI 0 "s_register_operand" "=r")
5368 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5369 (match_operand:V4SI 2 "s_register_operand" "w")
5370 (match_operand:HI 3 "vpr_register_operand" "Up")]
5374 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
5375 [(set_attr "type" "mve_move")
5376 (set_attr "length""8")])
5379 ;; [vrmlsldavhaxq_s])
5381 (define_insn "mve_vrmlsldavhaxq_sv4si"
5383 (set (match_operand:DI 0 "s_register_operand" "=r")
5384 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5385 (match_operand:V4SI 2 "s_register_operand" "w")
5386 (match_operand:V4SI 3 "s_register_operand" "w")]
5390 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
5391 [(set_attr "type" "mve_move")
5395 ;; [vrmlsldavhq_p_s])
5397 (define_insn "mve_vrmlsldavhq_p_sv4si"
5399 (set (match_operand:DI 0 "s_register_operand" "=r")
5400 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5401 (match_operand:V4SI 2 "s_register_operand" "w")
5402 (match_operand:HI 3 "vpr_register_operand" "Up")]
5406 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
5407 [(set_attr "type" "mve_move")
5408 (set_attr "length""8")])
5411 ;; [vrmlsldavhxq_p_s])
5413 (define_insn "mve_vrmlsldavhxq_p_sv4si"
5415 (set (match_operand:DI 0 "s_register_operand" "=r")
5416 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5417 (match_operand:V4SI 2 "s_register_operand" "w")
5418 (match_operand:HI 3 "vpr_register_operand" "Up")]
5422 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
5423 [(set_attr "type" "mve_move")
5424 (set_attr "length""8")])
5429 (define_insn "mve_vrndaq_m_f<mode>"
5431 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5432 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5433 (match_operand:MVE_0 2 "s_register_operand" "w")
5434 (match_operand:HI 3 "vpr_register_operand" "Up")]
5437 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5438 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
5439 [(set_attr "type" "mve_move")
5440 (set_attr "length""8")])
5445 (define_insn "mve_vrndmq_m_f<mode>"
5447 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5448 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5449 (match_operand:MVE_0 2 "s_register_operand" "w")
5450 (match_operand:HI 3 "vpr_register_operand" "Up")]
5453 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5454 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
5455 [(set_attr "type" "mve_move")
5456 (set_attr "length""8")])
5461 (define_insn "mve_vrndnq_m_f<mode>"
5463 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5464 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5465 (match_operand:MVE_0 2 "s_register_operand" "w")
5466 (match_operand:HI 3 "vpr_register_operand" "Up")]
5469 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5470 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
5471 [(set_attr "type" "mve_move")
5472 (set_attr "length""8")])
5477 (define_insn "mve_vrndpq_m_f<mode>"
5479 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5480 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5481 (match_operand:MVE_0 2 "s_register_operand" "w")
5482 (match_operand:HI 3 "vpr_register_operand" "Up")]
5485 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5486 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
5487 [(set_attr "type" "mve_move")
5488 (set_attr "length""8")])
5493 (define_insn "mve_vrndxq_m_f<mode>"
5495 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5496 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5497 (match_operand:MVE_0 2 "s_register_operand" "w")
5498 (match_operand:HI 3 "vpr_register_operand" "Up")]
5501 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5502 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
5503 [(set_attr "type" "mve_move")
5504 (set_attr "length""8")])
5507 ;; [vrshrnbq_n_s, vrshrnbq_n_u])
5509 (define_insn "mve_vrshrnbq_n_<supf><mode>"
5511 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5512 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5513 (match_operand:MVE_5 2 "s_register_operand" "w")
5514 (match_operand:SI 3 "mve_imm_8" "Rb")]
5518 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5519 [(set_attr "type" "mve_move")
5523 ;; [vrshrntq_n_u, vrshrntq_n_s])
5525 (define_insn "mve_vrshrntq_n_<supf><mode>"
5527 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5528 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5529 (match_operand:MVE_5 2 "s_register_operand" "w")
5530 (match_operand:SI 3 "mve_imm_8" "Rb")]
5534 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
5535 [(set_attr "type" "mve_move")
5539 ;; [vshrnbq_n_u, vshrnbq_n_s])
5541 (define_insn "mve_vshrnbq_n_<supf><mode>"
5543 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5544 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5545 (match_operand:MVE_5 2 "s_register_operand" "w")
5546 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5550 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5551 [(set_attr "type" "mve_move")
5555 ;; [vshrntq_n_s, vshrntq_n_u])
5557 (define_insn "mve_vshrntq_n_<supf><mode>"
5559 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5560 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5561 (match_operand:MVE_5 2 "s_register_operand" "w")
5562 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5566 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
5567 [(set_attr "type" "mve_move")
5571 ;; [vcvtmq_m_s, vcvtmq_m_u])
5573 (define_insn "mve_vcvtmq_m_<supf><mode>"
5575 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5576 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5577 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5578 (match_operand:HI 3 "vpr_register_operand" "Up")]
5581 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5582 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5583 [(set_attr "type" "mve_move")
5584 (set_attr "length""8")])
5587 ;; [vcvtpq_m_u, vcvtpq_m_s])
5589 (define_insn "mve_vcvtpq_m_<supf><mode>"
5591 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5592 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5593 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5594 (match_operand:HI 3 "vpr_register_operand" "Up")]
5597 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5598 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5599 [(set_attr "type" "mve_move")
5600 (set_attr "length""8")])
5603 ;; [vcvtnq_m_s, vcvtnq_m_u])
5605 (define_insn "mve_vcvtnq_m_<supf><mode>"
5607 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5608 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5609 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5610 (match_operand:HI 3 "vpr_register_operand" "Up")]
5613 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5614 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5615 [(set_attr "type" "mve_move")
5616 (set_attr "length""8")])
5619 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
5621 (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
5623 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5624 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5625 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5626 (match_operand:SI 3 "mve_imm_16" "Rd")
5627 (match_operand:HI 4 "vpr_register_operand" "Up")]
5630 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5631 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
5632 [(set_attr "type" "mve_move")
5633 (set_attr "length""8")])
5636 ;; [vrev16q_m_u, vrev16q_m_s])
5638 (define_insn "mve_vrev16q_m_<supf>v16qi"
5640 (set (match_operand:V16QI 0 "s_register_operand" "=w")
5641 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
5642 (match_operand:V16QI 2 "s_register_operand" "w")
5643 (match_operand:HI 3 "vpr_register_operand" "Up")]
5647 "vpst\;vrev16t.8 %q0, %q2"
5648 [(set_attr "type" "mve_move")
5649 (set_attr "length""8")])
5652 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
5654 (define_insn "mve_vcvtq_m_from_f_<supf><mode>"
5656 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5657 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5658 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5659 (match_operand:HI 3 "vpr_register_operand" "Up")]
5662 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5663 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5664 [(set_attr "type" "mve_move")
5665 (set_attr "length""8")])
5668 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
5670 (define_insn "mve_vrmlaldavhq_p_<supf>v4si"
5672 (set (match_operand:DI 0 "s_register_operand" "=r")
5673 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5674 (match_operand:V4SI 2 "s_register_operand" "w")
5675 (match_operand:HI 3 "vpr_register_operand" "Up")]
5679 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
5680 [(set_attr "type" "mve_move")
5681 (set_attr "length""8")])
5684 ;; [vrmlsldavhaq_s])
5686 (define_insn "mve_vrmlsldavhaq_sv4si"
5688 (set (match_operand:DI 0 "s_register_operand" "=r")
5689 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5690 (match_operand:V4SI 2 "s_register_operand" "w")
5691 (match_operand:V4SI 3 "s_register_operand" "w")]
5695 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
5696 [(set_attr "type" "mve_move")
5700 ;; [vabavq_p_s, vabavq_p_u])
5702 (define_insn "mve_vabavq_p_<supf><mode>"
5704 (set (match_operand:SI 0 "s_register_operand" "=r")
5705 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5706 (match_operand:MVE_2 2 "s_register_operand" "w")
5707 (match_operand:MVE_2 3 "s_register_operand" "w")
5708 (match_operand:HI 4 "vpr_register_operand" "Up")]
5712 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
5713 [(set_attr "type" "mve_move")
5719 (define_insn "mve_vqshluq_m_n_s<mode>"
5721 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5722 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5723 (match_operand:MVE_2 2 "s_register_operand" "w")
5724 (match_operand:SI 3 "mve_imm_7" "Ra")
5725 (match_operand:HI 4 "vpr_register_operand" "Up")]
5729 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
5730 [(set_attr "type" "mve_move")])
5733 ;; [vshlq_m_s, vshlq_m_u])
5735 (define_insn "mve_vshlq_m_<supf><mode>"
5737 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5738 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5739 (match_operand:MVE_2 2 "s_register_operand" "w")
5740 (match_operand:MVE_2 3 "s_register_operand" "w")
5741 (match_operand:HI 4 "vpr_register_operand" "Up")]
5745 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5746 [(set_attr "type" "mve_move")])
5749 ;; [vsriq_m_n_s, vsriq_m_n_u])
5751 (define_insn "mve_vsriq_m_n_<supf><mode>"
5753 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5754 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5755 (match_operand:MVE_2 2 "s_register_operand" "w")
5756 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
5757 (match_operand:HI 4 "vpr_register_operand" "Up")]
5761 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
5762 [(set_attr "type" "mve_move")])
5765 ;; [vsubq_m_u, vsubq_m_s])
5767 (define_insn "mve_vsubq_m_<supf><mode>"
5769 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5770 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5771 (match_operand:MVE_2 2 "s_register_operand" "w")
5772 (match_operand:MVE_2 3 "s_register_operand" "w")
5773 (match_operand:HI 4 "vpr_register_operand" "Up")]
5777 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
5778 [(set_attr "type" "mve_move")])
5781 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
5783 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
5785 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5786 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5787 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5788 (match_operand:SI 3 "mve_imm_16" "Rd")
5789 (match_operand:HI 4 "vpr_register_operand" "Up")]
5792 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5793 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5794 [(set_attr "type" "mve_move")
5795 (set_attr "length""8")])