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