fmaintrin.h revision 239313
1139749Simp/*===---- fma4intrin.h - FMA4 intrinsics -----------------------------------=== 239234Sgibbs * 339234Sgibbs * Permission is hereby granted, free of charge, to any person obtaining a copy 439234Sgibbs * of this software and associated documentation files (the "Software"), to deal 539234Sgibbs * in the Software without restriction, including without limitation the rights 639234Sgibbs * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 739234Sgibbs * copies of the Software, and to permit persons to whom the Software is 839234Sgibbs * furnished to do so, subject to the following conditions: 939234Sgibbs * 1039234Sgibbs * The above copyright notice and this permission notice shall be included in 1139234Sgibbs * all copies or substantial portions of the Software. 1239234Sgibbs * 1339234Sgibbs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1439234Sgibbs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1539234Sgibbs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1639234Sgibbs * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1739234Sgibbs * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1839234Sgibbs * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 1939234Sgibbs * THE SOFTWARE. 2039234Sgibbs * 2139234Sgibbs *===-----------------------------------------------------------------------=== 2239234Sgibbs */ 2339234Sgibbs 2439234Sgibbs#ifndef __IMMINTRIN_H 2539234Sgibbs#error "Never use <fmaintrin.h> directly; include <immintrin.h> instead." 2639234Sgibbs#endif 2739234Sgibbs 2839234Sgibbs#ifndef __FMAINTRIN_H 29201807Strasz#define __FMAINTRIN_H 3039234Sgibbs 3139234Sgibbs#ifndef __FMA__ 3239234Sgibbs# error "FMA instruction set is not enabled" 3339234Sgibbs#else 3439234Sgibbs 3539234Sgibbsstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 3639234Sgibbs_mm_fmadd_ps(__m128 __A, __m128 __B, __m128 __C) 3739234Sgibbs{ 3839234Sgibbs return (__m128)__builtin_ia32_vfmaddps(__A, __B, __C); 3939234Sgibbs} 4039234Sgibbs 4139234Sgibbsstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 4239234Sgibbs_mm_fmadd_pd(__m128d __A, __m128d __B, __m128d __C) 4339234Sgibbs{ 4439234Sgibbs return (__m128d)__builtin_ia32_vfmaddpd(__A, __B, __C); 4539234Sgibbs} 4639234Sgibbs 4739234Sgibbsstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 4839234Sgibbs_mm_fmadd_ss(__m128 __A, __m128 __B, __m128 __C) 4939234Sgibbs{ 5039234Sgibbs return (__m128)__builtin_ia32_vfmaddss(__A, __B, __C); 5139234Sgibbs} 5239234Sgibbs 5339234Sgibbsstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 5439234Sgibbs_mm_fmadd_sd(__m128d __A, __m128d __B, __m128d __C) 5539234Sgibbs{ 5639234Sgibbs return (__m128d)__builtin_ia32_vfmaddsd(__A, __B, __C); 5739234Sgibbs} 5839234Sgibbs 5939234Sgibbsstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 6039234Sgibbs_mm_fmsub_ps(__m128 __A, __m128 __B, __m128 __C) 6139234Sgibbs{ 6239234Sgibbs return (__m128)__builtin_ia32_vfmsubps(__A, __B, __C); 6339234Sgibbs} 6439234Sgibbs 6539234Sgibbsstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 6639234Sgibbs_mm_fmsub_pd(__m128d __A, __m128d __B, __m128d __C) 6739234Sgibbs{ 6839234Sgibbs return (__m128d)__builtin_ia32_vfmsubpd(__A, __B, __C); 6939234Sgibbs} 7039234Sgibbs 7139234Sgibbsstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 7239234Sgibbs_mm_fmsub_ss(__m128 __A, __m128 __B, __m128 __C) 7339234Sgibbs{ 7439234Sgibbs return (__m128)__builtin_ia32_vfmsubss(__A, __B, __C); 7539234Sgibbs} 7639234Sgibbs 7739234Sgibbsstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 7839234Sgibbs_mm_fmsub_sd(__m128d __A, __m128d __B, __m128d __C) 7939234Sgibbs{ 8039234Sgibbs return (__m128d)__builtin_ia32_vfmsubsd(__A, __B, __C); 8139234Sgibbs} 8239234Sgibbs 8339234Sgibbsstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 8439234Sgibbs_mm_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C) 8539234Sgibbs{ 8639234Sgibbs return (__m128)__builtin_ia32_vfnmaddps(__A, __B, __C); 8739234Sgibbs} 8839234Sgibbs 8939234Sgibbsstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 9039515Sgibbs_mm_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C) 9139234Sgibbs{ 9239234Sgibbs return (__m128d)__builtin_ia32_vfnmaddpd(__A, __B, __C); 9339234Sgibbs} 9439234Sgibbs 9539234Sgibbsstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 9639234Sgibbs_mm_fnmadd_ss(__m128 __A, __m128 __B, __m128 __C) 9739234Sgibbs{ 9839234Sgibbs return (__m128)__builtin_ia32_vfnmaddss(__A, __B, __C); 9939234Sgibbs} 10039234Sgibbs 10139234Sgibbsstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 10239234Sgibbs_mm_fnmadd_sd(__m128d __A, __m128d __B, __m128d __C) 10339234Sgibbs{ 10439234Sgibbs return (__m128d)__builtin_ia32_vfnmaddsd(__A, __B, __C); 10539234Sgibbs} 10639234Sgibbs 10739234Sgibbsstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 10839234Sgibbs_mm_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C) 10939234Sgibbs{ 11039234Sgibbs return (__m128)__builtin_ia32_vfnmsubps(__A, __B, __C); 11139234Sgibbs} 11239234Sgibbs 11339234Sgibbsstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 11439234Sgibbs_mm_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C) 11539234Sgibbs{ 11639234Sgibbs return (__m128d)__builtin_ia32_vfnmsubpd(__A, __B, __C); 11739234Sgibbs} 11839234Sgibbs 11939234Sgibbsstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 12039234Sgibbs_mm_fnmsub_ss(__m128 __A, __m128 __B, __m128 __C) 12139234Sgibbs{ 12239234Sgibbs return (__m128)__builtin_ia32_vfnmsubss(__A, __B, __C); 12339234Sgibbs} 12439234Sgibbs 12539234Sgibbsstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 12639234Sgibbs_mm_fnmsub_sd(__m128d __A, __m128d __B, __m128d __C) 12739234Sgibbs{ 12839234Sgibbs return (__m128d)__builtin_ia32_vfnmsubsd(__A, __B, __C); 12939234Sgibbs} 13039234Sgibbs 13139234Sgibbsstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 13239234Sgibbs_mm_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C) 13339234Sgibbs{ 13439234Sgibbs return (__m128)__builtin_ia32_vfmaddsubps(__A, __B, __C); 13539234Sgibbs} 13639234Sgibbs 13739234Sgibbsstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 13839234Sgibbs_mm_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C) 13939234Sgibbs{ 14039234Sgibbs return (__m128d)__builtin_ia32_vfmaddsubpd(__A, __B, __C); 14139234Sgibbs} 14239234Sgibbs 14339234Sgibbsstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 14439234Sgibbs_mm_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C) 145234540Sdim{ 14639234Sgibbs return (__m128)__builtin_ia32_vfmsubaddps(__A, __B, __C); 14739234Sgibbs} 14839234Sgibbs 14939234Sgibbsstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 15039234Sgibbs_mm_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C) 15139234Sgibbs{ 15239234Sgibbs return (__m128d)__builtin_ia32_vfmsubaddpd(__A, __B, __C); 15339234Sgibbs} 15439234Sgibbs 15539234Sgibbsstatic __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) 15639234Sgibbs_mm256_fmadd_ps(__m256 __A, __m256 __B, __m256 __C) 15739234Sgibbs{ 15839234Sgibbs return (__m256)__builtin_ia32_vfmaddps256(__A, __B, __C); 15939234Sgibbs} 16039234Sgibbs 16139234Sgibbsstatic __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) 16239234Sgibbs_mm256_fmadd_pd(__m256d __A, __m256d __B, __m256d __C) 16339234Sgibbs{ 16439234Sgibbs return (__m256d)__builtin_ia32_vfmaddpd256(__A, __B, __C); 16539234Sgibbs} 16639234Sgibbs 16739234Sgibbsstatic __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) 16839234Sgibbs_mm256_fmsub_ps(__m256 __A, __m256 __B, __m256 __C) 16939234Sgibbs{ 17039234Sgibbs return (__m256)__builtin_ia32_vfmsubps256(__A, __B, __C); 17139234Sgibbs} 17239234Sgibbs 17339234Sgibbsstatic __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) 17439234Sgibbs_mm256_fmsub_pd(__m256d __A, __m256d __B, __m256d __C) 17539234Sgibbs{ 17639234Sgibbs return (__m256d)__builtin_ia32_vfmsubpd256(__A, __B, __C); 17739234Sgibbs} 17839234Sgibbs 17939234Sgibbsstatic __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) 18039234Sgibbs_mm256_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C) 18139234Sgibbs{ 18239234Sgibbs return (__m256)__builtin_ia32_vfnmaddps256(__A, __B, __C); 18339234Sgibbs} 18439234Sgibbs 18539234Sgibbsstatic __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) 18639234Sgibbs_mm256_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C) 18739234Sgibbs{ 18839234Sgibbs return (__m256d)__builtin_ia32_vfnmaddpd256(__A, __B, __C); 18939234Sgibbs} 19039234Sgibbs 19139234Sgibbsstatic __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) 19239234Sgibbs_mm256_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C) 19339234Sgibbs{ 19439234Sgibbs return (__m256)__builtin_ia32_vfnmsubps256(__A, __B, __C); 19539234Sgibbs} 19639234Sgibbs 19739234Sgibbsstatic __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) 19839234Sgibbs_mm256_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C) 19939234Sgibbs{ 20039234Sgibbs return (__m256d)__builtin_ia32_vfnmsubpd256(__A, __B, __C); 20139234Sgibbs} 20239234Sgibbs 20339234Sgibbsstatic __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) 20439234Sgibbs_mm256_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C) 20539234Sgibbs{ 20639234Sgibbs return (__m256)__builtin_ia32_vfmaddsubps256(__A, __B, __C); 20739234Sgibbs} 20839234Sgibbs 20939234Sgibbsstatic __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) 21039234Sgibbs_mm256_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C) 21139234Sgibbs{ 21239234Sgibbs return (__m256d)__builtin_ia32_vfmaddsubpd256(__A, __B, __C); 21339234Sgibbs} 21439234Sgibbs 21539234Sgibbsstatic __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) 21639234Sgibbs_mm256_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C) 21739234Sgibbs{ 21839234Sgibbs return (__m256)__builtin_ia32_vfmsubaddps256(__A, __B, __C); 21939234Sgibbs} 22039234Sgibbs 22139234Sgibbsstatic __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) 22239234Sgibbs_mm256_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C) 22339234Sgibbs{ 22489056Smsmith return (__m256d)__builtin_ia32_vfmsubaddpd256(__A, __B, __C); 22539234Sgibbs} 22639234Sgibbs 22739234Sgibbs#endif /* __FMA__ */ 22839234Sgibbs 22939234Sgibbs#endif /* __FMAINTRIN_H */ 23039234Sgibbs