Merge from trunk:
[official-gcc.git] / main / gcc / config / aarch64 / aarch64-simd-builtins.def
blob15cf4ca002756e4fe1134c0268e09d91122e8698
1 /* Machine description for AArch64 architecture.
2 Copyright (C) 2012-2014 Free Software Foundation, Inc.
3 Contributed by ARM Ltd.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 /* In the list below, the BUILTIN_<ITERATOR> macros expand to create
22 builtins for each of the modes described by <ITERATOR>. When adding
23 new builtins to this list, a helpful idiom to follow is to add
24 a line for each pattern in the md file. Thus, ADDP, which has one
25 pattern defined for the VD_BHSI iterator, and one for DImode, has two
26 entries below.
28 Parameter 1 is the 'type' of the intrinsic. This is used to
29 describe the type modifiers (for example; unsigned) applied to
30 each of the parameters to the intrinsic function.
32 Parameter 2 is the name of the intrinsic. This is appended
33 to `__builtin_aarch64_<name><mode>` to give the intrinsic name
34 as exported to the front-ends.
36 Parameter 3 describes how to map from the name to the CODE_FOR_
37 macro holding the RTL pattern for the intrinsic. This mapping is:
38 0 - CODE_FOR_aarch64_<name><mode>
39 1-9 - CODE_FOR_<name><mode><1-9>
40 10 - CODE_FOR_<name><mode>. */
42 BUILTIN_VD1 (CREATE, create, 0)
43 BUILTIN_VDC (COMBINE, combine, 0)
44 BUILTIN_VB (BINOP, pmul, 0)
45 BUILTIN_VDQF (UNOP, sqrt, 2)
46 BUILTIN_VD_BHSI (BINOP, addp, 0)
47 VAR1 (UNOP, addp, 0, di)
48 BUILTIN_VDQ_BHSI (UNOP, clz, 2)
50 BUILTIN_VALL (GETLANE, be_checked_get_lane, 0)
52 VAR1 (REINTERP_SS, reinterpretdi, 0, v1df)
53 VAR1 (REINTERP_SS, reinterpretv8qi, 0, v1df)
54 VAR1 (REINTERP_SS, reinterpretv4hi, 0, v1df)
55 VAR1 (REINTERP_SS, reinterpretv2si, 0, v1df)
56 VAR1 (REINTERP_SS, reinterpretv2sf, 0, v1df)
57 BUILTIN_VD (REINTERP_SS, reinterpretv1df, 0)
59 BUILTIN_VD (REINTERP_SU, reinterpretv1df, 0)
61 VAR1 (REINTERP_US, reinterpretdi, 0, v1df)
62 VAR1 (REINTERP_US, reinterpretv8qi, 0, v1df)
63 VAR1 (REINTERP_US, reinterpretv4hi, 0, v1df)
64 VAR1 (REINTERP_US, reinterpretv2si, 0, v1df)
65 VAR1 (REINTERP_US, reinterpretv2sf, 0, v1df)
67 BUILTIN_VD (REINTERP_SP, reinterpretv1df, 0)
69 VAR1 (REINTERP_PS, reinterpretdi, 0, v1df)
70 VAR1 (REINTERP_PS, reinterpretv8qi, 0, v1df)
71 VAR1 (REINTERP_PS, reinterpretv4hi, 0, v1df)
72 VAR1 (REINTERP_PS, reinterpretv2si, 0, v1df)
73 VAR1 (REINTERP_PS, reinterpretv2sf, 0, v1df)
75 /* Implemented by aarch64_<sur>q<r>shl<mode>. */
76 BUILTIN_VSDQ_I (BINOP, sqshl, 0)
77 BUILTIN_VSDQ_I (BINOP_UUS, uqshl, 0)
78 BUILTIN_VSDQ_I (BINOP, sqrshl, 0)
79 BUILTIN_VSDQ_I (BINOP_UUS, uqrshl, 0)
80 /* Implemented by aarch64_<su_optab><optab><mode>. */
81 BUILTIN_VSDQ_I (BINOP, sqadd, 0)
82 BUILTIN_VSDQ_I (BINOPU, uqadd, 0)
83 BUILTIN_VSDQ_I (BINOP, sqsub, 0)
84 BUILTIN_VSDQ_I (BINOPU, uqsub, 0)
85 /* Implemented by aarch64_<sur>qadd<mode>. */
86 BUILTIN_VSDQ_I (BINOP_SSU, suqadd, 0)
87 BUILTIN_VSDQ_I (BINOP_UUS, usqadd, 0)
89 /* Implemented by aarch64_get_dreg<VSTRUCT:mode><VDC:mode>. */
90 BUILTIN_VDC (GETLANE, get_dregoi, 0)
91 BUILTIN_VDC (GETLANE, get_dregci, 0)
92 BUILTIN_VDC (GETLANE, get_dregxi, 0)
93 /* Implemented by aarch64_get_qreg<VSTRUCT:mode><VQ:mode>. */
94 BUILTIN_VQ (GETLANE, get_qregoi, 0)
95 BUILTIN_VQ (GETLANE, get_qregci, 0)
96 BUILTIN_VQ (GETLANE, get_qregxi, 0)
97 /* Implemented by aarch64_set_qreg<VSTRUCT:mode><VQ:mode>. */
98 BUILTIN_VQ (SETLANE, set_qregoi, 0)
99 BUILTIN_VQ (SETLANE, set_qregci, 0)
100 BUILTIN_VQ (SETLANE, set_qregxi, 0)
101 /* Implemented by aarch64_ld<VSTRUCT:nregs><VDC:mode>. */
102 BUILTIN_VDC (LOADSTRUCT, ld2, 0)
103 BUILTIN_VDC (LOADSTRUCT, ld3, 0)
104 BUILTIN_VDC (LOADSTRUCT, ld4, 0)
105 /* Implemented by aarch64_ld<VSTRUCT:nregs><VQ:mode>. */
106 BUILTIN_VQ (LOADSTRUCT, ld2, 0)
107 BUILTIN_VQ (LOADSTRUCT, ld3, 0)
108 BUILTIN_VQ (LOADSTRUCT, ld4, 0)
109 /* Implemented by aarch64_st<VSTRUCT:nregs><VDC:mode>. */
110 BUILTIN_VDC (STORESTRUCT, st2, 0)
111 BUILTIN_VDC (STORESTRUCT, st3, 0)
112 BUILTIN_VDC (STORESTRUCT, st4, 0)
113 /* Implemented by aarch64_st<VSTRUCT:nregs><VQ:mode>. */
114 BUILTIN_VQ (STORESTRUCT, st2, 0)
115 BUILTIN_VQ (STORESTRUCT, st3, 0)
116 BUILTIN_VQ (STORESTRUCT, st4, 0)
118 BUILTIN_VQ (STORESTRUCT_LANE, st2_lane, 0)
119 BUILTIN_VQ (STORESTRUCT_LANE, st3_lane, 0)
120 BUILTIN_VQ (STORESTRUCT_LANE, st4_lane, 0)
122 BUILTIN_VQW (BINOP, saddl2, 0)
123 BUILTIN_VQW (BINOP, uaddl2, 0)
124 BUILTIN_VQW (BINOP, ssubl2, 0)
125 BUILTIN_VQW (BINOP, usubl2, 0)
126 BUILTIN_VQW (BINOP, saddw2, 0)
127 BUILTIN_VQW (BINOP, uaddw2, 0)
128 BUILTIN_VQW (BINOP, ssubw2, 0)
129 BUILTIN_VQW (BINOP, usubw2, 0)
130 /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>l<mode>. */
131 BUILTIN_VDW (BINOP, saddl, 0)
132 BUILTIN_VDW (BINOP, uaddl, 0)
133 BUILTIN_VDW (BINOP, ssubl, 0)
134 BUILTIN_VDW (BINOP, usubl, 0)
135 /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>. */
136 BUILTIN_VDW (BINOP, saddw, 0)
137 BUILTIN_VDW (BINOP, uaddw, 0)
138 BUILTIN_VDW (BINOP, ssubw, 0)
139 BUILTIN_VDW (BINOP, usubw, 0)
140 /* Implemented by aarch64_<sur>h<addsub><mode>. */
141 BUILTIN_VQ_S (BINOP, shadd, 0)
142 BUILTIN_VQ_S (BINOP, uhadd, 0)
143 BUILTIN_VQ_S (BINOP, srhadd, 0)
144 BUILTIN_VQ_S (BINOP, urhadd, 0)
145 /* Implemented by aarch64_<sur><addsub>hn<mode>. */
146 BUILTIN_VQN (BINOP, addhn, 0)
147 BUILTIN_VQN (BINOP, raddhn, 0)
148 /* Implemented by aarch64_<sur><addsub>hn2<mode>. */
149 BUILTIN_VQN (TERNOP, addhn2, 0)
150 BUILTIN_VQN (TERNOP, raddhn2, 0)
152 BUILTIN_VSQN_HSDI (UNOP, sqmovun, 0)
153 /* Implemented by aarch64_<sur>qmovn<mode>. */
154 BUILTIN_VSQN_HSDI (UNOP, sqmovn, 0)
155 BUILTIN_VSQN_HSDI (UNOP, uqmovn, 0)
156 /* Implemented by aarch64_s<optab><mode>. */
157 BUILTIN_VSDQ_I (UNOP, sqabs, 0)
158 BUILTIN_VSDQ_I (UNOP, sqneg, 0)
160 BUILTIN_VSD_HSI (QUADOP, sqdmlal_lane, 0)
161 BUILTIN_VSD_HSI (QUADOP, sqdmlsl_lane, 0)
162 BUILTIN_VSD_HSI (QUADOP, sqdmlal_laneq, 0)
163 BUILTIN_VSD_HSI (QUADOP, sqdmlsl_laneq, 0)
164 BUILTIN_VQ_HSI (TERNOP, sqdmlal2, 0)
165 BUILTIN_VQ_HSI (TERNOP, sqdmlsl2, 0)
166 BUILTIN_VQ_HSI (QUADOP, sqdmlal2_lane, 0)
167 BUILTIN_VQ_HSI (QUADOP, sqdmlsl2_lane, 0)
168 BUILTIN_VQ_HSI (QUADOP, sqdmlal2_laneq, 0)
169 BUILTIN_VQ_HSI (QUADOP, sqdmlsl2_laneq, 0)
170 BUILTIN_VQ_HSI (TERNOP, sqdmlal2_n, 0)
171 BUILTIN_VQ_HSI (TERNOP, sqdmlsl2_n, 0)
172 /* Implemented by aarch64_sqdml<SBINQOPS:as>l<mode>. */
173 BUILTIN_VSD_HSI (TERNOP, sqdmlal, 0)
174 BUILTIN_VSD_HSI (TERNOP, sqdmlsl, 0)
175 /* Implemented by aarch64_sqdml<SBINQOPS:as>l_n<mode>. */
176 BUILTIN_VD_HSI (TERNOP, sqdmlal_n, 0)
177 BUILTIN_VD_HSI (TERNOP, sqdmlsl_n, 0)
179 BUILTIN_VSD_HSI (BINOP, sqdmull, 0)
180 BUILTIN_VSD_HSI (TERNOP, sqdmull_lane, 0)
181 BUILTIN_VD_HSI (TERNOP, sqdmull_laneq, 0)
182 BUILTIN_VD_HSI (BINOP, sqdmull_n, 0)
183 BUILTIN_VQ_HSI (BINOP, sqdmull2, 0)
184 BUILTIN_VQ_HSI (TERNOP, sqdmull2_lane, 0)
185 BUILTIN_VQ_HSI (TERNOP, sqdmull2_laneq, 0)
186 BUILTIN_VQ_HSI (BINOP, sqdmull2_n, 0)
187 /* Implemented by aarch64_sq<r>dmulh<mode>. */
188 BUILTIN_VSDQ_HSI (BINOP, sqdmulh, 0)
189 BUILTIN_VSDQ_HSI (BINOP, sqrdmulh, 0)
190 /* Implemented by aarch64_sq<r>dmulh_lane<q><mode>. */
191 BUILTIN_VDQHS (TERNOP, sqdmulh_lane, 0)
192 BUILTIN_VDQHS (TERNOP, sqdmulh_laneq, 0)
193 BUILTIN_VDQHS (TERNOP, sqrdmulh_lane, 0)
194 BUILTIN_VDQHS (TERNOP, sqrdmulh_laneq, 0)
195 BUILTIN_SD_HSI (TERNOP, sqdmulh_lane, 0)
196 BUILTIN_SD_HSI (TERNOP, sqrdmulh_lane, 0)
198 BUILTIN_VSDQ_I_DI (BINOP, ashl, 3)
199 /* Implemented by aarch64_<sur>shl<mode>. */
200 BUILTIN_VSDQ_I_DI (BINOP, sshl, 0)
201 BUILTIN_VSDQ_I_DI (BINOP_UUS, ushl, 0)
202 BUILTIN_VSDQ_I_DI (BINOP, srshl, 0)
203 BUILTIN_VSDQ_I_DI (BINOP_UUS, urshl, 0)
205 BUILTIN_VDQ_I (SHIFTIMM, ashr, 3)
206 VAR1 (SHIFTIMM, ashr_simd, 0, di)
207 BUILTIN_VDQ_I (SHIFTIMM, lshr, 3)
208 VAR1 (USHIFTIMM, lshr_simd, 0, di)
209 /* Implemented by aarch64_<sur>shr_n<mode>. */
210 BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n, 0)
211 BUILTIN_VSDQ_I_DI (USHIFTIMM, urshr_n, 0)
212 /* Implemented by aarch64_<sur>sra_n<mode>. */
213 BUILTIN_VSDQ_I_DI (SHIFTACC, ssra_n, 0)
214 BUILTIN_VSDQ_I_DI (USHIFTACC, usra_n, 0)
215 BUILTIN_VSDQ_I_DI (SHIFTACC, srsra_n, 0)
216 BUILTIN_VSDQ_I_DI (USHIFTACC, ursra_n, 0)
217 /* Implemented by aarch64_<sur>shll_n<mode>. */
218 BUILTIN_VDW (SHIFTIMM, sshll_n, 0)
219 BUILTIN_VDW (USHIFTIMM, ushll_n, 0)
220 /* Implemented by aarch64_<sur>shll2_n<mode>. */
221 BUILTIN_VQW (SHIFTIMM, sshll2_n, 0)
222 BUILTIN_VQW (SHIFTIMM, ushll2_n, 0)
223 /* Implemented by aarch64_<sur>q<r>shr<u>n_n<mode>. */
224 BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrun_n, 0)
225 BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrun_n, 0)
226 BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrn_n, 0)
227 BUILTIN_VSQN_HSDI (USHIFTIMM, uqshrn_n, 0)
228 BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrn_n, 0)
229 BUILTIN_VSQN_HSDI (USHIFTIMM, uqrshrn_n, 0)
230 /* Implemented by aarch64_<sur>s<lr>i_n<mode>. */
231 BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n, 0)
232 BUILTIN_VSDQ_I_DI (USHIFTACC, usri_n, 0)
233 BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n, 0)
234 BUILTIN_VSDQ_I_DI (USHIFTACC, usli_n, 0)
235 /* Implemented by aarch64_<sur>qshl<u>_n<mode>. */
236 BUILTIN_VSDQ_I (SHIFTIMM_USS, sqshlu_n, 0)
237 BUILTIN_VSDQ_I (SHIFTIMM, sqshl_n, 0)
238 BUILTIN_VSDQ_I (USHIFTIMM, uqshl_n, 0)
240 /* Implemented by aarch64_cm<cmp><mode>. */
241 BUILTIN_VALLDI (BINOP, cmeq, 0)
242 BUILTIN_VALLDI (BINOP, cmge, 0)
243 BUILTIN_VALLDI (BINOP, cmgt, 0)
244 BUILTIN_VALLDI (BINOP, cmle, 0)
245 BUILTIN_VALLDI (BINOP, cmlt, 0)
246 /* Implemented by aarch64_cm<cmp><mode>. */
247 BUILTIN_VSDQ_I_DI (BINOP, cmgeu, 0)
248 BUILTIN_VSDQ_I_DI (BINOP, cmgtu, 0)
249 BUILTIN_VSDQ_I_DI (BINOP, cmtst, 0)
251 /* Implemented by reduc_<sur>plus_<mode>. */
252 BUILTIN_VALL (UNOP, reduc_splus_, 10)
253 BUILTIN_VDQ (UNOP, reduc_uplus_, 10)
255 /* Implemented by reduc_<maxmin_uns>_<mode>. */
256 BUILTIN_VDQIF (UNOP, reduc_smax_, 10)
257 BUILTIN_VDQIF (UNOP, reduc_smin_, 10)
258 BUILTIN_VDQ_BHSI (UNOP, reduc_umax_, 10)
259 BUILTIN_VDQ_BHSI (UNOP, reduc_umin_, 10)
260 BUILTIN_VDQF (UNOP, reduc_smax_nan_, 10)
261 BUILTIN_VDQF (UNOP, reduc_smin_nan_, 10)
263 /* Implemented by <maxmin><mode>3.
264 smax variants map to fmaxnm,
265 smax_nan variants map to fmax. */
266 BUILTIN_VDQIF (BINOP, smax, 3)
267 BUILTIN_VDQIF (BINOP, smin, 3)
268 BUILTIN_VDQ_BHSI (BINOP, umax, 3)
269 BUILTIN_VDQ_BHSI (BINOP, umin, 3)
270 BUILTIN_VDQF (BINOP, smax_nan, 3)
271 BUILTIN_VDQF (BINOP, smin_nan, 3)
273 /* Implemented by <frint_pattern><mode>2. */
274 BUILTIN_VDQF (UNOP, btrunc, 2)
275 BUILTIN_VDQF (UNOP, ceil, 2)
276 BUILTIN_VDQF (UNOP, floor, 2)
277 BUILTIN_VDQF (UNOP, nearbyint, 2)
278 BUILTIN_VDQF (UNOP, rint, 2)
279 BUILTIN_VDQF (UNOP, round, 2)
280 BUILTIN_VDQF_DF (UNOP, frintn, 2)
282 /* Implemented by l<fcvt_pattern><su_optab><VQDF:mode><vcvt_target>2. */
283 VAR1 (UNOP, lbtruncv2sf, 2, v2si)
284 VAR1 (UNOP, lbtruncv4sf, 2, v4si)
285 VAR1 (UNOP, lbtruncv2df, 2, v2di)
287 VAR1 (UNOP, lbtruncuv2sf, 2, v2si)
288 VAR1 (UNOP, lbtruncuv4sf, 2, v4si)
289 VAR1 (UNOP, lbtruncuv2df, 2, v2di)
291 VAR1 (UNOP, lroundv2sf, 2, v2si)
292 VAR1 (UNOP, lroundv4sf, 2, v4si)
293 VAR1 (UNOP, lroundv2df, 2, v2di)
294 /* Implemented by l<fcvt_pattern><su_optab><GPF:mode><GPI:mode>2. */
295 VAR1 (UNOP, lroundsf, 2, si)
296 VAR1 (UNOP, lrounddf, 2, di)
298 VAR1 (UNOP, lrounduv2sf, 2, v2si)
299 VAR1 (UNOP, lrounduv4sf, 2, v4si)
300 VAR1 (UNOP, lrounduv2df, 2, v2di)
301 VAR1 (UNOP, lroundusf, 2, si)
302 VAR1 (UNOP, lroundudf, 2, di)
304 VAR1 (UNOP, lceilv2sf, 2, v2si)
305 VAR1 (UNOP, lceilv4sf, 2, v4si)
306 VAR1 (UNOP, lceilv2df, 2, v2di)
308 VAR1 (UNOP, lceiluv2sf, 2, v2si)
309 VAR1 (UNOP, lceiluv4sf, 2, v4si)
310 VAR1 (UNOP, lceiluv2df, 2, v2di)
311 VAR1 (UNOP, lceilusf, 2, si)
312 VAR1 (UNOP, lceiludf, 2, di)
314 VAR1 (UNOP, lfloorv2sf, 2, v2si)
315 VAR1 (UNOP, lfloorv4sf, 2, v4si)
316 VAR1 (UNOP, lfloorv2df, 2, v2di)
318 VAR1 (UNOP, lflooruv2sf, 2, v2si)
319 VAR1 (UNOP, lflooruv4sf, 2, v4si)
320 VAR1 (UNOP, lflooruv2df, 2, v2di)
321 VAR1 (UNOP, lfloorusf, 2, si)
322 VAR1 (UNOP, lfloorudf, 2, di)
324 VAR1 (UNOP, lfrintnv2sf, 2, v2si)
325 VAR1 (UNOP, lfrintnv4sf, 2, v4si)
326 VAR1 (UNOP, lfrintnv2df, 2, v2di)
327 VAR1 (UNOP, lfrintnsf, 2, si)
328 VAR1 (UNOP, lfrintndf, 2, di)
330 VAR1 (UNOP, lfrintnuv2sf, 2, v2si)
331 VAR1 (UNOP, lfrintnuv4sf, 2, v4si)
332 VAR1 (UNOP, lfrintnuv2df, 2, v2di)
333 VAR1 (UNOP, lfrintnusf, 2, si)
334 VAR1 (UNOP, lfrintnudf, 2, di)
336 /* Implemented by <optab><fcvt_target><VDQF:mode>2. */
337 VAR1 (UNOP, floatv2si, 2, v2sf)
338 VAR1 (UNOP, floatv4si, 2, v4sf)
339 VAR1 (UNOP, floatv2di, 2, v2df)
341 VAR1 (UNOP, floatunsv2si, 2, v2sf)
342 VAR1 (UNOP, floatunsv4si, 2, v4sf)
343 VAR1 (UNOP, floatunsv2di, 2, v2df)
345 VAR5 (UNOPU, bswap, 10, v4hi, v8hi, v2si, v4si, v2di)
347 /* Implemented by
348 aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>. */
349 BUILTIN_VALL (BINOP, zip1, 0)
350 BUILTIN_VALL (BINOP, zip2, 0)
351 BUILTIN_VALL (BINOP, uzp1, 0)
352 BUILTIN_VALL (BINOP, uzp2, 0)
353 BUILTIN_VALL (BINOP, trn1, 0)
354 BUILTIN_VALL (BINOP, trn2, 0)
356 /* Implemented by
357 aarch64_frecp<FRECP:frecp_suffix><mode>. */
358 BUILTIN_GPF (UNOP, frecpe, 0)
359 BUILTIN_GPF (BINOP, frecps, 0)
360 BUILTIN_GPF (UNOP, frecpx, 0)
362 BUILTIN_VDQF (UNOP, frecpe, 0)
363 BUILTIN_VDQF (BINOP, frecps, 0)
365 /* Implemented by a mixture of abs2 patterns. Note the DImode builtin is
366 only ever used for the int64x1_t intrinsic, there is no scalar version. */
367 BUILTIN_VALLDI (UNOP, abs, 2)
369 VAR1 (UNOP, vec_unpacks_hi_, 10, v4sf)
370 VAR1 (BINOP, float_truncate_hi_, 0, v4sf)
372 VAR1 (UNOP, float_extend_lo_, 0, v2df)
373 VAR1 (UNOP, float_truncate_lo_, 0, v2sf)
375 /* Implemented by aarch64_ld1<VALL:mode>. */
376 BUILTIN_VALL (LOAD1, ld1, 0)
378 /* Implemented by aarch64_st1<VALL:mode>. */
379 BUILTIN_VALL (STORE1, st1, 0)
381 /* Implemented by fma<mode>4. */
382 BUILTIN_VDQF (TERNOP, fma, 4)
384 /* Implemented by aarch64_simd_bsl<mode>. */
385 BUILTIN_VDQQH (BSL_P, simd_bsl, 0)
386 BUILTIN_VSDQ_I_DI (BSL_U, simd_bsl, 0)
387 BUILTIN_VALLDIF (BSL_S, simd_bsl, 0)
389 /* Implemented by aarch64_crypto_aes<op><mode>. */
390 VAR1 (BINOPU, crypto_aese, 0, v16qi)
391 VAR1 (BINOPU, crypto_aesd, 0, v16qi)
392 VAR1 (UNOPU, crypto_aesmc, 0, v16qi)
393 VAR1 (UNOPU, crypto_aesimc, 0, v16qi)
395 /* Implemented by aarch64_crypto_sha1<op><mode>. */
396 VAR1 (UNOPU, crypto_sha1h, 0, si)
397 VAR1 (BINOPU, crypto_sha1su1, 0, v4si)
398 VAR1 (TERNOPU, crypto_sha1c, 0, v4si)
399 VAR1 (TERNOPU, crypto_sha1m, 0, v4si)
400 VAR1 (TERNOPU, crypto_sha1p, 0, v4si)
401 VAR1 (TERNOPU, crypto_sha1su0, 0, v4si)
403 /* Implemented by aarch64_crypto_sha256<op><mode>. */
404 VAR1 (TERNOPU, crypto_sha256h, 0, v4si)
405 VAR1 (TERNOPU, crypto_sha256h2, 0, v4si)
406 VAR1 (BINOPU, crypto_sha256su0, 0, v4si)
407 VAR1 (TERNOPU, crypto_sha256su1, 0, v4si)
409 /* Implemented by aarch64_crypto_pmull<mode>. */
410 VAR1 (BINOPP, crypto_pmull, 0, di)
411 VAR1 (BINOPP, crypto_pmull, 0, v2di)
413 /* Meta-op to check lane bounds of immediate in aarch64_expand_builtin. */
414 VAR1 (BINOPV, im_lane_bound, 0, si)