mm3dnow.h revision 408d5d1a3c578e59b457ba2065e866f9d71ffec5
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> 28408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 29408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencertypedef float __v2sf __attribute__((__vector_size__(8))); 30408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 31408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ void __attribute__((__always_inline__, __nodebug__)) 32408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_femms() { 33408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer __builtin_ia32_femms(); 34408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 35408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 36408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 37408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pavgusb(__m64 __m1, __m64 __m2) { 38408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); 39408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 40408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 41408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 42408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pf2id(__m64 __m) { 43408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pf2id((__v2sf)__m); 44408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 45408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 46408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 47408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfacc(__m64 __m1, __m64 __m2) { 48408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); 49408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 50408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 51408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 52408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfadd(__m64 __m1, __m64 __m2) { 53408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); 54408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 55408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 56408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 57408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpeq(__m64 __m1, __m64 __m2) { 58408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); 59408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 60408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 61408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 62408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpge(__m64 __m1, __m64 __m2) { 63408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); 64408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 65408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 66408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 67408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpgt(__m64 __m1, __m64 __m2) { 68408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); 69408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 70408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 71408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 72408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmax(__m64 __m1, __m64 __m2) { 73408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); 74408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 75408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 76408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 77408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmin(__m64 __m1, __m64 __m2) { 78408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); 79408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 80408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 81408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 82408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmul(__m64 __m1, __m64 __m2) { 83408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); 84408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 85408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 86408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 87408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcp(__m64 __m) { 88408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); 89408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 90408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 91408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 92408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcpit1(__m64 __m1, __m64 __m2) { 93408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); 94408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 95408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 96408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 97408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcpit2(__m64 __m1, __m64 __m2) { 98408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); 99408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 100408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 101408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 102408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrsqrt(__m64 __m) { 103408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); 104408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 105408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 106408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 107408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrsqrtit1(__m64 __m1, __m64 __m2) { 108408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfrsqrtit1((__v2sf)__m1, (__v2sf)__m2); 109408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 110408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 111408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 112408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfsub(__m64 __m1, __m64 __m2) { 113408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); 114408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 115408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 116408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 117408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfsubr(__m64 __m1, __m64 __m2) { 118408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); 119408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 120408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 121408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 122408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pi2fd(__m64 __m) { 123408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pi2fd((__v2si)__m); 124408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 125408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 126408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 127408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pmulhrw(__m64 __m1, __m64 __m2) { 128408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); 129408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 130408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 131408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 132408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pf2iw(__m64 __m) { 133408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); 134408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 135408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 136408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 137408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfnacc(__m64 __m1, __m64 __m2) { 138408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); 139408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 140408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 141408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 142408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfpnacc(__m64 __m1, __m64 __m2) { 143408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); 144408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 145408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 146408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 147408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pi2fw(__m64 __m) { 148408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pi2fw((__v2si)__m); 149408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 150408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 151408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 152408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pswapdsf(__m64 __m) { 153408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); 154408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 155408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 156408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 157408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pswapdsi(__m64 __m) { 158408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); 159408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer} 160408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer 161408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer#endif 162