1102782Skan/*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------=== 2102782Skan * 3169691Skan * Permission is hereby granted, free of charge, to any person obtaining a copy 4102782Skan * of this software and associated documentation files (the "Software"), to deal 5102782Skan * in the Software without restriction, including without limitation the rights 6102782Skan * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7102782Skan * copies of the Software, and to permit persons to whom the Software is 8102782Skan * furnished to do so, subject to the following conditions: 9102782Skan * 10102782Skan * The above copyright notice and this permission notice shall be included in 11102782Skan * all copies or substantial portions of the Software. 12102782Skan * 13102782Skan * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14102782Skan * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15102782Skan * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16102782Skan * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17102782Skan * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18102782Skan * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19169691Skan * THE SOFTWARE. 20102782Skan * 21102782Skan *===-----------------------------------------------------------------------=== 22102782Skan */ 23102782Skan 24102782Skan#ifndef _MM3DNOW_H_INCLUDED 25102782Skan#define _MM3DNOW_H_INCLUDED 26102782Skan 27102782Skan#include <mmintrin.h> 28102782Skan#include <prfchwintrin.h> 29102782Skan 30102782Skantypedef float __v2sf __attribute__((__vector_size__(8))); 31102782Skan 32102782Skanstatic __inline__ void __attribute__((__always_inline__, __nodebug__)) 33102782Skan_m_femms() { 34102782Skan __builtin_ia32_femms(); 35102782Skan} 36102782Skan 37169691Skanstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 38169691Skan_m_pavgusb(__m64 __m1, __m64 __m2) { 39102782Skan return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); 40169691Skan} 41169691Skan 42169691Skanstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 43169691Skan_m_pf2id(__m64 __m) { 44132720Skan return (__m64)__builtin_ia32_pf2id((__v2sf)__m); 45102782Skan} 46102782Skan 47102782Skanstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 48169691Skan_m_pfacc(__m64 __m1, __m64 __m2) { 49102782Skan return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); 50102782Skan} 51169691Skan 52static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 53_m_pfadd(__m64 __m1, __m64 __m2) { 54 return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); 55} 56 57static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 58_m_pfcmpeq(__m64 __m1, __m64 __m2) { 59 return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); 60} 61 62static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 63_m_pfcmpge(__m64 __m1, __m64 __m2) { 64 return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); 65} 66 67static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 68_m_pfcmpgt(__m64 __m1, __m64 __m2) { 69 return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); 70} 71 72static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 73_m_pfmax(__m64 __m1, __m64 __m2) { 74 return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); 75} 76 77static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 78_m_pfmin(__m64 __m1, __m64 __m2) { 79 return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); 80} 81 82static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 83_m_pfmul(__m64 __m1, __m64 __m2) { 84 return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); 85} 86 87static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 88_m_pfrcp(__m64 __m) { 89 return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); 90} 91 92static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 93_m_pfrcpit1(__m64 __m1, __m64 __m2) { 94 return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); 95} 96 97static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 98_m_pfrcpit2(__m64 __m1, __m64 __m2) { 99 return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); 100} 101 102static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 103_m_pfrsqrt(__m64 __m) { 104 return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); 105} 106 107static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 108_m_pfrsqrtit1(__m64 __m1, __m64 __m2) { 109 return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2); 110} 111 112static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 113_m_pfsub(__m64 __m1, __m64 __m2) { 114 return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); 115} 116 117static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 118_m_pfsubr(__m64 __m1, __m64 __m2) { 119 return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); 120} 121 122static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 123_m_pi2fd(__m64 __m) { 124 return (__m64)__builtin_ia32_pi2fd((__v2si)__m); 125} 126 127static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 128_m_pmulhrw(__m64 __m1, __m64 __m2) { 129 return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); 130} 131 132static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 133_m_pf2iw(__m64 __m) { 134 return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); 135} 136 137static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 138_m_pfnacc(__m64 __m1, __m64 __m2) { 139 return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); 140} 141 142static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 143_m_pfpnacc(__m64 __m1, __m64 __m2) { 144 return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); 145} 146 147static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 148_m_pi2fw(__m64 __m) { 149 return (__m64)__builtin_ia32_pi2fw((__v2si)__m); 150} 151 152static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 153_m_pswapdsf(__m64 __m) { 154 return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); 155} 156 157static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 158_m_pswapdsi(__m64 __m) { 159 return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); 160} 161 162#endif 163