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])
29 (define_mode_iterator MVE_6 [V8HI V4SI])
31 (define_c_enum "unspec" [VST4Q VRNDXQ_F VRNDQ_F VRNDPQ_F VRNDNQ_F VRNDMQ_F
32 VRNDAQ_F VREV64Q_F VNEGQ_F VDUPQ_N_F VABSQ_F VREV32Q_F
33 VCVTTQ_F32_F16 VCVTBQ_F32_F16 VCVTQ_TO_F_S VQNEGQ_S
34 VCVTQ_TO_F_U VREV16Q_S VREV16Q_U VADDLVQ_S VMVNQ_N_S
35 VMVNQ_N_U VCVTAQ_S VCVTAQ_U VREV64Q_S VREV64Q_U
36 VQABSQ_S VNEGQ_S VMVNQ_S VMVNQ_U VDUPQ_N_U VDUPQ_N_S
37 VCLZQ_U VCLZQ_S VCLSQ_S VADDVQ_S VADDVQ_U VABSQ_S
38 VREV32Q_U VREV32Q_S VMOVLTQ_U VMOVLTQ_S VMOVLBQ_S
39 VMOVLBQ_U VCVTQ_FROM_F_S VCVTQ_FROM_F_U VCVTPQ_S
40 VCVTPQ_U VCVTNQ_S VCVTNQ_U VCVTMQ_S VCVTMQ_U
41 VADDLVQ_U VCTP8Q VCTP16Q VCTP32Q VCTP64Q VPNOT
42 VCREATEQ_F VCVTQ_N_TO_F_S VCVTQ_N_TO_F_U VBRSRQ_N_F
43 VSUBQ_N_F VCREATEQ_U VCREATEQ_S VSHRQ_N_S VSHRQ_N_U
44 VCVTQ_N_FROM_F_S VCVTQ_N_FROM_F_U VADDLVQ_P_S
45 VADDLVQ_P_U VCMPNEQ_U VCMPNEQ_S VSHLQ_S VSHLQ_U VABDQ_S
46 VADDQ_N_S VADDVAQ_S VADDVQ_P_S VANDQ_S VBICQ_S
47 VBRSRQ_N_S VCADDQ_ROT270_S VCADDQ_ROT90_S VCMPEQQ_S
48 VCMPEQQ_N_S VCMPNEQ_N_S VEORQ_S VHADDQ_S VHADDQ_N_S
49 VHSUBQ_S VHSUBQ_N_S VMAXQ_S VMAXVQ_S VMINQ_S VMINVQ_S
50 VMLADAVQ_S VMULHQ_S VMULLBQ_INT_S VMULLTQ_INT_S VMULQ_S
51 VMULQ_N_S VORNQ_S VORRQ_S VQADDQ_S VQADDQ_N_S VQRSHLQ_S
52 VQRSHLQ_N_S VQSHLQ_S VQSHLQ_N_S VQSHLQ_R_S VQSUBQ_S
53 VQSUBQ_N_S VRHADDQ_S VRMULHQ_S VRSHLQ_S VRSHLQ_N_S
54 VRSHRQ_N_S VSHLQ_N_S VSHLQ_R_S VSUBQ_S VSUBQ_N_S
55 VABDQ_U VADDQ_N_U VADDVAQ_U VADDVQ_P_U VANDQ_U VBICQ_U
56 VBRSRQ_N_U VCADDQ_ROT270_U VCADDQ_ROT90_U VCMPEQQ_U
57 VCMPEQQ_N_U VCMPNEQ_N_U VEORQ_U VHADDQ_U VHADDQ_N_U
58 VHSUBQ_U VHSUBQ_N_U VMAXQ_U VMAXVQ_U VMINQ_U VMINVQ_U
59 VMLADAVQ_U VMULHQ_U VMULLBQ_INT_U VMULLTQ_INT_U VMULQ_U
60 VMULQ_N_U VORNQ_U VORRQ_U VQADDQ_U VQADDQ_N_U VQRSHLQ_U
61 VQRSHLQ_N_U VQSHLQ_U VQSHLQ_N_U VQSHLQ_R_U VQSUBQ_U
62 VQSUBQ_N_U VRHADDQ_U VRMULHQ_U VRSHLQ_U VRSHLQ_N_U
63 VRSHRQ_N_U VSHLQ_N_U VSHLQ_R_U VSUBQ_U VSUBQ_N_U
64 VCMPGEQ_N_S VCMPGEQ_S VCMPGTQ_N_S VCMPGTQ_S VCMPLEQ_N_S
65 VCMPLEQ_S VCMPLTQ_N_S VCMPLTQ_S VHCADDQ_ROT270_S
66 VHCADDQ_ROT90_S VMAXAQ_S VMAXAVQ_S VMINAQ_S VMINAVQ_S
67 VMLADAVXQ_S VMLSDAVQ_S VMLSDAVXQ_S VQDMULHQ_N_S
68 VQDMULHQ_S VQRDMULHQ_N_S VQRDMULHQ_S VQSHLUQ_N_S
69 VCMPCSQ_N_U VCMPCSQ_U VCMPHIQ_N_U VCMPHIQ_U VABDQ_M_S
70 VABDQ_M_U VABDQ_F VADDQ_N_F VANDQ_F VBICQ_F
71 VCADDQ_ROT270_F VCADDQ_ROT90_F VCMPEQQ_F VCMPEQQ_N_F
72 VCMPGEQ_F VCMPGEQ_N_F VCMPGTQ_F VCMPGTQ_N_F VCMPLEQ_F
73 VCMPLEQ_N_F VCMPLTQ_F VCMPLTQ_N_F VCMPNEQ_F VCMPNEQ_N_F
74 VCMULQ_F VCMULQ_ROT180_F VCMULQ_ROT270_F VCMULQ_ROT90_F
75 VEORQ_F VMAXNMAQ_F VMAXNMAVQ_F VMAXNMQ_F VMAXNMVQ_F
76 VMINNMAQ_F VMINNMAVQ_F VMINNMQ_F VMINNMVQ_F VMULQ_F
77 VMULQ_N_F VORNQ_F VORRQ_F VSUBQ_F VADDLVAQ_U
78 VADDLVAQ_S VBICQ_N_U VBICQ_N_S VCTP8Q_M VCTP16Q_M
79 VCTP32Q_M VCTP64Q_M VCVTBQ_F16_F32 VCVTTQ_F16_F32
80 VMLALDAVQ_U VMLALDAVXQ_U VMLALDAVXQ_S VMLALDAVQ_S
81 VMLSLDAVQ_S VMLSLDAVXQ_S VMOVNBQ_U VMOVNBQ_S
82 VMOVNTQ_U VMOVNTQ_S VORRQ_N_S VORRQ_N_U VQDMULLBQ_N_S
83 VQDMULLBQ_S VQDMULLTQ_N_S VQDMULLTQ_S VQMOVNBQ_U
84 VQMOVNBQ_S VQMOVUNBQ_S VQMOVUNTQ_S VRMLALDAVHXQ_S
85 VRMLSLDAVHQ_S VRMLSLDAVHXQ_S VSHLLBQ_S
86 VSHLLBQ_U VSHLLTQ_U VSHLLTQ_S VQMOVNTQ_U VQMOVNTQ_S
87 VSHLLBQ_N_S VSHLLBQ_N_U VSHLLTQ_N_U VSHLLTQ_N_S
88 VRMLALDAVHQ_U VRMLALDAVHQ_S VMULLTQ_POLY_P
89 VMULLBQ_POLY_P VBICQ_M_N_S VBICQ_M_N_U VCMPEQQ_M_F
90 VCVTAQ_M_S VCVTAQ_M_U VCVTQ_M_TO_F_S VCVTQ_M_TO_F_U
91 VQRSHRNBQ_N_U VQRSHRNBQ_N_S VQRSHRUNBQ_N_S
92 VRMLALDAVHAQ_S VABAVQ_S VABAVQ_U VSHLCQ_S VSHLCQ_U
93 VRMLALDAVHAQ_U VABSQ_M_S VADDVAQ_P_S VADDVAQ_P_U
94 VCLSQ_M_S VCLZQ_M_S VCLZQ_M_U VCMPCSQ_M_N_U
95 VCMPCSQ_M_U VCMPEQQ_M_N_S VCMPEQQ_M_N_U VCMPEQQ_M_S
96 VCMPEQQ_M_U VCMPGEQ_M_N_S VCMPGEQ_M_S VCMPGTQ_M_N_S
97 VCMPGTQ_M_S VCMPHIQ_M_N_U VCMPHIQ_M_U VCMPLEQ_M_N_S
98 VCMPLEQ_M_S VCMPLTQ_M_N_S VCMPLTQ_M_S VCMPNEQ_M_N_S
99 VCMPNEQ_M_N_U VCMPNEQ_M_S VCMPNEQ_M_U VDUPQ_M_N_S
100 VDUPQ_M_N_U VDWDUPQ_N_U VDWDUPQ_WB_U VIWDUPQ_N_U
101 VIWDUPQ_WB_U VMAXAQ_M_S VMAXAVQ_P_S VMAXVQ_P_S
102 VMAXVQ_P_U VMINAQ_M_S VMINAVQ_P_S VMINVQ_P_S VMINVQ_P_U
103 VMLADAVAQ_S VMLADAVAQ_U VMLADAVQ_P_S VMLADAVQ_P_U
104 VMLADAVXQ_P_S VMLAQ_N_S VMLAQ_N_U VMLASQ_N_S VMLASQ_N_U
105 VMLSDAVQ_P_S VMLSDAVXQ_P_S VMVNQ_M_S VMVNQ_M_U
106 VNEGQ_M_S VPSELQ_S VPSELQ_U VQABSQ_M_S VQDMLAHQ_N_S
107 VQDMLAHQ_N_U VQNEGQ_M_S VQRDMLADHQ_S VQRDMLADHXQ_S
108 VQRDMLAHQ_N_S VQRDMLAHQ_N_U VQRDMLASHQ_N_S
109 VQRDMLASHQ_N_U VQRDMLSDHQ_S VQRDMLSDHXQ_S VQRSHLQ_M_N_S
110 VQRSHLQ_M_N_U VQSHLQ_M_R_S VQSHLQ_M_R_U VREV64Q_M_S
111 VREV64Q_M_U VRSHLQ_M_N_S VRSHLQ_M_N_U VSHLQ_M_R_S
112 VSHLQ_M_R_U VSLIQ_N_S VSLIQ_N_U VSRIQ_N_S VSRIQ_N_U
113 VQDMLSDHXQ_S VQDMLSDHQ_S VQDMLADHXQ_S VQDMLADHQ_S
114 VMLSDAVAXQ_S VMLSDAVAQ_S VMLADAVAXQ_S
115 VCMPGEQ_M_F VCMPGTQ_M_N_F VMLSLDAVQ_P_S VRMLALDAVHAXQ_S
116 VMLSLDAVXQ_P_S VFMAQ_F VMLSLDAVAQ_S VQSHRUNBQ_N_S
117 VQRSHRUNTQ_N_S VCMLAQ_F VMINNMAQ_M_F VFMASQ_N_F
118 VDUPQ_M_N_F VCMPGTQ_M_F VCMPLTQ_M_F VRMLSLDAVHQ_P_S
119 VQSHRUNTQ_N_S VABSQ_M_F VMAXNMAVQ_P_F VFMAQ_N_F
120 VRMLSLDAVHXQ_P_S VREV32Q_M_F VRMLSLDAVHAQ_S
121 VRMLSLDAVHAXQ_S VCMPLTQ_M_N_F VCMPNEQ_M_F VRNDAQ_M_F
122 VRNDPQ_M_F VADDLVAQ_P_S VQMOVUNBQ_M_S VCMPLEQ_M_F
123 VCMLAQ_ROT180_F VMLSLDAVAXQ_S VRNDXQ_M_F VFMSQ_F
124 VMINNMVQ_P_F VMAXNMVQ_P_F VPSELQ_F VCMLAQ_ROT90_F
125 VQMOVUNTQ_M_S VREV64Q_M_F VNEGQ_M_F VRNDMQ_M_F
126 VCMPLEQ_M_N_F VCMPGEQ_M_N_F VRNDNQ_M_F VMINNMAVQ_P_F
127 VCMPNEQ_M_N_F VRMLALDAVHQ_P_S VRMLALDAVHXQ_P_S
128 VCMPEQQ_M_N_F VCMLAQ_ROT270_F VMAXNMAQ_M_F VRNDQ_M_F
129 VMLALDAVQ_P_U VMLALDAVQ_P_S VQMOVNBQ_M_S VQMOVNBQ_M_U
130 VMOVLTQ_M_U VMOVLTQ_M_S VMOVNBQ_M_U VMOVNBQ_M_S
131 VRSHRNTQ_N_U VRSHRNTQ_N_S VORRQ_M_N_S VORRQ_M_N_U
132 VREV32Q_M_S VREV32Q_M_U VQRSHRNTQ_N_U VQRSHRNTQ_N_S
133 VMOVNTQ_M_U VMOVNTQ_M_S VMOVLBQ_M_U VMOVLBQ_M_S
134 VMLALDAVAQ_S VMLALDAVAQ_U VQSHRNBQ_N_U VQSHRNBQ_N_S
135 VSHRNBQ_N_U VSHRNBQ_N_S VRSHRNBQ_N_S VRSHRNBQ_N_U
136 VMLALDAVXQ_P_U VMLALDAVXQ_P_S VQMOVNTQ_M_U VQMOVNTQ_M_S
137 VMVNQ_M_N_U VMVNQ_M_N_S VQSHRNTQ_N_U VQSHRNTQ_N_S
138 VMLALDAVAXQ_S VMLALDAVAXQ_U VSHRNTQ_N_S VSHRNTQ_N_U
139 VCVTBQ_M_F16_F32 VCVTBQ_M_F32_F16 VCVTTQ_M_F16_F32
140 VCVTTQ_M_F32_F16 VCVTMQ_M_S VCVTMQ_M_U VCVTNQ_M_S
141 VCVTPQ_M_S VCVTPQ_M_U VCVTQ_M_N_FROM_F_S VCVTNQ_M_U
142 VREV16Q_M_S VREV16Q_M_U VREV32Q_M VCVTQ_M_FROM_F_U
143 VCVTQ_M_FROM_F_S VRMLALDAVHQ_P_U VADDLVAQ_P_U
144 VCVTQ_M_N_FROM_F_U VQSHLUQ_M_N_S VABAVQ_P_S
145 VABAVQ_P_U VSHLQ_M_S VSHLQ_M_U VSRIQ_M_N_S
146 VSRIQ_M_N_U VSUBQ_M_U VSUBQ_M_S VCVTQ_M_N_TO_F_U
147 VCVTQ_M_N_TO_F_S VQADDQ_M_U VQADDQ_M_S
148 VRSHRQ_M_N_S VSUBQ_M_N_S VSUBQ_M_N_U VBRSRQ_M_N_S
149 VSUBQ_M_N_F VBICQ_M_F VHADDQ_M_U VBICQ_M_U VBICQ_M_S
150 VMULQ_M_N_U VHADDQ_M_S VORNQ_M_F VMLAQ_M_N_S VQSUBQ_M_U
151 VQSUBQ_M_S VMLAQ_M_N_U VQSUBQ_M_N_U VQSUBQ_M_N_S
152 VMULLTQ_INT_M_S VMULLTQ_INT_M_U VMULQ_M_N_S VMULQ_M_N_F
153 VMLASQ_M_N_U VMLASQ_M_N_S VMAXQ_M_U VQRDMLAHQ_M_N_U
154 VCADDQ_ROT270_M_F VCADDQ_ROT270_M_U VCADDQ_ROT270_M_S
155 VQRSHLQ_M_S VMULQ_M_F VRHADDQ_M_U VSHRQ_M_N_U
156 VRHADDQ_M_S VMULQ_M_S VMULQ_M_U VQRDMLASHQ_M_N_S
157 VRSHLQ_M_S VRSHLQ_M_U VRSHRQ_M_N_U VADDQ_M_N_F
158 VADDQ_M_N_S VADDQ_M_N_U VQRDMLASHQ_M_N_U VMAXQ_M_S
159 VQRDMLAHQ_M_N_S VORRQ_M_S VORRQ_M_U VORRQ_M_F
160 VQRSHLQ_M_U VRMULHQ_M_U VRMULHQ_M_S VMINQ_M_S VMINQ_M_U
161 VANDQ_M_F VANDQ_M_U VANDQ_M_S VHSUBQ_M_N_S VHSUBQ_M_N_U
162 VMULHQ_M_S VMULHQ_M_U VMULLBQ_INT_M_U
163 VMULLBQ_INT_M_S VCADDQ_ROT90_M_F
164 VSHRQ_M_N_S VADDQ_M_U VSLIQ_M_N_U
165 VQADDQ_M_N_S VBRSRQ_M_N_F VABDQ_M_F VBRSRQ_M_N_U
166 VEORQ_M_F VSHLQ_M_N_S VQDMLAHQ_M_N_U VQDMLAHQ_M_N_S
167 VSHLQ_M_N_U VMLADAVAQ_P_U VMLADAVAQ_P_S VSLIQ_M_N_S
168 VQSHLQ_M_U VQSHLQ_M_S VCADDQ_ROT90_M_U VCADDQ_ROT90_M_S
169 VORNQ_M_U VORNQ_M_S VQSHLQ_M_N_S VQSHLQ_M_N_U VADDQ_M_S
170 VHADDQ_M_N_S VADDQ_M_F VQADDQ_M_N_U VEORQ_M_S VEORQ_M_U
171 VHSUBQ_M_S VHSUBQ_M_U VHADDQ_M_N_U VHCADDQ_ROT90_M_S
172 VQRDMLSDHQ_M_S VQRDMLSDHXQ_M_S VQRDMLADHXQ_M_S
173 VQDMULHQ_M_S VMLADAVAXQ_P_S VQDMLADHXQ_M_S
174 VQRDMULHQ_M_S VMLSDAVAXQ_P_S VQDMULHQ_M_N_S
175 VHCADDQ_ROT270_M_S VQDMLSDHQ_M_S VQDMLSDHXQ_M_S
176 VMLSDAVAQ_P_S VQRDMLADHQ_M_S VQDMLADHQ_M_S
177 VMLALDAVAQ_P_U VMLALDAVAQ_P_S VMLALDAVAXQ_P_U
178 VQRSHRNBQ_M_N_U VQRSHRNBQ_M_N_S VQRSHRNTQ_M_N_S
179 VQSHRNBQ_M_N_U VQSHRNBQ_M_N_S VQSHRNTQ_M_N_S
180 VRSHRNBQ_M_N_U VRSHRNBQ_M_N_S VRSHRNTQ_M_N_U
181 VSHLLBQ_M_N_U VSHLLBQ_M_N_S VSHLLTQ_M_N_U VSHLLTQ_M_N_S
182 VSHRNBQ_M_N_S VSHRNBQ_M_N_U VSHRNTQ_M_N_S VSHRNTQ_M_N_U
183 VMLALDAVAXQ_P_S VQRSHRNTQ_M_N_U VQSHRNTQ_M_N_U
184 VRSHRNTQ_M_N_S VQRDMULHQ_M_N_S VRMLALDAVHAQ_P_S
185 VMLSLDAVAQ_P_S VMLSLDAVAXQ_P_S VMULLBQ_POLY_M_P
186 VMULLTQ_POLY_M_P VQDMULLBQ_M_N_S VQDMULLBQ_M_S
187 VQDMULLTQ_M_N_S VQDMULLTQ_M_S VQRSHRUNBQ_M_N_S
188 VQRSHRUNTQ_M_N_SVQSHRUNBQ_M_N_S VQSHRUNTQ_M_N_S
189 VRMLALDAVHAQ_P_U VRMLALDAVHAXQ_P_S VRMLSLDAVHAQ_P_S
190 VRMLSLDAVHAXQ_P_S VQRSHRUNTQ_M_N_S VQSHRUNBQ_M_N_S
191 VCMLAQ_M_F VCMLAQ_ROT180_M_F VCMLAQ_ROT270_M_F
192 VCMLAQ_ROT90_M_F VCMULQ_M_F VCMULQ_ROT180_M_F
193 VCMULQ_ROT270_M_F VCMULQ_ROT90_M_F VFMAQ_M_F
194 VFMAQ_M_N_F VFMASQ_M_N_F VFMSQ_M_F VMAXNMQ_M_F
195 VMINNMQ_M_F VSUBQ_M_F VSTRWQSB_S VSTRWQSB_U
196 VSTRBQSO_S VSTRBQSO_U VSTRBQ_S VSTRBQ_U VLDRBQGO_S
197 VLDRBQGO_U VLDRBQ_S VLDRBQ_U VLDRWQGB_S VLDRWQGB_U
198 VLD1Q_F VLD1Q_S VLD1Q_U VLDRHQ_F VLDRHQGO_S
199 VLDRHQGO_U VLDRHQGSO_S VLDRHQGSO_U VLDRHQ_S VLDRHQ_U
200 VLDRWQ_F VLDRWQ_S VLDRWQ_U VLDRDQGB_S VLDRDQGB_U
201 VLDRDQGO_S VLDRDQGO_U VLDRDQGSO_S VLDRDQGSO_U
202 VLDRHQGO_F VLDRHQGSO_F VLDRWQGB_F VLDRWQGO_F
203 VLDRWQGO_S VLDRWQGO_U VLDRWQGSO_F VLDRWQGSO_S
204 VLDRWQGSO_U VSTRHQ_F VST1Q_S VST1Q_U VSTRHQSO_S
205 VSTRHQSO_U VSTRHQSSO_S VSTRHQSSO_U VSTRHQ_S
206 VSTRHQ_U VSTRWQ_S VSTRWQ_U VSTRWQ_F VST1Q_F VSTRDQSB_S
207 VSTRDQSB_U VSTRDQSO_S VSTRDQSO_U VSTRDQSSO_S
208 VSTRDQSSO_U VSTRWQSO_S VSTRWQSO_U VSTRWQSSO_S
209 VSTRWQSSO_U VSTRHQSO_F VSTRHQSSO_F VSTRWQSB_F
210 VSTRWQSO_F VSTRWQSSO_F VDDUPQ VDDUPQ_M VDWDUPQ
211 VDWDUPQ_M VIDUPQ VIDUPQ_M VIWDUPQ VIWDUPQ_M
212 VSTRWQSBWB_S VSTRWQSBWB_U VLDRWQGBWB_S VLDRWQGBWB_U
213 VSTRWQSBWB_F VLDRWQGBWB_F VSTRDQSBWB_S VSTRDQSBWB_U
214 VLDRDQGBWB_S VLDRDQGBWB_U VADCQ_U VADCQ_M_U VADCQ_S
215 VADCQ_M_S VSBCIQ_U VSBCIQ_S VSBCIQ_M_U VSBCIQ_M_S
216 VSBCQ_U VSBCQ_S VSBCQ_M_U VSBCQ_M_S VADCIQ_U VADCIQ_M_U
217 VADCIQ_S VADCIQ_M_S VLD2Q VLD4Q VST2Q SRSHRL SRSHR
218 URSHR URSHRL SQRSHR UQRSHL UQRSHLL_64
219 UQRSHLL_48 SQRSHRL_64 SQRSHRL_48])
221 (define_mode_attr MVE_CNVT [(V8HI "V8HF") (V4SI "V4SF") (V8HF "V8HI")
224 (define_int_attr supf [(VCVTQ_TO_F_S "s") (VCVTQ_TO_F_U "u") (VREV16Q_S "s")
225 (VREV16Q_U "u") (VMVNQ_N_S "s") (VMVNQ_N_U "u")
226 (VCVTAQ_U "u") (VCVTAQ_S "s") (VREV64Q_S "s")
227 (VREV64Q_U "u") (VMVNQ_S "s") (VMVNQ_U "u")
228 (VDUPQ_N_U "u") (VDUPQ_N_S"s") (VADDVQ_S "s")
229 (VADDVQ_U "u") (VADDVQ_S "s") (VADDVQ_U "u")
230 (VMOVLTQ_U "u") (VMOVLTQ_S "s") (VMOVLBQ_S "s")
231 (VMOVLBQ_U "u") (VCVTQ_FROM_F_S "s") (VCVTQ_FROM_F_U "u")
232 (VCVTPQ_S "s") (VCVTPQ_U "u") (VCVTNQ_S "s")
233 (VCVTNQ_U "u") (VCVTMQ_S "s") (VCVTMQ_U "u")
234 (VCLZQ_U "u") (VCLZQ_S "s") (VREV32Q_U "u")
235 (VREV32Q_S "s") (VADDLVQ_U "u") (VADDLVQ_S "s")
236 (VCVTQ_N_TO_F_S "s") (VCVTQ_N_TO_F_U "u")
237 (VCREATEQ_U "u") (VCREATEQ_S "s") (VSHRQ_N_S "s")
238 (VSHRQ_N_U "u") (VCVTQ_N_FROM_F_S "s") (VSHLQ_U "u")
239 (VCVTQ_N_FROM_F_U "u") (VADDLVQ_P_S "s") (VSHLQ_S "s")
240 (VADDLVQ_P_U "u") (VCMPNEQ_U "u") (VCMPNEQ_S "s")
241 (VABDQ_M_S "s") (VABDQ_M_U "u") (VABDQ_S "s")
242 (VABDQ_U "u") (VADDQ_N_S "s") (VADDQ_N_U "u")
243 (VADDVQ_P_S "s") (VADDVQ_P_U "u") (VANDQ_S "s")
244 (VANDQ_U "u") (VBICQ_S "s") (VBICQ_U "u")
245 (VBRSRQ_N_S "s") (VBRSRQ_N_U "u") (VCADDQ_ROT270_S "s")
246 (VCADDQ_ROT270_U "u") (VCADDQ_ROT90_S "s")
247 (VCMPEQQ_S "s") (VCMPEQQ_U "u") (VCADDQ_ROT90_U "u")
248 (VCMPEQQ_N_S "s") (VCMPEQQ_N_U "u") (VCMPNEQ_N_S "s")
249 (VCMPNEQ_N_U "u") (VEORQ_S "s") (VEORQ_U "u")
250 (VHADDQ_N_S "s") (VHADDQ_N_U "u") (VHADDQ_S "s")
251 (VHADDQ_U "u") (VHSUBQ_N_S "s") (VHSUBQ_N_U "u")
252 (VHSUBQ_S "s") (VMAXQ_S "s") (VMAXQ_U "u") (VHSUBQ_U "u")
253 (VMAXVQ_S "s") (VMAXVQ_U "u") (VMINQ_S "s") (VMINQ_U "u")
254 (VMINVQ_S "s") (VMINVQ_U "u") (VMLADAVQ_S "s")
255 (VMLADAVQ_U "u") (VMULHQ_S "s") (VMULHQ_U "u")
256 (VMULLBQ_INT_S "s") (VMULLBQ_INT_U "u") (VQADDQ_S "s")
257 (VMULLTQ_INT_S "s") (VMULLTQ_INT_U "u") (VQADDQ_U "u")
258 (VMULQ_N_S "s") (VMULQ_N_U "u") (VMULQ_S "s")
259 (VMULQ_U "u") (VORNQ_S "s") (VORNQ_U "u") (VORRQ_S "s")
260 (VORRQ_U "u") (VQADDQ_N_S "s") (VQADDQ_N_U "u")
261 (VQRSHLQ_N_S "s") (VQRSHLQ_N_U "u") (VQRSHLQ_S "s")
262 (VQRSHLQ_U "u") (VQSHLQ_N_S "s") (VQSHLQ_N_U "u")
263 (VQSHLQ_R_S "s") (VQSHLQ_R_U "u") (VQSHLQ_S "s")
264 (VQSHLQ_U "u") (VQSUBQ_N_S "s") (VQSUBQ_N_U "u")
265 (VQSUBQ_S "s") (VQSUBQ_U "u") (VRHADDQ_S "s")
266 (VRHADDQ_U "u") (VRMULHQ_S "s") (VRMULHQ_U "u")
267 (VRSHLQ_N_S "s") (VRSHLQ_N_U "u") (VRSHLQ_S "s")
268 (VRSHLQ_U "u") (VRSHRQ_N_S "s") (VRSHRQ_N_U "u")
269 (VSHLQ_N_S "s") (VSHLQ_N_U "u") (VSHLQ_R_S "s")
270 (VSHLQ_R_U "u") (VSUBQ_N_S "s") (VSUBQ_N_U "u")
271 (VSUBQ_S "s") (VSUBQ_U "u") (VADDVAQ_S "s")
272 (VADDVAQ_U "u") (VADDLVAQ_S "s") (VADDLVAQ_U "u")
273 (VBICQ_N_S "s") (VBICQ_N_U "u") (VMLALDAVQ_U "u")
274 (VMLALDAVQ_S "s") (VMLALDAVXQ_U "u") (VMLALDAVXQ_S "s")
275 (VMOVNBQ_U "u") (VMOVNBQ_S "s") (VMOVNTQ_U "u")
276 (VMOVNTQ_S "s") (VORRQ_N_S "s") (VORRQ_N_U "u")
277 (VQMOVNBQ_U "u") (VQMOVNBQ_S "s") (VQMOVNTQ_S "s")
278 (VQMOVNTQ_U "u") (VSHLLBQ_N_U "u") (VSHLLBQ_N_S "s")
279 (VSHLLTQ_N_U "u") (VSHLLTQ_N_S "s") (VRMLALDAVHQ_U "u")
280 (VRMLALDAVHQ_S "s") (VBICQ_M_N_S "s") (VBICQ_M_N_U "u")
281 (VCVTAQ_M_S "s") (VCVTAQ_M_U "u") (VCVTQ_M_TO_F_S "s")
282 (VCVTQ_M_TO_F_U "u") (VQRSHRNBQ_N_S "s")
283 (VQRSHRNBQ_N_U "u") (VABAVQ_S "s") (VABAVQ_U "u")
284 (VRMLALDAVHAQ_U "u") (VRMLALDAVHAQ_S "s") (VSHLCQ_S "s")
285 (VSHLCQ_U "u") (VADDVAQ_P_S "s") (VADDVAQ_P_U "u")
286 (VCLZQ_M_S "s") (VCLZQ_M_U "u") (VCMPEQQ_M_N_S "s")
287 (VCMPEQQ_M_N_U "u") (VCMPEQQ_M_S "s") (VCMPEQQ_M_U "u")
288 (VCMPNEQ_M_N_S "s") (VCMPNEQ_M_N_U "u") (VCMPNEQ_M_S "s")
289 (VCMPNEQ_M_U "u") (VDUPQ_M_N_S "s") (VDUPQ_M_N_U "u")
290 (VMAXVQ_P_S "s") (VMAXVQ_P_U "u") (VMINVQ_P_S "s")
291 (VMINVQ_P_U "u") (VMLADAVAQ_S "s") (VMLADAVAQ_U "u")
292 (VMLADAVQ_P_S "s") (VMLADAVQ_P_U "u") (VMLAQ_N_S "s")
293 (VMLAQ_N_U "u") (VMLASQ_N_S "s") (VMLASQ_N_U "u")
294 (VMVNQ_M_S "s") (VMVNQ_M_U "u") (VPSELQ_S "s")
295 (VPSELQ_U "u") (VQDMLAHQ_N_S "s") (VQDMLAHQ_N_U "u")
296 (VQRDMLAHQ_N_S "s") (VQRDMLAHQ_N_U "u")
297 (VQRDMLASHQ_N_S "s") (VQRDMLASHQ_N_U "u")
298 (VQRSHLQ_M_N_S "s") (VQRSHLQ_M_N_U "u")
299 (VQSHLQ_M_R_S "s") (VQSHLQ_M_R_U "u") (VSRIQ_N_S "s")
300 (VREV64Q_M_S "s") (VREV64Q_M_U "u") (VSRIQ_N_U "u")
301 (VRSHLQ_M_N_S "s") (VRSHLQ_M_N_U "u") (VSHLQ_M_R_S "s")
302 (VSHLQ_M_R_U "u") (VSLIQ_N_S "s") (VSLIQ_N_U "u")
303 (VMLALDAVQ_P_S "s") (VQMOVNBQ_M_S "s") (VMOVLTQ_M_S "s")
304 (VMOVNBQ_M_S "s") (VRSHRNTQ_N_S "s") (VORRQ_M_N_S "s")
305 (VREV32Q_M_S "s") (VQRSHRNTQ_N_S "s") (VMOVNTQ_M_S "s")
306 (VMOVLBQ_M_S "s") (VMLALDAVAQ_S "s") (VQSHRNBQ_N_S "s")
307 (VSHRNBQ_N_S "s") (VRSHRNBQ_N_S "s") (VMLALDAVXQ_P_S "s")
308 (VQMOVNTQ_M_S "s") (VMVNQ_M_N_S "s") (VQSHRNTQ_N_S "s")
309 (VMLALDAVAXQ_S "s") (VSHRNTQ_N_S "s") (VMLALDAVQ_P_U "u")
310 (VQMOVNBQ_M_U "u") (VMOVLTQ_M_U "u") (VMOVNBQ_M_U "u")
311 (VRSHRNTQ_N_U "u") (VORRQ_M_N_U "u") (VREV32Q_M_U "u")
312 (VREV16Q_M_S "s") (VREV16Q_M_U "u")
313 (VQRSHRNTQ_N_U "u") (VMOVNTQ_M_U "u") (VMOVLBQ_M_U "u")
314 (VMLALDAVAQ_U "u") (VQSHRNBQ_N_U "u") (VSHRNBQ_N_U "u")
315 (VRSHRNBQ_N_U "u") (VMLALDAVXQ_P_U "u")
316 (VMVNQ_M_N_U "u") (VQSHRNTQ_N_U "u") (VMLALDAVAXQ_U "u")
317 (VQMOVNTQ_M_U "u") (VSHRNTQ_N_U "u") (VCVTMQ_M_S "s")
318 (VCVTMQ_M_U "u") (VCVTNQ_M_S "s") (VCVTNQ_M_U "u")
319 (VCVTPQ_M_S "s") (VCVTPQ_M_U "u") (VADDLVAQ_P_S "s")
320 (VCVTQ_M_N_FROM_F_U "u") (VCVTQ_M_FROM_F_S "s")
321 (VCVTQ_M_FROM_F_U "u") (VRMLALDAVHQ_P_U "u")
322 (VRMLALDAVHQ_P_S "s") (VADDLVAQ_P_U "u")
323 (VCVTQ_M_N_FROM_F_S "s") (VABAVQ_P_U "u")
324 (VABAVQ_P_S "s") (VSHLQ_M_S "s") (VSHLQ_M_U "u")
325 (VSRIQ_M_N_S "s") (VSRIQ_M_N_U "u") (VSUBQ_M_S "s")
326 (VSUBQ_M_U "u") (VCVTQ_M_N_TO_F_S "s")
327 (VCVTQ_M_N_TO_F_U "u") (VADDQ_M_N_U "u")
328 (VSHLQ_M_N_S "s") (VMAXQ_M_U "u") (VHSUBQ_M_N_U "u")
329 (VMULQ_M_N_S "s") (VQSHLQ_M_U "u") (VRHADDQ_M_S "s")
330 (VEORQ_M_U "u") (VSHRQ_M_N_U "u") (VCADDQ_ROT90_M_U "u")
331 (VMLADAVAQ_P_U "u") (VEORQ_M_S "s") (VBRSRQ_M_N_S "s")
332 (VMULQ_M_U "u") (VQRDMLAHQ_M_N_S "s") (VHSUBQ_M_N_S "s")
333 (VQRSHLQ_M_S "s") (VMULQ_M_N_U "u")
334 (VMULQ_M_S "s") (VQSHLQ_M_N_U "u") (VSLIQ_M_N_U "u")
335 (VMLADAVAQ_P_S "s") (VQRSHLQ_M_U "u")
336 (VMULLBQ_INT_M_U "u") (VSHLQ_M_N_U "u") (VQSUBQ_M_U "u")
337 (VQRDMLASHQ_M_N_U "u") (VRSHRQ_M_N_S "s")
338 (VORNQ_M_S "s") (VCADDQ_ROT270_M_S "s") (VRHADDQ_M_U "u")
339 (VRSHRQ_M_N_U "u") (VMLASQ_M_N_U "u") (VHSUBQ_M_U "u")
340 (VQSUBQ_M_N_S "s") (VMULLTQ_INT_M_S "s")
341 (VORRQ_M_S "s") (VQDMLAHQ_M_N_U "u") (VRSHLQ_M_S "s")
342 (VHADDQ_M_U "u") (VHADDQ_M_N_S "s") (VMULLTQ_INT_M_U "u")
343 (VORRQ_M_U "u") (VHADDQ_M_S "s") (VHADDQ_M_N_U "u")
344 (VQDMLAHQ_M_N_S "s") (VMAXQ_M_S "s") (VORNQ_M_U "u")
345 (VCADDQ_ROT270_M_U "u") (VQADDQ_M_U "u")
346 (VQRDMLASHQ_M_N_S "s") (VBICQ_M_U "u") (VMINQ_M_U "u")
347 (VSUBQ_M_N_S "s") (VMULLBQ_INT_M_S "s") (VQSUBQ_M_S "s")
348 (VCADDQ_ROT90_M_S "s") (VRMULHQ_M_S "s") (VANDQ_M_U "u")
349 (VMULHQ_M_S "s") (VADDQ_M_S "s") (VQRDMLAHQ_M_N_U "u")
350 (VMLASQ_M_N_S "s") (VHSUBQ_M_S "s") (VRMULHQ_M_U "u")
351 (VQADDQ_M_N_S "s") (VSHRQ_M_N_S "s") (VANDQ_M_S "s")
352 (VABDQ_M_U "u") (VQSHLQ_M_S "s") (VABDQ_M_S "s")
353 (VSUBQ_M_N_U "u") (VMLAQ_M_N_S "s") (VBRSRQ_M_N_U "u")
354 (VADDQ_M_U "u") (VRSHLQ_M_U "u") (VSLIQ_M_N_S "s")
355 (VQADDQ_M_N_U "u") (VADDQ_M_N_S "s") (VQSUBQ_M_N_U "u")
356 (VMLAQ_M_N_U "u") (VMINQ_M_S "s") (VMULHQ_M_U "u")
357 (VQADDQ_M_S "s") (VBICQ_M_S "s") (VQSHLQ_M_N_S "s")
358 (VQSHRNTQ_M_N_S "s") (VQSHRNTQ_M_N_U "u")
359 (VSHRNTQ_M_N_U "u") (VSHRNTQ_M_N_S "s")
360 (VSHRNBQ_M_N_S "s") (VSHRNBQ_M_N_U "u")
361 (VSHLLTQ_M_N_S "s") (VSHLLTQ_M_N_U "u")
362 (VSHLLBQ_M_N_S "s") (VSHLLBQ_M_N_U "u")
363 (VRSHRNTQ_M_N_S "s") (VRSHRNTQ_M_N_U "u")
364 (VRSHRNBQ_M_N_U "u") (VRSHRNBQ_M_N_S "s")
365 (VQSHRNTQ_M_N_U "u") (VQSHRNTQ_M_N_S "s")
366 (VQSHRNBQ_M_N_S "s") (VQSHRNBQ_M_N_U "u")
367 (VQRSHRNTQ_M_N_S "s") (VQRSHRNTQ_M_N_U "u")
368 (VQRSHRNBQ_M_N_S "s") (VQRSHRNBQ_M_N_U "u")
369 (VMLALDAVAXQ_P_S "s") (VMLALDAVAXQ_P_U "u")
370 (VMLALDAVAQ_P_S "s") (VMLALDAVAQ_P_U "u")
371 (VSTRWQSB_S "s") (VSTRWQSB_U "u") (VSTRBQSO_S "s")
372 (VSTRBQSO_U "u") (VSTRBQ_S "s") (VSTRBQ_U "u")
373 (VLDRBQGO_S "s") (VLDRBQGO_U "u") (VLDRBQ_S "s")
374 (VLDRBQ_U "u") (VLDRWQGB_S "s") (VLDRWQGB_U "u")
375 (VLD1Q_S "s") (VLD1Q_U "u") (VLDRHQGO_S "s")
376 (VLDRHQGO_U "u") (VLDRHQGSO_S "s") (VLDRHQGSO_U "u")
377 (VLDRHQ_S "s") (VLDRHQ_U "u") (VLDRWQ_S "s")
378 (VLDRWQ_U "u") (VLDRDQGB_S "s") (VLDRDQGB_U "u")
379 (VLDRDQGO_S "s") (VLDRDQGO_U "u") (VLDRDQGSO_S "s")
380 (VLDRDQGSO_U "u") (VLDRWQGO_S "s") (VLDRWQGO_U "u")
381 (VLDRWQGSO_S "s") (VLDRWQGSO_U "u") (VST1Q_S "s")
382 (VST1Q_U "u") (VSTRHQSO_S "s") (VSTRHQSO_U "u")
383 (VSTRHQSSO_S "s") (VSTRHQSSO_U "u") (VSTRHQ_S "s")
384 (VSTRHQ_U "u") (VSTRWQ_S "s") (VSTRWQ_U "u")
385 (VSTRDQSB_S "s") (VSTRDQSB_U "u") (VSTRDQSO_S "s")
386 (VSTRDQSO_U "u") (VSTRDQSSO_S "s") (VSTRDQSSO_U "u")
387 (VSTRWQSO_U "u") (VSTRWQSO_S "s") (VSTRWQSSO_U "u")
388 (VSTRWQSSO_S "s") (VSTRWQSBWB_S "s") (VSTRWQSBWB_U "u")
389 (VLDRWQGBWB_S "s") (VLDRWQGBWB_U "u") (VLDRDQGBWB_S "s")
390 (VLDRDQGBWB_U "u") (VSTRDQSBWB_S "s") (VADCQ_M_S "s")
391 (VSTRDQSBWB_U "u") (VSBCQ_U "u") (VSBCQ_M_U "u")
392 (VSBCQ_S "s") (VSBCQ_M_S "s") (VSBCIQ_U "u")
393 (VSBCIQ_M_U "u") (VSBCIQ_S "s") (VSBCIQ_M_S "s")
394 (VADCQ_U "u") (VADCQ_M_U "u") (VADCQ_S "s")
395 (VADCIQ_U "u") (VADCIQ_M_U "u") (VADCIQ_S "s")
396 (VADCIQ_M_S "s") (SQRSHRL_64 "64") (SQRSHRL_48 "48")
397 (UQRSHLL_64 "64") (UQRSHLL_48 "48")])
399 (define_int_attr mode1 [(VCTP8Q "8") (VCTP16Q "16") (VCTP32Q "32")
400 (VCTP64Q "64") (VCTP8Q_M "8") (VCTP16Q_M "16")
401 (VCTP32Q_M "32") (VCTP64Q_M "64")])
402 (define_mode_attr MVE_pred2 [(V16QI "mve_imm_8") (V8HI "mve_imm_16")
403 (V4SI "mve_imm_32")])
404 (define_mode_attr MVE_constraint2 [(V16QI "Rb") (V8HI "Rd") (V4SI "Rf")])
405 (define_mode_attr MVE_LANES [(V16QI "16") (V8HI "8") (V4SI "4")])
406 (define_mode_attr MVE_constraint [ (V16QI "Ra") (V8HI "Rc") (V4SI "Re")])
407 (define_mode_attr MVE_pred [ (V16QI "mve_imm_7") (V8HI "mve_imm_15")
408 (V4SI "mve_imm_31")])
409 (define_mode_attr MVE_constraint3 [ (V8HI "Rb") (V4SI "Rd")])
410 (define_mode_attr MVE_pred3 [ (V8HI "mve_imm_8") (V4SI "mve_imm_16")])
411 (define_mode_attr MVE_constraint1 [ (V8HI "Ra") (V4SI "Rc")])
412 (define_mode_attr MVE_pred1 [ (V8HI "mve_imm_7") (V4SI "mve_imm_15")])
413 (define_mode_attr MVE_B_ELEM [ (V16QI "V16QI") (V8HI "V8QI") (V4SI "V4QI")])
414 (define_mode_attr MVE_H_ELEM [ (V8HI "V8HI") (V4SI "V4HI")])
415 (define_mode_attr V_sz_elem1 [(V16QI "b") (V8HI "h") (V4SI "w") (V8HF "h")
417 (define_mode_attr V_extr_elem [(V16QI "u8") (V8HI "u16") (V4SI "32")
418 (V8HF "u16") (V4SF "32")])
420 (define_mode_attr earlyclobber_32 [(V16QI "=w") (V8HI "=w") (V4SI "=&w")
421 (V8HF "=w") (V4SF "=&w")])
423 (define_int_iterator VCVTQ_TO_F [VCVTQ_TO_F_S VCVTQ_TO_F_U])
424 (define_int_iterator VMVNQ_N [VMVNQ_N_U VMVNQ_N_S])
425 (define_int_iterator VREV64Q [VREV64Q_S VREV64Q_U])
426 (define_int_iterator VCVTQ_FROM_F [VCVTQ_FROM_F_S VCVTQ_FROM_F_U])
427 (define_int_iterator VREV16Q [VREV16Q_U VREV16Q_S])
428 (define_int_iterator VCVTAQ [VCVTAQ_U VCVTAQ_S])
429 (define_int_iterator VMVNQ [VMVNQ_U VMVNQ_S])
430 (define_int_iterator VDUPQ_N [VDUPQ_N_U VDUPQ_N_S])
431 (define_int_iterator VCLZQ [VCLZQ_U VCLZQ_S])
432 (define_int_iterator VADDVQ [VADDVQ_U VADDVQ_S])
433 (define_int_iterator VREV32Q [VREV32Q_U VREV32Q_S])
434 (define_int_iterator VMOVLBQ [VMOVLBQ_S VMOVLBQ_U])
435 (define_int_iterator VMOVLTQ [VMOVLTQ_U VMOVLTQ_S])
436 (define_int_iterator VCVTPQ [VCVTPQ_S VCVTPQ_U])
437 (define_int_iterator VCVTNQ [VCVTNQ_S VCVTNQ_U])
438 (define_int_iterator VCVTMQ [VCVTMQ_S VCVTMQ_U])
439 (define_int_iterator VADDLVQ [VADDLVQ_U VADDLVQ_S])
440 (define_int_iterator VCTPQ [VCTP8Q VCTP16Q VCTP32Q VCTP64Q])
441 (define_int_iterator VCTPQ_M [VCTP8Q_M VCTP16Q_M VCTP32Q_M VCTP64Q_M])
442 (define_int_iterator VCVTQ_N_TO_F [VCVTQ_N_TO_F_S VCVTQ_N_TO_F_U])
443 (define_int_iterator VCREATEQ [VCREATEQ_U VCREATEQ_S])
444 (define_int_iterator VSHRQ_N [VSHRQ_N_S VSHRQ_N_U])
445 (define_int_iterator VCVTQ_N_FROM_F [VCVTQ_N_FROM_F_S VCVTQ_N_FROM_F_U])
446 (define_int_iterator VADDLVQ_P [VADDLVQ_P_S VADDLVQ_P_U])
447 (define_int_iterator VCMPNEQ [VCMPNEQ_U VCMPNEQ_S])
448 (define_int_iterator VSHLQ [VSHLQ_S VSHLQ_U])
449 (define_int_iterator VABDQ [VABDQ_S VABDQ_U])
450 (define_int_iterator VADDQ_N [VADDQ_N_S VADDQ_N_U])
451 (define_int_iterator VADDVAQ [VADDVAQ_S VADDVAQ_U])
452 (define_int_iterator VADDVQ_P [VADDVQ_P_U VADDVQ_P_S])
453 (define_int_iterator VANDQ [VANDQ_U VANDQ_S])
454 (define_int_iterator VBICQ [VBICQ_S VBICQ_U])
455 (define_int_iterator VBRSRQ_N [VBRSRQ_N_U VBRSRQ_N_S])
456 (define_int_iterator VCADDQ_ROT270 [VCADDQ_ROT270_S VCADDQ_ROT270_U])
457 (define_int_iterator VCADDQ_ROT90 [VCADDQ_ROT90_U VCADDQ_ROT90_S])
458 (define_int_iterator VCMPEQQ [VCMPEQQ_U VCMPEQQ_S])
459 (define_int_iterator VCMPEQQ_N [VCMPEQQ_N_S VCMPEQQ_N_U])
460 (define_int_iterator VCMPNEQ_N [VCMPNEQ_N_U VCMPNEQ_N_S])
461 (define_int_iterator VEORQ [VEORQ_U VEORQ_S])
462 (define_int_iterator VHADDQ [VHADDQ_S VHADDQ_U])
463 (define_int_iterator VHADDQ_N [VHADDQ_N_U VHADDQ_N_S])
464 (define_int_iterator VHSUBQ [VHSUBQ_S VHSUBQ_U])
465 (define_int_iterator VHSUBQ_N [VHSUBQ_N_U VHSUBQ_N_S])
466 (define_int_iterator VMAXQ [VMAXQ_U VMAXQ_S])
467 (define_int_iterator VMAXVQ [VMAXVQ_U VMAXVQ_S])
468 (define_int_iterator VMINQ [VMINQ_S VMINQ_U])
469 (define_int_iterator VMINVQ [VMINVQ_U VMINVQ_S])
470 (define_int_iterator VMLADAVQ [VMLADAVQ_U VMLADAVQ_S])
471 (define_int_iterator VMULHQ [VMULHQ_S VMULHQ_U])
472 (define_int_iterator VMULLBQ_INT [VMULLBQ_INT_U VMULLBQ_INT_S])
473 (define_int_iterator VMULLTQ_INT [VMULLTQ_INT_U VMULLTQ_INT_S])
474 (define_int_iterator VMULQ [VMULQ_U VMULQ_S])
475 (define_int_iterator VMULQ_N [VMULQ_N_U VMULQ_N_S])
476 (define_int_iterator VORNQ [VORNQ_U VORNQ_S])
477 (define_int_iterator VORRQ [VORRQ_S VORRQ_U])
478 (define_int_iterator VQADDQ [VQADDQ_U VQADDQ_S])
479 (define_int_iterator VQADDQ_N [VQADDQ_N_S VQADDQ_N_U])
480 (define_int_iterator VQRSHLQ [VQRSHLQ_S VQRSHLQ_U])
481 (define_int_iterator VQRSHLQ_N [VQRSHLQ_N_S VQRSHLQ_N_U])
482 (define_int_iterator VQSHLQ [VQSHLQ_S VQSHLQ_U])
483 (define_int_iterator VQSHLQ_N [VQSHLQ_N_S VQSHLQ_N_U])
484 (define_int_iterator VQSHLQ_R [VQSHLQ_R_U VQSHLQ_R_S])
485 (define_int_iterator VQSUBQ [VQSUBQ_U VQSUBQ_S])
486 (define_int_iterator VQSUBQ_N [VQSUBQ_N_S VQSUBQ_N_U])
487 (define_int_iterator VRHADDQ [VRHADDQ_S VRHADDQ_U])
488 (define_int_iterator VRMULHQ [VRMULHQ_S VRMULHQ_U])
489 (define_int_iterator VRSHLQ [VRSHLQ_S VRSHLQ_U])
490 (define_int_iterator VRSHLQ_N [VRSHLQ_N_U VRSHLQ_N_S])
491 (define_int_iterator VRSHRQ_N [VRSHRQ_N_S VRSHRQ_N_U])
492 (define_int_iterator VSHLQ_N [VSHLQ_N_U VSHLQ_N_S])
493 (define_int_iterator VSHLQ_R [VSHLQ_R_S VSHLQ_R_U])
494 (define_int_iterator VSUBQ [VSUBQ_S VSUBQ_U])
495 (define_int_iterator VSUBQ_N [VSUBQ_N_S VSUBQ_N_U])
496 (define_int_iterator VADDLVAQ [VADDLVAQ_S VADDLVAQ_U])
497 (define_int_iterator VBICQ_N [VBICQ_N_S VBICQ_N_U])
498 (define_int_iterator VMLALDAVQ [VMLALDAVQ_U VMLALDAVQ_S])
499 (define_int_iterator VMLALDAVXQ [VMLALDAVXQ_U VMLALDAVXQ_S])
500 (define_int_iterator VMOVNBQ [VMOVNBQ_U VMOVNBQ_S])
501 (define_int_iterator VMOVNTQ [VMOVNTQ_S VMOVNTQ_U])
502 (define_int_iterator VORRQ_N [VORRQ_N_U VORRQ_N_S])
503 (define_int_iterator VQMOVNBQ [VQMOVNBQ_U VQMOVNBQ_S])
504 (define_int_iterator VQMOVNTQ [VQMOVNTQ_U VQMOVNTQ_S])
505 (define_int_iterator VSHLLBQ_N [VSHLLBQ_N_S VSHLLBQ_N_U])
506 (define_int_iterator VSHLLTQ_N [VSHLLTQ_N_U VSHLLTQ_N_S])
507 (define_int_iterator VRMLALDAVHQ [VRMLALDAVHQ_U VRMLALDAVHQ_S])
508 (define_int_iterator VBICQ_M_N [VBICQ_M_N_S VBICQ_M_N_U])
509 (define_int_iterator VCVTAQ_M [VCVTAQ_M_S VCVTAQ_M_U])
510 (define_int_iterator VCVTQ_M_TO_F [VCVTQ_M_TO_F_S VCVTQ_M_TO_F_U])
511 (define_int_iterator VQRSHRNBQ_N [VQRSHRNBQ_N_U VQRSHRNBQ_N_S])
512 (define_int_iterator VABAVQ [VABAVQ_S VABAVQ_U])
513 (define_int_iterator VSHLCQ [VSHLCQ_S VSHLCQ_U])
514 (define_int_iterator VRMLALDAVHAQ [VRMLALDAVHAQ_S VRMLALDAVHAQ_U])
515 (define_int_iterator VADDVAQ_P [VADDVAQ_P_S VADDVAQ_P_U])
516 (define_int_iterator VCLZQ_M [VCLZQ_M_S VCLZQ_M_U])
517 (define_int_iterator VCMPEQQ_M_N [VCMPEQQ_M_N_S VCMPEQQ_M_N_U])
518 (define_int_iterator VCMPEQQ_M [VCMPEQQ_M_S VCMPEQQ_M_U])
519 (define_int_iterator VCMPNEQ_M_N [VCMPNEQ_M_N_S VCMPNEQ_M_N_U])
520 (define_int_iterator VCMPNEQ_M [VCMPNEQ_M_S VCMPNEQ_M_U])
521 (define_int_iterator VDUPQ_M_N [VDUPQ_M_N_S VDUPQ_M_N_U])
522 (define_int_iterator VMAXVQ_P [VMAXVQ_P_S VMAXVQ_P_U])
523 (define_int_iterator VMINVQ_P [VMINVQ_P_S VMINVQ_P_U])
524 (define_int_iterator VMLADAVAQ [VMLADAVAQ_S VMLADAVAQ_U])
525 (define_int_iterator VMLADAVQ_P [VMLADAVQ_P_S VMLADAVQ_P_U])
526 (define_int_iterator VMLAQ_N [VMLAQ_N_S VMLAQ_N_U])
527 (define_int_iterator VMLASQ_N [VMLASQ_N_S VMLASQ_N_U])
528 (define_int_iterator VMVNQ_M [VMVNQ_M_S VMVNQ_M_U])
529 (define_int_iterator VPSELQ [VPSELQ_S VPSELQ_U])
530 (define_int_iterator VQDMLAHQ_N [VQDMLAHQ_N_S VQDMLAHQ_N_U])
531 (define_int_iterator VQRDMLAHQ_N [VQRDMLAHQ_N_S VQRDMLAHQ_N_U])
532 (define_int_iterator VQRDMLASHQ_N [VQRDMLASHQ_N_S VQRDMLASHQ_N_U])
533 (define_int_iterator VQRSHLQ_M_N [VQRSHLQ_M_N_S VQRSHLQ_M_N_U])
534 (define_int_iterator VQSHLQ_M_R [VQSHLQ_M_R_S VQSHLQ_M_R_U])
535 (define_int_iterator VREV64Q_M [VREV64Q_M_S VREV64Q_M_U])
536 (define_int_iterator VRSHLQ_M_N [VRSHLQ_M_N_S VRSHLQ_M_N_U])
537 (define_int_iterator VSHLQ_M_R [VSHLQ_M_R_S VSHLQ_M_R_U])
538 (define_int_iterator VSLIQ_N [VSLIQ_N_S VSLIQ_N_U])
539 (define_int_iterator VSRIQ_N [VSRIQ_N_S VSRIQ_N_U])
540 (define_int_iterator VMLALDAVQ_P [VMLALDAVQ_P_U VMLALDAVQ_P_S])
541 (define_int_iterator VQMOVNBQ_M [VQMOVNBQ_M_S VQMOVNBQ_M_U])
542 (define_int_iterator VMOVLTQ_M [VMOVLTQ_M_U VMOVLTQ_M_S])
543 (define_int_iterator VMOVNBQ_M [VMOVNBQ_M_U VMOVNBQ_M_S])
544 (define_int_iterator VRSHRNTQ_N [VRSHRNTQ_N_U VRSHRNTQ_N_S])
545 (define_int_iterator VORRQ_M_N [VORRQ_M_N_S VORRQ_M_N_U])
546 (define_int_iterator VREV32Q_M [VREV32Q_M_S VREV32Q_M_U])
547 (define_int_iterator VREV16Q_M [VREV16Q_M_S VREV16Q_M_U])
548 (define_int_iterator VQRSHRNTQ_N [VQRSHRNTQ_N_U VQRSHRNTQ_N_S])
549 (define_int_iterator VMOVNTQ_M [VMOVNTQ_M_U VMOVNTQ_M_S])
550 (define_int_iterator VMOVLBQ_M [VMOVLBQ_M_U VMOVLBQ_M_S])
551 (define_int_iterator VMLALDAVAQ [VMLALDAVAQ_S VMLALDAVAQ_U])
552 (define_int_iterator VQSHRNBQ_N [VQSHRNBQ_N_U VQSHRNBQ_N_S])
553 (define_int_iterator VSHRNBQ_N [VSHRNBQ_N_U VSHRNBQ_N_S])
554 (define_int_iterator VRSHRNBQ_N [VRSHRNBQ_N_S VRSHRNBQ_N_U])
555 (define_int_iterator VMLALDAVXQ_P [VMLALDAVXQ_P_U VMLALDAVXQ_P_S])
556 (define_int_iterator VQMOVNTQ_M [VQMOVNTQ_M_U VQMOVNTQ_M_S])
557 (define_int_iterator VMVNQ_M_N [VMVNQ_M_N_U VMVNQ_M_N_S])
558 (define_int_iterator VQSHRNTQ_N [VQSHRNTQ_N_U VQSHRNTQ_N_S])
559 (define_int_iterator VMLALDAVAXQ [VMLALDAVAXQ_S VMLALDAVAXQ_U])
560 (define_int_iterator VSHRNTQ_N [VSHRNTQ_N_S VSHRNTQ_N_U])
561 (define_int_iterator VCVTMQ_M [VCVTMQ_M_S VCVTMQ_M_U])
562 (define_int_iterator VCVTNQ_M [VCVTNQ_M_S VCVTNQ_M_U])
563 (define_int_iterator VCVTPQ_M [VCVTPQ_M_S VCVTPQ_M_U])
564 (define_int_iterator VCVTQ_M_N_FROM_F [VCVTQ_M_N_FROM_F_S VCVTQ_M_N_FROM_F_U])
565 (define_int_iterator VCVTQ_M_FROM_F [VCVTQ_M_FROM_F_U VCVTQ_M_FROM_F_S])
566 (define_int_iterator VRMLALDAVHQ_P [VRMLALDAVHQ_P_S VRMLALDAVHQ_P_U])
567 (define_int_iterator VADDLVAQ_P [VADDLVAQ_P_U VADDLVAQ_P_S])
568 (define_int_iterator VABAVQ_P [VABAVQ_P_S VABAVQ_P_U])
569 (define_int_iterator VSHLQ_M [VSHLQ_M_S VSHLQ_M_U])
570 (define_int_iterator VSRIQ_M_N [VSRIQ_M_N_S VSRIQ_M_N_U])
571 (define_int_iterator VSUBQ_M [VSUBQ_M_U VSUBQ_M_S])
572 (define_int_iterator VCVTQ_M_N_TO_F [VCVTQ_M_N_TO_F_U VCVTQ_M_N_TO_F_S])
573 (define_int_iterator VHSUBQ_M [VHSUBQ_M_S VHSUBQ_M_U])
574 (define_int_iterator VSLIQ_M_N [VSLIQ_M_N_U VSLIQ_M_N_S])
575 (define_int_iterator VRSHLQ_M [VRSHLQ_M_S VRSHLQ_M_U])
576 (define_int_iterator VMINQ_M [VMINQ_M_S VMINQ_M_U])
577 (define_int_iterator VMULLBQ_INT_M [VMULLBQ_INT_M_U VMULLBQ_INT_M_S])
578 (define_int_iterator VMULHQ_M [VMULHQ_M_S VMULHQ_M_U])
579 (define_int_iterator VMULQ_M [VMULQ_M_S VMULQ_M_U])
580 (define_int_iterator VHSUBQ_M_N [VHSUBQ_M_N_S VHSUBQ_M_N_U])
581 (define_int_iterator VHADDQ_M_N [VHADDQ_M_N_S VHADDQ_M_N_U])
582 (define_int_iterator VORRQ_M [VORRQ_M_S VORRQ_M_U])
583 (define_int_iterator VRMULHQ_M [VRMULHQ_M_U VRMULHQ_M_S])
584 (define_int_iterator VQADDQ_M [VQADDQ_M_U VQADDQ_M_S])
585 (define_int_iterator VRSHRQ_M_N [VRSHRQ_M_N_S VRSHRQ_M_N_U])
586 (define_int_iterator VQSUBQ_M_N [VQSUBQ_M_N_U VQSUBQ_M_N_S])
587 (define_int_iterator VADDQ_M [VADDQ_M_U VADDQ_M_S])
588 (define_int_iterator VORNQ_M [VORNQ_M_U VORNQ_M_S])
589 (define_int_iterator VRHADDQ_M [VRHADDQ_M_U VRHADDQ_M_S])
590 (define_int_iterator VQSHLQ_M [VQSHLQ_M_U VQSHLQ_M_S])
591 (define_int_iterator VANDQ_M [VANDQ_M_U VANDQ_M_S])
592 (define_int_iterator VBICQ_M [VBICQ_M_U VBICQ_M_S])
593 (define_int_iterator VSHLQ_M_N [VSHLQ_M_N_S VSHLQ_M_N_U])
594 (define_int_iterator VCADDQ_ROT270_M [VCADDQ_ROT270_M_U VCADDQ_ROT270_M_S])
595 (define_int_iterator VQRSHLQ_M [VQRSHLQ_M_U VQRSHLQ_M_S])
596 (define_int_iterator VQADDQ_M_N [VQADDQ_M_N_U VQADDQ_M_N_S])
597 (define_int_iterator VADDQ_M_N [VADDQ_M_N_S VADDQ_M_N_U])
598 (define_int_iterator VMAXQ_M [VMAXQ_M_S VMAXQ_M_U])
599 (define_int_iterator VQSUBQ_M [VQSUBQ_M_U VQSUBQ_M_S])
600 (define_int_iterator VMLASQ_M_N [VMLASQ_M_N_U VMLASQ_M_N_S])
601 (define_int_iterator VMLADAVAQ_P [VMLADAVAQ_P_U VMLADAVAQ_P_S])
602 (define_int_iterator VBRSRQ_M_N [VBRSRQ_M_N_U VBRSRQ_M_N_S])
603 (define_int_iterator VMULQ_M_N [VMULQ_M_N_U VMULQ_M_N_S])
604 (define_int_iterator VCADDQ_ROT90_M [VCADDQ_ROT90_M_U VCADDQ_ROT90_M_S])
605 (define_int_iterator VMULLTQ_INT_M [VMULLTQ_INT_M_S VMULLTQ_INT_M_U])
606 (define_int_iterator VEORQ_M [VEORQ_M_S VEORQ_M_U])
607 (define_int_iterator VSHRQ_M_N [VSHRQ_M_N_S VSHRQ_M_N_U])
608 (define_int_iterator VSUBQ_M_N [VSUBQ_M_N_S VSUBQ_M_N_U])
609 (define_int_iterator VHADDQ_M [VHADDQ_M_S VHADDQ_M_U])
610 (define_int_iterator VABDQ_M [VABDQ_M_S VABDQ_M_U])
611 (define_int_iterator VMLAQ_M_N [VMLAQ_M_N_S VMLAQ_M_N_U])
612 (define_int_iterator VQSHLQ_M_N [VQSHLQ_M_N_S VQSHLQ_M_N_U])
613 (define_int_iterator VMLALDAVAQ_P [VMLALDAVAQ_P_U VMLALDAVAQ_P_S])
614 (define_int_iterator VMLALDAVAXQ_P [VMLALDAVAXQ_P_U VMLALDAVAXQ_P_S])
615 (define_int_iterator VQRSHRNBQ_M_N [VQRSHRNBQ_M_N_U VQRSHRNBQ_M_N_S])
616 (define_int_iterator VQRSHRNTQ_M_N [VQRSHRNTQ_M_N_S VQRSHRNTQ_M_N_U])
617 (define_int_iterator VQSHRNBQ_M_N [VQSHRNBQ_M_N_U VQSHRNBQ_M_N_S])
618 (define_int_iterator VQSHRNTQ_M_N [VQSHRNTQ_M_N_S VQSHRNTQ_M_N_U])
619 (define_int_iterator VRSHRNBQ_M_N [VRSHRNBQ_M_N_U VRSHRNBQ_M_N_S])
620 (define_int_iterator VRSHRNTQ_M_N [VRSHRNTQ_M_N_U VRSHRNTQ_M_N_S])
621 (define_int_iterator VSHLLBQ_M_N [VSHLLBQ_M_N_U VSHLLBQ_M_N_S])
622 (define_int_iterator VSHLLTQ_M_N [VSHLLTQ_M_N_U VSHLLTQ_M_N_S])
623 (define_int_iterator VSHRNBQ_M_N [VSHRNBQ_M_N_S VSHRNBQ_M_N_U])
624 (define_int_iterator VSHRNTQ_M_N [VSHRNTQ_M_N_S VSHRNTQ_M_N_U])
625 (define_int_iterator VSTRWSBQ [VSTRWQSB_S VSTRWQSB_U])
626 (define_int_iterator VSTRBSOQ [VSTRBQSO_S VSTRBQSO_U])
627 (define_int_iterator VSTRBQ [VSTRBQ_S VSTRBQ_U])
628 (define_int_iterator VLDRBGOQ [VLDRBQGO_S VLDRBQGO_U])
629 (define_int_iterator VLDRBQ [VLDRBQ_S VLDRBQ_U])
630 (define_int_iterator VLDRWGBQ [VLDRWQGB_S VLDRWQGB_U])
631 (define_int_iterator VLD1Q [VLD1Q_S VLD1Q_U])
632 (define_int_iterator VLDRHGOQ [VLDRHQGO_S VLDRHQGO_U])
633 (define_int_iterator VLDRHGSOQ [VLDRHQGSO_S VLDRHQGSO_U])
634 (define_int_iterator VLDRHQ [VLDRHQ_S VLDRHQ_U])
635 (define_int_iterator VLDRWQ [VLDRWQ_S VLDRWQ_U])
636 (define_int_iterator VLDRDGBQ [VLDRDQGB_S VLDRDQGB_U])
637 (define_int_iterator VLDRDGOQ [VLDRDQGO_S VLDRDQGO_U])
638 (define_int_iterator VLDRDGSOQ [VLDRDQGSO_S VLDRDQGSO_U])
639 (define_int_iterator VLDRWGOQ [VLDRWQGO_S VLDRWQGO_U])
640 (define_int_iterator VLDRWGSOQ [VLDRWQGSO_S VLDRWQGSO_U])
641 (define_int_iterator VST1Q [VST1Q_S VST1Q_U])
642 (define_int_iterator VSTRHSOQ [VSTRHQSO_S VSTRHQSO_U])
643 (define_int_iterator VSTRHSSOQ [VSTRHQSSO_S VSTRHQSSO_U])
644 (define_int_iterator VSTRHQ [VSTRHQ_S VSTRHQ_U])
645 (define_int_iterator VSTRWQ [VSTRWQ_S VSTRWQ_U])
646 (define_int_iterator VSTRDSBQ [VSTRDQSB_S VSTRDQSB_U])
647 (define_int_iterator VSTRDSOQ [VSTRDQSO_S VSTRDQSO_U])
648 (define_int_iterator VSTRDSSOQ [VSTRDQSSO_S VSTRDQSSO_U])
649 (define_int_iterator VSTRWSOQ [VSTRWQSO_S VSTRWQSO_U])
650 (define_int_iterator VSTRWSSOQ [VSTRWQSSO_S VSTRWQSSO_U])
651 (define_int_iterator VSTRWSBWBQ [VSTRWQSBWB_S VSTRWQSBWB_U])
652 (define_int_iterator VLDRWGBWBQ [VLDRWQGBWB_S VLDRWQGBWB_U])
653 (define_int_iterator VSTRDSBWBQ [VSTRDQSBWB_S VSTRDQSBWB_U])
654 (define_int_iterator VLDRDGBWBQ [VLDRDQGBWB_S VLDRDQGBWB_U])
655 (define_int_iterator VADCIQ [VADCIQ_U VADCIQ_S])
656 (define_int_iterator VADCIQ_M [VADCIQ_M_U VADCIQ_M_S])
657 (define_int_iterator VSBCQ [VSBCQ_U VSBCQ_S])
658 (define_int_iterator VSBCQ_M [VSBCQ_M_U VSBCQ_M_S])
659 (define_int_iterator VSBCIQ [VSBCIQ_U VSBCIQ_S])
660 (define_int_iterator VSBCIQ_M [VSBCIQ_M_U VSBCIQ_M_S])
661 (define_int_iterator VADCQ [VADCQ_U VADCQ_S])
662 (define_int_iterator VADCQ_M [VADCQ_M_U VADCQ_M_S])
663 (define_int_iterator UQRSHLLQ [UQRSHLL_64 UQRSHLL_48])
664 (define_int_iterator SQRSHRLQ [SQRSHRL_64 SQRSHRL_48])
666 (define_insn "*mve_mov<mode>"
667 [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w,w,r,w,Us")
668 (match_operand:MVE_types 1 "general_operand" "w,r,w,Dn,Usi,r,Dm,w"))]
669 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
671 if (which_alternative == 3 || which_alternative == 6)
674 static char templ[40];
676 is_valid = simd_immediate_valid_for_move (operands[1], <MODE>mode,
677 &operands[1], &width);
679 gcc_assert (is_valid != 0);
682 return "vmov.f32\t%q0, %1 @ <mode>";
684 sprintf (templ, "vmov.i%d\t%%q0, %%x1 @ <mode>", width);
687 switch (which_alternative)
690 return "vmov\t%q0, %q1";
692 return "vmov\t%e0, %Q1, %R1 @ <mode>\;vmov\t%f0, %J1, %K1";
694 return "vmov\t%Q0, %R0, %e1 @ <mode>\;vmov\t%J0, %K0, %f1";
696 if ((TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))
697 || (MEM_P (operands[1])
698 && GET_CODE (XEXP (operands[1], 0)) == LABEL_REF))
699 return output_move_neon (operands);
701 return "vldrb.8 %q0, %E1";
703 return output_move_quad (operands);
705 return "vstrb.8 %q1, %E0";
711 [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_move,mve_store")
712 (set_attr "length" "4,8,8,4,8,8,4,4")
713 (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*")
714 (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*")])
716 (define_insn "*mve_mov<mode>"
717 [(set (match_operand:MVE_types 0 "s_register_operand" "=w,w")
718 (vec_duplicate:MVE_types
719 (match_operand:SI 1 "nonmemory_operand" "r,i")))]
720 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
722 if (which_alternative == 0)
723 return "vdup.<V_sz_elem>\t%q0, %1";
724 return "vmov.<V_sz_elem>\t%q0, %1";
726 [(set_attr "length" "4,4")
727 (set_attr "type" "mve_move,mve_move")])
732 (define_insn "mve_vst4q<mode>"
733 [(set (match_operand:XI 0 "neon_struct_operand" "=Um")
734 (unspec:XI [(match_operand:XI 1 "s_register_operand" "w")
735 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
741 int regno = REGNO (operands[1]);
742 ops[0] = gen_rtx_REG (TImode, regno);
743 ops[1] = gen_rtx_REG (TImode, regno+4);
744 ops[2] = gen_rtx_REG (TImode, regno+8);
745 ops[3] = gen_rtx_REG (TImode, regno+12);
746 rtx reg = operands[0];
747 while (reg && !REG_P (reg))
749 gcc_assert (REG_P (reg));
751 ops[5] = operands[0];
752 /* Here in first three instructions data is stored to ops[4]'s location but
753 in the fourth instruction data is stored to operands[0], this is to
754 support the writeback. */
755 output_asm_insn ("vst40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
756 "vst41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
757 "vst42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
758 "vst43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
761 [(set_attr "length" "16")])
766 (define_insn "mve_vrndq_m_f<mode>"
768 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
769 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
770 (match_operand:MVE_0 2 "s_register_operand" "w")
771 (match_operand:HI 3 "vpr_register_operand" "Up")]
774 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
775 "vpst\;vrintzt.f%#<V_sz_elem> %q0, %q2"
776 [(set_attr "type" "mve_move")
777 (set_attr "length""8")])
782 (define_insn "mve_vrndxq_f<mode>"
784 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
785 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
788 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
789 "vrintx.f%#<V_sz_elem> %q0, %q1"
790 [(set_attr "type" "mve_move")
796 (define_insn "mve_vrndq_f<mode>"
798 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
799 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
802 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
803 "vrintz.f%#<V_sz_elem> %q0, %q1"
804 [(set_attr "type" "mve_move")
810 (define_insn "mve_vrndpq_f<mode>"
812 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
813 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
816 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
817 "vrintp.f%#<V_sz_elem> %q0, %q1"
818 [(set_attr "type" "mve_move")
824 (define_insn "mve_vrndnq_f<mode>"
826 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
827 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
830 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
831 "vrintn.f%#<V_sz_elem> %q0, %q1"
832 [(set_attr "type" "mve_move")
838 (define_insn "mve_vrndmq_f<mode>"
840 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
841 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
844 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
845 "vrintm.f%#<V_sz_elem> %q0, %q1"
846 [(set_attr "type" "mve_move")
852 (define_insn "mve_vrndaq_f<mode>"
854 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
855 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
858 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
859 "vrinta.f%#<V_sz_elem> %q0, %q1"
860 [(set_attr "type" "mve_move")
866 (define_insn "mve_vrev64q_f<mode>"
868 (set (match_operand:MVE_0 0 "s_register_operand" "=&w")
869 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
872 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
873 "vrev64.%#<V_sz_elem> %q0, %q1"
874 [(set_attr "type" "mve_move")
880 (define_insn "mve_vnegq_f<mode>"
882 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
883 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
886 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
887 "vneg.f%#<V_sz_elem> %q0, %q1"
888 [(set_attr "type" "mve_move")
894 (define_insn "mve_vdupq_n_f<mode>"
896 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
897 (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
900 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
901 "vdup.%#<V_sz_elem> %q0, %1"
902 [(set_attr "type" "mve_move")
908 (define_insn "mve_vabsq_f<mode>"
910 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
911 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
914 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
915 "vabs.f%#<V_sz_elem> %q0, %q1"
916 [(set_attr "type" "mve_move")
922 (define_insn "mve_vrev32q_fv8hf"
924 (set (match_operand:V8HF 0 "s_register_operand" "=w")
925 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")]
928 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
930 [(set_attr "type" "mve_move")
935 (define_insn "mve_vcvttq_f32_f16v4sf"
937 (set (match_operand:V4SF 0 "s_register_operand" "=w")
938 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
941 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
942 "vcvtt.f32.f16 %q0, %q1"
943 [(set_attr "type" "mve_move")
949 (define_insn "mve_vcvtbq_f32_f16v4sf"
951 (set (match_operand:V4SF 0 "s_register_operand" "=w")
952 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
955 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
956 "vcvtb.f32.f16 %q0, %q1"
957 [(set_attr "type" "mve_move")
961 ;; [vcvtq_to_f_s, vcvtq_to_f_u])
963 (define_insn "mve_vcvtq_to_f_<supf><mode>"
965 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
966 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
969 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
970 "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q1"
971 [(set_attr "type" "mve_move")
975 ;; [vrev64q_u, vrev64q_s])
977 (define_insn "mve_vrev64q_<supf><mode>"
979 (set (match_operand:MVE_2 0 "s_register_operand" "=&w")
980 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
984 "vrev64.%#<V_sz_elem> %q0, %q1"
985 [(set_attr "type" "mve_move")
989 ;; [vcvtq_from_f_s, vcvtq_from_f_u])
991 (define_insn "mve_vcvtq_from_f_<supf><mode>"
993 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
994 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
997 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
998 "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
999 [(set_attr "type" "mve_move")
1003 (define_insn "mve_vqnegq_s<mode>"
1005 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1006 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1010 "vqneg.s%#<V_sz_elem> %q0, %q1"
1011 [(set_attr "type" "mve_move")
1017 (define_insn "mve_vqabsq_s<mode>"
1019 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1020 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1024 "vqabs.s%#<V_sz_elem> %q0, %q1"
1025 [(set_attr "type" "mve_move")
1031 (define_insn "mve_vnegq_s<mode>"
1033 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1034 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1038 "vneg.s%#<V_sz_elem> %q0, %q1"
1039 [(set_attr "type" "mve_move")
1043 ;; [vmvnq_u, vmvnq_s])
1045 (define_insn "mve_vmvnq_<supf><mode>"
1047 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1048 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1053 [(set_attr "type" "mve_move")
1057 ;; [vdupq_n_u, vdupq_n_s])
1059 (define_insn "mve_vdupq_n_<supf><mode>"
1061 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1062 (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
1066 "vdup.%#<V_sz_elem> %q0, %1"
1067 [(set_attr "type" "mve_move")
1071 ;; [vclzq_u, vclzq_s])
1073 (define_insn "mve_vclzq_<supf><mode>"
1075 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1076 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1080 "vclz.i%#<V_sz_elem> %q0, %q1"
1081 [(set_attr "type" "mve_move")
1087 (define_insn "mve_vclsq_s<mode>"
1089 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1090 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1094 "vcls.s%#<V_sz_elem> %q0, %q1"
1095 [(set_attr "type" "mve_move")
1099 ;; [vaddvq_s, vaddvq_u])
1101 (define_insn "mve_vaddvq_<supf><mode>"
1103 (set (match_operand:SI 0 "s_register_operand" "=e")
1104 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
1108 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
1109 [(set_attr "type" "mve_move")
1115 (define_insn "mve_vabsq_s<mode>"
1117 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1118 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1122 "vabs.s%#<V_sz_elem>\t%q0, %q1"
1123 [(set_attr "type" "mve_move")
1127 ;; [vrev32q_u, vrev32q_s])
1129 (define_insn "mve_vrev32q_<supf><mode>"
1131 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
1132 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
1136 "vrev32.%#<V_sz_elem>\t%q0, %q1"
1137 [(set_attr "type" "mve_move")
1141 ;; [vmovltq_u, vmovltq_s])
1143 (define_insn "mve_vmovltq_<supf><mode>"
1145 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
1146 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
1150 "vmovlt.<supf>%#<V_sz_elem> %q0, %q1"
1151 [(set_attr "type" "mve_move")
1155 ;; [vmovlbq_s, vmovlbq_u])
1157 (define_insn "mve_vmovlbq_<supf><mode>"
1159 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
1160 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
1164 "vmovlb.<supf>%#<V_sz_elem> %q0, %q1"
1165 [(set_attr "type" "mve_move")
1169 ;; [vcvtpq_s, vcvtpq_u])
1171 (define_insn "mve_vcvtpq_<supf><mode>"
1173 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1174 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
1177 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1178 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
1179 [(set_attr "type" "mve_move")
1183 ;; [vcvtnq_s, vcvtnq_u])
1185 (define_insn "mve_vcvtnq_<supf><mode>"
1187 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1188 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
1191 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1192 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
1193 [(set_attr "type" "mve_move")
1197 ;; [vcvtmq_s, vcvtmq_u])
1199 (define_insn "mve_vcvtmq_<supf><mode>"
1201 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1202 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
1205 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1206 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
1207 [(set_attr "type" "mve_move")
1211 ;; [vcvtaq_u, vcvtaq_s])
1213 (define_insn "mve_vcvtaq_<supf><mode>"
1215 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1216 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
1219 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1220 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
1221 [(set_attr "type" "mve_move")
1225 ;; [vmvnq_n_u, vmvnq_n_s])
1227 (define_insn "mve_vmvnq_n_<supf><mode>"
1229 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1230 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
1234 "vmvn.i%#<V_sz_elem> %q0, %1"
1235 [(set_attr "type" "mve_move")
1239 ;; [vrev16q_u, vrev16q_s])
1241 (define_insn "mve_vrev16q_<supf>v16qi"
1243 (set (match_operand:V16QI 0 "s_register_operand" "=w")
1244 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
1249 [(set_attr "type" "mve_move")
1253 ;; [vaddlvq_s vaddlvq_u])
1255 (define_insn "mve_vaddlvq_<supf>v4si"
1257 (set (match_operand:DI 0 "s_register_operand" "=r")
1258 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
1262 "vaddlv.<supf>32 %Q0, %R0, %q1"
1263 [(set_attr "type" "mve_move")
1267 ;; [vctp8q vctp16q vctp32q vctp64q])
1269 (define_insn "mve_vctp<mode1>qhi"
1271 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1272 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
1277 [(set_attr "type" "mve_move")
1283 (define_insn "mve_vpnothi"
1285 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1286 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
1291 [(set_attr "type" "mve_move")
1297 (define_insn "mve_vsubq_n_f<mode>"
1299 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1300 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1301 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1304 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1305 "vsub.f<V_sz_elem> %q0, %q1, %2"
1306 [(set_attr "type" "mve_move")
1312 (define_insn "mve_vbrsrq_n_f<mode>"
1314 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1315 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1316 (match_operand:SI 2 "s_register_operand" "r")]
1319 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1320 "vbrsr.<V_sz_elem> %q0, %q1, %2"
1321 [(set_attr "type" "mve_move")
1325 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
1327 (define_insn "mve_vcvtq_n_to_f_<supf><mode>"
1329 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1330 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
1331 (match_operand:SI 2 "mve_imm_16" "Rd")]
1334 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1335 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
1336 [(set_attr "type" "mve_move")
1341 (define_insn "mve_vcreateq_f<mode>"
1343 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1344 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
1345 (match_operand:DI 2 "s_register_operand" "r")]
1348 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1349 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
1350 [(set_attr "type" "mve_move")
1351 (set_attr "length""8")])
1354 ;; [vcreateq_u, vcreateq_s])
1356 (define_insn "mve_vcreateq_<supf><mode>"
1358 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
1359 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
1360 (match_operand:DI 2 "s_register_operand" "r")]
1364 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
1365 [(set_attr "type" "mve_move")
1366 (set_attr "length""8")])
1369 ;; [vshrq_n_s, vshrq_n_u])
1371 (define_insn "mve_vshrq_n_<supf><mode>"
1373 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1374 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1375 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1379 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
1380 [(set_attr "type" "mve_move")
1384 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
1386 (define_insn "mve_vcvtq_n_from_f_<supf><mode>"
1388 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1389 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
1390 (match_operand:SI 2 "mve_imm_16" "Rd")]
1393 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1394 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
1395 [(set_attr "type" "mve_move")
1401 (define_insn "mve_vaddlvq_p_<supf>v4si"
1403 (set (match_operand:DI 0 "s_register_operand" "=r")
1404 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
1405 (match_operand:HI 2 "vpr_register_operand" "Up")]
1409 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
1410 [(set_attr "type" "mve_move")
1411 (set_attr "length""8")])
1414 ;; [vcmpneq_u, vcmpneq_s])
1416 (define_insn "mve_vcmpneq_<supf><mode>"
1418 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1419 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1420 (match_operand:MVE_2 2 "s_register_operand" "w")]
1424 "vcmp.i%#<V_sz_elem> ne, %q1, %q2"
1425 [(set_attr "type" "mve_move")
1429 ;; [vshlq_s, vshlq_u])
1431 (define_insn "mve_vshlq_<supf><mode>"
1433 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1434 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1435 (match_operand:MVE_2 2 "s_register_operand" "w")]
1439 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1440 [(set_attr "type" "mve_move")
1444 ;; [vabdq_s, vabdq_u])
1446 (define_insn "mve_vabdq_<supf><mode>"
1448 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1449 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1450 (match_operand:MVE_2 2 "s_register_operand" "w")]
1454 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
1455 [(set_attr "type" "mve_move")
1459 ;; [vaddq_n_s, vaddq_n_u])
1461 (define_insn "mve_vaddq_n_<supf><mode>"
1463 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1464 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1465 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1469 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
1470 [(set_attr "type" "mve_move")
1474 ;; [vaddvaq_s, vaddvaq_u])
1476 (define_insn "mve_vaddvaq_<supf><mode>"
1478 (set (match_operand:SI 0 "s_register_operand" "=e")
1479 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
1480 (match_operand:MVE_2 2 "s_register_operand" "w")]
1484 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
1485 [(set_attr "type" "mve_move")
1489 ;; [vaddvq_p_u, vaddvq_p_s])
1491 (define_insn "mve_vaddvq_p_<supf><mode>"
1493 (set (match_operand:SI 0 "s_register_operand" "=e")
1494 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1495 (match_operand:HI 2 "vpr_register_operand" "Up")]
1499 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
1500 [(set_attr "type" "mve_move")
1501 (set_attr "length""8")])
1504 ;; [vandq_u, vandq_s])
1506 (define_insn "mve_vandq_<supf><mode>"
1508 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1509 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1510 (match_operand:MVE_2 2 "s_register_operand" "w")]
1514 "vand %q0, %q1, %q2"
1515 [(set_attr "type" "mve_move")
1519 ;; [vbicq_s, vbicq_u])
1521 (define_insn "mve_vbicq_<supf><mode>"
1523 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1524 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1525 (match_operand:MVE_2 2 "s_register_operand" "w")]
1529 "vbic %q0, %q1, %q2"
1530 [(set_attr "type" "mve_move")
1534 ;; [vbrsrq_n_u, vbrsrq_n_s])
1536 (define_insn "mve_vbrsrq_n_<supf><mode>"
1538 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1539 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1540 (match_operand:SI 2 "s_register_operand" "r")]
1544 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
1545 [(set_attr "type" "mve_move")
1549 ;; [vcaddq_rot270_s, vcaddq_rot270_u])
1551 (define_insn "mve_vcaddq_rot270_<supf><mode>"
1553 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1554 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1555 (match_operand:MVE_2 2 "s_register_operand" "w")]
1559 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #270"
1560 [(set_attr "type" "mve_move")
1564 ;; [vcaddq_rot90_u, vcaddq_rot90_s])
1566 (define_insn "mve_vcaddq_rot90_<supf><mode>"
1568 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1569 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1570 (match_operand:MVE_2 2 "s_register_operand" "w")]
1574 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #90"
1575 [(set_attr "type" "mve_move")
1581 (define_insn "mve_vcmpcsq_n_u<mode>"
1583 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1584 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1585 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1589 "vcmp.u%#<V_sz_elem> cs, %q1, %2"
1590 [(set_attr "type" "mve_move")
1596 (define_insn "mve_vcmpcsq_u<mode>"
1598 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1599 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1600 (match_operand:MVE_2 2 "s_register_operand" "w")]
1604 "vcmp.u%#<V_sz_elem> cs, %q1, %q2"
1605 [(set_attr "type" "mve_move")
1609 ;; [vcmpeqq_n_s, vcmpeqq_n_u])
1611 (define_insn "mve_vcmpeqq_n_<supf><mode>"
1613 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1614 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1615 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1619 "vcmp.i%#<V_sz_elem> eq, %q1, %2"
1620 [(set_attr "type" "mve_move")
1624 ;; [vcmpeqq_u, vcmpeqq_s])
1626 (define_insn "mve_vcmpeqq_<supf><mode>"
1628 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1629 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1630 (match_operand:MVE_2 2 "s_register_operand" "w")]
1634 "vcmp.i%#<V_sz_elem> eq, %q1, %q2"
1635 [(set_attr "type" "mve_move")
1641 (define_insn "mve_vcmpgeq_n_s<mode>"
1643 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1644 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1645 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1649 "vcmp.s%#<V_sz_elem> ge, %q1, %2"
1650 [(set_attr "type" "mve_move")
1656 (define_insn "mve_vcmpgeq_s<mode>"
1658 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1659 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1660 (match_operand:MVE_2 2 "s_register_operand" "w")]
1664 "vcmp.s%#<V_sz_elem> ge, %q1, %q2"
1665 [(set_attr "type" "mve_move")
1671 (define_insn "mve_vcmpgtq_n_s<mode>"
1673 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1674 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1675 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1679 "vcmp.s%#<V_sz_elem> gt, %q1, %2"
1680 [(set_attr "type" "mve_move")
1686 (define_insn "mve_vcmpgtq_s<mode>"
1688 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1689 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1690 (match_operand:MVE_2 2 "s_register_operand" "w")]
1694 "vcmp.s%#<V_sz_elem> gt, %q1, %q2"
1695 [(set_attr "type" "mve_move")
1701 (define_insn "mve_vcmphiq_n_u<mode>"
1703 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1704 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1705 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1709 "vcmp.u%#<V_sz_elem> hi, %q1, %2"
1710 [(set_attr "type" "mve_move")
1716 (define_insn "mve_vcmphiq_u<mode>"
1718 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1719 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1720 (match_operand:MVE_2 2 "s_register_operand" "w")]
1724 "vcmp.u%#<V_sz_elem> hi, %q1, %q2"
1725 [(set_attr "type" "mve_move")
1731 (define_insn "mve_vcmpleq_n_s<mode>"
1733 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1734 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1735 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1739 "vcmp.s%#<V_sz_elem> le, %q1, %2"
1740 [(set_attr "type" "mve_move")
1746 (define_insn "mve_vcmpleq_s<mode>"
1748 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1749 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1750 (match_operand:MVE_2 2 "s_register_operand" "w")]
1754 "vcmp.s%#<V_sz_elem> le, %q1, %q2"
1755 [(set_attr "type" "mve_move")
1761 (define_insn "mve_vcmpltq_n_s<mode>"
1763 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1764 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1765 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1769 "vcmp.s%#<V_sz_elem> lt, %q1, %2"
1770 [(set_attr "type" "mve_move")
1776 (define_insn "mve_vcmpltq_s<mode>"
1778 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1779 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1780 (match_operand:MVE_2 2 "s_register_operand" "w")]
1784 "vcmp.s%#<V_sz_elem> lt, %q1, %q2"
1785 [(set_attr "type" "mve_move")
1789 ;; [vcmpneq_n_u, vcmpneq_n_s])
1791 (define_insn "mve_vcmpneq_n_<supf><mode>"
1793 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1794 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1795 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1799 "vcmp.i%#<V_sz_elem> ne, %q1, %2"
1800 [(set_attr "type" "mve_move")
1804 ;; [veorq_u, veorq_s])
1806 (define_insn "mve_veorq_<supf><mode>"
1808 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1809 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1810 (match_operand:MVE_2 2 "s_register_operand" "w")]
1814 "veor %q0, %q1, %q2"
1815 [(set_attr "type" "mve_move")
1819 ;; [vhaddq_n_u, vhaddq_n_s])
1821 (define_insn "mve_vhaddq_n_<supf><mode>"
1823 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1824 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1825 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1829 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1830 [(set_attr "type" "mve_move")
1834 ;; [vhaddq_s, vhaddq_u])
1836 (define_insn "mve_vhaddq_<supf><mode>"
1838 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1839 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1840 (match_operand:MVE_2 2 "s_register_operand" "w")]
1844 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1845 [(set_attr "type" "mve_move")
1849 ;; [vhcaddq_rot270_s])
1851 (define_insn "mve_vhcaddq_rot270_s<mode>"
1853 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1854 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1855 (match_operand:MVE_2 2 "s_register_operand" "w")]
1859 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1860 [(set_attr "type" "mve_move")
1864 ;; [vhcaddq_rot90_s])
1866 (define_insn "mve_vhcaddq_rot90_s<mode>"
1868 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1869 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1870 (match_operand:MVE_2 2 "s_register_operand" "w")]
1874 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1875 [(set_attr "type" "mve_move")
1879 ;; [vhsubq_n_u, vhsubq_n_s])
1881 (define_insn "mve_vhsubq_n_<supf><mode>"
1883 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1884 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1885 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1889 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1890 [(set_attr "type" "mve_move")
1894 ;; [vhsubq_s, vhsubq_u])
1896 (define_insn "mve_vhsubq_<supf><mode>"
1898 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1899 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1900 (match_operand:MVE_2 2 "s_register_operand" "w")]
1904 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1905 [(set_attr "type" "mve_move")
1911 (define_insn "mve_vmaxaq_s<mode>"
1913 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1914 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1915 (match_operand:MVE_2 2 "s_register_operand" "w")]
1919 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1920 [(set_attr "type" "mve_move")
1926 (define_insn "mve_vmaxavq_s<mode>"
1928 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1929 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1930 (match_operand:MVE_2 2 "s_register_operand" "w")]
1934 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1935 [(set_attr "type" "mve_move")
1939 ;; [vmaxq_u, vmaxq_s])
1941 (define_insn "mve_vmaxq_<supf><mode>"
1943 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1944 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1945 (match_operand:MVE_2 2 "s_register_operand" "w")]
1949 "vmax.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1950 [(set_attr "type" "mve_move")
1954 ;; [vmaxvq_u, vmaxvq_s])
1956 (define_insn "mve_vmaxvq_<supf><mode>"
1958 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1959 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1960 (match_operand:MVE_2 2 "s_register_operand" "w")]
1964 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
1965 [(set_attr "type" "mve_move")
1971 (define_insn "mve_vminaq_s<mode>"
1973 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1974 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1975 (match_operand:MVE_2 2 "s_register_operand" "w")]
1979 "vmina.s%#<V_sz_elem>\t%q0, %q2"
1980 [(set_attr "type" "mve_move")
1986 (define_insn "mve_vminavq_s<mode>"
1988 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1989 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1990 (match_operand:MVE_2 2 "s_register_operand" "w")]
1994 "vminav.s%#<V_sz_elem>\t%0, %q2"
1995 [(set_attr "type" "mve_move")
1999 ;; [vminq_s, vminq_u])
2001 (define_insn "mve_vminq_<supf><mode>"
2003 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2004 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2005 (match_operand:MVE_2 2 "s_register_operand" "w")]
2009 "vmin.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2010 [(set_attr "type" "mve_move")
2014 ;; [vminvq_u, vminvq_s])
2016 (define_insn "mve_vminvq_<supf><mode>"
2018 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2019 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2020 (match_operand:MVE_2 2 "s_register_operand" "w")]
2024 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
2025 [(set_attr "type" "mve_move")
2029 ;; [vmladavq_u, vmladavq_s])
2031 (define_insn "mve_vmladavq_<supf><mode>"
2033 (set (match_operand:SI 0 "s_register_operand" "=e")
2034 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
2035 (match_operand:MVE_2 2 "s_register_operand" "w")]
2039 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
2040 [(set_attr "type" "mve_move")
2046 (define_insn "mve_vmladavxq_s<mode>"
2048 (set (match_operand:SI 0 "s_register_operand" "=e")
2049 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
2050 (match_operand:MVE_2 2 "s_register_operand" "w")]
2054 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
2055 [(set_attr "type" "mve_move")
2061 (define_insn "mve_vmlsdavq_s<mode>"
2063 (set (match_operand:SI 0 "s_register_operand" "=e")
2064 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
2065 (match_operand:MVE_2 2 "s_register_operand" "w")]
2069 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
2070 [(set_attr "type" "mve_move")
2076 (define_insn "mve_vmlsdavxq_s<mode>"
2078 (set (match_operand:SI 0 "s_register_operand" "=e")
2079 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
2080 (match_operand:MVE_2 2 "s_register_operand" "w")]
2084 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
2085 [(set_attr "type" "mve_move")
2089 ;; [vmulhq_s, vmulhq_u])
2091 (define_insn "mve_vmulhq_<supf><mode>"
2093 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2094 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2095 (match_operand:MVE_2 2 "s_register_operand" "w")]
2099 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2100 [(set_attr "type" "mve_move")
2104 ;; [vmullbq_int_u, vmullbq_int_s])
2106 (define_insn "mve_vmullbq_int_<supf><mode>"
2108 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2109 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
2110 (match_operand:MVE_2 2 "s_register_operand" "w")]
2114 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2115 [(set_attr "type" "mve_move")
2119 ;; [vmulltq_int_u, vmulltq_int_s])
2121 (define_insn "mve_vmulltq_int_<supf><mode>"
2123 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2124 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
2125 (match_operand:MVE_2 2 "s_register_operand" "w")]
2129 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2130 [(set_attr "type" "mve_move")
2134 ;; [vmulq_n_u, vmulq_n_s])
2136 (define_insn "mve_vmulq_n_<supf><mode>"
2138 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2139 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2140 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2144 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
2145 [(set_attr "type" "mve_move")
2149 ;; [vmulq_u, vmulq_s])
2151 (define_insn "mve_vmulq_<supf><mode>"
2153 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2154 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2155 (match_operand:MVE_2 2 "s_register_operand" "w")]
2159 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
2160 [(set_attr "type" "mve_move")
2164 ;; [vornq_u, vornq_s])
2166 (define_insn "mve_vornq_<supf><mode>"
2168 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2169 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2170 (match_operand:MVE_2 2 "s_register_operand" "w")]
2174 "vorn %q0, %q1, %q2"
2175 [(set_attr "type" "mve_move")
2179 ;; [vorrq_s, vorrq_u])
2181 (define_insn "mve_vorrq_<supf><mode>"
2183 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2184 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2185 (match_operand:MVE_2 2 "s_register_operand" "w")]
2189 "vorr %q0, %q1, %q2"
2190 [(set_attr "type" "mve_move")
2194 ;; [vqaddq_n_s, vqaddq_n_u])
2196 (define_insn "mve_vqaddq_n_<supf><mode>"
2198 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2199 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2200 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2204 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2205 [(set_attr "type" "mve_move")
2209 ;; [vqaddq_u, vqaddq_s])
2211 (define_insn "mve_vqaddq_<supf><mode>"
2213 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2214 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2215 (match_operand:MVE_2 2 "s_register_operand" "w")]
2219 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2220 [(set_attr "type" "mve_move")
2226 (define_insn "mve_vqdmulhq_n_s<mode>"
2228 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2229 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2230 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2234 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
2235 [(set_attr "type" "mve_move")
2241 (define_insn "mve_vqdmulhq_s<mode>"
2243 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2244 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2245 (match_operand:MVE_2 2 "s_register_operand" "w")]
2249 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
2250 [(set_attr "type" "mve_move")
2256 (define_insn "mve_vqrdmulhq_n_s<mode>"
2258 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2259 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2260 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2264 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
2265 [(set_attr "type" "mve_move")
2271 (define_insn "mve_vqrdmulhq_s<mode>"
2273 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2274 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2275 (match_operand:MVE_2 2 "s_register_operand" "w")]
2279 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
2280 [(set_attr "type" "mve_move")
2284 ;; [vqrshlq_n_s, vqrshlq_n_u])
2286 (define_insn "mve_vqrshlq_n_<supf><mode>"
2288 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2289 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2290 (match_operand:SI 2 "s_register_operand" "r")]
2294 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
2295 [(set_attr "type" "mve_move")
2299 ;; [vqrshlq_s, vqrshlq_u])
2301 (define_insn "mve_vqrshlq_<supf><mode>"
2303 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2304 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2305 (match_operand:MVE_2 2 "s_register_operand" "w")]
2309 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2310 [(set_attr "type" "mve_move")
2314 ;; [vqshlq_n_s, vqshlq_n_u])
2316 (define_insn "mve_vqshlq_n_<supf><mode>"
2318 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2319 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2320 (match_operand:SI 2 "immediate_operand" "i")]
2324 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2325 [(set_attr "type" "mve_move")
2329 ;; [vqshlq_r_u, vqshlq_r_s])
2331 (define_insn "mve_vqshlq_r_<supf><mode>"
2333 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2334 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2335 (match_operand:SI 2 "s_register_operand" "r")]
2339 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
2340 [(set_attr "type" "mve_move")
2344 ;; [vqshlq_s, vqshlq_u])
2346 (define_insn "mve_vqshlq_<supf><mode>"
2348 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2349 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2350 (match_operand:MVE_2 2 "s_register_operand" "w")]
2354 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2355 [(set_attr "type" "mve_move")
2361 (define_insn "mve_vqshluq_n_s<mode>"
2363 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2364 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2365 (match_operand:SI 2 "mve_imm_7" "Ra")]
2369 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
2370 [(set_attr "type" "mve_move")
2374 ;; [vqsubq_n_s, vqsubq_n_u])
2376 (define_insn "mve_vqsubq_n_<supf><mode>"
2378 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2379 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2380 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2384 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2385 [(set_attr "type" "mve_move")
2389 ;; [vqsubq_u, vqsubq_s])
2391 (define_insn "mve_vqsubq_<supf><mode>"
2393 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2394 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2395 (match_operand:MVE_2 2 "s_register_operand" "w")]
2399 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2400 [(set_attr "type" "mve_move")
2404 ;; [vrhaddq_s, vrhaddq_u])
2406 (define_insn "mve_vrhaddq_<supf><mode>"
2408 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2409 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2410 (match_operand:MVE_2 2 "s_register_operand" "w")]
2414 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2415 [(set_attr "type" "mve_move")
2419 ;; [vrmulhq_s, vrmulhq_u])
2421 (define_insn "mve_vrmulhq_<supf><mode>"
2423 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2424 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2425 (match_operand:MVE_2 2 "s_register_operand" "w")]
2429 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2430 [(set_attr "type" "mve_move")
2434 ;; [vrshlq_n_u, vrshlq_n_s])
2436 (define_insn "mve_vrshlq_n_<supf><mode>"
2438 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2439 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2440 (match_operand:SI 2 "s_register_operand" "r")]
2444 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
2445 [(set_attr "type" "mve_move")
2449 ;; [vrshlq_s, vrshlq_u])
2451 (define_insn "mve_vrshlq_<supf><mode>"
2453 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2454 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2455 (match_operand:MVE_2 2 "s_register_operand" "w")]
2459 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2460 [(set_attr "type" "mve_move")
2464 ;; [vrshrq_n_s, vrshrq_n_u])
2466 (define_insn "mve_vrshrq_n_<supf><mode>"
2468 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2469 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2470 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
2474 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2475 [(set_attr "type" "mve_move")
2479 ;; [vshlq_n_u, vshlq_n_s])
2481 (define_insn "mve_vshlq_n_<supf><mode>"
2483 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2484 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2485 (match_operand:SI 2 "immediate_operand" "i")]
2489 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2490 [(set_attr "type" "mve_move")
2494 ;; [vshlq_r_s, vshlq_r_u])
2496 (define_insn "mve_vshlq_r_<supf><mode>"
2498 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2499 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2500 (match_operand:SI 2 "s_register_operand" "r")]
2504 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
2505 [(set_attr "type" "mve_move")
2509 ;; [vsubq_n_s, vsubq_n_u])
2511 (define_insn "mve_vsubq_n_<supf><mode>"
2513 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2514 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2515 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2519 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
2520 [(set_attr "type" "mve_move")
2524 ;; [vsubq_s, vsubq_u])
2526 (define_insn "mve_vsubq_<supf><mode>"
2528 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2529 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2530 (match_operand:MVE_2 2 "s_register_operand" "w")]
2534 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
2535 [(set_attr "type" "mve_move")
2541 (define_insn "mve_vabdq_f<mode>"
2543 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2544 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2545 (match_operand:MVE_0 2 "s_register_operand" "w")]
2548 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2549 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
2550 [(set_attr "type" "mve_move")
2554 ;; [vaddlvaq_s vaddlvaq_u])
2556 (define_insn "mve_vaddlvaq_<supf>v4si"
2558 (set (match_operand:DI 0 "s_register_operand" "=r")
2559 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2560 (match_operand:V4SI 2 "s_register_operand" "w")]
2564 "vaddlva.<supf>32 %Q0, %R0, %q2"
2565 [(set_attr "type" "mve_move")
2571 (define_insn "mve_vaddq_n_f<mode>"
2573 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2574 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2575 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2578 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2579 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
2580 [(set_attr "type" "mve_move")
2586 (define_insn "mve_vandq_f<mode>"
2588 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2589 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2590 (match_operand:MVE_0 2 "s_register_operand" "w")]
2593 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2594 "vand %q0, %q1, %q2"
2595 [(set_attr "type" "mve_move")
2601 (define_insn "mve_vbicq_f<mode>"
2603 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2604 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2605 (match_operand:MVE_0 2 "s_register_operand" "w")]
2608 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2609 "vbic %q0, %q1, %q2"
2610 [(set_attr "type" "mve_move")
2614 ;; [vbicq_n_s, vbicq_n_u])
2616 (define_insn "mve_vbicq_n_<supf><mode>"
2618 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2619 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2620 (match_operand:SI 2 "immediate_operand" "i")]
2624 "vbic.i%#<V_sz_elem> %q0, %2"
2625 [(set_attr "type" "mve_move")
2629 ;; [vcaddq_rot270_f])
2631 (define_insn "mve_vcaddq_rot270_f<mode>"
2633 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2634 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2635 (match_operand:MVE_0 2 "s_register_operand" "w")]
2638 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2639 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #270"
2640 [(set_attr "type" "mve_move")
2644 ;; [vcaddq_rot90_f])
2646 (define_insn "mve_vcaddq_rot90_f<mode>"
2648 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2649 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2650 (match_operand:MVE_0 2 "s_register_operand" "w")]
2653 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2654 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #90"
2655 [(set_attr "type" "mve_move")
2661 (define_insn "mve_vcmpeqq_f<mode>"
2663 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2664 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2665 (match_operand:MVE_0 2 "s_register_operand" "w")]
2668 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2669 "vcmp.f%#<V_sz_elem> eq, %q1, %q2"
2670 [(set_attr "type" "mve_move")
2676 (define_insn "mve_vcmpeqq_n_f<mode>"
2678 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2679 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2680 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2683 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2684 "vcmp.f%#<V_sz_elem> eq, %q1, %2"
2685 [(set_attr "type" "mve_move")
2691 (define_insn "mve_vcmpgeq_f<mode>"
2693 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2694 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2695 (match_operand:MVE_0 2 "s_register_operand" "w")]
2698 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2699 "vcmp.f%#<V_sz_elem> ge, %q1, %q2"
2700 [(set_attr "type" "mve_move")
2706 (define_insn "mve_vcmpgeq_n_f<mode>"
2708 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2709 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2710 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2713 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2714 "vcmp.f%#<V_sz_elem> ge, %q1, %2"
2715 [(set_attr "type" "mve_move")
2721 (define_insn "mve_vcmpgtq_f<mode>"
2723 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2724 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2725 (match_operand:MVE_0 2 "s_register_operand" "w")]
2728 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2729 "vcmp.f%#<V_sz_elem> gt, %q1, %q2"
2730 [(set_attr "type" "mve_move")
2736 (define_insn "mve_vcmpgtq_n_f<mode>"
2738 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2739 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2740 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2743 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2744 "vcmp.f%#<V_sz_elem> gt, %q1, %2"
2745 [(set_attr "type" "mve_move")
2751 (define_insn "mve_vcmpleq_f<mode>"
2753 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2754 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2755 (match_operand:MVE_0 2 "s_register_operand" "w")]
2758 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2759 "vcmp.f%#<V_sz_elem> le, %q1, %q2"
2760 [(set_attr "type" "mve_move")
2766 (define_insn "mve_vcmpleq_n_f<mode>"
2768 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2769 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2770 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2773 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2774 "vcmp.f%#<V_sz_elem> le, %q1, %2"
2775 [(set_attr "type" "mve_move")
2781 (define_insn "mve_vcmpltq_f<mode>"
2783 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2784 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2785 (match_operand:MVE_0 2 "s_register_operand" "w")]
2788 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2789 "vcmp.f%#<V_sz_elem> lt, %q1, %q2"
2790 [(set_attr "type" "mve_move")
2796 (define_insn "mve_vcmpltq_n_f<mode>"
2798 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2799 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2800 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2803 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2804 "vcmp.f%#<V_sz_elem> lt, %q1, %2"
2805 [(set_attr "type" "mve_move")
2811 (define_insn "mve_vcmpneq_f<mode>"
2813 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2814 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2815 (match_operand:MVE_0 2 "s_register_operand" "w")]
2818 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2819 "vcmp.f%#<V_sz_elem> ne, %q1, %q2"
2820 [(set_attr "type" "mve_move")
2826 (define_insn "mve_vcmpneq_n_f<mode>"
2828 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2829 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2830 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2833 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2834 "vcmp.f%#<V_sz_elem> ne, %q1, %2"
2835 [(set_attr "type" "mve_move")
2841 (define_insn "mve_vcmulq_f<mode>"
2843 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2844 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2845 (match_operand:MVE_0 2 "s_register_operand" "w")]
2848 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2849 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #0"
2850 [(set_attr "type" "mve_move")
2854 ;; [vcmulq_rot180_f])
2856 (define_insn "mve_vcmulq_rot180_f<mode>"
2858 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2859 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2860 (match_operand:MVE_0 2 "s_register_operand" "w")]
2863 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2864 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #180"
2865 [(set_attr "type" "mve_move")
2869 ;; [vcmulq_rot270_f])
2871 (define_insn "mve_vcmulq_rot270_f<mode>"
2873 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2874 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2875 (match_operand:MVE_0 2 "s_register_operand" "w")]
2878 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2879 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #270"
2880 [(set_attr "type" "mve_move")
2884 ;; [vcmulq_rot90_f])
2886 (define_insn "mve_vcmulq_rot90_f<mode>"
2888 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2889 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2890 (match_operand:MVE_0 2 "s_register_operand" "w")]
2893 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2894 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #90"
2895 [(set_attr "type" "mve_move")
2899 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
2901 (define_insn "mve_vctp<mode1>q_mhi"
2903 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2904 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
2905 (match_operand:HI 2 "vpr_register_operand" "Up")]
2909 "vpst\;vctpt.<mode1> %1"
2910 [(set_attr "type" "mve_move")
2911 (set_attr "length""8")])
2914 ;; [vcvtbq_f16_f32])
2916 (define_insn "mve_vcvtbq_f16_f32v8hf"
2918 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2919 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2920 (match_operand:V4SF 2 "s_register_operand" "w")]
2923 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2924 "vcvtb.f16.f32 %q0, %q2"
2925 [(set_attr "type" "mve_move")
2929 ;; [vcvttq_f16_f32])
2931 (define_insn "mve_vcvttq_f16_f32v8hf"
2933 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2934 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2935 (match_operand:V4SF 2 "s_register_operand" "w")]
2938 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2939 "vcvtt.f16.f32 %q0, %q2"
2940 [(set_attr "type" "mve_move")
2946 (define_insn "mve_veorq_f<mode>"
2948 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2949 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2950 (match_operand:MVE_0 2 "s_register_operand" "w")]
2953 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2954 "veor %q0, %q1, %q2"
2955 [(set_attr "type" "mve_move")
2961 (define_insn "mve_vmaxnmaq_f<mode>"
2963 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2964 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
2965 (match_operand:MVE_0 2 "s_register_operand" "w")]
2968 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2969 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
2970 [(set_attr "type" "mve_move")
2976 (define_insn "mve_vmaxnmavq_f<mode>"
2978 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2979 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2980 (match_operand:MVE_0 2 "s_register_operand" "w")]
2983 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2984 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
2985 [(set_attr "type" "mve_move")
2991 (define_insn "mve_vmaxnmq_f<mode>"
2993 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2994 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2995 (match_operand:MVE_0 2 "s_register_operand" "w")]
2998 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2999 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
3000 [(set_attr "type" "mve_move")
3006 (define_insn "mve_vmaxnmvq_f<mode>"
3008 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3009 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3010 (match_operand:MVE_0 2 "s_register_operand" "w")]
3013 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3014 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
3015 [(set_attr "type" "mve_move")
3021 (define_insn "mve_vminnmaq_f<mode>"
3023 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3024 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3025 (match_operand:MVE_0 2 "s_register_operand" "w")]
3028 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3029 "vminnma.f%#<V_sz_elem> %q0, %q2"
3030 [(set_attr "type" "mve_move")
3036 (define_insn "mve_vminnmavq_f<mode>"
3038 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3039 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3040 (match_operand:MVE_0 2 "s_register_operand" "w")]
3043 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3044 "vminnmav.f%#<V_sz_elem> %0, %q2"
3045 [(set_attr "type" "mve_move")
3051 (define_insn "mve_vminnmq_f<mode>"
3053 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3054 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3055 (match_operand:MVE_0 2 "s_register_operand" "w")]
3058 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3059 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
3060 [(set_attr "type" "mve_move")
3066 (define_insn "mve_vminnmvq_f<mode>"
3068 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3069 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3070 (match_operand:MVE_0 2 "s_register_operand" "w")]
3073 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3074 "vminnmv.f%#<V_sz_elem> %0, %q2"
3075 [(set_attr "type" "mve_move")
3079 ;; [vmlaldavq_u, vmlaldavq_s])
3081 (define_insn "mve_vmlaldavq_<supf><mode>"
3083 (set (match_operand:DI 0 "s_register_operand" "=r")
3084 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
3085 (match_operand:MVE_5 2 "s_register_operand" "w")]
3089 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
3090 [(set_attr "type" "mve_move")
3096 (define_insn "mve_vmlaldavxq_s<mode>"
3098 (set (match_operand:DI 0 "s_register_operand" "=r")
3099 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
3100 (match_operand:MVE_5 2 "s_register_operand" "w")]
3104 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
3105 [(set_attr "type" "mve_move")
3111 (define_insn "mve_vmlsldavq_s<mode>"
3113 (set (match_operand:DI 0 "s_register_operand" "=r")
3114 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
3115 (match_operand:MVE_5 2 "s_register_operand" "w")]
3119 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
3120 [(set_attr "type" "mve_move")
3126 (define_insn "mve_vmlsldavxq_s<mode>"
3128 (set (match_operand:DI 0 "s_register_operand" "=r")
3129 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
3130 (match_operand:MVE_5 2 "s_register_operand" "w")]
3134 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
3135 [(set_attr "type" "mve_move")
3139 ;; [vmovnbq_u, vmovnbq_s])
3141 (define_insn "mve_vmovnbq_<supf><mode>"
3143 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3144 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3145 (match_operand:MVE_5 2 "s_register_operand" "w")]
3149 "vmovnb.i%#<V_sz_elem> %q0, %q2"
3150 [(set_attr "type" "mve_move")
3154 ;; [vmovntq_s, vmovntq_u])
3156 (define_insn "mve_vmovntq_<supf><mode>"
3158 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3159 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3160 (match_operand:MVE_5 2 "s_register_operand" "w")]
3164 "vmovnt.i%#<V_sz_elem> %q0, %q2"
3165 [(set_attr "type" "mve_move")
3171 (define_insn "mve_vmulq_f<mode>"
3173 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3174 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3175 (match_operand:MVE_0 2 "s_register_operand" "w")]
3178 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3179 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
3180 [(set_attr "type" "mve_move")
3186 (define_insn "mve_vmulq_n_f<mode>"
3188 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3189 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3190 (match_operand:<V_elem> 2 "s_register_operand" "r")]
3193 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3194 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
3195 [(set_attr "type" "mve_move")
3201 (define_insn "mve_vornq_f<mode>"
3203 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3204 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3205 (match_operand:MVE_0 2 "s_register_operand" "w")]
3208 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3209 "vorn %q0, %q1, %q2"
3210 [(set_attr "type" "mve_move")
3216 (define_insn "mve_vorrq_f<mode>"
3218 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3219 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3220 (match_operand:MVE_0 2 "s_register_operand" "w")]
3223 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3224 "vorr %q0, %q1, %q2"
3225 [(set_attr "type" "mve_move")
3229 ;; [vorrq_n_u, vorrq_n_s])
3231 (define_insn "mve_vorrq_n_<supf><mode>"
3233 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
3234 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
3235 (match_operand:SI 2 "immediate_operand" "i")]
3239 "vorr.i%#<V_sz_elem> %q0, %2"
3240 [(set_attr "type" "mve_move")
3246 (define_insn "mve_vqdmullbq_n_s<mode>"
3248 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
3249 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3250 (match_operand:<V_elem> 2 "s_register_operand" "r")]
3254 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
3255 [(set_attr "type" "mve_move")
3261 (define_insn "mve_vqdmullbq_s<mode>"
3263 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
3264 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3265 (match_operand:MVE_5 2 "s_register_operand" "w")]
3269 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
3270 [(set_attr "type" "mve_move")
3276 (define_insn "mve_vqdmulltq_n_s<mode>"
3278 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
3279 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3280 (match_operand:<V_elem> 2 "s_register_operand" "r")]
3284 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
3285 [(set_attr "type" "mve_move")
3291 (define_insn "mve_vqdmulltq_s<mode>"
3293 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
3294 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3295 (match_operand:MVE_5 2 "s_register_operand" "w")]
3299 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
3300 [(set_attr "type" "mve_move")
3304 ;; [vqmovnbq_u, vqmovnbq_s])
3306 (define_insn "mve_vqmovnbq_<supf><mode>"
3308 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3309 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3310 (match_operand:MVE_5 2 "s_register_operand" "w")]
3314 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
3315 [(set_attr "type" "mve_move")
3319 ;; [vqmovntq_u, vqmovntq_s])
3321 (define_insn "mve_vqmovntq_<supf><mode>"
3323 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3324 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3325 (match_operand:MVE_5 2 "s_register_operand" "w")]
3329 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
3330 [(set_attr "type" "mve_move")
3336 (define_insn "mve_vqmovunbq_s<mode>"
3338 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3339 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3340 (match_operand:MVE_5 2 "s_register_operand" "w")]
3344 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
3345 [(set_attr "type" "mve_move")
3351 (define_insn "mve_vqmovuntq_s<mode>"
3353 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3354 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3355 (match_operand:MVE_5 2 "s_register_operand" "w")]
3359 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
3360 [(set_attr "type" "mve_move")
3364 ;; [vrmlaldavhxq_s])
3366 (define_insn "mve_vrmlaldavhxq_sv4si"
3368 (set (match_operand:DI 0 "s_register_operand" "=r")
3369 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3370 (match_operand:V4SI 2 "s_register_operand" "w")]
3374 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
3375 [(set_attr "type" "mve_move")
3381 (define_insn "mve_vrmlsldavhq_sv4si"
3383 (set (match_operand:DI 0 "s_register_operand" "=r")
3384 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3385 (match_operand:V4SI 2 "s_register_operand" "w")]
3389 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
3390 [(set_attr "type" "mve_move")
3394 ;; [vrmlsldavhxq_s])
3396 (define_insn "mve_vrmlsldavhxq_sv4si"
3398 (set (match_operand:DI 0 "s_register_operand" "=r")
3399 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3400 (match_operand:V4SI 2 "s_register_operand" "w")]
3404 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
3405 [(set_attr "type" "mve_move")
3409 ;; [vshllbq_n_s, vshllbq_n_u])
3411 (define_insn "mve_vshllbq_n_<supf><mode>"
3413 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3414 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3415 (match_operand:SI 2 "immediate_operand" "i")]
3419 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
3420 [(set_attr "type" "mve_move")
3424 ;; [vshlltq_n_u, vshlltq_n_s])
3426 (define_insn "mve_vshlltq_n_<supf><mode>"
3428 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3429 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3430 (match_operand:SI 2 "immediate_operand" "i")]
3434 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
3435 [(set_attr "type" "mve_move")
3441 (define_insn "mve_vsubq_f<mode>"
3443 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3444 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3445 (match_operand:MVE_0 2 "s_register_operand" "w")]
3448 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3449 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
3450 [(set_attr "type" "mve_move")
3454 ;; [vmulltq_poly_p])
3456 (define_insn "mve_vmulltq_poly_p<mode>"
3458 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3459 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3460 (match_operand:MVE_3 2 "s_register_operand" "w")]
3464 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
3465 [(set_attr "type" "mve_move")
3469 ;; [vmullbq_poly_p])
3471 (define_insn "mve_vmullbq_poly_p<mode>"
3473 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3474 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3475 (match_operand:MVE_3 2 "s_register_operand" "w")]
3479 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
3480 [(set_attr "type" "mve_move")
3484 ;; [vrmlaldavhq_u vrmlaldavhq_s])
3486 (define_insn "mve_vrmlaldavhq_<supf>v4si"
3488 (set (match_operand:DI 0 "s_register_operand" "=r")
3489 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3490 (match_operand:V4SI 2 "s_register_operand" "w")]
3494 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
3495 [(set_attr "type" "mve_move")
3499 ;; [vbicq_m_n_s, vbicq_m_n_u])
3501 (define_insn "mve_vbicq_m_n_<supf><mode>"
3503 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
3504 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
3505 (match_operand:SI 2 "immediate_operand" "i")
3506 (match_operand:HI 3 "vpr_register_operand" "Up")]
3510 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
3511 [(set_attr "type" "mve_move")
3512 (set_attr "length""8")])
3516 (define_insn "mve_vcmpeqq_m_f<mode>"
3518 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3519 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3520 (match_operand:MVE_0 2 "s_register_operand" "w")
3521 (match_operand:HI 3 "vpr_register_operand" "Up")]
3524 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3525 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
3526 [(set_attr "type" "mve_move")
3527 (set_attr "length""8")])
3529 ;; [vcvtaq_m_u, vcvtaq_m_s])
3531 (define_insn "mve_vcvtaq_m_<supf><mode>"
3533 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
3534 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
3535 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
3536 (match_operand:HI 3 "vpr_register_operand" "Up")]
3539 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3540 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
3541 [(set_attr "type" "mve_move")
3542 (set_attr "length""8")])
3544 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
3546 (define_insn "mve_vcvtq_m_to_f_<supf><mode>"
3548 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3549 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3550 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
3551 (match_operand:HI 3 "vpr_register_operand" "Up")]
3554 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3555 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
3556 [(set_attr "type" "mve_move")
3557 (set_attr "length""8")])
3559 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
3561 (define_insn "mve_vqrshrnbq_n_<supf><mode>"
3563 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3564 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3565 (match_operand:MVE_5 2 "s_register_operand" "w")
3566 (match_operand:SI 3 "mve_imm_8" "Rb")]
3570 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
3571 [(set_attr "type" "mve_move")
3574 ;; [vqrshrunbq_n_s])
3576 (define_insn "mve_vqrshrunbq_n_s<mode>"
3578 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3579 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3580 (match_operand:MVE_5 2 "s_register_operand" "w")
3581 (match_operand:SI 3 "mve_imm_8" "Rb")]
3585 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
3586 [(set_attr "type" "mve_move")
3589 ;; [vrmlaldavhaq_s vrmlaldavhaq_u])
3591 (define_insn "mve_vrmlaldavhaq_<supf>v4si"
3593 (set (match_operand:DI 0 "s_register_operand" "=r")
3594 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
3595 (match_operand:V4SI 2 "s_register_operand" "w")
3596 (match_operand:V4SI 3 "s_register_operand" "w")]
3600 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
3601 [(set_attr "type" "mve_move")
3605 ;; [vabavq_s, vabavq_u])
3607 (define_insn "mve_vabavq_<supf><mode>"
3609 (set (match_operand:SI 0 "s_register_operand" "=r")
3610 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3611 (match_operand:MVE_2 2 "s_register_operand" "w")
3612 (match_operand:MVE_2 3 "s_register_operand" "w")]
3616 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
3617 [(set_attr "type" "mve_move")
3621 ;; [vshlcq_u vshlcq_s]
3623 (define_expand "mve_vshlcq_vec_<supf><mode>"
3624 [(match_operand:MVE_2 0 "s_register_operand")
3625 (match_operand:MVE_2 1 "s_register_operand")
3626 (match_operand:SI 2 "s_register_operand")
3627 (match_operand:SI 3 "mve_imm_32")
3628 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3631 rtx ignore_wb = gen_reg_rtx (SImode);
3632 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
3633 operands[2], operands[3]));
3637 (define_expand "mve_vshlcq_carry_<supf><mode>"
3638 [(match_operand:SI 0 "s_register_operand")
3639 (match_operand:MVE_2 1 "s_register_operand")
3640 (match_operand:SI 2 "s_register_operand")
3641 (match_operand:SI 3 "mve_imm_32")
3642 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3645 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
3646 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
3647 operands[2], operands[3]));
3651 (define_insn "mve_vshlcq_<supf><mode>"
3652 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
3653 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
3654 (match_operand:SI 3 "s_register_operand" "1")
3655 (match_operand:SI 4 "mve_imm_32" "Rf")]
3657 (set (match_operand:SI 1 "s_register_operand" "=r")
3658 (unspec:SI [(match_dup 2)
3663 "vshlc %q0, %1, %4")
3668 (define_insn "mve_vabsq_m_s<mode>"
3670 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3671 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3672 (match_operand:MVE_2 2 "s_register_operand" "w")
3673 (match_operand:HI 3 "vpr_register_operand" "Up")]
3677 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
3678 [(set_attr "type" "mve_move")
3679 (set_attr "length""8")])
3682 ;; [vaddvaq_p_u, vaddvaq_p_s])
3684 (define_insn "mve_vaddvaq_p_<supf><mode>"
3686 (set (match_operand:SI 0 "s_register_operand" "=e")
3687 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3688 (match_operand:MVE_2 2 "s_register_operand" "w")
3689 (match_operand:HI 3 "vpr_register_operand" "Up")]
3693 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
3694 [(set_attr "type" "mve_move")
3695 (set_attr "length""8")])
3700 (define_insn "mve_vclsq_m_s<mode>"
3702 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3703 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3704 (match_operand:MVE_2 2 "s_register_operand" "w")
3705 (match_operand:HI 3 "vpr_register_operand" "Up")]
3709 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
3710 [(set_attr "type" "mve_move")
3711 (set_attr "length""8")])
3714 ;; [vclzq_m_s, vclzq_m_u])
3716 (define_insn "mve_vclzq_m_<supf><mode>"
3718 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3719 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3720 (match_operand:MVE_2 2 "s_register_operand" "w")
3721 (match_operand:HI 3 "vpr_register_operand" "Up")]
3725 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
3726 [(set_attr "type" "mve_move")
3727 (set_attr "length""8")])
3732 (define_insn "mve_vcmpcsq_m_n_u<mode>"
3734 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3735 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3736 (match_operand:<V_elem> 2 "s_register_operand" "r")
3737 (match_operand:HI 3 "vpr_register_operand" "Up")]
3741 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
3742 [(set_attr "type" "mve_move")
3743 (set_attr "length""8")])
3748 (define_insn "mve_vcmpcsq_m_u<mode>"
3750 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3751 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3752 (match_operand:MVE_2 2 "s_register_operand" "w")
3753 (match_operand:HI 3 "vpr_register_operand" "Up")]
3757 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
3758 [(set_attr "type" "mve_move")
3759 (set_attr "length""8")])
3762 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
3764 (define_insn "mve_vcmpeqq_m_n_<supf><mode>"
3766 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3767 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3768 (match_operand:<V_elem> 2 "s_register_operand" "r")
3769 (match_operand:HI 3 "vpr_register_operand" "Up")]
3773 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
3774 [(set_attr "type" "mve_move")
3775 (set_attr "length""8")])
3778 ;; [vcmpeqq_m_u, vcmpeqq_m_s])
3780 (define_insn "mve_vcmpeqq_m_<supf><mode>"
3782 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3783 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3784 (match_operand:MVE_2 2 "s_register_operand" "w")
3785 (match_operand:HI 3 "vpr_register_operand" "Up")]
3789 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
3790 [(set_attr "type" "mve_move")
3791 (set_attr "length""8")])
3796 (define_insn "mve_vcmpgeq_m_n_s<mode>"
3798 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3799 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3800 (match_operand:<V_elem> 2 "s_register_operand" "r")
3801 (match_operand:HI 3 "vpr_register_operand" "Up")]
3805 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
3806 [(set_attr "type" "mve_move")
3807 (set_attr "length""8")])
3812 (define_insn "mve_vcmpgeq_m_s<mode>"
3814 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3815 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3816 (match_operand:MVE_2 2 "s_register_operand" "w")
3817 (match_operand:HI 3 "vpr_register_operand" "Up")]
3821 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
3822 [(set_attr "type" "mve_move")
3823 (set_attr "length""8")])
3828 (define_insn "mve_vcmpgtq_m_n_s<mode>"
3830 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3831 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3832 (match_operand:<V_elem> 2 "s_register_operand" "r")
3833 (match_operand:HI 3 "vpr_register_operand" "Up")]
3837 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
3838 [(set_attr "type" "mve_move")
3839 (set_attr "length""8")])
3844 (define_insn "mve_vcmpgtq_m_s<mode>"
3846 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3847 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3848 (match_operand:MVE_2 2 "s_register_operand" "w")
3849 (match_operand:HI 3 "vpr_register_operand" "Up")]
3853 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
3854 [(set_attr "type" "mve_move")
3855 (set_attr "length""8")])
3860 (define_insn "mve_vcmphiq_m_n_u<mode>"
3862 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3863 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3864 (match_operand:<V_elem> 2 "s_register_operand" "r")
3865 (match_operand:HI 3 "vpr_register_operand" "Up")]
3869 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
3870 [(set_attr "type" "mve_move")
3871 (set_attr "length""8")])
3876 (define_insn "mve_vcmphiq_m_u<mode>"
3878 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3879 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3880 (match_operand:MVE_2 2 "s_register_operand" "w")
3881 (match_operand:HI 3 "vpr_register_operand" "Up")]
3885 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
3886 [(set_attr "type" "mve_move")
3887 (set_attr "length""8")])
3892 (define_insn "mve_vcmpleq_m_n_s<mode>"
3894 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3895 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3896 (match_operand:<V_elem> 2 "s_register_operand" "r")
3897 (match_operand:HI 3 "vpr_register_operand" "Up")]
3901 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
3902 [(set_attr "type" "mve_move")
3903 (set_attr "length""8")])
3908 (define_insn "mve_vcmpleq_m_s<mode>"
3910 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3911 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3912 (match_operand:MVE_2 2 "s_register_operand" "w")
3913 (match_operand:HI 3 "vpr_register_operand" "Up")]
3917 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
3918 [(set_attr "type" "mve_move")
3919 (set_attr "length""8")])
3924 (define_insn "mve_vcmpltq_m_n_s<mode>"
3926 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3927 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3928 (match_operand:<V_elem> 2 "s_register_operand" "r")
3929 (match_operand:HI 3 "vpr_register_operand" "Up")]
3933 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
3934 [(set_attr "type" "mve_move")
3935 (set_attr "length""8")])
3940 (define_insn "mve_vcmpltq_m_s<mode>"
3942 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3943 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3944 (match_operand:MVE_2 2 "s_register_operand" "w")
3945 (match_operand:HI 3 "vpr_register_operand" "Up")]
3949 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
3950 [(set_attr "type" "mve_move")
3951 (set_attr "length""8")])
3954 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3956 (define_insn "mve_vcmpneq_m_n_<supf><mode>"
3958 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3959 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3960 (match_operand:<V_elem> 2 "s_register_operand" "r")
3961 (match_operand:HI 3 "vpr_register_operand" "Up")]
3965 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
3966 [(set_attr "type" "mve_move")
3967 (set_attr "length""8")])
3970 ;; [vcmpneq_m_s, vcmpneq_m_u])
3972 (define_insn "mve_vcmpneq_m_<supf><mode>"
3974 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3975 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3976 (match_operand:MVE_2 2 "s_register_operand" "w")
3977 (match_operand:HI 3 "vpr_register_operand" "Up")]
3981 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
3982 [(set_attr "type" "mve_move")
3983 (set_attr "length""8")])
3986 ;; [vdupq_m_n_s, vdupq_m_n_u])
3988 (define_insn "mve_vdupq_m_n_<supf><mode>"
3990 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3991 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3992 (match_operand:<V_elem> 2 "s_register_operand" "r")
3993 (match_operand:HI 3 "vpr_register_operand" "Up")]
3997 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
3998 [(set_attr "type" "mve_move")
3999 (set_attr "length""8")])
4004 (define_insn "mve_vmaxaq_m_s<mode>"
4006 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4007 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4008 (match_operand:MVE_2 2 "s_register_operand" "w")
4009 (match_operand:HI 3 "vpr_register_operand" "Up")]
4013 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
4014 [(set_attr "type" "mve_move")
4015 (set_attr "length""8")])
4020 (define_insn "mve_vmaxavq_p_s<mode>"
4022 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4023 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4024 (match_operand:MVE_2 2 "s_register_operand" "w")
4025 (match_operand:HI 3 "vpr_register_operand" "Up")]
4029 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
4030 [(set_attr "type" "mve_move")
4031 (set_attr "length""8")])
4034 ;; [vmaxvq_p_u, vmaxvq_p_s])
4036 (define_insn "mve_vmaxvq_p_<supf><mode>"
4038 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4039 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4040 (match_operand:MVE_2 2 "s_register_operand" "w")
4041 (match_operand:HI 3 "vpr_register_operand" "Up")]
4045 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
4046 [(set_attr "type" "mve_move")
4047 (set_attr "length""8")])
4052 (define_insn "mve_vminaq_m_s<mode>"
4054 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4055 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4056 (match_operand:MVE_2 2 "s_register_operand" "w")
4057 (match_operand:HI 3 "vpr_register_operand" "Up")]
4061 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
4062 [(set_attr "type" "mve_move")
4063 (set_attr "length""8")])
4068 (define_insn "mve_vminavq_p_s<mode>"
4070 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4071 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4072 (match_operand:MVE_2 2 "s_register_operand" "w")
4073 (match_operand:HI 3 "vpr_register_operand" "Up")]
4077 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
4078 [(set_attr "type" "mve_move")
4079 (set_attr "length""8")])
4082 ;; [vminvq_p_s, vminvq_p_u])
4084 (define_insn "mve_vminvq_p_<supf><mode>"
4086 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4087 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4088 (match_operand:MVE_2 2 "s_register_operand" "w")
4089 (match_operand:HI 3 "vpr_register_operand" "Up")]
4093 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
4094 [(set_attr "type" "mve_move")
4095 (set_attr "length""8")])
4098 ;; [vmladavaq_u, vmladavaq_s])
4100 (define_insn "mve_vmladavaq_<supf><mode>"
4102 (set (match_operand:SI 0 "s_register_operand" "=e")
4103 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4104 (match_operand:MVE_2 2 "s_register_operand" "w")
4105 (match_operand:MVE_2 3 "s_register_operand" "w")]
4109 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
4110 [(set_attr "type" "mve_move")
4114 ;; [vmladavq_p_u, vmladavq_p_s])
4116 (define_insn "mve_vmladavq_p_<supf><mode>"
4118 (set (match_operand:SI 0 "s_register_operand" "=e")
4119 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
4120 (match_operand:MVE_2 2 "s_register_operand" "w")
4121 (match_operand:HI 3 "vpr_register_operand" "Up")]
4125 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
4126 [(set_attr "type" "mve_move")
4127 (set_attr "length""8")])
4132 (define_insn "mve_vmladavxq_p_s<mode>"
4134 (set (match_operand:SI 0 "s_register_operand" "=e")
4135 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
4136 (match_operand:MVE_2 2 "s_register_operand" "w")
4137 (match_operand:HI 3 "vpr_register_operand" "Up")]
4141 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
4142 [(set_attr "type" "mve_move")
4143 (set_attr "length""8")])
4146 ;; [vmlaq_n_u, vmlaq_n_s])
4148 (define_insn "mve_vmlaq_n_<supf><mode>"
4150 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4151 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4152 (match_operand:MVE_2 2 "s_register_operand" "w")
4153 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4157 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4158 [(set_attr "type" "mve_move")
4162 ;; [vmlasq_n_u, vmlasq_n_s])
4164 (define_insn "mve_vmlasq_n_<supf><mode>"
4166 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4167 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4168 (match_operand:MVE_2 2 "s_register_operand" "w")
4169 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4173 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
4174 [(set_attr "type" "mve_move")
4180 (define_insn "mve_vmlsdavq_p_s<mode>"
4182 (set (match_operand:SI 0 "s_register_operand" "=e")
4183 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
4184 (match_operand:MVE_2 2 "s_register_operand" "w")
4185 (match_operand:HI 3 "vpr_register_operand" "Up")]
4189 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
4190 [(set_attr "type" "mve_move")
4191 (set_attr "length""8")])
4196 (define_insn "mve_vmlsdavxq_p_s<mode>"
4198 (set (match_operand:SI 0 "s_register_operand" "=e")
4199 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
4200 (match_operand:MVE_2 2 "s_register_operand" "w")
4201 (match_operand:HI 3 "vpr_register_operand" "Up")]
4205 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
4206 [(set_attr "type" "mve_move")
4207 (set_attr "length""8")])
4210 ;; [vmvnq_m_s, vmvnq_m_u])
4212 (define_insn "mve_vmvnq_m_<supf><mode>"
4214 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4215 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4216 (match_operand:MVE_2 2 "s_register_operand" "w")
4217 (match_operand:HI 3 "vpr_register_operand" "Up")]
4221 "vpst\;vmvnt %q0, %q2"
4222 [(set_attr "type" "mve_move")
4223 (set_attr "length""8")])
4228 (define_insn "mve_vnegq_m_s<mode>"
4230 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4231 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4232 (match_operand:MVE_2 2 "s_register_operand" "w")
4233 (match_operand:HI 3 "vpr_register_operand" "Up")]
4237 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
4238 [(set_attr "type" "mve_move")
4239 (set_attr "length""8")])
4242 ;; [vpselq_u, vpselq_s])
4244 (define_insn "mve_vpselq_<supf><mode>"
4246 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
4247 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
4248 (match_operand:MVE_1 2 "s_register_operand" "w")
4249 (match_operand:HI 3 "vpr_register_operand" "Up")]
4253 "vpsel %q0, %q1, %q2"
4254 [(set_attr "type" "mve_move")
4260 (define_insn "mve_vqabsq_m_s<mode>"
4262 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4263 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4264 (match_operand:MVE_2 2 "s_register_operand" "w")
4265 (match_operand:HI 3 "vpr_register_operand" "Up")]
4269 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
4270 [(set_attr "type" "mve_move")
4271 (set_attr "length""8")])
4274 ;; [vqdmlahq_n_s, vqdmlahq_n_u])
4276 (define_insn "mve_vqdmlahq_n_<supf><mode>"
4278 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4279 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4280 (match_operand:MVE_2 2 "s_register_operand" "w")
4281 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4285 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
4286 [(set_attr "type" "mve_move")
4292 (define_insn "mve_vqnegq_m_s<mode>"
4294 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4295 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4296 (match_operand:MVE_2 2 "s_register_operand" "w")
4297 (match_operand:HI 3 "vpr_register_operand" "Up")]
4301 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
4302 [(set_attr "type" "mve_move")
4303 (set_attr "length""8")])
4308 (define_insn "mve_vqrdmladhq_s<mode>"
4310 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4311 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4312 (match_operand:MVE_2 2 "s_register_operand" "w")
4313 (match_operand:MVE_2 3 "s_register_operand" "w")]
4317 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4318 [(set_attr "type" "mve_move")
4324 (define_insn "mve_vqrdmladhxq_s<mode>"
4326 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4327 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4328 (match_operand:MVE_2 2 "s_register_operand" "w")
4329 (match_operand:MVE_2 3 "s_register_operand" "w")]
4333 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4334 [(set_attr "type" "mve_move")
4338 ;; [vqrdmlahq_n_s, vqrdmlahq_n_u])
4340 (define_insn "mve_vqrdmlahq_n_<supf><mode>"
4342 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4343 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4344 (match_operand:MVE_2 2 "s_register_operand" "w")
4345 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4349 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
4350 [(set_attr "type" "mve_move")
4354 ;; [vqrdmlashq_n_s, vqrdmlashq_n_u])
4356 (define_insn "mve_vqrdmlashq_n_<supf><mode>"
4358 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4359 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4360 (match_operand:MVE_2 2 "s_register_operand" "w")
4361 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4365 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
4366 [(set_attr "type" "mve_move")
4372 (define_insn "mve_vqrdmlsdhq_s<mode>"
4374 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4375 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4376 (match_operand:MVE_2 2 "s_register_operand" "w")
4377 (match_operand:MVE_2 3 "s_register_operand" "w")]
4381 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4382 [(set_attr "type" "mve_move")
4388 (define_insn "mve_vqrdmlsdhxq_s<mode>"
4390 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4391 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4392 (match_operand:MVE_2 2 "s_register_operand" "w")
4393 (match_operand:MVE_2 3 "s_register_operand" "w")]
4397 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4398 [(set_attr "type" "mve_move")
4402 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
4404 (define_insn "mve_vqrshlq_m_n_<supf><mode>"
4406 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4407 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4408 (match_operand:SI 2 "s_register_operand" "r")
4409 (match_operand:HI 3 "vpr_register_operand" "Up")]
4413 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
4414 [(set_attr "type" "mve_move")
4415 (set_attr "length""8")])
4418 ;; [vqshlq_m_r_u, vqshlq_m_r_s])
4420 (define_insn "mve_vqshlq_m_r_<supf><mode>"
4422 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4423 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4424 (match_operand:SI 2 "s_register_operand" "r")
4425 (match_operand:HI 3 "vpr_register_operand" "Up")]
4429 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
4430 [(set_attr "type" "mve_move")
4431 (set_attr "length""8")])
4434 ;; [vrev64q_m_u, vrev64q_m_s])
4436 (define_insn "mve_vrev64q_m_<supf><mode>"
4438 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4439 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4440 (match_operand:MVE_2 2 "s_register_operand" "w")
4441 (match_operand:HI 3 "vpr_register_operand" "Up")]
4445 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
4446 [(set_attr "type" "mve_move")
4447 (set_attr "length""8")])
4450 ;; [vrshlq_m_n_s, vrshlq_m_n_u])
4452 (define_insn "mve_vrshlq_m_n_<supf><mode>"
4454 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4455 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4456 (match_operand:SI 2 "s_register_operand" "r")
4457 (match_operand:HI 3 "vpr_register_operand" "Up")]
4461 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
4462 [(set_attr "type" "mve_move")
4463 (set_attr "length""8")])
4466 ;; [vshlq_m_r_u, vshlq_m_r_s])
4468 (define_insn "mve_vshlq_m_r_<supf><mode>"
4470 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4471 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4472 (match_operand:SI 2 "s_register_operand" "r")
4473 (match_operand:HI 3 "vpr_register_operand" "Up")]
4477 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
4478 [(set_attr "type" "mve_move")
4479 (set_attr "length""8")])
4482 ;; [vsliq_n_u, vsliq_n_s])
4484 (define_insn "mve_vsliq_n_<supf><mode>"
4486 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4487 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4488 (match_operand:MVE_2 2 "s_register_operand" "w")
4489 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
4493 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
4494 [(set_attr "type" "mve_move")
4498 ;; [vsriq_n_u, vsriq_n_s])
4500 (define_insn "mve_vsriq_n_<supf><mode>"
4502 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4503 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4504 (match_operand:MVE_2 2 "s_register_operand" "w")
4505 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
4509 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
4510 [(set_attr "type" "mve_move")
4516 (define_insn "mve_vqdmlsdhxq_s<mode>"
4518 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4519 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4520 (match_operand:MVE_2 2 "s_register_operand" "w")
4521 (match_operand:MVE_2 3 "s_register_operand" "w")]
4525 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4526 [(set_attr "type" "mve_move")
4532 (define_insn "mve_vqdmlsdhq_s<mode>"
4534 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4535 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4536 (match_operand:MVE_2 2 "s_register_operand" "w")
4537 (match_operand:MVE_2 3 "s_register_operand" "w")]
4541 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4542 [(set_attr "type" "mve_move")
4548 (define_insn "mve_vqdmladhxq_s<mode>"
4550 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4551 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4552 (match_operand:MVE_2 2 "s_register_operand" "w")
4553 (match_operand:MVE_2 3 "s_register_operand" "w")]
4557 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4558 [(set_attr "type" "mve_move")
4564 (define_insn "mve_vqdmladhq_s<mode>"
4566 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4567 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4568 (match_operand:MVE_2 2 "s_register_operand" "w")
4569 (match_operand:MVE_2 3 "s_register_operand" "w")]
4573 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4574 [(set_attr "type" "mve_move")
4580 (define_insn "mve_vmlsdavaxq_s<mode>"
4582 (set (match_operand:SI 0 "s_register_operand" "=e")
4583 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4584 (match_operand:MVE_2 2 "s_register_operand" "w")
4585 (match_operand:MVE_2 3 "s_register_operand" "w")]
4589 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4590 [(set_attr "type" "mve_move")
4596 (define_insn "mve_vmlsdavaq_s<mode>"
4598 (set (match_operand:SI 0 "s_register_operand" "=e")
4599 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4600 (match_operand:MVE_2 2 "s_register_operand" "w")
4601 (match_operand:MVE_2 3 "s_register_operand" "w")]
4605 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
4606 [(set_attr "type" "mve_move")
4612 (define_insn "mve_vmladavaxq_s<mode>"
4614 (set (match_operand:SI 0 "s_register_operand" "=e")
4615 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4616 (match_operand:MVE_2 2 "s_register_operand" "w")
4617 (match_operand:MVE_2 3 "s_register_operand" "w")]
4621 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4622 [(set_attr "type" "mve_move")
4627 (define_insn "mve_vabsq_m_f<mode>"
4629 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4630 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4631 (match_operand:MVE_0 2 "s_register_operand" "w")
4632 (match_operand:HI 3 "vpr_register_operand" "Up")]
4635 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4636 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
4637 [(set_attr "type" "mve_move")
4638 (set_attr "length""8")])
4641 ;; [vaddlvaq_p_s vaddlvaq_p_u])
4643 (define_insn "mve_vaddlvaq_p_<supf>v4si"
4645 (set (match_operand:DI 0 "s_register_operand" "=r")
4646 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4647 (match_operand:V4SI 2 "s_register_operand" "w")
4648 (match_operand:HI 3 "vpr_register_operand" "Up")]
4652 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
4653 [(set_attr "type" "mve_move")
4654 (set_attr "length""8")])
4658 (define_insn "mve_vcmlaq_f<mode>"
4660 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4661 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4662 (match_operand:MVE_0 2 "s_register_operand" "w")
4663 (match_operand:MVE_0 3 "s_register_operand" "w")]
4666 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4667 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #0"
4668 [(set_attr "type" "mve_move")
4672 ;; [vcmlaq_rot180_f])
4674 (define_insn "mve_vcmlaq_rot180_f<mode>"
4676 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4677 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4678 (match_operand:MVE_0 2 "s_register_operand" "w")
4679 (match_operand:MVE_0 3 "s_register_operand" "w")]
4682 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4683 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #180"
4684 [(set_attr "type" "mve_move")
4688 ;; [vcmlaq_rot270_f])
4690 (define_insn "mve_vcmlaq_rot270_f<mode>"
4692 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4693 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4694 (match_operand:MVE_0 2 "s_register_operand" "w")
4695 (match_operand:MVE_0 3 "s_register_operand" "w")]
4698 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4699 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #270"
4700 [(set_attr "type" "mve_move")
4704 ;; [vcmlaq_rot90_f])
4706 (define_insn "mve_vcmlaq_rot90_f<mode>"
4708 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4709 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4710 (match_operand:MVE_0 2 "s_register_operand" "w")
4711 (match_operand:MVE_0 3 "s_register_operand" "w")]
4714 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4715 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #90"
4716 [(set_attr "type" "mve_move")
4722 (define_insn "mve_vcmpeqq_m_n_f<mode>"
4724 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4725 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4726 (match_operand:<V_elem> 2 "s_register_operand" "r")
4727 (match_operand:HI 3 "vpr_register_operand" "Up")]
4730 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4731 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
4732 [(set_attr "type" "mve_move")
4733 (set_attr "length""8")])
4738 (define_insn "mve_vcmpgeq_m_f<mode>"
4740 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4741 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4742 (match_operand:MVE_0 2 "s_register_operand" "w")
4743 (match_operand:HI 3 "vpr_register_operand" "Up")]
4746 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4747 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
4748 [(set_attr "type" "mve_move")
4749 (set_attr "length""8")])
4754 (define_insn "mve_vcmpgeq_m_n_f<mode>"
4756 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4757 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4758 (match_operand:<V_elem> 2 "s_register_operand" "r")
4759 (match_operand:HI 3 "vpr_register_operand" "Up")]
4762 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4763 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
4764 [(set_attr "type" "mve_move")
4765 (set_attr "length""8")])
4770 (define_insn "mve_vcmpgtq_m_f<mode>"
4772 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4773 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4774 (match_operand:MVE_0 2 "s_register_operand" "w")
4775 (match_operand:HI 3 "vpr_register_operand" "Up")]
4778 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4779 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
4780 [(set_attr "type" "mve_move")
4781 (set_attr "length""8")])
4786 (define_insn "mve_vcmpgtq_m_n_f<mode>"
4788 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4789 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4790 (match_operand:<V_elem> 2 "s_register_operand" "r")
4791 (match_operand:HI 3 "vpr_register_operand" "Up")]
4794 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4795 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
4796 [(set_attr "type" "mve_move")
4797 (set_attr "length""8")])
4802 (define_insn "mve_vcmpleq_m_f<mode>"
4804 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4805 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4806 (match_operand:MVE_0 2 "s_register_operand" "w")
4807 (match_operand:HI 3 "vpr_register_operand" "Up")]
4810 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4811 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
4812 [(set_attr "type" "mve_move")
4813 (set_attr "length""8")])
4818 (define_insn "mve_vcmpleq_m_n_f<mode>"
4820 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4821 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4822 (match_operand:<V_elem> 2 "s_register_operand" "r")
4823 (match_operand:HI 3 "vpr_register_operand" "Up")]
4826 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4827 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
4828 [(set_attr "type" "mve_move")
4829 (set_attr "length""8")])
4834 (define_insn "mve_vcmpltq_m_f<mode>"
4836 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4837 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4838 (match_operand:MVE_0 2 "s_register_operand" "w")
4839 (match_operand:HI 3 "vpr_register_operand" "Up")]
4842 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4843 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
4844 [(set_attr "type" "mve_move")
4845 (set_attr "length""8")])
4850 (define_insn "mve_vcmpltq_m_n_f<mode>"
4852 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4853 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4854 (match_operand:<V_elem> 2 "s_register_operand" "r")
4855 (match_operand:HI 3 "vpr_register_operand" "Up")]
4858 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4859 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
4860 [(set_attr "type" "mve_move")
4861 (set_attr "length""8")])
4866 (define_insn "mve_vcmpneq_m_f<mode>"
4868 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4869 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4870 (match_operand:MVE_0 2 "s_register_operand" "w")
4871 (match_operand:HI 3 "vpr_register_operand" "Up")]
4874 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4875 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
4876 [(set_attr "type" "mve_move")
4877 (set_attr "length""8")])
4882 (define_insn "mve_vcmpneq_m_n_f<mode>"
4884 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4885 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4886 (match_operand:<V_elem> 2 "s_register_operand" "r")
4887 (match_operand:HI 3 "vpr_register_operand" "Up")]
4890 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4891 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
4892 [(set_attr "type" "mve_move")
4893 (set_attr "length""8")])
4896 ;; [vcvtbq_m_f16_f32])
4898 (define_insn "mve_vcvtbq_m_f16_f32v8hf"
4900 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4901 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4902 (match_operand:V4SF 2 "s_register_operand" "w")
4903 (match_operand:HI 3 "vpr_register_operand" "Up")]
4906 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4907 "vpst\;vcvtbt.f16.f32 %q0, %q2"
4908 [(set_attr "type" "mve_move")
4909 (set_attr "length""8")])
4912 ;; [vcvtbq_m_f32_f16])
4914 (define_insn "mve_vcvtbq_m_f32_f16v4sf"
4916 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4917 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4918 (match_operand:V8HF 2 "s_register_operand" "w")
4919 (match_operand:HI 3 "vpr_register_operand" "Up")]
4922 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4923 "vpst\;vcvtbt.f32.f16 %q0, %q2"
4924 [(set_attr "type" "mve_move")
4925 (set_attr "length""8")])
4928 ;; [vcvttq_m_f16_f32])
4930 (define_insn "mve_vcvttq_m_f16_f32v8hf"
4932 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4933 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4934 (match_operand:V4SF 2 "s_register_operand" "w")
4935 (match_operand:HI 3 "vpr_register_operand" "Up")]
4938 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4939 "vpst\;vcvttt.f16.f32 %q0, %q2"
4940 [(set_attr "type" "mve_move")
4941 (set_attr "length""8")])
4944 ;; [vcvttq_m_f32_f16])
4946 (define_insn "mve_vcvttq_m_f32_f16v4sf"
4948 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4949 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4950 (match_operand:V8HF 2 "s_register_operand" "w")
4951 (match_operand:HI 3 "vpr_register_operand" "Up")]
4954 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4955 "vpst\;vcvttt.f32.f16 %q0, %q2"
4956 [(set_attr "type" "mve_move")
4957 (set_attr "length""8")])
4962 (define_insn "mve_vdupq_m_n_f<mode>"
4964 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4965 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4966 (match_operand:<V_elem> 2 "s_register_operand" "r")
4967 (match_operand:HI 3 "vpr_register_operand" "Up")]
4970 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4971 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
4972 [(set_attr "type" "mve_move")
4973 (set_attr "length""8")])
4978 (define_insn "mve_vfmaq_f<mode>"
4980 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4981 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4982 (match_operand:MVE_0 2 "s_register_operand" "w")
4983 (match_operand:MVE_0 3 "s_register_operand" "w")]
4986 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4987 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
4988 [(set_attr "type" "mve_move")
4994 (define_insn "mve_vfmaq_n_f<mode>"
4996 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4997 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4998 (match_operand:MVE_0 2 "s_register_operand" "w")
4999 (match_operand:<V_elem> 3 "s_register_operand" "r")]
5002 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5003 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
5004 [(set_attr "type" "mve_move")
5010 (define_insn "mve_vfmasq_n_f<mode>"
5012 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5013 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5014 (match_operand:MVE_0 2 "s_register_operand" "w")
5015 (match_operand:<V_elem> 3 "s_register_operand" "r")]
5018 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5019 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
5020 [(set_attr "type" "mve_move")
5025 (define_insn "mve_vfmsq_f<mode>"
5027 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5028 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5029 (match_operand:MVE_0 2 "s_register_operand" "w")
5030 (match_operand:MVE_0 3 "s_register_operand" "w")]
5033 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5034 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
5035 [(set_attr "type" "mve_move")
5041 (define_insn "mve_vmaxnmaq_m_f<mode>"
5043 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5044 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5045 (match_operand:MVE_0 2 "s_register_operand" "w")
5046 (match_operand:HI 3 "vpr_register_operand" "Up")]
5049 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5050 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
5051 [(set_attr "type" "mve_move")
5052 (set_attr "length""8")])
5056 (define_insn "mve_vmaxnmavq_p_f<mode>"
5058 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
5059 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
5060 (match_operand:MVE_0 2 "s_register_operand" "w")
5061 (match_operand:HI 3 "vpr_register_operand" "Up")]
5064 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5065 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
5066 [(set_attr "type" "mve_move")
5067 (set_attr "length""8")])
5072 (define_insn "mve_vmaxnmvq_p_f<mode>"
5074 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
5075 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
5076 (match_operand:MVE_0 2 "s_register_operand" "w")
5077 (match_operand:HI 3 "vpr_register_operand" "Up")]
5080 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5081 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
5082 [(set_attr "type" "mve_move")
5083 (set_attr "length""8")])
5087 (define_insn "mve_vminnmaq_m_f<mode>"
5089 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5090 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5091 (match_operand:MVE_0 2 "s_register_operand" "w")
5092 (match_operand:HI 3 "vpr_register_operand" "Up")]
5095 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5096 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
5097 [(set_attr "type" "mve_move")
5098 (set_attr "length""8")])
5103 (define_insn "mve_vminnmavq_p_f<mode>"
5105 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
5106 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
5107 (match_operand:MVE_0 2 "s_register_operand" "w")
5108 (match_operand:HI 3 "vpr_register_operand" "Up")]
5111 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5112 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
5113 [(set_attr "type" "mve_move")
5114 (set_attr "length""8")])
5118 (define_insn "mve_vminnmvq_p_f<mode>"
5120 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
5121 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
5122 (match_operand:MVE_0 2 "s_register_operand" "w")
5123 (match_operand:HI 3 "vpr_register_operand" "Up")]
5126 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5127 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
5128 [(set_attr "type" "mve_move")
5129 (set_attr "length""8")])
5132 ;; [vmlaldavaq_s, vmlaldavaq_u])
5134 (define_insn "mve_vmlaldavaq_<supf><mode>"
5136 (set (match_operand:DI 0 "s_register_operand" "=r")
5137 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5138 (match_operand:MVE_5 2 "s_register_operand" "w")
5139 (match_operand:MVE_5 3 "s_register_operand" "w")]
5143 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
5144 [(set_attr "type" "mve_move")
5150 (define_insn "mve_vmlaldavaxq_s<mode>"
5152 (set (match_operand:DI 0 "s_register_operand" "=r")
5153 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5154 (match_operand:MVE_5 2 "s_register_operand" "w")
5155 (match_operand:MVE_5 3 "s_register_operand" "w")]
5159 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
5160 [(set_attr "type" "mve_move")
5164 ;; [vmlaldavq_p_u, vmlaldavq_p_s])
5166 (define_insn "mve_vmlaldavq_p_<supf><mode>"
5168 (set (match_operand:DI 0 "s_register_operand" "=r")
5169 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
5170 (match_operand:MVE_5 2 "s_register_operand" "w")
5171 (match_operand:HI 3 "vpr_register_operand" "Up")]
5175 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
5176 [(set_attr "type" "mve_move")
5177 (set_attr "length""8")])
5180 ;; [vmlaldavxq_p_s])
5182 (define_insn "mve_vmlaldavxq_p_s<mode>"
5184 (set (match_operand:DI 0 "s_register_operand" "=r")
5185 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
5186 (match_operand:MVE_5 2 "s_register_operand" "w")
5187 (match_operand:HI 3 "vpr_register_operand" "Up")]
5191 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
5192 [(set_attr "type" "mve_move")
5193 (set_attr "length""8")])
5197 (define_insn "mve_vmlsldavaq_s<mode>"
5199 (set (match_operand:DI 0 "s_register_operand" "=r")
5200 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5201 (match_operand:MVE_5 2 "s_register_operand" "w")
5202 (match_operand:MVE_5 3 "s_register_operand" "w")]
5206 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
5207 [(set_attr "type" "mve_move")
5213 (define_insn "mve_vmlsldavaxq_s<mode>"
5215 (set (match_operand:DI 0 "s_register_operand" "=r")
5216 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5217 (match_operand:MVE_5 2 "s_register_operand" "w")
5218 (match_operand:MVE_5 3 "s_register_operand" "w")]
5222 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
5223 [(set_attr "type" "mve_move")
5229 (define_insn "mve_vmlsldavq_p_s<mode>"
5231 (set (match_operand:DI 0 "s_register_operand" "=r")
5232 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
5233 (match_operand:MVE_5 2 "s_register_operand" "w")
5234 (match_operand:HI 3 "vpr_register_operand" "Up")]
5238 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
5239 [(set_attr "type" "mve_move")
5240 (set_attr "length""8")])
5243 ;; [vmlsldavxq_p_s])
5245 (define_insn "mve_vmlsldavxq_p_s<mode>"
5247 (set (match_operand:DI 0 "s_register_operand" "=r")
5248 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
5249 (match_operand:MVE_5 2 "s_register_operand" "w")
5250 (match_operand:HI 3 "vpr_register_operand" "Up")]
5254 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
5255 [(set_attr "type" "mve_move")
5256 (set_attr "length""8")])
5258 ;; [vmovlbq_m_u, vmovlbq_m_s])
5260 (define_insn "mve_vmovlbq_m_<supf><mode>"
5262 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
5263 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5264 (match_operand:MVE_3 2 "s_register_operand" "w")
5265 (match_operand:HI 3 "vpr_register_operand" "Up")]
5269 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
5270 [(set_attr "type" "mve_move")
5271 (set_attr "length""8")])
5273 ;; [vmovltq_m_u, vmovltq_m_s])
5275 (define_insn "mve_vmovltq_m_<supf><mode>"
5277 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
5278 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5279 (match_operand:MVE_3 2 "s_register_operand" "w")
5280 (match_operand:HI 3 "vpr_register_operand" "Up")]
5284 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
5285 [(set_attr "type" "mve_move")
5286 (set_attr "length""8")])
5288 ;; [vmovnbq_m_u, vmovnbq_m_s])
5290 (define_insn "mve_vmovnbq_m_<supf><mode>"
5292 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5293 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5294 (match_operand:MVE_5 2 "s_register_operand" "w")
5295 (match_operand:HI 3 "vpr_register_operand" "Up")]
5299 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
5300 [(set_attr "type" "mve_move")
5301 (set_attr "length""8")])
5304 ;; [vmovntq_m_u, vmovntq_m_s])
5306 (define_insn "mve_vmovntq_m_<supf><mode>"
5308 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5309 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5310 (match_operand:MVE_5 2 "s_register_operand" "w")
5311 (match_operand:HI 3 "vpr_register_operand" "Up")]
5315 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
5316 [(set_attr "type" "mve_move")
5317 (set_attr "length""8")])
5320 ;; [vmvnq_m_n_u, vmvnq_m_n_s])
5322 (define_insn "mve_vmvnq_m_n_<supf><mode>"
5324 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5325 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5326 (match_operand:SI 2 "immediate_operand" "i")
5327 (match_operand:HI 3 "vpr_register_operand" "Up")]
5331 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
5332 [(set_attr "type" "mve_move")
5333 (set_attr "length""8")])
5337 (define_insn "mve_vnegq_m_f<mode>"
5339 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5340 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5341 (match_operand:MVE_0 2 "s_register_operand" "w")
5342 (match_operand:HI 3 "vpr_register_operand" "Up")]
5345 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5346 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
5347 [(set_attr "type" "mve_move")
5348 (set_attr "length""8")])
5351 ;; [vorrq_m_n_s, vorrq_m_n_u])
5353 (define_insn "mve_vorrq_m_n_<supf><mode>"
5355 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5356 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5357 (match_operand:SI 2 "immediate_operand" "i")
5358 (match_operand:HI 3 "vpr_register_operand" "Up")]
5362 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
5363 [(set_attr "type" "mve_move")
5364 (set_attr "length""8")])
5368 (define_insn "mve_vpselq_f<mode>"
5370 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5371 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
5372 (match_operand:MVE_0 2 "s_register_operand" "w")
5373 (match_operand:HI 3 "vpr_register_operand" "Up")]
5376 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5377 "vpsel %q0, %q1, %q2"
5378 [(set_attr "type" "mve_move")
5382 ;; [vqmovnbq_m_s, vqmovnbq_m_u])
5384 (define_insn "mve_vqmovnbq_m_<supf><mode>"
5386 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5387 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5388 (match_operand:MVE_5 2 "s_register_operand" "w")
5389 (match_operand:HI 3 "vpr_register_operand" "Up")]
5393 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
5394 [(set_attr "type" "mve_move")
5395 (set_attr "length""8")])
5398 ;; [vqmovntq_m_u, vqmovntq_m_s])
5400 (define_insn "mve_vqmovntq_m_<supf><mode>"
5402 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5403 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5404 (match_operand:MVE_5 2 "s_register_operand" "w")
5405 (match_operand:HI 3 "vpr_register_operand" "Up")]
5409 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
5410 [(set_attr "type" "mve_move")
5411 (set_attr "length""8")])
5416 (define_insn "mve_vqmovunbq_m_s<mode>"
5418 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5419 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5420 (match_operand:MVE_5 2 "s_register_operand" "w")
5421 (match_operand:HI 3 "vpr_register_operand" "Up")]
5425 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
5426 [(set_attr "type" "mve_move")
5427 (set_attr "length""8")])
5432 (define_insn "mve_vqmovuntq_m_s<mode>"
5434 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5435 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5436 (match_operand:MVE_5 2 "s_register_operand" "w")
5437 (match_operand:HI 3 "vpr_register_operand" "Up")]
5441 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
5442 [(set_attr "type" "mve_move")
5443 (set_attr "length""8")])
5446 ;; [vqrshrntq_n_u, vqrshrntq_n_s])
5448 (define_insn "mve_vqrshrntq_n_<supf><mode>"
5450 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5451 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5452 (match_operand:MVE_5 2 "s_register_operand" "w")
5453 (match_operand:SI 3 "mve_imm_8" "Rb")]
5457 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5458 [(set_attr "type" "mve_move")
5462 ;; [vqrshruntq_n_s])
5464 (define_insn "mve_vqrshruntq_n_s<mode>"
5466 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5467 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5468 (match_operand:MVE_5 2 "s_register_operand" "w")
5469 (match_operand:SI 3 "mve_imm_8" "Rb")]
5473 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
5474 [(set_attr "type" "mve_move")
5478 ;; [vqshrnbq_n_u, vqshrnbq_n_s])
5480 (define_insn "mve_vqshrnbq_n_<supf><mode>"
5482 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5483 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5484 (match_operand:MVE_5 2 "s_register_operand" "w")
5485 (match_operand:SI 3 "<MVE_pred1>" "<MVE_constraint1>")]
5489 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5490 [(set_attr "type" "mve_move")
5494 ;; [vqshrntq_n_u, vqshrntq_n_s])
5496 (define_insn "mve_vqshrntq_n_<supf><mode>"
5498 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5499 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5500 (match_operand:MVE_5 2 "s_register_operand" "w")
5501 (match_operand:SI 3 "mve_imm_8" "Rb")]
5505 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5506 [(set_attr "type" "mve_move")
5512 (define_insn "mve_vqshrunbq_n_s<mode>"
5514 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5515 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5516 (match_operand:MVE_5 2 "s_register_operand" "w")
5517 (match_operand:SI 3 "immediate_operand" "i")]
5521 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
5522 [(set_attr "type" "mve_move")
5528 (define_insn "mve_vqshruntq_n_s<mode>"
5530 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5531 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5532 (match_operand:MVE_5 2 "s_register_operand" "w")
5533 (match_operand:SI 3 "mve_imm_8" "Rb")]
5537 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
5538 [(set_attr "type" "mve_move")
5544 (define_insn "mve_vrev32q_m_fv8hf"
5546 (set (match_operand:V8HF 0 "s_register_operand" "=w")
5547 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
5548 (match_operand:V8HF 2 "s_register_operand" "w")
5549 (match_operand:HI 3 "vpr_register_operand" "Up")]
5552 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5553 "vpst\;vrev32t.16 %q0, %q2"
5554 [(set_attr "type" "mve_move")
5555 (set_attr "length""8")])
5558 ;; [vrev32q_m_s, vrev32q_m_u])
5560 (define_insn "mve_vrev32q_m_<supf><mode>"
5562 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
5563 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
5564 (match_operand:MVE_3 2 "s_register_operand" "w")
5565 (match_operand:HI 3 "vpr_register_operand" "Up")]
5569 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
5570 [(set_attr "type" "mve_move")
5571 (set_attr "length""8")])
5576 (define_insn "mve_vrev64q_m_f<mode>"
5578 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5579 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5580 (match_operand:MVE_0 2 "s_register_operand" "w")
5581 (match_operand:HI 3 "vpr_register_operand" "Up")]
5584 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5585 "vpst\;vrev64t.%#<V_sz_elem> %q0, %q2"
5586 [(set_attr "type" "mve_move")
5587 (set_attr "length""8")])
5590 ;; [vrmlaldavhaxq_s])
5592 (define_insn "mve_vrmlaldavhaxq_sv4si"
5594 (set (match_operand:DI 0 "s_register_operand" "=r")
5595 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5596 (match_operand:V4SI 2 "s_register_operand" "w")
5597 (match_operand:V4SI 3 "s_register_operand" "w")]
5601 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
5602 [(set_attr "type" "mve_move")
5606 ;; [vrmlaldavhxq_p_s])
5608 (define_insn "mve_vrmlaldavhxq_p_sv4si"
5610 (set (match_operand:DI 0 "s_register_operand" "=r")
5611 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5612 (match_operand:V4SI 2 "s_register_operand" "w")
5613 (match_operand:HI 3 "vpr_register_operand" "Up")]
5617 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
5618 [(set_attr "type" "mve_move")
5619 (set_attr "length""8")])
5622 ;; [vrmlsldavhaxq_s])
5624 (define_insn "mve_vrmlsldavhaxq_sv4si"
5626 (set (match_operand:DI 0 "s_register_operand" "=r")
5627 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5628 (match_operand:V4SI 2 "s_register_operand" "w")
5629 (match_operand:V4SI 3 "s_register_operand" "w")]
5633 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
5634 [(set_attr "type" "mve_move")
5638 ;; [vrmlsldavhq_p_s])
5640 (define_insn "mve_vrmlsldavhq_p_sv4si"
5642 (set (match_operand:DI 0 "s_register_operand" "=r")
5643 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5644 (match_operand:V4SI 2 "s_register_operand" "w")
5645 (match_operand:HI 3 "vpr_register_operand" "Up")]
5649 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
5650 [(set_attr "type" "mve_move")
5651 (set_attr "length""8")])
5654 ;; [vrmlsldavhxq_p_s])
5656 (define_insn "mve_vrmlsldavhxq_p_sv4si"
5658 (set (match_operand:DI 0 "s_register_operand" "=r")
5659 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5660 (match_operand:V4SI 2 "s_register_operand" "w")
5661 (match_operand:HI 3 "vpr_register_operand" "Up")]
5665 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
5666 [(set_attr "type" "mve_move")
5667 (set_attr "length""8")])
5672 (define_insn "mve_vrndaq_m_f<mode>"
5674 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5675 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5676 (match_operand:MVE_0 2 "s_register_operand" "w")
5677 (match_operand:HI 3 "vpr_register_operand" "Up")]
5680 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5681 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
5682 [(set_attr "type" "mve_move")
5683 (set_attr "length""8")])
5688 (define_insn "mve_vrndmq_m_f<mode>"
5690 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5691 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5692 (match_operand:MVE_0 2 "s_register_operand" "w")
5693 (match_operand:HI 3 "vpr_register_operand" "Up")]
5696 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5697 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
5698 [(set_attr "type" "mve_move")
5699 (set_attr "length""8")])
5704 (define_insn "mve_vrndnq_m_f<mode>"
5706 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5707 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5708 (match_operand:MVE_0 2 "s_register_operand" "w")
5709 (match_operand:HI 3 "vpr_register_operand" "Up")]
5712 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5713 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
5714 [(set_attr "type" "mve_move")
5715 (set_attr "length""8")])
5720 (define_insn "mve_vrndpq_m_f<mode>"
5722 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5723 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5724 (match_operand:MVE_0 2 "s_register_operand" "w")
5725 (match_operand:HI 3 "vpr_register_operand" "Up")]
5728 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5729 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
5730 [(set_attr "type" "mve_move")
5731 (set_attr "length""8")])
5736 (define_insn "mve_vrndxq_m_f<mode>"
5738 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5739 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5740 (match_operand:MVE_0 2 "s_register_operand" "w")
5741 (match_operand:HI 3 "vpr_register_operand" "Up")]
5744 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5745 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
5746 [(set_attr "type" "mve_move")
5747 (set_attr "length""8")])
5750 ;; [vrshrnbq_n_s, vrshrnbq_n_u])
5752 (define_insn "mve_vrshrnbq_n_<supf><mode>"
5754 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5755 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5756 (match_operand:MVE_5 2 "s_register_operand" "w")
5757 (match_operand:SI 3 "mve_imm_8" "Rb")]
5761 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5762 [(set_attr "type" "mve_move")
5766 ;; [vrshrntq_n_u, vrshrntq_n_s])
5768 (define_insn "mve_vrshrntq_n_<supf><mode>"
5770 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5771 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5772 (match_operand:MVE_5 2 "s_register_operand" "w")
5773 (match_operand:SI 3 "mve_imm_8" "Rb")]
5777 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
5778 [(set_attr "type" "mve_move")
5782 ;; [vshrnbq_n_u, vshrnbq_n_s])
5784 (define_insn "mve_vshrnbq_n_<supf><mode>"
5786 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5787 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5788 (match_operand:MVE_5 2 "s_register_operand" "w")
5789 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5793 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5794 [(set_attr "type" "mve_move")
5798 ;; [vshrntq_n_s, vshrntq_n_u])
5800 (define_insn "mve_vshrntq_n_<supf><mode>"
5802 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5803 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5804 (match_operand:MVE_5 2 "s_register_operand" "w")
5805 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5809 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
5810 [(set_attr "type" "mve_move")
5814 ;; [vcvtmq_m_s, vcvtmq_m_u])
5816 (define_insn "mve_vcvtmq_m_<supf><mode>"
5818 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5819 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5820 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5821 (match_operand:HI 3 "vpr_register_operand" "Up")]
5824 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5825 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5826 [(set_attr "type" "mve_move")
5827 (set_attr "length""8")])
5830 ;; [vcvtpq_m_u, vcvtpq_m_s])
5832 (define_insn "mve_vcvtpq_m_<supf><mode>"
5834 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5835 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5836 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5837 (match_operand:HI 3 "vpr_register_operand" "Up")]
5840 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5841 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5842 [(set_attr "type" "mve_move")
5843 (set_attr "length""8")])
5846 ;; [vcvtnq_m_s, vcvtnq_m_u])
5848 (define_insn "mve_vcvtnq_m_<supf><mode>"
5850 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5851 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5852 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5853 (match_operand:HI 3 "vpr_register_operand" "Up")]
5856 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5857 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5858 [(set_attr "type" "mve_move")
5859 (set_attr "length""8")])
5862 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
5864 (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
5866 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5867 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5868 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5869 (match_operand:SI 3 "mve_imm_16" "Rd")
5870 (match_operand:HI 4 "vpr_register_operand" "Up")]
5873 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5874 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
5875 [(set_attr "type" "mve_move")
5876 (set_attr "length""8")])
5879 ;; [vrev16q_m_u, vrev16q_m_s])
5881 (define_insn "mve_vrev16q_m_<supf>v16qi"
5883 (set (match_operand:V16QI 0 "s_register_operand" "=w")
5884 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
5885 (match_operand:V16QI 2 "s_register_operand" "w")
5886 (match_operand:HI 3 "vpr_register_operand" "Up")]
5890 "vpst\;vrev16t.8 %q0, %q2"
5891 [(set_attr "type" "mve_move")
5892 (set_attr "length""8")])
5895 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
5897 (define_insn "mve_vcvtq_m_from_f_<supf><mode>"
5899 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5900 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5901 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5902 (match_operand:HI 3 "vpr_register_operand" "Up")]
5905 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5906 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5907 [(set_attr "type" "mve_move")
5908 (set_attr "length""8")])
5911 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
5913 (define_insn "mve_vrmlaldavhq_p_<supf>v4si"
5915 (set (match_operand:DI 0 "s_register_operand" "=r")
5916 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5917 (match_operand:V4SI 2 "s_register_operand" "w")
5918 (match_operand:HI 3 "vpr_register_operand" "Up")]
5922 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
5923 [(set_attr "type" "mve_move")
5924 (set_attr "length""8")])
5927 ;; [vrmlsldavhaq_s])
5929 (define_insn "mve_vrmlsldavhaq_sv4si"
5931 (set (match_operand:DI 0 "s_register_operand" "=r")
5932 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5933 (match_operand:V4SI 2 "s_register_operand" "w")
5934 (match_operand:V4SI 3 "s_register_operand" "w")]
5938 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
5939 [(set_attr "type" "mve_move")
5943 ;; [vabavq_p_s, vabavq_p_u])
5945 (define_insn "mve_vabavq_p_<supf><mode>"
5947 (set (match_operand:SI 0 "s_register_operand" "=r")
5948 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5949 (match_operand:MVE_2 2 "s_register_operand" "w")
5950 (match_operand:MVE_2 3 "s_register_operand" "w")
5951 (match_operand:HI 4 "vpr_register_operand" "Up")]
5955 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
5956 [(set_attr "type" "mve_move")
5962 (define_insn "mve_vqshluq_m_n_s<mode>"
5964 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5965 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5966 (match_operand:MVE_2 2 "s_register_operand" "w")
5967 (match_operand:SI 3 "mve_imm_7" "Ra")
5968 (match_operand:HI 4 "vpr_register_operand" "Up")]
5972 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
5973 [(set_attr "type" "mve_move")])
5976 ;; [vshlq_m_s, vshlq_m_u])
5978 (define_insn "mve_vshlq_m_<supf><mode>"
5980 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5981 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5982 (match_operand:MVE_2 2 "s_register_operand" "w")
5983 (match_operand:MVE_2 3 "s_register_operand" "w")
5984 (match_operand:HI 4 "vpr_register_operand" "Up")]
5988 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
5989 [(set_attr "type" "mve_move")])
5992 ;; [vsriq_m_n_s, vsriq_m_n_u])
5994 (define_insn "mve_vsriq_m_n_<supf><mode>"
5996 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
5997 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
5998 (match_operand:MVE_2 2 "s_register_operand" "w")
5999 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
6000 (match_operand:HI 4 "vpr_register_operand" "Up")]
6004 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
6005 [(set_attr "type" "mve_move")])
6008 ;; [vsubq_m_u, vsubq_m_s])
6010 (define_insn "mve_vsubq_m_<supf><mode>"
6012 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6013 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6014 (match_operand:MVE_2 2 "s_register_operand" "w")
6015 (match_operand:MVE_2 3 "s_register_operand" "w")
6016 (match_operand:HI 4 "vpr_register_operand" "Up")]
6020 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
6021 [(set_attr "type" "mve_move")])
6024 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
6026 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
6028 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6029 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6030 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
6031 (match_operand:SI 3 "mve_imm_16" "Rd")
6032 (match_operand:HI 4 "vpr_register_operand" "Up")]
6035 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6036 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6037 [(set_attr "type" "mve_move")
6038 (set_attr "length""8")])
6040 ;; [vabdq_m_s, vabdq_m_u])
6042 (define_insn "mve_vabdq_m_<supf><mode>"
6044 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6045 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6046 (match_operand:MVE_2 2 "s_register_operand" "w")
6047 (match_operand:MVE_2 3 "s_register_operand" "w")
6048 (match_operand:HI 4 "vpr_register_operand" "Up")]
6052 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6053 [(set_attr "type" "mve_move")
6054 (set_attr "length""8")])
6057 ;; [vaddq_m_n_s, vaddq_m_n_u])
6059 (define_insn "mve_vaddq_m_n_<supf><mode>"
6061 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6062 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6063 (match_operand:MVE_2 2 "s_register_operand" "w")
6064 (match_operand:<V_elem> 3 "s_register_operand" "r")
6065 (match_operand:HI 4 "vpr_register_operand" "Up")]
6069 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3"
6070 [(set_attr "type" "mve_move")
6071 (set_attr "length""8")])
6074 ;; [vaddq_m_u, vaddq_m_s])
6076 (define_insn "mve_vaddq_m_<supf><mode>"
6078 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6079 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6080 (match_operand:MVE_2 2 "s_register_operand" "w")
6081 (match_operand:MVE_2 3 "s_register_operand" "w")
6082 (match_operand:HI 4 "vpr_register_operand" "Up")]
6086 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3"
6087 [(set_attr "type" "mve_move")
6088 (set_attr "length""8")])
6091 ;; [vandq_m_u, vandq_m_s])
6093 (define_insn "mve_vandq_m_<supf><mode>"
6095 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6096 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6097 (match_operand:MVE_2 2 "s_register_operand" "w")
6098 (match_operand:MVE_2 3 "s_register_operand" "w")
6099 (match_operand:HI 4 "vpr_register_operand" "Up")]
6103 "vpst\;vandt %q0, %q2, %q3"
6104 [(set_attr "type" "mve_move")
6105 (set_attr "length""8")])
6108 ;; [vbicq_m_u, vbicq_m_s])
6110 (define_insn "mve_vbicq_m_<supf><mode>"
6112 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6113 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6114 (match_operand:MVE_2 2 "s_register_operand" "w")
6115 (match_operand:MVE_2 3 "s_register_operand" "w")
6116 (match_operand:HI 4 "vpr_register_operand" "Up")]
6120 "vpst\;vbict %q0, %q2, %q3"
6121 [(set_attr "type" "mve_move")
6122 (set_attr "length""8")])
6125 ;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
6127 (define_insn "mve_vbrsrq_m_n_<supf><mode>"
6129 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6130 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6131 (match_operand:MVE_2 2 "s_register_operand" "w")
6132 (match_operand:SI 3 "s_register_operand" "r")
6133 (match_operand:HI 4 "vpr_register_operand" "Up")]
6137 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
6138 [(set_attr "type" "mve_move")
6139 (set_attr "length""8")])
6142 ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
6144 (define_insn "mve_vcaddq_rot270_m_<supf><mode>"
6146 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6147 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6148 (match_operand:MVE_2 2 "s_register_operand" "w")
6149 (match_operand:MVE_2 3 "s_register_operand" "w")
6150 (match_operand:HI 4 "vpr_register_operand" "Up")]
6154 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270"
6155 [(set_attr "type" "mve_move")
6156 (set_attr "length""8")])
6159 ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
6161 (define_insn "mve_vcaddq_rot90_m_<supf><mode>"
6163 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6164 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6165 (match_operand:MVE_2 2 "s_register_operand" "w")
6166 (match_operand:MVE_2 3 "s_register_operand" "w")
6167 (match_operand:HI 4 "vpr_register_operand" "Up")]
6171 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90"
6172 [(set_attr "type" "mve_move")
6173 (set_attr "length""8")])
6176 ;; [veorq_m_s, veorq_m_u])
6178 (define_insn "mve_veorq_m_<supf><mode>"
6180 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6181 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6182 (match_operand:MVE_2 2 "s_register_operand" "w")
6183 (match_operand:MVE_2 3 "s_register_operand" "w")
6184 (match_operand:HI 4 "vpr_register_operand" "Up")]
6188 "vpst\;veort %q0, %q2, %q3"
6189 [(set_attr "type" "mve_move")
6190 (set_attr "length""8")])
6193 ;; [vhaddq_m_n_s, vhaddq_m_n_u])
6195 (define_insn "mve_vhaddq_m_n_<supf><mode>"
6197 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6198 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6199 (match_operand:MVE_2 2 "s_register_operand" "w")
6200 (match_operand:<V_elem> 3 "s_register_operand" "r")
6201 (match_operand:HI 4 "vpr_register_operand" "Up")]
6205 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6206 [(set_attr "type" "mve_move")
6207 (set_attr "length""8")])
6210 ;; [vhaddq_m_s, vhaddq_m_u])
6212 (define_insn "mve_vhaddq_m_<supf><mode>"
6214 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6215 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6216 (match_operand:MVE_2 2 "s_register_operand" "w")
6217 (match_operand:MVE_2 3 "s_register_operand" "w")
6218 (match_operand:HI 4 "vpr_register_operand" "Up")]
6222 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6223 [(set_attr "type" "mve_move")
6224 (set_attr "length""8")])
6227 ;; [vhsubq_m_n_s, vhsubq_m_n_u])
6229 (define_insn "mve_vhsubq_m_n_<supf><mode>"
6231 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6232 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6233 (match_operand:MVE_2 2 "s_register_operand" "w")
6234 (match_operand:<V_elem> 3 "s_register_operand" "r")
6235 (match_operand:HI 4 "vpr_register_operand" "Up")]
6239 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6240 [(set_attr "type" "mve_move")
6241 (set_attr "length""8")])
6244 ;; [vhsubq_m_s, vhsubq_m_u])
6246 (define_insn "mve_vhsubq_m_<supf><mode>"
6248 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6249 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6250 (match_operand:MVE_2 2 "s_register_operand" "w")
6251 (match_operand:MVE_2 3 "s_register_operand" "w")
6252 (match_operand:HI 4 "vpr_register_operand" "Up")]
6256 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6257 [(set_attr "type" "mve_move")
6258 (set_attr "length""8")])
6261 ;; [vmaxq_m_s, vmaxq_m_u])
6263 (define_insn "mve_vmaxq_m_<supf><mode>"
6265 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6266 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6267 (match_operand:MVE_2 2 "s_register_operand" "w")
6268 (match_operand:MVE_2 3 "s_register_operand" "w")
6269 (match_operand:HI 4 "vpr_register_operand" "Up")]
6273 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6274 [(set_attr "type" "mve_move")
6275 (set_attr "length""8")])
6278 ;; [vminq_m_s, vminq_m_u])
6280 (define_insn "mve_vminq_m_<supf><mode>"
6282 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6283 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6284 (match_operand:MVE_2 2 "s_register_operand" "w")
6285 (match_operand:MVE_2 3 "s_register_operand" "w")
6286 (match_operand:HI 4 "vpr_register_operand" "Up")]
6290 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6291 [(set_attr "type" "mve_move")
6292 (set_attr "length""8")])
6295 ;; [vmladavaq_p_u, vmladavaq_p_s])
6297 (define_insn "mve_vmladavaq_p_<supf><mode>"
6299 (set (match_operand:SI 0 "s_register_operand" "=e")
6300 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6301 (match_operand:MVE_2 2 "s_register_operand" "w")
6302 (match_operand:MVE_2 3 "s_register_operand" "w")
6303 (match_operand:HI 4 "vpr_register_operand" "Up")]
6307 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3"
6308 [(set_attr "type" "mve_move")
6309 (set_attr "length""8")])
6312 ;; [vmlaq_m_n_s, vmlaq_m_n_u])
6314 (define_insn "mve_vmlaq_m_n_<supf><mode>"
6316 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6317 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6318 (match_operand:MVE_2 2 "s_register_operand" "w")
6319 (match_operand:<V_elem> 3 "s_register_operand" "r")
6320 (match_operand:HI 4 "vpr_register_operand" "Up")]
6324 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3"
6325 [(set_attr "type" "mve_move")
6326 (set_attr "length""8")])
6329 ;; [vmlasq_m_n_u, vmlasq_m_n_s])
6331 (define_insn "mve_vmlasq_m_n_<supf><mode>"
6333 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6334 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6335 (match_operand:MVE_2 2 "s_register_operand" "w")
6336 (match_operand:<V_elem> 3 "s_register_operand" "r")
6337 (match_operand:HI 4 "vpr_register_operand" "Up")]
6341 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3"
6342 [(set_attr "type" "mve_move")
6343 (set_attr "length""8")])
6346 ;; [vmulhq_m_s, vmulhq_m_u])
6348 (define_insn "mve_vmulhq_m_<supf><mode>"
6350 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6351 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6352 (match_operand:MVE_2 2 "s_register_operand" "w")
6353 (match_operand:MVE_2 3 "s_register_operand" "w")
6354 (match_operand:HI 4 "vpr_register_operand" "Up")]
6358 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6359 [(set_attr "type" "mve_move")
6360 (set_attr "length""8")])
6363 ;; [vmullbq_int_m_u, vmullbq_int_m_s])
6365 (define_insn "mve_vmullbq_int_m_<supf><mode>"
6367 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6368 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6369 (match_operand:MVE_2 2 "s_register_operand" "w")
6370 (match_operand:MVE_2 3 "s_register_operand" "w")
6371 (match_operand:HI 4 "vpr_register_operand" "Up")]
6375 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6376 [(set_attr "type" "mve_move")
6377 (set_attr "length""8")])
6380 ;; [vmulltq_int_m_s, vmulltq_int_m_u])
6382 (define_insn "mve_vmulltq_int_m_<supf><mode>"
6384 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6385 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6386 (match_operand:MVE_2 2 "s_register_operand" "w")
6387 (match_operand:MVE_2 3 "s_register_operand" "w")
6388 (match_operand:HI 4 "vpr_register_operand" "Up")]
6392 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6393 [(set_attr "type" "mve_move")
6394 (set_attr "length""8")])
6397 ;; [vmulq_m_n_u, vmulq_m_n_s])
6399 (define_insn "mve_vmulq_m_n_<supf><mode>"
6401 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6402 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6403 (match_operand:MVE_2 2 "s_register_operand" "w")
6404 (match_operand:<V_elem> 3 "s_register_operand" "r")
6405 (match_operand:HI 4 "vpr_register_operand" "Up")]
6409 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3"
6410 [(set_attr "type" "mve_move")
6411 (set_attr "length""8")])
6414 ;; [vmulq_m_s, vmulq_m_u])
6416 (define_insn "mve_vmulq_m_<supf><mode>"
6418 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6419 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6420 (match_operand:MVE_2 2 "s_register_operand" "w")
6421 (match_operand:MVE_2 3 "s_register_operand" "w")
6422 (match_operand:HI 4 "vpr_register_operand" "Up")]
6426 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3"
6427 [(set_attr "type" "mve_move")
6428 (set_attr "length""8")])
6431 ;; [vornq_m_u, vornq_m_s])
6433 (define_insn "mve_vornq_m_<supf><mode>"
6435 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6436 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6437 (match_operand:MVE_2 2 "s_register_operand" "w")
6438 (match_operand:MVE_2 3 "s_register_operand" "w")
6439 (match_operand:HI 4 "vpr_register_operand" "Up")]
6443 "vpst\;vornt %q0, %q2, %q3"
6444 [(set_attr "type" "mve_move")
6445 (set_attr "length""8")])
6448 ;; [vorrq_m_s, vorrq_m_u])
6450 (define_insn "mve_vorrq_m_<supf><mode>"
6452 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6453 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6454 (match_operand:MVE_2 2 "s_register_operand" "w")
6455 (match_operand:MVE_2 3 "s_register_operand" "w")
6456 (match_operand:HI 4 "vpr_register_operand" "Up")]
6460 "vpst\;vorrt %q0, %q2, %q3"
6461 [(set_attr "type" "mve_move")
6462 (set_attr "length""8")])
6465 ;; [vqaddq_m_n_u, vqaddq_m_n_s])
6467 (define_insn "mve_vqaddq_m_n_<supf><mode>"
6469 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6470 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6471 (match_operand:MVE_2 2 "s_register_operand" "w")
6472 (match_operand:<V_elem> 3 "s_register_operand" "r")
6473 (match_operand:HI 4 "vpr_register_operand" "Up")]
6477 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6478 [(set_attr "type" "mve_move")
6479 (set_attr "length""8")])
6482 ;; [vqaddq_m_u, vqaddq_m_s])
6484 (define_insn "mve_vqaddq_m_<supf><mode>"
6486 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6487 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6488 (match_operand:MVE_2 2 "s_register_operand" "w")
6489 (match_operand:MVE_2 3 "s_register_operand" "w")
6490 (match_operand:HI 4 "vpr_register_operand" "Up")]
6494 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6495 [(set_attr "type" "mve_move")
6496 (set_attr "length""8")])
6499 ;; [vqdmlahq_m_n_s])
6501 (define_insn "mve_vqdmlahq_m_n_s<mode>"
6503 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6504 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6505 (match_operand:MVE_2 2 "s_register_operand" "w")
6506 (match_operand:<V_elem> 3 "s_register_operand" "r")
6507 (match_operand:HI 4 "vpr_register_operand" "Up")]
6511 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
6512 [(set_attr "type" "mve_move")
6513 (set_attr "length""8")])
6516 ;; [vqrdmlahq_m_n_s])
6518 (define_insn "mve_vqrdmlahq_m_n_s<mode>"
6520 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6521 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6522 (match_operand:MVE_2 2 "s_register_operand" "w")
6523 (match_operand:<V_elem> 3 "s_register_operand" "r")
6524 (match_operand:HI 4 "vpr_register_operand" "Up")]
6528 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
6529 [(set_attr "type" "mve_move")
6530 (set_attr "length""8")])
6533 ;; [vqrdmlashq_m_n_s])
6535 (define_insn "mve_vqrdmlashq_m_n_s<mode>"
6537 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6538 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6539 (match_operand:MVE_2 2 "s_register_operand" "w")
6540 (match_operand:<V_elem> 3 "s_register_operand" "r")
6541 (match_operand:HI 4 "vpr_register_operand" "Up")]
6545 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
6546 [(set_attr "type" "mve_move")
6547 (set_attr "length""8")])
6550 ;; [vqrshlq_m_u, vqrshlq_m_s])
6552 (define_insn "mve_vqrshlq_m_<supf><mode>"
6554 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6555 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6556 (match_operand:MVE_2 2 "s_register_operand" "w")
6557 (match_operand:MVE_2 3 "s_register_operand" "w")
6558 (match_operand:HI 4 "vpr_register_operand" "Up")]
6562 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6563 [(set_attr "type" "mve_move")
6564 (set_attr "length""8")])
6567 ;; [vqshlq_m_n_s, vqshlq_m_n_u])
6569 (define_insn "mve_vqshlq_m_n_<supf><mode>"
6571 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6572 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6573 (match_operand:MVE_2 2 "s_register_operand" "w")
6574 (match_operand:SI 3 "immediate_operand" "i")
6575 (match_operand:HI 4 "vpr_register_operand" "Up")]
6579 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6580 [(set_attr "type" "mve_move")
6581 (set_attr "length""8")])
6584 ;; [vqshlq_m_u, vqshlq_m_s])
6586 (define_insn "mve_vqshlq_m_<supf><mode>"
6588 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6589 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6590 (match_operand:MVE_2 2 "s_register_operand" "w")
6591 (match_operand:MVE_2 3 "s_register_operand" "w")
6592 (match_operand:HI 4 "vpr_register_operand" "Up")]
6596 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6597 [(set_attr "type" "mve_move")
6598 (set_attr "length""8")])
6601 ;; [vqsubq_m_n_u, vqsubq_m_n_s])
6603 (define_insn "mve_vqsubq_m_n_<supf><mode>"
6605 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6606 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6607 (match_operand:MVE_2 2 "s_register_operand" "w")
6608 (match_operand:<V_elem> 3 "s_register_operand" "r")
6609 (match_operand:HI 4 "vpr_register_operand" "Up")]
6613 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6614 [(set_attr "type" "mve_move")
6615 (set_attr "length""8")])
6618 ;; [vqsubq_m_u, vqsubq_m_s])
6620 (define_insn "mve_vqsubq_m_<supf><mode>"
6622 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6623 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6624 (match_operand:MVE_2 2 "s_register_operand" "w")
6625 (match_operand:MVE_2 3 "s_register_operand" "w")
6626 (match_operand:HI 4 "vpr_register_operand" "Up")]
6630 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6631 [(set_attr "type" "mve_move")
6632 (set_attr "length""8")])
6635 ;; [vrhaddq_m_u, vrhaddq_m_s])
6637 (define_insn "mve_vrhaddq_m_<supf><mode>"
6639 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6640 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6641 (match_operand:MVE_2 2 "s_register_operand" "w")
6642 (match_operand:MVE_2 3 "s_register_operand" "w")
6643 (match_operand:HI 4 "vpr_register_operand" "Up")]
6647 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6648 [(set_attr "type" "mve_move")
6649 (set_attr "length""8")])
6652 ;; [vrmulhq_m_u, vrmulhq_m_s])
6654 (define_insn "mve_vrmulhq_m_<supf><mode>"
6656 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6657 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6658 (match_operand:MVE_2 2 "s_register_operand" "w")
6659 (match_operand:MVE_2 3 "s_register_operand" "w")
6660 (match_operand:HI 4 "vpr_register_operand" "Up")]
6664 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6665 [(set_attr "type" "mve_move")
6666 (set_attr "length""8")])
6669 ;; [vrshlq_m_s, vrshlq_m_u])
6671 (define_insn "mve_vrshlq_m_<supf><mode>"
6673 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6674 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6675 (match_operand:MVE_2 2 "s_register_operand" "w")
6676 (match_operand:MVE_2 3 "s_register_operand" "w")
6677 (match_operand:HI 4 "vpr_register_operand" "Up")]
6681 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6682 [(set_attr "type" "mve_move")
6683 (set_attr "length""8")])
6686 ;; [vrshrq_m_n_s, vrshrq_m_n_u])
6688 (define_insn "mve_vrshrq_m_n_<supf><mode>"
6690 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6691 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6692 (match_operand:MVE_2 2 "s_register_operand" "w")
6693 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6694 (match_operand:HI 4 "vpr_register_operand" "Up")]
6698 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6699 [(set_attr "type" "mve_move")
6700 (set_attr "length""8")])
6703 ;; [vshlq_m_n_s, vshlq_m_n_u])
6705 (define_insn "mve_vshlq_m_n_<supf><mode>"
6707 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6708 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6709 (match_operand:MVE_2 2 "s_register_operand" "w")
6710 (match_operand:SI 3 "immediate_operand" "i")
6711 (match_operand:HI 4 "vpr_register_operand" "Up")]
6715 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6716 [(set_attr "type" "mve_move")
6717 (set_attr "length""8")])
6720 ;; [vshrq_m_n_s, vshrq_m_n_u])
6722 (define_insn "mve_vshrq_m_n_<supf><mode>"
6724 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6725 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6726 (match_operand:MVE_2 2 "s_register_operand" "w")
6727 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6728 (match_operand:HI 4 "vpr_register_operand" "Up")]
6732 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6733 [(set_attr "type" "mve_move")
6734 (set_attr "length""8")])
6737 ;; [vsliq_m_n_u, vsliq_m_n_s])
6739 (define_insn "mve_vsliq_m_n_<supf><mode>"
6741 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6742 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6743 (match_operand:MVE_2 2 "s_register_operand" "w")
6744 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
6745 (match_operand:HI 4 "vpr_register_operand" "Up")]
6749 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
6750 [(set_attr "type" "mve_move")
6751 (set_attr "length""8")])
6754 ;; [vsubq_m_n_s, vsubq_m_n_u])
6756 (define_insn "mve_vsubq_m_n_<supf><mode>"
6758 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6759 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6760 (match_operand:MVE_2 2 "s_register_operand" "w")
6761 (match_operand:<V_elem> 3 "s_register_operand" "r")
6762 (match_operand:HI 4 "vpr_register_operand" "Up")]
6766 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
6767 [(set_attr "type" "mve_move")
6768 (set_attr "length""8")])
6771 ;; [vhcaddq_rot270_m_s])
6773 (define_insn "mve_vhcaddq_rot270_m_s<mode>"
6775 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6776 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6777 (match_operand:MVE_2 2 "s_register_operand" "w")
6778 (match_operand:MVE_2 3 "s_register_operand" "w")
6779 (match_operand:HI 4 "vpr_register_operand" "Up")]
6780 VHCADDQ_ROT270_M_S))
6783 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
6784 [(set_attr "type" "mve_move")
6785 (set_attr "length""8")])
6788 ;; [vhcaddq_rot90_m_s])
6790 (define_insn "mve_vhcaddq_rot90_m_s<mode>"
6792 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6793 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6794 (match_operand:MVE_2 2 "s_register_operand" "w")
6795 (match_operand:MVE_2 3 "s_register_operand" "w")
6796 (match_operand:HI 4 "vpr_register_operand" "Up")]
6800 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
6801 [(set_attr "type" "mve_move")
6802 (set_attr "length""8")])
6805 ;; [vmladavaxq_p_s])
6807 (define_insn "mve_vmladavaxq_p_s<mode>"
6809 (set (match_operand:SI 0 "s_register_operand" "=e")
6810 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6811 (match_operand:MVE_2 2 "s_register_operand" "w")
6812 (match_operand:MVE_2 3 "s_register_operand" "w")
6813 (match_operand:HI 4 "vpr_register_operand" "Up")]
6817 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6818 [(set_attr "type" "mve_move")
6819 (set_attr "length""8")])
6824 (define_insn "mve_vmlsdavaq_p_s<mode>"
6826 (set (match_operand:SI 0 "s_register_operand" "=e")
6827 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6828 (match_operand:MVE_2 2 "s_register_operand" "w")
6829 (match_operand:MVE_2 3 "s_register_operand" "w")
6830 (match_operand:HI 4 "vpr_register_operand" "Up")]
6834 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
6835 [(set_attr "type" "mve_move")
6836 (set_attr "length""8")])
6839 ;; [vmlsdavaxq_p_s])
6841 (define_insn "mve_vmlsdavaxq_p_s<mode>"
6843 (set (match_operand:SI 0 "s_register_operand" "=e")
6844 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6845 (match_operand:MVE_2 2 "s_register_operand" "w")
6846 (match_operand:MVE_2 3 "s_register_operand" "w")
6847 (match_operand:HI 4 "vpr_register_operand" "Up")]
6851 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6852 [(set_attr "type" "mve_move")
6853 (set_attr "length""8")])
6858 (define_insn "mve_vqdmladhq_m_s<mode>"
6860 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6861 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6862 (match_operand:MVE_2 2 "s_register_operand" "w")
6863 (match_operand:MVE_2 3 "s_register_operand" "w")
6864 (match_operand:HI 4 "vpr_register_operand" "Up")]
6868 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6869 [(set_attr "type" "mve_move")
6870 (set_attr "length""8")])
6873 ;; [vqdmladhxq_m_s])
6875 (define_insn "mve_vqdmladhxq_m_s<mode>"
6877 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6878 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6879 (match_operand:MVE_2 2 "s_register_operand" "w")
6880 (match_operand:MVE_2 3 "s_register_operand" "w")
6881 (match_operand:HI 4 "vpr_register_operand" "Up")]
6885 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6886 [(set_attr "type" "mve_move")
6887 (set_attr "length""8")])
6892 (define_insn "mve_vqdmlsdhq_m_s<mode>"
6894 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6895 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6896 (match_operand:MVE_2 2 "s_register_operand" "w")
6897 (match_operand:MVE_2 3 "s_register_operand" "w")
6898 (match_operand:HI 4 "vpr_register_operand" "Up")]
6902 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6903 [(set_attr "type" "mve_move")
6904 (set_attr "length""8")])
6907 ;; [vqdmlsdhxq_m_s])
6909 (define_insn "mve_vqdmlsdhxq_m_s<mode>"
6911 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6912 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6913 (match_operand:MVE_2 2 "s_register_operand" "w")
6914 (match_operand:MVE_2 3 "s_register_operand" "w")
6915 (match_operand:HI 4 "vpr_register_operand" "Up")]
6919 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6920 [(set_attr "type" "mve_move")
6921 (set_attr "length""8")])
6924 ;; [vqdmulhq_m_n_s])
6926 (define_insn "mve_vqdmulhq_m_n_s<mode>"
6928 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6929 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6930 (match_operand:MVE_2 2 "s_register_operand" "w")
6931 (match_operand:<V_elem> 3 "s_register_operand" "r")
6932 (match_operand:HI 4 "vpr_register_operand" "Up")]
6936 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6937 [(set_attr "type" "mve_move")
6938 (set_attr "length""8")])
6943 (define_insn "mve_vqdmulhq_m_s<mode>"
6945 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6946 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6947 (match_operand:MVE_2 2 "s_register_operand" "w")
6948 (match_operand:MVE_2 3 "s_register_operand" "w")
6949 (match_operand:HI 4 "vpr_register_operand" "Up")]
6953 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6954 [(set_attr "type" "mve_move")
6955 (set_attr "length""8")])
6958 ;; [vqrdmladhq_m_s])
6960 (define_insn "mve_vqrdmladhq_m_s<mode>"
6962 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6963 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6964 (match_operand:MVE_2 2 "s_register_operand" "w")
6965 (match_operand:MVE_2 3 "s_register_operand" "w")
6966 (match_operand:HI 4 "vpr_register_operand" "Up")]
6970 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6971 [(set_attr "type" "mve_move")
6972 (set_attr "length""8")])
6975 ;; [vqrdmladhxq_m_s])
6977 (define_insn "mve_vqrdmladhxq_m_s<mode>"
6979 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6980 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6981 (match_operand:MVE_2 2 "s_register_operand" "w")
6982 (match_operand:MVE_2 3 "s_register_operand" "w")
6983 (match_operand:HI 4 "vpr_register_operand" "Up")]
6987 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6988 [(set_attr "type" "mve_move")
6989 (set_attr "length""8")])
6992 ;; [vqrdmlsdhq_m_s])
6994 (define_insn "mve_vqrdmlsdhq_m_s<mode>"
6996 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6997 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6998 (match_operand:MVE_2 2 "s_register_operand" "w")
6999 (match_operand:MVE_2 3 "s_register_operand" "w")
7000 (match_operand:HI 4 "vpr_register_operand" "Up")]
7004 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
7005 [(set_attr "type" "mve_move")
7006 (set_attr "length""8")])
7009 ;; [vqrdmlsdhxq_m_s])
7011 (define_insn "mve_vqrdmlsdhxq_m_s<mode>"
7013 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
7014 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
7015 (match_operand:MVE_2 2 "s_register_operand" "w")
7016 (match_operand:MVE_2 3 "s_register_operand" "w")
7017 (match_operand:HI 4 "vpr_register_operand" "Up")]
7021 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
7022 [(set_attr "type" "mve_move")
7023 (set_attr "length""8")])
7026 ;; [vqrdmulhq_m_n_s])
7028 (define_insn "mve_vqrdmulhq_m_n_s<mode>"
7030 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
7031 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
7032 (match_operand:MVE_2 2 "s_register_operand" "w")
7033 (match_operand:<V_elem> 3 "s_register_operand" "r")
7034 (match_operand:HI 4 "vpr_register_operand" "Up")]
7038 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
7039 [(set_attr "type" "mve_move")
7040 (set_attr "length""8")])
7045 (define_insn "mve_vqrdmulhq_m_s<mode>"
7047 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
7048 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
7049 (match_operand:MVE_2 2 "s_register_operand" "w")
7050 (match_operand:MVE_2 3 "s_register_operand" "w")
7051 (match_operand:HI 4 "vpr_register_operand" "Up")]
7055 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
7056 [(set_attr "type" "mve_move")
7057 (set_attr "length""8")])
7060 ;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
7062 (define_insn "mve_vmlaldavaq_p_<supf><mode>"
7064 (set (match_operand:DI 0 "s_register_operand" "=r")
7065 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7066 (match_operand:MVE_5 2 "s_register_operand" "w")
7067 (match_operand:MVE_5 3 "s_register_operand" "w")
7068 (match_operand:HI 4 "vpr_register_operand" "Up")]
7072 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
7073 [(set_attr "type" "mve_move")
7074 (set_attr "length""8")])
7077 ;; [vmlaldavaxq_p_u, vmlaldavaxq_p_s])
7079 (define_insn "mve_vmlaldavaxq_p_<supf><mode>"
7081 (set (match_operand:DI 0 "s_register_operand" "=r")
7082 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7083 (match_operand:MVE_5 2 "s_register_operand" "w")
7084 (match_operand:MVE_5 3 "s_register_operand" "w")
7085 (match_operand:HI 4 "vpr_register_operand" "Up")]
7089 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
7090 [(set_attr "type" "mve_move")
7091 (set_attr "length""8")])
7094 ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
7096 (define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
7098 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7099 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7100 (match_operand:MVE_5 2 "s_register_operand" "w")
7101 (match_operand:SI 3 "mve_imm_8" "Rb")
7102 (match_operand:HI 4 "vpr_register_operand" "Up")]
7106 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3"
7107 [(set_attr "type" "mve_move")
7108 (set_attr "length""8")])
7111 ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
7113 (define_insn "mve_vqrshrntq_m_n_<supf><mode>"
7115 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7116 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7117 (match_operand:MVE_5 2 "s_register_operand" "w")
7118 (match_operand:SI 3 "mve_imm_8" "Rb")
7119 (match_operand:HI 4 "vpr_register_operand" "Up")]
7123 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3"
7124 [(set_attr "type" "mve_move")
7125 (set_attr "length""8")])
7128 ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
7130 (define_insn "mve_vqshrnbq_m_n_<supf><mode>"
7132 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7133 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7134 (match_operand:MVE_5 2 "s_register_operand" "w")
7135 (match_operand:SI 3 "<MVE_pred1>" "<MVE_constraint1>")
7136 (match_operand:HI 4 "vpr_register_operand" "Up")]
7139 "TARGET_HAVE_MVE && arm_mve_immediate_check (operands[3], <MODE>mode, 0)"
7140 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
7141 [(set_attr "type" "mve_move")
7142 (set_attr "length""8")])
7145 ;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
7147 (define_insn "mve_vqshrntq_m_n_<supf><mode>"
7149 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7150 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7151 (match_operand:MVE_5 2 "s_register_operand" "w")
7152 (match_operand:SI 3 "mve_imm_8" "Rb")
7153 (match_operand:HI 4 "vpr_register_operand" "Up")]
7157 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
7158 [(set_attr "type" "mve_move")
7159 (set_attr "length""8")])
7162 ;; [vrmlaldavhaq_p_s])
7164 (define_insn "mve_vrmlaldavhaq_p_sv4si"
7166 (set (match_operand:DI 0 "s_register_operand" "=r")
7167 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7168 (match_operand:V4SI 2 "s_register_operand" "w")
7169 (match_operand:V4SI 3 "s_register_operand" "w")
7170 (match_operand:HI 4 "vpr_register_operand" "Up")]
7174 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
7175 [(set_attr "type" "mve_move")
7176 (set_attr "length""8")])
7179 ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
7181 (define_insn "mve_vrshrnbq_m_n_<supf><mode>"
7183 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7184 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7185 (match_operand:MVE_5 2 "s_register_operand" "w")
7186 (match_operand:SI 3 "mve_imm_8" "Rb")
7187 (match_operand:HI 4 "vpr_register_operand" "Up")]
7191 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
7192 [(set_attr "type" "mve_move")
7193 (set_attr "length""8")])
7196 ;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
7198 (define_insn "mve_vrshrntq_m_n_<supf><mode>"
7200 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7201 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7202 (match_operand:MVE_5 2 "s_register_operand" "w")
7203 (match_operand:SI 3 "mve_imm_8" "Rb")
7204 (match_operand:HI 4 "vpr_register_operand" "Up")]
7208 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
7209 [(set_attr "type" "mve_move")
7210 (set_attr "length""8")])
7213 ;; [vshllbq_m_n_u, vshllbq_m_n_s])
7215 (define_insn "mve_vshllbq_m_n_<supf><mode>"
7217 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
7218 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7219 (match_operand:MVE_3 2 "s_register_operand" "w")
7220 (match_operand:SI 3 "immediate_operand" "i")
7221 (match_operand:HI 4 "vpr_register_operand" "Up")]
7225 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
7226 [(set_attr "type" "mve_move")
7227 (set_attr "length""8")])
7230 ;; [vshlltq_m_n_u, vshlltq_m_n_s])
7232 (define_insn "mve_vshlltq_m_n_<supf><mode>"
7234 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
7235 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7236 (match_operand:MVE_3 2 "s_register_operand" "w")
7237 (match_operand:SI 3 "immediate_operand" "i")
7238 (match_operand:HI 4 "vpr_register_operand" "Up")]
7242 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
7243 [(set_attr "type" "mve_move")
7244 (set_attr "length""8")])
7247 ;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
7249 (define_insn "mve_vshrnbq_m_n_<supf><mode>"
7251 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7252 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7253 (match_operand:MVE_5 2 "s_register_operand" "w")
7254 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
7255 (match_operand:HI 4 "vpr_register_operand" "Up")]
7259 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
7260 [(set_attr "type" "mve_move")
7261 (set_attr "length""8")])
7264 ;; [vshrntq_m_n_s, vshrntq_m_n_u])
7266 (define_insn "mve_vshrntq_m_n_<supf><mode>"
7268 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7269 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7270 (match_operand:MVE_5 2 "s_register_operand" "w")
7271 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
7272 (match_operand:HI 4 "vpr_register_operand" "Up")]
7276 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
7277 [(set_attr "type" "mve_move")
7278 (set_attr "length""8")])
7281 ;; [vmlsldavaq_p_s])
7283 (define_insn "mve_vmlsldavaq_p_s<mode>"
7285 (set (match_operand:DI 0 "s_register_operand" "=r")
7286 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7287 (match_operand:MVE_5 2 "s_register_operand" "w")
7288 (match_operand:MVE_5 3 "s_register_operand" "w")
7289 (match_operand:HI 4 "vpr_register_operand" "Up")]
7293 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
7294 [(set_attr "type" "mve_move")
7295 (set_attr "length""8")])
7298 ;; [vmlsldavaxq_p_s])
7300 (define_insn "mve_vmlsldavaxq_p_s<mode>"
7302 (set (match_operand:DI 0 "s_register_operand" "=r")
7303 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7304 (match_operand:MVE_5 2 "s_register_operand" "w")
7305 (match_operand:MVE_5 3 "s_register_operand" "w")
7306 (match_operand:HI 4 "vpr_register_operand" "Up")]
7310 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
7311 [(set_attr "type" "mve_move")
7312 (set_attr "length""8")])
7315 ;; [vmullbq_poly_m_p])
7317 (define_insn "mve_vmullbq_poly_m_p<mode>"
7319 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
7320 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7321 (match_operand:MVE_3 2 "s_register_operand" "w")
7322 (match_operand:MVE_3 3 "s_register_operand" "w")
7323 (match_operand:HI 4 "vpr_register_operand" "Up")]
7327 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
7328 [(set_attr "type" "mve_move")
7329 (set_attr "length""8")])
7332 ;; [vmulltq_poly_m_p])
7334 (define_insn "mve_vmulltq_poly_m_p<mode>"
7336 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
7337 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7338 (match_operand:MVE_3 2 "s_register_operand" "w")
7339 (match_operand:MVE_3 3 "s_register_operand" "w")
7340 (match_operand:HI 4 "vpr_register_operand" "Up")]
7344 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
7345 [(set_attr "type" "mve_move")
7346 (set_attr "length""8")])
7349 ;; [vqdmullbq_m_n_s])
7351 (define_insn "mve_vqdmullbq_m_n_s<mode>"
7353 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
7354 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7355 (match_operand:MVE_5 2 "s_register_operand" "w")
7356 (match_operand:<V_elem> 3 "s_register_operand" "r")
7357 (match_operand:HI 4 "vpr_register_operand" "Up")]
7361 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
7362 [(set_attr "type" "mve_move")
7363 (set_attr "length""8")])
7368 (define_insn "mve_vqdmullbq_m_s<mode>"
7370 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
7371 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7372 (match_operand:MVE_5 2 "s_register_operand" "w")
7373 (match_operand:MVE_5 3 "s_register_operand" "w")
7374 (match_operand:HI 4 "vpr_register_operand" "Up")]
7378 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
7379 [(set_attr "type" "mve_move")
7380 (set_attr "length""8")])
7383 ;; [vqdmulltq_m_n_s])
7385 (define_insn "mve_vqdmulltq_m_n_s<mode>"
7387 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
7388 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7389 (match_operand:MVE_5 2 "s_register_operand" "w")
7390 (match_operand:<V_elem> 3 "s_register_operand" "r")
7391 (match_operand:HI 4 "vpr_register_operand" "Up")]
7395 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
7396 [(set_attr "type" "mve_move")
7397 (set_attr "length""8")])
7402 (define_insn "mve_vqdmulltq_m_s<mode>"
7404 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
7405 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7406 (match_operand:MVE_5 2 "s_register_operand" "w")
7407 (match_operand:MVE_5 3 "s_register_operand" "w")
7408 (match_operand:HI 4 "vpr_register_operand" "Up")]
7412 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
7413 [(set_attr "type" "mve_move")
7414 (set_attr "length""8")])
7417 ;; [vqrshrunbq_m_n_s])
7419 (define_insn "mve_vqrshrunbq_m_n_s<mode>"
7421 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7422 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7423 (match_operand:MVE_5 2 "s_register_operand" "w")
7424 (match_operand:SI 3 "mve_imm_8" "Rb")
7425 (match_operand:HI 4 "vpr_register_operand" "Up")]
7429 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
7430 [(set_attr "type" "mve_move")
7431 (set_attr "length""8")])
7434 ;; [vqrshruntq_m_n_s])
7436 (define_insn "mve_vqrshruntq_m_n_s<mode>"
7438 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7439 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7440 (match_operand:MVE_5 2 "s_register_operand" "w")
7441 (match_operand:SI 3 "mve_imm_8" "Rb")
7442 (match_operand:HI 4 "vpr_register_operand" "Up")]
7446 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
7447 [(set_attr "type" "mve_move")
7448 (set_attr "length""8")])
7451 ;; [vqshrunbq_m_n_s])
7453 (define_insn "mve_vqshrunbq_m_n_s<mode>"
7455 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7456 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7457 (match_operand:MVE_5 2 "s_register_operand" "w")
7458 (match_operand:SI 3 "mve_imm_8" "Rb")
7459 (match_operand:HI 4 "vpr_register_operand" "Up")]
7463 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
7464 [(set_attr "type" "mve_move")
7465 (set_attr "length""8")])
7468 ;; [vqshruntq_m_n_s])
7470 (define_insn "mve_vqshruntq_m_n_s<mode>"
7472 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7473 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7474 (match_operand:MVE_5 2 "s_register_operand" "w")
7475 (match_operand:SI 3 "mve_imm_8" "Rb")
7476 (match_operand:HI 4 "vpr_register_operand" "Up")]
7480 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
7481 [(set_attr "type" "mve_move")
7482 (set_attr "length""8")])
7485 ;; [vrmlaldavhaq_p_u])
7487 (define_insn "mve_vrmlaldavhaq_p_uv4si"
7489 (set (match_operand:DI 0 "s_register_operand" "=r")
7490 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7491 (match_operand:V4SI 2 "s_register_operand" "w")
7492 (match_operand:V4SI 3 "s_register_operand" "w")
7493 (match_operand:HI 4 "vpr_register_operand" "Up")]
7497 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
7498 [(set_attr "type" "mve_move")
7499 (set_attr "length""8")])
7502 ;; [vrmlaldavhaxq_p_s])
7504 (define_insn "mve_vrmlaldavhaxq_p_sv4si"
7506 (set (match_operand:DI 0 "s_register_operand" "=r")
7507 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7508 (match_operand:V4SI 2 "s_register_operand" "w")
7509 (match_operand:V4SI 3 "s_register_operand" "w")
7510 (match_operand:HI 4 "vpr_register_operand" "Up")]
7514 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
7515 [(set_attr "type" "mve_move")
7516 (set_attr "length""8")])
7519 ;; [vrmlsldavhaq_p_s])
7521 (define_insn "mve_vrmlsldavhaq_p_sv4si"
7523 (set (match_operand:DI 0 "s_register_operand" "=r")
7524 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7525 (match_operand:V4SI 2 "s_register_operand" "w")
7526 (match_operand:V4SI 3 "s_register_operand" "w")
7527 (match_operand:HI 4 "vpr_register_operand" "Up")]
7531 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
7532 [(set_attr "type" "mve_move")
7533 (set_attr "length""8")])
7536 ;; [vrmlsldavhaxq_p_s])
7538 (define_insn "mve_vrmlsldavhaxq_p_sv4si"
7540 (set (match_operand:DI 0 "s_register_operand" "=r")
7541 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7542 (match_operand:V4SI 2 "s_register_operand" "w")
7543 (match_operand:V4SI 3 "s_register_operand" "w")
7544 (match_operand:HI 4 "vpr_register_operand" "Up")]
7548 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
7549 [(set_attr "type" "mve_move")
7550 (set_attr "length""8")])
7554 (define_insn "mve_vabdq_m_f<mode>"
7556 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7557 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7558 (match_operand:MVE_0 2 "s_register_operand" "w")
7559 (match_operand:MVE_0 3 "s_register_operand" "w")
7560 (match_operand:HI 4 "vpr_register_operand" "Up")]
7563 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7564 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3"
7565 [(set_attr "type" "mve_move")
7566 (set_attr "length""8")])
7571 (define_insn "mve_vaddq_m_f<mode>"
7573 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7574 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7575 (match_operand:MVE_0 2 "s_register_operand" "w")
7576 (match_operand:MVE_0 3 "s_register_operand" "w")
7577 (match_operand:HI 4 "vpr_register_operand" "Up")]
7580 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7581 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3"
7582 [(set_attr "type" "mve_move")
7583 (set_attr "length""8")])
7588 (define_insn "mve_vaddq_m_n_f<mode>"
7590 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7591 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7592 (match_operand:MVE_0 2 "s_register_operand" "w")
7593 (match_operand:<V_elem> 3 "s_register_operand" "r")
7594 (match_operand:HI 4 "vpr_register_operand" "Up")]
7597 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7598 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3"
7599 [(set_attr "type" "mve_move")
7600 (set_attr "length""8")])
7605 (define_insn "mve_vandq_m_f<mode>"
7607 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7608 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7609 (match_operand:MVE_0 2 "s_register_operand" "w")
7610 (match_operand:MVE_0 3 "s_register_operand" "w")
7611 (match_operand:HI 4 "vpr_register_operand" "Up")]
7614 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7615 "vpst\;vandt %q0, %q2, %q3"
7616 [(set_attr "type" "mve_move")
7617 (set_attr "length""8")])
7622 (define_insn "mve_vbicq_m_f<mode>"
7624 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7625 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7626 (match_operand:MVE_0 2 "s_register_operand" "w")
7627 (match_operand:MVE_0 3 "s_register_operand" "w")
7628 (match_operand:HI 4 "vpr_register_operand" "Up")]
7631 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7632 "vpst\;vbict %q0, %q2, %q3"
7633 [(set_attr "type" "mve_move")
7634 (set_attr "length""8")])
7639 (define_insn "mve_vbrsrq_m_n_f<mode>"
7641 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7642 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7643 (match_operand:MVE_0 2 "s_register_operand" "w")
7644 (match_operand:SI 3 "s_register_operand" "r")
7645 (match_operand:HI 4 "vpr_register_operand" "Up")]
7648 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7649 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
7650 [(set_attr "type" "mve_move")
7651 (set_attr "length""8")])
7654 ;; [vcaddq_rot270_m_f])
7656 (define_insn "mve_vcaddq_rot270_m_f<mode>"
7658 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7659 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7660 (match_operand:MVE_0 2 "s_register_operand" "w")
7661 (match_operand:MVE_0 3 "s_register_operand" "w")
7662 (match_operand:HI 4 "vpr_register_operand" "Up")]
7665 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7666 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7667 [(set_attr "type" "mve_move")
7668 (set_attr "length""8")])
7671 ;; [vcaddq_rot90_m_f])
7673 (define_insn "mve_vcaddq_rot90_m_f<mode>"
7675 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7676 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7677 (match_operand:MVE_0 2 "s_register_operand" "w")
7678 (match_operand:MVE_0 3 "s_register_operand" "w")
7679 (match_operand:HI 4 "vpr_register_operand" "Up")]
7682 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7683 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7684 [(set_attr "type" "mve_move")
7685 (set_attr "length""8")])
7690 (define_insn "mve_vcmlaq_m_f<mode>"
7692 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7693 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7694 (match_operand:MVE_0 2 "s_register_operand" "w")
7695 (match_operand:MVE_0 3 "s_register_operand" "w")
7696 (match_operand:HI 4 "vpr_register_operand" "Up")]
7699 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7700 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7701 [(set_attr "type" "mve_move")
7702 (set_attr "length""8")])
7705 ;; [vcmlaq_rot180_m_f])
7707 (define_insn "mve_vcmlaq_rot180_m_f<mode>"
7709 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7710 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7711 (match_operand:MVE_0 2 "s_register_operand" "w")
7712 (match_operand:MVE_0 3 "s_register_operand" "w")
7713 (match_operand:HI 4 "vpr_register_operand" "Up")]
7716 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7717 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7718 [(set_attr "type" "mve_move")
7719 (set_attr "length""8")])
7722 ;; [vcmlaq_rot270_m_f])
7724 (define_insn "mve_vcmlaq_rot270_m_f<mode>"
7726 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7727 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7728 (match_operand:MVE_0 2 "s_register_operand" "w")
7729 (match_operand:MVE_0 3 "s_register_operand" "w")
7730 (match_operand:HI 4 "vpr_register_operand" "Up")]
7733 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7734 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7735 [(set_attr "type" "mve_move")
7736 (set_attr "length""8")])
7739 ;; [vcmlaq_rot90_m_f])
7741 (define_insn "mve_vcmlaq_rot90_m_f<mode>"
7743 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7744 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7745 (match_operand:MVE_0 2 "s_register_operand" "w")
7746 (match_operand:MVE_0 3 "s_register_operand" "w")
7747 (match_operand:HI 4 "vpr_register_operand" "Up")]
7750 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7751 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7752 [(set_attr "type" "mve_move")
7753 (set_attr "length""8")])
7758 (define_insn "mve_vcmulq_m_f<mode>"
7760 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7761 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7762 (match_operand:MVE_0 2 "s_register_operand" "w")
7763 (match_operand:MVE_0 3 "s_register_operand" "w")
7764 (match_operand:HI 4 "vpr_register_operand" "Up")]
7767 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7768 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7769 [(set_attr "type" "mve_move")
7770 (set_attr "length""8")])
7773 ;; [vcmulq_rot180_m_f])
7775 (define_insn "mve_vcmulq_rot180_m_f<mode>"
7777 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7778 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7779 (match_operand:MVE_0 2 "s_register_operand" "w")
7780 (match_operand:MVE_0 3 "s_register_operand" "w")
7781 (match_operand:HI 4 "vpr_register_operand" "Up")]
7784 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7785 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7786 [(set_attr "type" "mve_move")
7787 (set_attr "length""8")])
7790 ;; [vcmulq_rot270_m_f])
7792 (define_insn "mve_vcmulq_rot270_m_f<mode>"
7794 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7795 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7796 (match_operand:MVE_0 2 "s_register_operand" "w")
7797 (match_operand:MVE_0 3 "s_register_operand" "w")
7798 (match_operand:HI 4 "vpr_register_operand" "Up")]
7801 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7802 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7803 [(set_attr "type" "mve_move")
7804 (set_attr "length""8")])
7807 ;; [vcmulq_rot90_m_f])
7809 (define_insn "mve_vcmulq_rot90_m_f<mode>"
7811 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7812 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7813 (match_operand:MVE_0 2 "s_register_operand" "w")
7814 (match_operand:MVE_0 3 "s_register_operand" "w")
7815 (match_operand:HI 4 "vpr_register_operand" "Up")]
7818 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7819 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7820 [(set_attr "type" "mve_move")
7821 (set_attr "length""8")])
7826 (define_insn "mve_veorq_m_f<mode>"
7828 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7829 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7830 (match_operand:MVE_0 2 "s_register_operand" "w")
7831 (match_operand:MVE_0 3 "s_register_operand" "w")
7832 (match_operand:HI 4 "vpr_register_operand" "Up")]
7835 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7836 "vpst\;veort %q0, %q2, %q3"
7837 [(set_attr "type" "mve_move")
7838 (set_attr "length""8")])
7843 (define_insn "mve_vfmaq_m_f<mode>"
7845 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7846 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7847 (match_operand:MVE_0 2 "s_register_operand" "w")
7848 (match_operand:MVE_0 3 "s_register_operand" "w")
7849 (match_operand:HI 4 "vpr_register_operand" "Up")]
7852 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7853 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3"
7854 [(set_attr "type" "mve_move")
7855 (set_attr "length""8")])
7860 (define_insn "mve_vfmaq_m_n_f<mode>"
7862 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7863 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7864 (match_operand:MVE_0 2 "s_register_operand" "w")
7865 (match_operand:<V_elem> 3 "s_register_operand" "r")
7866 (match_operand:HI 4 "vpr_register_operand" "Up")]
7869 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7870 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3"
7871 [(set_attr "type" "mve_move")
7872 (set_attr "length""8")])
7877 (define_insn "mve_vfmasq_m_n_f<mode>"
7879 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7880 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7881 (match_operand:MVE_0 2 "s_register_operand" "w")
7882 (match_operand:<V_elem> 3 "s_register_operand" "r")
7883 (match_operand:HI 4 "vpr_register_operand" "Up")]
7886 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7887 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3"
7888 [(set_attr "type" "mve_move")
7889 (set_attr "length""8")])
7894 (define_insn "mve_vfmsq_m_f<mode>"
7896 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7897 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7898 (match_operand:MVE_0 2 "s_register_operand" "w")
7899 (match_operand:MVE_0 3 "s_register_operand" "w")
7900 (match_operand:HI 4 "vpr_register_operand" "Up")]
7903 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7904 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3"
7905 [(set_attr "type" "mve_move")
7906 (set_attr "length""8")])
7911 (define_insn "mve_vmaxnmq_m_f<mode>"
7913 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7914 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7915 (match_operand:MVE_0 2 "s_register_operand" "w")
7916 (match_operand:MVE_0 3 "s_register_operand" "w")
7917 (match_operand:HI 4 "vpr_register_operand" "Up")]
7920 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7921 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7922 [(set_attr "type" "mve_move")
7923 (set_attr "length""8")])
7928 (define_insn "mve_vminnmq_m_f<mode>"
7930 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7931 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7932 (match_operand:MVE_0 2 "s_register_operand" "w")
7933 (match_operand:MVE_0 3 "s_register_operand" "w")
7934 (match_operand:HI 4 "vpr_register_operand" "Up")]
7937 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7938 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7939 [(set_attr "type" "mve_move")
7940 (set_attr "length""8")])
7945 (define_insn "mve_vmulq_m_f<mode>"
7947 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7948 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7949 (match_operand:MVE_0 2 "s_register_operand" "w")
7950 (match_operand:MVE_0 3 "s_register_operand" "w")
7951 (match_operand:HI 4 "vpr_register_operand" "Up")]
7954 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7955 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3"
7956 [(set_attr "type" "mve_move")
7957 (set_attr "length""8")])
7962 (define_insn "mve_vmulq_m_n_f<mode>"
7964 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7965 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7966 (match_operand:MVE_0 2 "s_register_operand" "w")
7967 (match_operand:<V_elem> 3 "s_register_operand" "r")
7968 (match_operand:HI 4 "vpr_register_operand" "Up")]
7971 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7972 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3"
7973 [(set_attr "type" "mve_move")
7974 (set_attr "length""8")])
7979 (define_insn "mve_vornq_m_f<mode>"
7981 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7982 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7983 (match_operand:MVE_0 2 "s_register_operand" "w")
7984 (match_operand:MVE_0 3 "s_register_operand" "w")
7985 (match_operand:HI 4 "vpr_register_operand" "Up")]
7988 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7989 "vpst\;vornt %q0, %q2, %q3"
7990 [(set_attr "type" "mve_move")
7991 (set_attr "length""8")])
7996 (define_insn "mve_vorrq_m_f<mode>"
7998 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7999 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
8000 (match_operand:MVE_0 2 "s_register_operand" "w")
8001 (match_operand:MVE_0 3 "s_register_operand" "w")
8002 (match_operand:HI 4 "vpr_register_operand" "Up")]
8005 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8006 "vpst\;vorrt %q0, %q2, %q3"
8007 [(set_attr "type" "mve_move")
8008 (set_attr "length""8")])
8013 (define_insn "mve_vsubq_m_f<mode>"
8015 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
8016 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
8017 (match_operand:MVE_0 2 "s_register_operand" "w")
8018 (match_operand:MVE_0 3 "s_register_operand" "w")
8019 (match_operand:HI 4 "vpr_register_operand" "Up")]
8022 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8023 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
8024 [(set_attr "type" "mve_move")
8025 (set_attr "length""8")])
8030 (define_insn "mve_vsubq_m_n_f<mode>"
8032 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
8033 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
8034 (match_operand:MVE_0 2 "s_register_operand" "w")
8035 (match_operand:<V_elem> 3 "s_register_operand" "r")
8036 (match_operand:HI 4 "vpr_register_operand" "Up")]
8039 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8040 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
8041 [(set_attr "type" "mve_move")
8042 (set_attr "length""8")])
8045 ;; [vstrbq_s vstrbq_u]
8047 (define_insn "mve_vstrbq_<supf><mode>"
8048 [(set (match_operand:<MVE_B_ELEM> 0 "memory_operand" "=Us")
8049 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
8055 int regno = REGNO (operands[1]);
8056 ops[1] = gen_rtx_REG (TImode, regno);
8057 ops[0] = operands[0];
8058 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
8061 [(set_attr "length" "4")])
8064 ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
8066 (define_insn "mve_vstrbq_scatter_offset_<supf><mode>"
8067 [(set (match_operand:<MVE_B_ELEM> 0 "memory_operand" "=Us")
8068 (unspec:<MVE_B_ELEM>
8069 [(match_operand:MVE_2 1 "s_register_operand" "w")
8070 (match_operand:MVE_2 2 "s_register_operand" "w")]
8076 ops[0] = operands[0];
8077 ops[1] = operands[1];
8078 ops[2] = operands[2];
8079 output_asm_insn("vstrb.<V_sz_elem>\t%q2, [%m0, %q1]",ops);
8082 [(set_attr "length" "4")])
8085 ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
8087 (define_insn "mve_vstrwq_scatter_base_<supf>v4si"
8088 [(set (mem:BLK (scratch))
8090 [(match_operand:V4SI 0 "s_register_operand" "w")
8091 (match_operand:SI 1 "immediate_operand" "i")
8092 (match_operand:V4SI 2 "s_register_operand" "w")]
8098 ops[0] = operands[0];
8099 ops[1] = operands[1];
8100 ops[2] = operands[2];
8101 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
8104 [(set_attr "length" "4")])
8107 ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
8109 (define_insn "mve_vldrbq_gather_offset_<supf><mode>"
8110 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
8111 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
8112 (match_operand:MVE_2 2 "s_register_operand" "w")]
8118 ops[0] = operands[0];
8119 ops[1] = operands[1];
8120 ops[2] = operands[2];
8121 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
8122 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
8124 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
8127 [(set_attr "length" "4")])
8130 ;; [vldrbq_s vldrbq_u]
8132 (define_insn "mve_vldrbq_<supf><mode>"
8133 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
8134 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")]
8140 int regno = REGNO (operands[0]);
8141 ops[0] = gen_rtx_REG (TImode, regno);
8142 ops[1] = operands[1];
8143 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
8146 [(set_attr "length" "4")])
8149 ;; [vldrwq_gather_base_s vldrwq_gather_base_u]
8151 (define_insn "mve_vldrwq_gather_base_<supf>v4si"
8152 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8153 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8154 (match_operand:SI 2 "immediate_operand" "i")]
8160 ops[0] = operands[0];
8161 ops[1] = operands[1];
8162 ops[2] = operands[2];
8163 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
8166 [(set_attr "length" "4")])
8169 ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
8171 (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>"
8172 [(set (match_operand:<MVE_B_ELEM> 0 "memory_operand" "=Us")
8173 (unspec:<MVE_B_ELEM>
8174 [(match_operand:MVE_2 1 "s_register_operand" "w")
8175 (match_operand:MVE_2 2 "s_register_operand" "w")
8176 (match_operand:HI 3 "vpr_register_operand" "Up")]
8182 ops[0] = operands[0];
8183 ops[1] = operands[1];
8184 ops[2] = operands[2];
8185 output_asm_insn ("vpst\n\tvstrbt.<V_sz_elem>\t%q2, [%m0, %q1]",ops);
8188 [(set_attr "length" "8")])
8191 ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
8193 (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
8194 [(set (mem:BLK (scratch))
8196 [(match_operand:V4SI 0 "s_register_operand" "w")
8197 (match_operand:SI 1 "immediate_operand" "i")
8198 (match_operand:V4SI 2 "s_register_operand" "w")
8199 (match_operand:HI 3 "vpr_register_operand" "Up")]
8205 ops[0] = operands[0];
8206 ops[1] = operands[1];
8207 ops[2] = operands[2];
8208 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
8211 [(set_attr "length" "8")])
8214 ;; [vstrbq_p_s vstrbq_p_u]
8216 (define_insn "mve_vstrbq_p_<supf><mode>"
8217 [(set (match_operand:<MVE_B_ELEM> 0 "memory_operand" "=Us")
8218 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
8219 (match_operand:HI 2 "vpr_register_operand" "Up")]
8225 int regno = REGNO (operands[1]);
8226 ops[1] = gen_rtx_REG (TImode, regno);
8227 ops[0] = operands[0];
8228 output_asm_insn ("vpst\n\tvstrbt.<V_sz_elem>\t%q1, %E0",ops);
8231 [(set_attr "length" "8")])
8234 ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
8236 (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
8237 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
8238 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
8239 (match_operand:MVE_2 2 "s_register_operand" "w")
8240 (match_operand:HI 3 "vpr_register_operand" "Up")]
8246 ops[0] = operands[0];
8247 ops[1] = operands[1];
8248 ops[2] = operands[2];
8249 ops[3] = operands[3];
8250 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
8251 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
8253 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
8256 [(set_attr "length" "8")])
8259 ;; [vldrbq_z_s vldrbq_z_u]
8261 (define_insn "mve_vldrbq_z_<supf><mode>"
8262 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
8263 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
8264 (match_operand:HI 2 "vpr_register_operand" "Up")]
8270 int regno = REGNO (operands[0]);
8271 ops[0] = gen_rtx_REG (TImode, regno);
8272 ops[1] = operands[1];
8273 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
8276 [(set_attr "length" "8")])
8279 ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
8281 (define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
8282 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8283 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8284 (match_operand:SI 2 "immediate_operand" "i")
8285 (match_operand:HI 3 "vpr_register_operand" "Up")]
8291 ops[0] = operands[0];
8292 ops[1] = operands[1];
8293 ops[2] = operands[2];
8294 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
8297 [(set_attr "length" "8")])
8302 (define_insn "mve_vldrhq_fv8hf"
8303 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
8304 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")]
8307 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8310 int regno = REGNO (operands[0]);
8311 ops[0] = gen_rtx_REG (TImode, regno);
8312 ops[1] = operands[1];
8313 output_asm_insn ("vldrh.f16\t%q0, %E1",ops);
8316 [(set_attr "length" "4")])
8319 ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
8321 (define_insn "mve_vldrhq_gather_offset_<supf><mode>"
8322 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
8323 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
8324 (match_operand:MVE_6 2 "s_register_operand" "w")]
8330 ops[0] = operands[0];
8331 ops[1] = operands[1];
8332 ops[2] = operands[2];
8333 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
8334 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
8336 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
8339 [(set_attr "length" "4")])
8342 ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
8344 (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
8345 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
8346 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
8347 (match_operand:MVE_6 2 "s_register_operand" "w")
8348 (match_operand:HI 3 "vpr_register_operand" "Up")
8354 ops[0] = operands[0];
8355 ops[1] = operands[1];
8356 ops[2] = operands[2];
8357 ops[3] = operands[3];
8358 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
8359 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
8361 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
8364 [(set_attr "length" "8")])
8367 ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
8369 (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
8370 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
8371 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
8372 (match_operand:MVE_6 2 "s_register_operand" "w")]
8378 ops[0] = operands[0];
8379 ops[1] = operands[1];
8380 ops[2] = operands[2];
8381 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
8382 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
8384 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
8387 [(set_attr "length" "4")])
8390 ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
8392 (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
8393 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
8394 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
8395 (match_operand:MVE_6 2 "s_register_operand" "w")
8396 (match_operand:HI 3 "vpr_register_operand" "Up")
8402 ops[0] = operands[0];
8403 ops[1] = operands[1];
8404 ops[2] = operands[2];
8405 ops[3] = operands[3];
8406 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
8407 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
8409 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
8412 [(set_attr "length" "8")])
8416 ;; [vldrhq_s, vldrhq_u]
8418 (define_insn "mve_vldrhq_<supf><mode>"
8419 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
8420 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")]
8426 int regno = REGNO (operands[0]);
8427 ops[0] = gen_rtx_REG (TImode, regno);
8428 ops[1] = operands[1];
8429 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
8432 [(set_attr "length" "4")])
8437 (define_insn "mve_vldrhq_z_fv8hf"
8438 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
8439 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8440 (match_operand:HI 2 "vpr_register_operand" "Up")]
8443 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8446 int regno = REGNO (operands[0]);
8447 ops[0] = gen_rtx_REG (TImode, regno);
8448 ops[1] = operands[1];
8449 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, %E1",ops);
8452 [(set_attr "length" "8")])
8455 ;; [vldrhq_z_s vldrhq_z_u]
8457 (define_insn "mve_vldrhq_z_<supf><mode>"
8458 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
8459 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
8460 (match_operand:HI 2 "vpr_register_operand" "Up")]
8466 int regno = REGNO (operands[0]);
8467 ops[0] = gen_rtx_REG (TImode, regno);
8468 ops[1] = operands[1];
8469 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
8472 [(set_attr "length" "8")])
8477 (define_insn "mve_vldrwq_fv4sf"
8478 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
8479 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")]
8482 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8485 int regno = REGNO (operands[0]);
8486 ops[0] = gen_rtx_REG (TImode, regno);
8487 ops[1] = operands[1];
8488 output_asm_insn ("vldrw.f32\t%q0, %E1",ops);
8491 [(set_attr "length" "4")])
8494 ;; [vldrwq_s vldrwq_u]
8496 (define_insn "mve_vldrwq_<supf>v4si"
8497 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
8498 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")]
8504 int regno = REGNO (operands[0]);
8505 ops[0] = gen_rtx_REG (TImode, regno);
8506 ops[1] = operands[1];
8507 output_asm_insn ("vldrw.<supf>32\t%q0, %E1",ops);
8510 [(set_attr "length" "4")])
8515 (define_insn "mve_vldrwq_z_fv4sf"
8516 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
8517 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8518 (match_operand:HI 2 "vpr_register_operand" "Up")]
8521 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8524 int regno = REGNO (operands[0]);
8525 ops[0] = gen_rtx_REG (TImode, regno);
8526 ops[1] = operands[1];
8527 output_asm_insn ("vpst\n\tvldrwt.f32\t%q0, %E1",ops);
8530 [(set_attr "length" "8")])
8533 ;; [vldrwq_z_s vldrwq_z_u]
8535 (define_insn "mve_vldrwq_z_<supf>v4si"
8536 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
8537 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8538 (match_operand:HI 2 "vpr_register_operand" "Up")]
8544 int regno = REGNO (operands[0]);
8545 ops[0] = gen_rtx_REG (TImode, regno);
8546 ops[1] = operands[1];
8547 output_asm_insn ("vpst\n\tvldrwt.<supf>32\t%q0, %E1",ops);
8550 [(set_attr "length" "8")])
8552 (define_expand "mve_vld1q_f<mode>"
8553 [(match_operand:MVE_0 0 "s_register_operand")
8554 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "memory_operand")] VLD1Q_F)
8556 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8558 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8562 (define_expand "mve_vld1q_<supf><mode>"
8563 [(match_operand:MVE_2 0 "s_register_operand")
8564 (unspec:MVE_2 [(match_operand:MVE_2 1 "memory_operand")] VLD1Q)
8568 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8573 ;; [vldrdq_gather_base_s vldrdq_gather_base_u]
8575 (define_insn "mve_vldrdq_gather_base_<supf>v2di"
8576 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8577 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8578 (match_operand:SI 2 "immediate_operand" "i")]
8584 ops[0] = operands[0];
8585 ops[1] = operands[1];
8586 ops[2] = operands[2];
8587 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
8590 [(set_attr "length" "4")])
8593 ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
8595 (define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
8596 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8597 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8598 (match_operand:SI 2 "immediate_operand" "i")
8599 (match_operand:HI 3 "vpr_register_operand" "Up")]
8605 ops[0] = operands[0];
8606 ops[1] = operands[1];
8607 ops[2] = operands[2];
8608 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
8611 [(set_attr "length" "8")])
8614 ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
8616 (define_insn "mve_vldrdq_gather_offset_<supf>v2di"
8617 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8618 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8619 (match_operand:V2DI 2 "s_register_operand" "w")]
8625 ops[0] = operands[0];
8626 ops[1] = operands[1];
8627 ops[2] = operands[2];
8628 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
8631 [(set_attr "length" "4")])
8634 ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
8636 (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
8637 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8638 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8639 (match_operand:V2DI 2 "s_register_operand" "w")
8640 (match_operand:HI 3 "vpr_register_operand" "Up")]
8646 ops[0] = operands[0];
8647 ops[1] = operands[1];
8648 ops[2] = operands[2];
8649 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
8652 [(set_attr "length" "8")])
8655 ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
8657 (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
8658 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8659 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8660 (match_operand:V2DI 2 "s_register_operand" "w")]
8666 ops[0] = operands[0];
8667 ops[1] = operands[1];
8668 ops[2] = operands[2];
8669 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8672 [(set_attr "length" "4")])
8675 ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
8677 (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
8678 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8679 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8680 (match_operand:V2DI 2 "s_register_operand" "w")
8681 (match_operand:HI 3 "vpr_register_operand" "Up")]
8687 ops[0] = operands[0];
8688 ops[1] = operands[1];
8689 ops[2] = operands[2];
8690 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8693 [(set_attr "length" "8")])
8696 ;; [vldrhq_gather_offset_f]
8698 (define_insn "mve_vldrhq_gather_offset_fv8hf"
8699 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8700 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8701 (match_operand:V8HI 2 "s_register_operand" "w")]
8704 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8707 ops[0] = operands[0];
8708 ops[1] = operands[1];
8709 ops[2] = operands[2];
8710 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
8713 [(set_attr "length" "4")])
8716 ;; [vldrhq_gather_offset_z_f]
8718 (define_insn "mve_vldrhq_gather_offset_z_fv8hf"
8719 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8720 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8721 (match_operand:V8HI 2 "s_register_operand" "w")
8722 (match_operand:HI 3 "vpr_register_operand" "Up")]
8725 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8728 ops[0] = operands[0];
8729 ops[1] = operands[1];
8730 ops[2] = operands[2];
8731 ops[3] = operands[3];
8732 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
8735 [(set_attr "length" "8")])
8738 ;; [vldrhq_gather_shifted_offset_f]
8740 (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
8741 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8742 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8743 (match_operand:V8HI 2 "s_register_operand" "w")]
8746 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8749 ops[0] = operands[0];
8750 ops[1] = operands[1];
8751 ops[2] = operands[2];
8752 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8755 [(set_attr "length" "4")])
8758 ;; [vldrhq_gather_shifted_offset_z_f]
8760 (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
8761 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8762 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8763 (match_operand:V8HI 2 "s_register_operand" "w")
8764 (match_operand:HI 3 "vpr_register_operand" "Up")]
8767 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8770 ops[0] = operands[0];
8771 ops[1] = operands[1];
8772 ops[2] = operands[2];
8773 ops[3] = operands[3];
8774 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8777 [(set_attr "length" "8")])
8780 ;; [vldrwq_gather_base_f]
8782 (define_insn "mve_vldrwq_gather_base_fv4sf"
8783 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8784 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8785 (match_operand:SI 2 "immediate_operand" "i")]
8788 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8791 ops[0] = operands[0];
8792 ops[1] = operands[1];
8793 ops[2] = operands[2];
8794 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
8797 [(set_attr "length" "4")])
8800 ;; [vldrwq_gather_base_z_f]
8802 (define_insn "mve_vldrwq_gather_base_z_fv4sf"
8803 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8804 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8805 (match_operand:SI 2 "immediate_operand" "i")
8806 (match_operand:HI 3 "vpr_register_operand" "Up")]
8809 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8812 ops[0] = operands[0];
8813 ops[1] = operands[1];
8814 ops[2] = operands[2];
8815 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
8818 [(set_attr "length" "8")])
8821 ;; [vldrwq_gather_offset_f]
8823 (define_insn "mve_vldrwq_gather_offset_fv4sf"
8824 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8825 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8826 (match_operand:V4SI 2 "s_register_operand" "w")]
8829 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8832 ops[0] = operands[0];
8833 ops[1] = operands[1];
8834 ops[2] = operands[2];
8835 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8838 [(set_attr "length" "4")])
8841 ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
8843 (define_insn "mve_vldrwq_gather_offset_<supf>v4si"
8844 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8845 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8846 (match_operand:V4SI 2 "s_register_operand" "w")]
8852 ops[0] = operands[0];
8853 ops[1] = operands[1];
8854 ops[2] = operands[2];
8855 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8858 [(set_attr "length" "4")])
8861 ;; [vldrwq_gather_offset_z_f]
8863 (define_insn "mve_vldrwq_gather_offset_z_fv4sf"
8864 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8865 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8866 (match_operand:V4SI 2 "s_register_operand" "w")
8867 (match_operand:HI 3 "vpr_register_operand" "Up")]
8870 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8873 ops[0] = operands[0];
8874 ops[1] = operands[1];
8875 ops[2] = operands[2];
8876 ops[3] = operands[3];
8877 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8880 [(set_attr "length" "8")])
8883 ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
8885 (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
8886 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8887 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8888 (match_operand:V4SI 2 "s_register_operand" "w")
8889 (match_operand:HI 3 "vpr_register_operand" "Up")]
8895 ops[0] = operands[0];
8896 ops[1] = operands[1];
8897 ops[2] = operands[2];
8898 ops[3] = operands[3];
8899 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8902 [(set_attr "length" "8")])
8905 ;; [vldrwq_gather_shifted_offset_f]
8907 (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
8908 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8909 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8910 (match_operand:V4SI 2 "s_register_operand" "w")]
8913 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8916 ops[0] = operands[0];
8917 ops[1] = operands[1];
8918 ops[2] = operands[2];
8919 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8922 [(set_attr "length" "4")])
8925 ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
8927 (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
8928 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8929 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8930 (match_operand:V4SI 2 "s_register_operand" "w")]
8936 ops[0] = operands[0];
8937 ops[1] = operands[1];
8938 ops[2] = operands[2];
8939 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8942 [(set_attr "length" "4")])
8945 ;; [vldrwq_gather_shifted_offset_z_f]
8947 (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
8948 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8949 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8950 (match_operand:V4SI 2 "s_register_operand" "w")
8951 (match_operand:HI 3 "vpr_register_operand" "Up")]
8954 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8957 ops[0] = operands[0];
8958 ops[1] = operands[1];
8959 ops[2] = operands[2];
8960 ops[3] = operands[3];
8961 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8964 [(set_attr "length" "8")])
8967 ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
8969 (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
8970 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8971 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8972 (match_operand:V4SI 2 "s_register_operand" "w")
8973 (match_operand:HI 3 "vpr_register_operand" "Up")]
8979 ops[0] = operands[0];
8980 ops[1] = operands[1];
8981 ops[2] = operands[2];
8982 ops[3] = operands[3];
8983 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8986 [(set_attr "length" "8")])
8991 (define_insn "mve_vstrhq_fv8hf"
8992 [(set (match_operand:V8HI 0 "memory_operand" "=Us")
8993 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
8996 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8999 int regno = REGNO (operands[1]);
9000 ops[1] = gen_rtx_REG (TImode, regno);
9001 ops[0] = operands[0];
9002 output_asm_insn ("vstrh.16\t%q1, %E0",ops);
9005 [(set_attr "length" "4")])
9010 (define_insn "mve_vstrhq_p_fv8hf"
9011 [(set (match_operand:V8HI 0 "memory_operand" "=Us")
9012 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
9013 (match_operand:HI 2 "vpr_register_operand" "Up")]
9016 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9019 int regno = REGNO (operands[1]);
9020 ops[1] = gen_rtx_REG (TImode, regno);
9021 ops[0] = operands[0];
9022 output_asm_insn ("vpst\n\tvstrht.16\t%q1, %E0",ops);
9025 [(set_attr "length" "8")])
9028 ;; [vstrhq_p_s vstrhq_p_u]
9030 (define_insn "mve_vstrhq_p_<supf><mode>"
9031 [(set (match_operand:<MVE_H_ELEM> 0 "memory_operand" "=Us")
9032 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
9033 (match_operand:HI 2 "vpr_register_operand" "Up")]
9039 int regno = REGNO (operands[1]);
9040 ops[1] = gen_rtx_REG (TImode, regno);
9041 ops[0] = operands[0];
9042 output_asm_insn ("vpst\n\tvstrht.<V_sz_elem>\t%q1, %E0",ops);
9045 [(set_attr "length" "8")])
9048 ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
9050 (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>"
9051 [(set (match_operand:<MVE_H_ELEM> 0 "memory_operand" "=Us")
9052 (unspec:<MVE_H_ELEM>
9053 [(match_operand:MVE_6 1 "s_register_operand" "w")
9054 (match_operand:MVE_6 2 "s_register_operand" "w")
9055 (match_operand:HI 3 "vpr_register_operand" "Up")]
9061 ops[0] = operands[0];
9062 ops[1] = operands[1];
9063 ops[2] = operands[2];
9064 output_asm_insn ("vpst\n\tvstrht.<V_sz_elem>\t%q2, [%m0, %q1]",ops);
9067 [(set_attr "length" "8")])
9070 ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
9072 (define_insn "mve_vstrhq_scatter_offset_<supf><mode>"
9073 [(set (match_operand:<MVE_H_ELEM> 0 "memory_operand" "=Us")
9074 (unspec:<MVE_H_ELEM>
9075 [(match_operand:MVE_6 1 "s_register_operand" "w")
9076 (match_operand:MVE_6 2 "s_register_operand" "w")]
9082 ops[0] = operands[0];
9083 ops[1] = operands[1];
9084 ops[2] = operands[2];
9085 output_asm_insn ("vstrh.<V_sz_elem>\t%q2, [%m0, %q1]",ops);
9088 [(set_attr "length" "4")])
9091 ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
9093 (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
9094 [(set (match_operand:<MVE_H_ELEM> 0 "memory_operand" "=Us")
9095 (unspec:<MVE_H_ELEM>
9096 [(match_operand:MVE_6 1 "s_register_operand" "w")
9097 (match_operand:MVE_6 2 "s_register_operand" "w")
9098 (match_operand:HI 3 "vpr_register_operand" "Up")]
9104 ops[0] = operands[0];
9105 ops[1] = operands[1];
9106 ops[2] = operands[2];
9107 output_asm_insn ("vpst\n\tvstrht.<V_sz_elem>\t%q2, [%m0, %q1, uxtw #1]",ops);
9110 [(set_attr "length" "8")])
9113 ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
9115 (define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
9116 [(set (match_operand:<MVE_H_ELEM> 0 "memory_operand" "=Us")
9117 (unspec:<MVE_H_ELEM>
9118 [(match_operand:MVE_6 1 "s_register_operand" "w")
9119 (match_operand:MVE_6 2 "s_register_operand" "w")]
9125 ops[0] = operands[0];
9126 ops[1] = operands[1];
9127 ops[2] = operands[2];
9128 output_asm_insn ("vstrh.<V_sz_elem>\t%q2, [%m0, %q1, uxtw #1]",ops);
9131 [(set_attr "length" "4")])
9134 ;; [vstrhq_s, vstrhq_u]
9136 (define_insn "mve_vstrhq_<supf><mode>"
9137 [(set (match_operand:<MVE_H_ELEM> 0 "memory_operand" "=Us")
9138 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
9144 int regno = REGNO (operands[1]);
9145 ops[1] = gen_rtx_REG (TImode, regno);
9146 ops[0] = operands[0];
9147 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
9150 [(set_attr "length" "4")])
9155 (define_insn "mve_vstrwq_fv4sf"
9156 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9157 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
9160 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9163 int regno = REGNO (operands[1]);
9164 ops[1] = gen_rtx_REG (TImode, regno);
9165 ops[0] = operands[0];
9166 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
9169 [(set_attr "length" "4")])
9174 (define_insn "mve_vstrwq_p_fv4sf"
9175 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9176 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
9177 (match_operand:HI 2 "vpr_register_operand" "Up")]
9180 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9183 int regno = REGNO (operands[1]);
9184 ops[1] = gen_rtx_REG (TImode, regno);
9185 ops[0] = operands[0];
9186 output_asm_insn ("vpst\n\tvstrwt.32\t%q1, %E0",ops);
9189 [(set_attr "length" "8")])
9192 ;; [vstrwq_p_s vstrwq_p_u]
9194 (define_insn "mve_vstrwq_p_<supf>v4si"
9195 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9196 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9197 (match_operand:HI 2 "vpr_register_operand" "Up")]
9203 int regno = REGNO (operands[1]);
9204 ops[1] = gen_rtx_REG (TImode, regno);
9205 ops[0] = operands[0];
9206 output_asm_insn ("vpst\n\tvstrwt.32\t%q1, %E0",ops);
9209 [(set_attr "length" "8")])
9212 ;; [vstrwq_s vstrwq_u]
9214 (define_insn "mve_vstrwq_<supf>v4si"
9215 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9216 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
9222 int regno = REGNO (operands[1]);
9223 ops[1] = gen_rtx_REG (TImode, regno);
9224 ops[0] = operands[0];
9225 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
9228 [(set_attr "length" "4")])
9230 (define_expand "mve_vst1q_f<mode>"
9231 [(match_operand:<MVE_CNVT> 0 "memory_operand")
9232 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
9234 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
9236 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
9240 (define_expand "mve_vst1q_<supf><mode>"
9241 [(match_operand:MVE_2 0 "memory_operand")
9242 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
9246 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
9251 ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
9253 (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
9254 [(set (mem:BLK (scratch))
9256 [(match_operand:V2DI 0 "s_register_operand" "w")
9257 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
9258 (match_operand:V2DI 2 "s_register_operand" "w")
9259 (match_operand:HI 3 "vpr_register_operand" "Up")]
9265 ops[0] = operands[0];
9266 ops[1] = operands[1];
9267 ops[2] = operands[2];
9268 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
9271 [(set_attr "length" "8")])
9274 ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
9276 (define_insn "mve_vstrdq_scatter_base_<supf>v2di"
9277 [(set (mem:BLK (scratch))
9279 [(match_operand:V2DI 0 "s_register_operand" "=w")
9280 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
9281 (match_operand:V2DI 2 "s_register_operand" "w")]
9287 ops[0] = operands[0];
9288 ops[1] = operands[1];
9289 ops[2] = operands[2];
9290 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
9293 [(set_attr "length" "4")])
9296 ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
9298 (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di"
9299 [(set (match_operand:V2DI 0 "memory_operand" "=Us")
9301 [(match_operand:V2DI 1 "s_register_operand" "w")
9302 (match_operand:V2DI 2 "s_register_operand" "w")
9303 (match_operand:HI 3 "vpr_register_operand" "Up")]
9309 ops[0] = operands[0];
9310 ops[1] = operands[1];
9311 ops[2] = operands[2];
9312 output_asm_insn ("vpst\;\tvstrdt.64\t%q2, [%m0, %q1]",ops);
9315 [(set_attr "length" "8")])
9318 ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
9320 (define_insn "mve_vstrdq_scatter_offset_<supf>v2di"
9321 [(set (match_operand:V2DI 0 "memory_operand" "=Us")
9323 [(match_operand:V2DI 1 "s_register_operand" "w")
9324 (match_operand:V2DI 2 "s_register_operand" "w")]
9330 ops[0] = operands[0];
9331 ops[1] = operands[1];
9332 ops[2] = operands[2];
9333 output_asm_insn ("vstrd.64\t%q2, [%m0, %q1]",ops);
9336 [(set_attr "length" "4")])
9339 ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
9341 (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
9342 [(set (match_operand:V2DI 0 "memory_operand" "=Us")
9344 [(match_operand:V2DI 1 "s_register_operand" "w")
9345 (match_operand:V2DI 2 "s_register_operand" "w")
9346 (match_operand:HI 3 "vpr_register_operand" "Up")]
9352 ops[0] = operands[0];
9353 ops[1] = operands[1];
9354 ops[2] = operands[2];
9355 output_asm_insn ("vpst\;\tvstrdt.64\t%q2, [%m0, %q1, UXTW #3]",ops);
9358 [(set_attr "length" "8")])
9361 ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
9363 (define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
9364 [(set (match_operand:V2DI 0 "memory_operand" "=Us")
9366 [(match_operand:V2DI 1 "s_register_operand" "w")
9367 (match_operand:V2DI 2 "s_register_operand" "w")]
9373 ops[0] = operands[0];
9374 ops[1] = operands[1];
9375 ops[2] = operands[2];
9376 output_asm_insn ("vstrd.64\t%q2, [%m0, %q1, UXTW #3]",ops);
9379 [(set_attr "length" "4")])
9382 ;; [vstrhq_scatter_offset_f]
9384 (define_insn "mve_vstrhq_scatter_offset_fv8hf"
9385 [(set (match_operand:V8HI 0 "memory_operand" "=Us")
9387 [(match_operand:V8HI 1 "s_register_operand" "w")
9388 (match_operand:V8HF 2 "s_register_operand" "w")]
9391 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9394 ops[0] = operands[0];
9395 ops[1] = operands[1];
9396 ops[2] = operands[2];
9397 output_asm_insn ("vstrh.16\t%q2, [%m0, %q1]",ops);
9400 [(set_attr "length" "4")])
9403 ;; [vstrhq_scatter_offset_p_f]
9405 (define_insn "mve_vstrhq_scatter_offset_p_fv8hf"
9406 [(set (match_operand:V8HI 0 "memory_operand" "=Us")
9408 [(match_operand:V8HI 1 "s_register_operand" "w")
9409 (match_operand:V8HF 2 "s_register_operand" "w")
9410 (match_operand:HI 3 "vpr_register_operand" "Up")]
9413 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9416 ops[0] = operands[0];
9417 ops[1] = operands[1];
9418 ops[2] = operands[2];
9419 output_asm_insn ("vpst\n\tvstrht.16\t%q2, [%m0, %q1]",ops);
9422 [(set_attr "length" "8")])
9425 ;; [vstrhq_scatter_shifted_offset_f]
9427 (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf"
9428 [(set (match_operand:V8HI 0 "memory_operand" "=Us")
9430 [(match_operand:V8HI 1 "s_register_operand" "w")
9431 (match_operand:V8HF 2 "s_register_operand" "w")]
9434 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9437 ops[0] = operands[0];
9438 ops[1] = operands[1];
9439 ops[2] = operands[2];
9440 output_asm_insn ("vstrh.16\t%q2, [%m0, %q1, uxtw #1]",ops);
9443 [(set_attr "length" "4")])
9446 ;; [vstrhq_scatter_shifted_offset_p_f]
9448 (define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
9449 [(set (match_operand:V8HI 0 "memory_operand" "=Us")
9451 [(match_operand:V8HI 1 "s_register_operand" "w")
9452 (match_operand:V8HF 2 "s_register_operand" "w")
9453 (match_operand:HI 3 "vpr_register_operand" "Up")]
9456 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9459 ops[0] = operands[0];
9460 ops[1] = operands[1];
9461 ops[2] = operands[2];
9462 output_asm_insn ("vpst\n\tvstrht.16\t%q2, [%m0, %q1, uxtw #1]",ops);
9465 [(set_attr "length" "8")])
9468 ;; [vstrwq_scatter_base_f]
9470 (define_insn "mve_vstrwq_scatter_base_fv4sf"
9471 [(set (mem:BLK (scratch))
9473 [(match_operand:V4SI 0 "s_register_operand" "w")
9474 (match_operand:SI 1 "immediate_operand" "i")
9475 (match_operand:V4SF 2 "s_register_operand" "w")]
9478 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9481 ops[0] = operands[0];
9482 ops[1] = operands[1];
9483 ops[2] = operands[2];
9484 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
9487 [(set_attr "length" "4")])
9490 ;; [vstrwq_scatter_base_p_f]
9492 (define_insn "mve_vstrwq_scatter_base_p_fv4sf"
9493 [(set (mem:BLK (scratch))
9495 [(match_operand:V4SI 0 "s_register_operand" "w")
9496 (match_operand:SI 1 "immediate_operand" "i")
9497 (match_operand:V4SF 2 "s_register_operand" "w")
9498 (match_operand:HI 3 "vpr_register_operand" "Up")]
9501 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9504 ops[0] = operands[0];
9505 ops[1] = operands[1];
9506 ops[2] = operands[2];
9507 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
9510 [(set_attr "length" "8")])
9513 ;; [vstrwq_scatter_offset_f]
9515 (define_insn "mve_vstrwq_scatter_offset_fv4sf"
9516 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9518 [(match_operand:V4SI 1 "s_register_operand" "w")
9519 (match_operand:V4SF 2 "s_register_operand" "w")]
9522 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9525 ops[0] = operands[0];
9526 ops[1] = operands[1];
9527 ops[2] = operands[2];
9528 output_asm_insn ("vstrw.32\t%q2, [%m0, %q1]",ops);
9531 [(set_attr "length" "4")])
9534 ;; [vstrwq_scatter_offset_p_f]
9536 (define_insn "mve_vstrwq_scatter_offset_p_fv4sf"
9537 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9539 [(match_operand:V4SI 1 "s_register_operand" "w")
9540 (match_operand:V4SF 2 "s_register_operand" "w")
9541 (match_operand:HI 3 "vpr_register_operand" "Up")]
9544 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9547 ops[0] = operands[0];
9548 ops[1] = operands[1];
9549 ops[2] = operands[2];
9550 output_asm_insn ("vpst\n\tvstrwt.32\t%q2, [%m0, %q1]",ops);
9553 [(set_attr "length" "8")])
9556 ;; [vstrwq_scatter_offset_p_s vstrwq_scatter_offset_p_u]
9558 (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si"
9559 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9561 [(match_operand:V4SI 1 "s_register_operand" "w")
9562 (match_operand:V4SI 2 "s_register_operand" "w")
9563 (match_operand:HI 3 "vpr_register_operand" "Up")]
9569 ops[0] = operands[0];
9570 ops[1] = operands[1];
9571 ops[2] = operands[2];
9572 output_asm_insn ("vpst\n\tvstrwt.32\t%q2, [%m0, %q1]",ops);
9575 [(set_attr "length" "8")])
9578 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9580 (define_insn "mve_vstrwq_scatter_offset_<supf>v4si"
9581 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9583 [(match_operand:V4SI 1 "s_register_operand" "w")
9584 (match_operand:V4SI 2 "s_register_operand" "w")]
9590 ops[0] = operands[0];
9591 ops[1] = operands[1];
9592 ops[2] = operands[2];
9593 output_asm_insn ("vstrw.32\t%q2, [%m0, %q1]",ops);
9596 [(set_attr "length" "4")])
9599 ;; [vstrwq_scatter_shifted_offset_f]
9601 (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf"
9602 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9604 [(match_operand:V4SI 1 "s_register_operand" "w")
9605 (match_operand:V4SF 2 "s_register_operand" "w")]
9608 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9611 ops[0] = operands[0];
9612 ops[1] = operands[1];
9613 ops[2] = operands[2];
9614 output_asm_insn ("vstrw.32\t%q2, [%m0, %q1, uxtw #2]",ops);
9617 [(set_attr "length" "4")])
9620 ;; [vstrwq_scatter_shifted_offset_p_f]
9622 (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
9623 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9625 [(match_operand:V4SI 1 "s_register_operand" "w")
9626 (match_operand:V4SF 2 "s_register_operand" "w")
9627 (match_operand:HI 3 "vpr_register_operand" "Up")]
9630 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9633 ops[0] = operands[0];
9634 ops[1] = operands[1];
9635 ops[2] = operands[2];
9636 output_asm_insn ("vpst\;\tvstrwt.32\t%q2, [%m0, %q1, uxtw #2]",ops);
9639 [(set_attr "length" "8")])
9642 ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
9644 (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
9645 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9647 [(match_operand:V4SI 1 "s_register_operand" "w")
9648 (match_operand:V4SI 2 "s_register_operand" "w")
9649 (match_operand:HI 3 "vpr_register_operand" "Up")]
9655 ops[0] = operands[0];
9656 ops[1] = operands[1];
9657 ops[2] = operands[2];
9658 output_asm_insn ("vpst\;\tvstrwt.32\t%q2, [%m0, %q1, uxtw #2]",ops);
9661 [(set_attr "length" "8")])
9664 ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
9666 (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
9667 [(set (match_operand:V4SI 0 "memory_operand" "=Us")
9669 [(match_operand:V4SI 1 "s_register_operand" "w")
9670 (match_operand:V4SI 2 "s_register_operand" "w")]
9676 ops[0] = operands[0];
9677 ops[1] = operands[1];
9678 ops[2] = operands[2];
9679 output_asm_insn ("vstrw.32\t%q2, [%m0, %q1, uxtw #2]",ops);
9682 [(set_attr "length" "4")])
9685 ;; [vaddq_s, vaddq_u])
9687 (define_insn "mve_vaddq<mode>"
9689 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
9690 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
9691 (match_operand:MVE_2 2 "s_register_operand" "w")))
9694 "vadd.i%#<V_sz_elem> %q0, %q1, %q2"
9695 [(set_attr "type" "mve_move")
9701 (define_insn "mve_vaddq_f<mode>"
9703 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
9704 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
9705 (match_operand:MVE_0 2 "s_register_operand" "w")))
9707 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9708 "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
9709 [(set_attr "type" "mve_move")
9715 (define_expand "mve_vidupq_n_u<mode>"
9716 [(match_operand:MVE_2 0 "s_register_operand")
9717 (match_operand:SI 1 "s_register_operand")
9718 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9721 rtx temp = gen_reg_rtx (SImode);
9722 emit_move_insn (temp, operands[1]);
9723 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9724 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
9732 (define_insn "mve_vidupq_u<mode>_insn"
9733 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9734 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9735 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
9737 (set (match_operand:SI 1 "s_register_operand" "=e")
9738 (plus:SI (match_dup 2)
9739 (match_operand:SI 4 "immediate_operand" "i")))]
9741 "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
9746 (define_expand "mve_vidupq_m_n_u<mode>"
9747 [(match_operand:MVE_2 0 "s_register_operand")
9748 (match_operand:MVE_2 1 "s_register_operand")
9749 (match_operand:SI 2 "s_register_operand")
9750 (match_operand:SI 3 "mve_imm_selective_upto_8")
9751 (match_operand:HI 4 "vpr_register_operand")]
9754 rtx temp = gen_reg_rtx (SImode);
9755 emit_move_insn (temp, operands[2]);
9756 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9757 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9758 operands[2], operands[3],
9764 ;; [vidupq_m_wb_u_insn])
9766 (define_insn "mve_vidupq_m_wb_u<mode>_insn"
9767 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9768 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9769 (match_operand:SI 3 "s_register_operand" "2")
9770 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9771 (match_operand:HI 5 "vpr_register_operand" "Up")]
9773 (set (match_operand:SI 2 "s_register_operand" "=e")
9774 (plus:SI (match_dup 3)
9775 (match_operand:SI 6 "immediate_operand" "i")))]
9777 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
9778 [(set_attr "length""8")])
9783 (define_expand "mve_vddupq_n_u<mode>"
9784 [(match_operand:MVE_2 0 "s_register_operand")
9785 (match_operand:SI 1 "s_register_operand")
9786 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9789 rtx temp = gen_reg_rtx (SImode);
9790 emit_move_insn (temp, operands[1]);
9791 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9792 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
9800 (define_insn "mve_vddupq_u<mode>_insn"
9801 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9802 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9803 (match_operand:SI 3 "immediate_operand" "i")]
9805 (set (match_operand:SI 1 "s_register_operand" "=e")
9806 (minus:SI (match_dup 2)
9807 (match_operand:SI 4 "immediate_operand" "i")))]
9809 "vddup.u%#<V_sz_elem> %q0, %1, %3")
9814 (define_expand "mve_vddupq_m_n_u<mode>"
9815 [(match_operand:MVE_2 0 "s_register_operand")
9816 (match_operand:MVE_2 1 "s_register_operand")
9817 (match_operand:SI 2 "s_register_operand")
9818 (match_operand:SI 3 "mve_imm_selective_upto_8")
9819 (match_operand:HI 4 "vpr_register_operand")]
9822 rtx temp = gen_reg_rtx (SImode);
9823 emit_move_insn (temp, operands[2]);
9824 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9825 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9826 operands[2], operands[3],
9832 ;; [vddupq_m_wb_u_insn])
9834 (define_insn "mve_vddupq_m_wb_u<mode>_insn"
9835 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9836 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
9837 (match_operand:SI 3 "s_register_operand" "2")
9838 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
9839 (match_operand:HI 5 "vpr_register_operand" "Up")]
9841 (set (match_operand:SI 2 "s_register_operand" "=e")
9842 (minus:SI (match_dup 3)
9843 (match_operand:SI 6 "immediate_operand" "i")))]
9845 "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
9846 [(set_attr "length""8")])
9851 (define_expand "mve_vdwdupq_n_u<mode>"
9852 [(match_operand:MVE_2 0 "s_register_operand")
9853 (match_operand:SI 1 "s_register_operand")
9854 (match_operand:SI 2 "s_register_operand")
9855 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9858 rtx ignore_wb = gen_reg_rtx (SImode);
9859 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9860 operands[1], operands[2],
9868 (define_expand "mve_vdwdupq_wb_u<mode>"
9869 [(match_operand:SI 0 "s_register_operand")
9870 (match_operand:SI 1 "s_register_operand")
9871 (match_operand:SI 2 "s_register_operand")
9872 (match_operand:SI 3 "mve_imm_selective_upto_8")
9873 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9876 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9877 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9878 operands[1], operands[2],
9884 ;; [vdwdupq_wb_u_insn])
9886 (define_insn "mve_vdwdupq_wb_u<mode>_insn"
9887 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9888 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9889 (match_operand:SI 3 "s_register_operand" "r")
9890 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
9892 (set (match_operand:SI 1 "s_register_operand" "=e")
9893 (unspec:SI [(match_dup 2)
9898 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %3, %4"
9904 (define_expand "mve_vdwdupq_m_n_u<mode>"
9905 [(match_operand:MVE_2 0 "s_register_operand")
9906 (match_operand:MVE_2 1 "s_register_operand")
9907 (match_operand:SI 2 "s_register_operand")
9908 (match_operand:SI 3 "s_register_operand")
9909 (match_operand:SI 4 "mve_imm_selective_upto_8")
9910 (match_operand:HI 5 "vpr_register_operand")]
9913 rtx ignore_wb = gen_reg_rtx (SImode);
9914 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
9915 operands[1], operands[2],
9916 operands[3], operands[4],
9922 ;; [vdwdupq_m_wb_u])
9924 (define_expand "mve_vdwdupq_m_wb_u<mode>"
9925 [(match_operand:SI 0 "s_register_operand")
9926 (match_operand:MVE_2 1 "s_register_operand")
9927 (match_operand:SI 2 "s_register_operand")
9928 (match_operand:SI 3 "s_register_operand")
9929 (match_operand:SI 4 "mve_imm_selective_upto_8")
9930 (match_operand:HI 5 "vpr_register_operand")]
9933 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9934 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
9935 operands[1], operands[2],
9936 operands[3], operands[4],
9942 ;; [vdwdupq_m_wb_u_insn])
9944 (define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
9945 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9946 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "w")
9947 (match_operand:SI 3 "s_register_operand" "1")
9948 (match_operand:SI 4 "s_register_operand" "r")
9949 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
9950 (match_operand:HI 6 "vpr_register_operand" "Up")]
9952 (set (match_operand:SI 1 "s_register_operand" "=e")
9953 (unspec:SI [(match_dup 2)
9961 "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %4, %5"
9962 [(set_attr "type" "mve_move")
9963 (set_attr "length""8")])
9968 (define_expand "mve_viwdupq_n_u<mode>"
9969 [(match_operand:MVE_2 0 "s_register_operand")
9970 (match_operand:SI 1 "s_register_operand")
9971 (match_operand:SI 2 "s_register_operand")
9972 (match_operand:SI 3 "mve_imm_selective_upto_8")]
9975 rtx ignore_wb = gen_reg_rtx (SImode);
9976 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
9977 operands[1], operands[2],
9985 (define_expand "mve_viwdupq_wb_u<mode>"
9986 [(match_operand:SI 0 "s_register_operand")
9987 (match_operand:SI 1 "s_register_operand")
9988 (match_operand:SI 2 "s_register_operand")
9989 (match_operand:SI 3 "mve_imm_selective_upto_8")
9990 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
9993 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
9994 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
9995 operands[1], operands[2],
10001 ;; [viwdupq_wb_u_insn])
10003 (define_insn "mve_viwdupq_wb_u<mode>_insn"
10004 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10005 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
10006 (match_operand:SI 3 "s_register_operand" "r")
10007 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
10009 (set (match_operand:SI 1 "s_register_operand" "=e")
10010 (unspec:SI [(match_dup 2)
10015 "viwdup.u%#<V_sz_elem>\t%q0, %2, %3, %4"
10019 ;; [viwdupq_m_n_u])
10021 (define_expand "mve_viwdupq_m_n_u<mode>"
10022 [(match_operand:MVE_2 0 "s_register_operand")
10023 (match_operand:MVE_2 1 "s_register_operand")
10024 (match_operand:SI 2 "s_register_operand")
10025 (match_operand:SI 3 "s_register_operand")
10026 (match_operand:SI 4 "mve_imm_selective_upto_8")
10027 (match_operand:HI 5 "vpr_register_operand")]
10030 rtx ignore_wb = gen_reg_rtx (SImode);
10031 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
10032 operands[1], operands[2],
10033 operands[3], operands[4],
10039 ;; [viwdupq_m_wb_u])
10041 (define_expand "mve_viwdupq_m_wb_u<mode>"
10042 [(match_operand:SI 0 "s_register_operand")
10043 (match_operand:MVE_2 1 "s_register_operand")
10044 (match_operand:SI 2 "s_register_operand")
10045 (match_operand:SI 3 "s_register_operand")
10046 (match_operand:SI 4 "mve_imm_selective_upto_8")
10047 (match_operand:HI 5 "vpr_register_operand")]
10050 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10051 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
10052 operands[1], operands[2],
10053 operands[3], operands[4],
10059 ;; [viwdupq_m_wb_u_insn])
10061 (define_insn "mve_viwdupq_m_wb_u<mode>_insn"
10062 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10063 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "w")
10064 (match_operand:SI 3 "s_register_operand" "1")
10065 (match_operand:SI 4 "s_register_operand" "r")
10066 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
10067 (match_operand:HI 6 "vpr_register_operand" "Up")]
10069 (set (match_operand:SI 1 "s_register_operand" "=e")
10070 (unspec:SI [(match_dup 2)
10078 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %4, %5"
10079 [(set_attr "type" "mve_move")
10080 (set_attr "length""8")])
10081 (define_expand "mve_vstrwq_scatter_base_wb_<supf>v4si"
10082 [(match_operand:V4SI 0 "s_register_operand" "=w")
10083 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10084 (match_operand:V4SI 2 "s_register_operand" "w")
10085 (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)]
10088 rtx ignore_wb = gen_reg_rtx (V4SImode);
10090 gen_mve_vstrwq_scatter_base_wb_<supf>v4si_insn (ignore_wb, operands[0],
10091 operands[1], operands[2]));
10095 (define_expand "mve_vstrwq_scatter_base_wb_add_<supf>v4si"
10096 [(match_operand:V4SI 0 "s_register_operand" "=w")
10097 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10098 (match_operand:V4SI 2 "s_register_operand" "0")
10099 (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)]
10102 rtx ignore_vec = gen_reg_rtx (V4SImode);
10104 gen_mve_vstrwq_scatter_base_wb_<supf>v4si_insn (operands[0], operands[2],
10105 operands[1], ignore_vec));
10110 ;; [vstrwq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
10112 (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si_insn"
10113 [(set (mem:BLK (scratch))
10115 [(match_operand:V4SI 1 "s_register_operand" "0")
10116 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10117 (match_operand:V4SI 3 "s_register_operand" "w")]
10119 (set (match_operand:V4SI 0 "s_register_operand" "=w")
10120 (unspec:V4SI [(match_dup 1) (match_dup 2)]
10126 ops[0] = operands[1];
10127 ops[1] = operands[2];
10128 ops[2] = operands[3];
10129 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
10132 [(set_attr "length" "4")])
10134 (define_expand "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
10135 [(match_operand:V4SI 0 "s_register_operand" "=w")
10136 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10137 (match_operand:V4SI 2 "s_register_operand" "w")
10138 (match_operand:HI 3 "vpr_register_operand")
10139 (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)]
10142 rtx ignore_wb = gen_reg_rtx (V4SImode);
10144 gen_mve_vstrwq_scatter_base_wb_p_<supf>v4si_insn (ignore_wb, operands[0],
10145 operands[1], operands[2],
10150 (define_expand "mve_vstrwq_scatter_base_wb_p_add_<supf>v4si"
10151 [(match_operand:V4SI 0 "s_register_operand" "=w")
10152 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10153 (match_operand:V4SI 2 "s_register_operand" "0")
10154 (match_operand:HI 3 "vpr_register_operand")
10155 (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)]
10158 rtx ignore_vec = gen_reg_rtx (V4SImode);
10160 gen_mve_vstrwq_scatter_base_wb_p_<supf>v4si_insn (operands[0], operands[2],
10161 operands[1], ignore_vec,
10167 ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
10169 (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si_insn"
10170 [(set (mem:BLK (scratch))
10172 [(match_operand:V4SI 1 "s_register_operand" "0")
10173 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10174 (match_operand:V4SI 3 "s_register_operand" "w")
10175 (match_operand:HI 4 "vpr_register_operand")]
10177 (set (match_operand:V4SI 0 "s_register_operand" "=w")
10178 (unspec:V4SI [(match_dup 1) (match_dup 2)]
10184 ops[0] = operands[1];
10185 ops[1] = operands[2];
10186 ops[2] = operands[3];
10187 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
10190 [(set_attr "length" "8")])
10192 (define_expand "mve_vstrwq_scatter_base_wb_fv4sf"
10193 [(match_operand:V4SI 0 "s_register_operand" "=w")
10194 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10195 (match_operand:V4SF 2 "s_register_operand" "w")
10196 (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)]
10197 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10199 rtx ignore_wb = gen_reg_rtx (V4SImode);
10201 gen_mve_vstrwq_scatter_base_wb_fv4sf_insn (ignore_wb,operands[0],
10202 operands[1], operands[2]));
10206 (define_expand "mve_vstrwq_scatter_base_wb_add_fv4sf"
10207 [(match_operand:V4SI 0 "s_register_operand" "=w")
10208 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10209 (match_operand:V4SI 2 "s_register_operand" "0")
10210 (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)]
10211 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10213 rtx ignore_vec = gen_reg_rtx (V4SFmode);
10215 gen_mve_vstrwq_scatter_base_wb_fv4sf_insn (operands[0], operands[2],
10216 operands[1], ignore_vec));
10221 ;; [vstrwq_scatter_base_wb_f]
10223 (define_insn "mve_vstrwq_scatter_base_wb_fv4sf_insn"
10224 [(set (mem:BLK (scratch))
10226 [(match_operand:V4SI 1 "s_register_operand" "0")
10227 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10228 (match_operand:V4SF 3 "s_register_operand" "w")]
10230 (set (match_operand:V4SI 0 "s_register_operand" "=w")
10231 (unspec:V4SI [(match_dup 1) (match_dup 2)]
10234 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10237 ops[0] = operands[1];
10238 ops[1] = operands[2];
10239 ops[2] = operands[3];
10240 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
10243 [(set_attr "length" "4")])
10245 (define_expand "mve_vstrwq_scatter_base_wb_p_fv4sf"
10246 [(match_operand:V4SI 0 "s_register_operand" "=w")
10247 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10248 (match_operand:V4SF 2 "s_register_operand" "w")
10249 (match_operand:HI 3 "vpr_register_operand")
10250 (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)]
10251 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10253 rtx ignore_wb = gen_reg_rtx (V4SImode);
10255 gen_mve_vstrwq_scatter_base_wb_p_fv4sf_insn (ignore_wb, operands[0],
10256 operands[1], operands[2],
10261 (define_expand "mve_vstrwq_scatter_base_wb_p_add_fv4sf"
10262 [(match_operand:V4SI 0 "s_register_operand" "=w")
10263 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10264 (match_operand:V4SI 2 "s_register_operand" "0")
10265 (match_operand:HI 3 "vpr_register_operand")
10266 (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)]
10267 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10269 rtx ignore_vec = gen_reg_rtx (V4SFmode);
10271 gen_mve_vstrwq_scatter_base_wb_p_fv4sf_insn (operands[0], operands[2],
10272 operands[1], ignore_vec,
10278 ;; [vstrwq_scatter_base_wb_p_f]
10280 (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf_insn"
10281 [(set (mem:BLK (scratch))
10283 [(match_operand:V4SI 1 "s_register_operand" "0")
10284 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10285 (match_operand:V4SF 3 "s_register_operand" "w")
10286 (match_operand:HI 4 "vpr_register_operand")]
10288 (set (match_operand:V4SI 0 "s_register_operand" "=w")
10289 (unspec:V4SI [(match_dup 1) (match_dup 2)]
10292 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10295 ops[0] = operands[1];
10296 ops[1] = operands[2];
10297 ops[2] = operands[3];
10298 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
10301 [(set_attr "length" "8")])
10303 (define_expand "mve_vstrdq_scatter_base_wb_<supf>v2di"
10304 [(match_operand:V2DI 0 "s_register_operand" "=w")
10305 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10306 (match_operand:V2DI 2 "s_register_operand" "w")
10307 (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)]
10310 rtx ignore_wb = gen_reg_rtx (V2DImode);
10312 gen_mve_vstrdq_scatter_base_wb_<supf>v2di_insn (ignore_wb, operands[0],
10313 operands[1], operands[2]));
10317 (define_expand "mve_vstrdq_scatter_base_wb_add_<supf>v2di"
10318 [(match_operand:V2DI 0 "s_register_operand" "=w")
10319 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10320 (match_operand:V2DI 2 "s_register_operand" "0")
10321 (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)]
10324 rtx ignore_vec = gen_reg_rtx (V2DImode);
10326 gen_mve_vstrdq_scatter_base_wb_<supf>v2di_insn (operands[0], operands[2],
10327 operands[1], ignore_vec));
10332 ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
10334 (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di_insn"
10335 [(set (mem:BLK (scratch))
10337 [(match_operand:V2DI 1 "s_register_operand" "0")
10338 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10339 (match_operand:V2DI 3 "s_register_operand" "w")]
10341 (set (match_operand:V2DI 0 "s_register_operand" "=&w")
10342 (unspec:V2DI [(match_dup 1) (match_dup 2)]
10348 ops[0] = operands[1];
10349 ops[1] = operands[2];
10350 ops[2] = operands[3];
10351 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
10354 [(set_attr "length" "4")])
10356 (define_expand "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
10357 [(match_operand:V2DI 0 "s_register_operand" "=w")
10358 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10359 (match_operand:V2DI 2 "s_register_operand" "w")
10360 (match_operand:HI 3 "vpr_register_operand")
10361 (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)]
10364 rtx ignore_wb = gen_reg_rtx (V2DImode);
10366 gen_mve_vstrdq_scatter_base_wb_p_<supf>v2di_insn (ignore_wb, operands[0],
10367 operands[1], operands[2],
10372 (define_expand "mve_vstrdq_scatter_base_wb_p_add_<supf>v2di"
10373 [(match_operand:V2DI 0 "s_register_operand" "=w")
10374 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10375 (match_operand:V2DI 2 "s_register_operand" "0")
10376 (match_operand:HI 3 "vpr_register_operand")
10377 (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)]
10380 rtx ignore_vec = gen_reg_rtx (V2DImode);
10382 gen_mve_vstrdq_scatter_base_wb_p_<supf>v2di_insn (operands[0], operands[2],
10383 operands[1], ignore_vec,
10389 ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
10391 (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di_insn"
10392 [(set (mem:BLK (scratch))
10394 [(match_operand:V2DI 1 "s_register_operand" "0")
10395 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10396 (match_operand:V2DI 3 "s_register_operand" "w")
10397 (match_operand:HI 4 "vpr_register_operand")]
10399 (set (match_operand:V2DI 0 "s_register_operand" "=w")
10400 (unspec:V2DI [(match_dup 1) (match_dup 2)]
10406 ops[0] = operands[1];
10407 ops[1] = operands[2];
10408 ops[2] = operands[3];
10409 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]!",ops);
10412 [(set_attr "length" "8")])
10414 (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
10415 [(match_operand:V4SI 0 "s_register_operand")
10416 (match_operand:V4SI 1 "s_register_operand")
10417 (match_operand:SI 2 "mve_vldrd_immediate")
10418 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
10421 rtx ignore_wb = gen_reg_rtx (V4SImode);
10423 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
10424 operands[1], operands[2]));
10429 ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
10431 (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
10432 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
10433 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
10434 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10435 (mem:BLK (scratch))]
10437 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10438 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10444 ops[0] = operands[0];
10445 ops[1] = operands[2];
10446 ops[2] = operands[3];
10447 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
10450 [(set_attr "length" "4")])
10452 (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
10453 [(match_operand:V4SI 0 "s_register_operand")
10454 (match_operand:V4SI 1 "s_register_operand")
10455 (match_operand:SI 2 "mve_vldrd_immediate")
10456 (match_operand:HI 3 "vpr_register_operand")
10457 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
10460 rtx ignore_wb = gen_reg_rtx (V4SImode);
10462 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
10463 operands[1], operands[2],
10469 ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
10471 (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
10472 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
10473 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
10474 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10475 (match_operand:HI 4 "vpr_register_operand" "Up")
10476 (mem:BLK (scratch))]
10478 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10479 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10485 ops[0] = operands[0];
10486 ops[1] = operands[2];
10487 ops[2] = operands[3];
10488 output_asm_insn ("vpst\;\tvldrwt.u32\t%q0, [%q1, %2]!",ops);
10491 [(set_attr "length" "8")])
10493 (define_expand "mve_vldrwq_gather_base_wb_fv4sf"
10494 [(match_operand:V4SF 0 "s_register_operand")
10495 (match_operand:V4SI 1 "s_register_operand")
10496 (match_operand:SI 2 "mve_vldrd_immediate")
10497 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10498 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10500 rtx ignore_wb = gen_reg_rtx (V4SImode);
10502 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
10503 operands[1], operands[2]));
10508 ;; [vldrwq_gather_base_wb_f]
10510 (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
10511 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10512 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10513 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10514 (mem:BLK (scratch))]
10516 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10517 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10520 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10523 ops[0] = operands[0];
10524 ops[1] = operands[2];
10525 ops[2] = operands[3];
10526 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
10529 [(set_attr "length" "4")])
10531 (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
10532 [(match_operand:V4SF 0 "s_register_operand")
10533 (match_operand:V4SI 1 "s_register_operand")
10534 (match_operand:SI 2 "mve_vldrd_immediate")
10535 (match_operand:HI 3 "vpr_register_operand")
10536 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10537 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10539 rtx ignore_wb = gen_reg_rtx (V4SImode);
10541 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
10542 operands[1], operands[2],
10548 ;; [vldrwq_gather_base_wb_z_f]
10550 (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
10551 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10552 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10553 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10554 (match_operand:HI 4 "vpr_register_operand" "Up")
10555 (mem:BLK (scratch))]
10557 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10558 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10561 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10564 ops[0] = operands[0];
10565 ops[1] = operands[2];
10566 ops[2] = operands[3];
10567 output_asm_insn ("vpst\;\tvldrwt.u32\t%q0, [%q1, %2]!",ops);
10570 [(set_attr "length" "8")])
10572 (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
10573 [(match_operand:V2DI 0 "s_register_operand")
10574 (match_operand:V2DI 1 "s_register_operand")
10575 (match_operand:SI 2 "mve_vldrd_immediate")
10576 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10579 rtx ignore_wb = gen_reg_rtx (V2DImode);
10581 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
10582 operands[1], operands[2]));
10587 ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
10589 (define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn"
10590 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10591 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10592 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10593 (mem:BLK (scratch))]
10595 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10596 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10602 ops[0] = operands[0];
10603 ops[1] = operands[2];
10604 ops[2] = operands[3];
10605 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
10608 [(set_attr "length" "4")])
10610 (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
10611 [(match_operand:V2DI 0 "s_register_operand")
10612 (match_operand:V2DI 1 "s_register_operand")
10613 (match_operand:SI 2 "mve_vldrd_immediate")
10614 (match_operand:HI 3 "vpr_register_operand")
10615 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10618 rtx ignore_wb = gen_reg_rtx (V2DImode);
10620 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
10621 operands[1], operands[2],
10626 (define_insn "get_fpscr_nzcvqc"
10627 [(set (match_operand:SI 0 "register_operand" "=r")
10628 (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
10630 "vmrs\\t%0, FPSCR_nzcvqc"
10631 [(set_attr "type" "mve_move")])
10633 (define_insn "set_fpscr_nzcvqc"
10634 [(set (reg:SI VFPCC_REGNUM)
10635 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
10636 VUNSPEC_SET_FPSCR_NZCVQC))]
10638 "vmsr\\tFPSCR_nzcvqc, %0"
10639 [(set_attr "type" "mve_move")])
10642 ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
10644 (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
10645 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10646 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10647 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10648 (match_operand:HI 4 "vpr_register_operand" "Up")
10649 (mem:BLK (scratch))]
10651 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10652 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10658 ops[0] = operands[0];
10659 ops[1] = operands[2];
10660 ops[2] = operands[3];
10661 output_asm_insn ("vpst\;\tvldrdt.u64\t%q0, [%q1, %2]!",ops);
10664 [(set_attr "length" "8")])
10666 ;; [vadciq_m_s, vadciq_m_u])
10668 (define_insn "mve_vadciq_m_<supf>v4si"
10669 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10670 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10671 (match_operand:V4SI 2 "s_register_operand" "w")
10672 (match_operand:V4SI 3 "s_register_operand" "w")
10673 (match_operand:HI 4 "vpr_register_operand" "Up")]
10675 (set (reg:SI VFPCC_REGNUM)
10676 (unspec:SI [(const_int 0)]
10680 "vpst\;vadcit.i32\t%q0, %q2, %q3"
10681 [(set_attr "type" "mve_move")
10682 (set_attr "length" "8")])
10685 ;; [vadciq_u, vadciq_s])
10687 (define_insn "mve_vadciq_<supf>v4si"
10688 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10689 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10690 (match_operand:V4SI 2 "s_register_operand" "w")]
10692 (set (reg:SI VFPCC_REGNUM)
10693 (unspec:SI [(const_int 0)]
10697 "vadci.i32\t%q0, %q1, %q2"
10698 [(set_attr "type" "mve_move")
10699 (set_attr "length" "4")])
10702 ;; [vadcq_m_s, vadcq_m_u])
10704 (define_insn "mve_vadcq_m_<supf>v4si"
10705 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10706 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10707 (match_operand:V4SI 2 "s_register_operand" "w")
10708 (match_operand:V4SI 3 "s_register_operand" "w")
10709 (match_operand:HI 4 "vpr_register_operand" "Up")]
10711 (set (reg:SI VFPCC_REGNUM)
10712 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10716 "vpst\;vadct.i32\t%q0, %q2, %q3"
10717 [(set_attr "type" "mve_move")
10718 (set_attr "length" "8")])
10721 ;; [vadcq_u, vadcq_s])
10723 (define_insn "mve_vadcq_<supf>v4si"
10724 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10725 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10726 (match_operand:V4SI 2 "s_register_operand" "w")]
10728 (set (reg:SI VFPCC_REGNUM)
10729 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10733 "vadc.i32\t%q0, %q1, %q2"
10734 [(set_attr "type" "mve_move")
10735 (set_attr "length" "4")
10736 (set_attr "conds" "set")])
10739 ;; [vsbciq_m_u, vsbciq_m_s])
10741 (define_insn "mve_vsbciq_m_<supf>v4si"
10742 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10743 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10744 (match_operand:V4SI 2 "s_register_operand" "w")
10745 (match_operand:V4SI 3 "s_register_operand" "w")
10746 (match_operand:HI 4 "vpr_register_operand" "Up")]
10748 (set (reg:SI VFPCC_REGNUM)
10749 (unspec:SI [(const_int 0)]
10753 "vpst\;vsbcit.i32\t%q0, %q2, %q3"
10754 [(set_attr "type" "mve_move")
10755 (set_attr "length" "8")])
10758 ;; [vsbciq_s, vsbciq_u])
10760 (define_insn "mve_vsbciq_<supf>v4si"
10761 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10762 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10763 (match_operand:V4SI 2 "s_register_operand" "w")]
10765 (set (reg:SI VFPCC_REGNUM)
10766 (unspec:SI [(const_int 0)]
10770 "vsbci.i32\t%q0, %q1, %q2"
10771 [(set_attr "type" "mve_move")
10772 (set_attr "length" "4")])
10775 ;; [vsbcq_m_u, vsbcq_m_s])
10777 (define_insn "mve_vsbcq_m_<supf>v4si"
10778 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10779 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10780 (match_operand:V4SI 2 "s_register_operand" "w")
10781 (match_operand:V4SI 3 "s_register_operand" "w")
10782 (match_operand:HI 4 "vpr_register_operand" "Up")]
10784 (set (reg:SI VFPCC_REGNUM)
10785 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10789 "vpst\;vsbct.i32\t%q0, %q2, %q3"
10790 [(set_attr "type" "mve_move")
10791 (set_attr "length" "8")])
10794 ;; [vsbcq_s, vsbcq_u])
10796 (define_insn "mve_vsbcq_<supf>v4si"
10797 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10798 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
10799 (match_operand:V4SI 2 "s_register_operand" "w")]
10801 (set (reg:SI VFPCC_REGNUM)
10802 (unspec:SI [(reg:SI VFPCC_REGNUM)]
10806 "vsbc.i32\t%q0, %q1, %q2"
10807 [(set_attr "type" "mve_move")
10808 (set_attr "length" "4")])
10813 (define_insn "mve_vst2q<mode>"
10814 [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
10815 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
10816 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10819 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10820 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10823 int regno = REGNO (operands[1]);
10824 ops[0] = gen_rtx_REG (TImode, regno);
10825 ops[1] = gen_rtx_REG (TImode, regno + 4);
10826 rtx reg = operands[0];
10827 while (reg && !REG_P (reg))
10828 reg = XEXP (reg, 0);
10829 gcc_assert (REG_P (reg));
10831 ops[3] = operands[0];
10832 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10833 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10836 [(set_attr "length" "8")])
10841 (define_insn "mve_vld2q<mode>"
10842 [(set (match_operand:OI 0 "s_register_operand" "=w")
10843 (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
10844 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10847 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10848 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10851 int regno = REGNO (operands[0]);
10852 ops[0] = gen_rtx_REG (TImode, regno);
10853 ops[1] = gen_rtx_REG (TImode, regno + 4);
10854 rtx reg = operands[1];
10855 while (reg && !REG_P (reg))
10856 reg = XEXP (reg, 0);
10857 gcc_assert (REG_P (reg));
10859 ops[3] = operands[1];
10860 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
10861 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
10864 [(set_attr "length" "8")])
10869 (define_insn "mve_vld4q<mode>"
10870 [(set (match_operand:XI 0 "s_register_operand" "=w")
10871 (unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
10872 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10875 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10876 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10879 int regno = REGNO (operands[0]);
10880 ops[0] = gen_rtx_REG (TImode, regno);
10881 ops[1] = gen_rtx_REG (TImode, regno+4);
10882 ops[2] = gen_rtx_REG (TImode, regno+8);
10883 ops[3] = gen_rtx_REG (TImode, regno + 12);
10884 rtx reg = operands[1];
10885 while (reg && !REG_P (reg))
10886 reg = XEXP (reg, 0);
10887 gcc_assert (REG_P (reg));
10889 ops[5] = operands[1];
10890 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10891 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10892 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
10893 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
10896 [(set_attr "length" "16")])
10898 ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
10900 (define_insn "mve_vec_extract<mode><V_elem_l>"
10901 [(set (match_operand:<V_elem> 0 "s_register_operand" "=r")
10902 (vec_select:<V_elem>
10903 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
10904 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10905 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10906 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10908 if (BYTES_BIG_ENDIAN)
10910 int elt = INTVAL (operands[2]);
10911 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10912 operands[2] = GEN_INT (elt);
10914 return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
10916 [(set_attr "type" "mve_move")])
10918 (define_insn "mve_vec_extractv2didi"
10919 [(set (match_operand:DI 0 "s_register_operand" "=r")
10921 (match_operand:V2DI 1 "s_register_operand" "w")
10922 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
10925 int elt = INTVAL (operands[2]);
10926 if (BYTES_BIG_ENDIAN)
10930 return "vmov\t%Q0, %R0, %e1";
10932 return "vmov\t%J0, %K0, %f1";
10934 [(set_attr "type" "mve_move")])
10936 (define_insn "*mve_vec_extract_sext_internal<mode>"
10937 [(set (match_operand:SI 0 "s_register_operand" "=r")
10939 (vec_select:<V_elem>
10940 (match_operand:MVE_2 1 "s_register_operand" "w")
10941 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10942 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10943 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10945 if (BYTES_BIG_ENDIAN)
10947 int elt = INTVAL (operands[2]);
10948 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10949 operands[2] = GEN_INT (elt);
10951 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
10953 [(set_attr "type" "mve_move")])
10955 (define_insn "*mve_vec_extract_zext_internal<mode>"
10956 [(set (match_operand:SI 0 "s_register_operand" "=r")
10958 (vec_select:<V_elem>
10959 (match_operand:MVE_2 1 "s_register_operand" "w")
10960 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
10961 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10962 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10964 if (BYTES_BIG_ENDIAN)
10966 int elt = INTVAL (operands[2]);
10967 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10968 operands[2] = GEN_INT (elt);
10970 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
10972 [(set_attr "type" "mve_move")])
10975 ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
10977 (define_insn "mve_vec_set<mode>_internal"
10978 [(set (match_operand:VQ2 0 "s_register_operand" "=w")
10981 (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
10982 (match_operand:VQ2 3 "s_register_operand" "0")
10983 (match_operand:SI 2 "immediate_operand" "i")))]
10984 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
10985 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
10987 int elt = ffs ((int) INTVAL (operands[2])) - 1;
10988 if (BYTES_BIG_ENDIAN)
10989 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
10990 operands[2] = GEN_INT (elt);
10992 return "vmov.<V_sz_elem>\t%q0[%c2], %1";
10994 [(set_attr "type" "mve_move")])
10996 (define_insn "mve_vec_setv2di_internal"
10997 [(set (match_operand:V2DI 0 "s_register_operand" "=w")
10999 (vec_duplicate:V2DI
11000 (match_operand:DI 1 "nonimmediate_operand" "r"))
11001 (match_operand:V2DI 3 "s_register_operand" "0")
11002 (match_operand:SI 2 "immediate_operand" "i")))]
11005 int elt = ffs ((int) INTVAL (operands[2])) - 1;
11006 if (BYTES_BIG_ENDIAN)
11010 return "vmov\t%e0, %Q1, %R1";
11012 return "vmov\t%f0, %J1, %K1";
11014 [(set_attr "type" "mve_move")])
11019 (define_insn "mve_uqrshll_sat<supf>_di"
11020 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11021 (unspec:DI [(match_operand:DI 1 "arm_general_register_operand" "r")
11022 (match_operand:SI 2 "s_register_operand" "r")]
11025 "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
11026 [(set_attr "predicable" "yes")])
11031 (define_insn "mve_sqrshrl_sat<supf>_di"
11032 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11033 (unspec:DI [(match_operand:DI 1 "arm_general_register_operand" "r")
11034 (match_operand:SI 2 "s_register_operand" "r")]
11037 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
11038 [(set_attr "predicable" "yes")])
11043 (define_insn "mve_uqrshl_si"
11044 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11045 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "r")
11046 (match_operand:SI 2 "s_register_operand" "r")]
11049 "uqrshl%?\\t%1, %2"
11050 [(set_attr "predicable" "yes")])
11055 (define_insn "mve_sqrshr_si"
11056 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11057 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "r")
11058 (match_operand:SI 2 "s_register_operand" "r")]
11061 "sqrshr%?\\t%1, %2"
11062 [(set_attr "predicable" "yes")])
11067 (define_insn "mve_uqshll_di"
11068 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11069 (us_ashift:DI (match_operand:DI 1 "arm_general_register_operand" "r")
11070 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")))]
11072 "uqshll%?\\t%Q1, %R1, %2"
11073 [(set_attr "predicable" "yes")])
11078 (define_insn "mve_urshrl_di"
11079 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11080 (unspec:DI [(match_operand:DI 1 "arm_general_register_operand" "r")
11081 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")]
11084 "urshrl%?\\t%Q1, %R1, %2"
11085 [(set_attr "predicable" "yes")])
11090 (define_insn "mve_uqshl_si"
11091 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11092 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "r")
11093 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")))]
11096 [(set_attr "predicable" "yes")])
11101 (define_insn "mve_urshr_si"
11102 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11103 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "r")
11104 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")]
11108 [(set_attr "predicable" "yes")])
11113 (define_insn "mve_sqshl_si"
11114 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11115 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "r")
11116 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")))]
11119 [(set_attr "predicable" "yes")])
11124 (define_insn "mve_srshr_si"
11125 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11126 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "r")
11127 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")]
11131 [(set_attr "predicable" "yes")])
11136 (define_insn "mve_srshrl_di"
11137 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11138 (unspec:DI [(match_operand:DI 1 "arm_general_register_operand" "r")
11139 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")]
11142 "srshrl%?\\t%Q1, %R1, %2"
11143 [(set_attr "predicable" "yes")])
11148 (define_insn "mve_sqshll_di"
11149 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11150 (ss_ashift:DI (match_operand:DI 1 "arm_general_register_operand" "r")
11151 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")))]
11153 "sqshll%?\\t%Q1, %R1, %2"
11154 [(set_attr "predicable" "yes")])