Home | History | Annotate | Line # | Download | only in i386
fmaintrin.h revision 1.1
      1  1.1  mrg /* Copyright (C) 2011-2013 Free Software Foundation, Inc.
      2  1.1  mrg 
      3  1.1  mrg    This file is part of GCC.
      4  1.1  mrg 
      5  1.1  mrg    GCC is free software; you can redistribute it and/or modify
      6  1.1  mrg    it under the terms of the GNU General Public License as published by
      7  1.1  mrg    the Free Software Foundation; either version 3, or (at your option)
      8  1.1  mrg    any later version.
      9  1.1  mrg 
     10  1.1  mrg    GCC is distributed in the hope that it will be useful,
     11  1.1  mrg    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  1.1  mrg    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  1.1  mrg    GNU General Public License for more details.
     14  1.1  mrg 
     15  1.1  mrg    Under Section 7 of GPL version 3, you are granted additional
     16  1.1  mrg    permissions described in the GCC Runtime Library Exception, version
     17  1.1  mrg    3.1, as published by the Free Software Foundation.
     18  1.1  mrg 
     19  1.1  mrg    You should have received a copy of the GNU General Public License and
     20  1.1  mrg    a copy of the GCC Runtime Library Exception along with this program;
     21  1.1  mrg    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     22  1.1  mrg    <http://www.gnu.org/licenses/>.  */
     23  1.1  mrg 
     24  1.1  mrg #ifndef _IMMINTRIN_H_INCLUDED
     25  1.1  mrg # error "Never use <fmaintrin.h> directly; include <immintrin.h> instead."
     26  1.1  mrg #endif
     27  1.1  mrg 
     28  1.1  mrg #ifndef _FMAINTRIN_H_INCLUDED
     29  1.1  mrg #define _FMAINTRIN_H_INCLUDED
     30  1.1  mrg 
     31  1.1  mrg #ifndef __FMA__
     32  1.1  mrg # error "FMA instruction set not enabled"
     33  1.1  mrg #else
     34  1.1  mrg 
     35  1.1  mrg extern __inline __m128d
     36  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     37  1.1  mrg _mm_fmadd_pd (__m128d __A, __m128d __B, __m128d __C)
     38  1.1  mrg {
     39  1.1  mrg   return (__m128d)__builtin_ia32_vfmaddpd ((__v2df)__A, (__v2df)__B,
     40  1.1  mrg                                            (__v2df)__C);
     41  1.1  mrg }
     42  1.1  mrg 
     43  1.1  mrg extern __inline __m256d
     44  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     45  1.1  mrg _mm256_fmadd_pd (__m256d __A, __m256d __B, __m256d __C)
     46  1.1  mrg {
     47  1.1  mrg   return (__m256d)__builtin_ia32_vfmaddpd256 ((__v4df)__A, (__v4df)__B,
     48  1.1  mrg                                               (__v4df)__C);
     49  1.1  mrg }
     50  1.1  mrg 
     51  1.1  mrg extern __inline __m128
     52  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     53  1.1  mrg _mm_fmadd_ps (__m128 __A, __m128 __B, __m128 __C)
     54  1.1  mrg {
     55  1.1  mrg   return (__m128)__builtin_ia32_vfmaddps ((__v4sf)__A, (__v4sf)__B,
     56  1.1  mrg                                           (__v4sf)__C);
     57  1.1  mrg }
     58  1.1  mrg 
     59  1.1  mrg extern __inline __m256
     60  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     61  1.1  mrg _mm256_fmadd_ps (__m256 __A, __m256 __B, __m256 __C)
     62  1.1  mrg {
     63  1.1  mrg   return (__m256)__builtin_ia32_vfmaddps256 ((__v8sf)__A, (__v8sf)__B,
     64  1.1  mrg                                              (__v8sf)__C);
     65  1.1  mrg }
     66  1.1  mrg 
     67  1.1  mrg extern __inline __m128d
     68  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     69  1.1  mrg _mm_fmadd_sd (__m128d __A, __m128d __B, __m128d __C)
     70  1.1  mrg {
     71  1.1  mrg   return (__m128d) __builtin_ia32_vfmaddsd3 ((__v2df)__A, (__v2df)__B,
     72  1.1  mrg                                              (__v2df)__C);
     73  1.1  mrg }
     74  1.1  mrg 
     75  1.1  mrg extern __inline __m128
     76  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     77  1.1  mrg _mm_fmadd_ss (__m128 __A, __m128 __B, __m128 __C)
     78  1.1  mrg {
     79  1.1  mrg   return (__m128) __builtin_ia32_vfmaddss3 ((__v4sf)__A, (__v4sf)__B,
     80  1.1  mrg                                             (__v4sf)__C);
     81  1.1  mrg }
     82  1.1  mrg 
     83  1.1  mrg extern __inline __m128d
     84  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     85  1.1  mrg _mm_fmsub_pd (__m128d __A, __m128d __B, __m128d __C)
     86  1.1  mrg {
     87  1.1  mrg   return (__m128d)__builtin_ia32_vfmaddpd ((__v2df)__A, (__v2df)__B,
     88  1.1  mrg                                            -(__v2df)__C);
     89  1.1  mrg }
     90  1.1  mrg 
     91  1.1  mrg extern __inline __m256d
     92  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     93  1.1  mrg _mm256_fmsub_pd (__m256d __A, __m256d __B, __m256d __C)
     94  1.1  mrg {
     95  1.1  mrg   return (__m256d)__builtin_ia32_vfmaddpd256 ((__v4df)__A, (__v4df)__B,
     96  1.1  mrg                                               -(__v4df)__C);
     97  1.1  mrg }
     98  1.1  mrg 
     99  1.1  mrg extern __inline __m128
    100  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    101  1.1  mrg _mm_fmsub_ps (__m128 __A, __m128 __B, __m128 __C)
    102  1.1  mrg {
    103  1.1  mrg   return (__m128)__builtin_ia32_vfmaddps ((__v4sf)__A, (__v4sf)__B,
    104  1.1  mrg                                           -(__v4sf)__C);
    105  1.1  mrg }
    106  1.1  mrg 
    107  1.1  mrg extern __inline __m256
    108  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    109  1.1  mrg _mm256_fmsub_ps (__m256 __A, __m256 __B, __m256 __C)
    110  1.1  mrg {
    111  1.1  mrg   return (__m256)__builtin_ia32_vfmaddps256 ((__v8sf)__A, (__v8sf)__B,
    112  1.1  mrg                                              -(__v8sf)__C);
    113  1.1  mrg }
    114  1.1  mrg 
    115  1.1  mrg extern __inline __m128d
    116  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    117  1.1  mrg _mm_fmsub_sd (__m128d __A, __m128d __B, __m128d __C)
    118  1.1  mrg {
    119  1.1  mrg   return (__m128d)__builtin_ia32_vfmaddsd3 ((__v2df)__A, (__v2df)__B,
    120  1.1  mrg                                             -(__v2df)__C);
    121  1.1  mrg }
    122  1.1  mrg 
    123  1.1  mrg extern __inline __m128
    124  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    125  1.1  mrg _mm_fmsub_ss (__m128 __A, __m128 __B, __m128 __C)
    126  1.1  mrg {
    127  1.1  mrg   return (__m128)__builtin_ia32_vfmaddss3 ((__v4sf)__A, (__v4sf)__B,
    128  1.1  mrg                                            -(__v4sf)__C);
    129  1.1  mrg }
    130  1.1  mrg 
    131  1.1  mrg extern __inline __m128d
    132  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    133  1.1  mrg _mm_fnmadd_pd (__m128d __A, __m128d __B, __m128d __C)
    134  1.1  mrg {
    135  1.1  mrg   return (__m128d)__builtin_ia32_vfmaddpd (-(__v2df)__A, (__v2df)__B,
    136  1.1  mrg                                            (__v2df)__C);
    137  1.1  mrg }
    138  1.1  mrg 
    139  1.1  mrg extern __inline __m256d
    140  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    141  1.1  mrg _mm256_fnmadd_pd (__m256d __A, __m256d __B, __m256d __C)
    142  1.1  mrg {
    143  1.1  mrg   return (__m256d)__builtin_ia32_vfmaddpd256 (-(__v4df)__A, (__v4df)__B,
    144  1.1  mrg                                               (__v4df)__C);
    145  1.1  mrg }
    146  1.1  mrg 
    147  1.1  mrg extern __inline __m128
    148  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    149  1.1  mrg _mm_fnmadd_ps (__m128 __A, __m128 __B, __m128 __C)
    150  1.1  mrg {
    151  1.1  mrg   return (__m128)__builtin_ia32_vfmaddps (-(__v4sf)__A, (__v4sf)__B,
    152  1.1  mrg                                           (__v4sf)__C);
    153  1.1  mrg }
    154  1.1  mrg 
    155  1.1  mrg extern __inline __m256
    156  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    157  1.1  mrg _mm256_fnmadd_ps (__m256 __A, __m256 __B, __m256 __C)
    158  1.1  mrg {
    159  1.1  mrg   return (__m256)__builtin_ia32_vfmaddps256 (-(__v8sf)__A, (__v8sf)__B,
    160  1.1  mrg                                              (__v8sf)__C);
    161  1.1  mrg }
    162  1.1  mrg 
    163  1.1  mrg extern __inline __m128d
    164  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    165  1.1  mrg _mm_fnmadd_sd (__m128d __A, __m128d __B, __m128d __C)
    166  1.1  mrg {
    167  1.1  mrg   return (__m128d)__builtin_ia32_vfmaddsd3 ((__v2df)__A, -(__v2df)__B,
    168  1.1  mrg                                             (__v2df)__C);
    169  1.1  mrg }
    170  1.1  mrg 
    171  1.1  mrg extern __inline __m128
    172  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    173  1.1  mrg _mm_fnmadd_ss (__m128 __A, __m128 __B, __m128 __C)
    174  1.1  mrg {
    175  1.1  mrg   return (__m128)__builtin_ia32_vfmaddss3 ((__v4sf)__A, -(__v4sf)__B,
    176  1.1  mrg                                            (__v4sf)__C);
    177  1.1  mrg }
    178  1.1  mrg 
    179  1.1  mrg extern __inline __m128d
    180  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    181  1.1  mrg _mm_fnmsub_pd (__m128d __A, __m128d __B, __m128d __C)
    182  1.1  mrg {
    183  1.1  mrg   return (__m128d)__builtin_ia32_vfmaddpd (-(__v2df)__A, (__v2df)__B,
    184  1.1  mrg                                            -(__v2df)__C);
    185  1.1  mrg }
    186  1.1  mrg 
    187  1.1  mrg extern __inline __m256d
    188  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    189  1.1  mrg _mm256_fnmsub_pd (__m256d __A, __m256d __B, __m256d __C)
    190  1.1  mrg {
    191  1.1  mrg   return (__m256d)__builtin_ia32_vfmaddpd256 (-(__v4df)__A, (__v4df)__B,
    192  1.1  mrg                                               -(__v4df)__C);
    193  1.1  mrg }
    194  1.1  mrg 
    195  1.1  mrg extern __inline __m128
    196  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    197  1.1  mrg _mm_fnmsub_ps (__m128 __A, __m128 __B, __m128 __C)
    198  1.1  mrg {
    199  1.1  mrg   return (__m128)__builtin_ia32_vfmaddps (-(__v4sf)__A, (__v4sf)__B,
    200  1.1  mrg                                           -(__v4sf)__C);
    201  1.1  mrg }
    202  1.1  mrg 
    203  1.1  mrg extern __inline __m256
    204  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    205  1.1  mrg _mm256_fnmsub_ps (__m256 __A, __m256 __B, __m256 __C)
    206  1.1  mrg {
    207  1.1  mrg   return (__m256)__builtin_ia32_vfmaddps256 (-(__v8sf)__A, (__v8sf)__B,
    208  1.1  mrg                                              -(__v8sf)__C);
    209  1.1  mrg }
    210  1.1  mrg 
    211  1.1  mrg extern __inline __m128d
    212  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    213  1.1  mrg _mm_fnmsub_sd (__m128d __A, __m128d __B, __m128d __C)
    214  1.1  mrg {
    215  1.1  mrg   return (__m128d)__builtin_ia32_vfmaddsd3 ((__v2df)__A, -(__v2df)__B,
    216  1.1  mrg                                             -(__v2df)__C);
    217  1.1  mrg }
    218  1.1  mrg 
    219  1.1  mrg extern __inline __m128
    220  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    221  1.1  mrg _mm_fnmsub_ss (__m128 __A, __m128 __B, __m128 __C)
    222  1.1  mrg {
    223  1.1  mrg   return (__m128)__builtin_ia32_vfmaddss3 ((__v4sf)__A, -(__v4sf)__B,
    224  1.1  mrg                                            -(__v4sf)__C);
    225  1.1  mrg }
    226  1.1  mrg 
    227  1.1  mrg extern __inline __m128d
    228  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    229  1.1  mrg _mm_fmaddsub_pd (__m128d __A, __m128d __B, __m128d __C)
    230  1.1  mrg {
    231  1.1  mrg   return (__m128d)__builtin_ia32_vfmaddsubpd ((__v2df)__A, (__v2df)__B,
    232  1.1  mrg                                               (__v2df)__C);
    233  1.1  mrg }
    234  1.1  mrg 
    235  1.1  mrg extern __inline __m256d
    236  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    237  1.1  mrg _mm256_fmaddsub_pd (__m256d __A, __m256d __B, __m256d __C)
    238  1.1  mrg {
    239  1.1  mrg   return (__m256d)__builtin_ia32_vfmaddsubpd256 ((__v4df)__A,
    240  1.1  mrg                                                  (__v4df)__B,
    241  1.1  mrg                                                  (__v4df)__C);
    242  1.1  mrg }
    243  1.1  mrg 
    244  1.1  mrg extern __inline __m128
    245  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    246  1.1  mrg _mm_fmaddsub_ps (__m128 __A, __m128 __B, __m128 __C)
    247  1.1  mrg {
    248  1.1  mrg   return (__m128)__builtin_ia32_vfmaddsubps ((__v4sf)__A, (__v4sf)__B,
    249  1.1  mrg                                              (__v4sf)__C);
    250  1.1  mrg }
    251  1.1  mrg 
    252  1.1  mrg extern __inline __m256
    253  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    254  1.1  mrg _mm256_fmaddsub_ps (__m256 __A, __m256 __B, __m256 __C)
    255  1.1  mrg {
    256  1.1  mrg   return (__m256)__builtin_ia32_vfmaddsubps256 ((__v8sf)__A,
    257  1.1  mrg                                                 (__v8sf)__B,
    258  1.1  mrg                                                 (__v8sf)__C);
    259  1.1  mrg }
    260  1.1  mrg 
    261  1.1  mrg extern __inline __m128d
    262  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    263  1.1  mrg _mm_fmsubadd_pd (__m128d __A, __m128d __B, __m128d __C)
    264  1.1  mrg {
    265  1.1  mrg   return (__m128d)__builtin_ia32_vfmaddsubpd ((__v2df)__A, (__v2df)__B,
    266  1.1  mrg                                               -(__v2df)__C);
    267  1.1  mrg }
    268  1.1  mrg 
    269  1.1  mrg extern __inline __m256d
    270  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    271  1.1  mrg _mm256_fmsubadd_pd (__m256d __A, __m256d __B, __m256d __C)
    272  1.1  mrg {
    273  1.1  mrg   return (__m256d)__builtin_ia32_vfmaddsubpd256 ((__v4df)__A,
    274  1.1  mrg                                                  (__v4df)__B,
    275  1.1  mrg                                                  -(__v4df)__C);
    276  1.1  mrg }
    277  1.1  mrg 
    278  1.1  mrg extern __inline __m128
    279  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    280  1.1  mrg _mm_fmsubadd_ps (__m128 __A, __m128 __B, __m128 __C)
    281  1.1  mrg {
    282  1.1  mrg   return (__m128)__builtin_ia32_vfmaddsubps ((__v4sf)__A, (__v4sf)__B,
    283  1.1  mrg                                              -(__v4sf)__C);
    284  1.1  mrg }
    285  1.1  mrg 
    286  1.1  mrg extern __inline __m256
    287  1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    288  1.1  mrg _mm256_fmsubadd_ps (__m256 __A, __m256 __B, __m256 __C)
    289  1.1  mrg {
    290  1.1  mrg   return (__m256)__builtin_ia32_vfmaddsubps256 ((__v8sf)__A,
    291  1.1  mrg                                                 (__v8sf)__B,
    292  1.1  mrg                                                 -(__v8sf)__C);
    293  1.1  mrg }
    294  1.1  mrg 
    295  1.1  mrg #endif
    296  1.1  mrg 
    297  1.1  mrg #endif
    298