Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*===---- fmaintrin.h - FMA 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-exception
  6.  *
  7.  *===-----------------------------------------------------------------------===
  8.  */
  9.  
  10. #ifndef __IMMINTRIN_H
  11. #error "Never use <fmaintrin.h> directly; include <immintrin.h> instead."
  12. #endif
  13.  
  14. #ifndef __FMAINTRIN_H
  15. #define __FMAINTRIN_H
  16.  
  17. /* Define the default attributes for the functions in this file. */
  18. #define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("fma"), __min_vector_width__(128)))
  19. #define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("fma"), __min_vector_width__(256)))
  20.  
  21. static __inline__ __m128 __DEFAULT_FN_ATTRS128
  22. _mm_fmadd_ps(__m128 __A, __m128 __B, __m128 __C)
  23. {
  24.   return (__m128)__builtin_ia32_vfmaddps((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  25. }
  26.  
  27. static __inline__ __m128d __DEFAULT_FN_ATTRS128
  28. _mm_fmadd_pd(__m128d __A, __m128d __B, __m128d __C)
  29. {
  30.   return (__m128d)__builtin_ia32_vfmaddpd((__v2df)__A, (__v2df)__B, (__v2df)__C);
  31. }
  32.  
  33. static __inline__ __m128 __DEFAULT_FN_ATTRS128
  34. _mm_fmadd_ss(__m128 __A, __m128 __B, __m128 __C)
  35. {
  36.   return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  37. }
  38.  
  39. static __inline__ __m128d __DEFAULT_FN_ATTRS128
  40. _mm_fmadd_sd(__m128d __A, __m128d __B, __m128d __C)
  41. {
  42.   return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, (__v2df)__B, (__v2df)__C);
  43. }
  44.  
  45. static __inline__ __m128 __DEFAULT_FN_ATTRS128
  46. _mm_fmsub_ps(__m128 __A, __m128 __B, __m128 __C)
  47. {
  48.   return (__m128)__builtin_ia32_vfmaddps((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
  49. }
  50.  
  51. static __inline__ __m128d __DEFAULT_FN_ATTRS128
  52. _mm_fmsub_pd(__m128d __A, __m128d __B, __m128d __C)
  53. {
  54.   return (__m128d)__builtin_ia32_vfmaddpd((__v2df)__A, (__v2df)__B, -(__v2df)__C);
  55. }
  56.  
  57. static __inline__ __m128 __DEFAULT_FN_ATTRS128
  58. _mm_fmsub_ss(__m128 __A, __m128 __B, __m128 __C)
  59. {
  60.   return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
  61. }
  62.  
  63. static __inline__ __m128d __DEFAULT_FN_ATTRS128
  64. _mm_fmsub_sd(__m128d __A, __m128d __B, __m128d __C)
  65. {
  66.   return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, (__v2df)__B, -(__v2df)__C);
  67. }
  68.  
  69. static __inline__ __m128 __DEFAULT_FN_ATTRS128
  70. _mm_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C)
  71. {
  72.   return (__m128)__builtin_ia32_vfmaddps(-(__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  73. }
  74.  
  75. static __inline__ __m128d __DEFAULT_FN_ATTRS128
  76. _mm_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C)
  77. {
  78.   return (__m128d)__builtin_ia32_vfmaddpd(-(__v2df)__A, (__v2df)__B, (__v2df)__C);
  79. }
  80.  
  81. static __inline__ __m128 __DEFAULT_FN_ATTRS128
  82. _mm_fnmadd_ss(__m128 __A, __m128 __B, __m128 __C)
  83. {
  84.   return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, -(__v4sf)__B, (__v4sf)__C);
  85. }
  86.  
  87. static __inline__ __m128d __DEFAULT_FN_ATTRS128
  88. _mm_fnmadd_sd(__m128d __A, __m128d __B, __m128d __C)
  89. {
  90.   return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, -(__v2df)__B, (__v2df)__C);
  91. }
  92.  
  93. static __inline__ __m128 __DEFAULT_FN_ATTRS128
  94. _mm_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C)
  95. {
  96.   return (__m128)__builtin_ia32_vfmaddps(-(__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
  97. }
  98.  
  99. static __inline__ __m128d __DEFAULT_FN_ATTRS128
  100. _mm_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C)
  101. {
  102.   return (__m128d)__builtin_ia32_vfmaddpd(-(__v2df)__A, (__v2df)__B, -(__v2df)__C);
  103. }
  104.  
  105. static __inline__ __m128 __DEFAULT_FN_ATTRS128
  106. _mm_fnmsub_ss(__m128 __A, __m128 __B, __m128 __C)
  107. {
  108.   return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, -(__v4sf)__B, -(__v4sf)__C);
  109. }
  110.  
  111. static __inline__ __m128d __DEFAULT_FN_ATTRS128
  112. _mm_fnmsub_sd(__m128d __A, __m128d __B, __m128d __C)
  113. {
  114.   return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, -(__v2df)__B, -(__v2df)__C);
  115. }
  116.  
  117. static __inline__ __m128 __DEFAULT_FN_ATTRS128
  118. _mm_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C)
  119. {
  120.   return (__m128)__builtin_ia32_vfmaddsubps((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  121. }
  122.  
  123. static __inline__ __m128d __DEFAULT_FN_ATTRS128
  124. _mm_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C)
  125. {
  126.   return (__m128d)__builtin_ia32_vfmaddsubpd((__v2df)__A, (__v2df)__B, (__v2df)__C);
  127. }
  128.  
  129. static __inline__ __m128 __DEFAULT_FN_ATTRS128
  130. _mm_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C)
  131. {
  132.   return (__m128)__builtin_ia32_vfmaddsubps((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
  133. }
  134.  
  135. static __inline__ __m128d __DEFAULT_FN_ATTRS128
  136. _mm_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C)
  137. {
  138.   return (__m128d)__builtin_ia32_vfmaddsubpd((__v2df)__A, (__v2df)__B, -(__v2df)__C);
  139. }
  140.  
  141. static __inline__ __m256 __DEFAULT_FN_ATTRS256
  142. _mm256_fmadd_ps(__m256 __A, __m256 __B, __m256 __C)
  143. {
  144.   return (__m256)__builtin_ia32_vfmaddps256((__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
  145. }
  146.  
  147. static __inline__ __m256d __DEFAULT_FN_ATTRS256
  148. _mm256_fmadd_pd(__m256d __A, __m256d __B, __m256d __C)
  149. {
  150.   return (__m256d)__builtin_ia32_vfmaddpd256((__v4df)__A, (__v4df)__B, (__v4df)__C);
  151. }
  152.  
  153. static __inline__ __m256 __DEFAULT_FN_ATTRS256
  154. _mm256_fmsub_ps(__m256 __A, __m256 __B, __m256 __C)
  155. {
  156.   return (__m256)__builtin_ia32_vfmaddps256((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
  157. }
  158.  
  159. static __inline__ __m256d __DEFAULT_FN_ATTRS256
  160. _mm256_fmsub_pd(__m256d __A, __m256d __B, __m256d __C)
  161. {
  162.   return (__m256d)__builtin_ia32_vfmaddpd256((__v4df)__A, (__v4df)__B, -(__v4df)__C);
  163. }
  164.  
  165. static __inline__ __m256 __DEFAULT_FN_ATTRS256
  166. _mm256_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C)
  167. {
  168.   return (__m256)__builtin_ia32_vfmaddps256(-(__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
  169. }
  170.  
  171. static __inline__ __m256d __DEFAULT_FN_ATTRS256
  172. _mm256_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C)
  173. {
  174.   return (__m256d)__builtin_ia32_vfmaddpd256(-(__v4df)__A, (__v4df)__B, (__v4df)__C);
  175. }
  176.  
  177. static __inline__ __m256 __DEFAULT_FN_ATTRS256
  178. _mm256_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C)
  179. {
  180.   return (__m256)__builtin_ia32_vfmaddps256(-(__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
  181. }
  182.  
  183. static __inline__ __m256d __DEFAULT_FN_ATTRS256
  184. _mm256_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C)
  185. {
  186.   return (__m256d)__builtin_ia32_vfmaddpd256(-(__v4df)__A, (__v4df)__B, -(__v4df)__C);
  187. }
  188.  
  189. static __inline__ __m256 __DEFAULT_FN_ATTRS256
  190. _mm256_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C)
  191. {
  192.   return (__m256)__builtin_ia32_vfmaddsubps256((__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
  193. }
  194.  
  195. static __inline__ __m256d __DEFAULT_FN_ATTRS256
  196. _mm256_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C)
  197. {
  198.   return (__m256d)__builtin_ia32_vfmaddsubpd256((__v4df)__A, (__v4df)__B, (__v4df)__C);
  199. }
  200.  
  201. static __inline__ __m256 __DEFAULT_FN_ATTRS256
  202. _mm256_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C)
  203. {
  204.   return (__m256)__builtin_ia32_vfmaddsubps256((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
  205. }
  206.  
  207. static __inline__ __m256d __DEFAULT_FN_ATTRS256
  208. _mm256_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C)
  209. {
  210.   return (__m256d)__builtin_ia32_vfmaddsubpd256((__v4df)__A, (__v4df)__B, -(__v4df)__C);
  211. }
  212.  
  213. #undef __DEFAULT_FN_ATTRS128
  214. #undef __DEFAULT_FN_ATTRS256
  215.  
  216. #endif /* __FMAINTRIN_H */
  217.