1818#define __DEFAULT_FN_ATTRS128 __attribute__ ((__always_inline__, __nodebug__, __target__(" fma" ), __min_vector_width__(128 )))
1919#define __DEFAULT_FN_ATTRS256 __attribute__ ((__always_inline__, __nodebug__, __target__(" fma" ), __min_vector_width__(256 )))
2020
21+ #if defined(__cplusplus) && (__cplusplus >= 201103L)
22+ #define __DEFAULT_FN_ATTRS128_CONSTEXPR __DEFAULT_FN_ATTRS128 constexpr
23+ #define __DEFAULT_FN_ATTRS256_CONSTEXPR __DEFAULT_FN_ATTRS256 constexpr
24+ #else
25+ #define __DEFAULT_FN_ATTRS128_CONSTEXPR __DEFAULT_FN_ATTRS128
26+ #define __DEFAULT_FN_ATTRS256_CONSTEXPR __DEFAULT_FN_ATTRS256
27+ #endif
28+
2129// / Computes a multiply-add of 128-bit vectors of [4 x float].
2230// / For each element, computes <c> (__A * __B) + __C </c>.
2331// /
3240// / \param __C
3341// / A 128-bit vector of [4 x float] containing the addend.
3442// / \returns A 128-bit vector of [4 x float] containing the result.
35- static __inline__ __m128 __DEFAULT_FN_ATTRS128
43+ static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR
3644_mm_fmadd_ps (__m128 __A, __m128 __B, __m128 __C)
3745{
3846 return (__m128)__builtin_elementwise_fma ((__v4sf)__A, (__v4sf)__B,
@@ -53,7 +61,7 @@ _mm_fmadd_ps(__m128 __A, __m128 __B, __m128 __C)
5361// / \param __C
5462// / A 128-bit vector of [2 x double] containing the addend.
5563// / \returns A 128-bit [2 x double] vector containing the result.
56- static __inline__ __m128d __DEFAULT_FN_ATTRS128
64+ static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR
5765_mm_fmadd_pd (__m128d __A, __m128d __B, __m128d __C)
5866{
5967 return (__m128d)__builtin_elementwise_fma ((__v2df)__A, (__v2df)__B,
@@ -132,7 +140,7 @@ _mm_fmadd_sd(__m128d __A, __m128d __B, __m128d __C)
132140// / \param __C
133141// / A 128-bit vector of [4 x float] containing the subtrahend.
134142// / \returns A 128-bit vector of [4 x float] containing the result.
135- static __inline__ __m128 __DEFAULT_FN_ATTRS128
143+ static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR
136144_mm_fmsub_ps (__m128 __A, __m128 __B, __m128 __C)
137145{
138146 return (__m128)__builtin_elementwise_fma ((__v4sf)__A, (__v4sf)__B,
@@ -153,7 +161,7 @@ _mm_fmsub_ps(__m128 __A, __m128 __B, __m128 __C)
153161// / \param __C
154162// / A 128-bit vector of [2 x double] containing the addend.
155163// / \returns A 128-bit vector of [2 x double] containing the result.
156- static __inline__ __m128d __DEFAULT_FN_ATTRS128
164+ static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR
157165_mm_fmsub_pd (__m128d __A, __m128d __B, __m128d __C)
158166{
159167 return (__m128d)__builtin_elementwise_fma ((__v2df)__A, (__v2df)__B,
@@ -232,7 +240,7 @@ _mm_fmsub_sd(__m128d __A, __m128d __B, __m128d __C)
232240// / \param __C
233241// / A 128-bit vector of [4 x float] containing the addend.
234242// / \returns A 128-bit [4 x float] vector containing the result.
235- static __inline__ __m128 __DEFAULT_FN_ATTRS128
243+ static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR
236244_mm_fnmadd_ps (__m128 __A, __m128 __B, __m128 __C)
237245{
238246 return (__m128)__builtin_elementwise_fma (-(__v4sf)__A, (__v4sf)__B,
@@ -253,7 +261,7 @@ _mm_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C)
253261// / \param __C
254262// / A 128-bit vector of [2 x double] containing the addend.
255263// / \returns A 128-bit vector of [2 x double] containing the result.
256- static __inline__ __m128d __DEFAULT_FN_ATTRS128
264+ static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR
257265_mm_fnmadd_pd (__m128d __A, __m128d __B, __m128d __C)
258266{
259267 return (__m128d)__builtin_elementwise_fma (-(__v2df)__A, (__v2df)__B,
@@ -332,7 +340,7 @@ _mm_fnmadd_sd(__m128d __A, __m128d __B, __m128d __C)
332340// / \param __C
333341// / A 128-bit vector of [4 x float] containing the subtrahend.
334342// / \returns A 128-bit vector of [4 x float] containing the result.
335- static __inline__ __m128 __DEFAULT_FN_ATTRS128
343+ static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR
336344_mm_fnmsub_ps (__m128 __A, __m128 __B, __m128 __C)
337345{
338346 return (__m128)__builtin_elementwise_fma (-(__v4sf)__A, (__v4sf)__B,
@@ -353,7 +361,7 @@ _mm_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C)
353361// / \param __C
354362// / A 128-bit vector of [2 x double] containing the subtrahend.
355363// / \returns A 128-bit vector of [2 x double] containing the result.
356- static __inline__ __m128d __DEFAULT_FN_ATTRS128
364+ static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR
357365_mm_fnmsub_pd (__m128d __A, __m128d __B, __m128d __C)
358366{
359367 return (__m128d)__builtin_elementwise_fma (-(__v2df)__A, (__v2df)__B,
@@ -536,7 +544,7 @@ _mm_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C)
536544// / \param __C
537545// / A 256-bit vector of [8 x float] containing the addend.
538546// / \returns A 256-bit vector of [8 x float] containing the result.
539- static __inline__ __m256 __DEFAULT_FN_ATTRS256
547+ static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
540548_mm256_fmadd_ps (__m256 __A, __m256 __B, __m256 __C)
541549{
542550 return (__m256)__builtin_elementwise_fma ((__v8sf)__A, (__v8sf)__B,
@@ -557,7 +565,7 @@ _mm256_fmadd_ps(__m256 __A, __m256 __B, __m256 __C)
557565// / \param __C
558566// / A 256-bit vector of [4 x double] containing the addend.
559567// / \returns A 256-bit vector of [4 x double] containing the result.
560- static __inline__ __m256d __DEFAULT_FN_ATTRS256
568+ static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR
561569_mm256_fmadd_pd (__m256d __A, __m256d __B, __m256d __C)
562570{
563571 return (__m256d)__builtin_elementwise_fma ((__v4df)__A, (__v4df)__B,
@@ -578,7 +586,7 @@ _mm256_fmadd_pd(__m256d __A, __m256d __B, __m256d __C)
578586// / \param __C
579587// / A 256-bit vector of [8 x float] containing the subtrahend.
580588// / \returns A 256-bit vector of [8 x float] containing the result.
581- static __inline__ __m256 __DEFAULT_FN_ATTRS256
589+ static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
582590_mm256_fmsub_ps (__m256 __A, __m256 __B, __m256 __C)
583591{
584592 return (__m256)__builtin_elementwise_fma ((__v8sf)__A, (__v8sf)__B,
@@ -599,7 +607,7 @@ _mm256_fmsub_ps(__m256 __A, __m256 __B, __m256 __C)
599607// / \param __C
600608// / A 256-bit vector of [4 x double] containing the subtrahend.
601609// / \returns A 256-bit vector of [4 x double] containing the result.
602- static __inline__ __m256d __DEFAULT_FN_ATTRS256
610+ static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR
603611_mm256_fmsub_pd (__m256d __A, __m256d __B, __m256d __C)
604612{
605613 return (__m256d)__builtin_elementwise_fma ((__v4df)__A, (__v4df)__B,
@@ -620,7 +628,7 @@ _mm256_fmsub_pd(__m256d __A, __m256d __B, __m256d __C)
620628// / \param __C
621629// / A 256-bit vector of [8 x float] containing the addend.
622630// / \returns A 256-bit vector of [8 x float] containing the result.
623- static __inline__ __m256 __DEFAULT_FN_ATTRS256
631+ static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
624632_mm256_fnmadd_ps (__m256 __A, __m256 __B, __m256 __C)
625633{
626634 return (__m256)__builtin_elementwise_fma (-(__v8sf)__A, (__v8sf)__B,
@@ -641,7 +649,7 @@ _mm256_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C)
641649// / \param __C
642650// / A 256-bit vector of [4 x double] containing the addend.
643651// / \returns A 256-bit vector of [4 x double] containing the result.
644- static __inline__ __m256d __DEFAULT_FN_ATTRS256
652+ static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR
645653_mm256_fnmadd_pd (__m256d __A, __m256d __B, __m256d __C)
646654{
647655 return (__m256d)__builtin_elementwise_fma (-(__v4df)__A, (__v4df)__B,
@@ -662,7 +670,7 @@ _mm256_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C)
662670// / \param __C
663671// / A 256-bit vector of [8 x float] containing the subtrahend.
664672// / \returns A 256-bit vector of [8 x float] containing the result.
665- static __inline__ __m256 __DEFAULT_FN_ATTRS256
673+ static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
666674_mm256_fnmsub_ps (__m256 __A, __m256 __B, __m256 __C)
667675{
668676 return (__m256)__builtin_elementwise_fma (-(__v8sf)__A, (__v8sf)__B,
@@ -683,7 +691,7 @@ _mm256_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C)
683691// / \param __C
684692// / A 256-bit vector of [4 x double] containing the subtrahend.
685693// / \returns A 256-bit vector of [4 x double] containing the result.
686- static __inline__ __m256d __DEFAULT_FN_ATTRS256
694+ static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR
687695_mm256_fnmsub_pd (__m256d __A, __m256d __B, __m256d __C)
688696{
689697 return (__m256d)__builtin_elementwise_fma (-(__v4df)__A, (__v4df)__B,
@@ -808,5 +816,7 @@ _mm256_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C)
808816
809817#undef __DEFAULT_FN_ATTRS128
810818#undef __DEFAULT_FN_ATTRS256
819+ #undef __DEFAULT_FN_ATTRS128_CONSTEXPR
820+ #undef __DEFAULT_FN_ATTRS256_CONSTEXPR
811821
812822#endif /* __FMAINTRIN_H */
0 commit comments