clang API Documentation

mm3dnow.h
Go to the documentation of this file.
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