clang 10.0.0git

fmaintrin.h
Go to the documentation of this file.
1 /*===---- fmaintrin.h - FMA intrinsics -------------------------------------===
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7 *===-----------------------------------------------------------------------===
8 */
9
10 #ifndef __IMMINTRIN_H
11 #error "Never use <fmaintrin.h> directly; include <immintrin.h> instead."
12 #endif
13
14 #ifndef __FMAINTRIN_H
15 #define __FMAINTRIN_H
16
17 /* Define the default attributes for the functions in this file. */
18 #define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("fma"), __min_vector_width__(128)))
19 #define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("fma"), __min_vector_width__(256)))
20
21 static __inline__ __m128 __DEFAULT_FN_ATTRS128
22 _mm_fmadd_ps(__m128 __A, __m128 __B, __m128 __C)
23 {
24 return (__m128)__builtin_ia32_vfmaddps((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
25 }
26
27 static __inline__ __m128d __DEFAULT_FN_ATTRS128
28 _mm_fmadd_pd(__m128d __A, __m128d __B, __m128d __C)
29 {
30 return (__m128d)__builtin_ia32_vfmaddpd((__v2df)__A, (__v2df)__B, (__v2df)__C);
31 }
32
33 static __inline__ __m128 __DEFAULT_FN_ATTRS128
34 _mm_fmadd_ss(__m128 __A, __m128 __B, __m128 __C)
35 {
36 return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
37 }
38
39 static __inline__ __m128d __DEFAULT_FN_ATTRS128
40 _mm_fmadd_sd(__m128d __A, __m128d __B, __m128d __C)
41 {
42 return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, (__v2df)__B, (__v2df)__C);
43 }
44
45 static __inline__ __m128 __DEFAULT_FN_ATTRS128
46 _mm_fmsub_ps(__m128 __A, __m128 __B, __m128 __C)
47 {
48 return (__m128)__builtin_ia32_vfmaddps((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
49 }
50
51 static __inline__ __m128d __DEFAULT_FN_ATTRS128
52 _mm_fmsub_pd(__m128d __A, __m128d __B, __m128d __C)
53 {
54 return (__m128d)__builtin_ia32_vfmaddpd((__v2df)__A, (__v2df)__B, -(__v2df)__C);
55 }
56
57 static __inline__ __m128 __DEFAULT_FN_ATTRS128
58 _mm_fmsub_ss(__m128 __A, __m128 __B, __m128 __C)
59 {
60 return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
61 }
62
63 static __inline__ __m128d __DEFAULT_FN_ATTRS128
64 _mm_fmsub_sd(__m128d __A, __m128d __B, __m128d __C)
65 {
66 return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, (__v2df)__B, -(__v2df)__C);
67 }
68
69 static __inline__ __m128 __DEFAULT_FN_ATTRS128
70 _mm_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C)
71 {
72 return (__m128)__builtin_ia32_vfmaddps(-(__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
73 }
74
75 static __inline__ __m128d __DEFAULT_FN_ATTRS128
76 _mm_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C)
77 {
78 return (__m128d)__builtin_ia32_vfmaddpd(-(__v2df)__A, (__v2df)__B, (__v2df)__C);
79 }
80
81 static __inline__ __m128 __DEFAULT_FN_ATTRS128
82 _mm_fnmadd_ss(__m128 __A, __m128 __B, __m128 __C)
83 {
84 return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, -(__v4sf)__B, (__v4sf)__C);
85 }
86
87 static __inline__ __m128d __DEFAULT_FN_ATTRS128
88 _mm_fnmadd_sd(__m128d __A, __m128d __B, __m128d __C)
89 {
90 return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, -(__v2df)__B, (__v2df)__C);
91 }
92
93 static __inline__ __m128 __DEFAULT_FN_ATTRS128
94 _mm_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C)
95 {
96 return (__m128)__builtin_ia32_vfmaddps(-(__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
97 }
98
99 static __inline__ __m128d __DEFAULT_FN_ATTRS128
100 _mm_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C)
101 {
102 return (__m128d)__builtin_ia32_vfmaddpd(-(__v2df)__A, (__v2df)__B, -(__v2df)__C);
103 }
104
105 static __inline__ __m128 __DEFAULT_FN_ATTRS128
106 _mm_fnmsub_ss(__m128 __A, __m128 __B, __m128 __C)
107 {
108 return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, -(__v4sf)__B, -(__v4sf)__C);
109 }
110
111 static __inline__ __m128d __DEFAULT_FN_ATTRS128
112 _mm_fnmsub_sd(__m128d __A, __m128d __B, __m128d __C)
113 {
114 return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, -(__v2df)__B, -(__v2df)__C);
115 }
116
117 static __inline__ __m128 __DEFAULT_FN_ATTRS128
118 _mm_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C)
119 {
120 return (__m128)__builtin_ia32_vfmaddsubps((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
121 }
122
123 static __inline__ __m128d __DEFAULT_FN_ATTRS128
124 _mm_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C)
125 {
126 return (__m128d)__builtin_ia32_vfmaddsubpd((__v2df)__A, (__v2df)__B, (__v2df)__C);
127 }
128
129 static __inline__ __m128 __DEFAULT_FN_ATTRS128
130 _mm_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C)
131 {
132 return (__m128)__builtin_ia32_vfmaddsubps((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
133 }
134
135 static __inline__ __m128d __DEFAULT_FN_ATTRS128
136 _mm_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C)
137 {
138 return (__m128d)__builtin_ia32_vfmaddsubpd((__v2df)__A, (__v2df)__B, -(__v2df)__C);
139 }
140
141 static __inline__ __m256 __DEFAULT_FN_ATTRS256
142 _mm256_fmadd_ps(__m256 __A, __m256 __B, __m256 __C)
143 {
144 return (__m256)__builtin_ia32_vfmaddps256((__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
145 }
146
147 static __inline__ __m256d __DEFAULT_FN_ATTRS256
148 _mm256_fmadd_pd(__m256d __A, __m256d __B, __m256d __C)
149 {
150 return (__m256d)__builtin_ia32_vfmaddpd256((__v4df)__A, (__v4df)__B, (__v4df)__C);
151 }
152
153 static __inline__ __m256 __DEFAULT_FN_ATTRS256
154 _mm256_fmsub_ps(__m256 __A, __m256 __B, __m256 __C)
155 {
156 return (__m256)__builtin_ia32_vfmaddps256((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
157 }
158
159 static __inline__ __m256d __DEFAULT_FN_ATTRS256
160 _mm256_fmsub_pd(__m256d __A, __m256d __B, __m256d __C)
161 {
162 return (__m256d)__builtin_ia32_vfmaddpd256((__v4df)__A, (__v4df)__B, -(__v4df)__C);
163 }
164
165 static __inline__ __m256 __DEFAULT_FN_ATTRS256
166 _mm256_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C)
167 {
168 return (__m256)__builtin_ia32_vfmaddps256(-(__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
169 }
170
171 static __inline__ __m256d __DEFAULT_FN_ATTRS256
172 _mm256_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C)
173 {
174 return (__m256d)__builtin_ia32_vfmaddpd256(-(__v4df)__A, (__v4df)__B, (__v4df)__C);
175 }
176
177 static __inline__ __m256 __DEFAULT_FN_ATTRS256
178 _mm256_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C)
179 {
180 return (__m256)__builtin_ia32_vfmaddps256(-(__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
181 }
182
183 static __inline__ __m256d __DEFAULT_FN_ATTRS256
184 _mm256_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C)
185 {
186 return (__m256d)__builtin_ia32_vfmaddpd256(-(__v4df)__A, (__v4df)__B, -(__v4df)__C);
187 }
188
189 static __inline__ __m256 __DEFAULT_FN_ATTRS256
190 _mm256_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C)
191 {
192 return (__m256)__builtin_ia32_vfmaddsubps256((__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
193 }
194
195 static __inline__ __m256d __DEFAULT_FN_ATTRS256
196 _mm256_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C)
197 {
198 return (__m256d)__builtin_ia32_vfmaddsubpd256((__v4df)__A, (__v4df)__B, (__v4df)__C);
199 }
200
201 static __inline__ __m256 __DEFAULT_FN_ATTRS256
202 _mm256_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C)
203 {
204 return (__m256)__builtin_ia32_vfmaddsubps256((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
205 }
206
207 static __inline__ __m256d __DEFAULT_FN_ATTRS256
208 _mm256_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C)
209 {
210 return (__m256d)__builtin_ia32_vfmaddsubpd256((__v4df)__A, (__v4df)__B, -(__v4df)__C);
211 }
212
213 #undef __DEFAULT_FN_ATTRS128
214 #undef __DEFAULT_FN_ATTRS256
215
216 #endif /* __FMAINTRIN_H */
_mm256_fnmsub_pd
static __inline__ __m256d __DEFAULT_FN_ATTRS256 _mm256_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C)
Definition: fmaintrin.h:184
_mm_fmaddsub_ps
static __inline__ __m128 __DEFAULT_FN_ATTRS128 _mm_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C)
Definition: fmaintrin.h:118
_mm_fnmadd_sd
static __inline__ __m128d __DEFAULT_FN_ATTRS128 _mm_fnmadd_sd(__m128d __A, __m128d __B, __m128d __C)
Definition: fmaintrin.h:88
_mm256_fmsubadd_ps
static __inline__ __m256 __DEFAULT_FN_ATTRS256 _mm256_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C)
Definition: fmaintrin.h:202
_mm_fnmsub_ss
static __inline__ __m128 __DEFAULT_FN_ATTRS128 _mm_fnmsub_ss(__m128 __A, __m128 __B, __m128 __C)
Definition: fmaintrin.h:106
_mm256_fmaddsub_ps
static __inline__ __m256 __DEFAULT_FN_ATTRS256 _mm256_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C)
Definition: fmaintrin.h:190
_mm256_fmaddsub_pd
static __inline__ __m256d __DEFAULT_FN_ATTRS256 _mm256_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C)
Definition: fmaintrin.h:196
_mm256_fmadd_pd
static __inline__ __m256d __DEFAULT_FN_ATTRS256 _mm256_fmadd_pd(__m256d __A, __m256d __B, __m256d __C)
Definition: fmaintrin.h:148
__C
static __inline__ unsigned char int __C
Definition: ia32intrin.h:373
_mm_fmsubadd_ps
static __inline__ __m128 __DEFAULT_FN_ATTRS128 _mm_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C)
Definition: fmaintrin.h:130
_mm_fnmadd_ps
static __inline__ __m128 __DEFAULT_FN_ATTRS128 _mm_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C)
Definition: fmaintrin.h:70
_mm256_fnmadd_ps
static __inline__ __m256 __DEFAULT_FN_ATTRS256 _mm256_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C)
Definition: fmaintrin.h:166
_mm_fmsub_ps
static __inline__ __m128 __DEFAULT_FN_ATTRS128 _mm_fmsub_ps(__m128 __A, __m128 __B, __m128 __C)
Definition: fmaintrin.h:46
_mm256_fmsub_pd
static __inline__ __m256d __DEFAULT_FN_ATTRS256 _mm256_fmsub_pd(__m256d __A, __m256d __B, __m256d __C)
Definition: fmaintrin.h:160
_mm_fmsub_ss
static __inline__ __m128 __DEFAULT_FN_ATTRS128 _mm_fmsub_ss(__m128 __A, __m128 __B, __m128 __C)
Definition: fmaintrin.h:58
_mm_fmsub_pd
static __inline__ __m128d __DEFAULT_FN_ATTRS128 _mm_fmsub_pd(__m128d __A, __m128d __B, __m128d __C)
Definition: fmaintrin.h:52
_mm_fnmsub_sd
static __inline__ __m128d __DEFAULT_FN_ATTRS128 _mm_fnmsub_sd(__m128d __A, __m128d __B, __m128d __C)
Definition: fmaintrin.h:112
_mm_fmsubadd_pd
static __inline__ __m128d __DEFAULT_FN_ATTRS128 _mm_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C)
Definition: fmaintrin.h:136
_mm_fnmadd_pd
static __inline__ __m128d __DEFAULT_FN_ATTRS128 _mm_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C)
Definition: fmaintrin.h:76
_mm256_fmadd_ps
static __inline__ __m256 __DEFAULT_FN_ATTRS256 _mm256_fmadd_ps(__m256 __A, __m256 __B, __m256 __C)
Definition: fmaintrin.h:142
_mm256_fnmadd_pd
static __inline__ __m256d __DEFAULT_FN_ATTRS256 _mm256_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C)
Definition: fmaintrin.h:172
_mm_fnmsub_ps
static __inline__ __m128 __DEFAULT_FN_ATTRS128 _mm_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C)
Definition: fmaintrin.h:94
_mm_fmadd_sd
static __inline__ __m128d __DEFAULT_FN_ATTRS128 _mm_fmadd_sd(__m128d __A, __m128d __B, __m128d __C)
Definition: fmaintrin.h:40
_mm_fmsub_sd
static __inline__ __m128d __DEFAULT_FN_ATTRS128 _mm_fmsub_sd(__m128d __A, __m128d __B, __m128d __C)
Definition: fmaintrin.h:64
_mm_fmadd_ss
static __inline__ __m128 __DEFAULT_FN_ATTRS128 _mm_fmadd_ss(__m128 __A, __m128 __B, __m128 __C)
Definition: fmaintrin.h:34
_mm256_fnmsub_ps
static __inline__ __m256 __DEFAULT_FN_ATTRS256 _mm256_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C)
Definition: fmaintrin.h:178
_mm256_fmsub_ps
static __inline__ __m256 __DEFAULT_FN_ATTRS256 _mm256_fmsub_ps(__m256 __A, __m256 __B, __m256 __C)
Definition: fmaintrin.h:154
__DEFAULT_FN_ATTRS128
#define __DEFAULT_FN_ATTRS128
Definition: fmaintrin.h:18
_mm_fmadd_ps
static __inline__ __m128 __DEFAULT_FN_ATTRS128 _mm_fmadd_ps(__m128 __A, __m128 __B, __m128 __C)
Definition: fmaintrin.h:22
_mm_fmaddsub_pd
static __inline__ __m128d __DEFAULT_FN_ATTRS128 _mm_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C)
Definition: fmaintrin.h:124
_mm_fnmadd_ss
static __inline__ __m128 __DEFAULT_FN_ATTRS128 _mm_fnmadd_ss(__m128 __A, __m128 __B, __m128 __C)
Definition: fmaintrin.h:82
_mm_fnmsub_pd
static __inline__ __m128d __DEFAULT_FN_ATTRS128 _mm_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C)
Definition: fmaintrin.h:100
_mm_fmadd_pd
static __inline__ __m128d __DEFAULT_FN_ATTRS128 _mm_fmadd_pd(__m128d __A, __m128d __B, __m128d __C)
Definition: fmaintrin.h:28
__DEFAULT_FN_ATTRS256
#define __DEFAULT_FN_ATTRS256
Definition: fmaintrin.h:19
_mm256_fmsubadd_pd
static __inline__ __m256d __DEFAULT_FN_ATTRS256 _mm256_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C)
Definition: fmaintrin.h:208