mm3dnow.h revision 249423
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 24#ifndef _MM3DNOW_H_INCLUDED 25#define _MM3DNOW_H_INCLUDED 26 27#include <mmintrin.h> 28#include <prfchwintrin.h> 29 30typedef float __v2sf __attribute__((__vector_size__(8))); 31 32static __inline__ void __attribute__((__always_inline__, __nodebug__)) 33_m_femms() { 34 __builtin_ia32_femms(); 35} 36 37static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 38_m_pavgusb(__m64 __m1, __m64 __m2) { 39 return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); 40} 41 42static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 43_m_pf2id(__m64 __m) { 44 return (__m64)__builtin_ia32_pf2id((__v2sf)__m); 45} 46 47static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 48_m_pfacc(__m64 __m1, __m64 __m2) { 49 return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); 50} 51 52static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 53_m_pfadd(__m64 __m1, __m64 __m2) { 54 return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); 55} 56 57static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 58_m_pfcmpeq(__m64 __m1, __m64 __m2) { 59 return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); 60} 61 62static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 63_m_pfcmpge(__m64 __m1, __m64 __m2) { 64 return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); 65} 66 67static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 68_m_pfcmpgt(__m64 __m1, __m64 __m2) { 69 return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); 70} 71 72static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 73_m_pfmax(__m64 __m1, __m64 __m2) { 74 return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); 75} 76 77static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 78_m_pfmin(__m64 __m1, __m64 __m2) { 79 return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); 80} 81 82static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 83_m_pfmul(__m64 __m1, __m64 __m2) { 84 return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); 85} 86 87static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 88_m_pfrcp(__m64 __m) { 89 return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); 90} 91 92static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 93_m_pfrcpit1(__m64 __m1, __m64 __m2) { 94 return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); 95} 96 97static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 98_m_pfrcpit2(__m64 __m1, __m64 __m2) { 99 return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); 100} 101 102static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 103_m_pfrsqrt(__m64 __m) { 104 return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); 105} 106 107static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 108_m_pfrsqrtit1(__m64 __m1, __m64 __m2) { 109 return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2); 110} 111 112static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 113_m_pfsub(__m64 __m1, __m64 __m2) { 114 return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); 115} 116 117static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 118_m_pfsubr(__m64 __m1, __m64 __m2) { 119 return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); 120} 121 122static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 123_m_pi2fd(__m64 __m) { 124 return (__m64)__builtin_ia32_pi2fd((__v2si)__m); 125} 126 127static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 128_m_pmulhrw(__m64 __m1, __m64 __m2) { 129 return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); 130} 131 132static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 133_m_pf2iw(__m64 __m) { 134 return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); 135} 136 137static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 138_m_pfnacc(__m64 __m1, __m64 __m2) { 139 return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); 140} 141 142static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 143_m_pfpnacc(__m64 __m1, __m64 __m2) { 144 return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); 145} 146 147static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 148_m_pi2fw(__m64 __m) { 149 return (__m64)__builtin_ia32_pi2fw((__v2si)__m); 150} 151 152static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 153_m_pswapdsf(__m64 __m) { 154 return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); 155} 156 157static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 158_m_pswapdsi(__m64 __m) { 159 return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); 160} 161 162#endif 163