avx512erintrin.h revision 1.1 1 1.1 mrg /* Copyright (C) 2013-2015 Free Software Foundation, Inc.
2 1.1 mrg
3 1.1 mrg This file is part of GCC.
4 1.1 mrg
5 1.1 mrg GCC is free software; you can redistribute it and/or modify
6 1.1 mrg it under the terms of the GNU General Public License as published by
7 1.1 mrg the Free Software Foundation; either version 3, or (at your option)
8 1.1 mrg any later version.
9 1.1 mrg
10 1.1 mrg GCC is distributed in the hope that it will be useful,
11 1.1 mrg but WITHOUT ANY WARRANTY; without even the implied warranty of
12 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 1.1 mrg GNU General Public License for more details.
14 1.1 mrg
15 1.1 mrg Under Section 7 of GPL version 3, you are granted additional
16 1.1 mrg permissions described in the GCC Runtime Library Exception, version
17 1.1 mrg 3.1, as published by the Free Software Foundation.
18 1.1 mrg
19 1.1 mrg You should have received a copy of the GNU General Public License and
20 1.1 mrg a copy of the GCC Runtime Library Exception along with this program;
21 1.1 mrg see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 1.1 mrg <http://www.gnu.org/licenses/>. */
23 1.1 mrg
24 1.1 mrg #ifndef _IMMINTRIN_H_INCLUDED
25 1.1 mrg #error "Never use <avx512erintrin.h> directly; include <immintrin.h> instead."
26 1.1 mrg #endif
27 1.1 mrg
28 1.1 mrg #ifndef _AVX512ERINTRIN_H_INCLUDED
29 1.1 mrg #define _AVX512ERINTRIN_H_INCLUDED
30 1.1 mrg
31 1.1 mrg #ifndef __AVX512ER__
32 1.1 mrg #pragma GCC push_options
33 1.1 mrg #pragma GCC target("avx512er")
34 1.1 mrg #define __DISABLE_AVX512ER__
35 1.1 mrg #endif /* __AVX512ER__ */
36 1.1 mrg
37 1.1 mrg /* Internal data types for implementing the intrinsics. */
38 1.1 mrg typedef double __v8df __attribute__ ((__vector_size__ (64)));
39 1.1 mrg typedef float __v16sf __attribute__ ((__vector_size__ (64)));
40 1.1 mrg
41 1.1 mrg /* The Intel API is flexible enough that we must allow aliasing with other
42 1.1 mrg vector types, and their scalar components. */
43 1.1 mrg typedef float __m512 __attribute__ ((__vector_size__ (64), __may_alias__));
44 1.1 mrg typedef double __m512d __attribute__ ((__vector_size__ (64), __may_alias__));
45 1.1 mrg
46 1.1 mrg typedef unsigned char __mmask8;
47 1.1 mrg typedef unsigned short __mmask16;
48 1.1 mrg
49 1.1 mrg #ifdef __OPTIMIZE__
50 1.1 mrg extern __inline __m512d
51 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
52 1.1 mrg _mm512_exp2a23_round_pd (__m512d __A, int __R)
53 1.1 mrg {
54 1.1 mrg __m512d __W;
55 1.1 mrg return (__m512d) __builtin_ia32_exp2pd_mask ((__v8df) __A,
56 1.1 mrg (__v8df) __W,
57 1.1 mrg (__mmask8) -1, __R);
58 1.1 mrg }
59 1.1 mrg
60 1.1 mrg extern __inline __m512d
61 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
62 1.1 mrg _mm512_mask_exp2a23_round_pd (__m512d __W, __mmask8 __U, __m512d __A, int __R)
63 1.1 mrg {
64 1.1 mrg return (__m512d) __builtin_ia32_exp2pd_mask ((__v8df) __A,
65 1.1 mrg (__v8df) __W,
66 1.1 mrg (__mmask8) __U, __R);
67 1.1 mrg }
68 1.1 mrg
69 1.1 mrg extern __inline __m512d
70 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
71 1.1 mrg _mm512_maskz_exp2a23_round_pd (__mmask8 __U, __m512d __A, int __R)
72 1.1 mrg {
73 1.1 mrg return (__m512d) __builtin_ia32_exp2pd_mask ((__v8df) __A,
74 1.1 mrg (__v8df) _mm512_setzero_pd (),
75 1.1 mrg (__mmask8) __U, __R);
76 1.1 mrg }
77 1.1 mrg
78 1.1 mrg extern __inline __m512
79 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
80 1.1 mrg _mm512_exp2a23_round_ps (__m512 __A, int __R)
81 1.1 mrg {
82 1.1 mrg __m512 __W;
83 1.1 mrg return (__m512) __builtin_ia32_exp2ps_mask ((__v16sf) __A,
84 1.1 mrg (__v16sf) __W,
85 1.1 mrg (__mmask16) -1, __R);
86 1.1 mrg }
87 1.1 mrg
88 1.1 mrg extern __inline __m512
89 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
90 1.1 mrg _mm512_mask_exp2a23_round_ps (__m512 __W, __mmask16 __U, __m512 __A, int __R)
91 1.1 mrg {
92 1.1 mrg return (__m512) __builtin_ia32_exp2ps_mask ((__v16sf) __A,
93 1.1 mrg (__v16sf) __W,
94 1.1 mrg (__mmask16) __U, __R);
95 1.1 mrg }
96 1.1 mrg
97 1.1 mrg extern __inline __m512
98 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
99 1.1 mrg _mm512_maskz_exp2a23_round_ps (__mmask16 __U, __m512 __A, int __R)
100 1.1 mrg {
101 1.1 mrg return (__m512) __builtin_ia32_exp2ps_mask ((__v16sf) __A,
102 1.1 mrg (__v16sf) _mm512_setzero_ps (),
103 1.1 mrg (__mmask16) __U, __R);
104 1.1 mrg }
105 1.1 mrg
106 1.1 mrg extern __inline __m512d
107 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
108 1.1 mrg _mm512_rcp28_round_pd (__m512d __A, int __R)
109 1.1 mrg {
110 1.1 mrg __m512d __W;
111 1.1 mrg return (__m512d) __builtin_ia32_rcp28pd_mask ((__v8df) __A,
112 1.1 mrg (__v8df) __W,
113 1.1 mrg (__mmask8) -1, __R);
114 1.1 mrg }
115 1.1 mrg
116 1.1 mrg extern __inline __m512d
117 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
118 1.1 mrg _mm512_mask_rcp28_round_pd (__m512d __W, __mmask8 __U, __m512d __A, int __R)
119 1.1 mrg {
120 1.1 mrg return (__m512d) __builtin_ia32_rcp28pd_mask ((__v8df) __A,
121 1.1 mrg (__v8df) __W,
122 1.1 mrg (__mmask8) __U, __R);
123 1.1 mrg }
124 1.1 mrg
125 1.1 mrg extern __inline __m512d
126 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
127 1.1 mrg _mm512_maskz_rcp28_round_pd (__mmask8 __U, __m512d __A, int __R)
128 1.1 mrg {
129 1.1 mrg return (__m512d) __builtin_ia32_rcp28pd_mask ((__v8df) __A,
130 1.1 mrg (__v8df) _mm512_setzero_pd (),
131 1.1 mrg (__mmask8) __U, __R);
132 1.1 mrg }
133 1.1 mrg
134 1.1 mrg extern __inline __m512
135 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
136 1.1 mrg _mm512_rcp28_round_ps (__m512 __A, int __R)
137 1.1 mrg {
138 1.1 mrg __m512 __W;
139 1.1 mrg return (__m512) __builtin_ia32_rcp28ps_mask ((__v16sf) __A,
140 1.1 mrg (__v16sf) __W,
141 1.1 mrg (__mmask16) -1, __R);
142 1.1 mrg }
143 1.1 mrg
144 1.1 mrg extern __inline __m512
145 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
146 1.1 mrg _mm512_mask_rcp28_round_ps (__m512 __W, __mmask16 __U, __m512 __A, int __R)
147 1.1 mrg {
148 1.1 mrg return (__m512) __builtin_ia32_rcp28ps_mask ((__v16sf) __A,
149 1.1 mrg (__v16sf) __W,
150 1.1 mrg (__mmask16) __U, __R);
151 1.1 mrg }
152 1.1 mrg
153 1.1 mrg extern __inline __m512
154 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
155 1.1 mrg _mm512_maskz_rcp28_round_ps (__mmask16 __U, __m512 __A, int __R)
156 1.1 mrg {
157 1.1 mrg return (__m512) __builtin_ia32_rcp28ps_mask ((__v16sf) __A,
158 1.1 mrg (__v16sf) _mm512_setzero_ps (),
159 1.1 mrg (__mmask16) __U, __R);
160 1.1 mrg }
161 1.1 mrg
162 1.1 mrg extern __inline __m128d
163 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
164 1.1 mrg _mm_rcp28_round_sd (__m128d __A, __m128d __B, int __R)
165 1.1 mrg {
166 1.1 mrg return (__m128d) __builtin_ia32_rcp28sd_round ((__v2df) __B,
167 1.1 mrg (__v2df) __A,
168 1.1 mrg __R);
169 1.1 mrg }
170 1.1 mrg
171 1.1 mrg extern __inline __m128
172 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
173 1.1 mrg _mm_rcp28_round_ss (__m128 __A, __m128 __B, int __R)
174 1.1 mrg {
175 1.1 mrg return (__m128) __builtin_ia32_rcp28ss_round ((__v4sf) __B,
176 1.1 mrg (__v4sf) __A,
177 1.1 mrg __R);
178 1.1 mrg }
179 1.1 mrg
180 1.1 mrg extern __inline __m512d
181 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
182 1.1 mrg _mm512_rsqrt28_round_pd (__m512d __A, int __R)
183 1.1 mrg {
184 1.1 mrg __m512d __W;
185 1.1 mrg return (__m512d) __builtin_ia32_rsqrt28pd_mask ((__v8df) __A,
186 1.1 mrg (__v8df) __W,
187 1.1 mrg (__mmask8) -1, __R);
188 1.1 mrg }
189 1.1 mrg
190 1.1 mrg extern __inline __m512d
191 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
192 1.1 mrg _mm512_mask_rsqrt28_round_pd (__m512d __W, __mmask8 __U, __m512d __A, int __R)
193 1.1 mrg {
194 1.1 mrg return (__m512d) __builtin_ia32_rsqrt28pd_mask ((__v8df) __A,
195 1.1 mrg (__v8df) __W,
196 1.1 mrg (__mmask8) __U, __R);
197 1.1 mrg }
198 1.1 mrg
199 1.1 mrg extern __inline __m512d
200 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
201 1.1 mrg _mm512_maskz_rsqrt28_round_pd (__mmask8 __U, __m512d __A, int __R)
202 1.1 mrg {
203 1.1 mrg return (__m512d) __builtin_ia32_rsqrt28pd_mask ((__v8df) __A,
204 1.1 mrg (__v8df) _mm512_setzero_pd (),
205 1.1 mrg (__mmask8) __U, __R);
206 1.1 mrg }
207 1.1 mrg
208 1.1 mrg extern __inline __m512
209 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
210 1.1 mrg _mm512_rsqrt28_round_ps (__m512 __A, int __R)
211 1.1 mrg {
212 1.1 mrg __m512 __W;
213 1.1 mrg return (__m512) __builtin_ia32_rsqrt28ps_mask ((__v16sf) __A,
214 1.1 mrg (__v16sf) __W,
215 1.1 mrg (__mmask16) -1, __R);
216 1.1 mrg }
217 1.1 mrg
218 1.1 mrg extern __inline __m512
219 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
220 1.1 mrg _mm512_mask_rsqrt28_round_ps (__m512 __W, __mmask16 __U, __m512 __A, int __R)
221 1.1 mrg {
222 1.1 mrg return (__m512) __builtin_ia32_rsqrt28ps_mask ((__v16sf) __A,
223 1.1 mrg (__v16sf) __W,
224 1.1 mrg (__mmask16) __U, __R);
225 1.1 mrg }
226 1.1 mrg
227 1.1 mrg extern __inline __m512
228 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
229 1.1 mrg _mm512_maskz_rsqrt28_round_ps (__mmask16 __U, __m512 __A, int __R)
230 1.1 mrg {
231 1.1 mrg return (__m512) __builtin_ia32_rsqrt28ps_mask ((__v16sf) __A,
232 1.1 mrg (__v16sf) _mm512_setzero_ps (),
233 1.1 mrg (__mmask16) __U, __R);
234 1.1 mrg }
235 1.1 mrg
236 1.1 mrg extern __inline __m128d
237 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
238 1.1 mrg _mm_rsqrt28_round_sd (__m128d __A, __m128d __B, int __R)
239 1.1 mrg {
240 1.1 mrg return (__m128d) __builtin_ia32_rsqrt28sd_round ((__v2df) __B,
241 1.1 mrg (__v2df) __A,
242 1.1 mrg __R);
243 1.1 mrg }
244 1.1 mrg
245 1.1 mrg extern __inline __m128
246 1.1 mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
247 1.1 mrg _mm_rsqrt28_round_ss (__m128 __A, __m128 __B, int __R)
248 1.1 mrg {
249 1.1 mrg return (__m128) __builtin_ia32_rsqrt28ss_round ((__v4sf) __B,
250 1.1 mrg (__v4sf) __A,
251 1.1 mrg __R);
252 1.1 mrg }
253 1.1 mrg
254 1.1 mrg #else
255 1.1 mrg #define _mm512_exp2a23_round_pd(A, C) \
256 1.1 mrg __builtin_ia32_exp2pd_mask(A, (__v8df)_mm512_setzero_pd(), -1, C)
257 1.1 mrg
258 1.1 mrg #define _mm512_mask_exp2a23_round_pd(W, U, A, C) \
259 1.1 mrg __builtin_ia32_exp2pd_mask(A, W, U, C)
260 1.1 mrg
261 1.1 mrg #define _mm512_maskz_exp2a23_round_pd(U, A, C) \
262 1.1 mrg __builtin_ia32_exp2pd_mask(A, (__v8df)_mm512_setzero_pd(), U, C)
263 1.1 mrg
264 1.1 mrg #define _mm512_exp2a23_round_ps(A, C) \
265 1.1 mrg __builtin_ia32_exp2ps_mask(A, (__v16sf)_mm512_setzero_ps(), -1, C)
266 1.1 mrg
267 1.1 mrg #define _mm512_mask_exp2a23_round_ps(W, U, A, C) \
268 1.1 mrg __builtin_ia32_exp2ps_mask(A, W, U, C)
269 1.1 mrg
270 1.1 mrg #define _mm512_maskz_exp2a23_round_ps(U, A, C) \
271 1.1 mrg __builtin_ia32_exp2ps_mask(A, (__v16sf)_mm512_setzero_ps(), U, C)
272 1.1 mrg
273 1.1 mrg #define _mm512_rcp28_round_pd(A, C) \
274 1.1 mrg __builtin_ia32_rcp28pd_mask(A, (__v8df)_mm512_setzero_pd(), -1, C)
275 1.1 mrg
276 1.1 mrg #define _mm512_mask_rcp28_round_pd(W, U, A, C) \
277 1.1 mrg __builtin_ia32_rcp28pd_mask(A, W, U, C)
278 1.1 mrg
279 1.1 mrg #define _mm512_maskz_rcp28_round_pd(U, A, C) \
280 1.1 mrg __builtin_ia32_rcp28pd_mask(A, (__v8df)_mm512_setzero_pd(), U, C)
281 1.1 mrg
282 1.1 mrg #define _mm512_rcp28_round_ps(A, C) \
283 1.1 mrg __builtin_ia32_rcp28ps_mask(A, (__v16sf)_mm512_setzero_ps(), -1, C)
284 1.1 mrg
285 1.1 mrg #define _mm512_mask_rcp28_round_ps(W, U, A, C) \
286 1.1 mrg __builtin_ia32_rcp28ps_mask(A, W, U, C)
287 1.1 mrg
288 1.1 mrg #define _mm512_maskz_rcp28_round_ps(U, A, C) \
289 1.1 mrg __builtin_ia32_rcp28ps_mask(A, (__v16sf)_mm512_setzero_ps(), U, C)
290 1.1 mrg
291 1.1 mrg #define _mm512_rsqrt28_round_pd(A, C) \
292 1.1 mrg __builtin_ia32_rsqrt28pd_mask(A, (__v8df)_mm512_setzero_pd(), -1, C)
293 1.1 mrg
294 1.1 mrg #define _mm512_mask_rsqrt28_round_pd(W, U, A, C) \
295 1.1 mrg __builtin_ia32_rsqrt28pd_mask(A, W, U, C)
296 1.1 mrg
297 1.1 mrg #define _mm512_maskz_rsqrt28_round_pd(U, A, C) \
298 1.1 mrg __builtin_ia32_rsqrt28pd_mask(A, (__v8df)_mm512_setzero_pd(), U, C)
299 1.1 mrg
300 1.1 mrg #define _mm512_rsqrt28_round_ps(A, C) \
301 1.1 mrg __builtin_ia32_rsqrt28ps_mask(A, (__v16sf)_mm512_setzero_ps(), -1, C)
302 1.1 mrg
303 1.1 mrg #define _mm512_mask_rsqrt28_round_ps(W, U, A, C) \
304 1.1 mrg __builtin_ia32_rsqrt28ps_mask(A, W, U, C)
305 1.1 mrg
306 1.1 mrg #define _mm512_maskz_rsqrt28_round_ps(U, A, C) \
307 1.1 mrg __builtin_ia32_rsqrt28ps_mask(A, (__v16sf)_mm512_setzero_ps(), U, C)
308 1.1 mrg
309 1.1 mrg #define _mm_rcp28_round_sd(A, B, R) \
310 1.1 mrg __builtin_ia32_rcp28sd_round(A, B, R)
311 1.1 mrg
312 1.1 mrg #define _mm_rcp28_round_ss(A, B, R) \
313 1.1 mrg __builtin_ia32_rcp28ss_round(A, B, R)
314 1.1 mrg
315 1.1 mrg #define _mm_rsqrt28_round_sd(A, B, R) \
316 1.1 mrg __builtin_ia32_rsqrt28sd_round(A, B, R)
317 1.1 mrg
318 1.1 mrg #define _mm_rsqrt28_round_ss(A, B, R) \
319 1.1 mrg __builtin_ia32_rsqrt28ss_round(A, B, R)
320 1.1 mrg
321 1.1 mrg #endif
322 1.1 mrg
323 1.1 mrg #define _mm512_exp2a23_pd(A) \
324 1.1 mrg _mm512_exp2a23_round_pd(A, _MM_FROUND_CUR_DIRECTION)
325 1.1 mrg
326 1.1 mrg #define _mm512_mask_exp2a23_pd(W, U, A) \
327 1.1 mrg _mm512_mask_exp2a23_round_pd(W, U, A, _MM_FROUND_CUR_DIRECTION)
328 1.1 mrg
329 1.1 mrg #define _mm512_maskz_exp2a23_pd(U, A) \
330 1.1 mrg _mm512_maskz_exp2a23_round_pd(U, A, _MM_FROUND_CUR_DIRECTION)
331 1.1 mrg
332 1.1 mrg #define _mm512_exp2a23_ps(A) \
333 1.1 mrg _mm512_exp2a23_round_ps(A, _MM_FROUND_CUR_DIRECTION)
334 1.1 mrg
335 1.1 mrg #define _mm512_mask_exp2a23_ps(W, U, A) \
336 1.1 mrg _mm512_mask_exp2a23_round_ps(W, U, A, _MM_FROUND_CUR_DIRECTION)
337 1.1 mrg
338 1.1 mrg #define _mm512_maskz_exp2a23_ps(U, A) \
339 1.1 mrg _mm512_maskz_exp2a23_round_ps(U, A, _MM_FROUND_CUR_DIRECTION)
340 1.1 mrg
341 1.1 mrg #define _mm512_rcp28_pd(A) \
342 1.1 mrg _mm512_rcp28_round_pd(A, _MM_FROUND_CUR_DIRECTION)
343 1.1 mrg
344 1.1 mrg #define _mm512_mask_rcp28_pd(W, U, A) \
345 1.1 mrg _mm512_mask_rcp28_round_pd(W, U, A, _MM_FROUND_CUR_DIRECTION)
346 1.1 mrg
347 1.1 mrg #define _mm512_maskz_rcp28_pd(U, A) \
348 1.1 mrg _mm512_maskz_rcp28_round_pd(U, A, _MM_FROUND_CUR_DIRECTION)
349 1.1 mrg
350 1.1 mrg #define _mm512_rcp28_ps(A) \
351 1.1 mrg _mm512_rcp28_round_ps(A, _MM_FROUND_CUR_DIRECTION)
352 1.1 mrg
353 1.1 mrg #define _mm512_mask_rcp28_ps(W, U, A) \
354 1.1 mrg _mm512_mask_rcp28_round_ps(W, U, A, _MM_FROUND_CUR_DIRECTION)
355 1.1 mrg
356 1.1 mrg #define _mm512_maskz_rcp28_ps(U, A) \
357 1.1 mrg _mm512_maskz_rcp28_round_ps(U, A, _MM_FROUND_CUR_DIRECTION)
358 1.1 mrg
359 1.1 mrg #define _mm512_rsqrt28_pd(A) \
360 1.1 mrg _mm512_rsqrt28_round_pd(A, _MM_FROUND_CUR_DIRECTION)
361 1.1 mrg
362 1.1 mrg #define _mm512_mask_rsqrt28_pd(W, U, A) \
363 1.1 mrg _mm512_mask_rsqrt28_round_pd(W, U, A, _MM_FROUND_CUR_DIRECTION)
364 1.1 mrg
365 1.1 mrg #define _mm512_maskz_rsqrt28_pd(U, A) \
366 1.1 mrg _mm512_maskz_rsqrt28_round_pd(U, A, _MM_FROUND_CUR_DIRECTION)
367 1.1 mrg
368 1.1 mrg #define _mm512_rsqrt28_ps(A) \
369 1.1 mrg _mm512_rsqrt28_round_ps(A, _MM_FROUND_CUR_DIRECTION)
370 1.1 mrg
371 1.1 mrg #define _mm512_mask_rsqrt28_ps(W, U, A) \
372 1.1 mrg _mm512_mask_rsqrt28_round_ps(W, U, A, _MM_FROUND_CUR_DIRECTION)
373 1.1 mrg
374 1.1 mrg #define _mm512_maskz_rsqrt28_ps(U, A) \
375 1.1 mrg _mm512_maskz_rsqrt28_round_ps(U, A, _MM_FROUND_CUR_DIRECTION)
376 1.1 mrg
377 1.1 mrg #define _mm_rcp28_sd(A, B) \
378 1.1 mrg __builtin_ia32_rcp28sd_round(B, A, _MM_FROUND_CUR_DIRECTION)
379 1.1 mrg
380 1.1 mrg #define _mm_rcp28_ss(A, B) \
381 1.1 mrg __builtin_ia32_rcp28ss_round(B, A, _MM_FROUND_CUR_DIRECTION)
382 1.1 mrg
383 1.1 mrg #define _mm_rsqrt28_sd(A, B) \
384 1.1 mrg __builtin_ia32_rsqrt28sd_round(B, A, _MM_FROUND_CUR_DIRECTION)
385 1.1 mrg
386 1.1 mrg #define _mm_rsqrt28_ss(A, B) \
387 1.1 mrg __builtin_ia32_rsqrt28ss_round(B, A, _MM_FROUND_CUR_DIRECTION)
388 1.1 mrg
389 1.1 mrg #ifdef __DISABLE_AVX512ER__
390 1.1 mrg #undef __DISABLE_AVX512ER__
391 1.1 mrg #pragma GCC pop_options
392 1.1 mrg #endif /* __DISABLE_AVX512ER__ */
393 1.1 mrg
394 1.1 mrg #endif /* _AVX512ERINTRIN_H_INCLUDED */
395