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