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