aarch64-simd-builtins.def revision 1.6 1 1.1 mrg /* Machine description for AArch64 architecture.
2 1.6 mrg Copyright (C) 2012-2017 Free Software Foundation, Inc.
3 1.1 mrg Contributed by ARM Ltd.
4 1.1 mrg
5 1.1 mrg This file is part of GCC.
6 1.1 mrg
7 1.1 mrg GCC is free software; you can redistribute it and/or modify it
8 1.1 mrg under the terms of the GNU General Public License as published by
9 1.1 mrg the Free Software Foundation; either version 3, or (at your option)
10 1.1 mrg any later version.
11 1.1 mrg
12 1.1 mrg GCC is distributed in the hope that it will be useful, but
13 1.1 mrg WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 1.1 mrg General Public License for more details.
16 1.1 mrg
17 1.1 mrg You should have received a copy of the GNU General Public License
18 1.1 mrg along with GCC; see the file COPYING3. If not see
19 1.1 mrg <http://www.gnu.org/licenses/>. */
20 1.1 mrg
21 1.3 mrg /* In the list below, the BUILTIN_<ITERATOR> macros expand to create
22 1.3 mrg builtins for each of the modes described by <ITERATOR>. When adding
23 1.3 mrg new builtins to this list, a helpful idiom to follow is to add
24 1.3 mrg a line for each pattern in the md file. Thus, ADDP, which has one
25 1.3 mrg pattern defined for the VD_BHSI iterator, and one for DImode, has two
26 1.3 mrg entries below.
27 1.3 mrg
28 1.3 mrg Parameter 1 is the 'type' of the intrinsic. This is used to
29 1.3 mrg describe the type modifiers (for example; unsigned) applied to
30 1.3 mrg each of the parameters to the intrinsic function.
31 1.3 mrg
32 1.3 mrg Parameter 2 is the name of the intrinsic. This is appended
33 1.3 mrg to `__builtin_aarch64_<name><mode>` to give the intrinsic name
34 1.3 mrg as exported to the front-ends.
35 1.3 mrg
36 1.3 mrg Parameter 3 describes how to map from the name to the CODE_FOR_
37 1.3 mrg macro holding the RTL pattern for the intrinsic. This mapping is:
38 1.3 mrg 0 - CODE_FOR_aarch64_<name><mode>
39 1.3 mrg 1-9 - CODE_FOR_<name><mode><1-9>
40 1.3 mrg 10 - CODE_FOR_<name><mode>. */
41 1.3 mrg
42 1.3 mrg BUILTIN_VDC (COMBINE, combine, 0)
43 1.6 mrg VAR1 (COMBINEP, combine, 0, di)
44 1.3 mrg BUILTIN_VB (BINOP, pmul, 0)
45 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP, fmulx, 0)
46 1.6 mrg BUILTIN_VHSDF_DF (UNOP, sqrt, 2)
47 1.3 mrg BUILTIN_VD_BHSI (BINOP, addp, 0)
48 1.3 mrg VAR1 (UNOP, addp, 0, di)
49 1.3 mrg BUILTIN_VDQ_BHSI (UNOP, clrsb, 2)
50 1.3 mrg BUILTIN_VDQ_BHSI (UNOP, clz, 2)
51 1.3 mrg BUILTIN_VS (UNOP, ctz, 2)
52 1.3 mrg BUILTIN_VB (UNOP, popcount, 2)
53 1.1 mrg
54 1.1 mrg /* Implemented by aarch64_<sur>q<r>shl<mode>. */
55 1.3 mrg BUILTIN_VSDQ_I (BINOP, sqshl, 0)
56 1.3 mrg BUILTIN_VSDQ_I (BINOP_UUS, uqshl, 0)
57 1.3 mrg BUILTIN_VSDQ_I (BINOP, sqrshl, 0)
58 1.3 mrg BUILTIN_VSDQ_I (BINOP_UUS, uqrshl, 0)
59 1.1 mrg /* Implemented by aarch64_<su_optab><optab><mode>. */
60 1.3 mrg BUILTIN_VSDQ_I (BINOP, sqadd, 0)
61 1.3 mrg BUILTIN_VSDQ_I (BINOPU, uqadd, 0)
62 1.3 mrg BUILTIN_VSDQ_I (BINOP, sqsub, 0)
63 1.3 mrg BUILTIN_VSDQ_I (BINOPU, uqsub, 0)
64 1.1 mrg /* Implemented by aarch64_<sur>qadd<mode>. */
65 1.3 mrg BUILTIN_VSDQ_I (BINOP_SSU, suqadd, 0)
66 1.3 mrg BUILTIN_VSDQ_I (BINOP_UUS, usqadd, 0)
67 1.1 mrg
68 1.1 mrg /* Implemented by aarch64_get_dreg<VSTRUCT:mode><VDC:mode>. */
69 1.3 mrg BUILTIN_VDC (GETREG, get_dregoi, 0)
70 1.3 mrg BUILTIN_VDC (GETREG, get_dregci, 0)
71 1.3 mrg BUILTIN_VDC (GETREG, get_dregxi, 0)
72 1.6 mrg VAR1 (GETREGP, get_dregoi, 0, di)
73 1.6 mrg VAR1 (GETREGP, get_dregci, 0, di)
74 1.6 mrg VAR1 (GETREGP, get_dregxi, 0, di)
75 1.1 mrg /* Implemented by aarch64_get_qreg<VSTRUCT:mode><VQ:mode>. */
76 1.3 mrg BUILTIN_VQ (GETREG, get_qregoi, 0)
77 1.3 mrg BUILTIN_VQ (GETREG, get_qregci, 0)
78 1.3 mrg BUILTIN_VQ (GETREG, get_qregxi, 0)
79 1.6 mrg VAR1 (GETREGP, get_qregoi, 0, v2di)
80 1.6 mrg VAR1 (GETREGP, get_qregci, 0, v2di)
81 1.6 mrg VAR1 (GETREGP, get_qregxi, 0, v2di)
82 1.1 mrg /* Implemented by aarch64_set_qreg<VSTRUCT:mode><VQ:mode>. */
83 1.3 mrg BUILTIN_VQ (SETREG, set_qregoi, 0)
84 1.3 mrg BUILTIN_VQ (SETREG, set_qregci, 0)
85 1.3 mrg BUILTIN_VQ (SETREG, set_qregxi, 0)
86 1.6 mrg VAR1 (SETREGP, set_qregoi, 0, v2di)
87 1.6 mrg VAR1 (SETREGP, set_qregci, 0, v2di)
88 1.6 mrg VAR1 (SETREGP, set_qregxi, 0, v2di)
89 1.1 mrg /* Implemented by aarch64_ld<VSTRUCT:nregs><VDC:mode>. */
90 1.3 mrg BUILTIN_VDC (LOADSTRUCT, ld2, 0)
91 1.3 mrg BUILTIN_VDC (LOADSTRUCT, ld3, 0)
92 1.3 mrg BUILTIN_VDC (LOADSTRUCT, ld4, 0)
93 1.1 mrg /* Implemented by aarch64_ld<VSTRUCT:nregs><VQ:mode>. */
94 1.3 mrg BUILTIN_VQ (LOADSTRUCT, ld2, 0)
95 1.3 mrg BUILTIN_VQ (LOADSTRUCT, ld3, 0)
96 1.3 mrg BUILTIN_VQ (LOADSTRUCT, ld4, 0)
97 1.3 mrg /* Implemented by aarch64_ld<VSTRUCT:nregs>r<VALLDIF:mode>. */
98 1.3 mrg BUILTIN_VALLDIF (LOADSTRUCT, ld2r, 0)
99 1.3 mrg BUILTIN_VALLDIF (LOADSTRUCT, ld3r, 0)
100 1.3 mrg BUILTIN_VALLDIF (LOADSTRUCT, ld4r, 0)
101 1.3 mrg /* Implemented by aarch64_ld<VSTRUCT:nregs>_lane<VQ:mode>. */
102 1.4 mrg BUILTIN_VALLDIF (LOADSTRUCT_LANE, ld2_lane, 0)
103 1.4 mrg BUILTIN_VALLDIF (LOADSTRUCT_LANE, ld3_lane, 0)
104 1.4 mrg BUILTIN_VALLDIF (LOADSTRUCT_LANE, ld4_lane, 0)
105 1.1 mrg /* Implemented by aarch64_st<VSTRUCT:nregs><VDC:mode>. */
106 1.3 mrg BUILTIN_VDC (STORESTRUCT, st2, 0)
107 1.3 mrg BUILTIN_VDC (STORESTRUCT, st3, 0)
108 1.3 mrg BUILTIN_VDC (STORESTRUCT, st4, 0)
109 1.1 mrg /* Implemented by aarch64_st<VSTRUCT:nregs><VQ:mode>. */
110 1.3 mrg BUILTIN_VQ (STORESTRUCT, st2, 0)
111 1.3 mrg BUILTIN_VQ (STORESTRUCT, st3, 0)
112 1.3 mrg BUILTIN_VQ (STORESTRUCT, st4, 0)
113 1.3 mrg
114 1.4 mrg BUILTIN_VALLDIF (STORESTRUCT_LANE, st2_lane, 0)
115 1.4 mrg BUILTIN_VALLDIF (STORESTRUCT_LANE, st3_lane, 0)
116 1.4 mrg BUILTIN_VALLDIF (STORESTRUCT_LANE, st4_lane, 0)
117 1.3 mrg
118 1.3 mrg BUILTIN_VQW (BINOP, saddl2, 0)
119 1.3 mrg BUILTIN_VQW (BINOP, uaddl2, 0)
120 1.3 mrg BUILTIN_VQW (BINOP, ssubl2, 0)
121 1.3 mrg BUILTIN_VQW (BINOP, usubl2, 0)
122 1.3 mrg BUILTIN_VQW (BINOP, saddw2, 0)
123 1.3 mrg BUILTIN_VQW (BINOP, uaddw2, 0)
124 1.3 mrg BUILTIN_VQW (BINOP, ssubw2, 0)
125 1.3 mrg BUILTIN_VQW (BINOP, usubw2, 0)
126 1.1 mrg /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>l<mode>. */
127 1.3 mrg BUILTIN_VD_BHSI (BINOP, saddl, 0)
128 1.3 mrg BUILTIN_VD_BHSI (BINOP, uaddl, 0)
129 1.3 mrg BUILTIN_VD_BHSI (BINOP, ssubl, 0)
130 1.3 mrg BUILTIN_VD_BHSI (BINOP, usubl, 0)
131 1.1 mrg /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>. */
132 1.3 mrg BUILTIN_VD_BHSI (BINOP, saddw, 0)
133 1.3 mrg BUILTIN_VD_BHSI (BINOP, uaddw, 0)
134 1.3 mrg BUILTIN_VD_BHSI (BINOP, ssubw, 0)
135 1.3 mrg BUILTIN_VD_BHSI (BINOP, usubw, 0)
136 1.1 mrg /* Implemented by aarch64_<sur>h<addsub><mode>. */
137 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, shadd, 0)
138 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, shsub, 0)
139 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, uhadd, 0)
140 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, uhsub, 0)
141 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, srhadd, 0)
142 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, urhadd, 0)
143 1.1 mrg /* Implemented by aarch64_<sur><addsub>hn<mode>. */
144 1.3 mrg BUILTIN_VQN (BINOP, addhn, 0)
145 1.3 mrg BUILTIN_VQN (BINOP, subhn, 0)
146 1.3 mrg BUILTIN_VQN (BINOP, raddhn, 0)
147 1.3 mrg BUILTIN_VQN (BINOP, rsubhn, 0)
148 1.1 mrg /* Implemented by aarch64_<sur><addsub>hn2<mode>. */
149 1.3 mrg BUILTIN_VQN (TERNOP, addhn2, 0)
150 1.3 mrg BUILTIN_VQN (TERNOP, subhn2, 0)
151 1.3 mrg BUILTIN_VQN (TERNOP, raddhn2, 0)
152 1.3 mrg BUILTIN_VQN (TERNOP, rsubhn2, 0)
153 1.1 mrg
154 1.3 mrg BUILTIN_VSQN_HSDI (UNOP, sqmovun, 0)
155 1.1 mrg /* Implemented by aarch64_<sur>qmovn<mode>. */
156 1.3 mrg BUILTIN_VSQN_HSDI (UNOP, sqmovn, 0)
157 1.3 mrg BUILTIN_VSQN_HSDI (UNOP, uqmovn, 0)
158 1.1 mrg /* Implemented by aarch64_s<optab><mode>. */
159 1.3 mrg BUILTIN_VSDQ_I (UNOP, sqabs, 0)
160 1.3 mrg BUILTIN_VSDQ_I (UNOP, sqneg, 0)
161 1.1 mrg
162 1.1 mrg /* Implemented by aarch64_sqdml<SBINQOPS:as>l<mode>. */
163 1.3 mrg BUILTIN_VSD_HSI (TERNOP, sqdmlal, 0)
164 1.3 mrg BUILTIN_VSD_HSI (TERNOP, sqdmlsl, 0)
165 1.3 mrg /* Implemented by aarch64_sqdml<SBINQOPS:as>l_lane<mode>. */
166 1.3 mrg BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlal_lane, 0)
167 1.3 mrg BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlsl_lane, 0)
168 1.3 mrg /* Implemented by aarch64_sqdml<SBINQOPS:as>l_laneq<mode>. */
169 1.3 mrg BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlal_laneq, 0)
170 1.3 mrg BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlsl_laneq, 0)
171 1.1 mrg /* Implemented by aarch64_sqdml<SBINQOPS:as>l_n<mode>. */
172 1.3 mrg BUILTIN_VD_HSI (TERNOP, sqdmlal_n, 0)
173 1.3 mrg BUILTIN_VD_HSI (TERNOP, sqdmlsl_n, 0)
174 1.1 mrg
175 1.3 mrg BUILTIN_VQ_HSI (TERNOP, sqdmlal2, 0)
176 1.3 mrg BUILTIN_VQ_HSI (TERNOP, sqdmlsl2, 0)
177 1.3 mrg BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlal2_lane, 0)
178 1.3 mrg BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlsl2_lane, 0)
179 1.3 mrg BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlal2_laneq, 0)
180 1.3 mrg BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlsl2_laneq, 0)
181 1.3 mrg BUILTIN_VQ_HSI (TERNOP, sqdmlal2_n, 0)
182 1.3 mrg BUILTIN_VQ_HSI (TERNOP, sqdmlsl2_n, 0)
183 1.3 mrg
184 1.3 mrg BUILTIN_VSD_HSI (BINOP, sqdmull, 0)
185 1.3 mrg BUILTIN_VSD_HSI (TERNOP_LANE, sqdmull_lane, 0)
186 1.3 mrg BUILTIN_VSD_HSI (TERNOP_LANE, sqdmull_laneq, 0)
187 1.3 mrg BUILTIN_VD_HSI (BINOP, sqdmull_n, 0)
188 1.3 mrg BUILTIN_VQ_HSI (BINOP, sqdmull2, 0)
189 1.3 mrg BUILTIN_VQ_HSI (TERNOP_LANE, sqdmull2_lane, 0)
190 1.3 mrg BUILTIN_VQ_HSI (TERNOP_LANE, sqdmull2_laneq, 0)
191 1.3 mrg BUILTIN_VQ_HSI (BINOP, sqdmull2_n, 0)
192 1.1 mrg /* Implemented by aarch64_sq<r>dmulh<mode>. */
193 1.3 mrg BUILTIN_VSDQ_HSI (BINOP, sqdmulh, 0)
194 1.3 mrg BUILTIN_VSDQ_HSI (BINOP, sqrdmulh, 0)
195 1.1 mrg /* Implemented by aarch64_sq<r>dmulh_lane<q><mode>. */
196 1.3 mrg BUILTIN_VSDQ_HSI (TERNOP_LANE, sqdmulh_lane, 0)
197 1.3 mrg BUILTIN_VSDQ_HSI (TERNOP_LANE, sqdmulh_laneq, 0)
198 1.3 mrg BUILTIN_VSDQ_HSI (TERNOP_LANE, sqrdmulh_lane, 0)
199 1.3 mrg BUILTIN_VSDQ_HSI (TERNOP_LANE, sqrdmulh_laneq, 0)
200 1.1 mrg
201 1.3 mrg BUILTIN_VSDQ_I_DI (BINOP, ashl, 3)
202 1.1 mrg /* Implemented by aarch64_<sur>shl<mode>. */
203 1.3 mrg BUILTIN_VSDQ_I_DI (BINOP, sshl, 0)
204 1.3 mrg BUILTIN_VSDQ_I_DI (BINOP_UUS, ushl, 0)
205 1.3 mrg BUILTIN_VSDQ_I_DI (BINOP, srshl, 0)
206 1.3 mrg BUILTIN_VSDQ_I_DI (BINOP_UUS, urshl, 0)
207 1.3 mrg
208 1.3 mrg BUILTIN_VDQ_I (SHIFTIMM, ashr, 3)
209 1.3 mrg VAR1 (SHIFTIMM, ashr_simd, 0, di)
210 1.3 mrg BUILTIN_VDQ_I (SHIFTIMM, lshr, 3)
211 1.3 mrg VAR1 (USHIFTIMM, lshr_simd, 0, di)
212 1.1 mrg /* Implemented by aarch64_<sur>shr_n<mode>. */
213 1.3 mrg BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n, 0)
214 1.3 mrg BUILTIN_VSDQ_I_DI (USHIFTIMM, urshr_n, 0)
215 1.1 mrg /* Implemented by aarch64_<sur>sra_n<mode>. */
216 1.3 mrg BUILTIN_VSDQ_I_DI (SHIFTACC, ssra_n, 0)
217 1.3 mrg BUILTIN_VSDQ_I_DI (USHIFTACC, usra_n, 0)
218 1.3 mrg BUILTIN_VSDQ_I_DI (SHIFTACC, srsra_n, 0)
219 1.3 mrg BUILTIN_VSDQ_I_DI (USHIFTACC, ursra_n, 0)
220 1.1 mrg /* Implemented by aarch64_<sur>shll_n<mode>. */
221 1.3 mrg BUILTIN_VD_BHSI (SHIFTIMM, sshll_n, 0)
222 1.3 mrg BUILTIN_VD_BHSI (USHIFTIMM, ushll_n, 0)
223 1.1 mrg /* Implemented by aarch64_<sur>shll2_n<mode>. */
224 1.3 mrg BUILTIN_VQW (SHIFTIMM, sshll2_n, 0)
225 1.3 mrg BUILTIN_VQW (SHIFTIMM, ushll2_n, 0)
226 1.1 mrg /* Implemented by aarch64_<sur>q<r>shr<u>n_n<mode>. */
227 1.3 mrg BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrun_n, 0)
228 1.3 mrg BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrun_n, 0)
229 1.3 mrg BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrn_n, 0)
230 1.3 mrg BUILTIN_VSQN_HSDI (USHIFTIMM, uqshrn_n, 0)
231 1.3 mrg BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrn_n, 0)
232 1.3 mrg BUILTIN_VSQN_HSDI (USHIFTIMM, uqrshrn_n, 0)
233 1.1 mrg /* Implemented by aarch64_<sur>s<lr>i_n<mode>. */
234 1.3 mrg BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n, 0)
235 1.3 mrg BUILTIN_VSDQ_I_DI (USHIFTACC, usri_n, 0)
236 1.3 mrg BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n, 0)
237 1.6 mrg VAR2 (SHIFTINSERTP, ssli_n, 0, di, v2di)
238 1.3 mrg BUILTIN_VSDQ_I_DI (USHIFTACC, usli_n, 0)
239 1.1 mrg /* Implemented by aarch64_<sur>qshl<u>_n<mode>. */
240 1.3 mrg BUILTIN_VSDQ_I (SHIFTIMM_USS, sqshlu_n, 0)
241 1.3 mrg BUILTIN_VSDQ_I (SHIFTIMM, sqshl_n, 0)
242 1.3 mrg BUILTIN_VSDQ_I (USHIFTIMM, uqshl_n, 0)
243 1.3 mrg
244 1.3 mrg /* Implemented by aarch64_reduc_plus_<mode>. */
245 1.3 mrg BUILTIN_VALL (UNOP, reduc_plus_scal_, 10)
246 1.3 mrg
247 1.3 mrg /* Implemented by reduc_<maxmin_uns>_scal_<mode> (producing scalar). */
248 1.6 mrg BUILTIN_VDQIF_F16 (UNOP, reduc_smax_scal_, 10)
249 1.6 mrg BUILTIN_VDQIF_F16 (UNOP, reduc_smin_scal_, 10)
250 1.3 mrg BUILTIN_VDQ_BHSI (UNOPU, reduc_umax_scal_, 10)
251 1.3 mrg BUILTIN_VDQ_BHSI (UNOPU, reduc_umin_scal_, 10)
252 1.6 mrg BUILTIN_VHSDF (UNOP, reduc_smax_nan_scal_, 10)
253 1.6 mrg BUILTIN_VHSDF (UNOP, reduc_smin_nan_scal_, 10)
254 1.3 mrg
255 1.6 mrg /* Implemented by <maxmin_uns><mode>3.
256 1.3 mrg smax variants map to fmaxnm,
257 1.3 mrg smax_nan variants map to fmax. */
258 1.4 mrg BUILTIN_VDQ_BHSI (BINOP, smax, 3)
259 1.4 mrg BUILTIN_VDQ_BHSI (BINOP, smin, 3)
260 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, umax, 3)
261 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, umin, 3)
262 1.6 mrg BUILTIN_VHSDF_DF (BINOP, smax_nan, 3)
263 1.6 mrg BUILTIN_VHSDF_DF (BINOP, smin_nan, 3)
264 1.3 mrg
265 1.6 mrg /* Implemented by <maxmin_uns><mode>3. */
266 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP, fmax, 3)
267 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP, fmin, 3)
268 1.4 mrg
269 1.3 mrg /* Implemented by aarch64_<maxmin_uns>p<mode>. */
270 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, smaxp, 0)
271 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, sminp, 0)
272 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, umaxp, 0)
273 1.3 mrg BUILTIN_VDQ_BHSI (BINOP, uminp, 0)
274 1.6 mrg BUILTIN_VHSDF (BINOP, smaxp, 0)
275 1.6 mrg BUILTIN_VHSDF (BINOP, sminp, 0)
276 1.6 mrg BUILTIN_VHSDF (BINOP, smax_nanp, 0)
277 1.6 mrg BUILTIN_VHSDF (BINOP, smin_nanp, 0)
278 1.3 mrg
279 1.3 mrg /* Implemented by <frint_pattern><mode>2. */
280 1.6 mrg BUILTIN_VHSDF (UNOP, btrunc, 2)
281 1.6 mrg BUILTIN_VHSDF (UNOP, ceil, 2)
282 1.6 mrg BUILTIN_VHSDF (UNOP, floor, 2)
283 1.6 mrg BUILTIN_VHSDF (UNOP, nearbyint, 2)
284 1.6 mrg BUILTIN_VHSDF (UNOP, rint, 2)
285 1.6 mrg BUILTIN_VHSDF (UNOP, round, 2)
286 1.6 mrg BUILTIN_VHSDF_DF (UNOP, frintn, 2)
287 1.6 mrg
288 1.6 mrg VAR1 (UNOP, btrunc, 2, hf)
289 1.6 mrg VAR1 (UNOP, ceil, 2, hf)
290 1.6 mrg VAR1 (UNOP, floor, 2, hf)
291 1.6 mrg VAR1 (UNOP, frintn, 2, hf)
292 1.6 mrg VAR1 (UNOP, nearbyint, 2, hf)
293 1.6 mrg VAR1 (UNOP, rint, 2, hf)
294 1.6 mrg VAR1 (UNOP, round, 2, hf)
295 1.3 mrg
296 1.3 mrg /* Implemented by l<fcvt_pattern><su_optab><VQDF:mode><vcvt_target>2. */
297 1.6 mrg VAR1 (UNOP, lbtruncv4hf, 2, v4hi)
298 1.6 mrg VAR1 (UNOP, lbtruncv8hf, 2, v8hi)
299 1.3 mrg VAR1 (UNOP, lbtruncv2sf, 2, v2si)
300 1.3 mrg VAR1 (UNOP, lbtruncv4sf, 2, v4si)
301 1.3 mrg VAR1 (UNOP, lbtruncv2df, 2, v2di)
302 1.3 mrg
303 1.6 mrg VAR1 (UNOPUS, lbtruncuv4hf, 2, v4hi)
304 1.6 mrg VAR1 (UNOPUS, lbtruncuv8hf, 2, v8hi)
305 1.4 mrg VAR1 (UNOPUS, lbtruncuv2sf, 2, v2si)
306 1.4 mrg VAR1 (UNOPUS, lbtruncuv4sf, 2, v4si)
307 1.4 mrg VAR1 (UNOPUS, lbtruncuv2df, 2, v2di)
308 1.3 mrg
309 1.6 mrg VAR1 (UNOP, lroundv4hf, 2, v4hi)
310 1.6 mrg VAR1 (UNOP, lroundv8hf, 2, v8hi)
311 1.3 mrg VAR1 (UNOP, lroundv2sf, 2, v2si)
312 1.3 mrg VAR1 (UNOP, lroundv4sf, 2, v4si)
313 1.3 mrg VAR1 (UNOP, lroundv2df, 2, v2di)
314 1.6 mrg /* Implemented by l<fcvt_pattern><su_optab><GPF_F16:mode><GPI:mode>2. */
315 1.6 mrg BUILTIN_GPI_I16 (UNOP, lroundhf, 2)
316 1.3 mrg VAR1 (UNOP, lroundsf, 2, si)
317 1.3 mrg VAR1 (UNOP, lrounddf, 2, di)
318 1.3 mrg
319 1.6 mrg VAR1 (UNOPUS, lrounduv4hf, 2, v4hi)
320 1.6 mrg VAR1 (UNOPUS, lrounduv8hf, 2, v8hi)
321 1.4 mrg VAR1 (UNOPUS, lrounduv2sf, 2, v2si)
322 1.4 mrg VAR1 (UNOPUS, lrounduv4sf, 2, v4si)
323 1.4 mrg VAR1 (UNOPUS, lrounduv2df, 2, v2di)
324 1.6 mrg BUILTIN_GPI_I16 (UNOPUS, lrounduhf, 2)
325 1.4 mrg VAR1 (UNOPUS, lroundusf, 2, si)
326 1.4 mrg VAR1 (UNOPUS, lroundudf, 2, di)
327 1.3 mrg
328 1.6 mrg VAR1 (UNOP, lceilv4hf, 2, v4hi)
329 1.6 mrg VAR1 (UNOP, lceilv8hf, 2, v8hi)
330 1.3 mrg VAR1 (UNOP, lceilv2sf, 2, v2si)
331 1.3 mrg VAR1 (UNOP, lceilv4sf, 2, v4si)
332 1.3 mrg VAR1 (UNOP, lceilv2df, 2, v2di)
333 1.6 mrg BUILTIN_GPI_I16 (UNOP, lceilhf, 2)
334 1.3 mrg
335 1.6 mrg VAR1 (UNOPUS, lceiluv4hf, 2, v4hi)
336 1.6 mrg VAR1 (UNOPUS, lceiluv8hf, 2, v8hi)
337 1.4 mrg VAR1 (UNOPUS, lceiluv2sf, 2, v2si)
338 1.4 mrg VAR1 (UNOPUS, lceiluv4sf, 2, v4si)
339 1.4 mrg VAR1 (UNOPUS, lceiluv2df, 2, v2di)
340 1.6 mrg BUILTIN_GPI_I16 (UNOPUS, lceiluhf, 2)
341 1.4 mrg VAR1 (UNOPUS, lceilusf, 2, si)
342 1.4 mrg VAR1 (UNOPUS, lceiludf, 2, di)
343 1.3 mrg
344 1.6 mrg VAR1 (UNOP, lfloorv4hf, 2, v4hi)
345 1.6 mrg VAR1 (UNOP, lfloorv8hf, 2, v8hi)
346 1.3 mrg VAR1 (UNOP, lfloorv2sf, 2, v2si)
347 1.3 mrg VAR1 (UNOP, lfloorv4sf, 2, v4si)
348 1.3 mrg VAR1 (UNOP, lfloorv2df, 2, v2di)
349 1.6 mrg BUILTIN_GPI_I16 (UNOP, lfloorhf, 2)
350 1.3 mrg
351 1.6 mrg VAR1 (UNOPUS, lflooruv4hf, 2, v4hi)
352 1.6 mrg VAR1 (UNOPUS, lflooruv8hf, 2, v8hi)
353 1.4 mrg VAR1 (UNOPUS, lflooruv2sf, 2, v2si)
354 1.4 mrg VAR1 (UNOPUS, lflooruv4sf, 2, v4si)
355 1.4 mrg VAR1 (UNOPUS, lflooruv2df, 2, v2di)
356 1.6 mrg BUILTIN_GPI_I16 (UNOPUS, lflooruhf, 2)
357 1.4 mrg VAR1 (UNOPUS, lfloorusf, 2, si)
358 1.4 mrg VAR1 (UNOPUS, lfloorudf, 2, di)
359 1.3 mrg
360 1.6 mrg VAR1 (UNOP, lfrintnv4hf, 2, v4hi)
361 1.6 mrg VAR1 (UNOP, lfrintnv8hf, 2, v8hi)
362 1.3 mrg VAR1 (UNOP, lfrintnv2sf, 2, v2si)
363 1.3 mrg VAR1 (UNOP, lfrintnv4sf, 2, v4si)
364 1.3 mrg VAR1 (UNOP, lfrintnv2df, 2, v2di)
365 1.6 mrg BUILTIN_GPI_I16 (UNOP, lfrintnhf, 2)
366 1.3 mrg VAR1 (UNOP, lfrintnsf, 2, si)
367 1.3 mrg VAR1 (UNOP, lfrintndf, 2, di)
368 1.3 mrg
369 1.6 mrg VAR1 (UNOPUS, lfrintnuv4hf, 2, v4hi)
370 1.6 mrg VAR1 (UNOPUS, lfrintnuv8hf, 2, v8hi)
371 1.4 mrg VAR1 (UNOPUS, lfrintnuv2sf, 2, v2si)
372 1.4 mrg VAR1 (UNOPUS, lfrintnuv4sf, 2, v4si)
373 1.4 mrg VAR1 (UNOPUS, lfrintnuv2df, 2, v2di)
374 1.6 mrg BUILTIN_GPI_I16 (UNOPUS, lfrintnuhf, 2)
375 1.4 mrg VAR1 (UNOPUS, lfrintnusf, 2, si)
376 1.4 mrg VAR1 (UNOPUS, lfrintnudf, 2, di)
377 1.3 mrg
378 1.3 mrg /* Implemented by <optab><fcvt_target><VDQF:mode>2. */
379 1.6 mrg VAR1 (UNOP, floatv4hi, 2, v4hf)
380 1.6 mrg VAR1 (UNOP, floatv8hi, 2, v8hf)
381 1.3 mrg VAR1 (UNOP, floatv2si, 2, v2sf)
382 1.3 mrg VAR1 (UNOP, floatv4si, 2, v4sf)
383 1.3 mrg VAR1 (UNOP, floatv2di, 2, v2df)
384 1.3 mrg
385 1.6 mrg VAR1 (UNOP, floatunsv4hi, 2, v4hf)
386 1.6 mrg VAR1 (UNOP, floatunsv8hi, 2, v8hf)
387 1.3 mrg VAR1 (UNOP, floatunsv2si, 2, v2sf)
388 1.3 mrg VAR1 (UNOP, floatunsv4si, 2, v4sf)
389 1.3 mrg VAR1 (UNOP, floatunsv2di, 2, v2df)
390 1.3 mrg
391 1.3 mrg VAR5 (UNOPU, bswap, 2, v4hi, v8hi, v2si, v4si, v2di)
392 1.3 mrg
393 1.3 mrg BUILTIN_VB (UNOP, rbit, 0)
394 1.1 mrg
395 1.1 mrg /* Implemented by
396 1.1 mrg aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>. */
397 1.3 mrg BUILTIN_VALL (BINOP, zip1, 0)
398 1.3 mrg BUILTIN_VALL (BINOP, zip2, 0)
399 1.3 mrg BUILTIN_VALL (BINOP, uzp1, 0)
400 1.3 mrg BUILTIN_VALL (BINOP, uzp2, 0)
401 1.3 mrg BUILTIN_VALL (BINOP, trn1, 0)
402 1.3 mrg BUILTIN_VALL (BINOP, trn2, 0)
403 1.3 mrg
404 1.3 mrg /* Implemented by
405 1.3 mrg aarch64_frecp<FRECP:frecp_suffix><mode>. */
406 1.6 mrg BUILTIN_GPF_F16 (UNOP, frecpe, 0)
407 1.6 mrg BUILTIN_GPF_F16 (UNOP, frecpx, 0)
408 1.3 mrg
409 1.3 mrg BUILTIN_VDQ_SI (UNOP, urecpe, 0)
410 1.3 mrg
411 1.6 mrg BUILTIN_VHSDF (UNOP, frecpe, 0)
412 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP, frecps, 0)
413 1.3 mrg
414 1.3 mrg /* Implemented by a mixture of abs2 patterns. Note the DImode builtin is
415 1.3 mrg only ever used for the int64x1_t intrinsic, there is no scalar version. */
416 1.3 mrg BUILTIN_VSDQ_I_DI (UNOP, abs, 0)
417 1.6 mrg BUILTIN_VHSDF (UNOP, abs, 2)
418 1.6 mrg VAR1 (UNOP, abs, 2, hf)
419 1.3 mrg
420 1.4 mrg BUILTIN_VQ_HSF (UNOP, vec_unpacks_hi_, 10)
421 1.3 mrg VAR1 (BINOP, float_truncate_hi_, 0, v4sf)
422 1.4 mrg VAR1 (BINOP, float_truncate_hi_, 0, v8hf)
423 1.3 mrg
424 1.3 mrg VAR1 (UNOP, float_extend_lo_, 0, v2df)
425 1.4 mrg VAR1 (UNOP, float_extend_lo_, 0, v4sf)
426 1.4 mrg BUILTIN_VDF (UNOP, float_truncate_lo_, 0)
427 1.1 mrg
428 1.4 mrg /* Implemented by aarch64_ld1<VALL_F16:mode>. */
429 1.4 mrg BUILTIN_VALL_F16 (LOAD1, ld1, 0)
430 1.6 mrg VAR1(STORE1P, ld1, 0, v2di)
431 1.1 mrg
432 1.4 mrg /* Implemented by aarch64_st1<VALL_F16:mode>. */
433 1.4 mrg BUILTIN_VALL_F16 (STORE1, st1, 0)
434 1.6 mrg VAR1(STORE1P, st1, 0, v2di)
435 1.3 mrg
436 1.3 mrg /* Implemented by fma<mode>4. */
437 1.6 mrg BUILTIN_VHSDF (TERNOP, fma, 4)
438 1.6 mrg VAR1 (TERNOP, fma, 4, hf)
439 1.6 mrg /* Implemented by fnma<mode>4. */
440 1.6 mrg BUILTIN_VHSDF (TERNOP, fnma, 4)
441 1.6 mrg VAR1 (TERNOP, fnma, 4, hf)
442 1.3 mrg
443 1.3 mrg /* Implemented by aarch64_simd_bsl<mode>. */
444 1.3 mrg BUILTIN_VDQQH (BSL_P, simd_bsl, 0)
445 1.6 mrg VAR2 (BSL_P, simd_bsl,0, di, v2di)
446 1.3 mrg BUILTIN_VSDQ_I_DI (BSL_U, simd_bsl, 0)
447 1.3 mrg BUILTIN_VALLDIF (BSL_S, simd_bsl, 0)
448 1.3 mrg
449 1.3 mrg /* Implemented by aarch64_crypto_aes<op><mode>. */
450 1.3 mrg VAR1 (BINOPU, crypto_aese, 0, v16qi)
451 1.3 mrg VAR1 (BINOPU, crypto_aesd, 0, v16qi)
452 1.3 mrg VAR1 (UNOPU, crypto_aesmc, 0, v16qi)
453 1.3 mrg VAR1 (UNOPU, crypto_aesimc, 0, v16qi)
454 1.3 mrg
455 1.3 mrg /* Implemented by aarch64_crypto_sha1<op><mode>. */
456 1.3 mrg VAR1 (UNOPU, crypto_sha1h, 0, si)
457 1.3 mrg VAR1 (BINOPU, crypto_sha1su1, 0, v4si)
458 1.3 mrg VAR1 (TERNOPU, crypto_sha1c, 0, v4si)
459 1.3 mrg VAR1 (TERNOPU, crypto_sha1m, 0, v4si)
460 1.3 mrg VAR1 (TERNOPU, crypto_sha1p, 0, v4si)
461 1.3 mrg VAR1 (TERNOPU, crypto_sha1su0, 0, v4si)
462 1.3 mrg
463 1.3 mrg /* Implemented by aarch64_crypto_sha256<op><mode>. */
464 1.3 mrg VAR1 (TERNOPU, crypto_sha256h, 0, v4si)
465 1.3 mrg VAR1 (TERNOPU, crypto_sha256h2, 0, v4si)
466 1.3 mrg VAR1 (BINOPU, crypto_sha256su0, 0, v4si)
467 1.3 mrg VAR1 (TERNOPU, crypto_sha256su1, 0, v4si)
468 1.3 mrg
469 1.3 mrg /* Implemented by aarch64_crypto_pmull<mode>. */
470 1.3 mrg VAR1 (BINOPP, crypto_pmull, 0, di)
471 1.3 mrg VAR1 (BINOPP, crypto_pmull, 0, v2di)
472 1.1 mrg
473 1.4 mrg /* Implemented by aarch64_tbl3<mode>. */
474 1.4 mrg VAR1 (BINOP, tbl3, 0, v8qi)
475 1.4 mrg VAR1 (BINOP, tbl3, 0, v16qi)
476 1.4 mrg
477 1.4 mrg /* Implemented by aarch64_qtbl3<mode>. */
478 1.4 mrg VAR1 (BINOP, qtbl3, 0, v8qi)
479 1.4 mrg VAR1 (BINOP, qtbl3, 0, v16qi)
480 1.4 mrg
481 1.4 mrg /* Implemented by aarch64_qtbl4<mode>. */
482 1.4 mrg VAR1 (BINOP, qtbl4, 0, v8qi)
483 1.4 mrg VAR1 (BINOP, qtbl4, 0, v16qi)
484 1.4 mrg
485 1.4 mrg /* Implemented by aarch64_tbx4<mode>. */
486 1.4 mrg VAR1 (TERNOP, tbx4, 0, v8qi)
487 1.4 mrg VAR1 (TERNOP, tbx4, 0, v16qi)
488 1.4 mrg
489 1.4 mrg /* Implemented by aarch64_qtbx3<mode>. */
490 1.4 mrg VAR1 (TERNOP, qtbx3, 0, v8qi)
491 1.4 mrg VAR1 (TERNOP, qtbx3, 0, v16qi)
492 1.4 mrg
493 1.4 mrg /* Implemented by aarch64_qtbx4<mode>. */
494 1.4 mrg VAR1 (TERNOP, qtbx4, 0, v8qi)
495 1.4 mrg VAR1 (TERNOP, qtbx4, 0, v16qi)
496 1.4 mrg
497 1.6 mrg /* Builtins for ARMv8.1-A Adv.SIMD instructions. */
498 1.4 mrg
499 1.4 mrg /* Implemented by aarch64_sqrdml<SQRDMLH_AS:rdma_as>h<mode>. */
500 1.4 mrg BUILTIN_VSDQ_HSI (TERNOP, sqrdmlah, 0)
501 1.4 mrg BUILTIN_VSDQ_HSI (TERNOP, sqrdmlsh, 0)
502 1.4 mrg
503 1.4 mrg /* Implemented by aarch64_sqrdml<SQRDMLH_AS:rdma_as>h_lane<mode>. */
504 1.4 mrg BUILTIN_VSDQ_HSI (QUADOP_LANE, sqrdmlah_lane, 0)
505 1.4 mrg BUILTIN_VSDQ_HSI (QUADOP_LANE, sqrdmlsh_lane, 0)
506 1.4 mrg
507 1.4 mrg /* Implemented by aarch64_sqrdml<SQRDMLH_AS:rdma_as>h_laneq<mode>. */
508 1.4 mrg BUILTIN_VSDQ_HSI (QUADOP_LANE, sqrdmlah_laneq, 0)
509 1.4 mrg BUILTIN_VSDQ_HSI (QUADOP_LANE, sqrdmlsh_laneq, 0)
510 1.6 mrg
511 1.6 mrg /* Implemented by <FCVT_F2FIXED/FIXED2F:fcvt_fixed_insn><*><*>3. */
512 1.6 mrg BUILTIN_VSDQ_HSDI (SHIFTIMM, scvtf, 3)
513 1.6 mrg BUILTIN_VSDQ_HSDI (FCVTIMM_SUS, ucvtf, 3)
514 1.6 mrg BUILTIN_VHSDF_HSDF (SHIFTIMM, fcvtzs, 3)
515 1.6 mrg BUILTIN_VHSDF_HSDF (SHIFTIMM_USS, fcvtzu, 3)
516 1.6 mrg VAR1 (SHIFTIMM, scvtfsi, 3, hf)
517 1.6 mrg VAR1 (SHIFTIMM, scvtfdi, 3, hf)
518 1.6 mrg VAR1 (FCVTIMM_SUS, ucvtfsi, 3, hf)
519 1.6 mrg VAR1 (FCVTIMM_SUS, ucvtfdi, 3, hf)
520 1.6 mrg BUILTIN_GPI (SHIFTIMM, fcvtzshf, 3)
521 1.6 mrg BUILTIN_GPI (SHIFTIMM_USS, fcvtzuhf, 3)
522 1.6 mrg
523 1.6 mrg /* Implemented by aarch64_rsqrte<mode>. */
524 1.6 mrg BUILTIN_VHSDF_HSDF (UNOP, rsqrte, 0)
525 1.6 mrg
526 1.6 mrg /* Implemented by aarch64_rsqrts<mode>. */
527 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP, rsqrts, 0)
528 1.6 mrg
529 1.6 mrg /* Implemented by fabd<mode>3. */
530 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP, fabd, 3)
531 1.6 mrg
532 1.6 mrg /* Implemented by aarch64_faddp<mode>. */
533 1.6 mrg BUILTIN_VHSDF (BINOP, faddp, 0)
534 1.6 mrg
535 1.6 mrg /* Implemented by aarch64_cm<optab><mode>. */
536 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP_USS, cmeq, 0)
537 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP_USS, cmge, 0)
538 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP_USS, cmgt, 0)
539 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP_USS, cmle, 0)
540 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP_USS, cmlt, 0)
541 1.6 mrg
542 1.6 mrg /* Implemented by neg<mode>2. */
543 1.6 mrg BUILTIN_VHSDF_HSDF (UNOP, neg, 2)
544 1.6 mrg
545 1.6 mrg /* Implemented by aarch64_fac<optab><mode>. */
546 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP_USS, faclt, 0)
547 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP_USS, facle, 0)
548 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP_USS, facgt, 0)
549 1.6 mrg BUILTIN_VHSDF_HSDF (BINOP_USS, facge, 0)
550 1.6 mrg
551 1.6 mrg /* Implemented by sqrt<mode>2. */
552 1.6 mrg VAR1 (UNOP, sqrt, 2, hf)
553 1.6 mrg
554 1.6 mrg /* Implemented by <optab><mode>hf2. */
555 1.6 mrg VAR1 (UNOP, floatdi, 2, hf)
556 1.6 mrg VAR1 (UNOP, floatsi, 2, hf)
557 1.6 mrg VAR1 (UNOP, floathi, 2, hf)
558 1.6 mrg VAR1 (UNOPUS, floatunsdi, 2, hf)
559 1.6 mrg VAR1 (UNOPUS, floatunssi, 2, hf)
560 1.6 mrg VAR1 (UNOPUS, floatunshi, 2, hf)
561 1.6 mrg BUILTIN_GPI_I16 (UNOP, fix_trunchf, 2)
562 1.6 mrg BUILTIN_GPI (UNOP, fix_truncsf, 2)
563 1.6 mrg BUILTIN_GPI (UNOP, fix_truncdf, 2)
564 1.6 mrg BUILTIN_GPI_I16 (UNOPUS, fixuns_trunchf, 2)
565 1.6 mrg BUILTIN_GPI (UNOPUS, fixuns_truncsf, 2)
566 1.6 mrg BUILTIN_GPI (UNOPUS, fixuns_truncdf, 2)