1239313Sdim/*===---- fma4intrin.h - FMA4 intrinsics -----------------------------------===
2239313Sdim *
3239313Sdim * Permission is hereby granted, free of charge, to any person obtaining a copy
4239313Sdim * of this software and associated documentation files (the "Software"), to deal
5239313Sdim * in the Software without restriction, including without limitation the rights
6239313Sdim * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7239313Sdim * copies of the Software, and to permit persons to whom the Software is
8239313Sdim * furnished to do so, subject to the following conditions:
9239313Sdim *
10239313Sdim * The above copyright notice and this permission notice shall be included in
11239313Sdim * all copies or substantial portions of the Software.
12239313Sdim *
13239313Sdim * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14239313Sdim * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15239313Sdim * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16239313Sdim * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17239313Sdim * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18239313Sdim * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19239313Sdim * THE SOFTWARE.
20239313Sdim *
21239313Sdim *===-----------------------------------------------------------------------===
22239313Sdim */
23239313Sdim
24239313Sdim#ifndef __IMMINTRIN_H
25239313Sdim#error "Never use <fmaintrin.h> directly; include <immintrin.h> instead."
26239313Sdim#endif
27239313Sdim
28239313Sdim#ifndef __FMAINTRIN_H
29239313Sdim#define __FMAINTRIN_H
30239313Sdim
31288943Sdim/* Define the default attributes for the functions in this file. */
32296417Sdim#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("fma")))
33288943Sdim
34288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
35239313Sdim_mm_fmadd_ps(__m128 __A, __m128 __B, __m128 __C)
36239313Sdim{
37239313Sdim  return (__m128)__builtin_ia32_vfmaddps(__A, __B, __C);
38239313Sdim}
39239313Sdim
40288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
41239313Sdim_mm_fmadd_pd(__m128d __A, __m128d __B, __m128d __C)
42239313Sdim{
43239313Sdim  return (__m128d)__builtin_ia32_vfmaddpd(__A, __B, __C);
44239313Sdim}
45239313Sdim
46288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
47239313Sdim_mm_fmadd_ss(__m128 __A, __m128 __B, __m128 __C)
48239313Sdim{
49239313Sdim  return (__m128)__builtin_ia32_vfmaddss(__A, __B, __C);
50239313Sdim}
51239313Sdim
52288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
53239313Sdim_mm_fmadd_sd(__m128d __A, __m128d __B, __m128d __C)
54239313Sdim{
55239313Sdim  return (__m128d)__builtin_ia32_vfmaddsd(__A, __B, __C);
56239313Sdim}
57239313Sdim
58288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
59239313Sdim_mm_fmsub_ps(__m128 __A, __m128 __B, __m128 __C)
60239313Sdim{
61239313Sdim  return (__m128)__builtin_ia32_vfmsubps(__A, __B, __C);
62239313Sdim}
63239313Sdim
64288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
65239313Sdim_mm_fmsub_pd(__m128d __A, __m128d __B, __m128d __C)
66239313Sdim{
67239313Sdim  return (__m128d)__builtin_ia32_vfmsubpd(__A, __B, __C);
68239313Sdim}
69239313Sdim
70288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
71239313Sdim_mm_fmsub_ss(__m128 __A, __m128 __B, __m128 __C)
72239313Sdim{
73239313Sdim  return (__m128)__builtin_ia32_vfmsubss(__A, __B, __C);
74239313Sdim}
75239313Sdim
76288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
77239313Sdim_mm_fmsub_sd(__m128d __A, __m128d __B, __m128d __C)
78239313Sdim{
79239313Sdim  return (__m128d)__builtin_ia32_vfmsubsd(__A, __B, __C);
80239313Sdim}
81239313Sdim
82288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
83239313Sdim_mm_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C)
84239313Sdim{
85239313Sdim  return (__m128)__builtin_ia32_vfnmaddps(__A, __B, __C);
86239313Sdim}
87239313Sdim
88288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
89239313Sdim_mm_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C)
90239313Sdim{
91239313Sdim  return (__m128d)__builtin_ia32_vfnmaddpd(__A, __B, __C);
92239313Sdim}
93239313Sdim
94288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
95239313Sdim_mm_fnmadd_ss(__m128 __A, __m128 __B, __m128 __C)
96239313Sdim{
97239313Sdim  return (__m128)__builtin_ia32_vfnmaddss(__A, __B, __C);
98239313Sdim}
99239313Sdim
100288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
101239313Sdim_mm_fnmadd_sd(__m128d __A, __m128d __B, __m128d __C)
102239313Sdim{
103239313Sdim  return (__m128d)__builtin_ia32_vfnmaddsd(__A, __B, __C);
104239313Sdim}
105239313Sdim
106288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
107239313Sdim_mm_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C)
108239313Sdim{
109239313Sdim  return (__m128)__builtin_ia32_vfnmsubps(__A, __B, __C);
110239313Sdim}
111239313Sdim
112288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
113239313Sdim_mm_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C)
114239313Sdim{
115239313Sdim  return (__m128d)__builtin_ia32_vfnmsubpd(__A, __B, __C);
116239313Sdim}
117239313Sdim
118288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
119239313Sdim_mm_fnmsub_ss(__m128 __A, __m128 __B, __m128 __C)
120239313Sdim{
121239313Sdim  return (__m128)__builtin_ia32_vfnmsubss(__A, __B, __C);
122239313Sdim}
123239313Sdim
124288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
125239313Sdim_mm_fnmsub_sd(__m128d __A, __m128d __B, __m128d __C)
126239313Sdim{
127239313Sdim  return (__m128d)__builtin_ia32_vfnmsubsd(__A, __B, __C);
128239313Sdim}
129239313Sdim
130288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
131239313Sdim_mm_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C)
132239313Sdim{
133239313Sdim  return (__m128)__builtin_ia32_vfmaddsubps(__A, __B, __C);
134239313Sdim}
135239313Sdim
136288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
137239313Sdim_mm_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C)
138239313Sdim{
139239313Sdim  return (__m128d)__builtin_ia32_vfmaddsubpd(__A, __B, __C);
140239313Sdim}
141239313Sdim
142288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
143239313Sdim_mm_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C)
144239313Sdim{
145239313Sdim  return (__m128)__builtin_ia32_vfmsubaddps(__A, __B, __C);
146239313Sdim}
147239313Sdim
148288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
149239313Sdim_mm_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C)
150239313Sdim{
151239313Sdim  return (__m128d)__builtin_ia32_vfmsubaddpd(__A, __B, __C);
152239313Sdim}
153239313Sdim
154288943Sdimstatic __inline__ __m256 __DEFAULT_FN_ATTRS
155239313Sdim_mm256_fmadd_ps(__m256 __A, __m256 __B, __m256 __C)
156239313Sdim{
157239313Sdim  return (__m256)__builtin_ia32_vfmaddps256(__A, __B, __C);
158239313Sdim}
159239313Sdim
160288943Sdimstatic __inline__ __m256d __DEFAULT_FN_ATTRS
161239313Sdim_mm256_fmadd_pd(__m256d __A, __m256d __B, __m256d __C)
162239313Sdim{
163239313Sdim  return (__m256d)__builtin_ia32_vfmaddpd256(__A, __B, __C);
164239313Sdim}
165239313Sdim
166288943Sdimstatic __inline__ __m256 __DEFAULT_FN_ATTRS
167239313Sdim_mm256_fmsub_ps(__m256 __A, __m256 __B, __m256 __C)
168239313Sdim{
169239313Sdim  return (__m256)__builtin_ia32_vfmsubps256(__A, __B, __C);
170239313Sdim}
171239313Sdim
172288943Sdimstatic __inline__ __m256d __DEFAULT_FN_ATTRS
173239313Sdim_mm256_fmsub_pd(__m256d __A, __m256d __B, __m256d __C)
174239313Sdim{
175239313Sdim  return (__m256d)__builtin_ia32_vfmsubpd256(__A, __B, __C);
176239313Sdim}
177239313Sdim
178288943Sdimstatic __inline__ __m256 __DEFAULT_FN_ATTRS
179239313Sdim_mm256_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C)
180239313Sdim{
181239313Sdim  return (__m256)__builtin_ia32_vfnmaddps256(__A, __B, __C);
182239313Sdim}
183239313Sdim
184288943Sdimstatic __inline__ __m256d __DEFAULT_FN_ATTRS
185239313Sdim_mm256_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C)
186239313Sdim{
187239313Sdim  return (__m256d)__builtin_ia32_vfnmaddpd256(__A, __B, __C);
188239313Sdim}
189239313Sdim
190288943Sdimstatic __inline__ __m256 __DEFAULT_FN_ATTRS
191239313Sdim_mm256_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C)
192239313Sdim{
193239313Sdim  return (__m256)__builtin_ia32_vfnmsubps256(__A, __B, __C);
194239313Sdim}
195239313Sdim
196288943Sdimstatic __inline__ __m256d __DEFAULT_FN_ATTRS
197239313Sdim_mm256_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C)
198239313Sdim{
199239313Sdim  return (__m256d)__builtin_ia32_vfnmsubpd256(__A, __B, __C);
200239313Sdim}
201239313Sdim
202288943Sdimstatic __inline__ __m256 __DEFAULT_FN_ATTRS
203239313Sdim_mm256_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C)
204239313Sdim{
205239313Sdim  return (__m256)__builtin_ia32_vfmaddsubps256(__A, __B, __C);
206239313Sdim}
207239313Sdim
208288943Sdimstatic __inline__ __m256d __DEFAULT_FN_ATTRS
209239313Sdim_mm256_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C)
210239313Sdim{
211239313Sdim  return (__m256d)__builtin_ia32_vfmaddsubpd256(__A, __B, __C);
212239313Sdim}
213239313Sdim
214288943Sdimstatic __inline__ __m256 __DEFAULT_FN_ATTRS
215239313Sdim_mm256_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C)
216239313Sdim{
217239313Sdim  return (__m256)__builtin_ia32_vfmsubaddps256(__A, __B, __C);
218239313Sdim}
219239313Sdim
220288943Sdimstatic __inline__ __m256d __DEFAULT_FN_ATTRS
221239313Sdim_mm256_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C)
222239313Sdim{
223239313Sdim  return (__m256d)__builtin_ia32_vfmsubaddpd256(__A, __B, __C);
224239313Sdim}
225239313Sdim
226288943Sdim#undef __DEFAULT_FN_ATTRS
227288943Sdim
228239313Sdim#endif /* __FMAINTRIN_H */
229