brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · 20b8030 Raw
221 lines · c
1/*===---- fma4intrin.h - FMA4 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-exception6 *7 *===-----------------------------------------------------------------------===8 */9 10#ifndef __X86INTRIN_H11#error "Never use <fma4intrin.h> directly; include <x86intrin.h> instead."12#endif13 14#ifndef __FMA4INTRIN_H15#define __FMA4INTRIN_H16 17#include <pmmintrin.h>18 19/* Define the default attributes for the functions in this file. */20#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("fma4"), __min_vector_width__(128)))21#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("fma4"), __min_vector_width__(256)))22 23#if defined(__cplusplus) && (__cplusplus >= 201103L)24#define __DEFAULT_FN_ATTRS128_CONSTEXPR __DEFAULT_FN_ATTRS128 constexpr25#define __DEFAULT_FN_ATTRS256_CONSTEXPR __DEFAULT_FN_ATTRS256 constexpr26#else27#define __DEFAULT_FN_ATTRS128_CONSTEXPR __DEFAULT_FN_ATTRS12828#define __DEFAULT_FN_ATTRS256_CONSTEXPR __DEFAULT_FN_ATTRS25629#endif30 31static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR32_mm_macc_ps(__m128 __A, __m128 __B, __m128 __C) {33  return (__m128)__builtin_elementwise_fma((__v4sf)__A, (__v4sf)__B,34                                           (__v4sf)__C);35}36 37static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR38_mm_macc_pd(__m128d __A, __m128d __B, __m128d __C) {39  return (__m128d)__builtin_elementwise_fma((__v2df)__A, (__v2df)__B,40                                            (__v2df)__C);41}42 43static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR44_mm_macc_ss(__m128 __A, __m128 __B, __m128 __C) {45  return _mm_set_ss(__builtin_elementwise_fma(__A[0], __B[0], __C[0]));46}47 48static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR49_mm_macc_sd(__m128d __A, __m128d __B, __m128d __C) {50  return _mm_set_sd(__builtin_elementwise_fma(__A[0], __B[0], __C[0]));51}52 53static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR54_mm_msub_ps(__m128 __A, __m128 __B, __m128 __C) {55  return (__m128)__builtin_elementwise_fma((__v4sf)__A, (__v4sf)__B,56                                           -(__v4sf)__C);57}58 59static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR60_mm_msub_pd(__m128d __A, __m128d __B, __m128d __C) {61  return (__m128d)__builtin_elementwise_fma((__v2df)__A, (__v2df)__B,62                                            -(__v2df)__C);63}64 65static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR66_mm_msub_ss(__m128 __A, __m128 __B, __m128 __C) {67  return _mm_set_ss(__builtin_elementwise_fma(__A[0], __B[0], -__C[0]));68}69 70static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR71_mm_msub_sd(__m128d __A, __m128d __B, __m128d __C) {72  return _mm_set_sd(__builtin_elementwise_fma(__A[0], __B[0], -__C[0]));73}74 75static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR76_mm_nmacc_ps(__m128 __A, __m128 __B, __m128 __C) {77  return (__m128)__builtin_elementwise_fma(-(__v4sf)__A, (__v4sf)__B,78                                           (__v4sf)__C);79}80 81static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR82_mm_nmacc_pd(__m128d __A, __m128d __B, __m128d __C) {83  return (__m128d)__builtin_elementwise_fma(-(__v2df)__A, (__v2df)__B,84                                            (__v2df)__C);85}86 87static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR88_mm_nmacc_ss(__m128 __A, __m128 __B, __m128 __C) {89  return _mm_set_ss(__builtin_elementwise_fma(-__A[0], __B[0], __C[0]));90}91 92static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR93_mm_nmacc_sd(__m128d __A, __m128d __B, __m128d __C) {94  return _mm_set_sd(__builtin_elementwise_fma(-__A[0], __B[0], __C[0]));95}96 97static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR98_mm_nmsub_ps(__m128 __A, __m128 __B, __m128 __C) {99  return (__m128)__builtin_elementwise_fma(-(__v4sf)__A, (__v4sf)__B,100                                           -(__v4sf)__C);101}102 103static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR104_mm_nmsub_pd(__m128d __A, __m128d __B, __m128d __C) {105  return (__m128d)__builtin_elementwise_fma(-(__v2df)__A, (__v2df)__B,106                                            -(__v2df)__C);107}108 109static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR110_mm_nmsub_ss(__m128 __A, __m128 __B, __m128 __C) {111  return _mm_set_ss(__builtin_elementwise_fma(-__A[0], __B[0], -__C[0]));112}113 114static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR115_mm_nmsub_sd(__m128d __A, __m128d __B, __m128d __C) {116  return _mm_set_sd(__builtin_elementwise_fma(-__A[0], __B[0], -__C[0]));117}118 119static __inline__ __m128 __DEFAULT_FN_ATTRS128120_mm_maddsub_ps(__m128 __A, __m128 __B, __m128 __C)121{122  return (__m128)__builtin_ia32_vfmaddsubps((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);123}124 125static __inline__ __m128d __DEFAULT_FN_ATTRS128126_mm_maddsub_pd(__m128d __A, __m128d __B, __m128d __C)127{128  return (__m128d)__builtin_ia32_vfmaddsubpd((__v2df)__A, (__v2df)__B, (__v2df)__C);129}130 131static __inline__ __m128 __DEFAULT_FN_ATTRS128132_mm_msubadd_ps(__m128 __A, __m128 __B, __m128 __C)133{134  return (__m128)__builtin_ia32_vfmaddsubps((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);135}136 137static __inline__ __m128d __DEFAULT_FN_ATTRS128138_mm_msubadd_pd(__m128d __A, __m128d __B, __m128d __C)139{140  return (__m128d)__builtin_ia32_vfmaddsubpd((__v2df)__A, (__v2df)__B, -(__v2df)__C);141}142 143static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR144_mm256_macc_ps(__m256 __A, __m256 __B, __m256 __C) {145  return (__m256)__builtin_elementwise_fma((__v8sf)__A, (__v8sf)__B,146                                           (__v8sf)__C);147}148 149static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR150_mm256_macc_pd(__m256d __A, __m256d __B, __m256d __C) {151  return (__m256d)__builtin_elementwise_fma((__v4df)__A, (__v4df)__B,152                                            (__v4df)__C);153}154 155static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR156_mm256_msub_ps(__m256 __A, __m256 __B, __m256 __C) {157  return (__m256)__builtin_elementwise_fma((__v8sf)__A, (__v8sf)__B,158                                           -(__v8sf)__C);159}160 161static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR162_mm256_msub_pd(__m256d __A, __m256d __B, __m256d __C) {163  return (__m256d)__builtin_elementwise_fma((__v4df)__A, (__v4df)__B,164                                            -(__v4df)__C);165}166 167static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR168_mm256_nmacc_ps(__m256 __A, __m256 __B, __m256 __C) {169  return (__m256)__builtin_elementwise_fma(-(__v8sf)__A, (__v8sf)__B,170                                           (__v8sf)__C);171}172 173static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR174_mm256_nmacc_pd(__m256d __A, __m256d __B, __m256d __C) {175  return (__m256d)__builtin_elementwise_fma(-(__v4df)__A, (__v4df)__B,176                                            (__v4df)__C);177}178 179static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR180_mm256_nmsub_ps(__m256 __A, __m256 __B, __m256 __C) {181  return (__m256)__builtin_elementwise_fma(-(__v8sf)__A, (__v8sf)__B,182                                           -(__v8sf)__C);183}184 185static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR186_mm256_nmsub_pd(__m256d __A, __m256d __B, __m256d __C) {187  return (__m256d)__builtin_elementwise_fma(-(__v4df)__A, (__v4df)__B,188                                            -(__v4df)__C);189}190 191static __inline__ __m256 __DEFAULT_FN_ATTRS256192_mm256_maddsub_ps(__m256 __A, __m256 __B, __m256 __C)193{194  return (__m256)__builtin_ia32_vfmaddsubps256((__v8sf)__A, (__v8sf)__B, (__v8sf)__C);195}196 197static __inline__ __m256d __DEFAULT_FN_ATTRS256198_mm256_maddsub_pd(__m256d __A, __m256d __B, __m256d __C)199{200  return (__m256d)__builtin_ia32_vfmaddsubpd256((__v4df)__A, (__v4df)__B, (__v4df)__C);201}202 203static __inline__ __m256 __DEFAULT_FN_ATTRS256204_mm256_msubadd_ps(__m256 __A, __m256 __B, __m256 __C)205{206  return (__m256)__builtin_ia32_vfmaddsubps256((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);207}208 209static __inline__ __m256d __DEFAULT_FN_ATTRS256210_mm256_msubadd_pd(__m256d __A, __m256d __B, __m256d __C)211{212  return (__m256d)__builtin_ia32_vfmaddsubpd256((__v4df)__A, (__v4df)__B, -(__v4df)__C);213}214 215#undef __DEFAULT_FN_ATTRS128216#undef __DEFAULT_FN_ATTRS256217#undef __DEFAULT_FN_ATTRS128_CONSTEXPR218#undef __DEFAULT_FN_ATTRS256_CONSTEXPR219 220#endif /* __FMA4INTRIN_H */221