mm3dnow.h revision 221345
1193323Sed/*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------===
2193323Sed *
3193323Sed * Permission is hereby granted, free of charge, to any person obtaining a copy
4193323Sed * of this software and associated documentation files (the "Software"), to deal
5193323Sed * in the Software without restriction, including without limitation the rights
6193323Sed * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7193323Sed * copies of the Software, and to permit persons to whom the Software is
8193323Sed * furnished to do so, subject to the following conditions:
9193323Sed *
10193323Sed * The above copyright notice and this permission notice shall be included in
11193323Sed * all copies or substantial portions of the Software.
12193323Sed *
13239462Sdim * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14239462Sdim * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15239462Sdim * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16193323Sed * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17193323Sed * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18193323Sed * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19193323Sed * THE SOFTWARE.
20193323Sed *
21193323Sed *===-----------------------------------------------------------------------===
22193323Sed */
23249423Sdim
24193323Sed#ifndef _MM3DNOW_H_INCLUDED
25193323Sed#define _MM3DNOW_H_INCLUDED
26193323Sed
27193323Sed#include <mmintrin.h>
28193323Sed
29243830Sdimtypedef float __v2sf __attribute__((__vector_size__(8)));
30198090Srdivacky
31193323Sedstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
32193323Sed_m_femms() {
33193323Sed  __builtin_ia32_femms();
34193323Sed}
35193323Sed
36193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
37239462Sdim_m_pavgusb(__m64 __m1, __m64 __m2) {
38193323Sed  return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2);
39193323Sed}
40193323Sed
41239462Sdimstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
42193323Sed_m_pf2id(__m64 __m) {
43203954Srdivacky  return (__m64)__builtin_ia32_pf2id((__v2sf)__m);
44203954Srdivacky}
45203954Srdivacky
46203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
47203954Srdivacky_m_pfacc(__m64 __m1, __m64 __m2) {
48203954Srdivacky  return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2);
49203954Srdivacky}
50234353Sdim
51234353Sdimstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
52234353Sdim_m_pfadd(__m64 __m1, __m64 __m2) {
53234353Sdim  return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2);
54234353Sdim}
55234353Sdim
56203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
57203954Srdivacky_m_pfcmpeq(__m64 __m1, __m64 __m2) {
58203954Srdivacky  return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2);
59203954Srdivacky}
60239462Sdim
61203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
62203954Srdivacky_m_pfcmpge(__m64 __m1, __m64 __m2) {
63203954Srdivacky  return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2);
64203954Srdivacky}
65203954Srdivacky
66203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
67203954Srdivacky_m_pfcmpgt(__m64 __m1, __m64 __m2) {
68203954Srdivacky  return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2);
69205218Srdivacky}
70205218Srdivacky
71205218Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
72205218Srdivacky_m_pfmax(__m64 __m1, __m64 __m2) {
73205218Srdivacky  return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2);
74203954Srdivacky}
75203954Srdivacky
76203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
77203954Srdivacky_m_pfmin(__m64 __m1, __m64 __m2) {
78203954Srdivacky  return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2);
79203954Srdivacky}
80193323Sed
81193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
82210299Sed_m_pfmul(__m64 __m1, __m64 __m2) {
83239462Sdim  return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2);
84203954Srdivacky}
85203954Srdivacky
86203954Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
87243830Sdim_m_pfrcp(__m64 __m) {
88203954Srdivacky  return (__m64)__builtin_ia32_pfrcp((__v2sf)__m);
89243830Sdim}
90239462Sdim
91205407Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
92193323Sed_m_pfrcpit1(__m64 __m1, __m64 __m2) {
93205407Srdivacky  return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2);
94239462Sdim}
95193323Sed
96193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
97193323Sed_m_pfrcpit2(__m64 __m1, __m64 __m2) {
98193323Sed  return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2);
99193323Sed}
100193323Sed
101193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
102203954Srdivacky_m_pfrsqrt(__m64 __m) {
103203954Srdivacky  return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m);
104203954Srdivacky}
105193323Sed
106193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
107193323Sed_m_pfrsqrtit1(__m64 __m1, __m64 __m2) {
108239462Sdim  return (__m64)__builtin_ia32_pfrsqrtit1((__v2sf)__m1, (__v2sf)__m2);
109193323Sed}
110193323Sed
111193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
112193323Sed_m_pfsub(__m64 __m1, __m64 __m2) {
113199481Srdivacky  return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2);
114199481Srdivacky}
115199481Srdivacky
116199481Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
117199481Srdivacky_m_pfsubr(__m64 __m1, __m64 __m2) {
118193323Sed  return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2);
119193323Sed}
120193323Sed
121198090Srdivackystatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
122193323Sed_m_pi2fd(__m64 __m) {
123198090Srdivacky  return (__m64)__builtin_ia32_pi2fd((__v2si)__m);
124193323Sed}
125193323Sed
126193323Sedstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
127193323Sed_m_pmulhrw(__m64 __m1, __m64 __m2) {
128193323Sed  return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2);
129193323Sed}
130193323Sed
131static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
132_m_pf2iw(__m64 __m) {
133  return (__m64)__builtin_ia32_pf2iw((__v2sf)__m);
134}
135
136static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
137_m_pfnacc(__m64 __m1, __m64 __m2) {
138  return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2);
139}
140
141static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
142_m_pfpnacc(__m64 __m1, __m64 __m2) {
143  return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2);
144}
145
146static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
147_m_pi2fw(__m64 __m) {
148  return (__m64)__builtin_ia32_pi2fw((__v2si)__m);
149}
150
151static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
152_m_pswapdsf(__m64 __m) {
153  return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m);
154}
155
156static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
157_m_pswapdsi(__m64 __m) {
158  return (__m64)__builtin_ia32_pswapdsi((__v2si)__m);
159}
160
161#endif
162