mm3dnow.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------===
  2. *
  3. * Permission is hereby granted, free of charge, to any person obtaining a copy
  4. * of this software and associated documentation files (the "Software"), to deal
  5. * in the Software without restriction, including without limitation the rights
  6. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  7. * copies of the Software, and to permit persons to whom the Software is
  8. * furnished to do so, subject to the following conditions:
  9. *
  10. * The above copyright notice and this permission notice shall be included in
  11. * all copies or substantial portions of the Software.
  12. *
  13. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  14. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  15. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  16. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  18. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  19. * THE SOFTWARE.
  20. *
  21. *===-----------------------------------------------------------------------===
  22. */
  23. #ifndef _MM3DNOW_H_INCLUDED
  24. #define _MM3DNOW_H_INCLUDED
  25. #include <mmintrin.h>
  26. #include <prfchwintrin.h>
  27. typedef float __v2sf __attribute__((__vector_size__(8)));
  28. static __inline__ void __attribute__((__always_inline__, __nodebug__))
  29. _m_femms() {
  30. __builtin_ia32_femms();
  31. }
  32. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  33. _m_pavgusb(__m64 __m1, __m64 __m2) {
  34. return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2);
  35. }
  36. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  37. _m_pf2id(__m64 __m) {
  38. return (__m64)__builtin_ia32_pf2id((__v2sf)__m);
  39. }
  40. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  41. _m_pfacc(__m64 __m1, __m64 __m2) {
  42. return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2);
  43. }
  44. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  45. _m_pfadd(__m64 __m1, __m64 __m2) {
  46. return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2);
  47. }
  48. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  49. _m_pfcmpeq(__m64 __m1, __m64 __m2) {
  50. return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2);
  51. }
  52. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  53. _m_pfcmpge(__m64 __m1, __m64 __m2) {
  54. return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2);
  55. }
  56. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  57. _m_pfcmpgt(__m64 __m1, __m64 __m2) {
  58. return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2);
  59. }
  60. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  61. _m_pfmax(__m64 __m1, __m64 __m2) {
  62. return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2);
  63. }
  64. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  65. _m_pfmin(__m64 __m1, __m64 __m2) {
  66. return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2);
  67. }
  68. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  69. _m_pfmul(__m64 __m1, __m64 __m2) {
  70. return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2);
  71. }
  72. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  73. _m_pfrcp(__m64 __m) {
  74. return (__m64)__builtin_ia32_pfrcp((__v2sf)__m);
  75. }
  76. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  77. _m_pfrcpit1(__m64 __m1, __m64 __m2) {
  78. return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2);
  79. }
  80. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  81. _m_pfrcpit2(__m64 __m1, __m64 __m2) {
  82. return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2);
  83. }
  84. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  85. _m_pfrsqrt(__m64 __m) {
  86. return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m);
  87. }
  88. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  89. _m_pfrsqrtit1(__m64 __m1, __m64 __m2) {
  90. return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2);
  91. }
  92. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  93. _m_pfsub(__m64 __m1, __m64 __m2) {
  94. return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2);
  95. }
  96. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  97. _m_pfsubr(__m64 __m1, __m64 __m2) {
  98. return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2);
  99. }
  100. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  101. _m_pi2fd(__m64 __m) {
  102. return (__m64)__builtin_ia32_pi2fd((__v2si)__m);
  103. }
  104. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  105. _m_pmulhrw(__m64 __m1, __m64 __m2) {
  106. return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2);
  107. }
  108. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  109. _m_pf2iw(__m64 __m) {
  110. return (__m64)__builtin_ia32_pf2iw((__v2sf)__m);
  111. }
  112. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  113. _m_pfnacc(__m64 __m1, __m64 __m2) {
  114. return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2);
  115. }
  116. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  117. _m_pfpnacc(__m64 __m1, __m64 __m2) {
  118. return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2);
  119. }
  120. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  121. _m_pi2fw(__m64 __m) {
  122. return (__m64)__builtin_ia32_pi2fw((__v2si)__m);
  123. }
  124. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  125. _m_pswapdsf(__m64 __m) {
  126. return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m);
  127. }
  128. static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
  129. _m_pswapdsi(__m64 __m) {
  130. return (__m64)__builtin_ia32_pswapdsi((__v2si)__m);
  131. }
  132. #endif