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_iterator MVE_types [V16QI V8HI V4SI V2DI TI V8HF V4SF V2DF])
21 (define_mode_iterator MVE_VLD_ST [V16QI V8HI V4SI V8HF V4SF])
22 (define_mode_iterator MVE_0 [V8HF V4SF])
23 (define_mode_iterator MVE_1 [V16QI V8HI V4SI V2DI])
24 (define_mode_iterator MVE_3 [V16QI V8HI])
25 (define_mode_iterator MVE_2 [V16QI V8HI V4SI])
26 (define_mode_iterator MVE_5 [V8HI V4SI])
27 (define_mode_iterator MVE_6 [V8HI V4SI])
29 (define_c_enum "unspec" [VST4Q VRNDXQ_F VRNDQ_F VRNDPQ_F VRNDNQ_F VRNDMQ_F
30 VRNDAQ_F VREV64Q_F VNEGQ_F VDUPQ_N_F VABSQ_F VREV32Q_F
31 VCVTTQ_F32_F16 VCVTBQ_F32_F16 VCVTQ_TO_F_S VQNEGQ_S
32 VCVTQ_TO_F_U VREV16Q_S VREV16Q_U VADDLVQ_S VMVNQ_N_S
33 VMVNQ_N_U VCVTAQ_S VCVTAQ_U VREV64Q_S VREV64Q_U
34 VQABSQ_S VNEGQ_S VMVNQ_S VMVNQ_U VDUPQ_N_U VDUPQ_N_S
35 VCLZQ_U VCLZQ_S VCLSQ_S VADDVQ_S VADDVQ_U VABSQ_S
36 VREV32Q_U VREV32Q_S VMOVLTQ_U VMOVLTQ_S VMOVLBQ_S
37 VMOVLBQ_U VCVTQ_FROM_F_S VCVTQ_FROM_F_U VCVTPQ_S
38 VCVTPQ_U VCVTNQ_S VCVTNQ_U VCVTMQ_S VCVTMQ_U
39 VADDLVQ_U VCTP8Q VCTP16Q VCTP32Q VCTP64Q VPNOT
40 VCREATEQ_F VCVTQ_N_TO_F_S VCVTQ_N_TO_F_U VBRSRQ_N_F
41 VSUBQ_N_F VCREATEQ_U VCREATEQ_S VSHRQ_N_S VSHRQ_N_U
42 VCVTQ_N_FROM_F_S VCVTQ_N_FROM_F_U VADDLVQ_P_S
43 VADDLVQ_P_U VCMPNEQ_U VCMPNEQ_S VSHLQ_S VSHLQ_U VABDQ_S
44 VADDQ_N_S VADDVAQ_S VADDVQ_P_S VANDQ_S VBICQ_S
45 VBRSRQ_N_S VCADDQ_ROT270_S VCADDQ_ROT90_S VCMPEQQ_S
46 VCMPEQQ_N_S VCMPNEQ_N_S VEORQ_S VHADDQ_S VHADDQ_N_S
47 VHSUBQ_S VHSUBQ_N_S VMAXQ_S VMAXVQ_S VMINQ_S VMINVQ_S
48 VMLADAVQ_S VMULHQ_S VMULLBQ_INT_S VMULLTQ_INT_S VMULQ_S
49 VMULQ_N_S VORNQ_S VORRQ_S VQADDQ_S VQADDQ_N_S VQRSHLQ_S
50 VQRSHLQ_N_S VQSHLQ_S VQSHLQ_N_S VQSHLQ_R_S VQSUBQ_S
51 VQSUBQ_N_S VRHADDQ_S VRMULHQ_S VRSHLQ_S VRSHLQ_N_S
52 VRSHRQ_N_S VSHLQ_N_S VSHLQ_R_S VSUBQ_S VSUBQ_N_S
53 VABDQ_U VADDQ_N_U VADDVAQ_U VADDVQ_P_U VANDQ_U VBICQ_U
54 VBRSRQ_N_U VCADDQ_ROT270_U VCADDQ_ROT90_U VCMPEQQ_U
55 VCMPEQQ_N_U VCMPNEQ_N_U VEORQ_U VHADDQ_U VHADDQ_N_U
56 VHSUBQ_U VHSUBQ_N_U VMAXQ_U VMAXVQ_U VMINQ_U VMINVQ_U
57 VMLADAVQ_U VMULHQ_U VMULLBQ_INT_U VMULLTQ_INT_U VMULQ_U
58 VMULQ_N_U VORNQ_U VORRQ_U VQADDQ_U VQADDQ_N_U VQRSHLQ_U
59 VQRSHLQ_N_U VQSHLQ_U VQSHLQ_N_U VQSHLQ_R_U VQSUBQ_U
60 VQSUBQ_N_U VRHADDQ_U VRMULHQ_U VRSHLQ_U VRSHLQ_N_U
61 VRSHRQ_N_U VSHLQ_N_U VSHLQ_R_U VSUBQ_U VSUBQ_N_U
62 VCMPGEQ_N_S VCMPGEQ_S VCMPGTQ_N_S VCMPGTQ_S VCMPLEQ_N_S
63 VCMPLEQ_S VCMPLTQ_N_S VCMPLTQ_S VHCADDQ_ROT270_S
64 VHCADDQ_ROT90_S VMAXAQ_S VMAXAVQ_S VMINAQ_S VMINAVQ_S
65 VMLADAVXQ_S VMLSDAVQ_S VMLSDAVXQ_S VQDMULHQ_N_S
66 VQDMULHQ_S VQRDMULHQ_N_S VQRDMULHQ_S VQSHLUQ_N_S
67 VCMPCSQ_N_U VCMPCSQ_U VCMPHIQ_N_U VCMPHIQ_U VABDQ_M_S
68 VABDQ_M_U VABDQ_F VADDQ_N_F VANDQ_F VBICQ_F
69 VCADDQ_ROT270_F VCADDQ_ROT90_F VCMPEQQ_F VCMPEQQ_N_F
70 VCMPGEQ_F VCMPGEQ_N_F VCMPGTQ_F VCMPGTQ_N_F VCMPLEQ_F
71 VCMPLEQ_N_F VCMPLTQ_F VCMPLTQ_N_F VCMPNEQ_F VCMPNEQ_N_F
72 VCMULQ_F VCMULQ_ROT180_F VCMULQ_ROT270_F VCMULQ_ROT90_F
73 VEORQ_F VMAXNMAQ_F VMAXNMAVQ_F VMAXNMQ_F VMAXNMVQ_F
74 VMINNMAQ_F VMINNMAVQ_F VMINNMQ_F VMINNMVQ_F VMULQ_F
75 VMULQ_N_F VORNQ_F VORRQ_F VSUBQ_F VADDLVAQ_U
76 VADDLVAQ_S VBICQ_N_U VBICQ_N_S VCTP8Q_M VCTP16Q_M
77 VCTP32Q_M VCTP64Q_M VCVTBQ_F16_F32 VCVTTQ_F16_F32
78 VMLALDAVQ_U VMLALDAVXQ_U VMLALDAVXQ_S VMLALDAVQ_S
79 VMLSLDAVQ_S VMLSLDAVXQ_S VMOVNBQ_U VMOVNBQ_S
80 VMOVNTQ_U VMOVNTQ_S VORRQ_N_S VORRQ_N_U VQDMULLBQ_N_S
81 VQDMULLBQ_S VQDMULLTQ_N_S VQDMULLTQ_S VQMOVNBQ_U
82 VQMOVNBQ_S VQMOVUNBQ_S VQMOVUNTQ_S VRMLALDAVHXQ_S
83 VRMLSLDAVHQ_S VRMLSLDAVHXQ_S VSHLLBQ_S
84 VSHLLBQ_U VSHLLTQ_U VSHLLTQ_S VQMOVNTQ_U VQMOVNTQ_S
85 VSHLLBQ_N_S VSHLLBQ_N_U VSHLLTQ_N_U VSHLLTQ_N_S
86 VRMLALDAVHQ_U VRMLALDAVHQ_S VMULLTQ_POLY_P
87 VMULLBQ_POLY_P VBICQ_M_N_S VBICQ_M_N_U VCMPEQQ_M_F
88 VCVTAQ_M_S VCVTAQ_M_U VCVTQ_M_TO_F_S VCVTQ_M_TO_F_U
89 VQRSHRNBQ_N_U VQRSHRNBQ_N_S VQRSHRUNBQ_N_S
90 VRMLALDAVHAQ_S VABAVQ_S VABAVQ_U VSHLCQ_S VSHLCQ_U
91 VRMLALDAVHAQ_U VABSQ_M_S VADDVAQ_P_S VADDVAQ_P_U
92 VCLSQ_M_S VCLZQ_M_S VCLZQ_M_U VCMPCSQ_M_N_U
93 VCMPCSQ_M_U VCMPEQQ_M_N_S VCMPEQQ_M_N_U VCMPEQQ_M_S
94 VCMPEQQ_M_U VCMPGEQ_M_N_S VCMPGEQ_M_S VCMPGTQ_M_N_S
95 VCMPGTQ_M_S VCMPHIQ_M_N_U VCMPHIQ_M_U VCMPLEQ_M_N_S
96 VCMPLEQ_M_S VCMPLTQ_M_N_S VCMPLTQ_M_S VCMPNEQ_M_N_S
97 VCMPNEQ_M_N_U VCMPNEQ_M_S VCMPNEQ_M_U VDUPQ_M_N_S
98 VDUPQ_M_N_U VDWDUPQ_N_U VDWDUPQ_WB_U VIWDUPQ_N_U
99 VIWDUPQ_WB_U VMAXAQ_M_S VMAXAVQ_P_S VMAXVQ_P_S
100 VMAXVQ_P_U VMINAQ_M_S VMINAVQ_P_S VMINVQ_P_S VMINVQ_P_U
101 VMLADAVAQ_S VMLADAVAQ_U VMLADAVQ_P_S VMLADAVQ_P_U
102 VMLADAVXQ_P_S VMLAQ_N_S VMLAQ_N_U VMLASQ_N_S VMLASQ_N_U
103 VMLSDAVQ_P_S VMLSDAVXQ_P_S VMVNQ_M_S VMVNQ_M_U
104 VNEGQ_M_S VPSELQ_S VPSELQ_U VQABSQ_M_S VQDMLAHQ_N_S
105 VQDMLAHQ_N_U VQNEGQ_M_S VQRDMLADHQ_S VQRDMLADHXQ_S
106 VQRDMLAHQ_N_S VQRDMLAHQ_N_U VQRDMLASHQ_N_S
107 VQRDMLASHQ_N_U VQRDMLSDHQ_S VQRDMLSDHXQ_S VQRSHLQ_M_N_S
108 VQRSHLQ_M_N_U VQSHLQ_M_R_S VQSHLQ_M_R_U VREV64Q_M_S
109 VREV64Q_M_U VRSHLQ_M_N_S VRSHLQ_M_N_U VSHLQ_M_R_S
110 VSHLQ_M_R_U VSLIQ_N_S VSLIQ_N_U VSRIQ_N_S VSRIQ_N_U
111 VQDMLSDHXQ_S VQDMLSDHQ_S VQDMLADHXQ_S VQDMLADHQ_S
112 VMLSDAVAXQ_S VMLSDAVAQ_S VMLADAVAXQ_S
113 VCMPGEQ_M_F VCMPGTQ_M_N_F VMLSLDAVQ_P_S VRMLALDAVHAXQ_S
114 VMLSLDAVXQ_P_S VFMAQ_F VMLSLDAVAQ_S VQSHRUNBQ_N_S
115 VQRSHRUNTQ_N_S VCMLAQ_F VMINNMAQ_M_F VFMASQ_N_F
116 VDUPQ_M_N_F VCMPGTQ_M_F VCMPLTQ_M_F VRMLSLDAVHQ_P_S
117 VQSHRUNTQ_N_S VABSQ_M_F VMAXNMAVQ_P_F VFMAQ_N_F
118 VRMLSLDAVHXQ_P_S VREV32Q_M_F VRMLSLDAVHAQ_S
119 VRMLSLDAVHAXQ_S VCMPLTQ_M_N_F VCMPNEQ_M_F VRNDAQ_M_F
120 VRNDPQ_M_F VADDLVAQ_P_S VQMOVUNBQ_M_S VCMPLEQ_M_F
121 VCMLAQ_ROT180_F VMLSLDAVAXQ_S VRNDXQ_M_F VFMSQ_F
122 VMINNMVQ_P_F VMAXNMVQ_P_F VPSELQ_F VCMLAQ_ROT90_F
123 VQMOVUNTQ_M_S VREV64Q_M_F VNEGQ_M_F VRNDMQ_M_F
124 VCMPLEQ_M_N_F VCMPGEQ_M_N_F VRNDNQ_M_F VMINNMAVQ_P_F
125 VCMPNEQ_M_N_F VRMLALDAVHQ_P_S VRMLALDAVHXQ_P_S
126 VCMPEQQ_M_N_F VCMLAQ_ROT270_F VMAXNMAQ_M_F VRNDQ_M_F
127 VMLALDAVQ_P_U VMLALDAVQ_P_S VQMOVNBQ_M_S VQMOVNBQ_M_U
128 VMOVLTQ_M_U VMOVLTQ_M_S VMOVNBQ_M_U VMOVNBQ_M_S
129 VRSHRNTQ_N_U VRSHRNTQ_N_S VORRQ_M_N_S VORRQ_M_N_U
130 VREV32Q_M_S VREV32Q_M_U VQRSHRNTQ_N_U VQRSHRNTQ_N_S
131 VMOVNTQ_M_U VMOVNTQ_M_S VMOVLBQ_M_U VMOVLBQ_M_S
132 VMLALDAVAQ_S VMLALDAVAQ_U VQSHRNBQ_N_U VQSHRNBQ_N_S
133 VSHRNBQ_N_U VSHRNBQ_N_S VRSHRNBQ_N_S VRSHRNBQ_N_U
134 VMLALDAVXQ_P_U VMLALDAVXQ_P_S VQMOVNTQ_M_U VQMOVNTQ_M_S
135 VMVNQ_M_N_U VMVNQ_M_N_S VQSHRNTQ_N_U VQSHRNTQ_N_S
136 VMLALDAVAXQ_S VMLALDAVAXQ_U VSHRNTQ_N_S VSHRNTQ_N_U
137 VCVTBQ_M_F16_F32 VCVTBQ_M_F32_F16 VCVTTQ_M_F16_F32
138 VCVTTQ_M_F32_F16 VCVTMQ_M_S VCVTMQ_M_U VCVTNQ_M_S
139 VCVTPQ_M_S VCVTPQ_M_U VCVTQ_M_N_FROM_F_S VCVTNQ_M_U
140 VREV16Q_M_S VREV16Q_M_U VREV32Q_M VCVTQ_M_FROM_F_U
141 VCVTQ_M_FROM_F_S VRMLALDAVHQ_P_U VADDLVAQ_P_U
142 VCVTQ_M_N_FROM_F_U VQSHLUQ_M_N_S VABAVQ_P_S
143 VABAVQ_P_U VSHLQ_M_S VSHLQ_M_U VSRIQ_M_N_S
144 VSRIQ_M_N_U VSUBQ_M_U VSUBQ_M_S VCVTQ_M_N_TO_F_U
145 VCVTQ_M_N_TO_F_S VQADDQ_M_U VQADDQ_M_S
146 VRSHRQ_M_N_S VSUBQ_M_N_S VSUBQ_M_N_U VBRSRQ_M_N_S
147 VSUBQ_M_N_F VBICQ_M_F VHADDQ_M_U VBICQ_M_U VBICQ_M_S
148 VMULQ_M_N_U VHADDQ_M_S VORNQ_M_F VMLAQ_M_N_S VQSUBQ_M_U
149 VQSUBQ_M_S VMLAQ_M_N_U VQSUBQ_M_N_U VQSUBQ_M_N_S
150 VMULLTQ_INT_M_S VMULLTQ_INT_M_U VMULQ_M_N_S VMULQ_M_N_F
151 VMLASQ_M_N_U VMLASQ_M_N_S VMAXQ_M_U VQRDMLAHQ_M_N_U
152 VCADDQ_ROT270_M_F VCADDQ_ROT270_M_U VCADDQ_ROT270_M_S
153 VQRSHLQ_M_S VMULQ_M_F VRHADDQ_M_U VSHRQ_M_N_U
154 VRHADDQ_M_S VMULQ_M_S VMULQ_M_U VQRDMLASHQ_M_N_S
155 VRSHLQ_M_S VRSHLQ_M_U VRSHRQ_M_N_U VADDQ_M_N_F
156 VADDQ_M_N_S VADDQ_M_N_U VQRDMLASHQ_M_N_U VMAXQ_M_S
157 VQRDMLAHQ_M_N_S VORRQ_M_S VORRQ_M_U VORRQ_M_F
158 VQRSHLQ_M_U VRMULHQ_M_U VRMULHQ_M_S VMINQ_M_S VMINQ_M_U
159 VANDQ_M_F VANDQ_M_U VANDQ_M_S VHSUBQ_M_N_S VHSUBQ_M_N_U
160 VMULHQ_M_S VMULHQ_M_U VMULLBQ_INT_M_U
161 VMULLBQ_INT_M_S VCADDQ_ROT90_M_F
162 VSHRQ_M_N_S VADDQ_M_U VSLIQ_M_N_U
163 VQADDQ_M_N_S VBRSRQ_M_N_F VABDQ_M_F VBRSRQ_M_N_U
164 VEORQ_M_F VSHLQ_M_N_S VQDMLAHQ_M_N_U VQDMLAHQ_M_N_S
165 VSHLQ_M_N_U VMLADAVAQ_P_U VMLADAVAQ_P_S VSLIQ_M_N_S
166 VQSHLQ_M_U VQSHLQ_M_S VCADDQ_ROT90_M_U VCADDQ_ROT90_M_S
167 VORNQ_M_U VORNQ_M_S VQSHLQ_M_N_S VQSHLQ_M_N_U VADDQ_M_S
168 VHADDQ_M_N_S VADDQ_M_F VQADDQ_M_N_U VEORQ_M_S VEORQ_M_U
169 VHSUBQ_M_S VHSUBQ_M_U VHADDQ_M_N_U VHCADDQ_ROT90_M_S
170 VQRDMLSDHQ_M_S VQRDMLSDHXQ_M_S VQRDMLADHXQ_M_S
171 VQDMULHQ_M_S VMLADAVAXQ_P_S VQDMLADHXQ_M_S
172 VQRDMULHQ_M_S VMLSDAVAXQ_P_S VQDMULHQ_M_N_S
173 VHCADDQ_ROT270_M_S VQDMLSDHQ_M_S VQDMLSDHXQ_M_S
174 VMLSDAVAQ_P_S VQRDMLADHQ_M_S VQDMLADHQ_M_S
175 VMLALDAVAQ_P_U VMLALDAVAQ_P_S VMLALDAVAXQ_P_U
176 VQRSHRNBQ_M_N_U VQRSHRNBQ_M_N_S VQRSHRNTQ_M_N_S
177 VQSHRNBQ_M_N_U VQSHRNBQ_M_N_S VQSHRNTQ_M_N_S
178 VRSHRNBQ_M_N_U VRSHRNBQ_M_N_S VRSHRNTQ_M_N_U
179 VSHLLBQ_M_N_U VSHLLBQ_M_N_S VSHLLTQ_M_N_U VSHLLTQ_M_N_S
180 VSHRNBQ_M_N_S VSHRNBQ_M_N_U VSHRNTQ_M_N_S VSHRNTQ_M_N_U
181 VMLALDAVAXQ_P_S VQRSHRNTQ_M_N_U VQSHRNTQ_M_N_U
182 VRSHRNTQ_M_N_S VQRDMULHQ_M_N_S VRMLALDAVHAQ_P_S
183 VMLSLDAVAQ_P_S VMLSLDAVAXQ_P_S VMULLBQ_POLY_M_P
184 VMULLTQ_POLY_M_P VQDMULLBQ_M_N_S VQDMULLBQ_M_S
185 VQDMULLTQ_M_N_S VQDMULLTQ_M_S VQRSHRUNBQ_M_N_S
186 VQRSHRUNTQ_M_N_SVQSHRUNBQ_M_N_S VQSHRUNTQ_M_N_S
187 VRMLALDAVHAQ_P_U VRMLALDAVHAXQ_P_S VRMLSLDAVHAQ_P_S
188 VRMLSLDAVHAXQ_P_S VQRSHRUNTQ_M_N_S VQSHRUNBQ_M_N_S
189 VCMLAQ_M_F VCMLAQ_ROT180_M_F VCMLAQ_ROT270_M_F
190 VCMLAQ_ROT90_M_F VCMULQ_M_F VCMULQ_ROT180_M_F
191 VCMULQ_ROT270_M_F VCMULQ_ROT90_M_F VFMAQ_M_F
192 VFMAQ_M_N_F VFMASQ_M_N_F VFMSQ_M_F VMAXNMQ_M_F
193 VMINNMQ_M_F VSUBQ_M_F VSTRWQSB_S VSTRWQSB_U
194 VSTRBQSO_S VSTRBQSO_U VSTRBQ_S VSTRBQ_U VLDRBQGO_S
195 VLDRBQGO_U VLDRBQ_S VLDRBQ_U VLDRWQGB_S VLDRWQGB_U
196 VLD1Q_F VLD1Q_S VLD1Q_U VLDRHQ_F VLDRHQGO_S
197 VLDRHQGO_U VLDRHQGSO_S VLDRHQGSO_U VLDRHQ_S VLDRHQ_U
198 VLDRWQ_F VLDRWQ_S VLDRWQ_U VLDRDQGB_S VLDRDQGB_U
199 VLDRDQGO_S VLDRDQGO_U VLDRDQGSO_S VLDRDQGSO_U
200 VLDRHQGO_F VLDRHQGSO_F VLDRWQGB_F VLDRWQGO_F
201 VLDRWQGO_S VLDRWQGO_U VLDRWQGSO_F VLDRWQGSO_S
202 VLDRWQGSO_U VSTRHQ_F VST1Q_S VST1Q_U VSTRHQSO_S
203 VSTRHQSO_U VSTRHQSSO_S VSTRHQSSO_U VSTRHQ_S
204 VSTRHQ_U VSTRWQ_S VSTRWQ_U VSTRWQ_F VST1Q_F VSTRDQSB_S
205 VSTRDQSB_U VSTRDQSO_S VSTRDQSO_U VSTRDQSSO_S
206 VSTRDQSSO_U VSTRWQSO_S VSTRWQSO_U VSTRWQSSO_S
207 VSTRWQSSO_U VSTRHQSO_F VSTRHQSSO_F VSTRWQSB_F
208 VSTRWQSO_F VSTRWQSSO_F VDDUPQ VDDUPQ_M VDWDUPQ
209 VDWDUPQ_M VIDUPQ VIDUPQ_M VIWDUPQ VIWDUPQ_M
210 VSTRWQSBWB_S VSTRWQSBWB_U VLDRWQGBWB_S VLDRWQGBWB_U
211 VSTRWQSBWB_F VLDRWQGBWB_F VSTRDQSBWB_S VSTRDQSBWB_U
212 VLDRDQGBWB_S VLDRDQGBWB_U VADCQ_U VADCQ_M_U VADCQ_S
213 VADCQ_M_S VSBCIQ_U VSBCIQ_S VSBCIQ_M_U VSBCIQ_M_S
214 VSBCQ_U VSBCQ_S VSBCQ_M_U VSBCQ_M_S VADCIQ_U VADCIQ_M_U
215 VADCIQ_S VADCIQ_M_S VLD2Q VLD4Q VST2Q SRSHRL SRSHR
216 URSHR URSHRL SQRSHR UQRSHL UQRSHLL_64 VSHLCQ_M_U
217 UQRSHLL_48 SQRSHRL_64 SQRSHRL_48 VSHLCQ_M_S])
219 (define_mode_attr MVE_CNVT [(V8HI "V8HF") (V4SI "V4SF") (V8HF "V8HI")
222 (define_int_attr supf [(VCVTQ_TO_F_S "s") (VCVTQ_TO_F_U "u") (VREV16Q_S "s")
223 (VREV16Q_U "u") (VMVNQ_N_S "s") (VMVNQ_N_U "u")
224 (VCVTAQ_U "u") (VCVTAQ_S "s") (VREV64Q_S "s")
225 (VREV64Q_U "u") (VMVNQ_S "s") (VMVNQ_U "u")
226 (VDUPQ_N_U "u") (VDUPQ_N_S"s") (VADDVQ_S "s")
227 (VADDVQ_U "u") (VADDVQ_S "s") (VADDVQ_U "u")
228 (VMOVLTQ_U "u") (VMOVLTQ_S "s") (VMOVLBQ_S "s")
229 (VMOVLBQ_U "u") (VCVTQ_FROM_F_S "s") (VCVTQ_FROM_F_U "u")
230 (VCVTPQ_S "s") (VCVTPQ_U "u") (VCVTNQ_S "s")
231 (VCVTNQ_U "u") (VCVTMQ_S "s") (VCVTMQ_U "u")
232 (VCLZQ_U "u") (VCLZQ_S "s") (VREV32Q_U "u")
233 (VREV32Q_S "s") (VADDLVQ_U "u") (VADDLVQ_S "s")
234 (VCVTQ_N_TO_F_S "s") (VCVTQ_N_TO_F_U "u")
235 (VCREATEQ_U "u") (VCREATEQ_S "s") (VSHRQ_N_S "s")
236 (VSHRQ_N_U "u") (VCVTQ_N_FROM_F_S "s") (VSHLQ_U "u")
237 (VCVTQ_N_FROM_F_U "u") (VADDLVQ_P_S "s") (VSHLQ_S "s")
238 (VADDLVQ_P_U "u") (VCMPNEQ_U "u") (VCMPNEQ_S "s")
239 (VABDQ_M_S "s") (VABDQ_M_U "u") (VABDQ_S "s")
240 (VABDQ_U "u") (VADDQ_N_S "s") (VADDQ_N_U "u")
241 (VADDVQ_P_S "s") (VADDVQ_P_U "u") (VANDQ_S "s")
242 (VANDQ_U "u") (VBICQ_S "s") (VBICQ_U "u")
243 (VBRSRQ_N_S "s") (VBRSRQ_N_U "u") (VCADDQ_ROT270_S "s")
244 (VCADDQ_ROT270_U "u") (VCADDQ_ROT90_S "s")
245 (VCMPEQQ_S "s") (VCMPEQQ_U "u") (VCADDQ_ROT90_U "u")
246 (VCMPEQQ_N_S "s") (VCMPEQQ_N_U "u") (VCMPNEQ_N_S "s")
247 (VCMPNEQ_N_U "u") (VEORQ_S "s") (VEORQ_U "u")
248 (VHADDQ_N_S "s") (VHADDQ_N_U "u") (VHADDQ_S "s")
249 (VHADDQ_U "u") (VHSUBQ_N_S "s") (VHSUBQ_N_U "u")
250 (VHSUBQ_S "s") (VMAXQ_S "s") (VMAXQ_U "u") (VHSUBQ_U "u")
251 (VMAXVQ_S "s") (VMAXVQ_U "u") (VMINQ_S "s") (VMINQ_U "u")
252 (VMINVQ_S "s") (VMINVQ_U "u") (VMLADAVQ_S "s")
253 (VMLADAVQ_U "u") (VMULHQ_S "s") (VMULHQ_U "u")
254 (VMULLBQ_INT_S "s") (VMULLBQ_INT_U "u") (VQADDQ_S "s")
255 (VMULLTQ_INT_S "s") (VMULLTQ_INT_U "u") (VQADDQ_U "u")
256 (VMULQ_N_S "s") (VMULQ_N_U "u") (VMULQ_S "s")
257 (VMULQ_U "u") (VORNQ_S "s") (VORNQ_U "u") (VORRQ_S "s")
258 (VORRQ_U "u") (VQADDQ_N_S "s") (VQADDQ_N_U "u")
259 (VQRSHLQ_N_S "s") (VQRSHLQ_N_U "u") (VQRSHLQ_S "s")
260 (VQRSHLQ_U "u") (VQSHLQ_N_S "s") (VQSHLQ_N_U "u")
261 (VQSHLQ_R_S "s") (VQSHLQ_R_U "u") (VQSHLQ_S "s")
262 (VQSHLQ_U "u") (VQSUBQ_N_S "s") (VQSUBQ_N_U "u")
263 (VQSUBQ_S "s") (VQSUBQ_U "u") (VRHADDQ_S "s")
264 (VRHADDQ_U "u") (VRMULHQ_S "s") (VRMULHQ_U "u")
265 (VRSHLQ_N_S "s") (VRSHLQ_N_U "u") (VRSHLQ_S "s")
266 (VRSHLQ_U "u") (VRSHRQ_N_S "s") (VRSHRQ_N_U "u")
267 (VSHLQ_N_S "s") (VSHLQ_N_U "u") (VSHLQ_R_S "s")
268 (VSHLQ_R_U "u") (VSUBQ_N_S "s") (VSUBQ_N_U "u")
269 (VSUBQ_S "s") (VSUBQ_U "u") (VADDVAQ_S "s")
270 (VADDVAQ_U "u") (VADDLVAQ_S "s") (VADDLVAQ_U "u")
271 (VBICQ_N_S "s") (VBICQ_N_U "u") (VMLALDAVQ_U "u")
272 (VMLALDAVQ_S "s") (VMLALDAVXQ_U "u") (VMLALDAVXQ_S "s")
273 (VMOVNBQ_U "u") (VMOVNBQ_S "s") (VMOVNTQ_U "u")
274 (VMOVNTQ_S "s") (VORRQ_N_S "s") (VORRQ_N_U "u")
275 (VQMOVNBQ_U "u") (VQMOVNBQ_S "s") (VQMOVNTQ_S "s")
276 (VQMOVNTQ_U "u") (VSHLLBQ_N_U "u") (VSHLLBQ_N_S "s")
277 (VSHLLTQ_N_U "u") (VSHLLTQ_N_S "s") (VRMLALDAVHQ_U "u")
278 (VRMLALDAVHQ_S "s") (VBICQ_M_N_S "s") (VBICQ_M_N_U "u")
279 (VCVTAQ_M_S "s") (VCVTAQ_M_U "u") (VCVTQ_M_TO_F_S "s")
280 (VCVTQ_M_TO_F_U "u") (VQRSHRNBQ_N_S "s")
281 (VQRSHRNBQ_N_U "u") (VABAVQ_S "s") (VABAVQ_U "u")
282 (VRMLALDAVHAQ_U "u") (VRMLALDAVHAQ_S "s") (VSHLCQ_S "s")
283 (VSHLCQ_U "u") (VADDVAQ_P_S "s") (VADDVAQ_P_U "u")
284 (VCLZQ_M_S "s") (VCLZQ_M_U "u") (VCMPEQQ_M_N_S "s")
285 (VCMPEQQ_M_N_U "u") (VCMPEQQ_M_S "s") (VCMPEQQ_M_U "u")
286 (VCMPNEQ_M_N_S "s") (VCMPNEQ_M_N_U "u") (VCMPNEQ_M_S "s")
287 (VCMPNEQ_M_U "u") (VDUPQ_M_N_S "s") (VDUPQ_M_N_U "u")
288 (VMAXVQ_P_S "s") (VMAXVQ_P_U "u") (VMINVQ_P_S "s")
289 (VMINVQ_P_U "u") (VMLADAVAQ_S "s") (VMLADAVAQ_U "u")
290 (VMLADAVQ_P_S "s") (VMLADAVQ_P_U "u") (VMLAQ_N_S "s")
291 (VMLAQ_N_U "u") (VMLASQ_N_S "s") (VMLASQ_N_U "u")
292 (VMVNQ_M_S "s") (VMVNQ_M_U "u") (VPSELQ_S "s")
293 (VPSELQ_U "u") (VQDMLAHQ_N_S "s") (VQDMLAHQ_N_U "u")
294 (VQRDMLAHQ_N_S "s") (VQRDMLAHQ_N_U "u")
295 (VQRDMLASHQ_N_S "s") (VQRDMLASHQ_N_U "u")
296 (VQRSHLQ_M_N_S "s") (VQRSHLQ_M_N_U "u")
297 (VQSHLQ_M_R_S "s") (VQSHLQ_M_R_U "u") (VSRIQ_N_S "s")
298 (VREV64Q_M_S "s") (VREV64Q_M_U "u") (VSRIQ_N_U "u")
299 (VRSHLQ_M_N_S "s") (VRSHLQ_M_N_U "u") (VSHLQ_M_R_S "s")
300 (VSHLQ_M_R_U "u") (VSLIQ_N_S "s") (VSLIQ_N_U "u")
301 (VMLALDAVQ_P_S "s") (VQMOVNBQ_M_S "s") (VMOVLTQ_M_S "s")
302 (VMOVNBQ_M_S "s") (VRSHRNTQ_N_S "s") (VORRQ_M_N_S "s")
303 (VREV32Q_M_S "s") (VQRSHRNTQ_N_S "s") (VMOVNTQ_M_S "s")
304 (VMOVLBQ_M_S "s") (VMLALDAVAQ_S "s") (VQSHRNBQ_N_S "s")
305 (VSHRNBQ_N_S "s") (VRSHRNBQ_N_S "s") (VMLALDAVXQ_P_S "s")
306 (VQMOVNTQ_M_S "s") (VMVNQ_M_N_S "s") (VQSHRNTQ_N_S "s")
307 (VMLALDAVAXQ_S "s") (VSHRNTQ_N_S "s") (VMLALDAVQ_P_U "u")
308 (VQMOVNBQ_M_U "u") (VMOVLTQ_M_U "u") (VMOVNBQ_M_U "u")
309 (VRSHRNTQ_N_U "u") (VORRQ_M_N_U "u") (VREV32Q_M_U "u")
310 (VREV16Q_M_S "s") (VREV16Q_M_U "u")
311 (VQRSHRNTQ_N_U "u") (VMOVNTQ_M_U "u") (VMOVLBQ_M_U "u")
312 (VMLALDAVAQ_U "u") (VQSHRNBQ_N_U "u") (VSHRNBQ_N_U "u")
313 (VRSHRNBQ_N_U "u") (VMLALDAVXQ_P_U "u")
314 (VMVNQ_M_N_U "u") (VQSHRNTQ_N_U "u") (VMLALDAVAXQ_U "u")
315 (VQMOVNTQ_M_U "u") (VSHRNTQ_N_U "u") (VCVTMQ_M_S "s")
316 (VCVTMQ_M_U "u") (VCVTNQ_M_S "s") (VCVTNQ_M_U "u")
317 (VCVTPQ_M_S "s") (VCVTPQ_M_U "u") (VADDLVAQ_P_S "s")
318 (VCVTQ_M_N_FROM_F_U "u") (VCVTQ_M_FROM_F_S "s")
319 (VCVTQ_M_FROM_F_U "u") (VRMLALDAVHQ_P_U "u")
320 (VRMLALDAVHQ_P_S "s") (VADDLVAQ_P_U "u")
321 (VCVTQ_M_N_FROM_F_S "s") (VABAVQ_P_U "u")
322 (VABAVQ_P_S "s") (VSHLQ_M_S "s") (VSHLQ_M_U "u")
323 (VSRIQ_M_N_S "s") (VSRIQ_M_N_U "u") (VSUBQ_M_S "s")
324 (VSUBQ_M_U "u") (VCVTQ_M_N_TO_F_S "s")
325 (VCVTQ_M_N_TO_F_U "u") (VADDQ_M_N_U "u")
326 (VSHLQ_M_N_S "s") (VMAXQ_M_U "u") (VHSUBQ_M_N_U "u")
327 (VMULQ_M_N_S "s") (VQSHLQ_M_U "u") (VRHADDQ_M_S "s")
328 (VEORQ_M_U "u") (VSHRQ_M_N_U "u") (VCADDQ_ROT90_M_U "u")
329 (VMLADAVAQ_P_U "u") (VEORQ_M_S "s") (VBRSRQ_M_N_S "s")
330 (VMULQ_M_U "u") (VQRDMLAHQ_M_N_S "s") (VHSUBQ_M_N_S "s")
331 (VQRSHLQ_M_S "s") (VMULQ_M_N_U "u")
332 (VMULQ_M_S "s") (VQSHLQ_M_N_U "u") (VSLIQ_M_N_U "u")
333 (VMLADAVAQ_P_S "s") (VQRSHLQ_M_U "u")
334 (VMULLBQ_INT_M_U "u") (VSHLQ_M_N_U "u") (VQSUBQ_M_U "u")
335 (VQRDMLASHQ_M_N_U "u") (VRSHRQ_M_N_S "s")
336 (VORNQ_M_S "s") (VCADDQ_ROT270_M_S "s") (VRHADDQ_M_U "u")
337 (VRSHRQ_M_N_U "u") (VMLASQ_M_N_U "u") (VHSUBQ_M_U "u")
338 (VQSUBQ_M_N_S "s") (VMULLTQ_INT_M_S "s")
339 (VORRQ_M_S "s") (VQDMLAHQ_M_N_U "u") (VRSHLQ_M_S "s")
340 (VHADDQ_M_U "u") (VHADDQ_M_N_S "s") (VMULLTQ_INT_M_U "u")
341 (VORRQ_M_U "u") (VHADDQ_M_S "s") (VHADDQ_M_N_U "u")
342 (VQDMLAHQ_M_N_S "s") (VMAXQ_M_S "s") (VORNQ_M_U "u")
343 (VCADDQ_ROT270_M_U "u") (VQADDQ_M_U "u")
344 (VQRDMLASHQ_M_N_S "s") (VBICQ_M_U "u") (VMINQ_M_U "u")
345 (VSUBQ_M_N_S "s") (VMULLBQ_INT_M_S "s") (VQSUBQ_M_S "s")
346 (VCADDQ_ROT90_M_S "s") (VRMULHQ_M_S "s") (VANDQ_M_U "u")
347 (VMULHQ_M_S "s") (VADDQ_M_S "s") (VQRDMLAHQ_M_N_U "u")
348 (VMLASQ_M_N_S "s") (VHSUBQ_M_S "s") (VRMULHQ_M_U "u")
349 (VQADDQ_M_N_S "s") (VSHRQ_M_N_S "s") (VANDQ_M_S "s")
350 (VABDQ_M_U "u") (VQSHLQ_M_S "s") (VABDQ_M_S "s")
351 (VSUBQ_M_N_U "u") (VMLAQ_M_N_S "s") (VBRSRQ_M_N_U "u")
352 (VADDQ_M_U "u") (VRSHLQ_M_U "u") (VSLIQ_M_N_S "s")
353 (VQADDQ_M_N_U "u") (VADDQ_M_N_S "s") (VQSUBQ_M_N_U "u")
354 (VMLAQ_M_N_U "u") (VMINQ_M_S "s") (VMULHQ_M_U "u")
355 (VQADDQ_M_S "s") (VBICQ_M_S "s") (VQSHLQ_M_N_S "s")
356 (VQSHRNTQ_M_N_S "s") (VQSHRNTQ_M_N_U "u")
357 (VSHRNTQ_M_N_U "u") (VSHRNTQ_M_N_S "s")
358 (VSHRNBQ_M_N_S "s") (VSHRNBQ_M_N_U "u")
359 (VSHLLTQ_M_N_S "s") (VSHLLTQ_M_N_U "u")
360 (VSHLLBQ_M_N_S "s") (VSHLLBQ_M_N_U "u")
361 (VRSHRNTQ_M_N_S "s") (VRSHRNTQ_M_N_U "u")
362 (VRSHRNBQ_M_N_U "u") (VRSHRNBQ_M_N_S "s")
363 (VQSHRNTQ_M_N_U "u") (VQSHRNTQ_M_N_S "s")
364 (VQSHRNBQ_M_N_S "s") (VQSHRNBQ_M_N_U "u")
365 (VQRSHRNTQ_M_N_S "s") (VQRSHRNTQ_M_N_U "u")
366 (VQRSHRNBQ_M_N_S "s") (VQRSHRNBQ_M_N_U "u")
367 (VMLALDAVAXQ_P_S "s") (VMLALDAVAXQ_P_U "u")
368 (VMLALDAVAQ_P_S "s") (VMLALDAVAQ_P_U "u")
369 (VSTRWQSB_S "s") (VSTRWQSB_U "u") (VSTRBQSO_S "s")
370 (VSTRBQSO_U "u") (VSTRBQ_S "s") (VSTRBQ_U "u")
371 (VLDRBQGO_S "s") (VLDRBQGO_U "u") (VLDRBQ_S "s")
372 (VLDRBQ_U "u") (VLDRWQGB_S "s") (VLDRWQGB_U "u")
373 (VLD1Q_S "s") (VLD1Q_U "u") (VLDRHQGO_S "s")
374 (VLDRHQGO_U "u") (VLDRHQGSO_S "s") (VLDRHQGSO_U "u")
375 (VLDRHQ_S "s") (VLDRHQ_U "u") (VLDRWQ_S "s")
376 (VLDRWQ_U "u") (VLDRDQGB_S "s") (VLDRDQGB_U "u")
377 (VLDRDQGO_S "s") (VLDRDQGO_U "u") (VLDRDQGSO_S "s")
378 (VLDRDQGSO_U "u") (VLDRWQGO_S "s") (VLDRWQGO_U "u")
379 (VLDRWQGSO_S "s") (VLDRWQGSO_U "u") (VST1Q_S "s")
380 (VST1Q_U "u") (VSTRHQSO_S "s") (VSTRHQSO_U "u")
381 (VSTRHQSSO_S "s") (VSTRHQSSO_U "u") (VSTRHQ_S "s")
382 (VSTRHQ_U "u") (VSTRWQ_S "s") (VSTRWQ_U "u")
383 (VSTRDQSB_S "s") (VSTRDQSB_U "u") (VSTRDQSO_S "s")
384 (VSTRDQSO_U "u") (VSTRDQSSO_S "s") (VSTRDQSSO_U "u")
385 (VSTRWQSO_U "u") (VSTRWQSO_S "s") (VSTRWQSSO_U "u")
386 (VSTRWQSSO_S "s") (VSTRWQSBWB_S "s") (VSTRWQSBWB_U "u")
387 (VLDRWQGBWB_S "s") (VLDRWQGBWB_U "u") (VLDRDQGBWB_S "s")
388 (VLDRDQGBWB_U "u") (VSTRDQSBWB_S "s") (VADCQ_M_S "s")
389 (VSTRDQSBWB_U "u") (VSBCQ_U "u") (VSBCQ_M_U "u")
390 (VSBCQ_S "s") (VSBCQ_M_S "s") (VSBCIQ_U "u")
391 (VSBCIQ_M_U "u") (VSBCIQ_S "s") (VSBCIQ_M_S "s")
392 (VADCQ_U "u") (VADCQ_M_U "u") (VADCQ_S "s")
393 (VADCIQ_U "u") (VADCIQ_M_U "u") (VADCIQ_S "s")
394 (VADCIQ_M_S "s") (SQRSHRL_64 "64") (SQRSHRL_48 "48")
395 (UQRSHLL_64 "64") (UQRSHLL_48 "48") (VSHLCQ_M_S "s")
398 (define_int_attr mode1 [(VCTP8Q "8") (VCTP16Q "16") (VCTP32Q "32")
399 (VCTP64Q "64") (VCTP8Q_M "8") (VCTP16Q_M "16")
400 (VCTP32Q_M "32") (VCTP64Q_M "64")])
401 (define_mode_attr MVE_pred2 [(V16QI "mve_imm_8") (V8HI "mve_imm_16")
403 (V8HF "mve_imm_16") (V4SF "mve_imm_32")])
404 (define_mode_attr MVE_constraint2 [(V16QI "Rb") (V8HI "Rd") (V4SI "Rf")
405 (V8HF "Rd") (V4SF "Rf")])
406 (define_mode_attr MVE_LANES [(V16QI "16") (V8HI "8") (V4SI "4")])
407 (define_mode_attr MVE_constraint [ (V16QI "Ra") (V8HI "Rc") (V4SI "Re")])
408 (define_mode_attr MVE_pred [ (V16QI "mve_imm_7") (V8HI "mve_imm_15")
409 (V4SI "mve_imm_31")])
410 (define_mode_attr MVE_constraint3 [ (V8HI "Rb") (V4SI "Rd")])
411 (define_mode_attr MVE_pred3 [ (V8HI "mve_imm_8") (V4SI "mve_imm_16")])
412 (define_mode_attr MVE_constraint1 [ (V8HI "Ra") (V4SI "Rc")])
413 (define_mode_attr MVE_pred1 [ (V8HI "mve_imm_7") (V4SI "mve_imm_15")])
414 (define_mode_attr MVE_B_ELEM [ (V16QI "V16QI") (V8HI "V8QI") (V4SI "V4QI")])
415 (define_mode_attr MVE_H_ELEM [ (V8HI "V8HI") (V4SI "V4HI")])
416 (define_mode_attr V_sz_elem1 [(V16QI "b") (V8HI "h") (V4SI "w") (V8HF "h")
418 (define_mode_attr V_extr_elem [(V16QI "u8") (V8HI "u16") (V4SI "32")
419 (V8HF "u16") (V4SF "32")])
421 (define_mode_attr earlyclobber_32 [(V16QI "=w") (V8HI "=w") (V4SI "=&w")
422 (V8HF "=w") (V4SF "=&w")])
424 (define_int_iterator VCVTQ_TO_F [VCVTQ_TO_F_S VCVTQ_TO_F_U])
425 (define_int_iterator VMVNQ_N [VMVNQ_N_U VMVNQ_N_S])
426 (define_int_iterator VREV64Q [VREV64Q_S VREV64Q_U])
427 (define_int_iterator VCVTQ_FROM_F [VCVTQ_FROM_F_S VCVTQ_FROM_F_U])
428 (define_int_iterator VREV16Q [VREV16Q_U VREV16Q_S])
429 (define_int_iterator VCVTAQ [VCVTAQ_U VCVTAQ_S])
430 (define_int_iterator VMVNQ [VMVNQ_U VMVNQ_S])
431 (define_int_iterator VDUPQ_N [VDUPQ_N_U VDUPQ_N_S])
432 (define_int_iterator VCLZQ [VCLZQ_U VCLZQ_S])
433 (define_int_iterator VADDVQ [VADDVQ_U VADDVQ_S])
434 (define_int_iterator VREV32Q [VREV32Q_U VREV32Q_S])
435 (define_int_iterator VMOVLBQ [VMOVLBQ_S VMOVLBQ_U])
436 (define_int_iterator VMOVLTQ [VMOVLTQ_U VMOVLTQ_S])
437 (define_int_iterator VCVTPQ [VCVTPQ_S VCVTPQ_U])
438 (define_int_iterator VCVTNQ [VCVTNQ_S VCVTNQ_U])
439 (define_int_iterator VCVTMQ [VCVTMQ_S VCVTMQ_U])
440 (define_int_iterator VADDLVQ [VADDLVQ_U VADDLVQ_S])
441 (define_int_iterator VCTPQ [VCTP8Q VCTP16Q VCTP32Q VCTP64Q])
442 (define_int_iterator VCTPQ_M [VCTP8Q_M VCTP16Q_M VCTP32Q_M VCTP64Q_M])
443 (define_int_iterator VCVTQ_N_TO_F [VCVTQ_N_TO_F_S VCVTQ_N_TO_F_U])
444 (define_int_iterator VCREATEQ [VCREATEQ_U VCREATEQ_S])
445 (define_int_iterator VSHRQ_N [VSHRQ_N_S VSHRQ_N_U])
446 (define_int_iterator VCVTQ_N_FROM_F [VCVTQ_N_FROM_F_S VCVTQ_N_FROM_F_U])
447 (define_int_iterator VADDLVQ_P [VADDLVQ_P_S VADDLVQ_P_U])
448 (define_int_iterator VCMPNEQ [VCMPNEQ_U VCMPNEQ_S])
449 (define_int_iterator VSHLQ [VSHLQ_S VSHLQ_U])
450 (define_int_iterator VABDQ [VABDQ_S VABDQ_U])
451 (define_int_iterator VADDQ_N [VADDQ_N_S VADDQ_N_U])
452 (define_int_iterator VADDVAQ [VADDVAQ_S VADDVAQ_U])
453 (define_int_iterator VADDVQ_P [VADDVQ_P_U VADDVQ_P_S])
454 (define_int_iterator VANDQ [VANDQ_U VANDQ_S])
455 (define_int_iterator VBICQ [VBICQ_S VBICQ_U])
456 (define_int_iterator VBRSRQ_N [VBRSRQ_N_U VBRSRQ_N_S])
457 (define_int_iterator VCADDQ_ROT270 [VCADDQ_ROT270_S VCADDQ_ROT270_U])
458 (define_int_iterator VCADDQ_ROT90 [VCADDQ_ROT90_U VCADDQ_ROT90_S])
459 (define_int_iterator VCMPEQQ [VCMPEQQ_U VCMPEQQ_S])
460 (define_int_iterator VCMPEQQ_N [VCMPEQQ_N_S VCMPEQQ_N_U])
461 (define_int_iterator VCMPNEQ_N [VCMPNEQ_N_U VCMPNEQ_N_S])
462 (define_int_iterator VEORQ [VEORQ_U VEORQ_S])
463 (define_int_iterator VHADDQ [VHADDQ_S VHADDQ_U])
464 (define_int_iterator VHADDQ_N [VHADDQ_N_U VHADDQ_N_S])
465 (define_int_iterator VHSUBQ [VHSUBQ_S VHSUBQ_U])
466 (define_int_iterator VHSUBQ_N [VHSUBQ_N_U VHSUBQ_N_S])
467 (define_int_iterator VMAXQ [VMAXQ_U VMAXQ_S])
468 (define_int_iterator VMAXVQ [VMAXVQ_U VMAXVQ_S])
469 (define_int_iterator VMINQ [VMINQ_S VMINQ_U])
470 (define_int_iterator VMINVQ [VMINVQ_U VMINVQ_S])
471 (define_int_iterator VMLADAVQ [VMLADAVQ_U VMLADAVQ_S])
472 (define_int_iterator VMULHQ [VMULHQ_S VMULHQ_U])
473 (define_int_iterator VMULLBQ_INT [VMULLBQ_INT_U VMULLBQ_INT_S])
474 (define_int_iterator VMULLTQ_INT [VMULLTQ_INT_U VMULLTQ_INT_S])
475 (define_int_iterator VMULQ [VMULQ_U VMULQ_S])
476 (define_int_iterator VMULQ_N [VMULQ_N_U VMULQ_N_S])
477 (define_int_iterator VORNQ [VORNQ_U VORNQ_S])
478 (define_int_iterator VORRQ [VORRQ_S VORRQ_U])
479 (define_int_iterator VQADDQ [VQADDQ_U VQADDQ_S])
480 (define_int_iterator VQADDQ_N [VQADDQ_N_S VQADDQ_N_U])
481 (define_int_iterator VQRSHLQ [VQRSHLQ_S VQRSHLQ_U])
482 (define_int_iterator VQRSHLQ_N [VQRSHLQ_N_S VQRSHLQ_N_U])
483 (define_int_iterator VQSHLQ [VQSHLQ_S VQSHLQ_U])
484 (define_int_iterator VQSHLQ_N [VQSHLQ_N_S VQSHLQ_N_U])
485 (define_int_iterator VQSHLQ_R [VQSHLQ_R_U VQSHLQ_R_S])
486 (define_int_iterator VQSUBQ [VQSUBQ_U VQSUBQ_S])
487 (define_int_iterator VQSUBQ_N [VQSUBQ_N_S VQSUBQ_N_U])
488 (define_int_iterator VRHADDQ [VRHADDQ_S VRHADDQ_U])
489 (define_int_iterator VRMULHQ [VRMULHQ_S VRMULHQ_U])
490 (define_int_iterator VRSHLQ [VRSHLQ_S VRSHLQ_U])
491 (define_int_iterator VRSHLQ_N [VRSHLQ_N_U VRSHLQ_N_S])
492 (define_int_iterator VRSHRQ_N [VRSHRQ_N_S VRSHRQ_N_U])
493 (define_int_iterator VSHLQ_N [VSHLQ_N_U VSHLQ_N_S])
494 (define_int_iterator VSHLQ_R [VSHLQ_R_S VSHLQ_R_U])
495 (define_int_iterator VSUBQ [VSUBQ_S VSUBQ_U])
496 (define_int_iterator VSUBQ_N [VSUBQ_N_S VSUBQ_N_U])
497 (define_int_iterator VADDLVAQ [VADDLVAQ_S VADDLVAQ_U])
498 (define_int_iterator VBICQ_N [VBICQ_N_S VBICQ_N_U])
499 (define_int_iterator VMLALDAVQ [VMLALDAVQ_U VMLALDAVQ_S])
500 (define_int_iterator VMLALDAVXQ [VMLALDAVXQ_U VMLALDAVXQ_S])
501 (define_int_iterator VMOVNBQ [VMOVNBQ_U VMOVNBQ_S])
502 (define_int_iterator VMOVNTQ [VMOVNTQ_S VMOVNTQ_U])
503 (define_int_iterator VORRQ_N [VORRQ_N_U VORRQ_N_S])
504 (define_int_iterator VQMOVNBQ [VQMOVNBQ_U VQMOVNBQ_S])
505 (define_int_iterator VQMOVNTQ [VQMOVNTQ_U VQMOVNTQ_S])
506 (define_int_iterator VSHLLBQ_N [VSHLLBQ_N_S VSHLLBQ_N_U])
507 (define_int_iterator VSHLLTQ_N [VSHLLTQ_N_U VSHLLTQ_N_S])
508 (define_int_iterator VRMLALDAVHQ [VRMLALDAVHQ_U VRMLALDAVHQ_S])
509 (define_int_iterator VBICQ_M_N [VBICQ_M_N_S VBICQ_M_N_U])
510 (define_int_iterator VCVTAQ_M [VCVTAQ_M_S VCVTAQ_M_U])
511 (define_int_iterator VCVTQ_M_TO_F [VCVTQ_M_TO_F_S VCVTQ_M_TO_F_U])
512 (define_int_iterator VQRSHRNBQ_N [VQRSHRNBQ_N_U VQRSHRNBQ_N_S])
513 (define_int_iterator VABAVQ [VABAVQ_S VABAVQ_U])
514 (define_int_iterator VSHLCQ [VSHLCQ_S VSHLCQ_U])
515 (define_int_iterator VRMLALDAVHAQ [VRMLALDAVHAQ_S VRMLALDAVHAQ_U])
516 (define_int_iterator VADDVAQ_P [VADDVAQ_P_S VADDVAQ_P_U])
517 (define_int_iterator VCLZQ_M [VCLZQ_M_S VCLZQ_M_U])
518 (define_int_iterator VCMPEQQ_M_N [VCMPEQQ_M_N_S VCMPEQQ_M_N_U])
519 (define_int_iterator VCMPEQQ_M [VCMPEQQ_M_S VCMPEQQ_M_U])
520 (define_int_iterator VCMPNEQ_M_N [VCMPNEQ_M_N_S VCMPNEQ_M_N_U])
521 (define_int_iterator VCMPNEQ_M [VCMPNEQ_M_S VCMPNEQ_M_U])
522 (define_int_iterator VDUPQ_M_N [VDUPQ_M_N_S VDUPQ_M_N_U])
523 (define_int_iterator VMAXVQ_P [VMAXVQ_P_S VMAXVQ_P_U])
524 (define_int_iterator VMINVQ_P [VMINVQ_P_S VMINVQ_P_U])
525 (define_int_iterator VMLADAVAQ [VMLADAVAQ_S VMLADAVAQ_U])
526 (define_int_iterator VMLADAVQ_P [VMLADAVQ_P_S VMLADAVQ_P_U])
527 (define_int_iterator VMLAQ_N [VMLAQ_N_S VMLAQ_N_U])
528 (define_int_iterator VMLASQ_N [VMLASQ_N_S VMLASQ_N_U])
529 (define_int_iterator VMVNQ_M [VMVNQ_M_S VMVNQ_M_U])
530 (define_int_iterator VPSELQ [VPSELQ_S VPSELQ_U])
531 (define_int_iterator VQDMLAHQ_N [VQDMLAHQ_N_S VQDMLAHQ_N_U])
532 (define_int_iterator VQRDMLAHQ_N [VQRDMLAHQ_N_S VQRDMLAHQ_N_U])
533 (define_int_iterator VQRDMLASHQ_N [VQRDMLASHQ_N_S VQRDMLASHQ_N_U])
534 (define_int_iterator VQRSHLQ_M_N [VQRSHLQ_M_N_S VQRSHLQ_M_N_U])
535 (define_int_iterator VQSHLQ_M_R [VQSHLQ_M_R_S VQSHLQ_M_R_U])
536 (define_int_iterator VREV64Q_M [VREV64Q_M_S VREV64Q_M_U])
537 (define_int_iterator VRSHLQ_M_N [VRSHLQ_M_N_S VRSHLQ_M_N_U])
538 (define_int_iterator VSHLQ_M_R [VSHLQ_M_R_S VSHLQ_M_R_U])
539 (define_int_iterator VSLIQ_N [VSLIQ_N_S VSLIQ_N_U])
540 (define_int_iterator VSRIQ_N [VSRIQ_N_S VSRIQ_N_U])
541 (define_int_iterator VMLALDAVQ_P [VMLALDAVQ_P_U VMLALDAVQ_P_S])
542 (define_int_iterator VQMOVNBQ_M [VQMOVNBQ_M_S VQMOVNBQ_M_U])
543 (define_int_iterator VMOVLTQ_M [VMOVLTQ_M_U VMOVLTQ_M_S])
544 (define_int_iterator VMOVNBQ_M [VMOVNBQ_M_U VMOVNBQ_M_S])
545 (define_int_iterator VRSHRNTQ_N [VRSHRNTQ_N_U VRSHRNTQ_N_S])
546 (define_int_iterator VORRQ_M_N [VORRQ_M_N_S VORRQ_M_N_U])
547 (define_int_iterator VREV32Q_M [VREV32Q_M_S VREV32Q_M_U])
548 (define_int_iterator VREV16Q_M [VREV16Q_M_S VREV16Q_M_U])
549 (define_int_iterator VQRSHRNTQ_N [VQRSHRNTQ_N_U VQRSHRNTQ_N_S])
550 (define_int_iterator VMOVNTQ_M [VMOVNTQ_M_U VMOVNTQ_M_S])
551 (define_int_iterator VMOVLBQ_M [VMOVLBQ_M_U VMOVLBQ_M_S])
552 (define_int_iterator VMLALDAVAQ [VMLALDAVAQ_S VMLALDAVAQ_U])
553 (define_int_iterator VQSHRNBQ_N [VQSHRNBQ_N_U VQSHRNBQ_N_S])
554 (define_int_iterator VSHRNBQ_N [VSHRNBQ_N_U VSHRNBQ_N_S])
555 (define_int_iterator VRSHRNBQ_N [VRSHRNBQ_N_S VRSHRNBQ_N_U])
556 (define_int_iterator VMLALDAVXQ_P [VMLALDAVXQ_P_U VMLALDAVXQ_P_S])
557 (define_int_iterator VQMOVNTQ_M [VQMOVNTQ_M_U VQMOVNTQ_M_S])
558 (define_int_iterator VMVNQ_M_N [VMVNQ_M_N_U VMVNQ_M_N_S])
559 (define_int_iterator VQSHRNTQ_N [VQSHRNTQ_N_U VQSHRNTQ_N_S])
560 (define_int_iterator VMLALDAVAXQ [VMLALDAVAXQ_S VMLALDAVAXQ_U])
561 (define_int_iterator VSHRNTQ_N [VSHRNTQ_N_S VSHRNTQ_N_U])
562 (define_int_iterator VCVTMQ_M [VCVTMQ_M_S VCVTMQ_M_U])
563 (define_int_iterator VCVTNQ_M [VCVTNQ_M_S VCVTNQ_M_U])
564 (define_int_iterator VCVTPQ_M [VCVTPQ_M_S VCVTPQ_M_U])
565 (define_int_iterator VCVTQ_M_N_FROM_F [VCVTQ_M_N_FROM_F_S VCVTQ_M_N_FROM_F_U])
566 (define_int_iterator VCVTQ_M_FROM_F [VCVTQ_M_FROM_F_U VCVTQ_M_FROM_F_S])
567 (define_int_iterator VRMLALDAVHQ_P [VRMLALDAVHQ_P_S VRMLALDAVHQ_P_U])
568 (define_int_iterator VADDLVAQ_P [VADDLVAQ_P_U VADDLVAQ_P_S])
569 (define_int_iterator VABAVQ_P [VABAVQ_P_S VABAVQ_P_U])
570 (define_int_iterator VSHLQ_M [VSHLQ_M_S VSHLQ_M_U])
571 (define_int_iterator VSRIQ_M_N [VSRIQ_M_N_S VSRIQ_M_N_U])
572 (define_int_iterator VSUBQ_M [VSUBQ_M_U VSUBQ_M_S])
573 (define_int_iterator VCVTQ_M_N_TO_F [VCVTQ_M_N_TO_F_U VCVTQ_M_N_TO_F_S])
574 (define_int_iterator VHSUBQ_M [VHSUBQ_M_S VHSUBQ_M_U])
575 (define_int_iterator VSLIQ_M_N [VSLIQ_M_N_U VSLIQ_M_N_S])
576 (define_int_iterator VRSHLQ_M [VRSHLQ_M_S VRSHLQ_M_U])
577 (define_int_iterator VMINQ_M [VMINQ_M_S VMINQ_M_U])
578 (define_int_iterator VMULLBQ_INT_M [VMULLBQ_INT_M_U VMULLBQ_INT_M_S])
579 (define_int_iterator VMULHQ_M [VMULHQ_M_S VMULHQ_M_U])
580 (define_int_iterator VMULQ_M [VMULQ_M_S VMULQ_M_U])
581 (define_int_iterator VHSUBQ_M_N [VHSUBQ_M_N_S VHSUBQ_M_N_U])
582 (define_int_iterator VHADDQ_M_N [VHADDQ_M_N_S VHADDQ_M_N_U])
583 (define_int_iterator VORRQ_M [VORRQ_M_S VORRQ_M_U])
584 (define_int_iterator VRMULHQ_M [VRMULHQ_M_U VRMULHQ_M_S])
585 (define_int_iterator VQADDQ_M [VQADDQ_M_U VQADDQ_M_S])
586 (define_int_iterator VRSHRQ_M_N [VRSHRQ_M_N_S VRSHRQ_M_N_U])
587 (define_int_iterator VQSUBQ_M_N [VQSUBQ_M_N_U VQSUBQ_M_N_S])
588 (define_int_iterator VADDQ_M [VADDQ_M_U VADDQ_M_S])
589 (define_int_iterator VORNQ_M [VORNQ_M_U VORNQ_M_S])
590 (define_int_iterator VRHADDQ_M [VRHADDQ_M_U VRHADDQ_M_S])
591 (define_int_iterator VQSHLQ_M [VQSHLQ_M_U VQSHLQ_M_S])
592 (define_int_iterator VANDQ_M [VANDQ_M_U VANDQ_M_S])
593 (define_int_iterator VBICQ_M [VBICQ_M_U VBICQ_M_S])
594 (define_int_iterator VSHLQ_M_N [VSHLQ_M_N_S VSHLQ_M_N_U])
595 (define_int_iterator VCADDQ_ROT270_M [VCADDQ_ROT270_M_U VCADDQ_ROT270_M_S])
596 (define_int_iterator VQRSHLQ_M [VQRSHLQ_M_U VQRSHLQ_M_S])
597 (define_int_iterator VQADDQ_M_N [VQADDQ_M_N_U VQADDQ_M_N_S])
598 (define_int_iterator VADDQ_M_N [VADDQ_M_N_S VADDQ_M_N_U])
599 (define_int_iterator VMAXQ_M [VMAXQ_M_S VMAXQ_M_U])
600 (define_int_iterator VQSUBQ_M [VQSUBQ_M_U VQSUBQ_M_S])
601 (define_int_iterator VMLASQ_M_N [VMLASQ_M_N_U VMLASQ_M_N_S])
602 (define_int_iterator VMLADAVAQ_P [VMLADAVAQ_P_U VMLADAVAQ_P_S])
603 (define_int_iterator VBRSRQ_M_N [VBRSRQ_M_N_U VBRSRQ_M_N_S])
604 (define_int_iterator VMULQ_M_N [VMULQ_M_N_U VMULQ_M_N_S])
605 (define_int_iterator VCADDQ_ROT90_M [VCADDQ_ROT90_M_U VCADDQ_ROT90_M_S])
606 (define_int_iterator VMULLTQ_INT_M [VMULLTQ_INT_M_S VMULLTQ_INT_M_U])
607 (define_int_iterator VEORQ_M [VEORQ_M_S VEORQ_M_U])
608 (define_int_iterator VSHRQ_M_N [VSHRQ_M_N_S VSHRQ_M_N_U])
609 (define_int_iterator VSUBQ_M_N [VSUBQ_M_N_S VSUBQ_M_N_U])
610 (define_int_iterator VHADDQ_M [VHADDQ_M_S VHADDQ_M_U])
611 (define_int_iterator VABDQ_M [VABDQ_M_S VABDQ_M_U])
612 (define_int_iterator VMLAQ_M_N [VMLAQ_M_N_S VMLAQ_M_N_U])
613 (define_int_iterator VQSHLQ_M_N [VQSHLQ_M_N_S VQSHLQ_M_N_U])
614 (define_int_iterator VMLALDAVAQ_P [VMLALDAVAQ_P_U VMLALDAVAQ_P_S])
615 (define_int_iterator VMLALDAVAXQ_P [VMLALDAVAXQ_P_U VMLALDAVAXQ_P_S])
616 (define_int_iterator VQRSHRNBQ_M_N [VQRSHRNBQ_M_N_U VQRSHRNBQ_M_N_S])
617 (define_int_iterator VQRSHRNTQ_M_N [VQRSHRNTQ_M_N_S VQRSHRNTQ_M_N_U])
618 (define_int_iterator VQSHRNBQ_M_N [VQSHRNBQ_M_N_U VQSHRNBQ_M_N_S])
619 (define_int_iterator VQSHRNTQ_M_N [VQSHRNTQ_M_N_S VQSHRNTQ_M_N_U])
620 (define_int_iterator VRSHRNBQ_M_N [VRSHRNBQ_M_N_U VRSHRNBQ_M_N_S])
621 (define_int_iterator VRSHRNTQ_M_N [VRSHRNTQ_M_N_U VRSHRNTQ_M_N_S])
622 (define_int_iterator VSHLLBQ_M_N [VSHLLBQ_M_N_U VSHLLBQ_M_N_S])
623 (define_int_iterator VSHLLTQ_M_N [VSHLLTQ_M_N_U VSHLLTQ_M_N_S])
624 (define_int_iterator VSHRNBQ_M_N [VSHRNBQ_M_N_S VSHRNBQ_M_N_U])
625 (define_int_iterator VSHRNTQ_M_N [VSHRNTQ_M_N_S VSHRNTQ_M_N_U])
626 (define_int_iterator VSTRWSBQ [VSTRWQSB_S VSTRWQSB_U])
627 (define_int_iterator VSTRBSOQ [VSTRBQSO_S VSTRBQSO_U])
628 (define_int_iterator VSTRBQ [VSTRBQ_S VSTRBQ_U])
629 (define_int_iterator VLDRBGOQ [VLDRBQGO_S VLDRBQGO_U])
630 (define_int_iterator VLDRBQ [VLDRBQ_S VLDRBQ_U])
631 (define_int_iterator VLDRWGBQ [VLDRWQGB_S VLDRWQGB_U])
632 (define_int_iterator VLD1Q [VLD1Q_S VLD1Q_U])
633 (define_int_iterator VLDRHGOQ [VLDRHQGO_S VLDRHQGO_U])
634 (define_int_iterator VLDRHGSOQ [VLDRHQGSO_S VLDRHQGSO_U])
635 (define_int_iterator VLDRHQ [VLDRHQ_S VLDRHQ_U])
636 (define_int_iterator VLDRWQ [VLDRWQ_S VLDRWQ_U])
637 (define_int_iterator VLDRDGBQ [VLDRDQGB_S VLDRDQGB_U])
638 (define_int_iterator VLDRDGOQ [VLDRDQGO_S VLDRDQGO_U])
639 (define_int_iterator VLDRDGSOQ [VLDRDQGSO_S VLDRDQGSO_U])
640 (define_int_iterator VLDRWGOQ [VLDRWQGO_S VLDRWQGO_U])
641 (define_int_iterator VLDRWGSOQ [VLDRWQGSO_S VLDRWQGSO_U])
642 (define_int_iterator VST1Q [VST1Q_S VST1Q_U])
643 (define_int_iterator VSTRHSOQ [VSTRHQSO_S VSTRHQSO_U])
644 (define_int_iterator VSTRHSSOQ [VSTRHQSSO_S VSTRHQSSO_U])
645 (define_int_iterator VSTRHQ [VSTRHQ_S VSTRHQ_U])
646 (define_int_iterator VSTRWQ [VSTRWQ_S VSTRWQ_U])
647 (define_int_iterator VSTRDSBQ [VSTRDQSB_S VSTRDQSB_U])
648 (define_int_iterator VSTRDSOQ [VSTRDQSO_S VSTRDQSO_U])
649 (define_int_iterator VSTRDSSOQ [VSTRDQSSO_S VSTRDQSSO_U])
650 (define_int_iterator VSTRWSOQ [VSTRWQSO_S VSTRWQSO_U])
651 (define_int_iterator VSTRWSSOQ [VSTRWQSSO_S VSTRWQSSO_U])
652 (define_int_iterator VSTRWSBWBQ [VSTRWQSBWB_S VSTRWQSBWB_U])
653 (define_int_iterator VLDRWGBWBQ [VLDRWQGBWB_S VLDRWQGBWB_U])
654 (define_int_iterator VSTRDSBWBQ [VSTRDQSBWB_S VSTRDQSBWB_U])
655 (define_int_iterator VLDRDGBWBQ [VLDRDQGBWB_S VLDRDQGBWB_U])
656 (define_int_iterator VADCIQ [VADCIQ_U VADCIQ_S])
657 (define_int_iterator VADCIQ_M [VADCIQ_M_U VADCIQ_M_S])
658 (define_int_iterator VSBCQ [VSBCQ_U VSBCQ_S])
659 (define_int_iterator VSBCQ_M [VSBCQ_M_U VSBCQ_M_S])
660 (define_int_iterator VSBCIQ [VSBCIQ_U VSBCIQ_S])
661 (define_int_iterator VSBCIQ_M [VSBCIQ_M_U VSBCIQ_M_S])
662 (define_int_iterator VADCQ [VADCQ_U VADCQ_S])
663 (define_int_iterator VADCQ_M [VADCQ_M_U VADCQ_M_S])
664 (define_int_iterator UQRSHLLQ [UQRSHLL_64 UQRSHLL_48])
665 (define_int_iterator SQRSHRLQ [SQRSHRL_64 SQRSHRL_48])
666 (define_int_iterator VSHLCQ_M [VSHLCQ_M_S VSHLCQ_M_U])
668 (define_insn "*mve_mov<mode>"
669 [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w,w,r,w,Ux,w")
670 (match_operand:MVE_types 1 "general_operand" "w,r,w,Dn,Uxi,r,Dm,w,Ul"))]
671 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
673 if (which_alternative == 3 || which_alternative == 6)
676 static char templ[40];
678 is_valid = simd_immediate_valid_for_move (operands[1], <MODE>mode,
679 &operands[1], &width);
681 gcc_assert (is_valid != 0);
684 return "vmov.f32\t%q0, %1 @ <mode>";
686 sprintf (templ, "vmov.i%d\t%%q0, %%x1 @ <mode>", width);
690 if (which_alternative == 4 || which_alternative == 7)
693 int regno = (which_alternative == 7)
694 ? REGNO (operands[1]) : REGNO (operands[0]);
696 ops[0] = operands[0];
697 ops[1] = operands[1];
698 if (<MODE>mode == V2DFmode || <MODE>mode == V2DImode)
700 if (which_alternative == 7)
702 ops[1] = gen_rtx_REG (DImode, regno);
703 output_asm_insn ("vstr.64\t%P1, %E0",ops);
707 ops[0] = gen_rtx_REG (DImode, regno);
708 output_asm_insn ("vldr.64\t%P0, %E1",ops);
711 else if (<MODE>mode == TImode)
713 if (which_alternative == 7)
714 output_asm_insn ("vstr.64\t%q1, %E0",ops);
716 output_asm_insn ("vldr.64\t%q0, %E1",ops);
720 if (which_alternative == 7)
722 ops[1] = gen_rtx_REG (TImode, regno);
723 output_asm_insn ("vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0",ops);
727 ops[0] = gen_rtx_REG (TImode, regno);
728 output_asm_insn ("vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1",ops);
733 switch (which_alternative)
736 return "vmov\t%q0, %q1";
738 return "vmov\t%e0, %Q1, %R1 @ <mode>\;vmov\t%f0, %J1, %K1";
740 return "vmov\t%Q0, %R0, %e1 @ <mode>\;vmov\t%J0, %K0, %f1";
742 return output_move_quad (operands);
744 return output_move_neon (operands);
750 [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_move,mve_store,mve_load")
751 (set_attr "length" "4,8,8,4,8,8,4,4,4")
752 (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*,*")
753 (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*,*")])
755 (define_insn "*mve_mov<mode>"
756 [(set (match_operand:MVE_types 0 "s_register_operand" "=w,w")
757 (vec_duplicate:MVE_types
758 (match_operand:SI 1 "nonmemory_operand" "r,i")))]
759 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
761 if (which_alternative == 0)
762 return "vdup.<V_sz_elem>\t%q0, %1";
763 return "vmov.<V_sz_elem>\t%q0, %1";
765 [(set_attr "length" "4,4")
766 (set_attr "type" "mve_move,mve_move")])
771 (define_insn "mve_vst4q<mode>"
772 [(set (match_operand:XI 0 "neon_struct_operand" "=Um")
773 (unspec:XI [(match_operand:XI 1 "s_register_operand" "w")
774 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
780 int regno = REGNO (operands[1]);
781 ops[0] = gen_rtx_REG (TImode, regno);
782 ops[1] = gen_rtx_REG (TImode, regno+4);
783 ops[2] = gen_rtx_REG (TImode, regno+8);
784 ops[3] = gen_rtx_REG (TImode, regno+12);
785 rtx reg = operands[0];
786 while (reg && !REG_P (reg))
788 gcc_assert (REG_P (reg));
790 ops[5] = operands[0];
791 /* Here in first three instructions data is stored to ops[4]'s location but
792 in the fourth instruction data is stored to operands[0], this is to
793 support the writeback. */
794 output_asm_insn ("vst40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
795 "vst41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
796 "vst42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
797 "vst43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
800 [(set_attr "length" "16")])
805 (define_insn "mve_vrndq_m_f<mode>"
807 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
808 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
809 (match_operand:MVE_0 2 "s_register_operand" "w")
810 (match_operand:HI 3 "vpr_register_operand" "Up")]
813 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
814 "vpst\;vrintzt.f%#<V_sz_elem> %q0, %q2"
815 [(set_attr "type" "mve_move")
816 (set_attr "length""8")])
821 (define_insn "mve_vrndxq_f<mode>"
823 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
824 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
827 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
828 "vrintx.f%#<V_sz_elem> %q0, %q1"
829 [(set_attr "type" "mve_move")
835 (define_insn "mve_vrndq_f<mode>"
837 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
838 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
841 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
842 "vrintz.f%#<V_sz_elem> %q0, %q1"
843 [(set_attr "type" "mve_move")
849 (define_insn "mve_vrndpq_f<mode>"
851 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
852 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
855 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
856 "vrintp.f%#<V_sz_elem> %q0, %q1"
857 [(set_attr "type" "mve_move")
863 (define_insn "mve_vrndnq_f<mode>"
865 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
866 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
869 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
870 "vrintn.f%#<V_sz_elem> %q0, %q1"
871 [(set_attr "type" "mve_move")
877 (define_insn "mve_vrndmq_f<mode>"
879 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
880 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
883 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
884 "vrintm.f%#<V_sz_elem> %q0, %q1"
885 [(set_attr "type" "mve_move")
891 (define_insn "mve_vrndaq_f<mode>"
893 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
894 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
897 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
898 "vrinta.f%#<V_sz_elem> %q0, %q1"
899 [(set_attr "type" "mve_move")
905 (define_insn "mve_vrev64q_f<mode>"
907 (set (match_operand:MVE_0 0 "s_register_operand" "=&w")
908 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
911 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
912 "vrev64.%#<V_sz_elem> %q0, %q1"
913 [(set_attr "type" "mve_move")
919 (define_insn "mve_vnegq_f<mode>"
921 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
922 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
925 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
926 "vneg.f%#<V_sz_elem> %q0, %q1"
927 [(set_attr "type" "mve_move")
933 (define_insn "mve_vdupq_n_f<mode>"
935 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
936 (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
939 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
940 "vdup.%#<V_sz_elem> %q0, %1"
941 [(set_attr "type" "mve_move")
947 (define_insn "mve_vabsq_f<mode>"
949 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
950 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")]
953 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
954 "vabs.f%#<V_sz_elem> %q0, %q1"
955 [(set_attr "type" "mve_move")
961 (define_insn "mve_vrev32q_fv8hf"
963 (set (match_operand:V8HF 0 "s_register_operand" "=w")
964 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")]
967 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
969 [(set_attr "type" "mve_move")
974 (define_insn "mve_vcvttq_f32_f16v4sf"
976 (set (match_operand:V4SF 0 "s_register_operand" "=w")
977 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
980 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
981 "vcvtt.f32.f16 %q0, %q1"
982 [(set_attr "type" "mve_move")
988 (define_insn "mve_vcvtbq_f32_f16v4sf"
990 (set (match_operand:V4SF 0 "s_register_operand" "=w")
991 (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")]
994 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
995 "vcvtb.f32.f16 %q0, %q1"
996 [(set_attr "type" "mve_move")
1000 ;; [vcvtq_to_f_s, vcvtq_to_f_u])
1002 (define_insn "mve_vcvtq_to_f_<supf><mode>"
1004 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1005 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
1008 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1009 "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q1"
1010 [(set_attr "type" "mve_move")
1014 ;; [vrev64q_u, vrev64q_s])
1016 (define_insn "mve_vrev64q_<supf><mode>"
1018 (set (match_operand:MVE_2 0 "s_register_operand" "=&w")
1019 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1023 "vrev64.%#<V_sz_elem> %q0, %q1"
1024 [(set_attr "type" "mve_move")
1028 ;; [vcvtq_from_f_s, vcvtq_from_f_u])
1030 (define_insn "mve_vcvtq_from_f_<supf><mode>"
1032 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1033 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
1036 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1037 "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
1038 [(set_attr "type" "mve_move")
1042 (define_insn "mve_vqnegq_s<mode>"
1044 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1045 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1049 "vqneg.s%#<V_sz_elem> %q0, %q1"
1050 [(set_attr "type" "mve_move")
1056 (define_insn "mve_vqabsq_s<mode>"
1058 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1059 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1063 "vqabs.s%#<V_sz_elem> %q0, %q1"
1064 [(set_attr "type" "mve_move")
1070 (define_insn "mve_vnegq_s<mode>"
1072 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1073 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1077 "vneg.s%#<V_sz_elem> %q0, %q1"
1078 [(set_attr "type" "mve_move")
1082 ;; [vmvnq_u, vmvnq_s])
1084 (define_insn "mve_vmvnq_<supf><mode>"
1086 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1087 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1092 [(set_attr "type" "mve_move")
1096 ;; [vdupq_n_u, vdupq_n_s])
1098 (define_insn "mve_vdupq_n_<supf><mode>"
1100 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1101 (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")]
1105 "vdup.%#<V_sz_elem> %q0, %1"
1106 [(set_attr "type" "mve_move")
1110 ;; [vclzq_u, vclzq_s])
1112 (define_insn "mve_vclzq_<supf><mode>"
1114 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1115 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1119 "vclz.i%#<V_sz_elem> %q0, %q1"
1120 [(set_attr "type" "mve_move")
1126 (define_insn "mve_vclsq_s<mode>"
1128 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1129 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1133 "vcls.s%#<V_sz_elem> %q0, %q1"
1134 [(set_attr "type" "mve_move")
1138 ;; [vaddvq_s, vaddvq_u])
1140 (define_insn "mve_vaddvq_<supf><mode>"
1142 (set (match_operand:SI 0 "s_register_operand" "=Te")
1143 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")]
1147 "vaddv.<supf>%#<V_sz_elem>\t%0, %q1"
1148 [(set_attr "type" "mve_move")
1154 (define_insn "mve_vabsq_s<mode>"
1156 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1157 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")]
1161 "vabs.s%#<V_sz_elem>\t%q0, %q1"
1162 [(set_attr "type" "mve_move")
1166 ;; [vrev32q_u, vrev32q_s])
1168 (define_insn "mve_vrev32q_<supf><mode>"
1170 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
1171 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")]
1175 "vrev32.%#<V_sz_elem>\t%q0, %q1"
1176 [(set_attr "type" "mve_move")
1180 ;; [vmovltq_u, vmovltq_s])
1182 (define_insn "mve_vmovltq_<supf><mode>"
1184 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
1185 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
1189 "vmovlt.<supf>%#<V_sz_elem> %q0, %q1"
1190 [(set_attr "type" "mve_move")
1194 ;; [vmovlbq_s, vmovlbq_u])
1196 (define_insn "mve_vmovlbq_<supf><mode>"
1198 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
1199 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")]
1203 "vmovlb.<supf>%#<V_sz_elem> %q0, %q1"
1204 [(set_attr "type" "mve_move")
1208 ;; [vcvtpq_s, vcvtpq_u])
1210 (define_insn "mve_vcvtpq_<supf><mode>"
1212 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1213 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
1216 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1217 "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
1218 [(set_attr "type" "mve_move")
1222 ;; [vcvtnq_s, vcvtnq_u])
1224 (define_insn "mve_vcvtnq_<supf><mode>"
1226 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1227 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
1230 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1231 "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
1232 [(set_attr "type" "mve_move")
1236 ;; [vcvtmq_s, vcvtmq_u])
1238 (define_insn "mve_vcvtmq_<supf><mode>"
1240 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1241 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
1244 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1245 "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
1246 [(set_attr "type" "mve_move")
1250 ;; [vcvtaq_u, vcvtaq_s])
1252 (define_insn "mve_vcvtaq_<supf><mode>"
1254 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1255 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")]
1258 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1259 "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem> %q0, %q1"
1260 [(set_attr "type" "mve_move")
1264 ;; [vmvnq_n_u, vmvnq_n_s])
1266 (define_insn "mve_vmvnq_n_<supf><mode>"
1268 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1269 (unspec:MVE_5 [(match_operand:HI 1 "immediate_operand" "i")]
1273 "vmvn.i%#<V_sz_elem> %q0, %1"
1274 [(set_attr "type" "mve_move")
1278 ;; [vrev16q_u, vrev16q_s])
1280 (define_insn "mve_vrev16q_<supf>v16qi"
1282 (set (match_operand:V16QI 0 "s_register_operand" "=w")
1283 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")]
1288 [(set_attr "type" "mve_move")
1292 ;; [vaddlvq_s vaddlvq_u])
1294 (define_insn "mve_vaddlvq_<supf>v4si"
1296 (set (match_operand:DI 0 "s_register_operand" "=r")
1297 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")]
1301 "vaddlv.<supf>32 %Q0, %R0, %q1"
1302 [(set_attr "type" "mve_move")
1306 ;; [vctp8q vctp16q vctp32q vctp64q])
1308 (define_insn "mve_vctp<mode1>qhi"
1310 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1311 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")]
1316 [(set_attr "type" "mve_move")
1322 (define_insn "mve_vpnothi"
1324 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1325 (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")]
1330 [(set_attr "type" "mve_move")
1336 (define_insn "mve_vsubq_n_f<mode>"
1338 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1339 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1340 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1343 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1344 "vsub.f<V_sz_elem> %q0, %q1, %2"
1345 [(set_attr "type" "mve_move")
1351 (define_insn "mve_vbrsrq_n_f<mode>"
1353 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1354 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
1355 (match_operand:SI 2 "s_register_operand" "r")]
1358 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1359 "vbrsr.<V_sz_elem> %q0, %q1, %2"
1360 [(set_attr "type" "mve_move")
1364 ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u])
1366 (define_insn "mve_vcvtq_n_to_f_<supf><mode>"
1368 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1369 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
1370 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1373 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1374 "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2"
1375 [(set_attr "type" "mve_move")
1380 (define_insn "mve_vcreateq_f<mode>"
1382 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
1383 (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r")
1384 (match_operand:DI 2 "s_register_operand" "r")]
1387 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1388 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
1389 [(set_attr "type" "mve_move")
1390 (set_attr "length""8")])
1393 ;; [vcreateq_u, vcreateq_s])
1395 (define_insn "mve_vcreateq_<supf><mode>"
1397 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
1398 (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r")
1399 (match_operand:DI 2 "s_register_operand" "r")]
1403 "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
1404 [(set_attr "type" "mve_move")
1405 (set_attr "length""8")])
1408 ;; [vshrq_n_s, vshrq_n_u])
1410 (define_insn "mve_vshrq_n_<supf><mode>"
1412 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1413 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1414 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1418 "vshr.<supf><V_sz_elem>\t%q0, %q1, %2"
1419 [(set_attr "type" "mve_move")
1423 ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u])
1425 (define_insn "mve_vcvtq_n_from_f_<supf><mode>"
1427 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
1428 (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")
1429 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
1432 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
1433 "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2"
1434 [(set_attr "type" "mve_move")
1440 (define_insn "mve_vaddlvq_p_<supf>v4si"
1442 (set (match_operand:DI 0 "s_register_operand" "=r")
1443 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
1444 (match_operand:HI 2 "vpr_register_operand" "Up")]
1448 "vpst\;vaddlvt.<supf>32 %Q0, %R0, %q1"
1449 [(set_attr "type" "mve_move")
1450 (set_attr "length""8")])
1453 ;; [vcmpneq_u, vcmpneq_s])
1455 (define_insn "mve_vcmpneq_<supf><mode>"
1457 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1458 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1459 (match_operand:MVE_2 2 "s_register_operand" "w")]
1463 "vcmp.i%#<V_sz_elem> ne, %q1, %q2"
1464 [(set_attr "type" "mve_move")
1468 ;; [vshlq_s, vshlq_u])
1470 (define_insn "mve_vshlq_<supf><mode>"
1472 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1473 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1474 (match_operand:MVE_2 2 "s_register_operand" "w")]
1478 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1479 [(set_attr "type" "mve_move")
1483 ;; [vabdq_s, vabdq_u])
1485 (define_insn "mve_vabdq_<supf><mode>"
1487 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1488 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1489 (match_operand:MVE_2 2 "s_register_operand" "w")]
1493 "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2"
1494 [(set_attr "type" "mve_move")
1498 ;; [vaddq_n_s, vaddq_n_u])
1500 (define_insn "mve_vaddq_n_<supf><mode>"
1502 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1503 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1504 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1508 "vadd.i%#<V_sz_elem> %q0, %q1, %2"
1509 [(set_attr "type" "mve_move")
1513 ;; [vaddvaq_s, vaddvaq_u])
1515 (define_insn "mve_vaddvaq_<supf><mode>"
1517 (set (match_operand:SI 0 "s_register_operand" "=Te")
1518 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
1519 (match_operand:MVE_2 2 "s_register_operand" "w")]
1523 "vaddva.<supf>%#<V_sz_elem> %0, %q2"
1524 [(set_attr "type" "mve_move")
1528 ;; [vaddvq_p_u, vaddvq_p_s])
1530 (define_insn "mve_vaddvq_p_<supf><mode>"
1532 (set (match_operand:SI 0 "s_register_operand" "=Te")
1533 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
1534 (match_operand:HI 2 "vpr_register_operand" "Up")]
1538 "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1"
1539 [(set_attr "type" "mve_move")
1540 (set_attr "length""8")])
1543 ;; [vandq_u, vandq_s])
1545 (define_insn "mve_vandq_<supf><mode>"
1547 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1548 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1549 (match_operand:MVE_2 2 "s_register_operand" "w")]
1553 "vand %q0, %q1, %q2"
1554 [(set_attr "type" "mve_move")
1558 ;; [vbicq_s, vbicq_u])
1560 (define_insn "mve_vbicq_<supf><mode>"
1562 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1563 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1564 (match_operand:MVE_2 2 "s_register_operand" "w")]
1568 "vbic %q0, %q1, %q2"
1569 [(set_attr "type" "mve_move")
1573 ;; [vbrsrq_n_u, vbrsrq_n_s])
1575 (define_insn "mve_vbrsrq_n_<supf><mode>"
1577 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1578 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1579 (match_operand:SI 2 "s_register_operand" "r")]
1583 "vbrsr.%#<V_sz_elem> %q0, %q1, %2"
1584 [(set_attr "type" "mve_move")
1588 ;; [vcaddq_rot270_s, vcaddq_rot270_u])
1590 (define_insn "mve_vcaddq_rot270_<supf><mode>"
1592 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1593 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1594 (match_operand:MVE_2 2 "s_register_operand" "w")]
1598 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #270"
1599 [(set_attr "type" "mve_move")
1603 ;; [vcaddq_rot90_u, vcaddq_rot90_s])
1605 (define_insn "mve_vcaddq_rot90_<supf><mode>"
1607 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1608 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1609 (match_operand:MVE_2 2 "s_register_operand" "w")]
1613 "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #90"
1614 [(set_attr "type" "mve_move")
1620 (define_insn "mve_vcmpcsq_n_u<mode>"
1622 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1623 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1624 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1628 "vcmp.u%#<V_sz_elem> cs, %q1, %2"
1629 [(set_attr "type" "mve_move")
1635 (define_insn "mve_vcmpcsq_u<mode>"
1637 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1638 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1639 (match_operand:MVE_2 2 "s_register_operand" "w")]
1643 "vcmp.u%#<V_sz_elem> cs, %q1, %q2"
1644 [(set_attr "type" "mve_move")
1648 ;; [vcmpeqq_n_s, vcmpeqq_n_u])
1650 (define_insn "mve_vcmpeqq_n_<supf><mode>"
1652 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1653 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1654 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1658 "vcmp.i%#<V_sz_elem> eq, %q1, %2"
1659 [(set_attr "type" "mve_move")
1663 ;; [vcmpeqq_u, vcmpeqq_s])
1665 (define_insn "mve_vcmpeqq_<supf><mode>"
1667 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1668 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1669 (match_operand:MVE_2 2 "s_register_operand" "w")]
1673 "vcmp.i%#<V_sz_elem> eq, %q1, %q2"
1674 [(set_attr "type" "mve_move")
1680 (define_insn "mve_vcmpgeq_n_s<mode>"
1682 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1683 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1684 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1688 "vcmp.s%#<V_sz_elem> ge, %q1, %2"
1689 [(set_attr "type" "mve_move")
1695 (define_insn "mve_vcmpgeq_s<mode>"
1697 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1698 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1699 (match_operand:MVE_2 2 "s_register_operand" "w")]
1703 "vcmp.s%#<V_sz_elem> ge, %q1, %q2"
1704 [(set_attr "type" "mve_move")
1710 (define_insn "mve_vcmpgtq_n_s<mode>"
1712 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1713 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1714 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1718 "vcmp.s%#<V_sz_elem> gt, %q1, %2"
1719 [(set_attr "type" "mve_move")
1725 (define_insn "mve_vcmpgtq_s<mode>"
1727 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1728 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1729 (match_operand:MVE_2 2 "s_register_operand" "w")]
1733 "vcmp.s%#<V_sz_elem> gt, %q1, %q2"
1734 [(set_attr "type" "mve_move")
1740 (define_insn "mve_vcmphiq_n_u<mode>"
1742 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1743 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1744 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1748 "vcmp.u%#<V_sz_elem> hi, %q1, %2"
1749 [(set_attr "type" "mve_move")
1755 (define_insn "mve_vcmphiq_u<mode>"
1757 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1758 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1759 (match_operand:MVE_2 2 "s_register_operand" "w")]
1763 "vcmp.u%#<V_sz_elem> hi, %q1, %q2"
1764 [(set_attr "type" "mve_move")
1770 (define_insn "mve_vcmpleq_n_s<mode>"
1772 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1773 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1774 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1778 "vcmp.s%#<V_sz_elem> le, %q1, %2"
1779 [(set_attr "type" "mve_move")
1785 (define_insn "mve_vcmpleq_s<mode>"
1787 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1788 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1789 (match_operand:MVE_2 2 "s_register_operand" "w")]
1793 "vcmp.s%#<V_sz_elem> le, %q1, %q2"
1794 [(set_attr "type" "mve_move")
1800 (define_insn "mve_vcmpltq_n_s<mode>"
1802 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1803 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1804 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1808 "vcmp.s%#<V_sz_elem> lt, %q1, %2"
1809 [(set_attr "type" "mve_move")
1815 (define_insn "mve_vcmpltq_s<mode>"
1817 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1818 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1819 (match_operand:MVE_2 2 "s_register_operand" "w")]
1823 "vcmp.s%#<V_sz_elem> lt, %q1, %q2"
1824 [(set_attr "type" "mve_move")
1828 ;; [vcmpneq_n_u, vcmpneq_n_s])
1830 (define_insn "mve_vcmpneq_n_<supf><mode>"
1832 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
1833 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
1834 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1838 "vcmp.i%#<V_sz_elem> ne, %q1, %2"
1839 [(set_attr "type" "mve_move")
1843 ;; [veorq_u, veorq_s])
1845 (define_insn "mve_veorq_<supf><mode>"
1847 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1848 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1849 (match_operand:MVE_2 2 "s_register_operand" "w")]
1853 "veor %q0, %q1, %q2"
1854 [(set_attr "type" "mve_move")
1858 ;; [vhaddq_n_u, vhaddq_n_s])
1860 (define_insn "mve_vhaddq_n_<supf><mode>"
1862 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1863 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1864 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1868 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1869 [(set_attr "type" "mve_move")
1873 ;; [vhaddq_s, vhaddq_u])
1875 (define_insn "mve_vhaddq_<supf><mode>"
1877 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1878 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1879 (match_operand:MVE_2 2 "s_register_operand" "w")]
1883 "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1884 [(set_attr "type" "mve_move")
1888 ;; [vhcaddq_rot270_s])
1890 (define_insn "mve_vhcaddq_rot270_s<mode>"
1892 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1893 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1894 (match_operand:MVE_2 2 "s_register_operand" "w")]
1898 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270"
1899 [(set_attr "type" "mve_move")
1903 ;; [vhcaddq_rot90_s])
1905 (define_insn "mve_vhcaddq_rot90_s<mode>"
1907 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
1908 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1909 (match_operand:MVE_2 2 "s_register_operand" "w")]
1913 "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90"
1914 [(set_attr "type" "mve_move")
1918 ;; [vhsubq_n_u, vhsubq_n_s])
1920 (define_insn "mve_vhsubq_n_<supf><mode>"
1922 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1923 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1924 (match_operand:<V_elem> 2 "s_register_operand" "r")]
1928 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
1929 [(set_attr "type" "mve_move")
1933 ;; [vhsubq_s, vhsubq_u])
1935 (define_insn "mve_vhsubq_<supf><mode>"
1937 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1938 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1939 (match_operand:MVE_2 2 "s_register_operand" "w")]
1943 "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1944 [(set_attr "type" "mve_move")
1950 (define_insn "mve_vmaxaq_s<mode>"
1952 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1953 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
1954 (match_operand:MVE_2 2 "s_register_operand" "w")]
1958 "vmaxa.s%#<V_sz_elem> %q0, %q2"
1959 [(set_attr "type" "mve_move")
1965 (define_insn "mve_vmaxavq_s<mode>"
1967 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1968 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1969 (match_operand:MVE_2 2 "s_register_operand" "w")]
1973 "vmaxav.s%#<V_sz_elem>\t%0, %q2"
1974 [(set_attr "type" "mve_move")
1978 ;; [vmaxq_u, vmaxq_s])
1980 (define_insn "mve_vmaxq_<supf><mode>"
1982 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
1983 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
1984 (match_operand:MVE_2 2 "s_register_operand" "w")]
1988 "vmax.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
1989 [(set_attr "type" "mve_move")
1993 ;; [vmaxvq_u, vmaxvq_s])
1995 (define_insn "mve_vmaxvq_<supf><mode>"
1997 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
1998 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
1999 (match_operand:MVE_2 2 "s_register_operand" "w")]
2003 "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2"
2004 [(set_attr "type" "mve_move")
2010 (define_insn "mve_vminaq_s<mode>"
2012 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2013 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2014 (match_operand:MVE_2 2 "s_register_operand" "w")]
2018 "vmina.s%#<V_sz_elem>\t%q0, %q2"
2019 [(set_attr "type" "mve_move")
2025 (define_insn "mve_vminavq_s<mode>"
2027 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2028 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2029 (match_operand:MVE_2 2 "s_register_operand" "w")]
2033 "vminav.s%#<V_sz_elem>\t%0, %q2"
2034 [(set_attr "type" "mve_move")
2038 ;; [vminq_s, vminq_u])
2040 (define_insn "mve_vminq_<supf><mode>"
2042 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2043 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2044 (match_operand:MVE_2 2 "s_register_operand" "w")]
2048 "vmin.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2049 [(set_attr "type" "mve_move")
2053 ;; [vminvq_u, vminvq_s])
2055 (define_insn "mve_vminvq_<supf><mode>"
2057 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
2058 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
2059 (match_operand:MVE_2 2 "s_register_operand" "w")]
2063 "vminv.<supf>%#<V_sz_elem>\t%0, %q2"
2064 [(set_attr "type" "mve_move")
2068 ;; [vmladavq_u, vmladavq_s])
2070 (define_insn "mve_vmladavq_<supf><mode>"
2072 (set (match_operand:SI 0 "s_register_operand" "=Te")
2073 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
2074 (match_operand:MVE_2 2 "s_register_operand" "w")]
2078 "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
2079 [(set_attr "type" "mve_move")
2085 (define_insn "mve_vmladavxq_s<mode>"
2087 (set (match_operand:SI 0 "s_register_operand" "=Te")
2088 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
2089 (match_operand:MVE_2 2 "s_register_operand" "w")]
2093 "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2"
2094 [(set_attr "type" "mve_move")
2100 (define_insn "mve_vmlsdavq_s<mode>"
2102 (set (match_operand:SI 0 "s_register_operand" "=Te")
2103 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
2104 (match_operand:MVE_2 2 "s_register_operand" "w")]
2108 "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2"
2109 [(set_attr "type" "mve_move")
2115 (define_insn "mve_vmlsdavxq_s<mode>"
2117 (set (match_operand:SI 0 "s_register_operand" "=Te")
2118 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
2119 (match_operand:MVE_2 2 "s_register_operand" "w")]
2123 "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2"
2124 [(set_attr "type" "mve_move")
2128 ;; [vmulhq_s, vmulhq_u])
2130 (define_insn "mve_vmulhq_<supf><mode>"
2132 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2133 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2134 (match_operand:MVE_2 2 "s_register_operand" "w")]
2138 "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2139 [(set_attr "type" "mve_move")
2143 ;; [vmullbq_int_u, vmullbq_int_s])
2145 (define_insn "mve_vmullbq_int_<supf><mode>"
2147 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2148 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
2149 (match_operand:MVE_2 2 "s_register_operand" "w")]
2153 "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2154 [(set_attr "type" "mve_move")
2158 ;; [vmulltq_int_u, vmulltq_int_s])
2160 (define_insn "mve_vmulltq_int_<supf><mode>"
2162 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
2163 (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w")
2164 (match_operand:MVE_2 2 "s_register_operand" "w")]
2168 "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2169 [(set_attr "type" "mve_move")
2173 ;; [vmulq_n_u, vmulq_n_s])
2175 (define_insn "mve_vmulq_n_<supf><mode>"
2177 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2178 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2179 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2183 "vmul.i%#<V_sz_elem>\t%q0, %q1, %2"
2184 [(set_attr "type" "mve_move")
2188 ;; [vmulq_u, vmulq_s])
2190 (define_insn "mve_vmulq_<supf><mode>"
2192 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2193 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2194 (match_operand:MVE_2 2 "s_register_operand" "w")]
2198 "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
2199 [(set_attr "type" "mve_move")
2203 ;; [vornq_u, vornq_s])
2205 (define_insn "mve_vornq_<supf><mode>"
2207 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2208 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2209 (match_operand:MVE_2 2 "s_register_operand" "w")]
2213 "vorn %q0, %q1, %q2"
2214 [(set_attr "type" "mve_move")
2218 ;; [vorrq_s, vorrq_u])
2220 (define_insn "mve_vorrq_<supf><mode>"
2222 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2223 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2224 (match_operand:MVE_2 2 "s_register_operand" "w")]
2228 "vorr %q0, %q1, %q2"
2229 [(set_attr "type" "mve_move")
2233 ;; [vqaddq_n_s, vqaddq_n_u])
2235 (define_insn "mve_vqaddq_n_<supf><mode>"
2237 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2238 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2239 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2243 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2244 [(set_attr "type" "mve_move")
2248 ;; [vqaddq_u, vqaddq_s])
2250 (define_insn "mve_vqaddq_<supf><mode>"
2252 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2253 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2254 (match_operand:MVE_2 2 "s_register_operand" "w")]
2258 "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2259 [(set_attr "type" "mve_move")
2265 (define_insn "mve_vqdmulhq_n_s<mode>"
2267 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2268 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2269 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2273 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
2274 [(set_attr "type" "mve_move")
2280 (define_insn "mve_vqdmulhq_s<mode>"
2282 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2283 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2284 (match_operand:MVE_2 2 "s_register_operand" "w")]
2288 "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
2289 [(set_attr "type" "mve_move")
2295 (define_insn "mve_vqrdmulhq_n_s<mode>"
2297 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2298 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2299 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2303 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2"
2304 [(set_attr "type" "mve_move")
2310 (define_insn "mve_vqrdmulhq_s<mode>"
2312 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2313 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2314 (match_operand:MVE_2 2 "s_register_operand" "w")]
2318 "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2"
2319 [(set_attr "type" "mve_move")
2323 ;; [vqrshlq_n_s, vqrshlq_n_u])
2325 (define_insn "mve_vqrshlq_n_<supf><mode>"
2327 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2328 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2329 (match_operand:SI 2 "s_register_operand" "r")]
2333 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2"
2334 [(set_attr "type" "mve_move")
2338 ;; [vqrshlq_s, vqrshlq_u])
2340 (define_insn "mve_vqrshlq_<supf><mode>"
2342 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2343 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2344 (match_operand:MVE_2 2 "s_register_operand" "w")]
2348 "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2349 [(set_attr "type" "mve_move")
2353 ;; [vqshlq_n_s, vqshlq_n_u])
2355 (define_insn "mve_vqshlq_n_<supf><mode>"
2357 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2358 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2359 (match_operand:SI 2 "immediate_operand" "i")]
2363 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2364 [(set_attr "type" "mve_move")
2368 ;; [vqshlq_r_u, vqshlq_r_s])
2370 (define_insn "mve_vqshlq_r_<supf><mode>"
2372 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2373 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2374 (match_operand:SI 2 "s_register_operand" "r")]
2378 "vqshl.<supf>%#<V_sz_elem>\t%q0, %2"
2379 [(set_attr "type" "mve_move")
2383 ;; [vqshlq_s, vqshlq_u])
2385 (define_insn "mve_vqshlq_<supf><mode>"
2387 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2388 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2389 (match_operand:MVE_2 2 "s_register_operand" "w")]
2393 "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2394 [(set_attr "type" "mve_move")
2400 (define_insn "mve_vqshluq_n_s<mode>"
2402 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2403 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2404 (match_operand:SI 2 "mve_imm_7" "Ra")]
2408 "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2"
2409 [(set_attr "type" "mve_move")
2413 ;; [vqsubq_n_s, vqsubq_n_u])
2415 (define_insn "mve_vqsubq_n_<supf><mode>"
2417 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2418 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2419 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2423 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2424 [(set_attr "type" "mve_move")
2428 ;; [vqsubq_u, vqsubq_s])
2430 (define_insn "mve_vqsubq_<supf><mode>"
2432 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2433 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2434 (match_operand:MVE_2 2 "s_register_operand" "w")]
2438 "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2439 [(set_attr "type" "mve_move")
2443 ;; [vrhaddq_s, vrhaddq_u])
2445 (define_insn "mve_vrhaddq_<supf><mode>"
2447 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2448 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2449 (match_operand:MVE_2 2 "s_register_operand" "w")]
2453 "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2454 [(set_attr "type" "mve_move")
2458 ;; [vrmulhq_s, vrmulhq_u])
2460 (define_insn "mve_vrmulhq_<supf><mode>"
2462 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2463 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2464 (match_operand:MVE_2 2 "s_register_operand" "w")]
2468 "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2469 [(set_attr "type" "mve_move")
2473 ;; [vrshlq_n_u, vrshlq_n_s])
2475 (define_insn "mve_vrshlq_n_<supf><mode>"
2477 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2478 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2479 (match_operand:SI 2 "s_register_operand" "r")]
2483 "vrshl.<supf>%#<V_sz_elem>\t%q0, %2"
2484 [(set_attr "type" "mve_move")
2488 ;; [vrshlq_s, vrshlq_u])
2490 (define_insn "mve_vrshlq_<supf><mode>"
2492 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2493 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2494 (match_operand:MVE_2 2 "s_register_operand" "w")]
2498 "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2"
2499 [(set_attr "type" "mve_move")
2503 ;; [vrshrq_n_s, vrshrq_n_u])
2505 (define_insn "mve_vrshrq_n_<supf><mode>"
2507 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2508 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2509 (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")]
2513 "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2514 [(set_attr "type" "mve_move")
2518 ;; [vshlq_n_u, vshlq_n_s])
2520 (define_insn "mve_vshlq_n_<supf><mode>"
2522 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2523 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2524 (match_operand:SI 2 "immediate_operand" "i")]
2528 "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
2529 [(set_attr "type" "mve_move")
2533 ;; [vshlq_r_s, vshlq_r_u])
2535 (define_insn "mve_vshlq_r_<supf><mode>"
2537 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2538 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
2539 (match_operand:SI 2 "s_register_operand" "r")]
2543 "vshl.<supf>%#<V_sz_elem>\t%q0, %2"
2544 [(set_attr "type" "mve_move")
2548 ;; [vsubq_n_s, vsubq_n_u])
2550 (define_insn "mve_vsubq_n_<supf><mode>"
2552 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2553 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2554 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2558 "vsub.i%#<V_sz_elem>\t%q0, %q1, %2"
2559 [(set_attr "type" "mve_move")
2563 ;; [vsubq_s, vsubq_u])
2565 (define_insn "mve_vsubq_<supf><mode>"
2567 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
2568 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")
2569 (match_operand:MVE_2 2 "s_register_operand" "w")]
2573 "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
2574 [(set_attr "type" "mve_move")
2580 (define_insn "mve_vabdq_f<mode>"
2582 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2583 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2584 (match_operand:MVE_0 2 "s_register_operand" "w")]
2587 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2588 "vabd.f%#<V_sz_elem> %q0, %q1, %q2"
2589 [(set_attr "type" "mve_move")
2593 ;; [vaddlvaq_s vaddlvaq_u])
2595 (define_insn "mve_vaddlvaq_<supf>v4si"
2597 (set (match_operand:DI 0 "s_register_operand" "=r")
2598 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
2599 (match_operand:V4SI 2 "s_register_operand" "w")]
2603 "vaddlva.<supf>32 %Q0, %R0, %q2"
2604 [(set_attr "type" "mve_move")
2610 (define_insn "mve_vaddq_n_f<mode>"
2612 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2613 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2614 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2617 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2618 "vadd.f%#<V_sz_elem> %q0, %q1, %2"
2619 [(set_attr "type" "mve_move")
2625 (define_insn "mve_vandq_f<mode>"
2627 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2628 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2629 (match_operand:MVE_0 2 "s_register_operand" "w")]
2632 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2633 "vand %q0, %q1, %q2"
2634 [(set_attr "type" "mve_move")
2640 (define_insn "mve_vbicq_f<mode>"
2642 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2643 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2644 (match_operand:MVE_0 2 "s_register_operand" "w")]
2647 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2648 "vbic %q0, %q1, %q2"
2649 [(set_attr "type" "mve_move")
2653 ;; [vbicq_n_s, vbicq_n_u])
2655 (define_insn "mve_vbicq_n_<supf><mode>"
2657 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
2658 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
2659 (match_operand:SI 2 "immediate_operand" "i")]
2663 "vbic.i%#<V_sz_elem> %q0, %2"
2664 [(set_attr "type" "mve_move")
2668 ;; [vcaddq_rot270_f])
2670 (define_insn "mve_vcaddq_rot270_f<mode>"
2672 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2673 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2674 (match_operand:MVE_0 2 "s_register_operand" "w")]
2677 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2678 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #270"
2679 [(set_attr "type" "mve_move")
2683 ;; [vcaddq_rot90_f])
2685 (define_insn "mve_vcaddq_rot90_f<mode>"
2687 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2688 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2689 (match_operand:MVE_0 2 "s_register_operand" "w")]
2692 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2693 "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #90"
2694 [(set_attr "type" "mve_move")
2700 (define_insn "mve_vcmpeqq_f<mode>"
2702 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2703 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2704 (match_operand:MVE_0 2 "s_register_operand" "w")]
2707 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2708 "vcmp.f%#<V_sz_elem> eq, %q1, %q2"
2709 [(set_attr "type" "mve_move")
2715 (define_insn "mve_vcmpeqq_n_f<mode>"
2717 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2718 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2719 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2722 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2723 "vcmp.f%#<V_sz_elem> eq, %q1, %2"
2724 [(set_attr "type" "mve_move")
2730 (define_insn "mve_vcmpgeq_f<mode>"
2732 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2733 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2734 (match_operand:MVE_0 2 "s_register_operand" "w")]
2737 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2738 "vcmp.f%#<V_sz_elem> ge, %q1, %q2"
2739 [(set_attr "type" "mve_move")
2745 (define_insn "mve_vcmpgeq_n_f<mode>"
2747 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2748 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2749 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2752 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2753 "vcmp.f%#<V_sz_elem> ge, %q1, %2"
2754 [(set_attr "type" "mve_move")
2760 (define_insn "mve_vcmpgtq_f<mode>"
2762 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2763 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2764 (match_operand:MVE_0 2 "s_register_operand" "w")]
2767 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2768 "vcmp.f%#<V_sz_elem> gt, %q1, %q2"
2769 [(set_attr "type" "mve_move")
2775 (define_insn "mve_vcmpgtq_n_f<mode>"
2777 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2778 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2779 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2782 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2783 "vcmp.f%#<V_sz_elem> gt, %q1, %2"
2784 [(set_attr "type" "mve_move")
2790 (define_insn "mve_vcmpleq_f<mode>"
2792 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2793 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2794 (match_operand:MVE_0 2 "s_register_operand" "w")]
2797 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2798 "vcmp.f%#<V_sz_elem> le, %q1, %q2"
2799 [(set_attr "type" "mve_move")
2805 (define_insn "mve_vcmpleq_n_f<mode>"
2807 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2808 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2809 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2812 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2813 "vcmp.f%#<V_sz_elem> le, %q1, %2"
2814 [(set_attr "type" "mve_move")
2820 (define_insn "mve_vcmpltq_f<mode>"
2822 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2823 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2824 (match_operand:MVE_0 2 "s_register_operand" "w")]
2827 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2828 "vcmp.f%#<V_sz_elem> lt, %q1, %q2"
2829 [(set_attr "type" "mve_move")
2835 (define_insn "mve_vcmpltq_n_f<mode>"
2837 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2838 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2839 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2842 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2843 "vcmp.f%#<V_sz_elem> lt, %q1, %2"
2844 [(set_attr "type" "mve_move")
2850 (define_insn "mve_vcmpneq_f<mode>"
2852 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2853 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2854 (match_operand:MVE_0 2 "s_register_operand" "w")]
2857 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2858 "vcmp.f%#<V_sz_elem> ne, %q1, %q2"
2859 [(set_attr "type" "mve_move")
2865 (define_insn "mve_vcmpneq_n_f<mode>"
2867 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2868 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
2869 (match_operand:<V_elem> 2 "s_register_operand" "r")]
2872 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2873 "vcmp.f%#<V_sz_elem> ne, %q1, %2"
2874 [(set_attr "type" "mve_move")
2880 (define_insn "mve_vcmulq_f<mode>"
2882 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2883 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2884 (match_operand:MVE_0 2 "s_register_operand" "w")]
2887 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2888 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #0"
2889 [(set_attr "type" "mve_move")
2893 ;; [vcmulq_rot180_f])
2895 (define_insn "mve_vcmulq_rot180_f<mode>"
2897 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2898 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2899 (match_operand:MVE_0 2 "s_register_operand" "w")]
2902 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2903 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #180"
2904 [(set_attr "type" "mve_move")
2908 ;; [vcmulq_rot270_f])
2910 (define_insn "mve_vcmulq_rot270_f<mode>"
2912 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2913 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2914 (match_operand:MVE_0 2 "s_register_operand" "w")]
2917 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2918 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #270"
2919 [(set_attr "type" "mve_move")
2923 ;; [vcmulq_rot90_f])
2925 (define_insn "mve_vcmulq_rot90_f<mode>"
2927 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
2928 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2929 (match_operand:MVE_0 2 "s_register_operand" "w")]
2932 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2933 "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #90"
2934 [(set_attr "type" "mve_move")
2938 ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m])
2940 (define_insn "mve_vctp<mode1>q_mhi"
2942 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
2943 (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")
2944 (match_operand:HI 2 "vpr_register_operand" "Up")]
2948 "vpst\;vctpt.<mode1> %1"
2949 [(set_attr "type" "mve_move")
2950 (set_attr "length""8")])
2953 ;; [vcvtbq_f16_f32])
2955 (define_insn "mve_vcvtbq_f16_f32v8hf"
2957 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2958 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2959 (match_operand:V4SF 2 "s_register_operand" "w")]
2962 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2963 "vcvtb.f16.f32 %q0, %q2"
2964 [(set_attr "type" "mve_move")
2968 ;; [vcvttq_f16_f32])
2970 (define_insn "mve_vcvttq_f16_f32v8hf"
2972 (set (match_operand:V8HF 0 "s_register_operand" "=w")
2973 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
2974 (match_operand:V4SF 2 "s_register_operand" "w")]
2977 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2978 "vcvtt.f16.f32 %q0, %q2"
2979 [(set_attr "type" "mve_move")
2985 (define_insn "mve_veorq_f<mode>"
2987 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
2988 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
2989 (match_operand:MVE_0 2 "s_register_operand" "w")]
2992 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
2993 "veor %q0, %q1, %q2"
2994 [(set_attr "type" "mve_move")
3000 (define_insn "mve_vmaxnmaq_f<mode>"
3002 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3003 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3004 (match_operand:MVE_0 2 "s_register_operand" "w")]
3007 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3008 "vmaxnma.f%#<V_sz_elem> %q0, %q2"
3009 [(set_attr "type" "mve_move")
3015 (define_insn "mve_vmaxnmavq_f<mode>"
3017 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3018 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3019 (match_operand:MVE_0 2 "s_register_operand" "w")]
3022 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3023 "vmaxnmav.f%#<V_sz_elem> %0, %q2"
3024 [(set_attr "type" "mve_move")
3030 (define_insn "mve_vmaxnmq_f<mode>"
3032 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3033 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3034 (match_operand:MVE_0 2 "s_register_operand" "w")]
3037 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3038 "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2"
3039 [(set_attr "type" "mve_move")
3045 (define_insn "mve_vmaxnmvq_f<mode>"
3047 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3048 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3049 (match_operand:MVE_0 2 "s_register_operand" "w")]
3052 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3053 "vmaxnmv.f%#<V_sz_elem> %0, %q2"
3054 [(set_attr "type" "mve_move")
3060 (define_insn "mve_vminnmaq_f<mode>"
3062 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3063 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3064 (match_operand:MVE_0 2 "s_register_operand" "w")]
3067 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3068 "vminnma.f%#<V_sz_elem> %q0, %q2"
3069 [(set_attr "type" "mve_move")
3075 (define_insn "mve_vminnmavq_f<mode>"
3077 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3078 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3079 (match_operand:MVE_0 2 "s_register_operand" "w")]
3082 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3083 "vminnmav.f%#<V_sz_elem> %0, %q2"
3084 [(set_attr "type" "mve_move")
3090 (define_insn "mve_vminnmq_f<mode>"
3092 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3093 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3094 (match_operand:MVE_0 2 "s_register_operand" "w")]
3097 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3098 "vminnm.f%#<V_sz_elem> %q0, %q1, %q2"
3099 [(set_attr "type" "mve_move")
3105 (define_insn "mve_vminnmvq_f<mode>"
3107 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
3108 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
3109 (match_operand:MVE_0 2 "s_register_operand" "w")]
3112 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3113 "vminnmv.f%#<V_sz_elem> %0, %q2"
3114 [(set_attr "type" "mve_move")
3118 ;; [vmlaldavq_u, vmlaldavq_s])
3120 (define_insn "mve_vmlaldavq_<supf><mode>"
3122 (set (match_operand:DI 0 "s_register_operand" "=r")
3123 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
3124 (match_operand:MVE_5 2 "s_register_operand" "w")]
3128 "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
3129 [(set_attr "type" "mve_move")
3135 (define_insn "mve_vmlaldavxq_s<mode>"
3137 (set (match_operand:DI 0 "s_register_operand" "=r")
3138 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
3139 (match_operand:MVE_5 2 "s_register_operand" "w")]
3143 "vmlaldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
3144 [(set_attr "type" "mve_move")
3150 (define_insn "mve_vmlsldavq_s<mode>"
3152 (set (match_operand:DI 0 "s_register_operand" "=r")
3153 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
3154 (match_operand:MVE_5 2 "s_register_operand" "w")]
3158 "vmlsldav.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
3159 [(set_attr "type" "mve_move")
3165 (define_insn "mve_vmlsldavxq_s<mode>"
3167 (set (match_operand:DI 0 "s_register_operand" "=r")
3168 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
3169 (match_operand:MVE_5 2 "s_register_operand" "w")]
3173 "vmlsldavx.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
3174 [(set_attr "type" "mve_move")
3178 ;; [vmovnbq_u, vmovnbq_s])
3180 (define_insn "mve_vmovnbq_<supf><mode>"
3182 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3183 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3184 (match_operand:MVE_5 2 "s_register_operand" "w")]
3188 "vmovnb.i%#<V_sz_elem> %q0, %q2"
3189 [(set_attr "type" "mve_move")
3193 ;; [vmovntq_s, vmovntq_u])
3195 (define_insn "mve_vmovntq_<supf><mode>"
3197 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3198 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3199 (match_operand:MVE_5 2 "s_register_operand" "w")]
3203 "vmovnt.i%#<V_sz_elem> %q0, %q2"
3204 [(set_attr "type" "mve_move")
3210 (define_insn "mve_vmulq_f<mode>"
3212 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3213 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3214 (match_operand:MVE_0 2 "s_register_operand" "w")]
3217 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3218 "vmul.f%#<V_sz_elem> %q0, %q1, %q2"
3219 [(set_attr "type" "mve_move")
3225 (define_insn "mve_vmulq_n_f<mode>"
3227 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3228 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3229 (match_operand:<V_elem> 2 "s_register_operand" "r")]
3232 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3233 "vmul.f%#<V_sz_elem> %q0, %q1, %2"
3234 [(set_attr "type" "mve_move")
3240 (define_insn "mve_vornq_f<mode>"
3242 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3243 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3244 (match_operand:MVE_0 2 "s_register_operand" "w")]
3247 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3248 "vorn %q0, %q1, %q2"
3249 [(set_attr "type" "mve_move")
3255 (define_insn "mve_vorrq_f<mode>"
3257 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3258 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3259 (match_operand:MVE_0 2 "s_register_operand" "w")]
3262 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3263 "vorr %q0, %q1, %q2"
3264 [(set_attr "type" "mve_move")
3268 ;; [vorrq_n_u, vorrq_n_s])
3270 (define_insn "mve_vorrq_n_<supf><mode>"
3272 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
3273 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
3274 (match_operand:SI 2 "immediate_operand" "i")]
3278 "vorr.i%#<V_sz_elem> %q0, %2"
3279 [(set_attr "type" "mve_move")
3285 (define_insn "mve_vqdmullbq_n_s<mode>"
3287 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
3288 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3289 (match_operand:<V_elem> 2 "s_register_operand" "r")]
3293 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2"
3294 [(set_attr "type" "mve_move")
3300 (define_insn "mve_vqdmullbq_s<mode>"
3302 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
3303 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3304 (match_operand:MVE_5 2 "s_register_operand" "w")]
3308 "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2"
3309 [(set_attr "type" "mve_move")
3315 (define_insn "mve_vqdmulltq_n_s<mode>"
3317 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
3318 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3319 (match_operand:<V_elem> 2 "s_register_operand" "r")]
3323 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2"
3324 [(set_attr "type" "mve_move")
3330 (define_insn "mve_vqdmulltq_s<mode>"
3332 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
3333 (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w")
3334 (match_operand:MVE_5 2 "s_register_operand" "w")]
3338 "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2"
3339 [(set_attr "type" "mve_move")
3343 ;; [vqmovnbq_u, vqmovnbq_s])
3345 (define_insn "mve_vqmovnbq_<supf><mode>"
3347 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3348 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3349 (match_operand:MVE_5 2 "s_register_operand" "w")]
3353 "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2"
3354 [(set_attr "type" "mve_move")
3358 ;; [vqmovntq_u, vqmovntq_s])
3360 (define_insn "mve_vqmovntq_<supf><mode>"
3362 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3363 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3364 (match_operand:MVE_5 2 "s_register_operand" "w")]
3368 "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2"
3369 [(set_attr "type" "mve_move")
3375 (define_insn "mve_vqmovunbq_s<mode>"
3377 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3378 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3379 (match_operand:MVE_5 2 "s_register_operand" "w")]
3383 "vqmovunb.s%#<V_sz_elem> %q0, %q2"
3384 [(set_attr "type" "mve_move")
3390 (define_insn "mve_vqmovuntq_s<mode>"
3392 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3393 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3394 (match_operand:MVE_5 2 "s_register_operand" "w")]
3398 "vqmovunt.s%#<V_sz_elem> %q0, %q2"
3399 [(set_attr "type" "mve_move")
3403 ;; [vrmlaldavhxq_s])
3405 (define_insn "mve_vrmlaldavhxq_sv4si"
3407 (set (match_operand:DI 0 "s_register_operand" "=r")
3408 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3409 (match_operand:V4SI 2 "s_register_operand" "w")]
3413 "vrmlaldavhx.s32 %Q0, %R0, %q1, %q2"
3414 [(set_attr "type" "mve_move")
3420 (define_insn "mve_vrmlsldavhq_sv4si"
3422 (set (match_operand:DI 0 "s_register_operand" "=r")
3423 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3424 (match_operand:V4SI 2 "s_register_operand" "w")]
3428 "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2"
3429 [(set_attr "type" "mve_move")
3433 ;; [vrmlsldavhxq_s])
3435 (define_insn "mve_vrmlsldavhxq_sv4si"
3437 (set (match_operand:DI 0 "s_register_operand" "=r")
3438 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3439 (match_operand:V4SI 2 "s_register_operand" "w")]
3443 "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2"
3444 [(set_attr "type" "mve_move")
3448 ;; [vshllbq_n_s, vshllbq_n_u])
3450 (define_insn "mve_vshllbq_n_<supf><mode>"
3452 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3453 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3454 (match_operand:SI 2 "immediate_operand" "i")]
3458 "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
3459 [(set_attr "type" "mve_move")
3463 ;; [vshlltq_n_u, vshlltq_n_s])
3465 (define_insn "mve_vshlltq_n_<supf><mode>"
3467 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3468 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3469 (match_operand:SI 2 "immediate_operand" "i")]
3473 "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2"
3474 [(set_attr "type" "mve_move")
3480 (define_insn "mve_vsubq_f<mode>"
3482 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3483 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
3484 (match_operand:MVE_0 2 "s_register_operand" "w")]
3487 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3488 "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2"
3489 [(set_attr "type" "mve_move")
3493 ;; [vmulltq_poly_p])
3495 (define_insn "mve_vmulltq_poly_p<mode>"
3497 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3498 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3499 (match_operand:MVE_3 2 "s_register_operand" "w")]
3503 "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2"
3504 [(set_attr "type" "mve_move")
3508 ;; [vmullbq_poly_p])
3510 (define_insn "mve_vmullbq_poly_p<mode>"
3512 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
3513 (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")
3514 (match_operand:MVE_3 2 "s_register_operand" "w")]
3518 "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2"
3519 [(set_attr "type" "mve_move")
3523 ;; [vrmlaldavhq_u vrmlaldavhq_s])
3525 (define_insn "mve_vrmlaldavhq_<supf>v4si"
3527 (set (match_operand:DI 0 "s_register_operand" "=r")
3528 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
3529 (match_operand:V4SI 2 "s_register_operand" "w")]
3533 "vrmlaldavh.<supf>32 %Q0, %R0, %q1, %q2"
3534 [(set_attr "type" "mve_move")
3538 ;; [vbicq_m_n_s, vbicq_m_n_u])
3540 (define_insn "mve_vbicq_m_n_<supf><mode>"
3542 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
3543 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
3544 (match_operand:SI 2 "immediate_operand" "i")
3545 (match_operand:HI 3 "vpr_register_operand" "Up")]
3549 "vpst\;vbict.i%#<V_sz_elem> %q0, %2"
3550 [(set_attr "type" "mve_move")
3551 (set_attr "length""8")])
3555 (define_insn "mve_vcmpeqq_m_f<mode>"
3557 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3558 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
3559 (match_operand:MVE_0 2 "s_register_operand" "w")
3560 (match_operand:HI 3 "vpr_register_operand" "Up")]
3563 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3564 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2"
3565 [(set_attr "type" "mve_move")
3566 (set_attr "length""8")])
3568 ;; [vcvtaq_m_u, vcvtaq_m_s])
3570 (define_insn "mve_vcvtaq_m_<supf><mode>"
3572 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
3573 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
3574 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
3575 (match_operand:HI 3 "vpr_register_operand" "Up")]
3578 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3579 "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
3580 [(set_attr "type" "mve_move")
3581 (set_attr "length""8")])
3583 ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u])
3585 (define_insn "mve_vcvtq_m_to_f_<supf><mode>"
3587 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
3588 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
3589 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
3590 (match_operand:HI 3 "vpr_register_operand" "Up")]
3593 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
3594 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem> %q0, %q2"
3595 [(set_attr "type" "mve_move")
3596 (set_attr "length""8")])
3598 ;; [vqrshrnbq_n_u, vqrshrnbq_n_s])
3600 (define_insn "mve_vqrshrnbq_n_<supf><mode>"
3602 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3603 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3604 (match_operand:MVE_5 2 "s_register_operand" "w")
3605 (match_operand:SI 3 "mve_imm_8" "Rb")]
3609 "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3"
3610 [(set_attr "type" "mve_move")
3613 ;; [vqrshrunbq_n_s])
3615 (define_insn "mve_vqrshrunbq_n_s<mode>"
3617 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
3618 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
3619 (match_operand:MVE_5 2 "s_register_operand" "w")
3620 (match_operand:SI 3 "mve_imm_8" "Rb")]
3624 "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3"
3625 [(set_attr "type" "mve_move")
3628 ;; [vrmlaldavhaq_s vrmlaldavhaq_u])
3630 (define_insn "mve_vrmlaldavhaq_<supf>v4si"
3632 (set (match_operand:DI 0 "s_register_operand" "=r")
3633 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
3634 (match_operand:V4SI 2 "s_register_operand" "w")
3635 (match_operand:V4SI 3 "s_register_operand" "w")]
3639 "vrmlaldavha.<supf>32 %Q0, %R0, %q2, %q3"
3640 [(set_attr "type" "mve_move")
3644 ;; [vabavq_s, vabavq_u])
3646 (define_insn "mve_vabavq_<supf><mode>"
3648 (set (match_operand:SI 0 "s_register_operand" "=r")
3649 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3650 (match_operand:MVE_2 2 "s_register_operand" "w")
3651 (match_operand:MVE_2 3 "s_register_operand" "w")]
3655 "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
3656 [(set_attr "type" "mve_move")
3660 ;; [vshlcq_u vshlcq_s]
3662 (define_expand "mve_vshlcq_vec_<supf><mode>"
3663 [(match_operand:MVE_2 0 "s_register_operand")
3664 (match_operand:MVE_2 1 "s_register_operand")
3665 (match_operand:SI 2 "s_register_operand")
3666 (match_operand:SI 3 "mve_imm_32")
3667 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3670 rtx ignore_wb = gen_reg_rtx (SImode);
3671 emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1],
3672 operands[2], operands[3]));
3676 (define_expand "mve_vshlcq_carry_<supf><mode>"
3677 [(match_operand:SI 0 "s_register_operand")
3678 (match_operand:MVE_2 1 "s_register_operand")
3679 (match_operand:SI 2 "s_register_operand")
3680 (match_operand:SI 3 "mve_imm_32")
3681 (unspec:MVE_2 [(const_int 0)] VSHLCQ)]
3684 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
3685 emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1],
3686 operands[2], operands[3]));
3690 (define_insn "mve_vshlcq_<supf><mode>"
3691 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
3692 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
3693 (match_operand:SI 3 "s_register_operand" "1")
3694 (match_operand:SI 4 "mve_imm_32" "Rf")]
3696 (set (match_operand:SI 1 "s_register_operand" "=r")
3697 (unspec:SI [(match_dup 2)
3702 "vshlc %q0, %1, %4")
3707 (define_insn "mve_vabsq_m_s<mode>"
3709 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3710 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3711 (match_operand:MVE_2 2 "s_register_operand" "w")
3712 (match_operand:HI 3 "vpr_register_operand" "Up")]
3716 "vpst\;vabst.s%#<V_sz_elem> %q0, %q2"
3717 [(set_attr "type" "mve_move")
3718 (set_attr "length""8")])
3721 ;; [vaddvaq_p_u, vaddvaq_p_s])
3723 (define_insn "mve_vaddvaq_p_<supf><mode>"
3725 (set (match_operand:SI 0 "s_register_operand" "=Te")
3726 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
3727 (match_operand:MVE_2 2 "s_register_operand" "w")
3728 (match_operand:HI 3 "vpr_register_operand" "Up")]
3732 "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2"
3733 [(set_attr "type" "mve_move")
3734 (set_attr "length""8")])
3739 (define_insn "mve_vclsq_m_s<mode>"
3741 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3742 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3743 (match_operand:MVE_2 2 "s_register_operand" "w")
3744 (match_operand:HI 3 "vpr_register_operand" "Up")]
3748 "vpst\;vclst.s%#<V_sz_elem> %q0, %q2"
3749 [(set_attr "type" "mve_move")
3750 (set_attr "length""8")])
3753 ;; [vclzq_m_s, vclzq_m_u])
3755 (define_insn "mve_vclzq_m_<supf><mode>"
3757 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
3758 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
3759 (match_operand:MVE_2 2 "s_register_operand" "w")
3760 (match_operand:HI 3 "vpr_register_operand" "Up")]
3764 "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2"
3765 [(set_attr "type" "mve_move")
3766 (set_attr "length""8")])
3771 (define_insn "mve_vcmpcsq_m_n_u<mode>"
3773 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3774 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3775 (match_operand:<V_elem> 2 "s_register_operand" "r")
3776 (match_operand:HI 3 "vpr_register_operand" "Up")]
3780 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2"
3781 [(set_attr "type" "mve_move")
3782 (set_attr "length""8")])
3787 (define_insn "mve_vcmpcsq_m_u<mode>"
3789 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3790 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3791 (match_operand:MVE_2 2 "s_register_operand" "w")
3792 (match_operand:HI 3 "vpr_register_operand" "Up")]
3796 "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2"
3797 [(set_attr "type" "mve_move")
3798 (set_attr "length""8")])
3801 ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s])
3803 (define_insn "mve_vcmpeqq_m_n_<supf><mode>"
3805 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3806 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3807 (match_operand:<V_elem> 2 "s_register_operand" "r")
3808 (match_operand:HI 3 "vpr_register_operand" "Up")]
3812 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2"
3813 [(set_attr "type" "mve_move")
3814 (set_attr "length""8")])
3817 ;; [vcmpeqq_m_u, vcmpeqq_m_s])
3819 (define_insn "mve_vcmpeqq_m_<supf><mode>"
3821 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3822 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3823 (match_operand:MVE_2 2 "s_register_operand" "w")
3824 (match_operand:HI 3 "vpr_register_operand" "Up")]
3828 "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2"
3829 [(set_attr "type" "mve_move")
3830 (set_attr "length""8")])
3835 (define_insn "mve_vcmpgeq_m_n_s<mode>"
3837 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3838 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3839 (match_operand:<V_elem> 2 "s_register_operand" "r")
3840 (match_operand:HI 3 "vpr_register_operand" "Up")]
3844 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2"
3845 [(set_attr "type" "mve_move")
3846 (set_attr "length""8")])
3851 (define_insn "mve_vcmpgeq_m_s<mode>"
3853 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3854 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3855 (match_operand:MVE_2 2 "s_register_operand" "w")
3856 (match_operand:HI 3 "vpr_register_operand" "Up")]
3860 "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2"
3861 [(set_attr "type" "mve_move")
3862 (set_attr "length""8")])
3867 (define_insn "mve_vcmpgtq_m_n_s<mode>"
3869 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3870 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3871 (match_operand:<V_elem> 2 "s_register_operand" "r")
3872 (match_operand:HI 3 "vpr_register_operand" "Up")]
3876 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2"
3877 [(set_attr "type" "mve_move")
3878 (set_attr "length""8")])
3883 (define_insn "mve_vcmpgtq_m_s<mode>"
3885 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3886 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3887 (match_operand:MVE_2 2 "s_register_operand" "w")
3888 (match_operand:HI 3 "vpr_register_operand" "Up")]
3892 "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2"
3893 [(set_attr "type" "mve_move")
3894 (set_attr "length""8")])
3899 (define_insn "mve_vcmphiq_m_n_u<mode>"
3901 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3902 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3903 (match_operand:<V_elem> 2 "s_register_operand" "r")
3904 (match_operand:HI 3 "vpr_register_operand" "Up")]
3908 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2"
3909 [(set_attr "type" "mve_move")
3910 (set_attr "length""8")])
3915 (define_insn "mve_vcmphiq_m_u<mode>"
3917 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3918 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3919 (match_operand:MVE_2 2 "s_register_operand" "w")
3920 (match_operand:HI 3 "vpr_register_operand" "Up")]
3924 "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2"
3925 [(set_attr "type" "mve_move")
3926 (set_attr "length""8")])
3931 (define_insn "mve_vcmpleq_m_n_s<mode>"
3933 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3934 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3935 (match_operand:<V_elem> 2 "s_register_operand" "r")
3936 (match_operand:HI 3 "vpr_register_operand" "Up")]
3940 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2"
3941 [(set_attr "type" "mve_move")
3942 (set_attr "length""8")])
3947 (define_insn "mve_vcmpleq_m_s<mode>"
3949 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3950 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3951 (match_operand:MVE_2 2 "s_register_operand" "w")
3952 (match_operand:HI 3 "vpr_register_operand" "Up")]
3956 "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2"
3957 [(set_attr "type" "mve_move")
3958 (set_attr "length""8")])
3963 (define_insn "mve_vcmpltq_m_n_s<mode>"
3965 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3966 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3967 (match_operand:<V_elem> 2 "s_register_operand" "r")
3968 (match_operand:HI 3 "vpr_register_operand" "Up")]
3972 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2"
3973 [(set_attr "type" "mve_move")
3974 (set_attr "length""8")])
3979 (define_insn "mve_vcmpltq_m_s<mode>"
3981 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3982 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3983 (match_operand:MVE_2 2 "s_register_operand" "w")
3984 (match_operand:HI 3 "vpr_register_operand" "Up")]
3988 "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2"
3989 [(set_attr "type" "mve_move")
3990 (set_attr "length""8")])
3993 ;; [vcmpneq_m_n_u, vcmpneq_m_n_s])
3995 (define_insn "mve_vcmpneq_m_n_<supf><mode>"
3997 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
3998 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
3999 (match_operand:<V_elem> 2 "s_register_operand" "r")
4000 (match_operand:HI 3 "vpr_register_operand" "Up")]
4004 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2"
4005 [(set_attr "type" "mve_move")
4006 (set_attr "length""8")])
4009 ;; [vcmpneq_m_s, vcmpneq_m_u])
4011 (define_insn "mve_vcmpneq_m_<supf><mode>"
4013 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4014 (unspec:HI [(match_operand:MVE_2 1 "s_register_operand" "w")
4015 (match_operand:MVE_2 2 "s_register_operand" "w")
4016 (match_operand:HI 3 "vpr_register_operand" "Up")]
4020 "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2"
4021 [(set_attr "type" "mve_move")
4022 (set_attr "length""8")])
4025 ;; [vdupq_m_n_s, vdupq_m_n_u])
4027 (define_insn "mve_vdupq_m_n_<supf><mode>"
4029 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4030 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4031 (match_operand:<V_elem> 2 "s_register_operand" "r")
4032 (match_operand:HI 3 "vpr_register_operand" "Up")]
4036 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
4037 [(set_attr "type" "mve_move")
4038 (set_attr "length""8")])
4043 (define_insn "mve_vmaxaq_m_s<mode>"
4045 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4046 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4047 (match_operand:MVE_2 2 "s_register_operand" "w")
4048 (match_operand:HI 3 "vpr_register_operand" "Up")]
4052 "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2"
4053 [(set_attr "type" "mve_move")
4054 (set_attr "length""8")])
4059 (define_insn "mve_vmaxavq_p_s<mode>"
4061 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4062 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4063 (match_operand:MVE_2 2 "s_register_operand" "w")
4064 (match_operand:HI 3 "vpr_register_operand" "Up")]
4068 "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2"
4069 [(set_attr "type" "mve_move")
4070 (set_attr "length""8")])
4073 ;; [vmaxvq_p_u, vmaxvq_p_s])
4075 (define_insn "mve_vmaxvq_p_<supf><mode>"
4077 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4078 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4079 (match_operand:MVE_2 2 "s_register_operand" "w")
4080 (match_operand:HI 3 "vpr_register_operand" "Up")]
4084 "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2"
4085 [(set_attr "type" "mve_move")
4086 (set_attr "length""8")])
4091 (define_insn "mve_vminaq_m_s<mode>"
4093 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4094 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4095 (match_operand:MVE_2 2 "s_register_operand" "w")
4096 (match_operand:HI 3 "vpr_register_operand" "Up")]
4100 "vpst\;vminat.s%#<V_sz_elem> %q0, %q2"
4101 [(set_attr "type" "mve_move")
4102 (set_attr "length""8")])
4107 (define_insn "mve_vminavq_p_s<mode>"
4109 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4110 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4111 (match_operand:MVE_2 2 "s_register_operand" "w")
4112 (match_operand:HI 3 "vpr_register_operand" "Up")]
4116 "vpst\;vminavt.s%#<V_sz_elem> %0, %q2"
4117 [(set_attr "type" "mve_move")
4118 (set_attr "length""8")])
4121 ;; [vminvq_p_s, vminvq_p_u])
4123 (define_insn "mve_vminvq_p_<supf><mode>"
4125 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
4126 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
4127 (match_operand:MVE_2 2 "s_register_operand" "w")
4128 (match_operand:HI 3 "vpr_register_operand" "Up")]
4132 "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2"
4133 [(set_attr "type" "mve_move")
4134 (set_attr "length""8")])
4137 ;; [vmladavaq_u, vmladavaq_s])
4139 (define_insn "mve_vmladavaq_<supf><mode>"
4141 (set (match_operand:SI 0 "s_register_operand" "=Te")
4142 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4143 (match_operand:MVE_2 2 "s_register_operand" "w")
4144 (match_operand:MVE_2 3 "s_register_operand" "w")]
4148 "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3"
4149 [(set_attr "type" "mve_move")
4153 ;; [vmladavq_p_u, vmladavq_p_s])
4155 (define_insn "mve_vmladavq_p_<supf><mode>"
4157 (set (match_operand:SI 0 "s_register_operand" "=Te")
4158 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
4159 (match_operand:MVE_2 2 "s_register_operand" "w")
4160 (match_operand:HI 3 "vpr_register_operand" "Up")]
4164 "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2"
4165 [(set_attr "type" "mve_move")
4166 (set_attr "length""8")])
4171 (define_insn "mve_vmladavxq_p_s<mode>"
4173 (set (match_operand:SI 0 "s_register_operand" "=Te")
4174 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
4175 (match_operand:MVE_2 2 "s_register_operand" "w")
4176 (match_operand:HI 3 "vpr_register_operand" "Up")]
4180 "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2"
4181 [(set_attr "type" "mve_move")
4182 (set_attr "length""8")])
4185 ;; [vmlaq_n_u, vmlaq_n_s])
4187 (define_insn "mve_vmlaq_n_<supf><mode>"
4189 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4190 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4191 (match_operand:MVE_2 2 "s_register_operand" "w")
4192 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4196 "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
4197 [(set_attr "type" "mve_move")
4201 ;; [vmlasq_n_u, vmlasq_n_s])
4203 (define_insn "mve_vmlasq_n_<supf><mode>"
4205 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4206 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4207 (match_operand:MVE_2 2 "s_register_operand" "w")
4208 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4212 "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3"
4213 [(set_attr "type" "mve_move")
4219 (define_insn "mve_vmlsdavq_p_s<mode>"
4221 (set (match_operand:SI 0 "s_register_operand" "=Te")
4222 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
4223 (match_operand:MVE_2 2 "s_register_operand" "w")
4224 (match_operand:HI 3 "vpr_register_operand" "Up")]
4228 "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2"
4229 [(set_attr "type" "mve_move")
4230 (set_attr "length""8")])
4235 (define_insn "mve_vmlsdavxq_p_s<mode>"
4237 (set (match_operand:SI 0 "s_register_operand" "=Te")
4238 (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")
4239 (match_operand:MVE_2 2 "s_register_operand" "w")
4240 (match_operand:HI 3 "vpr_register_operand" "Up")]
4244 "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2"
4245 [(set_attr "type" "mve_move")
4246 (set_attr "length""8")])
4249 ;; [vmvnq_m_s, vmvnq_m_u])
4251 (define_insn "mve_vmvnq_m_<supf><mode>"
4253 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4254 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4255 (match_operand:MVE_2 2 "s_register_operand" "w")
4256 (match_operand:HI 3 "vpr_register_operand" "Up")]
4260 "vpst\;vmvnt %q0, %q2"
4261 [(set_attr "type" "mve_move")
4262 (set_attr "length""8")])
4267 (define_insn "mve_vnegq_m_s<mode>"
4269 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4270 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4271 (match_operand:MVE_2 2 "s_register_operand" "w")
4272 (match_operand:HI 3 "vpr_register_operand" "Up")]
4276 "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2"
4277 [(set_attr "type" "mve_move")
4278 (set_attr "length""8")])
4281 ;; [vpselq_u, vpselq_s])
4283 (define_insn "mve_vpselq_<supf><mode>"
4285 (set (match_operand:MVE_1 0 "s_register_operand" "=w")
4286 (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w")
4287 (match_operand:MVE_1 2 "s_register_operand" "w")
4288 (match_operand:HI 3 "vpr_register_operand" "Up")]
4292 "vpsel %q0, %q1, %q2"
4293 [(set_attr "type" "mve_move")
4299 (define_insn "mve_vqabsq_m_s<mode>"
4301 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4302 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4303 (match_operand:MVE_2 2 "s_register_operand" "w")
4304 (match_operand:HI 3 "vpr_register_operand" "Up")]
4308 "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2"
4309 [(set_attr "type" "mve_move")
4310 (set_attr "length""8")])
4313 ;; [vqdmlahq_n_s, vqdmlahq_n_u])
4315 (define_insn "mve_vqdmlahq_n_<supf><mode>"
4317 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4318 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4319 (match_operand:MVE_2 2 "s_register_operand" "w")
4320 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4324 "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
4325 [(set_attr "type" "mve_move")
4331 (define_insn "mve_vqnegq_m_s<mode>"
4333 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4334 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4335 (match_operand:MVE_2 2 "s_register_operand" "w")
4336 (match_operand:HI 3 "vpr_register_operand" "Up")]
4340 "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2"
4341 [(set_attr "type" "mve_move")
4342 (set_attr "length""8")])
4347 (define_insn "mve_vqrdmladhq_s<mode>"
4349 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4350 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4351 (match_operand:MVE_2 2 "s_register_operand" "w")
4352 (match_operand:MVE_2 3 "s_register_operand" "w")]
4356 "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4357 [(set_attr "type" "mve_move")
4363 (define_insn "mve_vqrdmladhxq_s<mode>"
4365 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4366 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4367 (match_operand:MVE_2 2 "s_register_operand" "w")
4368 (match_operand:MVE_2 3 "s_register_operand" "w")]
4372 "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4373 [(set_attr "type" "mve_move")
4377 ;; [vqrdmlahq_n_s, vqrdmlahq_n_u])
4379 (define_insn "mve_vqrdmlahq_n_<supf><mode>"
4381 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4382 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4383 (match_operand:MVE_2 2 "s_register_operand" "w")
4384 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4388 "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3"
4389 [(set_attr "type" "mve_move")
4393 ;; [vqrdmlashq_n_s, vqrdmlashq_n_u])
4395 (define_insn "mve_vqrdmlashq_n_<supf><mode>"
4397 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4398 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4399 (match_operand:MVE_2 2 "s_register_operand" "w")
4400 (match_operand:<V_elem> 3 "s_register_operand" "r")]
4404 "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3"
4405 [(set_attr "type" "mve_move")
4411 (define_insn "mve_vqrdmlsdhq_s<mode>"
4413 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4414 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4415 (match_operand:MVE_2 2 "s_register_operand" "w")
4416 (match_operand:MVE_2 3 "s_register_operand" "w")]
4420 "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4421 [(set_attr "type" "mve_move")
4427 (define_insn "mve_vqrdmlsdhxq_s<mode>"
4429 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4430 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4431 (match_operand:MVE_2 2 "s_register_operand" "w")
4432 (match_operand:MVE_2 3 "s_register_operand" "w")]
4436 "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4437 [(set_attr "type" "mve_move")
4441 ;; [vqrshlq_m_n_s, vqrshlq_m_n_u])
4443 (define_insn "mve_vqrshlq_m_n_<supf><mode>"
4445 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4446 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4447 (match_operand:SI 2 "s_register_operand" "r")
4448 (match_operand:HI 3 "vpr_register_operand" "Up")]
4452 "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2"
4453 [(set_attr "type" "mve_move")
4454 (set_attr "length""8")])
4457 ;; [vqshlq_m_r_u, vqshlq_m_r_s])
4459 (define_insn "mve_vqshlq_m_r_<supf><mode>"
4461 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4462 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4463 (match_operand:SI 2 "s_register_operand" "r")
4464 (match_operand:HI 3 "vpr_register_operand" "Up")]
4468 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2"
4469 [(set_attr "type" "mve_move")
4470 (set_attr "length""8")])
4473 ;; [vrev64q_m_u, vrev64q_m_s])
4475 (define_insn "mve_vrev64q_m_<supf><mode>"
4477 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4478 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4479 (match_operand:MVE_2 2 "s_register_operand" "w")
4480 (match_operand:HI 3 "vpr_register_operand" "Up")]
4484 "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2"
4485 [(set_attr "type" "mve_move")
4486 (set_attr "length""8")])
4489 ;; [vrshlq_m_n_s, vrshlq_m_n_u])
4491 (define_insn "mve_vrshlq_m_n_<supf><mode>"
4493 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4494 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4495 (match_operand:SI 2 "s_register_operand" "r")
4496 (match_operand:HI 3 "vpr_register_operand" "Up")]
4500 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2"
4501 [(set_attr "type" "mve_move")
4502 (set_attr "length""8")])
4505 ;; [vshlq_m_r_u, vshlq_m_r_s])
4507 (define_insn "mve_vshlq_m_r_<supf><mode>"
4509 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4510 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4511 (match_operand:SI 2 "s_register_operand" "r")
4512 (match_operand:HI 3 "vpr_register_operand" "Up")]
4516 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2"
4517 [(set_attr "type" "mve_move")
4518 (set_attr "length""8")])
4521 ;; [vsliq_n_u, vsliq_n_s])
4523 (define_insn "mve_vsliq_n_<supf><mode>"
4525 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4526 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4527 (match_operand:MVE_2 2 "s_register_operand" "w")
4528 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")]
4532 "vsli.%#<V_sz_elem>\t%q0, %q2, %3"
4533 [(set_attr "type" "mve_move")
4537 ;; [vsriq_n_u, vsriq_n_s])
4539 (define_insn "mve_vsriq_n_<supf><mode>"
4541 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4542 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4543 (match_operand:MVE_2 2 "s_register_operand" "w")
4544 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
4548 "vsri.%#<V_sz_elem>\t%q0, %q2, %3"
4549 [(set_attr "type" "mve_move")
4555 (define_insn "mve_vqdmlsdhxq_s<mode>"
4557 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4558 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4559 (match_operand:MVE_2 2 "s_register_operand" "w")
4560 (match_operand:MVE_2 3 "s_register_operand" "w")]
4564 "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4565 [(set_attr "type" "mve_move")
4571 (define_insn "mve_vqdmlsdhq_s<mode>"
4573 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4574 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4575 (match_operand:MVE_2 2 "s_register_operand" "w")
4576 (match_operand:MVE_2 3 "s_register_operand" "w")]
4580 "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4581 [(set_attr "type" "mve_move")
4587 (define_insn "mve_vqdmladhxq_s<mode>"
4589 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4590 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4591 (match_operand:MVE_2 2 "s_register_operand" "w")
4592 (match_operand:MVE_2 3 "s_register_operand" "w")]
4596 "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3"
4597 [(set_attr "type" "mve_move")
4603 (define_insn "mve_vqdmladhq_s<mode>"
4605 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
4606 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
4607 (match_operand:MVE_2 2 "s_register_operand" "w")
4608 (match_operand:MVE_2 3 "s_register_operand" "w")]
4612 "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3"
4613 [(set_attr "type" "mve_move")
4619 (define_insn "mve_vmlsdavaxq_s<mode>"
4621 (set (match_operand:SI 0 "s_register_operand" "=Te")
4622 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4623 (match_operand:MVE_2 2 "s_register_operand" "w")
4624 (match_operand:MVE_2 3 "s_register_operand" "w")]
4628 "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4629 [(set_attr "type" "mve_move")
4635 (define_insn "mve_vmlsdavaq_s<mode>"
4637 (set (match_operand:SI 0 "s_register_operand" "=Te")
4638 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4639 (match_operand:MVE_2 2 "s_register_operand" "w")
4640 (match_operand:MVE_2 3 "s_register_operand" "w")]
4644 "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3"
4645 [(set_attr "type" "mve_move")
4651 (define_insn "mve_vmladavaxq_s<mode>"
4653 (set (match_operand:SI 0 "s_register_operand" "=Te")
4654 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
4655 (match_operand:MVE_2 2 "s_register_operand" "w")
4656 (match_operand:MVE_2 3 "s_register_operand" "w")]
4660 "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3"
4661 [(set_attr "type" "mve_move")
4666 (define_insn "mve_vabsq_m_f<mode>"
4668 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4669 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4670 (match_operand:MVE_0 2 "s_register_operand" "w")
4671 (match_operand:HI 3 "vpr_register_operand" "Up")]
4674 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4675 "vpst\;vabst.f%#<V_sz_elem> %q0, %q2"
4676 [(set_attr "type" "mve_move")
4677 (set_attr "length""8")])
4680 ;; [vaddlvaq_p_s vaddlvaq_p_u])
4682 (define_insn "mve_vaddlvaq_p_<supf>v4si"
4684 (set (match_operand:DI 0 "s_register_operand" "=r")
4685 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
4686 (match_operand:V4SI 2 "s_register_operand" "w")
4687 (match_operand:HI 3 "vpr_register_operand" "Up")]
4691 "vpst\;vaddlvat.<supf>32 %Q0, %R0, %q2"
4692 [(set_attr "type" "mve_move")
4693 (set_attr "length""8")])
4697 (define_insn "mve_vcmlaq_f<mode>"
4699 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4700 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4701 (match_operand:MVE_0 2 "s_register_operand" "w")
4702 (match_operand:MVE_0 3 "s_register_operand" "w")]
4705 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4706 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #0"
4707 [(set_attr "type" "mve_move")
4711 ;; [vcmlaq_rot180_f])
4713 (define_insn "mve_vcmlaq_rot180_f<mode>"
4715 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4716 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4717 (match_operand:MVE_0 2 "s_register_operand" "w")
4718 (match_operand:MVE_0 3 "s_register_operand" "w")]
4721 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4722 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #180"
4723 [(set_attr "type" "mve_move")
4727 ;; [vcmlaq_rot270_f])
4729 (define_insn "mve_vcmlaq_rot270_f<mode>"
4731 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4732 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4733 (match_operand:MVE_0 2 "s_register_operand" "w")
4734 (match_operand:MVE_0 3 "s_register_operand" "w")]
4737 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4738 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #270"
4739 [(set_attr "type" "mve_move")
4743 ;; [vcmlaq_rot90_f])
4745 (define_insn "mve_vcmlaq_rot90_f<mode>"
4747 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
4748 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
4749 (match_operand:MVE_0 2 "s_register_operand" "w")
4750 (match_operand:MVE_0 3 "s_register_operand" "w")]
4753 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4754 "vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #90"
4755 [(set_attr "type" "mve_move")
4761 (define_insn "mve_vcmpeqq_m_n_f<mode>"
4763 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4764 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4765 (match_operand:<V_elem> 2 "s_register_operand" "r")
4766 (match_operand:HI 3 "vpr_register_operand" "Up")]
4769 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4770 "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2"
4771 [(set_attr "type" "mve_move")
4772 (set_attr "length""8")])
4777 (define_insn "mve_vcmpgeq_m_f<mode>"
4779 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4780 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4781 (match_operand:MVE_0 2 "s_register_operand" "w")
4782 (match_operand:HI 3 "vpr_register_operand" "Up")]
4785 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4786 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2"
4787 [(set_attr "type" "mve_move")
4788 (set_attr "length""8")])
4793 (define_insn "mve_vcmpgeq_m_n_f<mode>"
4795 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4796 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4797 (match_operand:<V_elem> 2 "s_register_operand" "r")
4798 (match_operand:HI 3 "vpr_register_operand" "Up")]
4801 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4802 "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2"
4803 [(set_attr "type" "mve_move")
4804 (set_attr "length""8")])
4809 (define_insn "mve_vcmpgtq_m_f<mode>"
4811 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4812 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4813 (match_operand:MVE_0 2 "s_register_operand" "w")
4814 (match_operand:HI 3 "vpr_register_operand" "Up")]
4817 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4818 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2"
4819 [(set_attr "type" "mve_move")
4820 (set_attr "length""8")])
4825 (define_insn "mve_vcmpgtq_m_n_f<mode>"
4827 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4828 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4829 (match_operand:<V_elem> 2 "s_register_operand" "r")
4830 (match_operand:HI 3 "vpr_register_operand" "Up")]
4833 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4834 "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2"
4835 [(set_attr "type" "mve_move")
4836 (set_attr "length""8")])
4841 (define_insn "mve_vcmpleq_m_f<mode>"
4843 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4844 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4845 (match_operand:MVE_0 2 "s_register_operand" "w")
4846 (match_operand:HI 3 "vpr_register_operand" "Up")]
4849 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4850 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2"
4851 [(set_attr "type" "mve_move")
4852 (set_attr "length""8")])
4857 (define_insn "mve_vcmpleq_m_n_f<mode>"
4859 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4860 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4861 (match_operand:<V_elem> 2 "s_register_operand" "r")
4862 (match_operand:HI 3 "vpr_register_operand" "Up")]
4865 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4866 "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2"
4867 [(set_attr "type" "mve_move")
4868 (set_attr "length""8")])
4873 (define_insn "mve_vcmpltq_m_f<mode>"
4875 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4876 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4877 (match_operand:MVE_0 2 "s_register_operand" "w")
4878 (match_operand:HI 3 "vpr_register_operand" "Up")]
4881 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4882 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2"
4883 [(set_attr "type" "mve_move")
4884 (set_attr "length""8")])
4889 (define_insn "mve_vcmpltq_m_n_f<mode>"
4891 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4892 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4893 (match_operand:<V_elem> 2 "s_register_operand" "r")
4894 (match_operand:HI 3 "vpr_register_operand" "Up")]
4897 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4898 "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2"
4899 [(set_attr "type" "mve_move")
4900 (set_attr "length""8")])
4905 (define_insn "mve_vcmpneq_m_f<mode>"
4907 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4908 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4909 (match_operand:MVE_0 2 "s_register_operand" "w")
4910 (match_operand:HI 3 "vpr_register_operand" "Up")]
4913 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4914 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2"
4915 [(set_attr "type" "mve_move")
4916 (set_attr "length""8")])
4921 (define_insn "mve_vcmpneq_m_n_f<mode>"
4923 (set (match_operand:HI 0 "vpr_register_operand" "=Up")
4924 (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w")
4925 (match_operand:<V_elem> 2 "s_register_operand" "r")
4926 (match_operand:HI 3 "vpr_register_operand" "Up")]
4929 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4930 "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2"
4931 [(set_attr "type" "mve_move")
4932 (set_attr "length""8")])
4935 ;; [vcvtbq_m_f16_f32])
4937 (define_insn "mve_vcvtbq_m_f16_f32v8hf"
4939 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4940 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4941 (match_operand:V4SF 2 "s_register_operand" "w")
4942 (match_operand:HI 3 "vpr_register_operand" "Up")]
4945 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4946 "vpst\;vcvtbt.f16.f32 %q0, %q2"
4947 [(set_attr "type" "mve_move")
4948 (set_attr "length""8")])
4951 ;; [vcvtbq_m_f32_f16])
4953 (define_insn "mve_vcvtbq_m_f32_f16v4sf"
4955 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4956 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4957 (match_operand:V8HF 2 "s_register_operand" "w")
4958 (match_operand:HI 3 "vpr_register_operand" "Up")]
4961 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4962 "vpst\;vcvtbt.f32.f16 %q0, %q2"
4963 [(set_attr "type" "mve_move")
4964 (set_attr "length""8")])
4967 ;; [vcvttq_m_f16_f32])
4969 (define_insn "mve_vcvttq_m_f16_f32v8hf"
4971 (set (match_operand:V8HF 0 "s_register_operand" "=w")
4972 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
4973 (match_operand:V4SF 2 "s_register_operand" "w")
4974 (match_operand:HI 3 "vpr_register_operand" "Up")]
4977 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4978 "vpst\;vcvttt.f16.f32 %q0, %q2"
4979 [(set_attr "type" "mve_move")
4980 (set_attr "length""8")])
4983 ;; [vcvttq_m_f32_f16])
4985 (define_insn "mve_vcvttq_m_f32_f16v4sf"
4987 (set (match_operand:V4SF 0 "s_register_operand" "=w")
4988 (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0")
4989 (match_operand:V8HF 2 "s_register_operand" "w")
4990 (match_operand:HI 3 "vpr_register_operand" "Up")]
4993 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
4994 "vpst\;vcvttt.f32.f16 %q0, %q2"
4995 [(set_attr "type" "mve_move")
4996 (set_attr "length""8")])
5001 (define_insn "mve_vdupq_m_n_f<mode>"
5003 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5004 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5005 (match_operand:<V_elem> 2 "s_register_operand" "r")
5006 (match_operand:HI 3 "vpr_register_operand" "Up")]
5009 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5010 "vpst\;vdupt.%#<V_sz_elem> %q0, %2"
5011 [(set_attr "type" "mve_move")
5012 (set_attr "length""8")])
5017 (define_insn "mve_vfmaq_f<mode>"
5019 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5020 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5021 (match_operand:MVE_0 2 "s_register_operand" "w")
5022 (match_operand:MVE_0 3 "s_register_operand" "w")]
5025 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5026 "vfma.f%#<V_sz_elem> %q0, %q2, %q3"
5027 [(set_attr "type" "mve_move")
5033 (define_insn "mve_vfmaq_n_f<mode>"
5035 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5036 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5037 (match_operand:MVE_0 2 "s_register_operand" "w")
5038 (match_operand:<V_elem> 3 "s_register_operand" "r")]
5041 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5042 "vfma.f%#<V_sz_elem> %q0, %q2, %3"
5043 [(set_attr "type" "mve_move")
5049 (define_insn "mve_vfmasq_n_f<mode>"
5051 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5052 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5053 (match_operand:MVE_0 2 "s_register_operand" "w")
5054 (match_operand:<V_elem> 3 "s_register_operand" "r")]
5057 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5058 "vfmas.f%#<V_sz_elem> %q0, %q2, %3"
5059 [(set_attr "type" "mve_move")
5064 (define_insn "mve_vfmsq_f<mode>"
5066 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5067 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5068 (match_operand:MVE_0 2 "s_register_operand" "w")
5069 (match_operand:MVE_0 3 "s_register_operand" "w")]
5072 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5073 "vfms.f%#<V_sz_elem> %q0, %q2, %q3"
5074 [(set_attr "type" "mve_move")
5080 (define_insn "mve_vmaxnmaq_m_f<mode>"
5082 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5083 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5084 (match_operand:MVE_0 2 "s_register_operand" "w")
5085 (match_operand:HI 3 "vpr_register_operand" "Up")]
5088 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5089 "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2"
5090 [(set_attr "type" "mve_move")
5091 (set_attr "length""8")])
5095 (define_insn "mve_vmaxnmavq_p_f<mode>"
5097 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
5098 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
5099 (match_operand:MVE_0 2 "s_register_operand" "w")
5100 (match_operand:HI 3 "vpr_register_operand" "Up")]
5103 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5104 "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2"
5105 [(set_attr "type" "mve_move")
5106 (set_attr "length""8")])
5111 (define_insn "mve_vmaxnmvq_p_f<mode>"
5113 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
5114 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
5115 (match_operand:MVE_0 2 "s_register_operand" "w")
5116 (match_operand:HI 3 "vpr_register_operand" "Up")]
5119 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5120 "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2"
5121 [(set_attr "type" "mve_move")
5122 (set_attr "length""8")])
5126 (define_insn "mve_vminnmaq_m_f<mode>"
5128 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5129 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5130 (match_operand:MVE_0 2 "s_register_operand" "w")
5131 (match_operand:HI 3 "vpr_register_operand" "Up")]
5134 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5135 "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2"
5136 [(set_attr "type" "mve_move")
5137 (set_attr "length""8")])
5142 (define_insn "mve_vminnmavq_p_f<mode>"
5144 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
5145 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
5146 (match_operand:MVE_0 2 "s_register_operand" "w")
5147 (match_operand:HI 3 "vpr_register_operand" "Up")]
5150 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5151 "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2"
5152 [(set_attr "type" "mve_move")
5153 (set_attr "length""8")])
5157 (define_insn "mve_vminnmvq_p_f<mode>"
5159 (set (match_operand:<V_elem> 0 "s_register_operand" "=r")
5160 (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0")
5161 (match_operand:MVE_0 2 "s_register_operand" "w")
5162 (match_operand:HI 3 "vpr_register_operand" "Up")]
5165 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5166 "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2"
5167 [(set_attr "type" "mve_move")
5168 (set_attr "length""8")])
5171 ;; [vmlaldavaq_s, vmlaldavaq_u])
5173 (define_insn "mve_vmlaldavaq_<supf><mode>"
5175 (set (match_operand:DI 0 "s_register_operand" "=r")
5176 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5177 (match_operand:MVE_5 2 "s_register_operand" "w")
5178 (match_operand:MVE_5 3 "s_register_operand" "w")]
5182 "vmlaldava.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
5183 [(set_attr "type" "mve_move")
5189 (define_insn "mve_vmlaldavaxq_s<mode>"
5191 (set (match_operand:DI 0 "s_register_operand" "=r")
5192 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5193 (match_operand:MVE_5 2 "s_register_operand" "w")
5194 (match_operand:MVE_5 3 "s_register_operand" "w")]
5198 "vmlaldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
5199 [(set_attr "type" "mve_move")
5203 ;; [vmlaldavq_p_u, vmlaldavq_p_s])
5205 (define_insn "mve_vmlaldavq_p_<supf><mode>"
5207 (set (match_operand:DI 0 "s_register_operand" "=r")
5208 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
5209 (match_operand:MVE_5 2 "s_register_operand" "w")
5210 (match_operand:HI 3 "vpr_register_operand" "Up")]
5214 "vpst\;vmlaldavt.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2"
5215 [(set_attr "type" "mve_move")
5216 (set_attr "length""8")])
5219 ;; [vmlaldavxq_p_s])
5221 (define_insn "mve_vmlaldavxq_p_s<mode>"
5223 (set (match_operand:DI 0 "s_register_operand" "=r")
5224 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
5225 (match_operand:MVE_5 2 "s_register_operand" "w")
5226 (match_operand:HI 3 "vpr_register_operand" "Up")]
5230 "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2"
5231 [(set_attr "type" "mve_move")
5232 (set_attr "length""8")])
5236 (define_insn "mve_vmlsldavaq_s<mode>"
5238 (set (match_operand:DI 0 "s_register_operand" "=r")
5239 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5240 (match_operand:MVE_5 2 "s_register_operand" "w")
5241 (match_operand:MVE_5 3 "s_register_operand" "w")]
5245 "vmlsldava.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
5246 [(set_attr "type" "mve_move")
5252 (define_insn "mve_vmlsldavaxq_s<mode>"
5254 (set (match_operand:DI 0 "s_register_operand" "=r")
5255 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5256 (match_operand:MVE_5 2 "s_register_operand" "w")
5257 (match_operand:MVE_5 3 "s_register_operand" "w")]
5261 "vmlsldavax.s%#<V_sz_elem> %Q0, %R0, %q2, %q3"
5262 [(set_attr "type" "mve_move")
5268 (define_insn "mve_vmlsldavq_p_s<mode>"
5270 (set (match_operand:DI 0 "s_register_operand" "=r")
5271 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
5272 (match_operand:MVE_5 2 "s_register_operand" "w")
5273 (match_operand:HI 3 "vpr_register_operand" "Up")]
5277 "vpst\;vmlsldavt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
5278 [(set_attr "type" "mve_move")
5279 (set_attr "length""8")])
5282 ;; [vmlsldavxq_p_s])
5284 (define_insn "mve_vmlsldavxq_p_s<mode>"
5286 (set (match_operand:DI 0 "s_register_operand" "=r")
5287 (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w")
5288 (match_operand:MVE_5 2 "s_register_operand" "w")
5289 (match_operand:HI 3 "vpr_register_operand" "Up")]
5293 "vpst\;vmlsldavxt.s%#<V_sz_elem> %Q0, %R0, %q1, %q2"
5294 [(set_attr "type" "mve_move")
5295 (set_attr "length""8")])
5297 ;; [vmovlbq_m_u, vmovlbq_m_s])
5299 (define_insn "mve_vmovlbq_m_<supf><mode>"
5301 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
5302 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5303 (match_operand:MVE_3 2 "s_register_operand" "w")
5304 (match_operand:HI 3 "vpr_register_operand" "Up")]
5308 "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2"
5309 [(set_attr "type" "mve_move")
5310 (set_attr "length""8")])
5312 ;; [vmovltq_m_u, vmovltq_m_s])
5314 (define_insn "mve_vmovltq_m_<supf><mode>"
5316 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
5317 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
5318 (match_operand:MVE_3 2 "s_register_operand" "w")
5319 (match_operand:HI 3 "vpr_register_operand" "Up")]
5323 "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2"
5324 [(set_attr "type" "mve_move")
5325 (set_attr "length""8")])
5327 ;; [vmovnbq_m_u, vmovnbq_m_s])
5329 (define_insn "mve_vmovnbq_m_<supf><mode>"
5331 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5332 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5333 (match_operand:MVE_5 2 "s_register_operand" "w")
5334 (match_operand:HI 3 "vpr_register_operand" "Up")]
5338 "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2"
5339 [(set_attr "type" "mve_move")
5340 (set_attr "length""8")])
5343 ;; [vmovntq_m_u, vmovntq_m_s])
5345 (define_insn "mve_vmovntq_m_<supf><mode>"
5347 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5348 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5349 (match_operand:MVE_5 2 "s_register_operand" "w")
5350 (match_operand:HI 3 "vpr_register_operand" "Up")]
5354 "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2"
5355 [(set_attr "type" "mve_move")
5356 (set_attr "length""8")])
5359 ;; [vmvnq_m_n_u, vmvnq_m_n_s])
5361 (define_insn "mve_vmvnq_m_n_<supf><mode>"
5363 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5364 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5365 (match_operand:SI 2 "immediate_operand" "i")
5366 (match_operand:HI 3 "vpr_register_operand" "Up")]
5370 "vpst\;vmvnt.i%#<V_sz_elem> %q0, %2"
5371 [(set_attr "type" "mve_move")
5372 (set_attr "length""8")])
5376 (define_insn "mve_vnegq_m_f<mode>"
5378 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5379 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5380 (match_operand:MVE_0 2 "s_register_operand" "w")
5381 (match_operand:HI 3 "vpr_register_operand" "Up")]
5384 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5385 "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2"
5386 [(set_attr "type" "mve_move")
5387 (set_attr "length""8")])
5390 ;; [vorrq_m_n_s, vorrq_m_n_u])
5392 (define_insn "mve_vorrq_m_n_<supf><mode>"
5394 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5395 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5396 (match_operand:SI 2 "immediate_operand" "i")
5397 (match_operand:HI 3 "vpr_register_operand" "Up")]
5401 "vpst\;vorrt.i%#<V_sz_elem> %q0, %2"
5402 [(set_attr "type" "mve_move")
5403 (set_attr "length""8")])
5407 (define_insn "mve_vpselq_f<mode>"
5409 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5410 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")
5411 (match_operand:MVE_0 2 "s_register_operand" "w")
5412 (match_operand:HI 3 "vpr_register_operand" "Up")]
5415 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5416 "vpsel %q0, %q1, %q2"
5417 [(set_attr "type" "mve_move")
5421 ;; [vqmovnbq_m_s, vqmovnbq_m_u])
5423 (define_insn "mve_vqmovnbq_m_<supf><mode>"
5425 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5426 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5427 (match_operand:MVE_5 2 "s_register_operand" "w")
5428 (match_operand:HI 3 "vpr_register_operand" "Up")]
5432 "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2"
5433 [(set_attr "type" "mve_move")
5434 (set_attr "length""8")])
5437 ;; [vqmovntq_m_u, vqmovntq_m_s])
5439 (define_insn "mve_vqmovntq_m_<supf><mode>"
5441 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5442 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5443 (match_operand:MVE_5 2 "s_register_operand" "w")
5444 (match_operand:HI 3 "vpr_register_operand" "Up")]
5448 "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2"
5449 [(set_attr "type" "mve_move")
5450 (set_attr "length""8")])
5455 (define_insn "mve_vqmovunbq_m_s<mode>"
5457 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5458 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5459 (match_operand:MVE_5 2 "s_register_operand" "w")
5460 (match_operand:HI 3 "vpr_register_operand" "Up")]
5464 "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2"
5465 [(set_attr "type" "mve_move")
5466 (set_attr "length""8")])
5471 (define_insn "mve_vqmovuntq_m_s<mode>"
5473 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5474 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5475 (match_operand:MVE_5 2 "s_register_operand" "w")
5476 (match_operand:HI 3 "vpr_register_operand" "Up")]
5480 "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2"
5481 [(set_attr "type" "mve_move")
5482 (set_attr "length""8")])
5485 ;; [vqrshrntq_n_u, vqrshrntq_n_s])
5487 (define_insn "mve_vqrshrntq_n_<supf><mode>"
5489 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5490 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5491 (match_operand:MVE_5 2 "s_register_operand" "w")
5492 (match_operand:SI 3 "mve_imm_8" "Rb")]
5496 "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5497 [(set_attr "type" "mve_move")
5501 ;; [vqrshruntq_n_s])
5503 (define_insn "mve_vqrshruntq_n_s<mode>"
5505 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5506 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5507 (match_operand:MVE_5 2 "s_register_operand" "w")
5508 (match_operand:SI 3 "mve_imm_8" "Rb")]
5512 "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3"
5513 [(set_attr "type" "mve_move")
5517 ;; [vqshrnbq_n_u, vqshrnbq_n_s])
5519 (define_insn "mve_vqshrnbq_n_<supf><mode>"
5521 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5522 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5523 (match_operand:MVE_5 2 "s_register_operand" "w")
5524 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5528 "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
5529 [(set_attr "type" "mve_move")
5533 ;; [vqshrntq_n_u, vqshrntq_n_s])
5535 (define_insn "mve_vqshrntq_n_<supf><mode>"
5537 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5538 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5539 (match_operand:MVE_5 2 "s_register_operand" "w")
5540 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5544 "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3"
5545 [(set_attr "type" "mve_move")
5551 (define_insn "mve_vqshrunbq_n_s<mode>"
5553 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5554 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5555 (match_operand:MVE_5 2 "s_register_operand" "w")
5556 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5560 "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3"
5561 [(set_attr "type" "mve_move")
5567 (define_insn "mve_vqshruntq_n_s<mode>"
5569 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5570 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5571 (match_operand:MVE_5 2 "s_register_operand" "w")
5572 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5576 "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3"
5577 [(set_attr "type" "mve_move")
5583 (define_insn "mve_vrev32q_m_fv8hf"
5585 (set (match_operand:V8HF 0 "s_register_operand" "=w")
5586 (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0")
5587 (match_operand:V8HF 2 "s_register_operand" "w")
5588 (match_operand:HI 3 "vpr_register_operand" "Up")]
5591 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5592 "vpst\;vrev32t.16 %q0, %q2"
5593 [(set_attr "type" "mve_move")
5594 (set_attr "length""8")])
5597 ;; [vrev32q_m_s, vrev32q_m_u])
5599 (define_insn "mve_vrev32q_m_<supf><mode>"
5601 (set (match_operand:MVE_3 0 "s_register_operand" "=w")
5602 (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0")
5603 (match_operand:MVE_3 2 "s_register_operand" "w")
5604 (match_operand:HI 3 "vpr_register_operand" "Up")]
5608 "vpst\;vrev32t.%#<V_sz_elem> %q0, %q2"
5609 [(set_attr "type" "mve_move")
5610 (set_attr "length""8")])
5615 (define_insn "mve_vrev64q_m_f<mode>"
5617 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5618 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5619 (match_operand:MVE_0 2 "s_register_operand" "w")
5620 (match_operand:HI 3 "vpr_register_operand" "Up")]
5623 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5624 "vpst\;vrev64t.%#<V_sz_elem> %q0, %q2"
5625 [(set_attr "type" "mve_move")
5626 (set_attr "length""8")])
5629 ;; [vrmlaldavhaxq_s])
5631 (define_insn "mve_vrmlaldavhaxq_sv4si"
5633 (set (match_operand:DI 0 "s_register_operand" "=r")
5634 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5635 (match_operand:V4SI 2 "s_register_operand" "w")
5636 (match_operand:V4SI 3 "s_register_operand" "w")]
5640 "vrmlaldavhax.s32 %Q0, %R0, %q2, %q3"
5641 [(set_attr "type" "mve_move")
5645 ;; [vrmlaldavhxq_p_s])
5647 (define_insn "mve_vrmlaldavhxq_p_sv4si"
5649 (set (match_operand:DI 0 "s_register_operand" "=r")
5650 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5651 (match_operand:V4SI 2 "s_register_operand" "w")
5652 (match_operand:HI 3 "vpr_register_operand" "Up")]
5656 "vpst\;vrmlaldavhxt.s32 %Q0, %R0, %q1, %q2"
5657 [(set_attr "type" "mve_move")
5658 (set_attr "length""8")])
5661 ;; [vrmlsldavhaxq_s])
5663 (define_insn "mve_vrmlsldavhaxq_sv4si"
5665 (set (match_operand:DI 0 "s_register_operand" "=r")
5666 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5667 (match_operand:V4SI 2 "s_register_operand" "w")
5668 (match_operand:V4SI 3 "s_register_operand" "w")]
5672 "vrmlsldavhax.s32 %Q0, %R0, %q2, %q3"
5673 [(set_attr "type" "mve_move")
5677 ;; [vrmlsldavhq_p_s])
5679 (define_insn "mve_vrmlsldavhq_p_sv4si"
5681 (set (match_operand:DI 0 "s_register_operand" "=r")
5682 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5683 (match_operand:V4SI 2 "s_register_operand" "w")
5684 (match_operand:HI 3 "vpr_register_operand" "Up")]
5688 "vpst\;vrmlsldavht.s32 %Q0, %R0, %q1, %q2"
5689 [(set_attr "type" "mve_move")
5690 (set_attr "length""8")])
5693 ;; [vrmlsldavhxq_p_s])
5695 (define_insn "mve_vrmlsldavhxq_p_sv4si"
5697 (set (match_operand:DI 0 "s_register_operand" "=r")
5698 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5699 (match_operand:V4SI 2 "s_register_operand" "w")
5700 (match_operand:HI 3 "vpr_register_operand" "Up")]
5704 "vpst\;vrmlsldavhxt.s32 %Q0, %R0, %q1, %q2"
5705 [(set_attr "type" "mve_move")
5706 (set_attr "length""8")])
5711 (define_insn "mve_vrndaq_m_f<mode>"
5713 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5714 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5715 (match_operand:MVE_0 2 "s_register_operand" "w")
5716 (match_operand:HI 3 "vpr_register_operand" "Up")]
5719 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5720 "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2"
5721 [(set_attr "type" "mve_move")
5722 (set_attr "length""8")])
5727 (define_insn "mve_vrndmq_m_f<mode>"
5729 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5730 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5731 (match_operand:MVE_0 2 "s_register_operand" "w")
5732 (match_operand:HI 3 "vpr_register_operand" "Up")]
5735 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5736 "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2"
5737 [(set_attr "type" "mve_move")
5738 (set_attr "length""8")])
5743 (define_insn "mve_vrndnq_m_f<mode>"
5745 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5746 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5747 (match_operand:MVE_0 2 "s_register_operand" "w")
5748 (match_operand:HI 3 "vpr_register_operand" "Up")]
5751 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5752 "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2"
5753 [(set_attr "type" "mve_move")
5754 (set_attr "length""8")])
5759 (define_insn "mve_vrndpq_m_f<mode>"
5761 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5762 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5763 (match_operand:MVE_0 2 "s_register_operand" "w")
5764 (match_operand:HI 3 "vpr_register_operand" "Up")]
5767 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5768 "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2"
5769 [(set_attr "type" "mve_move")
5770 (set_attr "length""8")])
5775 (define_insn "mve_vrndxq_m_f<mode>"
5777 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
5778 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
5779 (match_operand:MVE_0 2 "s_register_operand" "w")
5780 (match_operand:HI 3 "vpr_register_operand" "Up")]
5783 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5784 "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2"
5785 [(set_attr "type" "mve_move")
5786 (set_attr "length""8")])
5789 ;; [vrshrnbq_n_s, vrshrnbq_n_u])
5791 (define_insn "mve_vrshrnbq_n_<supf><mode>"
5793 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5794 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5795 (match_operand:MVE_5 2 "s_register_operand" "w")
5796 (match_operand:SI 3 "mve_imm_8" "Rb")]
5800 "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5801 [(set_attr "type" "mve_move")
5805 ;; [vrshrntq_n_u, vrshrntq_n_s])
5807 (define_insn "mve_vrshrntq_n_<supf><mode>"
5809 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5810 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5811 (match_operand:MVE_5 2 "s_register_operand" "w")
5812 (match_operand:SI 3 "mve_imm_8" "Rb")]
5816 "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3"
5817 [(set_attr "type" "mve_move")
5821 ;; [vshrnbq_n_u, vshrnbq_n_s])
5823 (define_insn "mve_vshrnbq_n_<supf><mode>"
5825 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5826 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5827 (match_operand:MVE_5 2 "s_register_operand" "w")
5828 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5832 "vshrnb.i%#<V_sz_elem> %q0, %q2, %3"
5833 [(set_attr "type" "mve_move")
5837 ;; [vshrntq_n_s, vshrntq_n_u])
5839 (define_insn "mve_vshrntq_n_<supf><mode>"
5841 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
5842 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
5843 (match_operand:MVE_5 2 "s_register_operand" "w")
5844 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")]
5848 "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3"
5849 [(set_attr "type" "mve_move")
5853 ;; [vcvtmq_m_s, vcvtmq_m_u])
5855 (define_insn "mve_vcvtmq_m_<supf><mode>"
5857 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5858 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5859 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5860 (match_operand:HI 3 "vpr_register_operand" "Up")]
5863 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5864 "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5865 [(set_attr "type" "mve_move")
5866 (set_attr "length""8")])
5869 ;; [vcvtpq_m_u, vcvtpq_m_s])
5871 (define_insn "mve_vcvtpq_m_<supf><mode>"
5873 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5874 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5875 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5876 (match_operand:HI 3 "vpr_register_operand" "Up")]
5879 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5880 "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5881 [(set_attr "type" "mve_move")
5882 (set_attr "length""8")])
5885 ;; [vcvtnq_m_s, vcvtnq_m_u])
5887 (define_insn "mve_vcvtnq_m_<supf><mode>"
5889 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5890 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5891 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5892 (match_operand:HI 3 "vpr_register_operand" "Up")]
5895 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5896 "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5897 [(set_attr "type" "mve_move")
5898 (set_attr "length""8")])
5901 ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u])
5903 (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>"
5905 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5906 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5907 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5908 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
5909 (match_operand:HI 4 "vpr_register_operand" "Up")]
5912 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5913 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3"
5914 [(set_attr "type" "mve_move")
5915 (set_attr "length""8")])
5918 ;; [vrev16q_m_u, vrev16q_m_s])
5920 (define_insn "mve_vrev16q_m_<supf>v16qi"
5922 (set (match_operand:V16QI 0 "s_register_operand" "=w")
5923 (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0")
5924 (match_operand:V16QI 2 "s_register_operand" "w")
5925 (match_operand:HI 3 "vpr_register_operand" "Up")]
5929 "vpst\;vrev16t.8 %q0, %q2"
5930 [(set_attr "type" "mve_move")
5931 (set_attr "length""8")])
5934 ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s])
5936 (define_insn "mve_vcvtq_m_from_f_<supf><mode>"
5938 (set (match_operand:MVE_5 0 "s_register_operand" "=w")
5939 (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0")
5940 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
5941 (match_operand:HI 3 "vpr_register_operand" "Up")]
5944 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
5945 "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2"
5946 [(set_attr "type" "mve_move")
5947 (set_attr "length""8")])
5950 ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s])
5952 (define_insn "mve_vrmlaldavhq_p_<supf>v4si"
5954 (set (match_operand:DI 0 "s_register_operand" "=r")
5955 (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")
5956 (match_operand:V4SI 2 "s_register_operand" "w")
5957 (match_operand:HI 3 "vpr_register_operand" "Up")]
5961 "vpst\;vrmlaldavht.<supf>32 %Q0, %R0, %q1, %q2"
5962 [(set_attr "type" "mve_move")
5963 (set_attr "length""8")])
5966 ;; [vrmlsldavhaq_s])
5968 (define_insn "mve_vrmlsldavhaq_sv4si"
5970 (set (match_operand:DI 0 "s_register_operand" "=r")
5971 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
5972 (match_operand:V4SI 2 "s_register_operand" "w")
5973 (match_operand:V4SI 3 "s_register_operand" "w")]
5977 "vrmlsldavha.s32 %Q0, %R0, %q2, %q3"
5978 [(set_attr "type" "mve_move")
5982 ;; [vabavq_p_s, vabavq_p_u])
5984 (define_insn "mve_vabavq_p_<supf><mode>"
5986 (set (match_operand:SI 0 "s_register_operand" "=r")
5987 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
5988 (match_operand:MVE_2 2 "s_register_operand" "w")
5989 (match_operand:MVE_2 3 "s_register_operand" "w")
5990 (match_operand:HI 4 "vpr_register_operand" "Up")]
5994 "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3"
5995 [(set_attr "type" "mve_move")
6001 (define_insn "mve_vqshluq_m_n_s<mode>"
6003 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6004 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6005 (match_operand:MVE_2 2 "s_register_operand" "w")
6006 (match_operand:SI 3 "mve_imm_7" "Ra")
6007 (match_operand:HI 4 "vpr_register_operand" "Up")]
6011 "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3"
6012 [(set_attr "type" "mve_move")])
6015 ;; [vshlq_m_s, vshlq_m_u])
6017 (define_insn "mve_vshlq_m_<supf><mode>"
6019 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6020 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6021 (match_operand:MVE_2 2 "s_register_operand" "w")
6022 (match_operand:MVE_2 3 "s_register_operand" "w")
6023 (match_operand:HI 4 "vpr_register_operand" "Up")]
6027 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6028 [(set_attr "type" "mve_move")])
6031 ;; [vsriq_m_n_s, vsriq_m_n_u])
6033 (define_insn "mve_vsriq_m_n_<supf><mode>"
6035 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6036 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6037 (match_operand:MVE_2 2 "s_register_operand" "w")
6038 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")
6039 (match_operand:HI 4 "vpr_register_operand" "Up")]
6043 "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3"
6044 [(set_attr "type" "mve_move")])
6047 ;; [vsubq_m_u, vsubq_m_s])
6049 (define_insn "mve_vsubq_m_<supf><mode>"
6051 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6052 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6053 (match_operand:MVE_2 2 "s_register_operand" "w")
6054 (match_operand:MVE_2 3 "s_register_operand" "w")
6055 (match_operand:HI 4 "vpr_register_operand" "Up")]
6059 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3"
6060 [(set_attr "type" "mve_move")])
6063 ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s])
6065 (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>"
6067 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
6068 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
6069 (match_operand:<MVE_CNVT> 2 "s_register_operand" "w")
6070 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6071 (match_operand:HI 4 "vpr_register_operand" "Up")]
6074 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
6075 "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6076 [(set_attr "type" "mve_move")
6077 (set_attr "length""8")])
6079 ;; [vabdq_m_s, vabdq_m_u])
6081 (define_insn "mve_vabdq_m_<supf><mode>"
6083 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6084 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6085 (match_operand:MVE_2 2 "s_register_operand" "w")
6086 (match_operand:MVE_2 3 "s_register_operand" "w")
6087 (match_operand:HI 4 "vpr_register_operand" "Up")]
6091 "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6092 [(set_attr "type" "mve_move")
6093 (set_attr "length""8")])
6096 ;; [vaddq_m_n_s, vaddq_m_n_u])
6098 (define_insn "mve_vaddq_m_n_<supf><mode>"
6100 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6101 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6102 (match_operand:MVE_2 2 "s_register_operand" "w")
6103 (match_operand:<V_elem> 3 "s_register_operand" "r")
6104 (match_operand:HI 4 "vpr_register_operand" "Up")]
6108 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3"
6109 [(set_attr "type" "mve_move")
6110 (set_attr "length""8")])
6113 ;; [vaddq_m_u, vaddq_m_s])
6115 (define_insn "mve_vaddq_m_<supf><mode>"
6117 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6118 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6119 (match_operand:MVE_2 2 "s_register_operand" "w")
6120 (match_operand:MVE_2 3 "s_register_operand" "w")
6121 (match_operand:HI 4 "vpr_register_operand" "Up")]
6125 "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3"
6126 [(set_attr "type" "mve_move")
6127 (set_attr "length""8")])
6130 ;; [vandq_m_u, vandq_m_s])
6132 (define_insn "mve_vandq_m_<supf><mode>"
6134 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6135 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6136 (match_operand:MVE_2 2 "s_register_operand" "w")
6137 (match_operand:MVE_2 3 "s_register_operand" "w")
6138 (match_operand:HI 4 "vpr_register_operand" "Up")]
6142 "vpst\;vandt %q0, %q2, %q3"
6143 [(set_attr "type" "mve_move")
6144 (set_attr "length""8")])
6147 ;; [vbicq_m_u, vbicq_m_s])
6149 (define_insn "mve_vbicq_m_<supf><mode>"
6151 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6152 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6153 (match_operand:MVE_2 2 "s_register_operand" "w")
6154 (match_operand:MVE_2 3 "s_register_operand" "w")
6155 (match_operand:HI 4 "vpr_register_operand" "Up")]
6159 "vpst\;vbict %q0, %q2, %q3"
6160 [(set_attr "type" "mve_move")
6161 (set_attr "length""8")])
6164 ;; [vbrsrq_m_n_u, vbrsrq_m_n_s])
6166 (define_insn "mve_vbrsrq_m_n_<supf><mode>"
6168 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6169 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6170 (match_operand:MVE_2 2 "s_register_operand" "w")
6171 (match_operand:SI 3 "s_register_operand" "r")
6172 (match_operand:HI 4 "vpr_register_operand" "Up")]
6176 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
6177 [(set_attr "type" "mve_move")
6178 (set_attr "length""8")])
6181 ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s])
6183 (define_insn "mve_vcaddq_rot270_m_<supf><mode>"
6185 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6186 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6187 (match_operand:MVE_2 2 "s_register_operand" "w")
6188 (match_operand:MVE_2 3 "s_register_operand" "w")
6189 (match_operand:HI 4 "vpr_register_operand" "Up")]
6193 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270"
6194 [(set_attr "type" "mve_move")
6195 (set_attr "length""8")])
6198 ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s])
6200 (define_insn "mve_vcaddq_rot90_m_<supf><mode>"
6202 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6203 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6204 (match_operand:MVE_2 2 "s_register_operand" "w")
6205 (match_operand:MVE_2 3 "s_register_operand" "w")
6206 (match_operand:HI 4 "vpr_register_operand" "Up")]
6210 "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90"
6211 [(set_attr "type" "mve_move")
6212 (set_attr "length""8")])
6215 ;; [veorq_m_s, veorq_m_u])
6217 (define_insn "mve_veorq_m_<supf><mode>"
6219 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6220 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6221 (match_operand:MVE_2 2 "s_register_operand" "w")
6222 (match_operand:MVE_2 3 "s_register_operand" "w")
6223 (match_operand:HI 4 "vpr_register_operand" "Up")]
6227 "vpst\;veort %q0, %q2, %q3"
6228 [(set_attr "type" "mve_move")
6229 (set_attr "length""8")])
6232 ;; [vhaddq_m_n_s, vhaddq_m_n_u])
6234 (define_insn "mve_vhaddq_m_n_<supf><mode>"
6236 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6237 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6238 (match_operand:MVE_2 2 "s_register_operand" "w")
6239 (match_operand:<V_elem> 3 "s_register_operand" "r")
6240 (match_operand:HI 4 "vpr_register_operand" "Up")]
6244 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6245 [(set_attr "type" "mve_move")
6246 (set_attr "length""8")])
6249 ;; [vhaddq_m_s, vhaddq_m_u])
6251 (define_insn "mve_vhaddq_m_<supf><mode>"
6253 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6254 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6255 (match_operand:MVE_2 2 "s_register_operand" "w")
6256 (match_operand:MVE_2 3 "s_register_operand" "w")
6257 (match_operand:HI 4 "vpr_register_operand" "Up")]
6261 "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6262 [(set_attr "type" "mve_move")
6263 (set_attr "length""8")])
6266 ;; [vhsubq_m_n_s, vhsubq_m_n_u])
6268 (define_insn "mve_vhsubq_m_n_<supf><mode>"
6270 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6271 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6272 (match_operand:MVE_2 2 "s_register_operand" "w")
6273 (match_operand:<V_elem> 3 "s_register_operand" "r")
6274 (match_operand:HI 4 "vpr_register_operand" "Up")]
6278 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3"
6279 [(set_attr "type" "mve_move")
6280 (set_attr "length""8")])
6283 ;; [vhsubq_m_s, vhsubq_m_u])
6285 (define_insn "mve_vhsubq_m_<supf><mode>"
6287 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6288 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6289 (match_operand:MVE_2 2 "s_register_operand" "w")
6290 (match_operand:MVE_2 3 "s_register_operand" "w")
6291 (match_operand:HI 4 "vpr_register_operand" "Up")]
6295 "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6296 [(set_attr "type" "mve_move")
6297 (set_attr "length""8")])
6300 ;; [vmaxq_m_s, vmaxq_m_u])
6302 (define_insn "mve_vmaxq_m_<supf><mode>"
6304 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6305 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6306 (match_operand:MVE_2 2 "s_register_operand" "w")
6307 (match_operand:MVE_2 3 "s_register_operand" "w")
6308 (match_operand:HI 4 "vpr_register_operand" "Up")]
6312 "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6313 [(set_attr "type" "mve_move")
6314 (set_attr "length""8")])
6317 ;; [vminq_m_s, vminq_m_u])
6319 (define_insn "mve_vminq_m_<supf><mode>"
6321 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6322 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6323 (match_operand:MVE_2 2 "s_register_operand" "w")
6324 (match_operand:MVE_2 3 "s_register_operand" "w")
6325 (match_operand:HI 4 "vpr_register_operand" "Up")]
6329 "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6330 [(set_attr "type" "mve_move")
6331 (set_attr "length""8")])
6334 ;; [vmladavaq_p_u, vmladavaq_p_s])
6336 (define_insn "mve_vmladavaq_p_<supf><mode>"
6338 (set (match_operand:SI 0 "s_register_operand" "=Te")
6339 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6340 (match_operand:MVE_2 2 "s_register_operand" "w")
6341 (match_operand:MVE_2 3 "s_register_operand" "w")
6342 (match_operand:HI 4 "vpr_register_operand" "Up")]
6346 "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3"
6347 [(set_attr "type" "mve_move")
6348 (set_attr "length""8")])
6351 ;; [vmlaq_m_n_s, vmlaq_m_n_u])
6353 (define_insn "mve_vmlaq_m_n_<supf><mode>"
6355 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6356 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6357 (match_operand:MVE_2 2 "s_register_operand" "w")
6358 (match_operand:<V_elem> 3 "s_register_operand" "r")
6359 (match_operand:HI 4 "vpr_register_operand" "Up")]
6363 "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3"
6364 [(set_attr "type" "mve_move")
6365 (set_attr "length""8")])
6368 ;; [vmlasq_m_n_u, vmlasq_m_n_s])
6370 (define_insn "mve_vmlasq_m_n_<supf><mode>"
6372 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6373 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6374 (match_operand:MVE_2 2 "s_register_operand" "w")
6375 (match_operand:<V_elem> 3 "s_register_operand" "r")
6376 (match_operand:HI 4 "vpr_register_operand" "Up")]
6380 "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3"
6381 [(set_attr "type" "mve_move")
6382 (set_attr "length""8")])
6385 ;; [vmulhq_m_s, vmulhq_m_u])
6387 (define_insn "mve_vmulhq_m_<supf><mode>"
6389 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6390 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6391 (match_operand:MVE_2 2 "s_register_operand" "w")
6392 (match_operand:MVE_2 3 "s_register_operand" "w")
6393 (match_operand:HI 4 "vpr_register_operand" "Up")]
6397 "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6398 [(set_attr "type" "mve_move")
6399 (set_attr "length""8")])
6402 ;; [vmullbq_int_m_u, vmullbq_int_m_s])
6404 (define_insn "mve_vmullbq_int_m_<supf><mode>"
6406 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6407 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6408 (match_operand:MVE_2 2 "s_register_operand" "w")
6409 (match_operand:MVE_2 3 "s_register_operand" "w")
6410 (match_operand:HI 4 "vpr_register_operand" "Up")]
6414 "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6415 [(set_attr "type" "mve_move")
6416 (set_attr "length""8")])
6419 ;; [vmulltq_int_m_s, vmulltq_int_m_u])
6421 (define_insn "mve_vmulltq_int_m_<supf><mode>"
6423 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
6424 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
6425 (match_operand:MVE_2 2 "s_register_operand" "w")
6426 (match_operand:MVE_2 3 "s_register_operand" "w")
6427 (match_operand:HI 4 "vpr_register_operand" "Up")]
6431 "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3"
6432 [(set_attr "type" "mve_move")
6433 (set_attr "length""8")])
6436 ;; [vmulq_m_n_u, vmulq_m_n_s])
6438 (define_insn "mve_vmulq_m_n_<supf><mode>"
6440 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6441 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6442 (match_operand:MVE_2 2 "s_register_operand" "w")
6443 (match_operand:<V_elem> 3 "s_register_operand" "r")
6444 (match_operand:HI 4 "vpr_register_operand" "Up")]
6448 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3"
6449 [(set_attr "type" "mve_move")
6450 (set_attr "length""8")])
6453 ;; [vmulq_m_s, vmulq_m_u])
6455 (define_insn "mve_vmulq_m_<supf><mode>"
6457 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6458 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6459 (match_operand:MVE_2 2 "s_register_operand" "w")
6460 (match_operand:MVE_2 3 "s_register_operand" "w")
6461 (match_operand:HI 4 "vpr_register_operand" "Up")]
6465 "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3"
6466 [(set_attr "type" "mve_move")
6467 (set_attr "length""8")])
6470 ;; [vornq_m_u, vornq_m_s])
6472 (define_insn "mve_vornq_m_<supf><mode>"
6474 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6475 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6476 (match_operand:MVE_2 2 "s_register_operand" "w")
6477 (match_operand:MVE_2 3 "s_register_operand" "w")
6478 (match_operand:HI 4 "vpr_register_operand" "Up")]
6482 "vpst\;vornt %q0, %q2, %q3"
6483 [(set_attr "type" "mve_move")
6484 (set_attr "length""8")])
6487 ;; [vorrq_m_s, vorrq_m_u])
6489 (define_insn "mve_vorrq_m_<supf><mode>"
6491 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6492 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6493 (match_operand:MVE_2 2 "s_register_operand" "w")
6494 (match_operand:MVE_2 3 "s_register_operand" "w")
6495 (match_operand:HI 4 "vpr_register_operand" "Up")]
6499 "vpst\;vorrt %q0, %q2, %q3"
6500 [(set_attr "type" "mve_move")
6501 (set_attr "length""8")])
6504 ;; [vqaddq_m_n_u, vqaddq_m_n_s])
6506 (define_insn "mve_vqaddq_m_n_<supf><mode>"
6508 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6509 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6510 (match_operand:MVE_2 2 "s_register_operand" "w")
6511 (match_operand:<V_elem> 3 "s_register_operand" "r")
6512 (match_operand:HI 4 "vpr_register_operand" "Up")]
6516 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6517 [(set_attr "type" "mve_move")
6518 (set_attr "length""8")])
6521 ;; [vqaddq_m_u, vqaddq_m_s])
6523 (define_insn "mve_vqaddq_m_<supf><mode>"
6525 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6526 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6527 (match_operand:MVE_2 2 "s_register_operand" "w")
6528 (match_operand:MVE_2 3 "s_register_operand" "w")
6529 (match_operand:HI 4 "vpr_register_operand" "Up")]
6533 "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6534 [(set_attr "type" "mve_move")
6535 (set_attr "length""8")])
6538 ;; [vqdmlahq_m_n_s])
6540 (define_insn "mve_vqdmlahq_m_n_s<mode>"
6542 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6543 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6544 (match_operand:MVE_2 2 "s_register_operand" "w")
6545 (match_operand:<V_elem> 3 "s_register_operand" "r")
6546 (match_operand:HI 4 "vpr_register_operand" "Up")]
6550 "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
6551 [(set_attr "type" "mve_move")
6552 (set_attr "length""8")])
6555 ;; [vqrdmlahq_m_n_s])
6557 (define_insn "mve_vqrdmlahq_m_n_s<mode>"
6559 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6560 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6561 (match_operand:MVE_2 2 "s_register_operand" "w")
6562 (match_operand:<V_elem> 3 "s_register_operand" "r")
6563 (match_operand:HI 4 "vpr_register_operand" "Up")]
6567 "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3"
6568 [(set_attr "type" "mve_move")
6569 (set_attr "length""8")])
6572 ;; [vqrdmlashq_m_n_s])
6574 (define_insn "mve_vqrdmlashq_m_n_s<mode>"
6576 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6577 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6578 (match_operand:MVE_2 2 "s_register_operand" "w")
6579 (match_operand:<V_elem> 3 "s_register_operand" "r")
6580 (match_operand:HI 4 "vpr_register_operand" "Up")]
6584 "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3"
6585 [(set_attr "type" "mve_move")
6586 (set_attr "length""8")])
6589 ;; [vqrshlq_m_u, vqrshlq_m_s])
6591 (define_insn "mve_vqrshlq_m_<supf><mode>"
6593 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6594 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6595 (match_operand:MVE_2 2 "s_register_operand" "w")
6596 (match_operand:MVE_2 3 "s_register_operand" "w")
6597 (match_operand:HI 4 "vpr_register_operand" "Up")]
6601 "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6602 [(set_attr "type" "mve_move")
6603 (set_attr "length""8")])
6606 ;; [vqshlq_m_n_s, vqshlq_m_n_u])
6608 (define_insn "mve_vqshlq_m_n_<supf><mode>"
6610 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6611 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6612 (match_operand:MVE_2 2 "s_register_operand" "w")
6613 (match_operand:SI 3 "immediate_operand" "i")
6614 (match_operand:HI 4 "vpr_register_operand" "Up")]
6618 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6619 [(set_attr "type" "mve_move")
6620 (set_attr "length""8")])
6623 ;; [vqshlq_m_u, vqshlq_m_s])
6625 (define_insn "mve_vqshlq_m_<supf><mode>"
6627 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6628 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6629 (match_operand:MVE_2 2 "s_register_operand" "w")
6630 (match_operand:MVE_2 3 "s_register_operand" "w")
6631 (match_operand:HI 4 "vpr_register_operand" "Up")]
6635 "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6636 [(set_attr "type" "mve_move")
6637 (set_attr "length""8")])
6640 ;; [vqsubq_m_n_u, vqsubq_m_n_s])
6642 (define_insn "mve_vqsubq_m_n_<supf><mode>"
6644 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6645 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6646 (match_operand:MVE_2 2 "s_register_operand" "w")
6647 (match_operand:<V_elem> 3 "s_register_operand" "r")
6648 (match_operand:HI 4 "vpr_register_operand" "Up")]
6652 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6653 [(set_attr "type" "mve_move")
6654 (set_attr "length""8")])
6657 ;; [vqsubq_m_u, vqsubq_m_s])
6659 (define_insn "mve_vqsubq_m_<supf><mode>"
6661 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6662 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6663 (match_operand:MVE_2 2 "s_register_operand" "w")
6664 (match_operand:MVE_2 3 "s_register_operand" "w")
6665 (match_operand:HI 4 "vpr_register_operand" "Up")]
6669 "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6670 [(set_attr "type" "mve_move")
6671 (set_attr "length""8")])
6674 ;; [vrhaddq_m_u, vrhaddq_m_s])
6676 (define_insn "mve_vrhaddq_m_<supf><mode>"
6678 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6679 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6680 (match_operand:MVE_2 2 "s_register_operand" "w")
6681 (match_operand:MVE_2 3 "s_register_operand" "w")
6682 (match_operand:HI 4 "vpr_register_operand" "Up")]
6686 "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6687 [(set_attr "type" "mve_move")
6688 (set_attr "length""8")])
6691 ;; [vrmulhq_m_u, vrmulhq_m_s])
6693 (define_insn "mve_vrmulhq_m_<supf><mode>"
6695 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6696 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6697 (match_operand:MVE_2 2 "s_register_operand" "w")
6698 (match_operand:MVE_2 3 "s_register_operand" "w")
6699 (match_operand:HI 4 "vpr_register_operand" "Up")]
6703 "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6704 [(set_attr "type" "mve_move")
6705 (set_attr "length""8")])
6708 ;; [vrshlq_m_s, vrshlq_m_u])
6710 (define_insn "mve_vrshlq_m_<supf><mode>"
6712 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6713 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6714 (match_operand:MVE_2 2 "s_register_operand" "w")
6715 (match_operand:MVE_2 3 "s_register_operand" "w")
6716 (match_operand:HI 4 "vpr_register_operand" "Up")]
6720 "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3"
6721 [(set_attr "type" "mve_move")
6722 (set_attr "length""8")])
6725 ;; [vrshrq_m_n_s, vrshrq_m_n_u])
6727 (define_insn "mve_vrshrq_m_n_<supf><mode>"
6729 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6730 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6731 (match_operand:MVE_2 2 "s_register_operand" "w")
6732 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6733 (match_operand:HI 4 "vpr_register_operand" "Up")]
6737 "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6738 [(set_attr "type" "mve_move")
6739 (set_attr "length""8")])
6742 ;; [vshlq_m_n_s, vshlq_m_n_u])
6744 (define_insn "mve_vshlq_m_n_<supf><mode>"
6746 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6747 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6748 (match_operand:MVE_2 2 "s_register_operand" "w")
6749 (match_operand:SI 3 "immediate_operand" "i")
6750 (match_operand:HI 4 "vpr_register_operand" "Up")]
6754 "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6755 [(set_attr "type" "mve_move")
6756 (set_attr "length""8")])
6759 ;; [vshrq_m_n_s, vshrq_m_n_u])
6761 (define_insn "mve_vshrq_m_n_<supf><mode>"
6763 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6764 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6765 (match_operand:MVE_2 2 "s_register_operand" "w")
6766 (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")
6767 (match_operand:HI 4 "vpr_register_operand" "Up")]
6771 "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
6772 [(set_attr "type" "mve_move")
6773 (set_attr "length""8")])
6776 ;; [vsliq_m_n_u, vsliq_m_n_s])
6778 (define_insn "mve_vsliq_m_n_<supf><mode>"
6780 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6781 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6782 (match_operand:MVE_2 2 "s_register_operand" "w")
6783 (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")
6784 (match_operand:HI 4 "vpr_register_operand" "Up")]
6788 "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3"
6789 [(set_attr "type" "mve_move")
6790 (set_attr "length""8")])
6793 ;; [vsubq_m_n_s, vsubq_m_n_u])
6795 (define_insn "mve_vsubq_m_n_<supf><mode>"
6797 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6798 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6799 (match_operand:MVE_2 2 "s_register_operand" "w")
6800 (match_operand:<V_elem> 3 "s_register_operand" "r")
6801 (match_operand:HI 4 "vpr_register_operand" "Up")]
6805 "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3"
6806 [(set_attr "type" "mve_move")
6807 (set_attr "length""8")])
6810 ;; [vhcaddq_rot270_m_s])
6812 (define_insn "mve_vhcaddq_rot270_m_s<mode>"
6814 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6815 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6816 (match_operand:MVE_2 2 "s_register_operand" "w")
6817 (match_operand:MVE_2 3 "s_register_operand" "w")
6818 (match_operand:HI 4 "vpr_register_operand" "Up")]
6819 VHCADDQ_ROT270_M_S))
6822 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270"
6823 [(set_attr "type" "mve_move")
6824 (set_attr "length""8")])
6827 ;; [vhcaddq_rot90_m_s])
6829 (define_insn "mve_vhcaddq_rot90_m_s<mode>"
6831 (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>")
6832 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6833 (match_operand:MVE_2 2 "s_register_operand" "w")
6834 (match_operand:MVE_2 3 "s_register_operand" "w")
6835 (match_operand:HI 4 "vpr_register_operand" "Up")]
6839 "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90"
6840 [(set_attr "type" "mve_move")
6841 (set_attr "length""8")])
6844 ;; [vmladavaxq_p_s])
6846 (define_insn "mve_vmladavaxq_p_s<mode>"
6848 (set (match_operand:SI 0 "s_register_operand" "=Te")
6849 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6850 (match_operand:MVE_2 2 "s_register_operand" "w")
6851 (match_operand:MVE_2 3 "s_register_operand" "w")
6852 (match_operand:HI 4 "vpr_register_operand" "Up")]
6856 "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6857 [(set_attr "type" "mve_move")
6858 (set_attr "length""8")])
6863 (define_insn "mve_vmlsdavaq_p_s<mode>"
6865 (set (match_operand:SI 0 "s_register_operand" "=Te")
6866 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6867 (match_operand:MVE_2 2 "s_register_operand" "w")
6868 (match_operand:MVE_2 3 "s_register_operand" "w")
6869 (match_operand:HI 4 "vpr_register_operand" "Up")]
6873 "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3"
6874 [(set_attr "type" "mve_move")
6875 (set_attr "length""8")])
6878 ;; [vmlsdavaxq_p_s])
6880 (define_insn "mve_vmlsdavaxq_p_s<mode>"
6882 (set (match_operand:SI 0 "s_register_operand" "=Te")
6883 (unspec:SI [(match_operand:SI 1 "s_register_operand" "0")
6884 (match_operand:MVE_2 2 "s_register_operand" "w")
6885 (match_operand:MVE_2 3 "s_register_operand" "w")
6886 (match_operand:HI 4 "vpr_register_operand" "Up")]
6890 "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3"
6891 [(set_attr "type" "mve_move")
6892 (set_attr "length""8")])
6897 (define_insn "mve_vqdmladhq_m_s<mode>"
6899 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6900 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6901 (match_operand:MVE_2 2 "s_register_operand" "w")
6902 (match_operand:MVE_2 3 "s_register_operand" "w")
6903 (match_operand:HI 4 "vpr_register_operand" "Up")]
6907 "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6908 [(set_attr "type" "mve_move")
6909 (set_attr "length""8")])
6912 ;; [vqdmladhxq_m_s])
6914 (define_insn "mve_vqdmladhxq_m_s<mode>"
6916 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6917 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6918 (match_operand:MVE_2 2 "s_register_operand" "w")
6919 (match_operand:MVE_2 3 "s_register_operand" "w")
6920 (match_operand:HI 4 "vpr_register_operand" "Up")]
6924 "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6925 [(set_attr "type" "mve_move")
6926 (set_attr "length""8")])
6931 (define_insn "mve_vqdmlsdhq_m_s<mode>"
6933 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6934 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6935 (match_operand:MVE_2 2 "s_register_operand" "w")
6936 (match_operand:MVE_2 3 "s_register_operand" "w")
6937 (match_operand:HI 4 "vpr_register_operand" "Up")]
6941 "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6942 [(set_attr "type" "mve_move")
6943 (set_attr "length""8")])
6946 ;; [vqdmlsdhxq_m_s])
6948 (define_insn "mve_vqdmlsdhxq_m_s<mode>"
6950 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6951 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6952 (match_operand:MVE_2 2 "s_register_operand" "w")
6953 (match_operand:MVE_2 3 "s_register_operand" "w")
6954 (match_operand:HI 4 "vpr_register_operand" "Up")]
6958 "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
6959 [(set_attr "type" "mve_move")
6960 (set_attr "length""8")])
6963 ;; [vqdmulhq_m_n_s])
6965 (define_insn "mve_vqdmulhq_m_n_s<mode>"
6967 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6968 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6969 (match_operand:MVE_2 2 "s_register_operand" "w")
6970 (match_operand:<V_elem> 3 "s_register_operand" "r")
6971 (match_operand:HI 4 "vpr_register_operand" "Up")]
6975 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
6976 [(set_attr "type" "mve_move")
6977 (set_attr "length""8")])
6982 (define_insn "mve_vqdmulhq_m_s<mode>"
6984 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
6985 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
6986 (match_operand:MVE_2 2 "s_register_operand" "w")
6987 (match_operand:MVE_2 3 "s_register_operand" "w")
6988 (match_operand:HI 4 "vpr_register_operand" "Up")]
6992 "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
6993 [(set_attr "type" "mve_move")
6994 (set_attr "length""8")])
6997 ;; [vqrdmladhq_m_s])
6999 (define_insn "mve_vqrdmladhq_m_s<mode>"
7001 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
7002 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
7003 (match_operand:MVE_2 2 "s_register_operand" "w")
7004 (match_operand:MVE_2 3 "s_register_operand" "w")
7005 (match_operand:HI 4 "vpr_register_operand" "Up")]
7009 "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3"
7010 [(set_attr "type" "mve_move")
7011 (set_attr "length""8")])
7014 ;; [vqrdmladhxq_m_s])
7016 (define_insn "mve_vqrdmladhxq_m_s<mode>"
7018 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
7019 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
7020 (match_operand:MVE_2 2 "s_register_operand" "w")
7021 (match_operand:MVE_2 3 "s_register_operand" "w")
7022 (match_operand:HI 4 "vpr_register_operand" "Up")]
7026 "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
7027 [(set_attr "type" "mve_move")
7028 (set_attr "length""8")])
7031 ;; [vqrdmlsdhq_m_s])
7033 (define_insn "mve_vqrdmlsdhq_m_s<mode>"
7035 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
7036 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
7037 (match_operand:MVE_2 2 "s_register_operand" "w")
7038 (match_operand:MVE_2 3 "s_register_operand" "w")
7039 (match_operand:HI 4 "vpr_register_operand" "Up")]
7043 "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3"
7044 [(set_attr "type" "mve_move")
7045 (set_attr "length""8")])
7048 ;; [vqrdmlsdhxq_m_s])
7050 (define_insn "mve_vqrdmlsdhxq_m_s<mode>"
7052 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
7053 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
7054 (match_operand:MVE_2 2 "s_register_operand" "w")
7055 (match_operand:MVE_2 3 "s_register_operand" "w")
7056 (match_operand:HI 4 "vpr_register_operand" "Up")]
7060 "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3"
7061 [(set_attr "type" "mve_move")
7062 (set_attr "length""8")])
7065 ;; [vqrdmulhq_m_n_s])
7067 (define_insn "mve_vqrdmulhq_m_n_s<mode>"
7069 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
7070 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
7071 (match_operand:MVE_2 2 "s_register_operand" "w")
7072 (match_operand:<V_elem> 3 "s_register_operand" "r")
7073 (match_operand:HI 4 "vpr_register_operand" "Up")]
7077 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3"
7078 [(set_attr "type" "mve_move")
7079 (set_attr "length""8")])
7084 (define_insn "mve_vqrdmulhq_m_s<mode>"
7086 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
7087 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
7088 (match_operand:MVE_2 2 "s_register_operand" "w")
7089 (match_operand:MVE_2 3 "s_register_operand" "w")
7090 (match_operand:HI 4 "vpr_register_operand" "Up")]
7094 "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3"
7095 [(set_attr "type" "mve_move")
7096 (set_attr "length""8")])
7099 ;; [vmlaldavaq_p_u, vmlaldavaq_p_s])
7101 (define_insn "mve_vmlaldavaq_p_<supf><mode>"
7103 (set (match_operand:DI 0 "s_register_operand" "=r")
7104 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7105 (match_operand:MVE_5 2 "s_register_operand" "w")
7106 (match_operand:MVE_5 3 "s_register_operand" "w")
7107 (match_operand:HI 4 "vpr_register_operand" "Up")]
7111 "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
7112 [(set_attr "type" "mve_move")
7113 (set_attr "length""8")])
7116 ;; [vmlaldavaxq_p_u, vmlaldavaxq_p_s])
7118 (define_insn "mve_vmlaldavaxq_p_<supf><mode>"
7120 (set (match_operand:DI 0 "s_register_operand" "=r")
7121 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7122 (match_operand:MVE_5 2 "s_register_operand" "w")
7123 (match_operand:MVE_5 3 "s_register_operand" "w")
7124 (match_operand:HI 4 "vpr_register_operand" "Up")]
7128 "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3"
7129 [(set_attr "type" "mve_move")
7130 (set_attr "length""8")])
7133 ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s])
7135 (define_insn "mve_vqrshrnbq_m_n_<supf><mode>"
7137 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7138 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7139 (match_operand:MVE_5 2 "s_register_operand" "w")
7140 (match_operand:SI 3 "mve_imm_8" "Rb")
7141 (match_operand:HI 4 "vpr_register_operand" "Up")]
7145 "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3"
7146 [(set_attr "type" "mve_move")
7147 (set_attr "length""8")])
7150 ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u])
7152 (define_insn "mve_vqrshrntq_m_n_<supf><mode>"
7154 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7155 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7156 (match_operand:MVE_5 2 "s_register_operand" "w")
7157 (match_operand:SI 3 "mve_imm_8" "Rb")
7158 (match_operand:HI 4 "vpr_register_operand" "Up")]
7162 "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3"
7163 [(set_attr "type" "mve_move")
7164 (set_attr "length""8")])
7167 ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s])
7169 (define_insn "mve_vqshrnbq_m_n_<supf><mode>"
7171 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7172 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7173 (match_operand:MVE_5 2 "s_register_operand" "w")
7174 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
7175 (match_operand:HI 4 "vpr_register_operand" "Up")]
7179 "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
7180 [(set_attr "type" "mve_move")
7181 (set_attr "length""8")])
7184 ;; [vqshrntq_m_n_s, vqshrntq_m_n_u])
7186 (define_insn "mve_vqshrntq_m_n_<supf><mode>"
7188 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7189 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7190 (match_operand:MVE_5 2 "s_register_operand" "w")
7191 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
7192 (match_operand:HI 4 "vpr_register_operand" "Up")]
7196 "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
7197 [(set_attr "type" "mve_move")
7198 (set_attr "length""8")])
7201 ;; [vrmlaldavhaq_p_s])
7203 (define_insn "mve_vrmlaldavhaq_p_sv4si"
7205 (set (match_operand:DI 0 "s_register_operand" "=r")
7206 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7207 (match_operand:V4SI 2 "s_register_operand" "w")
7208 (match_operand:V4SI 3 "s_register_operand" "w")
7209 (match_operand:HI 4 "vpr_register_operand" "Up")]
7213 "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3"
7214 [(set_attr "type" "mve_move")
7215 (set_attr "length""8")])
7218 ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s])
7220 (define_insn "mve_vrshrnbq_m_n_<supf><mode>"
7222 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7223 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7224 (match_operand:MVE_5 2 "s_register_operand" "w")
7225 (match_operand:SI 3 "mve_imm_8" "Rb")
7226 (match_operand:HI 4 "vpr_register_operand" "Up")]
7230 "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
7231 [(set_attr "type" "mve_move")
7232 (set_attr "length""8")])
7235 ;; [vrshrntq_m_n_u, vrshrntq_m_n_s])
7237 (define_insn "mve_vrshrntq_m_n_<supf><mode>"
7239 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7240 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7241 (match_operand:MVE_5 2 "s_register_operand" "w")
7242 (match_operand:SI 3 "mve_imm_8" "Rb")
7243 (match_operand:HI 4 "vpr_register_operand" "Up")]
7247 "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
7248 [(set_attr "type" "mve_move")
7249 (set_attr "length""8")])
7252 ;; [vshllbq_m_n_u, vshllbq_m_n_s])
7254 (define_insn "mve_vshllbq_m_n_<supf><mode>"
7256 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
7257 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7258 (match_operand:MVE_3 2 "s_register_operand" "w")
7259 (match_operand:SI 3 "immediate_operand" "i")
7260 (match_operand:HI 4 "vpr_register_operand" "Up")]
7264 "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
7265 [(set_attr "type" "mve_move")
7266 (set_attr "length""8")])
7269 ;; [vshlltq_m_n_u, vshlltq_m_n_s])
7271 (define_insn "mve_vshlltq_m_n_<supf><mode>"
7273 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
7274 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7275 (match_operand:MVE_3 2 "s_register_operand" "w")
7276 (match_operand:SI 3 "immediate_operand" "i")
7277 (match_operand:HI 4 "vpr_register_operand" "Up")]
7281 "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3"
7282 [(set_attr "type" "mve_move")
7283 (set_attr "length""8")])
7286 ;; [vshrnbq_m_n_s, vshrnbq_m_n_u])
7288 (define_insn "mve_vshrnbq_m_n_<supf><mode>"
7290 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7291 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7292 (match_operand:MVE_5 2 "s_register_operand" "w")
7293 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
7294 (match_operand:HI 4 "vpr_register_operand" "Up")]
7298 "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3"
7299 [(set_attr "type" "mve_move")
7300 (set_attr "length""8")])
7303 ;; [vshrntq_m_n_s, vshrntq_m_n_u])
7305 (define_insn "mve_vshrntq_m_n_<supf><mode>"
7307 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7308 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7309 (match_operand:MVE_5 2 "s_register_operand" "w")
7310 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
7311 (match_operand:HI 4 "vpr_register_operand" "Up")]
7315 "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3"
7316 [(set_attr "type" "mve_move")
7317 (set_attr "length""8")])
7320 ;; [vmlsldavaq_p_s])
7322 (define_insn "mve_vmlsldavaq_p_s<mode>"
7324 (set (match_operand:DI 0 "s_register_operand" "=r")
7325 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7326 (match_operand:MVE_5 2 "s_register_operand" "w")
7327 (match_operand:MVE_5 3 "s_register_operand" "w")
7328 (match_operand:HI 4 "vpr_register_operand" "Up")]
7332 "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
7333 [(set_attr "type" "mve_move")
7334 (set_attr "length""8")])
7337 ;; [vmlsldavaxq_p_s])
7339 (define_insn "mve_vmlsldavaxq_p_s<mode>"
7341 (set (match_operand:DI 0 "s_register_operand" "=r")
7342 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7343 (match_operand:MVE_5 2 "s_register_operand" "w")
7344 (match_operand:MVE_5 3 "s_register_operand" "w")
7345 (match_operand:HI 4 "vpr_register_operand" "Up")]
7349 "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3"
7350 [(set_attr "type" "mve_move")
7351 (set_attr "length""8")])
7354 ;; [vmullbq_poly_m_p])
7356 (define_insn "mve_vmullbq_poly_m_p<mode>"
7358 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
7359 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7360 (match_operand:MVE_3 2 "s_register_operand" "w")
7361 (match_operand:MVE_3 3 "s_register_operand" "w")
7362 (match_operand:HI 4 "vpr_register_operand" "Up")]
7366 "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3"
7367 [(set_attr "type" "mve_move")
7368 (set_attr "length""8")])
7371 ;; [vmulltq_poly_m_p])
7373 (define_insn "mve_vmulltq_poly_m_p<mode>"
7375 (set (match_operand:<V_double_width> 0 "s_register_operand" "=w")
7376 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7377 (match_operand:MVE_3 2 "s_register_operand" "w")
7378 (match_operand:MVE_3 3 "s_register_operand" "w")
7379 (match_operand:HI 4 "vpr_register_operand" "Up")]
7383 "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3"
7384 [(set_attr "type" "mve_move")
7385 (set_attr "length""8")])
7388 ;; [vqdmullbq_m_n_s])
7390 (define_insn "mve_vqdmullbq_m_n_s<mode>"
7392 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
7393 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7394 (match_operand:MVE_5 2 "s_register_operand" "w")
7395 (match_operand:<V_elem> 3 "s_register_operand" "r")
7396 (match_operand:HI 4 "vpr_register_operand" "Up")]
7400 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3"
7401 [(set_attr "type" "mve_move")
7402 (set_attr "length""8")])
7407 (define_insn "mve_vqdmullbq_m_s<mode>"
7409 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
7410 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7411 (match_operand:MVE_5 2 "s_register_operand" "w")
7412 (match_operand:MVE_5 3 "s_register_operand" "w")
7413 (match_operand:HI 4 "vpr_register_operand" "Up")]
7417 "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3"
7418 [(set_attr "type" "mve_move")
7419 (set_attr "length""8")])
7422 ;; [vqdmulltq_m_n_s])
7424 (define_insn "mve_vqdmulltq_m_n_s<mode>"
7426 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
7427 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7428 (match_operand:MVE_5 2 "s_register_operand" "w")
7429 (match_operand:<V_elem> 3 "s_register_operand" "r")
7430 (match_operand:HI 4 "vpr_register_operand" "Up")]
7434 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3"
7435 [(set_attr "type" "mve_move")
7436 (set_attr "length""8")])
7441 (define_insn "mve_vqdmulltq_m_s<mode>"
7443 (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>")
7444 (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0")
7445 (match_operand:MVE_5 2 "s_register_operand" "w")
7446 (match_operand:MVE_5 3 "s_register_operand" "w")
7447 (match_operand:HI 4 "vpr_register_operand" "Up")]
7451 "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3"
7452 [(set_attr "type" "mve_move")
7453 (set_attr "length""8")])
7456 ;; [vqrshrunbq_m_n_s])
7458 (define_insn "mve_vqrshrunbq_m_n_s<mode>"
7460 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7461 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7462 (match_operand:MVE_5 2 "s_register_operand" "w")
7463 (match_operand:SI 3 "mve_imm_8" "Rb")
7464 (match_operand:HI 4 "vpr_register_operand" "Up")]
7468 "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
7469 [(set_attr "type" "mve_move")
7470 (set_attr "length""8")])
7473 ;; [vqrshruntq_m_n_s])
7475 (define_insn "mve_vqrshruntq_m_n_s<mode>"
7477 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7478 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7479 (match_operand:MVE_5 2 "s_register_operand" "w")
7480 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
7481 (match_operand:HI 4 "vpr_register_operand" "Up")]
7485 "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
7486 [(set_attr "type" "mve_move")
7487 (set_attr "length""8")])
7490 ;; [vqshrunbq_m_n_s])
7492 (define_insn "mve_vqshrunbq_m_n_s<mode>"
7494 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7495 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7496 (match_operand:MVE_5 2 "s_register_operand" "w")
7497 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
7498 (match_operand:HI 4 "vpr_register_operand" "Up")]
7502 "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3"
7503 [(set_attr "type" "mve_move")
7504 (set_attr "length""8")])
7507 ;; [vqshruntq_m_n_s])
7509 (define_insn "mve_vqshruntq_m_n_s<mode>"
7511 (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w")
7512 (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0")
7513 (match_operand:MVE_5 2 "s_register_operand" "w")
7514 (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")
7515 (match_operand:HI 4 "vpr_register_operand" "Up")]
7519 "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3"
7520 [(set_attr "type" "mve_move")
7521 (set_attr "length""8")])
7524 ;; [vrmlaldavhaq_p_u])
7526 (define_insn "mve_vrmlaldavhaq_p_uv4si"
7528 (set (match_operand:DI 0 "s_register_operand" "=r")
7529 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7530 (match_operand:V4SI 2 "s_register_operand" "w")
7531 (match_operand:V4SI 3 "s_register_operand" "w")
7532 (match_operand:HI 4 "vpr_register_operand" "Up")]
7536 "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3"
7537 [(set_attr "type" "mve_move")
7538 (set_attr "length""8")])
7541 ;; [vrmlaldavhaxq_p_s])
7543 (define_insn "mve_vrmlaldavhaxq_p_sv4si"
7545 (set (match_operand:DI 0 "s_register_operand" "=r")
7546 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7547 (match_operand:V4SI 2 "s_register_operand" "w")
7548 (match_operand:V4SI 3 "s_register_operand" "w")
7549 (match_operand:HI 4 "vpr_register_operand" "Up")]
7553 "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3"
7554 [(set_attr "type" "mve_move")
7555 (set_attr "length""8")])
7558 ;; [vrmlsldavhaq_p_s])
7560 (define_insn "mve_vrmlsldavhaq_p_sv4si"
7562 (set (match_operand:DI 0 "s_register_operand" "=r")
7563 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7564 (match_operand:V4SI 2 "s_register_operand" "w")
7565 (match_operand:V4SI 3 "s_register_operand" "w")
7566 (match_operand:HI 4 "vpr_register_operand" "Up")]
7570 "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3"
7571 [(set_attr "type" "mve_move")
7572 (set_attr "length""8")])
7575 ;; [vrmlsldavhaxq_p_s])
7577 (define_insn "mve_vrmlsldavhaxq_p_sv4si"
7579 (set (match_operand:DI 0 "s_register_operand" "=r")
7580 (unspec:DI [(match_operand:DI 1 "s_register_operand" "0")
7581 (match_operand:V4SI 2 "s_register_operand" "w")
7582 (match_operand:V4SI 3 "s_register_operand" "w")
7583 (match_operand:HI 4 "vpr_register_operand" "Up")]
7587 "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3"
7588 [(set_attr "type" "mve_move")
7589 (set_attr "length""8")])
7593 (define_insn "mve_vabdq_m_f<mode>"
7595 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7596 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7597 (match_operand:MVE_0 2 "s_register_operand" "w")
7598 (match_operand:MVE_0 3 "s_register_operand" "w")
7599 (match_operand:HI 4 "vpr_register_operand" "Up")]
7602 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7603 "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3"
7604 [(set_attr "type" "mve_move")
7605 (set_attr "length""8")])
7610 (define_insn "mve_vaddq_m_f<mode>"
7612 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7613 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7614 (match_operand:MVE_0 2 "s_register_operand" "w")
7615 (match_operand:MVE_0 3 "s_register_operand" "w")
7616 (match_operand:HI 4 "vpr_register_operand" "Up")]
7619 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7620 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3"
7621 [(set_attr "type" "mve_move")
7622 (set_attr "length""8")])
7627 (define_insn "mve_vaddq_m_n_f<mode>"
7629 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7630 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7631 (match_operand:MVE_0 2 "s_register_operand" "w")
7632 (match_operand:<V_elem> 3 "s_register_operand" "r")
7633 (match_operand:HI 4 "vpr_register_operand" "Up")]
7636 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7637 "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3"
7638 [(set_attr "type" "mve_move")
7639 (set_attr "length""8")])
7644 (define_insn "mve_vandq_m_f<mode>"
7646 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7647 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7648 (match_operand:MVE_0 2 "s_register_operand" "w")
7649 (match_operand:MVE_0 3 "s_register_operand" "w")
7650 (match_operand:HI 4 "vpr_register_operand" "Up")]
7653 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7654 "vpst\;vandt %q0, %q2, %q3"
7655 [(set_attr "type" "mve_move")
7656 (set_attr "length""8")])
7661 (define_insn "mve_vbicq_m_f<mode>"
7663 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7664 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7665 (match_operand:MVE_0 2 "s_register_operand" "w")
7666 (match_operand:MVE_0 3 "s_register_operand" "w")
7667 (match_operand:HI 4 "vpr_register_operand" "Up")]
7670 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7671 "vpst\;vbict %q0, %q2, %q3"
7672 [(set_attr "type" "mve_move")
7673 (set_attr "length""8")])
7678 (define_insn "mve_vbrsrq_m_n_f<mode>"
7680 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7681 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7682 (match_operand:MVE_0 2 "s_register_operand" "w")
7683 (match_operand:SI 3 "s_register_operand" "r")
7684 (match_operand:HI 4 "vpr_register_operand" "Up")]
7687 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7688 "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3"
7689 [(set_attr "type" "mve_move")
7690 (set_attr "length""8")])
7693 ;; [vcaddq_rot270_m_f])
7695 (define_insn "mve_vcaddq_rot270_m_f<mode>"
7697 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7698 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7699 (match_operand:MVE_0 2 "s_register_operand" "w")
7700 (match_operand:MVE_0 3 "s_register_operand" "w")
7701 (match_operand:HI 4 "vpr_register_operand" "Up")]
7704 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7705 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7706 [(set_attr "type" "mve_move")
7707 (set_attr "length""8")])
7710 ;; [vcaddq_rot90_m_f])
7712 (define_insn "mve_vcaddq_rot90_m_f<mode>"
7714 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7715 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7716 (match_operand:MVE_0 2 "s_register_operand" "w")
7717 (match_operand:MVE_0 3 "s_register_operand" "w")
7718 (match_operand:HI 4 "vpr_register_operand" "Up")]
7721 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7722 "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7723 [(set_attr "type" "mve_move")
7724 (set_attr "length""8")])
7729 (define_insn "mve_vcmlaq_m_f<mode>"
7731 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7732 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7733 (match_operand:MVE_0 2 "s_register_operand" "w")
7734 (match_operand:MVE_0 3 "s_register_operand" "w")
7735 (match_operand:HI 4 "vpr_register_operand" "Up")]
7738 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7739 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7740 [(set_attr "type" "mve_move")
7741 (set_attr "length""8")])
7744 ;; [vcmlaq_rot180_m_f])
7746 (define_insn "mve_vcmlaq_rot180_m_f<mode>"
7748 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7749 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7750 (match_operand:MVE_0 2 "s_register_operand" "w")
7751 (match_operand:MVE_0 3 "s_register_operand" "w")
7752 (match_operand:HI 4 "vpr_register_operand" "Up")]
7755 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7756 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7757 [(set_attr "type" "mve_move")
7758 (set_attr "length""8")])
7761 ;; [vcmlaq_rot270_m_f])
7763 (define_insn "mve_vcmlaq_rot270_m_f<mode>"
7765 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7766 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7767 (match_operand:MVE_0 2 "s_register_operand" "w")
7768 (match_operand:MVE_0 3 "s_register_operand" "w")
7769 (match_operand:HI 4 "vpr_register_operand" "Up")]
7772 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7773 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7774 [(set_attr "type" "mve_move")
7775 (set_attr "length""8")])
7778 ;; [vcmlaq_rot90_m_f])
7780 (define_insn "mve_vcmlaq_rot90_m_f<mode>"
7782 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7783 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7784 (match_operand:MVE_0 2 "s_register_operand" "w")
7785 (match_operand:MVE_0 3 "s_register_operand" "w")
7786 (match_operand:HI 4 "vpr_register_operand" "Up")]
7789 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7790 "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7791 [(set_attr "type" "mve_move")
7792 (set_attr "length""8")])
7797 (define_insn "mve_vcmulq_m_f<mode>"
7799 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7800 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7801 (match_operand:MVE_0 2 "s_register_operand" "w")
7802 (match_operand:MVE_0 3 "s_register_operand" "w")
7803 (match_operand:HI 4 "vpr_register_operand" "Up")]
7806 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7807 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0"
7808 [(set_attr "type" "mve_move")
7809 (set_attr "length""8")])
7812 ;; [vcmulq_rot180_m_f])
7814 (define_insn "mve_vcmulq_rot180_m_f<mode>"
7816 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7817 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7818 (match_operand:MVE_0 2 "s_register_operand" "w")
7819 (match_operand:MVE_0 3 "s_register_operand" "w")
7820 (match_operand:HI 4 "vpr_register_operand" "Up")]
7823 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7824 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180"
7825 [(set_attr "type" "mve_move")
7826 (set_attr "length""8")])
7829 ;; [vcmulq_rot270_m_f])
7831 (define_insn "mve_vcmulq_rot270_m_f<mode>"
7833 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7834 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7835 (match_operand:MVE_0 2 "s_register_operand" "w")
7836 (match_operand:MVE_0 3 "s_register_operand" "w")
7837 (match_operand:HI 4 "vpr_register_operand" "Up")]
7840 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7841 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270"
7842 [(set_attr "type" "mve_move")
7843 (set_attr "length""8")])
7846 ;; [vcmulq_rot90_m_f])
7848 (define_insn "mve_vcmulq_rot90_m_f<mode>"
7850 (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>")
7851 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7852 (match_operand:MVE_0 2 "s_register_operand" "w")
7853 (match_operand:MVE_0 3 "s_register_operand" "w")
7854 (match_operand:HI 4 "vpr_register_operand" "Up")]
7857 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7858 "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90"
7859 [(set_attr "type" "mve_move")
7860 (set_attr "length""8")])
7865 (define_insn "mve_veorq_m_f<mode>"
7867 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7868 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7869 (match_operand:MVE_0 2 "s_register_operand" "w")
7870 (match_operand:MVE_0 3 "s_register_operand" "w")
7871 (match_operand:HI 4 "vpr_register_operand" "Up")]
7874 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7875 "vpst\;veort %q0, %q2, %q3"
7876 [(set_attr "type" "mve_move")
7877 (set_attr "length""8")])
7882 (define_insn "mve_vfmaq_m_f<mode>"
7884 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7885 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7886 (match_operand:MVE_0 2 "s_register_operand" "w")
7887 (match_operand:MVE_0 3 "s_register_operand" "w")
7888 (match_operand:HI 4 "vpr_register_operand" "Up")]
7891 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7892 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3"
7893 [(set_attr "type" "mve_move")
7894 (set_attr "length""8")])
7899 (define_insn "mve_vfmaq_m_n_f<mode>"
7901 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7902 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7903 (match_operand:MVE_0 2 "s_register_operand" "w")
7904 (match_operand:<V_elem> 3 "s_register_operand" "r")
7905 (match_operand:HI 4 "vpr_register_operand" "Up")]
7908 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7909 "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3"
7910 [(set_attr "type" "mve_move")
7911 (set_attr "length""8")])
7916 (define_insn "mve_vfmasq_m_n_f<mode>"
7918 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7919 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7920 (match_operand:MVE_0 2 "s_register_operand" "w")
7921 (match_operand:<V_elem> 3 "s_register_operand" "r")
7922 (match_operand:HI 4 "vpr_register_operand" "Up")]
7925 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7926 "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3"
7927 [(set_attr "type" "mve_move")
7928 (set_attr "length""8")])
7933 (define_insn "mve_vfmsq_m_f<mode>"
7935 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7936 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7937 (match_operand:MVE_0 2 "s_register_operand" "w")
7938 (match_operand:MVE_0 3 "s_register_operand" "w")
7939 (match_operand:HI 4 "vpr_register_operand" "Up")]
7942 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7943 "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3"
7944 [(set_attr "type" "mve_move")
7945 (set_attr "length""8")])
7950 (define_insn "mve_vmaxnmq_m_f<mode>"
7952 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7953 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7954 (match_operand:MVE_0 2 "s_register_operand" "w")
7955 (match_operand:MVE_0 3 "s_register_operand" "w")
7956 (match_operand:HI 4 "vpr_register_operand" "Up")]
7959 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7960 "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7961 [(set_attr "type" "mve_move")
7962 (set_attr "length""8")])
7967 (define_insn "mve_vminnmq_m_f<mode>"
7969 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7970 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7971 (match_operand:MVE_0 2 "s_register_operand" "w")
7972 (match_operand:MVE_0 3 "s_register_operand" "w")
7973 (match_operand:HI 4 "vpr_register_operand" "Up")]
7976 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7977 "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3"
7978 [(set_attr "type" "mve_move")
7979 (set_attr "length""8")])
7984 (define_insn "mve_vmulq_m_f<mode>"
7986 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
7987 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
7988 (match_operand:MVE_0 2 "s_register_operand" "w")
7989 (match_operand:MVE_0 3 "s_register_operand" "w")
7990 (match_operand:HI 4 "vpr_register_operand" "Up")]
7993 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
7994 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3"
7995 [(set_attr "type" "mve_move")
7996 (set_attr "length""8")])
8001 (define_insn "mve_vmulq_m_n_f<mode>"
8003 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
8004 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
8005 (match_operand:MVE_0 2 "s_register_operand" "w")
8006 (match_operand:<V_elem> 3 "s_register_operand" "r")
8007 (match_operand:HI 4 "vpr_register_operand" "Up")]
8010 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8011 "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3"
8012 [(set_attr "type" "mve_move")
8013 (set_attr "length""8")])
8018 (define_insn "mve_vornq_m_f<mode>"
8020 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
8021 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
8022 (match_operand:MVE_0 2 "s_register_operand" "w")
8023 (match_operand:MVE_0 3 "s_register_operand" "w")
8024 (match_operand:HI 4 "vpr_register_operand" "Up")]
8027 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8028 "vpst\;vornt %q0, %q2, %q3"
8029 [(set_attr "type" "mve_move")
8030 (set_attr "length""8")])
8035 (define_insn "mve_vorrq_m_f<mode>"
8037 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
8038 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
8039 (match_operand:MVE_0 2 "s_register_operand" "w")
8040 (match_operand:MVE_0 3 "s_register_operand" "w")
8041 (match_operand:HI 4 "vpr_register_operand" "Up")]
8044 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8045 "vpst\;vorrt %q0, %q2, %q3"
8046 [(set_attr "type" "mve_move")
8047 (set_attr "length""8")])
8052 (define_insn "mve_vsubq_m_f<mode>"
8054 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
8055 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
8056 (match_operand:MVE_0 2 "s_register_operand" "w")
8057 (match_operand:MVE_0 3 "s_register_operand" "w")
8058 (match_operand:HI 4 "vpr_register_operand" "Up")]
8061 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8062 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3"
8063 [(set_attr "type" "mve_move")
8064 (set_attr "length""8")])
8069 (define_insn "mve_vsubq_m_n_f<mode>"
8071 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
8072 (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0")
8073 (match_operand:MVE_0 2 "s_register_operand" "w")
8074 (match_operand:<V_elem> 3 "s_register_operand" "r")
8075 (match_operand:HI 4 "vpr_register_operand" "Up")]
8078 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8079 "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3"
8080 [(set_attr "type" "mve_move")
8081 (set_attr "length""8")])
8084 ;; [vstrbq_s vstrbq_u]
8086 (define_insn "mve_vstrbq_<supf><mode>"
8087 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
8088 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")]
8094 int regno = REGNO (operands[1]);
8095 ops[1] = gen_rtx_REG (TImode, regno);
8096 ops[0] = operands[0];
8097 output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops);
8100 [(set_attr "length" "4")])
8103 ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u]
8105 (define_expand "mve_vstrbq_scatter_offset_<supf><mode>"
8106 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
8107 (match_operand:MVE_2 1 "s_register_operand")
8108 (match_operand:MVE_2 2 "s_register_operand")
8109 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
8112 rtx ind = XEXP (operands[0], 0);
8113 gcc_assert (REG_P (ind));
8114 emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1],
8119 (define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn"
8120 [(set (mem:BLK (scratch))
8122 [(match_operand:SI 0 "register_operand" "r")
8123 (match_operand:MVE_2 1 "s_register_operand" "w")
8124 (match_operand:MVE_2 2 "s_register_operand" "w")]
8127 "vstrb.<V_sz_elem>\t%q2, [%0, %q1]"
8128 [(set_attr "length" "4")])
8131 ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u]
8133 (define_insn "mve_vstrwq_scatter_base_<supf>v4si"
8134 [(set (mem:BLK (scratch))
8136 [(match_operand:V4SI 0 "s_register_operand" "w")
8137 (match_operand:SI 1 "immediate_operand" "i")
8138 (match_operand:V4SI 2 "s_register_operand" "w")]
8144 ops[0] = operands[0];
8145 ops[1] = operands[1];
8146 ops[2] = operands[2];
8147 output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops);
8150 [(set_attr "length" "4")])
8153 ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u]
8155 (define_insn "mve_vldrbq_gather_offset_<supf><mode>"
8156 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
8157 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
8158 (match_operand:MVE_2 2 "s_register_operand" "w")]
8164 ops[0] = operands[0];
8165 ops[1] = operands[1];
8166 ops[2] = operands[2];
8167 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
8168 output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops);
8170 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
8173 [(set_attr "length" "4")])
8176 ;; [vldrbq_s vldrbq_u]
8178 (define_insn "mve_vldrbq_<supf><mode>"
8179 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
8180 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")]
8186 int regno = REGNO (operands[0]);
8187 ops[0] = gen_rtx_REG (TImode, regno);
8188 ops[1] = operands[1];
8189 if (<V_sz_elem> == 8)
8190 output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops);
8192 output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops);
8195 [(set_attr "length" "4")])
8198 ;; [vldrwq_gather_base_s vldrwq_gather_base_u]
8200 (define_insn "mve_vldrwq_gather_base_<supf>v4si"
8201 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8202 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8203 (match_operand:SI 2 "immediate_operand" "i")]
8209 ops[0] = operands[0];
8210 ops[1] = operands[1];
8211 ops[2] = operands[2];
8212 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
8215 [(set_attr "length" "4")])
8218 ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u]
8220 (define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>"
8221 [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory")
8222 (match_operand:MVE_2 1 "s_register_operand")
8223 (match_operand:MVE_2 2 "s_register_operand")
8224 (match_operand:HI 3 "vpr_register_operand" "Up")
8225 (unspec:V4SI [(const_int 0)] VSTRBSOQ)]
8228 rtx ind = XEXP (operands[0], 0);
8229 gcc_assert (REG_P (ind));
8231 gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
8237 (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn"
8238 [(set (mem:BLK (scratch))
8240 [(match_operand:SI 0 "register_operand" "r")
8241 (match_operand:MVE_2 1 "s_register_operand" "w")
8242 (match_operand:MVE_2 2 "s_register_operand" "w")
8243 (match_operand:HI 3 "vpr_register_operand" "Up")]
8246 "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]"
8247 [(set_attr "length" "8")])
8250 ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u]
8252 (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si"
8253 [(set (mem:BLK (scratch))
8255 [(match_operand:V4SI 0 "s_register_operand" "w")
8256 (match_operand:SI 1 "immediate_operand" "i")
8257 (match_operand:V4SI 2 "s_register_operand" "w")
8258 (match_operand:HI 3 "vpr_register_operand" "Up")]
8264 ops[0] = operands[0];
8265 ops[1] = operands[1];
8266 ops[2] = operands[2];
8267 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
8270 [(set_attr "length" "8")])
8273 ;; [vstrbq_p_s vstrbq_p_u]
8275 (define_insn "mve_vstrbq_p_<supf><mode>"
8276 [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux")
8277 (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")
8278 (match_operand:HI 2 "vpr_register_operand" "Up")]
8284 int regno = REGNO (operands[1]);
8285 ops[1] = gen_rtx_REG (TImode, regno);
8286 ops[0] = operands[0];
8287 output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops);
8290 [(set_attr "length" "8")])
8293 ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u]
8295 (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>"
8296 [(set (match_operand:MVE_2 0 "s_register_operand" "=&w")
8297 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us")
8298 (match_operand:MVE_2 2 "s_register_operand" "w")
8299 (match_operand:HI 3 "vpr_register_operand" "Up")]
8305 ops[0] = operands[0];
8306 ops[1] = operands[1];
8307 ops[2] = operands[2];
8308 ops[3] = operands[3];
8309 if (!strcmp ("<supf>","s") && <V_sz_elem> == 8)
8310 output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops);
8312 output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
8315 [(set_attr "length" "8")])
8318 ;; [vldrbq_z_s vldrbq_z_u]
8320 (define_insn "mve_vldrbq_z_<supf><mode>"
8321 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
8322 (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")
8323 (match_operand:HI 2 "vpr_register_operand" "Up")]
8329 int regno = REGNO (operands[0]);
8330 ops[0] = gen_rtx_REG (TImode, regno);
8331 ops[1] = operands[1];
8332 if (<V_sz_elem> == 8)
8333 output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops);
8335 output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops);
8338 [(set_attr "length" "8")])
8341 ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u]
8343 (define_insn "mve_vldrwq_gather_base_z_<supf>v4si"
8344 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8345 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
8346 (match_operand:SI 2 "immediate_operand" "i")
8347 (match_operand:HI 3 "vpr_register_operand" "Up")]
8353 ops[0] = operands[0];
8354 ops[1] = operands[1];
8355 ops[2] = operands[2];
8356 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
8359 [(set_attr "length" "8")])
8364 (define_insn "mve_vldrhq_fv8hf"
8365 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
8366 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")]
8369 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8372 int regno = REGNO (operands[0]);
8373 ops[0] = gen_rtx_REG (TImode, regno);
8374 ops[1] = operands[1];
8375 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
8378 [(set_attr "length" "4")])
8381 ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u]
8383 (define_insn "mve_vldrhq_gather_offset_<supf><mode>"
8384 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
8385 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
8386 (match_operand:MVE_6 2 "s_register_operand" "w")]
8392 ops[0] = operands[0];
8393 ops[1] = operands[1];
8394 ops[2] = operands[2];
8395 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
8396 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops);
8398 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
8401 [(set_attr "length" "4")])
8404 ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u]
8406 (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>"
8407 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
8408 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
8409 (match_operand:MVE_6 2 "s_register_operand" "w")
8410 (match_operand:HI 3 "vpr_register_operand" "Up")
8416 ops[0] = operands[0];
8417 ops[1] = operands[1];
8418 ops[2] = operands[2];
8419 ops[3] = operands[3];
8420 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
8421 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops);
8423 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops);
8426 [(set_attr "length" "8")])
8429 ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u]
8431 (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>"
8432 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
8433 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
8434 (match_operand:MVE_6 2 "s_register_operand" "w")]
8440 ops[0] = operands[0];
8441 ops[1] = operands[1];
8442 ops[2] = operands[2];
8443 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
8444 output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
8446 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
8449 [(set_attr "length" "4")])
8452 ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u]
8454 (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>"
8455 [(set (match_operand:MVE_6 0 "s_register_operand" "=&w")
8456 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us")
8457 (match_operand:MVE_6 2 "s_register_operand" "w")
8458 (match_operand:HI 3 "vpr_register_operand" "Up")
8464 ops[0] = operands[0];
8465 ops[1] = operands[1];
8466 ops[2] = operands[2];
8467 ops[3] = operands[3];
8468 if (!strcmp ("<supf>","s") && <V_sz_elem> == 16)
8469 output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops);
8471 output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops);
8474 [(set_attr "length" "8")])
8477 ;; [vldrhq_s, vldrhq_u]
8479 (define_insn "mve_vldrhq_<supf><mode>"
8480 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
8481 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")]
8487 int regno = REGNO (operands[0]);
8488 ops[0] = gen_rtx_REG (TImode, regno);
8489 ops[1] = operands[1];
8490 if (<V_sz_elem> == 16)
8491 output_asm_insn ("vldrh.16\t%q0, %E1",ops);
8493 output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops);
8496 [(set_attr "length" "4")])
8501 (define_insn "mve_vldrhq_z_fv8hf"
8502 [(set (match_operand:V8HF 0 "s_register_operand" "=w")
8503 (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")
8504 (match_operand:HI 2 "vpr_register_operand" "Up")]
8507 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8510 int regno = REGNO (operands[0]);
8511 ops[0] = gen_rtx_REG (TImode, regno);
8512 ops[1] = operands[1];
8513 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
8516 [(set_attr "length" "8")])
8519 ;; [vldrhq_z_s vldrhq_z_u]
8521 (define_insn "mve_vldrhq_z_<supf><mode>"
8522 [(set (match_operand:MVE_6 0 "s_register_operand" "=w")
8523 (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")
8524 (match_operand:HI 2 "vpr_register_operand" "Up")]
8530 int regno = REGNO (operands[0]);
8531 ops[0] = gen_rtx_REG (TImode, regno);
8532 ops[1] = operands[1];
8533 if (<V_sz_elem> == 16)
8534 output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops);
8536 output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops);
8539 [(set_attr "length" "8")])
8544 (define_insn "mve_vldrwq_fv4sf"
8545 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
8546 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")]
8549 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8552 int regno = REGNO (operands[0]);
8553 ops[0] = gen_rtx_REG (TImode, regno);
8554 ops[1] = operands[1];
8555 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
8558 [(set_attr "length" "4")])
8561 ;; [vldrwq_s vldrwq_u]
8563 (define_insn "mve_vldrwq_<supf>v4si"
8564 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
8565 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")]
8571 int regno = REGNO (operands[0]);
8572 ops[0] = gen_rtx_REG (TImode, regno);
8573 ops[1] = operands[1];
8574 output_asm_insn ("vldrw.32\t%q0, %E1",ops);
8577 [(set_attr "length" "4")])
8582 (define_insn "mve_vldrwq_z_fv4sf"
8583 [(set (match_operand:V4SF 0 "s_register_operand" "=w")
8584 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Ux")
8585 (match_operand:HI 2 "vpr_register_operand" "Up")]
8588 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8591 int regno = REGNO (operands[0]);
8592 ops[0] = gen_rtx_REG (TImode, regno);
8593 ops[1] = operands[1];
8594 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
8597 [(set_attr "length" "8")])
8600 ;; [vldrwq_z_s vldrwq_z_u]
8602 (define_insn "mve_vldrwq_z_<supf>v4si"
8603 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
8604 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Ux")
8605 (match_operand:HI 2 "vpr_register_operand" "Up")]
8611 int regno = REGNO (operands[0]);
8612 ops[0] = gen_rtx_REG (TImode, regno);
8613 ops[1] = operands[1];
8614 output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops);
8617 [(set_attr "length" "8")])
8619 (define_expand "mve_vld1q_f<mode>"
8620 [(match_operand:MVE_0 0 "s_register_operand")
8621 (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F)
8623 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
8625 emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
8629 (define_expand "mve_vld1q_<supf><mode>"
8630 [(match_operand:MVE_2 0 "s_register_operand")
8631 (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q)
8635 emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
8640 ;; [vldrdq_gather_base_s vldrdq_gather_base_u]
8642 (define_insn "mve_vldrdq_gather_base_<supf>v2di"
8643 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8644 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8645 (match_operand:SI 2 "immediate_operand" "i")]
8651 ops[0] = operands[0];
8652 ops[1] = operands[1];
8653 ops[2] = operands[2];
8654 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops);
8657 [(set_attr "length" "4")])
8660 ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u]
8662 (define_insn "mve_vldrdq_gather_base_z_<supf>v2di"
8663 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8664 (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w")
8665 (match_operand:SI 2 "immediate_operand" "i")
8666 (match_operand:HI 3 "vpr_register_operand" "Up")]
8672 ops[0] = operands[0];
8673 ops[1] = operands[1];
8674 ops[2] = operands[2];
8675 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops);
8678 [(set_attr "length" "8")])
8681 ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u]
8683 (define_insn "mve_vldrdq_gather_offset_<supf>v2di"
8684 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8685 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8686 (match_operand:V2DI 2 "s_register_operand" "w")]
8692 ops[0] = operands[0];
8693 ops[1] = operands[1];
8694 ops[2] = operands[2];
8695 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops);
8698 [(set_attr "length" "4")])
8701 ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u]
8703 (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di"
8704 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8705 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8706 (match_operand:V2DI 2 "s_register_operand" "w")
8707 (match_operand:HI 3 "vpr_register_operand" "Up")]
8713 ops[0] = operands[0];
8714 ops[1] = operands[1];
8715 ops[2] = operands[2];
8716 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops);
8719 [(set_attr "length" "8")])
8722 ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u]
8724 (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di"
8725 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8726 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8727 (match_operand:V2DI 2 "s_register_operand" "w")]
8733 ops[0] = operands[0];
8734 ops[1] = operands[1];
8735 ops[2] = operands[2];
8736 output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8739 [(set_attr "length" "4")])
8742 ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u]
8744 (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di"
8745 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
8746 (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us")
8747 (match_operand:V2DI 2 "s_register_operand" "w")
8748 (match_operand:HI 3 "vpr_register_operand" "Up")]
8754 ops[0] = operands[0];
8755 ops[1] = operands[1];
8756 ops[2] = operands[2];
8757 output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops);
8760 [(set_attr "length" "8")])
8763 ;; [vldrhq_gather_offset_f]
8765 (define_insn "mve_vldrhq_gather_offset_fv8hf"
8766 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8767 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8768 (match_operand:V8HI 2 "s_register_operand" "w")]
8771 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8774 ops[0] = operands[0];
8775 ops[1] = operands[1];
8776 ops[2] = operands[2];
8777 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops);
8780 [(set_attr "length" "4")])
8783 ;; [vldrhq_gather_offset_z_f]
8785 (define_insn "mve_vldrhq_gather_offset_z_fv8hf"
8786 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8787 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8788 (match_operand:V8HI 2 "s_register_operand" "w")
8789 (match_operand:HI 3 "vpr_register_operand" "Up")]
8792 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8795 ops[0] = operands[0];
8796 ops[1] = operands[1];
8797 ops[2] = operands[2];
8798 ops[3] = operands[3];
8799 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops);
8802 [(set_attr "length" "8")])
8805 ;; [vldrhq_gather_shifted_offset_f]
8807 (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf"
8808 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8809 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8810 (match_operand:V8HI 2 "s_register_operand" "w")]
8813 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8816 ops[0] = operands[0];
8817 ops[1] = operands[1];
8818 ops[2] = operands[2];
8819 output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8822 [(set_attr "length" "4")])
8825 ;; [vldrhq_gather_shifted_offset_z_f]
8827 (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf"
8828 [(set (match_operand:V8HF 0 "s_register_operand" "=&w")
8829 (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us")
8830 (match_operand:V8HI 2 "s_register_operand" "w")
8831 (match_operand:HI 3 "vpr_register_operand" "Up")]
8834 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8837 ops[0] = operands[0];
8838 ops[1] = operands[1];
8839 ops[2] = operands[2];
8840 ops[3] = operands[3];
8841 output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops);
8844 [(set_attr "length" "8")])
8847 ;; [vldrwq_gather_base_f]
8849 (define_insn "mve_vldrwq_gather_base_fv4sf"
8850 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8851 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8852 (match_operand:SI 2 "immediate_operand" "i")]
8855 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8858 ops[0] = operands[0];
8859 ops[1] = operands[1];
8860 ops[2] = operands[2];
8861 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops);
8864 [(set_attr "length" "4")])
8867 ;; [vldrwq_gather_base_z_f]
8869 (define_insn "mve_vldrwq_gather_base_z_fv4sf"
8870 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8871 (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w")
8872 (match_operand:SI 2 "immediate_operand" "i")
8873 (match_operand:HI 3 "vpr_register_operand" "Up")]
8876 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8879 ops[0] = operands[0];
8880 ops[1] = operands[1];
8881 ops[2] = operands[2];
8882 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops);
8885 [(set_attr "length" "8")])
8888 ;; [vldrwq_gather_offset_f]
8890 (define_insn "mve_vldrwq_gather_offset_fv4sf"
8891 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8892 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8893 (match_operand:V4SI 2 "s_register_operand" "w")]
8896 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8899 ops[0] = operands[0];
8900 ops[1] = operands[1];
8901 ops[2] = operands[2];
8902 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8905 [(set_attr "length" "4")])
8908 ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u]
8910 (define_insn "mve_vldrwq_gather_offset_<supf>v4si"
8911 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8912 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8913 (match_operand:V4SI 2 "s_register_operand" "w")]
8919 ops[0] = operands[0];
8920 ops[1] = operands[1];
8921 ops[2] = operands[2];
8922 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops);
8925 [(set_attr "length" "4")])
8928 ;; [vldrwq_gather_offset_z_f]
8930 (define_insn "mve_vldrwq_gather_offset_z_fv4sf"
8931 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8932 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8933 (match_operand:V4SI 2 "s_register_operand" "w")
8934 (match_operand:HI 3 "vpr_register_operand" "Up")]
8937 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8940 ops[0] = operands[0];
8941 ops[1] = operands[1];
8942 ops[2] = operands[2];
8943 ops[3] = operands[3];
8944 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8947 [(set_attr "length" "8")])
8950 ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u]
8952 (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si"
8953 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8954 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8955 (match_operand:V4SI 2 "s_register_operand" "w")
8956 (match_operand:HI 3 "vpr_register_operand" "Up")]
8962 ops[0] = operands[0];
8963 ops[1] = operands[1];
8964 ops[2] = operands[2];
8965 ops[3] = operands[3];
8966 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops);
8969 [(set_attr "length" "8")])
8972 ;; [vldrwq_gather_shifted_offset_f]
8974 (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf"
8975 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
8976 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
8977 (match_operand:V4SI 2 "s_register_operand" "w")]
8980 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
8983 ops[0] = operands[0];
8984 ops[1] = operands[1];
8985 ops[2] = operands[2];
8986 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
8989 [(set_attr "length" "4")])
8992 ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u]
8994 (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si"
8995 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
8996 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
8997 (match_operand:V4SI 2 "s_register_operand" "w")]
9003 ops[0] = operands[0];
9004 ops[1] = operands[1];
9005 ops[2] = operands[2];
9006 output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
9009 [(set_attr "length" "4")])
9012 ;; [vldrwq_gather_shifted_offset_z_f]
9014 (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf"
9015 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
9016 (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us")
9017 (match_operand:V4SI 2 "s_register_operand" "w")
9018 (match_operand:HI 3 "vpr_register_operand" "Up")]
9021 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9024 ops[0] = operands[0];
9025 ops[1] = operands[1];
9026 ops[2] = operands[2];
9027 ops[3] = operands[3];
9028 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
9031 [(set_attr "length" "8")])
9034 ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u]
9036 (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si"
9037 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
9038 (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us")
9039 (match_operand:V4SI 2 "s_register_operand" "w")
9040 (match_operand:HI 3 "vpr_register_operand" "Up")]
9046 ops[0] = operands[0];
9047 ops[1] = operands[1];
9048 ops[2] = operands[2];
9049 ops[3] = operands[3];
9050 output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops);
9053 [(set_attr "length" "8")])
9058 (define_insn "mve_vstrhq_fv8hf"
9059 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
9060 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")]
9063 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9066 int regno = REGNO (operands[1]);
9067 ops[1] = gen_rtx_REG (TImode, regno);
9068 ops[0] = operands[0];
9069 output_asm_insn ("vstrh.16\t%q1, %E0",ops);
9072 [(set_attr "length" "4")])
9077 (define_insn "mve_vstrhq_p_fv8hf"
9078 [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux")
9079 (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")
9080 (match_operand:HI 2 "vpr_register_operand" "Up")]
9083 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9086 int regno = REGNO (operands[1]);
9087 ops[1] = gen_rtx_REG (TImode, regno);
9088 ops[0] = operands[0];
9089 output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops);
9092 [(set_attr "length" "8")])
9095 ;; [vstrhq_p_s vstrhq_p_u]
9097 (define_insn "mve_vstrhq_p_<supf><mode>"
9098 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
9099 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")
9100 (match_operand:HI 2 "vpr_register_operand" "Up")]
9106 int regno = REGNO (operands[1]);
9107 ops[1] = gen_rtx_REG (TImode, regno);
9108 ops[0] = operands[0];
9109 output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops);
9112 [(set_attr "length" "8")])
9115 ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u]
9117 (define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>"
9118 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
9119 (match_operand:MVE_6 1 "s_register_operand")
9120 (match_operand:MVE_6 2 "s_register_operand")
9121 (match_operand:HI 3 "vpr_register_operand")
9122 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
9125 rtx ind = XEXP (operands[0], 0);
9126 gcc_assert (REG_P (ind));
9128 gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1],
9134 (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn"
9135 [(set (mem:BLK (scratch))
9137 [(match_operand:SI 0 "register_operand" "r")
9138 (match_operand:MVE_6 1 "s_register_operand" "w")
9139 (match_operand:MVE_6 2 "s_register_operand" "w")
9140 (match_operand:HI 3 "vpr_register_operand" "Up")]
9143 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]"
9144 [(set_attr "length" "8")])
9147 ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u]
9149 (define_expand "mve_vstrhq_scatter_offset_<supf><mode>"
9150 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
9151 (match_operand:MVE_6 1 "s_register_operand")
9152 (match_operand:MVE_6 2 "s_register_operand")
9153 (unspec:V4SI [(const_int 0)] VSTRHSOQ)]
9156 rtx ind = XEXP (operands[0], 0);
9157 gcc_assert (REG_P (ind));
9158 emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1],
9163 (define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn"
9164 [(set (mem:BLK (scratch))
9166 [(match_operand:SI 0 "register_operand" "r")
9167 (match_operand:MVE_6 1 "s_register_operand" "w")
9168 (match_operand:MVE_6 2 "s_register_operand" "w")]
9171 "vstrh.<V_sz_elem>\t%q2, [%0, %q1]"
9172 [(set_attr "length" "4")])
9175 ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u]
9177 (define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>"
9178 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
9179 (match_operand:MVE_6 1 "s_register_operand")
9180 (match_operand:MVE_6 2 "s_register_operand")
9181 (match_operand:HI 3 "vpr_register_operand")
9182 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
9185 rtx ind = XEXP (operands[0], 0);
9186 gcc_assert (REG_P (ind));
9188 gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1],
9194 (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn"
9195 [(set (mem:BLK (scratch))
9197 [(match_operand:SI 0 "register_operand" "r")
9198 (match_operand:MVE_6 1 "s_register_operand" "w")
9199 (match_operand:MVE_6 2 "s_register_operand" "w")
9200 (match_operand:HI 3 "vpr_register_operand" "Up")]
9203 "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
9204 [(set_attr "length" "8")])
9207 ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u]
9209 (define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>"
9210 [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory")
9211 (match_operand:MVE_6 1 "s_register_operand")
9212 (match_operand:MVE_6 2 "s_register_operand")
9213 (unspec:V4SI [(const_int 0)] VSTRHSSOQ)]
9216 rtx ind = XEXP (operands[0], 0);
9217 gcc_assert (REG_P (ind));
9219 gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1],
9224 (define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn"
9225 [(set (mem:BLK (scratch))
9227 [(match_operand:SI 0 "register_operand" "r")
9228 (match_operand:MVE_6 1 "s_register_operand" "w")
9229 (match_operand:MVE_6 2 "s_register_operand" "w")]
9232 "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]"
9233 [(set_attr "length" "4")])
9236 ;; [vstrhq_s, vstrhq_u]
9238 (define_insn "mve_vstrhq_<supf><mode>"
9239 [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux")
9240 (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")]
9246 int regno = REGNO (operands[1]);
9247 ops[1] = gen_rtx_REG (TImode, regno);
9248 ops[0] = operands[0];
9249 output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops);
9252 [(set_attr "length" "4")])
9257 (define_insn "mve_vstrwq_fv4sf"
9258 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
9259 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")]
9262 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9265 int regno = REGNO (operands[1]);
9266 ops[1] = gen_rtx_REG (TImode, regno);
9267 ops[0] = operands[0];
9268 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
9271 [(set_attr "length" "4")])
9276 (define_insn "mve_vstrwq_p_fv4sf"
9277 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
9278 (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")
9279 (match_operand:HI 2 "vpr_register_operand" "Up")]
9282 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9285 int regno = REGNO (operands[1]);
9286 ops[1] = gen_rtx_REG (TImode, regno);
9287 ops[0] = operands[0];
9288 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
9291 [(set_attr "length" "8")])
9294 ;; [vstrwq_p_s vstrwq_p_u]
9296 (define_insn "mve_vstrwq_p_<supf>v4si"
9297 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
9298 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
9299 (match_operand:HI 2 "vpr_register_operand" "Up")]
9305 int regno = REGNO (operands[1]);
9306 ops[1] = gen_rtx_REG (TImode, regno);
9307 ops[0] = operands[0];
9308 output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops);
9311 [(set_attr "length" "8")])
9314 ;; [vstrwq_s vstrwq_u]
9316 (define_insn "mve_vstrwq_<supf>v4si"
9317 [(set (match_operand:V4SI 0 "memory_operand" "=Ux")
9318 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")]
9324 int regno = REGNO (operands[1]);
9325 ops[1] = gen_rtx_REG (TImode, regno);
9326 ops[0] = operands[0];
9327 output_asm_insn ("vstrw.32\t%q1, %E0",ops);
9330 [(set_attr "length" "4")])
9332 (define_expand "mve_vst1q_f<mode>"
9333 [(match_operand:<MVE_CNVT> 0 "memory_operand")
9334 (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F)
9336 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
9338 emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1]));
9342 (define_expand "mve_vst1q_<supf><mode>"
9343 [(match_operand:MVE_2 0 "memory_operand")
9344 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q)
9348 emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1]));
9353 ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u]
9355 (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di"
9356 [(set (mem:BLK (scratch))
9358 [(match_operand:V2DI 0 "s_register_operand" "w")
9359 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
9360 (match_operand:V2DI 2 "s_register_operand" "w")
9361 (match_operand:HI 3 "vpr_register_operand" "Up")]
9367 ops[0] = operands[0];
9368 ops[1] = operands[1];
9369 ops[2] = operands[2];
9370 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops);
9373 [(set_attr "length" "8")])
9376 ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u]
9378 (define_insn "mve_vstrdq_scatter_base_<supf>v2di"
9379 [(set (mem:BLK (scratch))
9381 [(match_operand:V2DI 0 "s_register_operand" "=w")
9382 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
9383 (match_operand:V2DI 2 "s_register_operand" "w")]
9389 ops[0] = operands[0];
9390 ops[1] = operands[1];
9391 ops[2] = operands[2];
9392 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops);
9395 [(set_attr "length" "4")])
9398 ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u]
9400 (define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di"
9401 [(match_operand:V2DI 0 "mve_scatter_memory")
9402 (match_operand:V2DI 1 "s_register_operand")
9403 (match_operand:V2DI 2 "s_register_operand")
9404 (match_operand:HI 3 "vpr_register_operand")
9405 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
9408 rtx ind = XEXP (operands[0], 0);
9409 gcc_assert (REG_P (ind));
9410 emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1],
9416 (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn"
9417 [(set (mem:BLK (scratch))
9419 [(match_operand:SI 0 "register_operand" "r")
9420 (match_operand:V2DI 1 "s_register_operand" "w")
9421 (match_operand:V2DI 2 "s_register_operand" "w")
9422 (match_operand:HI 3 "vpr_register_operand" "Up")]
9425 "vpst\;vstrdt.64\t%q2, [%0, %q1]"
9426 [(set_attr "length" "8")])
9429 ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u]
9431 (define_expand "mve_vstrdq_scatter_offset_<supf>v2di"
9432 [(match_operand:V2DI 0 "mve_scatter_memory")
9433 (match_operand:V2DI 1 "s_register_operand")
9434 (match_operand:V2DI 2 "s_register_operand")
9435 (unspec:V4SI [(const_int 0)] VSTRDSOQ)]
9438 rtx ind = XEXP (operands[0], 0);
9439 gcc_assert (REG_P (ind));
9440 emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1],
9445 (define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn"
9446 [(set (mem:BLK (scratch))
9448 [(match_operand:SI 0 "register_operand" "r")
9449 (match_operand:V2DI 1 "s_register_operand" "w")
9450 (match_operand:V2DI 2 "s_register_operand" "w")]
9453 "vstrd.64\t%q2, [%0, %q1]"
9454 [(set_attr "length" "4")])
9457 ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u]
9459 (define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di"
9460 [(match_operand:V2DI 0 "mve_scatter_memory")
9461 (match_operand:V2DI 1 "s_register_operand")
9462 (match_operand:V2DI 2 "s_register_operand")
9463 (match_operand:HI 3 "vpr_register_operand")
9464 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
9467 rtx ind = XEXP (operands[0], 0);
9468 gcc_assert (REG_P (ind));
9470 gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1],
9476 (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn"
9477 [(set (mem:BLK (scratch))
9479 [(match_operand:SI 0 "register_operand" "r")
9480 (match_operand:V2DI 1 "s_register_operand" "w")
9481 (match_operand:V2DI 2 "s_register_operand" "w")
9482 (match_operand:HI 3 "vpr_register_operand" "Up")]
9485 "vpst\;vstrdt.64\t%q2, [%0, %q1, UXTW #3]"
9486 [(set_attr "length" "8")])
9489 ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u]
9491 (define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di"
9492 [(match_operand:V2DI 0 "mve_scatter_memory")
9493 (match_operand:V2DI 1 "s_register_operand")
9494 (match_operand:V2DI 2 "s_register_operand")
9495 (unspec:V4SI [(const_int 0)] VSTRDSSOQ)]
9498 rtx ind = XEXP (operands[0], 0);
9499 gcc_assert (REG_P (ind));
9501 gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1],
9506 (define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn"
9507 [(set (mem:BLK (scratch))
9509 [(match_operand:SI 0 "register_operand" "r")
9510 (match_operand:V2DI 1 "s_register_operand" "w")
9511 (match_operand:V2DI 2 "s_register_operand" "w")]
9514 "vstrd.64\t%q2, [%0, %q1, UXTW #3]"
9515 [(set_attr "length" "4")])
9518 ;; [vstrhq_scatter_offset_f]
9520 (define_expand "mve_vstrhq_scatter_offset_fv8hf"
9521 [(match_operand:V8HI 0 "mve_scatter_memory")
9522 (match_operand:V8HI 1 "s_register_operand")
9523 (match_operand:V8HF 2 "s_register_operand")
9524 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
9525 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9527 rtx ind = XEXP (operands[0], 0);
9528 gcc_assert (REG_P (ind));
9529 emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1],
9534 (define_insn "mve_vstrhq_scatter_offset_fv8hf_insn"
9535 [(set (mem:BLK (scratch))
9537 [(match_operand:SI 0 "register_operand" "r")
9538 (match_operand:V8HI 1 "s_register_operand" "w")
9539 (match_operand:V8HF 2 "s_register_operand" "w")]
9541 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9542 "vstrh.16\t%q2, [%0, %q1]"
9543 [(set_attr "length" "4")])
9546 ;; [vstrhq_scatter_offset_p_f]
9548 (define_expand "mve_vstrhq_scatter_offset_p_fv8hf"
9549 [(match_operand:V8HI 0 "mve_scatter_memory")
9550 (match_operand:V8HI 1 "s_register_operand")
9551 (match_operand:V8HF 2 "s_register_operand")
9552 (match_operand:HI 3 "vpr_register_operand")
9553 (unspec:V4SI [(const_int 0)] VSTRHQSO_F)]
9554 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9556 rtx ind = XEXP (operands[0], 0);
9557 gcc_assert (REG_P (ind));
9558 emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1],
9564 (define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn"
9565 [(set (mem:BLK (scratch))
9567 [(match_operand:SI 0 "register_operand" "r")
9568 (match_operand:V8HI 1 "s_register_operand" "w")
9569 (match_operand:V8HF 2 "s_register_operand" "w")
9570 (match_operand:HI 3 "vpr_register_operand" "Up")]
9572 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9573 "vpst\;vstrht.16\t%q2, [%0, %q1]"
9574 [(set_attr "length" "8")])
9577 ;; [vstrhq_scatter_shifted_offset_f]
9579 (define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf"
9580 [(match_operand:V8HI 0 "memory_operand" "=Us")
9581 (match_operand:V8HI 1 "s_register_operand" "w")
9582 (match_operand:V8HF 2 "s_register_operand" "w")
9583 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
9584 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9586 rtx ind = XEXP (operands[0], 0);
9587 gcc_assert (REG_P (ind));
9588 emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1],
9593 (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn"
9594 [(set (mem:BLK (scratch))
9596 [(match_operand:SI 0 "register_operand" "r")
9597 (match_operand:V8HI 1 "s_register_operand" "w")
9598 (match_operand:V8HF 2 "s_register_operand" "w")]
9600 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9601 "vstrh.16\t%q2, [%0, %q1, uxtw #1]"
9602 [(set_attr "length" "4")])
9605 ;; [vstrhq_scatter_shifted_offset_p_f]
9607 (define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf"
9608 [(match_operand:V8HI 0 "memory_operand" "=Us")
9609 (match_operand:V8HI 1 "s_register_operand" "w")
9610 (match_operand:V8HF 2 "s_register_operand" "w")
9611 (match_operand:HI 3 "vpr_register_operand" "Up")
9612 (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)]
9613 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9615 rtx ind = XEXP (operands[0], 0);
9616 gcc_assert (REG_P (ind));
9618 gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1],
9624 (define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn"
9625 [(set (mem:BLK (scratch))
9627 [(match_operand:SI 0 "register_operand" "r")
9628 (match_operand:V8HI 1 "s_register_operand" "w")
9629 (match_operand:V8HF 2 "s_register_operand" "w")
9630 (match_operand:HI 3 "vpr_register_operand" "Up")]
9632 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9633 "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]"
9634 [(set_attr "length" "8")])
9637 ;; [vstrwq_scatter_base_f]
9639 (define_insn "mve_vstrwq_scatter_base_fv4sf"
9640 [(set (mem:BLK (scratch))
9642 [(match_operand:V4SI 0 "s_register_operand" "w")
9643 (match_operand:SI 1 "immediate_operand" "i")
9644 (match_operand:V4SF 2 "s_register_operand" "w")]
9647 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9650 ops[0] = operands[0];
9651 ops[1] = operands[1];
9652 ops[2] = operands[2];
9653 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops);
9656 [(set_attr "length" "4")])
9659 ;; [vstrwq_scatter_base_p_f]
9661 (define_insn "mve_vstrwq_scatter_base_p_fv4sf"
9662 [(set (mem:BLK (scratch))
9664 [(match_operand:V4SI 0 "s_register_operand" "w")
9665 (match_operand:SI 1 "immediate_operand" "i")
9666 (match_operand:V4SF 2 "s_register_operand" "w")
9667 (match_operand:HI 3 "vpr_register_operand" "Up")]
9670 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9673 ops[0] = operands[0];
9674 ops[1] = operands[1];
9675 ops[2] = operands[2];
9676 output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops);
9679 [(set_attr "length" "8")])
9682 ;; [vstrwq_scatter_offset_f]
9684 (define_expand "mve_vstrwq_scatter_offset_fv4sf"
9685 [(match_operand:V4SI 0 "mve_scatter_memory")
9686 (match_operand:V4SI 1 "s_register_operand")
9687 (match_operand:V4SF 2 "s_register_operand")
9688 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9689 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9691 rtx ind = XEXP (operands[0], 0);
9692 gcc_assert (REG_P (ind));
9693 emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1],
9698 (define_insn "mve_vstrwq_scatter_offset_fv4sf_insn"
9699 [(set (mem:BLK (scratch))
9701 [(match_operand:SI 0 "register_operand" "r")
9702 (match_operand:V4SI 1 "s_register_operand" "w")
9703 (match_operand:V4SF 2 "s_register_operand" "w")]
9705 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9706 "vstrw.32\t%q2, [%0, %q1]"
9707 [(set_attr "length" "4")])
9710 ;; [vstrwq_scatter_offset_p_f]
9712 (define_expand "mve_vstrwq_scatter_offset_p_fv4sf"
9713 [(match_operand:V4SI 0 "mve_scatter_memory")
9714 (match_operand:V4SI 1 "s_register_operand")
9715 (match_operand:V4SF 2 "s_register_operand")
9716 (match_operand:HI 3 "vpr_register_operand")
9717 (unspec:V4SI [(const_int 0)] VSTRWQSO_F)]
9718 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9720 rtx ind = XEXP (operands[0], 0);
9721 gcc_assert (REG_P (ind));
9722 emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1],
9728 (define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn"
9729 [(set (mem:BLK (scratch))
9731 [(match_operand:SI 0 "register_operand" "r")
9732 (match_operand:V4SI 1 "s_register_operand" "w")
9733 (match_operand:V4SF 2 "s_register_operand" "w")
9734 (match_operand:HI 3 "vpr_register_operand" "Up")]
9736 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9737 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9738 [(set_attr "length" "8")])
9741 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9743 (define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si"
9744 [(match_operand:V4SI 0 "mve_scatter_memory")
9745 (match_operand:V4SI 1 "s_register_operand")
9746 (match_operand:V4SI 2 "s_register_operand")
9747 (match_operand:HI 3 "vpr_register_operand")
9748 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9751 rtx ind = XEXP (operands[0], 0);
9752 gcc_assert (REG_P (ind));
9753 emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1],
9759 (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn"
9760 [(set (mem:BLK (scratch))
9762 [(match_operand:SI 0 "register_operand" "r")
9763 (match_operand:V4SI 1 "s_register_operand" "w")
9764 (match_operand:V4SI 2 "s_register_operand" "w")
9765 (match_operand:HI 3 "vpr_register_operand" "Up")]
9768 "vpst\;vstrwt.32\t%q2, [%0, %q1]"
9769 [(set_attr "length" "8")])
9772 ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u]
9774 (define_expand "mve_vstrwq_scatter_offset_<supf>v4si"
9775 [(match_operand:V4SI 0 "mve_scatter_memory")
9776 (match_operand:V4SI 1 "s_register_operand")
9777 (match_operand:V4SI 2 "s_register_operand")
9778 (unspec:V4SI [(const_int 0)] VSTRWSOQ)]
9781 rtx ind = XEXP (operands[0], 0);
9782 gcc_assert (REG_P (ind));
9783 emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1],
9788 (define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn"
9789 [(set (mem:BLK (scratch))
9791 [(match_operand:SI 0 "register_operand" "r")
9792 (match_operand:V4SI 1 "s_register_operand" "w")
9793 (match_operand:V4SI 2 "s_register_operand" "w")]
9796 "vstrw.32\t%q2, [%0, %q1]"
9797 [(set_attr "length" "4")])
9800 ;; [vstrwq_scatter_shifted_offset_f]
9802 (define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf"
9803 [(match_operand:V4SI 0 "mve_scatter_memory")
9804 (match_operand:V4SI 1 "s_register_operand")
9805 (match_operand:V4SF 2 "s_register_operand")
9806 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9807 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9809 rtx ind = XEXP (operands[0], 0);
9810 gcc_assert (REG_P (ind));
9811 emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1],
9816 (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn"
9817 [(set (mem:BLK (scratch))
9819 [(match_operand:SI 0 "register_operand" "r")
9820 (match_operand:V4SI 1 "s_register_operand" "w")
9821 (match_operand:V4SF 2 "s_register_operand" "w")]
9823 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9824 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9825 [(set_attr "length" "8")])
9828 ;; [vstrwq_scatter_shifted_offset_p_f]
9830 (define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf"
9831 [(match_operand:V4SI 0 "mve_scatter_memory")
9832 (match_operand:V4SI 1 "s_register_operand")
9833 (match_operand:V4SF 2 "s_register_operand")
9834 (match_operand:HI 3 "vpr_register_operand")
9835 (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)]
9836 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9838 rtx ind = XEXP (operands[0], 0);
9839 gcc_assert (REG_P (ind));
9841 gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1],
9847 (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn"
9848 [(set (mem:BLK (scratch))
9850 [(match_operand:SI 0 "register_operand" "r")
9851 (match_operand:V4SI 1 "s_register_operand" "w")
9852 (match_operand:V4SF 2 "s_register_operand" "w")
9853 (match_operand:HI 3 "vpr_register_operand" "Up")]
9855 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9856 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9857 [(set_attr "length" "8")])
9860 ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u]
9862 (define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si"
9863 [(match_operand:V4SI 0 "mve_scatter_memory")
9864 (match_operand:V4SI 1 "s_register_operand")
9865 (match_operand:V4SI 2 "s_register_operand")
9866 (match_operand:HI 3 "vpr_register_operand")
9867 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9870 rtx ind = XEXP (operands[0], 0);
9871 gcc_assert (REG_P (ind));
9873 gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1],
9879 (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn"
9880 [(set (mem:BLK (scratch))
9882 [(match_operand:SI 0 "register_operand" "r")
9883 (match_operand:V4SI 1 "s_register_operand" "w")
9884 (match_operand:V4SI 2 "s_register_operand" "w")
9885 (match_operand:HI 3 "vpr_register_operand" "Up")]
9888 "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]"
9889 [(set_attr "length" "8")])
9892 ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u]
9894 (define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si"
9895 [(match_operand:V4SI 0 "mve_scatter_memory")
9896 (match_operand:V4SI 1 "s_register_operand")
9897 (match_operand:V4SI 2 "s_register_operand")
9898 (unspec:V4SI [(const_int 0)] VSTRWSSOQ)]
9901 rtx ind = XEXP (operands[0], 0);
9902 gcc_assert (REG_P (ind));
9904 gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1],
9909 (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn"
9910 [(set (mem:BLK (scratch))
9912 [(match_operand:SI 0 "register_operand" "r")
9913 (match_operand:V4SI 1 "s_register_operand" "w")
9914 (match_operand:V4SI 2 "s_register_operand" "w")]
9917 "vstrw.32\t%q2, [%0, %q1, uxtw #2]"
9918 [(set_attr "length" "4")])
9921 ;; [vaddq_s, vaddq_u])
9923 (define_insn "mve_vaddq<mode>"
9925 (set (match_operand:MVE_2 0 "s_register_operand" "=w")
9926 (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w")
9927 (match_operand:MVE_2 2 "s_register_operand" "w")))
9930 "vadd.i%#<V_sz_elem> %q0, %q1, %q2"
9931 [(set_attr "type" "mve_move")
9937 (define_insn "mve_vaddq_f<mode>"
9939 (set (match_operand:MVE_0 0 "s_register_operand" "=w")
9940 (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")
9941 (match_operand:MVE_0 2 "s_register_operand" "w")))
9943 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
9944 "vadd.f%#<V_sz_elem> %q0, %q1, %q2"
9945 [(set_attr "type" "mve_move")
9951 (define_expand "mve_vidupq_n_u<mode>"
9952 [(match_operand:MVE_2 0 "s_register_operand")
9953 (match_operand:SI 1 "s_register_operand")
9954 (match_operand:SI 2 "mve_imm_selective_upto_8")]
9957 rtx temp = gen_reg_rtx (SImode);
9958 emit_move_insn (temp, operands[1]);
9959 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
9960 emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1],
9968 (define_insn "mve_vidupq_u<mode>_insn"
9969 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
9970 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
9971 (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")]
9973 (set (match_operand:SI 1 "s_register_operand" "=Te")
9974 (plus:SI (match_dup 2)
9975 (match_operand:SI 4 "immediate_operand" "i")))]
9977 "vidup.u%#<V_sz_elem>\t%q0, %1, %3")
9982 (define_expand "mve_vidupq_m_n_u<mode>"
9983 [(match_operand:MVE_2 0 "s_register_operand")
9984 (match_operand:MVE_2 1 "s_register_operand")
9985 (match_operand:SI 2 "s_register_operand")
9986 (match_operand:SI 3 "mve_imm_selective_upto_8")
9987 (match_operand:HI 4 "vpr_register_operand")]
9990 rtx temp = gen_reg_rtx (SImode);
9991 emit_move_insn (temp, operands[2]);
9992 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
9993 emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
9994 operands[2], operands[3],
10000 ;; [vidupq_m_wb_u_insn])
10002 (define_insn "mve_vidupq_m_wb_u<mode>_insn"
10003 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10004 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
10005 (match_operand:SI 3 "s_register_operand" "2")
10006 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
10007 (match_operand:HI 5 "vpr_register_operand" "Up")]
10009 (set (match_operand:SI 2 "s_register_operand" "=Te")
10010 (plus:SI (match_dup 3)
10011 (match_operand:SI 6 "immediate_operand" "i")))]
10013 "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4"
10014 [(set_attr "length""8")])
10019 (define_expand "mve_vddupq_n_u<mode>"
10020 [(match_operand:MVE_2 0 "s_register_operand")
10021 (match_operand:SI 1 "s_register_operand")
10022 (match_operand:SI 2 "mve_imm_selective_upto_8")]
10025 rtx temp = gen_reg_rtx (SImode);
10026 emit_move_insn (temp, operands[1]);
10027 rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode);
10028 emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1],
10029 operands[2], inc));
10034 ;; [vddupq_u_insn])
10036 (define_insn "mve_vddupq_u<mode>_insn"
10037 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10038 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
10039 (match_operand:SI 3 "immediate_operand" "i")]
10041 (set (match_operand:SI 1 "s_register_operand" "=Te")
10042 (minus:SI (match_dup 2)
10043 (match_operand:SI 4 "immediate_operand" "i")))]
10045 "vddup.u%#<V_sz_elem> %q0, %1, %3")
10050 (define_expand "mve_vddupq_m_n_u<mode>"
10051 [(match_operand:MVE_2 0 "s_register_operand")
10052 (match_operand:MVE_2 1 "s_register_operand")
10053 (match_operand:SI 2 "s_register_operand")
10054 (match_operand:SI 3 "mve_imm_selective_upto_8")
10055 (match_operand:HI 4 "vpr_register_operand")]
10058 rtx temp = gen_reg_rtx (SImode);
10059 emit_move_insn (temp, operands[2]);
10060 rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode);
10061 emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp,
10062 operands[2], operands[3],
10063 operands[4], inc));
10068 ;; [vddupq_m_wb_u_insn])
10070 (define_insn "mve_vddupq_m_wb_u<mode>_insn"
10071 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10072 (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0")
10073 (match_operand:SI 3 "s_register_operand" "2")
10074 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")
10075 (match_operand:HI 5 "vpr_register_operand" "Up")]
10077 (set (match_operand:SI 2 "s_register_operand" "=Te")
10078 (minus:SI (match_dup 3)
10079 (match_operand:SI 6 "immediate_operand" "i")))]
10081 "vpst\;\tvddupt.u%#<V_sz_elem>\t%q0, %2, %4"
10082 [(set_attr "length""8")])
10087 (define_expand "mve_vdwdupq_n_u<mode>"
10088 [(match_operand:MVE_2 0 "s_register_operand")
10089 (match_operand:SI 1 "s_register_operand")
10090 (match_operand:DI 2 "s_register_operand")
10091 (match_operand:SI 3 "mve_imm_selective_upto_8")]
10094 rtx ignore_wb = gen_reg_rtx (SImode);
10095 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
10096 operands[1], operands[2],
10104 (define_expand "mve_vdwdupq_wb_u<mode>"
10105 [(match_operand:SI 0 "s_register_operand")
10106 (match_operand:SI 1 "s_register_operand")
10107 (match_operand:DI 2 "s_register_operand")
10108 (match_operand:SI 3 "mve_imm_selective_upto_8")
10109 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10112 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10113 emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
10114 operands[1], operands[2],
10120 ;; [vdwdupq_wb_u_insn])
10122 (define_insn "mve_vdwdupq_wb_u<mode>_insn"
10123 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10124 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
10125 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
10126 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
10128 (set (match_operand:SI 1 "s_register_operand" "=Te")
10129 (unspec:SI [(match_dup 2)
10130 (subreg:SI (match_dup 3) 4)
10134 "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
10138 ;; [vdwdupq_m_n_u])
10140 (define_expand "mve_vdwdupq_m_n_u<mode>"
10141 [(match_operand:MVE_2 0 "s_register_operand")
10142 (match_operand:MVE_2 1 "s_register_operand")
10143 (match_operand:SI 2 "s_register_operand")
10144 (match_operand:DI 3 "s_register_operand")
10145 (match_operand:SI 4 "mve_imm_selective_upto_8")
10146 (match_operand:HI 5 "vpr_register_operand")]
10149 rtx ignore_wb = gen_reg_rtx (SImode);
10150 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
10151 operands[1], operands[2],
10152 operands[3], operands[4],
10158 ;; [vdwdupq_m_wb_u])
10160 (define_expand "mve_vdwdupq_m_wb_u<mode>"
10161 [(match_operand:SI 0 "s_register_operand")
10162 (match_operand:MVE_2 1 "s_register_operand")
10163 (match_operand:SI 2 "s_register_operand")
10164 (match_operand:DI 3 "s_register_operand")
10165 (match_operand:SI 4 "mve_imm_selective_upto_8")
10166 (match_operand:HI 5 "vpr_register_operand")]
10169 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10170 emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
10171 operands[1], operands[2],
10172 operands[3], operands[4],
10178 ;; [vdwdupq_m_wb_u_insn])
10180 (define_insn "mve_vdwdupq_m_wb_u<mode>_insn"
10181 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10182 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10183 (match_operand:SI 3 "s_register_operand" "1")
10184 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
10185 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
10186 (match_operand:HI 6 "vpr_register_operand" "Up")]
10188 (set (match_operand:SI 1 "s_register_operand" "=Te")
10189 (unspec:SI [(match_dup 2)
10191 (subreg:SI (match_dup 4) 4)
10197 "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
10198 [(set_attr "type" "mve_move")
10199 (set_attr "length""8")])
10204 (define_expand "mve_viwdupq_n_u<mode>"
10205 [(match_operand:MVE_2 0 "s_register_operand")
10206 (match_operand:SI 1 "s_register_operand")
10207 (match_operand:DI 2 "s_register_operand")
10208 (match_operand:SI 3 "mve_imm_selective_upto_8")]
10211 rtx ignore_wb = gen_reg_rtx (SImode);
10212 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb,
10213 operands[1], operands[2],
10221 (define_expand "mve_viwdupq_wb_u<mode>"
10222 [(match_operand:SI 0 "s_register_operand")
10223 (match_operand:SI 1 "s_register_operand")
10224 (match_operand:DI 2 "s_register_operand")
10225 (match_operand:SI 3 "mve_imm_selective_upto_8")
10226 (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
10229 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10230 emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0],
10231 operands[1], operands[2],
10237 ;; [viwdupq_wb_u_insn])
10239 (define_insn "mve_viwdupq_wb_u<mode>_insn"
10240 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10241 (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1")
10242 (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4)
10243 (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")]
10245 (set (match_operand:SI 1 "s_register_operand" "=Te")
10246 (unspec:SI [(match_dup 2)
10247 (subreg:SI (match_dup 3) 4)
10251 "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4"
10255 ;; [viwdupq_m_n_u])
10257 (define_expand "mve_viwdupq_m_n_u<mode>"
10258 [(match_operand:MVE_2 0 "s_register_operand")
10259 (match_operand:MVE_2 1 "s_register_operand")
10260 (match_operand:SI 2 "s_register_operand")
10261 (match_operand:DI 3 "s_register_operand")
10262 (match_operand:SI 4 "mve_imm_selective_upto_8")
10263 (match_operand:HI 5 "vpr_register_operand")]
10266 rtx ignore_wb = gen_reg_rtx (SImode);
10267 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb,
10268 operands[1], operands[2],
10269 operands[3], operands[4],
10275 ;; [viwdupq_m_wb_u])
10277 (define_expand "mve_viwdupq_m_wb_u<mode>"
10278 [(match_operand:SI 0 "s_register_operand")
10279 (match_operand:MVE_2 1 "s_register_operand")
10280 (match_operand:SI 2 "s_register_operand")
10281 (match_operand:DI 3 "s_register_operand")
10282 (match_operand:SI 4 "mve_imm_selective_upto_8")
10283 (match_operand:HI 5 "vpr_register_operand")]
10286 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
10287 emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0],
10288 operands[1], operands[2],
10289 operands[3], operands[4],
10295 ;; [viwdupq_m_wb_u_insn])
10297 (define_insn "mve_viwdupq_m_wb_u<mode>_insn"
10298 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
10299 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
10300 (match_operand:SI 3 "s_register_operand" "1")
10301 (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4)
10302 (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg")
10303 (match_operand:HI 6 "vpr_register_operand" "Up")]
10305 (set (match_operand:SI 1 "s_register_operand" "=Te")
10306 (unspec:SI [(match_dup 2)
10308 (subreg:SI (match_dup 4) 4)
10314 "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5"
10315 [(set_attr "type" "mve_move")
10316 (set_attr "length""8")])
10318 (define_expand "mve_vstrwq_scatter_base_wb_<supf>v4si"
10319 [(match_operand:V4SI 0 "s_register_operand" "=w")
10320 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10321 (match_operand:V4SI 2 "s_register_operand" "w")
10322 (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)]
10325 rtx ignore_wb = gen_reg_rtx (V4SImode);
10327 gen_mve_vstrwq_scatter_base_wb_<supf>v4si_insn (ignore_wb, operands[0],
10328 operands[1], operands[2]));
10332 (define_expand "mve_vstrwq_scatter_base_wb_add_<supf>v4si"
10333 [(match_operand:V4SI 0 "s_register_operand" "=w")
10334 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10335 (match_operand:V4SI 2 "s_register_operand" "0")
10336 (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)]
10339 rtx ignore_vec = gen_reg_rtx (V4SImode);
10341 gen_mve_vstrwq_scatter_base_wb_<supf>v4si_insn (operands[0], operands[2],
10342 operands[1], ignore_vec));
10347 ;; [vstrwq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
10349 (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si_insn"
10350 [(set (mem:BLK (scratch))
10352 [(match_operand:V4SI 1 "s_register_operand" "0")
10353 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10354 (match_operand:V4SI 3 "s_register_operand" "w")]
10356 (set (match_operand:V4SI 0 "s_register_operand" "=w")
10357 (unspec:V4SI [(match_dup 1) (match_dup 2)]
10363 ops[0] = operands[1];
10364 ops[1] = operands[2];
10365 ops[2] = operands[3];
10366 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
10369 [(set_attr "length" "4")])
10371 (define_expand "mve_vstrwq_scatter_base_wb_p_<supf>v4si"
10372 [(match_operand:V4SI 0 "s_register_operand" "=w")
10373 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10374 (match_operand:V4SI 2 "s_register_operand" "w")
10375 (match_operand:HI 3 "vpr_register_operand")
10376 (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)]
10379 rtx ignore_wb = gen_reg_rtx (V4SImode);
10381 gen_mve_vstrwq_scatter_base_wb_p_<supf>v4si_insn (ignore_wb, operands[0],
10382 operands[1], operands[2],
10387 (define_expand "mve_vstrwq_scatter_base_wb_p_add_<supf>v4si"
10388 [(match_operand:V4SI 0 "s_register_operand" "=w")
10389 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10390 (match_operand:V4SI 2 "s_register_operand" "0")
10391 (match_operand:HI 3 "vpr_register_operand")
10392 (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)]
10395 rtx ignore_vec = gen_reg_rtx (V4SImode);
10397 gen_mve_vstrwq_scatter_base_wb_p_<supf>v4si_insn (operands[0], operands[2],
10398 operands[1], ignore_vec,
10404 ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u]
10406 (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si_insn"
10407 [(set (mem:BLK (scratch))
10409 [(match_operand:V4SI 1 "s_register_operand" "0")
10410 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10411 (match_operand:V4SI 3 "s_register_operand" "w")
10412 (match_operand:HI 4 "vpr_register_operand")]
10414 (set (match_operand:V4SI 0 "s_register_operand" "=w")
10415 (unspec:V4SI [(match_dup 1) (match_dup 2)]
10421 ops[0] = operands[1];
10422 ops[1] = operands[2];
10423 ops[2] = operands[3];
10424 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
10427 [(set_attr "length" "8")])
10429 (define_expand "mve_vstrwq_scatter_base_wb_fv4sf"
10430 [(match_operand:V4SI 0 "s_register_operand" "=w")
10431 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10432 (match_operand:V4SF 2 "s_register_operand" "w")
10433 (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)]
10434 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10436 rtx ignore_wb = gen_reg_rtx (V4SImode);
10438 gen_mve_vstrwq_scatter_base_wb_fv4sf_insn (ignore_wb,operands[0],
10439 operands[1], operands[2]));
10443 (define_expand "mve_vstrwq_scatter_base_wb_add_fv4sf"
10444 [(match_operand:V4SI 0 "s_register_operand" "=w")
10445 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10446 (match_operand:V4SI 2 "s_register_operand" "0")
10447 (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)]
10448 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10450 rtx ignore_vec = gen_reg_rtx (V4SFmode);
10452 gen_mve_vstrwq_scatter_base_wb_fv4sf_insn (operands[0], operands[2],
10453 operands[1], ignore_vec));
10458 ;; [vstrwq_scatter_base_wb_f]
10460 (define_insn "mve_vstrwq_scatter_base_wb_fv4sf_insn"
10461 [(set (mem:BLK (scratch))
10463 [(match_operand:V4SI 1 "s_register_operand" "0")
10464 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10465 (match_operand:V4SF 3 "s_register_operand" "w")]
10467 (set (match_operand:V4SI 0 "s_register_operand" "=w")
10468 (unspec:V4SI [(match_dup 1) (match_dup 2)]
10471 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10474 ops[0] = operands[1];
10475 ops[1] = operands[2];
10476 ops[2] = operands[3];
10477 output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops);
10480 [(set_attr "length" "4")])
10482 (define_expand "mve_vstrwq_scatter_base_wb_p_fv4sf"
10483 [(match_operand:V4SI 0 "s_register_operand" "=w")
10484 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10485 (match_operand:V4SF 2 "s_register_operand" "w")
10486 (match_operand:HI 3 "vpr_register_operand")
10487 (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)]
10488 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10490 rtx ignore_wb = gen_reg_rtx (V4SImode);
10492 gen_mve_vstrwq_scatter_base_wb_p_fv4sf_insn (ignore_wb, operands[0],
10493 operands[1], operands[2],
10498 (define_expand "mve_vstrwq_scatter_base_wb_p_add_fv4sf"
10499 [(match_operand:V4SI 0 "s_register_operand" "=w")
10500 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10501 (match_operand:V4SI 2 "s_register_operand" "0")
10502 (match_operand:HI 3 "vpr_register_operand")
10503 (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)]
10504 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10506 rtx ignore_vec = gen_reg_rtx (V4SFmode);
10508 gen_mve_vstrwq_scatter_base_wb_p_fv4sf_insn (operands[0], operands[2],
10509 operands[1], ignore_vec,
10515 ;; [vstrwq_scatter_base_wb_p_f]
10517 (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf_insn"
10518 [(set (mem:BLK (scratch))
10520 [(match_operand:V4SI 1 "s_register_operand" "0")
10521 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10522 (match_operand:V4SF 3 "s_register_operand" "w")
10523 (match_operand:HI 4 "vpr_register_operand")]
10525 (set (match_operand:V4SI 0 "s_register_operand" "=w")
10526 (unspec:V4SI [(match_dup 1) (match_dup 2)]
10529 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10532 ops[0] = operands[1];
10533 ops[1] = operands[2];
10534 ops[2] = operands[3];
10535 output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops);
10538 [(set_attr "length" "8")])
10540 (define_expand "mve_vstrdq_scatter_base_wb_<supf>v2di"
10541 [(match_operand:V2DI 0 "s_register_operand" "=w")
10542 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10543 (match_operand:V2DI 2 "s_register_operand" "w")
10544 (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)]
10547 rtx ignore_wb = gen_reg_rtx (V2DImode);
10549 gen_mve_vstrdq_scatter_base_wb_<supf>v2di_insn (ignore_wb, operands[0],
10550 operands[1], operands[2]));
10554 (define_expand "mve_vstrdq_scatter_base_wb_add_<supf>v2di"
10555 [(match_operand:V2DI 0 "s_register_operand" "=w")
10556 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10557 (match_operand:V2DI 2 "s_register_operand" "0")
10558 (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)]
10561 rtx ignore_vec = gen_reg_rtx (V2DImode);
10563 gen_mve_vstrdq_scatter_base_wb_<supf>v2di_insn (operands[0], operands[2],
10564 operands[1], ignore_vec));
10569 ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u]
10571 (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di_insn"
10572 [(set (mem:BLK (scratch))
10574 [(match_operand:V2DI 1 "s_register_operand" "0")
10575 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10576 (match_operand:V2DI 3 "s_register_operand" "w")]
10578 (set (match_operand:V2DI 0 "s_register_operand" "=&w")
10579 (unspec:V2DI [(match_dup 1) (match_dup 2)]
10585 ops[0] = operands[1];
10586 ops[1] = operands[2];
10587 ops[2] = operands[3];
10588 output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops);
10591 [(set_attr "length" "4")])
10593 (define_expand "mve_vstrdq_scatter_base_wb_p_<supf>v2di"
10594 [(match_operand:V2DI 0 "s_register_operand" "=w")
10595 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10596 (match_operand:V2DI 2 "s_register_operand" "w")
10597 (match_operand:HI 3 "vpr_register_operand")
10598 (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)]
10601 rtx ignore_wb = gen_reg_rtx (V2DImode);
10603 gen_mve_vstrdq_scatter_base_wb_p_<supf>v2di_insn (ignore_wb, operands[0],
10604 operands[1], operands[2],
10609 (define_expand "mve_vstrdq_scatter_base_wb_p_add_<supf>v2di"
10610 [(match_operand:V2DI 0 "s_register_operand" "=w")
10611 (match_operand:SI 1 "mve_vldrd_immediate" "Ri")
10612 (match_operand:V2DI 2 "s_register_operand" "0")
10613 (match_operand:HI 3 "vpr_register_operand")
10614 (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)]
10617 rtx ignore_vec = gen_reg_rtx (V2DImode);
10619 gen_mve_vstrdq_scatter_base_wb_p_<supf>v2di_insn (operands[0], operands[2],
10620 operands[1], ignore_vec,
10626 ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u]
10628 (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di_insn"
10629 [(set (mem:BLK (scratch))
10631 [(match_operand:V2DI 1 "s_register_operand" "0")
10632 (match_operand:SI 2 "mve_vldrd_immediate" "Ri")
10633 (match_operand:V2DI 3 "s_register_operand" "w")
10634 (match_operand:HI 4 "vpr_register_operand")]
10636 (set (match_operand:V2DI 0 "s_register_operand" "=w")
10637 (unspec:V2DI [(match_dup 1) (match_dup 2)]
10643 ops[0] = operands[1];
10644 ops[1] = operands[2];
10645 ops[2] = operands[3];
10646 output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]!",ops);
10649 [(set_attr "length" "8")])
10651 (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si"
10652 [(match_operand:V4SI 0 "s_register_operand")
10653 (match_operand:V4SI 1 "s_register_operand")
10654 (match_operand:SI 2 "mve_vldrd_immediate")
10655 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
10658 rtx ignore_result = gen_reg_rtx (V4SImode);
10660 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0],
10661 operands[1], operands[2]));
10665 (define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si"
10666 [(match_operand:V4SI 0 "s_register_operand")
10667 (match_operand:V4SI 1 "s_register_operand")
10668 (match_operand:SI 2 "mve_vldrd_immediate")
10669 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
10672 rtx ignore_wb = gen_reg_rtx (V4SImode);
10674 gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb,
10675 operands[1], operands[2]));
10680 ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u]
10682 (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn"
10683 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
10684 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
10685 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10686 (mem:BLK (scratch))]
10688 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10689 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10695 ops[0] = operands[0];
10696 ops[1] = operands[2];
10697 ops[2] = operands[3];
10698 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
10701 [(set_attr "length" "4")])
10703 (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si"
10704 [(match_operand:V4SI 0 "s_register_operand")
10705 (match_operand:V4SI 1 "s_register_operand")
10706 (match_operand:SI 2 "mve_vldrd_immediate")
10707 (match_operand:HI 3 "vpr_register_operand")
10708 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
10711 rtx ignore_result = gen_reg_rtx (V4SImode);
10713 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0],
10714 operands[1], operands[2],
10718 (define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si"
10719 [(match_operand:V4SI 0 "s_register_operand")
10720 (match_operand:V4SI 1 "s_register_operand")
10721 (match_operand:SI 2 "mve_vldrd_immediate")
10722 (match_operand:HI 3 "vpr_register_operand")
10723 (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)]
10726 rtx ignore_wb = gen_reg_rtx (V4SImode);
10728 gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb,
10729 operands[1], operands[2],
10735 ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u]
10737 (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn"
10738 [(set (match_operand:V4SI 0 "s_register_operand" "=&w")
10739 (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1")
10740 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10741 (match_operand:HI 4 "vpr_register_operand" "Up")
10742 (mem:BLK (scratch))]
10744 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10745 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10751 ops[0] = operands[0];
10752 ops[1] = operands[2];
10753 ops[2] = operands[3];
10754 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
10757 [(set_attr "length" "8")])
10759 (define_expand "mve_vldrwq_gather_base_wb_fv4sf"
10760 [(match_operand:V4SI 0 "s_register_operand")
10761 (match_operand:V4SI 1 "s_register_operand")
10762 (match_operand:SI 2 "mve_vldrd_immediate")
10763 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10764 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10766 rtx ignore_result = gen_reg_rtx (V4SFmode);
10768 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0],
10769 operands[1], operands[2]));
10773 (define_expand "mve_vldrwq_gather_base_nowb_fv4sf"
10774 [(match_operand:V4SF 0 "s_register_operand")
10775 (match_operand:V4SI 1 "s_register_operand")
10776 (match_operand:SI 2 "mve_vldrd_immediate")
10777 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10778 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10780 rtx ignore_wb = gen_reg_rtx (V4SImode);
10782 gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb,
10783 operands[1], operands[2]));
10788 ;; [vldrwq_gather_base_wb_f]
10790 (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn"
10791 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10792 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10793 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10794 (mem:BLK (scratch))]
10796 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10797 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10800 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10803 ops[0] = operands[0];
10804 ops[1] = operands[2];
10805 ops[2] = operands[3];
10806 output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops);
10809 [(set_attr "length" "4")])
10811 (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf"
10812 [(match_operand:V4SI 0 "s_register_operand")
10813 (match_operand:V4SI 1 "s_register_operand")
10814 (match_operand:SI 2 "mve_vldrd_immediate")
10815 (match_operand:HI 3 "vpr_register_operand")
10816 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10817 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10819 rtx ignore_result = gen_reg_rtx (V4SFmode);
10821 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0],
10822 operands[1], operands[2],
10827 (define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf"
10828 [(match_operand:V4SF 0 "s_register_operand")
10829 (match_operand:V4SI 1 "s_register_operand")
10830 (match_operand:SI 2 "mve_vldrd_immediate")
10831 (match_operand:HI 3 "vpr_register_operand")
10832 (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)]
10833 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10835 rtx ignore_wb = gen_reg_rtx (V4SImode);
10837 gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb,
10838 operands[1], operands[2],
10844 ;; [vldrwq_gather_base_wb_z_f]
10846 (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn"
10847 [(set (match_operand:V4SF 0 "s_register_operand" "=&w")
10848 (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1")
10849 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10850 (match_operand:HI 4 "vpr_register_operand" "Up")
10851 (mem:BLK (scratch))]
10853 (set (match_operand:V4SI 1 "s_register_operand" "=&w")
10854 (unspec:V4SI [(match_dup 2) (match_dup 3)]
10857 "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
10860 ops[0] = operands[0];
10861 ops[1] = operands[2];
10862 ops[2] = operands[3];
10863 output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops);
10866 [(set_attr "length" "8")])
10868 (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di"
10869 [(match_operand:V2DI 0 "s_register_operand")
10870 (match_operand:V2DI 1 "s_register_operand")
10871 (match_operand:SI 2 "mve_vldrd_immediate")
10872 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10875 rtx ignore_result = gen_reg_rtx (V2DImode);
10877 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0],
10878 operands[1], operands[2]));
10882 (define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di"
10883 [(match_operand:V2DI 0 "s_register_operand")
10884 (match_operand:V2DI 1 "s_register_operand")
10885 (match_operand:SI 2 "mve_vldrd_immediate")
10886 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10889 rtx ignore_wb = gen_reg_rtx (V2DImode);
10891 gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb,
10892 operands[1], operands[2]));
10898 ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u]
10900 (define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn"
10901 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10902 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10903 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10904 (mem:BLK (scratch))]
10906 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10907 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10913 ops[0] = operands[0];
10914 ops[1] = operands[2];
10915 ops[2] = operands[3];
10916 output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops);
10919 [(set_attr "length" "4")])
10921 (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di"
10922 [(match_operand:V2DI 0 "s_register_operand")
10923 (match_operand:V2DI 1 "s_register_operand")
10924 (match_operand:SI 2 "mve_vldrd_immediate")
10925 (match_operand:HI 3 "vpr_register_operand")
10926 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10929 rtx ignore_result = gen_reg_rtx (V2DImode);
10931 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0],
10932 operands[1], operands[2],
10937 (define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di"
10938 [(match_operand:V2DI 0 "s_register_operand")
10939 (match_operand:V2DI 1 "s_register_operand")
10940 (match_operand:SI 2 "mve_vldrd_immediate")
10941 (match_operand:HI 3 "vpr_register_operand")
10942 (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)]
10945 rtx ignore_wb = gen_reg_rtx (V2DImode);
10947 gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb,
10948 operands[1], operands[2],
10953 (define_insn "get_fpscr_nzcvqc"
10954 [(set (match_operand:SI 0 "register_operand" "=r")
10955 (unspec:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))]
10957 "vmrs\\t%0, FPSCR_nzcvqc"
10958 [(set_attr "type" "mve_move")])
10960 (define_insn "set_fpscr_nzcvqc"
10961 [(set (reg:SI VFPCC_REGNUM)
10962 (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
10963 VUNSPEC_SET_FPSCR_NZCVQC))]
10965 "vmsr\\tFPSCR_nzcvqc, %0"
10966 [(set_attr "type" "mve_move")])
10969 ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u]
10971 (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn"
10972 [(set (match_operand:V2DI 0 "s_register_operand" "=&w")
10973 (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1")
10974 (match_operand:SI 3 "mve_vldrd_immediate" "Ri")
10975 (match_operand:HI 4 "vpr_register_operand" "Up")
10976 (mem:BLK (scratch))]
10978 (set (match_operand:V2DI 1 "s_register_operand" "=&w")
10979 (unspec:V2DI [(match_dup 2) (match_dup 3)]
10985 ops[0] = operands[0];
10986 ops[1] = operands[2];
10987 ops[2] = operands[3];
10988 output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops);
10991 [(set_attr "length" "8")])
10993 ;; [vadciq_m_s, vadciq_m_u])
10995 (define_insn "mve_vadciq_m_<supf>v4si"
10996 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
10997 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
10998 (match_operand:V4SI 2 "s_register_operand" "w")
10999 (match_operand:V4SI 3 "s_register_operand" "w")
11000 (match_operand:HI 4 "vpr_register_operand" "Up")]
11002 (set (reg:SI VFPCC_REGNUM)
11003 (unspec:SI [(const_int 0)]
11007 "vpst\;vadcit.i32\t%q0, %q2, %q3"
11008 [(set_attr "type" "mve_move")
11009 (set_attr "length" "8")])
11012 ;; [vadciq_u, vadciq_s])
11014 (define_insn "mve_vadciq_<supf>v4si"
11015 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
11016 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
11017 (match_operand:V4SI 2 "s_register_operand" "w")]
11019 (set (reg:SI VFPCC_REGNUM)
11020 (unspec:SI [(const_int 0)]
11024 "vadci.i32\t%q0, %q1, %q2"
11025 [(set_attr "type" "mve_move")
11026 (set_attr "length" "4")])
11029 ;; [vadcq_m_s, vadcq_m_u])
11031 (define_insn "mve_vadcq_m_<supf>v4si"
11032 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
11033 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0")
11034 (match_operand:V4SI 2 "s_register_operand" "w")
11035 (match_operand:V4SI 3 "s_register_operand" "w")
11036 (match_operand:HI 4 "vpr_register_operand" "Up")]
11038 (set (reg:SI VFPCC_REGNUM)
11039 (unspec:SI [(reg:SI VFPCC_REGNUM)]
11043 "vpst\;vadct.i32\t%q0, %q2, %q3"
11044 [(set_attr "type" "mve_move")
11045 (set_attr "length" "8")])
11048 ;; [vadcq_u, vadcq_s])
11050 (define_insn "mve_vadcq_<supf>v4si"
11051 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
11052 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
11053 (match_operand:V4SI 2 "s_register_operand" "w")]
11055 (set (reg:SI VFPCC_REGNUM)
11056 (unspec:SI [(reg:SI VFPCC_REGNUM)]
11060 "vadc.i32\t%q0, %q1, %q2"
11061 [(set_attr "type" "mve_move")
11062 (set_attr "length" "4")
11063 (set_attr "conds" "set")])
11066 ;; [vsbciq_m_u, vsbciq_m_s])
11068 (define_insn "mve_vsbciq_m_<supf>v4si"
11069 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
11070 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
11071 (match_operand:V4SI 2 "s_register_operand" "w")
11072 (match_operand:V4SI 3 "s_register_operand" "w")
11073 (match_operand:HI 4 "vpr_register_operand" "Up")]
11075 (set (reg:SI VFPCC_REGNUM)
11076 (unspec:SI [(const_int 0)]
11080 "vpst\;vsbcit.i32\t%q0, %q2, %q3"
11081 [(set_attr "type" "mve_move")
11082 (set_attr "length" "8")])
11085 ;; [vsbciq_s, vsbciq_u])
11087 (define_insn "mve_vsbciq_<supf>v4si"
11088 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
11089 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
11090 (match_operand:V4SI 2 "s_register_operand" "w")]
11092 (set (reg:SI VFPCC_REGNUM)
11093 (unspec:SI [(const_int 0)]
11097 "vsbci.i32\t%q0, %q1, %q2"
11098 [(set_attr "type" "mve_move")
11099 (set_attr "length" "4")])
11102 ;; [vsbcq_m_u, vsbcq_m_s])
11104 (define_insn "mve_vsbcq_m_<supf>v4si"
11105 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
11106 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
11107 (match_operand:V4SI 2 "s_register_operand" "w")
11108 (match_operand:V4SI 3 "s_register_operand" "w")
11109 (match_operand:HI 4 "vpr_register_operand" "Up")]
11111 (set (reg:SI VFPCC_REGNUM)
11112 (unspec:SI [(reg:SI VFPCC_REGNUM)]
11116 "vpst\;vsbct.i32\t%q0, %q2, %q3"
11117 [(set_attr "type" "mve_move")
11118 (set_attr "length" "8")])
11121 ;; [vsbcq_s, vsbcq_u])
11123 (define_insn "mve_vsbcq_<supf>v4si"
11124 [(set (match_operand:V4SI 0 "s_register_operand" "=w")
11125 (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")
11126 (match_operand:V4SI 2 "s_register_operand" "w")]
11128 (set (reg:SI VFPCC_REGNUM)
11129 (unspec:SI [(reg:SI VFPCC_REGNUM)]
11133 "vsbc.i32\t%q0, %q1, %q2"
11134 [(set_attr "type" "mve_move")
11135 (set_attr "length" "4")])
11140 (define_insn "mve_vst2q<mode>"
11141 [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
11142 (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
11143 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
11146 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
11147 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
11150 int regno = REGNO (operands[1]);
11151 ops[0] = gen_rtx_REG (TImode, regno);
11152 ops[1] = gen_rtx_REG (TImode, regno + 4);
11153 rtx reg = operands[0];
11154 while (reg && !REG_P (reg))
11155 reg = XEXP (reg, 0);
11156 gcc_assert (REG_P (reg));
11158 ops[3] = operands[0];
11159 output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
11160 "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
11163 [(set_attr "length" "8")])
11168 (define_insn "mve_vld2q<mode>"
11169 [(set (match_operand:OI 0 "s_register_operand" "=w")
11170 (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
11171 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
11174 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
11175 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
11178 int regno = REGNO (operands[0]);
11179 ops[0] = gen_rtx_REG (TImode, regno);
11180 ops[1] = gen_rtx_REG (TImode, regno + 4);
11181 rtx reg = operands[1];
11182 while (reg && !REG_P (reg))
11183 reg = XEXP (reg, 0);
11184 gcc_assert (REG_P (reg));
11186 ops[3] = operands[1];
11187 output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t"
11188 "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops);
11191 [(set_attr "length" "8")])
11196 (define_insn "mve_vld4q<mode>"
11197 [(set (match_operand:XI 0 "s_register_operand" "=w")
11198 (unspec:XI [(match_operand:XI 1 "neon_struct_operand" "Um")
11199 (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
11202 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
11203 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
11206 int regno = REGNO (operands[0]);
11207 ops[0] = gen_rtx_REG (TImode, regno);
11208 ops[1] = gen_rtx_REG (TImode, regno+4);
11209 ops[2] = gen_rtx_REG (TImode, regno+8);
11210 ops[3] = gen_rtx_REG (TImode, regno + 12);
11211 rtx reg = operands[1];
11212 while (reg && !REG_P (reg))
11213 reg = XEXP (reg, 0);
11214 gcc_assert (REG_P (reg));
11216 ops[5] = operands[1];
11217 output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
11218 "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
11219 "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t"
11220 "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops);
11223 [(set_attr "length" "16")])
11225 ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f])
11227 (define_insn "mve_vec_extract<mode><V_elem_l>"
11228 [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r")
11229 (vec_select:<V_elem>
11230 (match_operand:MVE_VLD_ST 1 "s_register_operand" "w")
11231 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
11232 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
11233 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
11235 if (BYTES_BIG_ENDIAN)
11237 int elt = INTVAL (operands[2]);
11238 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
11239 operands[2] = GEN_INT (elt);
11241 return "vmov.<V_extr_elem>\t%0, %q1[%c2]";
11243 [(set_attr "type" "mve_move")])
11245 (define_insn "mve_vec_extractv2didi"
11246 [(set (match_operand:DI 0 "nonimmediate_operand" "=r")
11248 (match_operand:V2DI 1 "s_register_operand" "w")
11249 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
11252 int elt = INTVAL (operands[2]);
11253 if (BYTES_BIG_ENDIAN)
11257 return "vmov\t%Q0, %R0, %e1";
11259 return "vmov\t%Q0, %R0, %f1";
11261 [(set_attr "type" "mve_move")])
11263 (define_insn "*mve_vec_extract_sext_internal<mode>"
11264 [(set (match_operand:SI 0 "s_register_operand" "=r")
11266 (vec_select:<V_elem>
11267 (match_operand:MVE_2 1 "s_register_operand" "w")
11268 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
11269 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
11270 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
11272 if (BYTES_BIG_ENDIAN)
11274 int elt = INTVAL (operands[2]);
11275 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
11276 operands[2] = GEN_INT (elt);
11278 return "vmov.s<V_sz_elem>\t%0, %q1[%c2]";
11280 [(set_attr "type" "mve_move")])
11282 (define_insn "*mve_vec_extract_zext_internal<mode>"
11283 [(set (match_operand:SI 0 "s_register_operand" "=r")
11285 (vec_select:<V_elem>
11286 (match_operand:MVE_2 1 "s_register_operand" "w")
11287 (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
11288 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
11289 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
11291 if (BYTES_BIG_ENDIAN)
11293 int elt = INTVAL (operands[2]);
11294 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
11295 operands[2] = GEN_INT (elt);
11297 return "vmov.u<V_sz_elem>\t%0, %q1[%c2]";
11299 [(set_attr "type" "mve_move")])
11302 ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f])
11304 (define_insn "mve_vec_set<mode>_internal"
11305 [(set (match_operand:VQ2 0 "s_register_operand" "=w")
11308 (match_operand:<V_elem> 1 "nonimmediate_operand" "r"))
11309 (match_operand:VQ2 3 "s_register_operand" "0")
11310 (match_operand:SI 2 "immediate_operand" "i")))]
11311 "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
11312 || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
11314 int elt = ffs ((int) INTVAL (operands[2])) - 1;
11315 if (BYTES_BIG_ENDIAN)
11316 elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
11317 operands[2] = GEN_INT (elt);
11319 return "vmov.<V_sz_elem>\t%q0[%c2], %1";
11321 [(set_attr "type" "mve_move")])
11323 (define_insn "mve_vec_setv2di_internal"
11324 [(set (match_operand:V2DI 0 "s_register_operand" "=w")
11326 (vec_duplicate:V2DI
11327 (match_operand:DI 1 "nonimmediate_operand" "r"))
11328 (match_operand:V2DI 3 "s_register_operand" "0")
11329 (match_operand:SI 2 "immediate_operand" "i")))]
11332 int elt = ffs ((int) INTVAL (operands[2])) - 1;
11333 if (BYTES_BIG_ENDIAN)
11337 return "vmov\t%e0, %Q1, %R1";
11339 return "vmov\t%f0, %J1, %K1";
11341 [(set_attr "type" "mve_move")])
11346 (define_insn "mve_uqrshll_sat<supf>_di"
11347 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11348 (unspec:DI [(match_operand:DI 1 "arm_general_register_operand" "r")
11349 (match_operand:SI 2 "s_register_operand" "r")]
11352 "uqrshll%?\\t%Q1, %R1, #<supf>, %2"
11353 [(set_attr "predicable" "yes")])
11358 (define_insn "mve_sqrshrl_sat<supf>_di"
11359 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11360 (unspec:DI [(match_operand:DI 1 "arm_general_register_operand" "r")
11361 (match_operand:SI 2 "s_register_operand" "r")]
11364 "sqrshrl%?\\t%Q1, %R1, #<supf>, %2"
11365 [(set_attr "predicable" "yes")])
11370 (define_insn "mve_uqrshl_si"
11371 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11372 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "r")
11373 (match_operand:SI 2 "s_register_operand" "r")]
11376 "uqrshl%?\\t%1, %2"
11377 [(set_attr "predicable" "yes")])
11382 (define_insn "mve_sqrshr_si"
11383 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11384 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "r")
11385 (match_operand:SI 2 "s_register_operand" "r")]
11388 "sqrshr%?\\t%1, %2"
11389 [(set_attr "predicable" "yes")])
11394 (define_insn "mve_uqshll_di"
11395 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11396 (us_ashift:DI (match_operand:DI 1 "arm_general_register_operand" "r")
11397 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")))]
11399 "uqshll%?\\t%Q1, %R1, %2"
11400 [(set_attr "predicable" "yes")])
11405 (define_insn "mve_urshrl_di"
11406 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11407 (unspec:DI [(match_operand:DI 1 "arm_general_register_operand" "r")
11408 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")]
11411 "urshrl%?\\t%Q1, %R1, %2"
11412 [(set_attr "predicable" "yes")])
11417 (define_insn "mve_uqshl_si"
11418 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11419 (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "r")
11420 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")))]
11423 [(set_attr "predicable" "yes")])
11428 (define_insn "mve_urshr_si"
11429 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11430 (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "r")
11431 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")]
11435 [(set_attr "predicable" "yes")])
11440 (define_insn "mve_sqshl_si"
11441 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11442 (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "r")
11443 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")))]
11446 [(set_attr "predicable" "yes")])
11451 (define_insn "mve_srshr_si"
11452 [(set (match_operand:SI 0 "arm_general_register_operand" "+r")
11453 (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "r")
11454 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")]
11458 [(set_attr "predicable" "yes")])
11463 (define_insn "mve_srshrl_di"
11464 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11465 (unspec:DI [(match_operand:DI 1 "arm_general_register_operand" "r")
11466 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")]
11469 "srshrl%?\\t%Q1, %R1, %2"
11470 [(set_attr "predicable" "yes")])
11475 (define_insn "mve_sqshll_di"
11476 [(set (match_operand:DI 0 "arm_general_register_operand" "+r")
11477 (ss_ashift:DI (match_operand:DI 1 "arm_general_register_operand" "r")
11478 (match_operand:SI 2 "arm_reg_or_long_shift_imm" "rPg")))]
11480 "sqshll%?\\t%Q1, %R1, %2"
11481 [(set_attr "predicable" "yes")])
11484 ;; [vshlcq_m_u vshlcq_m_s]
11486 (define_expand "mve_vshlcq_m_vec_<supf><mode>"
11487 [(match_operand:MVE_2 0 "s_register_operand")
11488 (match_operand:MVE_2 1 "s_register_operand")
11489 (match_operand:SI 2 "s_register_operand")
11490 (match_operand:SI 3 "mve_imm_32")
11491 (match_operand:HI 4 "vpr_register_operand")
11492 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
11495 rtx ignore_wb = gen_reg_rtx (SImode);
11496 emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1],
11497 operands[2], operands[3],
11502 (define_expand "mve_vshlcq_m_carry_<supf><mode>"
11503 [(match_operand:SI 0 "s_register_operand")
11504 (match_operand:MVE_2 1 "s_register_operand")
11505 (match_operand:SI 2 "s_register_operand")
11506 (match_operand:SI 3 "mve_imm_32")
11507 (match_operand:HI 4 "vpr_register_operand")
11508 (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)]
11511 rtx ignore_vec = gen_reg_rtx (<MODE>mode);
11512 emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0],
11513 operands[1], operands[2],
11514 operands[3], operands[4]));
11518 (define_insn "mve_vshlcq_m_<supf><mode>"
11519 [(set (match_operand:MVE_2 0 "s_register_operand" "=w")
11520 (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0")
11521 (match_operand:SI 3 "s_register_operand" "1")
11522 (match_operand:SI 4 "mve_imm_32" "Rf")
11523 (match_operand:HI 5 "vpr_register_operand" "Up")]
11525 (set (match_operand:SI 1 "s_register_operand" "=r")
11526 (unspec:SI [(match_dup 2)
11533 "vpst\;vshlct\t%q0, %1, %4"
11534 [(set_attr "type" "mve_move")
11535 (set_attr "length" "8")])
11537 (define_insn "*mve_vec_duplicate<mode>"
11538 [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
11539 (vec_duplicate:MVE_VLD_ST (match_operand:<V_elem> 1 "general_operand" "r")))]
11540 "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
11541 "vdup.<V_sz_elem>\t%q0, %1"
11542 [(set_attr "type" "mve_move")])
11544 ;; CDE instructions on MVE registers.
11546 (define_insn "arm_vcx1qv16qi"
11547 [(set (match_operand:V16QI 0 "register_operand" "=t")
11548 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
11549 (match_operand:SI 2 "const_int_mve_cde1_operand" "i")]
11551 "TARGET_CDE && TARGET_HAVE_MVE"
11552 "vcx1\\tp%c1, %q0, #%c2"
11553 [(set_attr "type" "coproc")]
11556 (define_insn "arm_vcx1qav16qi"
11557 [(set (match_operand:V16QI 0 "register_operand" "=t")
11558 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
11559 (match_operand:V16QI 2 "register_operand" "0")
11560 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")]
11562 "TARGET_CDE && TARGET_HAVE_MVE"
11563 "vcx1a\\tp%c1, %q0, #%c3"
11564 [(set_attr "type" "coproc")]
11567 (define_insn "arm_vcx2qv16qi"
11568 [(set (match_operand:V16QI 0 "register_operand" "=t")
11569 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
11570 (match_operand:V16QI 2 "register_operand" "t")
11571 (match_operand:SI 3 "const_int_mve_cde2_operand" "i")]
11573 "TARGET_CDE && TARGET_HAVE_MVE"
11574 "vcx2\\tp%c1, %q0, %q2, #%c3"
11575 [(set_attr "type" "coproc")]
11578 (define_insn "arm_vcx2qav16qi"
11579 [(set (match_operand:V16QI 0 "register_operand" "=t")
11580 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
11581 (match_operand:V16QI 2 "register_operand" "0")
11582 (match_operand:V16QI 3 "register_operand" "t")
11583 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")]
11585 "TARGET_CDE && TARGET_HAVE_MVE"
11586 "vcx2a\\tp%c1, %q0, %q3, #%c4"
11587 [(set_attr "type" "coproc")]
11590 (define_insn "arm_vcx3qv16qi"
11591 [(set (match_operand:V16QI 0 "register_operand" "=t")
11592 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
11593 (match_operand:V16QI 2 "register_operand" "t")
11594 (match_operand:V16QI 3 "register_operand" "t")
11595 (match_operand:SI 4 "const_int_mve_cde3_operand" "i")]
11597 "TARGET_CDE && TARGET_HAVE_MVE"
11598 "vcx3\\tp%c1, %q0, %q2, %q3, #%c4"
11599 [(set_attr "type" "coproc")]
11602 (define_insn "arm_vcx3qav16qi"
11603 [(set (match_operand:V16QI 0 "register_operand" "=t")
11604 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
11605 (match_operand:V16QI 2 "register_operand" "0")
11606 (match_operand:V16QI 3 "register_operand" "t")
11607 (match_operand:V16QI 4 "register_operand" "t")
11608 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")]
11610 "TARGET_CDE && TARGET_HAVE_MVE"
11611 "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5"
11612 [(set_attr "type" "coproc")]
11615 (define_insn "arm_vcx1q<a>_p_v16qi"
11616 [(set (match_operand:V16QI 0 "register_operand" "=t")
11617 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
11618 (match_operand:V16QI 2 "register_operand" "0")
11619 (match_operand:SI 3 "const_int_mve_cde1_operand" "i")
11620 (match_operand:HI 4 "vpr_register_operand" "Up")]
11622 "TARGET_CDE && TARGET_HAVE_MVE"
11623 "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3"
11624 [(set_attr "type" "coproc")
11625 (set_attr "length" "8")]
11628 (define_insn "arm_vcx2q<a>_p_v16qi"
11629 [(set (match_operand:V16QI 0 "register_operand" "=t")
11630 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
11631 (match_operand:V16QI 2 "register_operand" "0")
11632 (match_operand:V16QI 3 "register_operand" "t")
11633 (match_operand:SI 4 "const_int_mve_cde2_operand" "i")
11634 (match_operand:HI 5 "vpr_register_operand" "Up")]
11636 "TARGET_CDE && TARGET_HAVE_MVE"
11637 "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4"
11638 [(set_attr "type" "coproc")
11639 (set_attr "length" "8")]
11642 (define_insn "arm_vcx3q<a>_p_v16qi"
11643 [(set (match_operand:V16QI 0 "register_operand" "=t")
11644 (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i")
11645 (match_operand:V16QI 2 "register_operand" "0")
11646 (match_operand:V16QI 3 "register_operand" "t")
11647 (match_operand:V16QI 4 "register_operand" "t")
11648 (match_operand:SI 5 "const_int_mve_cde3_operand" "i")
11649 (match_operand:HI 6 "vpr_register_operand" "Up")]
11651 "TARGET_CDE && TARGET_HAVE_MVE"
11652 "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5"
11653 [(set_attr "type" "coproc")
11654 (set_attr "length" "8")]