1408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer/*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------=== 2408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * 3408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * Permission is hereby granted, free of charge, to any person obtaining a copy 4408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * of this software and associated documentation files (the "Software"), to deal 5408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * in the Software without restriction, including without limitation the rights 6408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * copies of the Software, and to permit persons to whom the Software is 8408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * furnished to do so, subject to the following conditions: 9408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * 10408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * The above copyright notice and this permission notice shall be included in 11408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * all copies or substantial portions of the Software. 12408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * 13408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * THE SOFTWARE. 20408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * 21408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer *===-----------------------------------------------------------------------=== 22408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer */ 23408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 24408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer#ifndef _MM3DNOW_H_INCLUDED 25408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer#define _MM3DNOW_H_INCLUDED 26408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 27408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer#include <mmintrin.h> 2872339a0d160720c6301d629761e701e5fad56f5eMichael Liao#include <prfchwintrin.h> 29408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 30408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencertypedef float __v2sf __attribute__((__vector_size__(8))); 31408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 32408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ void __attribute__((__always_inline__, __nodebug__)) 33408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_femms() { 34408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer __builtin_ia32_femms(); 35408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 36408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 37408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 38408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pavgusb(__m64 __m1, __m64 __m2) { 39408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); 40408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 41408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 42408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 43408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pf2id(__m64 __m) { 44408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pf2id((__v2sf)__m); 45408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 46408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 47408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 48408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfacc(__m64 __m1, __m64 __m2) { 49408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); 50408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 51408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 52408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 53408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfadd(__m64 __m1, __m64 __m2) { 54408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); 55408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 56408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 57408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 58408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpeq(__m64 __m1, __m64 __m2) { 59408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); 60408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 61408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 62408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 63408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpge(__m64 __m1, __m64 __m2) { 64408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); 65408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 66408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 67408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 68408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpgt(__m64 __m1, __m64 __m2) { 69408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); 70408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 71408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 72408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 73408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmax(__m64 __m1, __m64 __m2) { 74408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); 75408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 76408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 77408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 78408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmin(__m64 __m1, __m64 __m2) { 79408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); 80408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 81408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 82408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 83408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmul(__m64 __m1, __m64 __m2) { 84408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); 85408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 86408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 87408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 88408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcp(__m64 __m) { 89408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); 90408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 91408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 92408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 93408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcpit1(__m64 __m1, __m64 __m2) { 94408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); 95408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 96408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 97408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 98408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcpit2(__m64 __m1, __m64 __m2) { 99408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); 100408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 101408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 102408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 103408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrsqrt(__m64 __m) { 104408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); 105408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 106408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 107408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 108408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrsqrtit1(__m64 __m1, __m64 __m2) { 109f8495d67ca4dd2ea15a4dc59e9a2fa32a9bfa475Craig Topper return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2); 110408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 111408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 112408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 113408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfsub(__m64 __m1, __m64 __m2) { 114408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); 115408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 116408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 117408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 118408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfsubr(__m64 __m1, __m64 __m2) { 119408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); 120408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 121408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 122408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 123408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pi2fd(__m64 __m) { 124408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pi2fd((__v2si)__m); 125408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 126408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 127408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 128408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pmulhrw(__m64 __m1, __m64 __m2) { 129408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); 130408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 131408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 132408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 133408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pf2iw(__m64 __m) { 134408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); 135408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 136408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 137408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 138408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfnacc(__m64 __m1, __m64 __m2) { 139408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); 140408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 141408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 142408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 143408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfpnacc(__m64 __m1, __m64 __m2) { 144408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); 145408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 146408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 147408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 148408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pi2fw(__m64 __m) { 149408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pi2fw((__v2si)__m); 150408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 151408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 152408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 153408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pswapdsf(__m64 __m) { 154408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); 155408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 156408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 157408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 158408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pswapdsi(__m64 __m) { 159408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); 160408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 161408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 162408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer#endif 163