clang API Documentation
00001 /*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------=== 00002 * 00003 * Permission is hereby granted, free of charge, to any person obtaining a copy 00004 * of this software and associated documentation files (the "Software"), to deal 00005 * in the Software without restriction, including without limitation the rights 00006 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00007 * copies of the Software, and to permit persons to whom the Software is 00008 * furnished to do so, subject to the following conditions: 00009 * 00010 * The above copyright notice and this permission notice shall be included in 00011 * all copies or substantial portions of the Software. 00012 * 00013 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00014 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00015 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00016 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00017 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00018 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00019 * THE SOFTWARE. 00020 * 00021 *===-----------------------------------------------------------------------=== 00022 */ 00023 00024 #ifndef _MM3DNOW_H_INCLUDED 00025 #define _MM3DNOW_H_INCLUDED 00026 00027 #include <mmintrin.h> 00028 00029 typedef float __v2sf __attribute__((__vector_size__(8))); 00030 00031 static __inline__ void __attribute__((__always_inline__, __nodebug__)) 00032 _m_femms() { 00033 __builtin_ia32_femms(); 00034 } 00035 00036 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00037 _m_pavgusb(__m64 __m1, __m64 __m2) { 00038 return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); 00039 } 00040 00041 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00042 _m_pf2id(__m64 __m) { 00043 return (__m64)__builtin_ia32_pf2id((__v2sf)__m); 00044 } 00045 00046 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00047 _m_pfacc(__m64 __m1, __m64 __m2) { 00048 return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); 00049 } 00050 00051 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00052 _m_pfadd(__m64 __m1, __m64 __m2) { 00053 return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); 00054 } 00055 00056 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00057 _m_pfcmpeq(__m64 __m1, __m64 __m2) { 00058 return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); 00059 } 00060 00061 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00062 _m_pfcmpge(__m64 __m1, __m64 __m2) { 00063 return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); 00064 } 00065 00066 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00067 _m_pfcmpgt(__m64 __m1, __m64 __m2) { 00068 return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); 00069 } 00070 00071 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00072 _m_pfmax(__m64 __m1, __m64 __m2) { 00073 return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); 00074 } 00075 00076 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00077 _m_pfmin(__m64 __m1, __m64 __m2) { 00078 return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); 00079 } 00080 00081 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00082 _m_pfmul(__m64 __m1, __m64 __m2) { 00083 return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); 00084 } 00085 00086 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00087 _m_pfrcp(__m64 __m) { 00088 return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); 00089 } 00090 00091 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00092 _m_pfrcpit1(__m64 __m1, __m64 __m2) { 00093 return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); 00094 } 00095 00096 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00097 _m_pfrcpit2(__m64 __m1, __m64 __m2) { 00098 return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); 00099 } 00100 00101 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00102 _m_pfrsqrt(__m64 __m) { 00103 return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); 00104 } 00105 00106 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00107 _m_pfrsqrtit1(__m64 __m1, __m64 __m2) { 00108 return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2); 00109 } 00110 00111 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00112 _m_pfsub(__m64 __m1, __m64 __m2) { 00113 return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); 00114 } 00115 00116 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00117 _m_pfsubr(__m64 __m1, __m64 __m2) { 00118 return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); 00119 } 00120 00121 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00122 _m_pi2fd(__m64 __m) { 00123 return (__m64)__builtin_ia32_pi2fd((__v2si)__m); 00124 } 00125 00126 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00127 _m_pmulhrw(__m64 __m1, __m64 __m2) { 00128 return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); 00129 } 00130 00131 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00132 _m_pf2iw(__m64 __m) { 00133 return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); 00134 } 00135 00136 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00137 _m_pfnacc(__m64 __m1, __m64 __m2) { 00138 return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); 00139 } 00140 00141 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00142 _m_pfpnacc(__m64 __m1, __m64 __m2) { 00143 return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); 00144 } 00145 00146 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00147 _m_pi2fw(__m64 __m) { 00148 return (__m64)__builtin_ia32_pi2fw((__v2si)__m); 00149 } 00150 00151 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00152 _m_pswapdsf(__m64 __m) { 00153 return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); 00154 } 00155 00156 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 00157 _m_pswapdsi(__m64 __m) { 00158 return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); 00159 } 00160 00161 #endif