mm3dnow.h revision 234353
1155228Smjacob/*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------=== 2155228Smjacob * 3196008Smjacob * Permission is hereby granted, free of charge, to any person obtaining a copy 4167403Smjacob * of this software and associated documentation files (the "Software"), to deal 5167403Smjacob * in the Software without restriction, including without limitation the rights 6167403Smjacob * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7167403Smjacob * copies of the Software, and to permit persons to whom the Software is 8167403Smjacob * furnished to do so, subject to the following conditions: 9167403Smjacob * 10167403Smjacob * The above copyright notice and this permission notice shall be included in 11167403Smjacob * all copies or substantial portions of the Software. 12167403Smjacob * 13167403Smjacob * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14167403Smjacob * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15167403Smjacob * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16167403Smjacob * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17167403Smjacob * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18167403Smjacob * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19167403Smjacob * THE SOFTWARE. 20167403Smjacob * 21167403Smjacob *===-----------------------------------------------------------------------=== 22167403Smjacob */ 23167403Smjacob 24167403Smjacob#ifndef _MM3DNOW_H_INCLUDED 25167403Smjacob#define _MM3DNOW_H_INCLUDED 26167403Smjacob 27196008Smjacob#include <mmintrin.h> 28155228Smjacob 29196008Smjacobtypedef float __v2sf __attribute__((__vector_size__(8))); 30196008Smjacob 31155228Smjacobstatic __inline__ void __attribute__((__always_inline__, __nodebug__)) 32196008Smjacob_m_femms() { 33196008Smjacob __builtin_ia32_femms(); 34196008Smjacob} 35196008Smjacob 36196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 37196008Smjacob_m_pavgusb(__m64 __m1, __m64 __m2) { 38196008Smjacob return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); 39238869Smjacob} 40155228Smjacob 41196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 42196008Smjacob_m_pf2id(__m64 __m) { 43196008Smjacob return (__m64)__builtin_ia32_pf2id((__v2sf)__m); 44196008Smjacob} 45196008Smjacob 46292725Smavstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 47292725Smav_m_pfacc(__m64 __m1, __m64 __m2) { 48292725Smav return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); 49196008Smjacob} 50168240Smjacob 51196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 52196008Smjacob_m_pfadd(__m64 __m1, __m64 __m2) { 53196008Smjacob return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); 54196008Smjacob} 55196008Smjacob 56196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 57196008Smjacob_m_pfcmpeq(__m64 __m1, __m64 __m2) { 58196008Smjacob return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); 59196008Smjacob} 60196008Smjacob 61196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 62196008Smjacob_m_pfcmpge(__m64 __m1, __m64 __m2) { 63196008Smjacob return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); 64196008Smjacob} 65196008Smjacob 66196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 67196008Smjacob_m_pfcmpgt(__m64 __m1, __m64 __m2) { 68238869Smjacob return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); 69196008Smjacob} 70196008Smjacob 71196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 72196008Smjacob_m_pfmax(__m64 __m1, __m64 __m2) { 73196008Smjacob return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); 74196008Smjacob} 75196008Smjacob 76196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 77196008Smjacob_m_pfmin(__m64 __m1, __m64 __m2) { 78196008Smjacob return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); 79196008Smjacob} 80196008Smjacob 81196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 82196008Smjacob_m_pfmul(__m64 __m1, __m64 __m2) { 83196008Smjacob return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); 84196008Smjacob} 85196008Smjacob 86196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 87196008Smjacob_m_pfrcp(__m64 __m) { 88196008Smjacob return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); 89196008Smjacob} 90196008Smjacob 91196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 92196008Smjacob_m_pfrcpit1(__m64 __m1, __m64 __m2) { 93196008Smjacob return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); 94196008Smjacob} 95196008Smjacob 96196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 97196008Smjacob_m_pfrcpit2(__m64 __m1, __m64 __m2) { 98196008Smjacob return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); 99196008Smjacob} 100196008Smjacob 101196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 102196008Smjacob_m_pfrsqrt(__m64 __m) { 103196008Smjacob return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); 104196008Smjacob} 105196008Smjacob 106238869Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 107196008Smjacob_m_pfrsqrtit1(__m64 __m1, __m64 __m2) { 108196008Smjacob return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2); 109204397Smjacob} 110196008Smjacob 111196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 112196008Smjacob_m_pfsub(__m64 __m1, __m64 __m2) { 113196008Smjacob return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); 114196008Smjacob} 115196008Smjacob 116196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 117196008Smjacob_m_pfsubr(__m64 __m1, __m64 __m2) { 118196008Smjacob return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); 119196008Smjacob} 120196008Smjacob 121196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 122290104Smav_m_pi2fd(__m64 __m) { 123290104Smav return (__m64)__builtin_ia32_pi2fd((__v2si)__m); 124290104Smav} 125290104Smav 126196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 127196008Smjacob_m_pmulhrw(__m64 __m1, __m64 __m2) { 128196008Smjacob return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); 129196008Smjacob} 130196008Smjacob 131196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 132196008Smjacob_m_pf2iw(__m64 __m) { 133196008Smjacob return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); 134196008Smjacob} 135196008Smjacob 136196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 137196008Smjacob_m_pfnacc(__m64 __m1, __m64 __m2) { 138196008Smjacob return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); 139196008Smjacob} 140196008Smjacob 141196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 142196008Smjacob_m_pfpnacc(__m64 __m1, __m64 __m2) { 143196008Smjacob return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); 144238869Smjacob} 145196008Smjacob 146196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 147297751Smav_m_pi2fw(__m64 __m) { 148291000Smav return (__m64)__builtin_ia32_pi2fw((__v2si)__m); 149297751Smav} 150196008Smjacob 151196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 152238869Smjacob_m_pswapdsf(__m64 __m) { 153196008Smjacob return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); 154196008Smjacob} 155196008Smjacob 156196008Smjacobstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 157196008Smjacob_m_pswapdsi(__m64 __m) { 158155704Smjacob return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); 159196008Smjacob} 160155228Smjacob 161155704Smjacob#endif 162155704Smjacob