mm3dnow.h revision 221345
1193323Sed/*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------=== 2193323Sed * 3193323Sed * Permission is hereby granted, free of charge, to any person obtaining a copy 4193323Sed * of this software and associated documentation files (the "Software"), to deal 5193323Sed * in the Software without restriction, including without limitation the rights 6193323Sed * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7193323Sed * copies of the Software, and to permit persons to whom the Software is 8193323Sed * furnished to do so, subject to the following conditions: 9193323Sed * 10193323Sed * The above copyright notice and this permission notice shall be included in 11193323Sed * all copies or substantial portions of the Software. 12193323Sed * 13239462Sdim * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14239462Sdim * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15239462Sdim * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16193323Sed * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17193323Sed * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18193323Sed * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19193323Sed * THE SOFTWARE. 20193323Sed * 21193323Sed *===-----------------------------------------------------------------------=== 22193323Sed */ 23249423Sdim 24193323Sed#ifndef _MM3DNOW_H_INCLUDED 25193323Sed#define _MM3DNOW_H_INCLUDED 26193323Sed 27193323Sed#include <mmintrin.h> 28193323Sed 29243830Sdimtypedef float __v2sf __attribute__((__vector_size__(8))); 30198090Srdivacky 31193323Sedstatic __inline__ void __attribute__((__always_inline__, __nodebug__)) 32193323Sed_m_femms() { 33193323Sed __builtin_ia32_femms(); 34193323Sed} 35193323Sed 36193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 37239462Sdim_m_pavgusb(__m64 __m1, __m64 __m2) { 38193323Sed return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); 39193323Sed} 40193323Sed 41239462Sdimstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 42193323Sed_m_pf2id(__m64 __m) { 43203954Srdivacky return (__m64)__builtin_ia32_pf2id((__v2sf)__m); 44203954Srdivacky} 45203954Srdivacky 46203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 47203954Srdivacky_m_pfacc(__m64 __m1, __m64 __m2) { 48203954Srdivacky return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); 49203954Srdivacky} 50234353Sdim 51234353Sdimstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 52234353Sdim_m_pfadd(__m64 __m1, __m64 __m2) { 53234353Sdim return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); 54234353Sdim} 55234353Sdim 56203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 57203954Srdivacky_m_pfcmpeq(__m64 __m1, __m64 __m2) { 58203954Srdivacky return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); 59203954Srdivacky} 60239462Sdim 61203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 62203954Srdivacky_m_pfcmpge(__m64 __m1, __m64 __m2) { 63203954Srdivacky return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); 64203954Srdivacky} 65203954Srdivacky 66203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 67203954Srdivacky_m_pfcmpgt(__m64 __m1, __m64 __m2) { 68203954Srdivacky return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); 69205218Srdivacky} 70205218Srdivacky 71205218Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 72205218Srdivacky_m_pfmax(__m64 __m1, __m64 __m2) { 73205218Srdivacky return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); 74203954Srdivacky} 75203954Srdivacky 76203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 77203954Srdivacky_m_pfmin(__m64 __m1, __m64 __m2) { 78203954Srdivacky return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); 79203954Srdivacky} 80193323Sed 81193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 82210299Sed_m_pfmul(__m64 __m1, __m64 __m2) { 83239462Sdim return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); 84203954Srdivacky} 85203954Srdivacky 86203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 87243830Sdim_m_pfrcp(__m64 __m) { 88203954Srdivacky return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); 89243830Sdim} 90239462Sdim 91205407Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 92193323Sed_m_pfrcpit1(__m64 __m1, __m64 __m2) { 93205407Srdivacky return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); 94239462Sdim} 95193323Sed 96193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 97193323Sed_m_pfrcpit2(__m64 __m1, __m64 __m2) { 98193323Sed return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); 99193323Sed} 100193323Sed 101193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 102203954Srdivacky_m_pfrsqrt(__m64 __m) { 103203954Srdivacky return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); 104203954Srdivacky} 105193323Sed 106193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 107193323Sed_m_pfrsqrtit1(__m64 __m1, __m64 __m2) { 108239462Sdim return (__m64)__builtin_ia32_pfrsqrtit1((__v2sf)__m1, (__v2sf)__m2); 109193323Sed} 110193323Sed 111193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 112193323Sed_m_pfsub(__m64 __m1, __m64 __m2) { 113199481Srdivacky return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); 114199481Srdivacky} 115199481Srdivacky 116199481Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 117199481Srdivacky_m_pfsubr(__m64 __m1, __m64 __m2) { 118193323Sed return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); 119193323Sed} 120193323Sed 121198090Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 122193323Sed_m_pi2fd(__m64 __m) { 123198090Srdivacky return (__m64)__builtin_ia32_pi2fd((__v2si)__m); 124193323Sed} 125193323Sed 126193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 127193323Sed_m_pmulhrw(__m64 __m1, __m64 __m2) { 128193323Sed return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); 129193323Sed} 130193323Sed 131static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 132_m_pf2iw(__m64 __m) { 133 return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); 134} 135 136static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 137_m_pfnacc(__m64 __m1, __m64 __m2) { 138 return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); 139} 140 141static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 142_m_pfpnacc(__m64 __m1, __m64 __m2) { 143 return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); 144} 145 146static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 147_m_pi2fw(__m64 __m) { 148 return (__m64)__builtin_ia32_pi2fw((__v2si)__m); 149} 150 151static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 152_m_pswapdsf(__m64 __m) { 153 return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); 154} 155 156static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 157_m_pswapdsi(__m64 __m) { 158 return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); 159} 160 161#endif 162