1408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer/*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------===
2408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer *
3408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * Permission is hereby granted, free of charge, to any person obtaining a copy
4408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * of this software and associated documentation files (the "Software"), to deal
5408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * in the Software without restriction, including without limitation the rights
6408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * copies of the Software, and to permit persons to whom the Software is
8408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * furnished to do so, subject to the following conditions:
9408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer *
10408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * The above copyright notice and this permission notice shall be included in
11408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * all copies or substantial portions of the Software.
12408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer *
13408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer * THE SOFTWARE.
20408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer *
21408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer *===-----------------------------------------------------------------------===
22408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer */
23408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
24408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer#ifndef _MM3DNOW_H_INCLUDED
25408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer#define _MM3DNOW_H_INCLUDED
26408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
27408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer#include <mmintrin.h>
2872339a0d160720c6301d629761e701e5fad56f5eMichael Liao#include <prfchwintrin.h>
29408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
30408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencertypedef float __v2sf __attribute__((__vector_size__(8)));
31408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
32408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
33408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_femms() {
34408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  __builtin_ia32_femms();
35408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
36408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
37408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
38408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pavgusb(__m64 __m1, __m64 __m2) {
39408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2);
40408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
41408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
42408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
43408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pf2id(__m64 __m) {
44408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pf2id((__v2sf)__m);
45408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
46408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
47408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
48408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfacc(__m64 __m1, __m64 __m2) {
49408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2);
50408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
51408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
52408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
53408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfadd(__m64 __m1, __m64 __m2) {
54408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2);
55408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
56408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
57408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
58408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpeq(__m64 __m1, __m64 __m2) {
59408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2);
60408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
61408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
62408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
63408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpge(__m64 __m1, __m64 __m2) {
64408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2);
65408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
66408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
67408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
68408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpgt(__m64 __m1, __m64 __m2) {
69408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2);
70408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
71408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
72408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
73408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmax(__m64 __m1, __m64 __m2) {
74408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2);
75408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
76408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
77408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
78408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmin(__m64 __m1, __m64 __m2) {
79408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2);
80408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
81408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
82408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
83408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmul(__m64 __m1, __m64 __m2) {
84408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2);
85408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
86408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
87408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
88408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcp(__m64 __m) {
89408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfrcp((__v2sf)__m);
90408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
91408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
92408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
93408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcpit1(__m64 __m1, __m64 __m2) {
94408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2);
95408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
96408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
97408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
98408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcpit2(__m64 __m1, __m64 __m2) {
99408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2);
100408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
101408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
102408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
103408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrsqrt(__m64 __m) {
104408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m);
105408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
106408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
107408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
108408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrsqrtit1(__m64 __m1, __m64 __m2) {
109f8495d67ca4dd2ea15a4dc59e9a2fa32a9bfa475Craig Topper  return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2);
110408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
111408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
112408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
113408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfsub(__m64 __m1, __m64 __m2) {
114408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2);
115408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
116408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
117408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
118408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfsubr(__m64 __m1, __m64 __m2) {
119408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2);
120408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
121408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
122408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
123408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pi2fd(__m64 __m) {
124408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pi2fd((__v2si)__m);
125408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
126408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
127408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
128408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pmulhrw(__m64 __m1, __m64 __m2) {
129408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2);
130408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
131408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
132408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
133408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pf2iw(__m64 __m) {
134408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pf2iw((__v2sf)__m);
135408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
136408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
137408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
138408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfnacc(__m64 __m1, __m64 __m2) {
139408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2);
140408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
141408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
142408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
143408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfpnacc(__m64 __m1, __m64 __m2) {
144408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2);
145408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
146408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
147408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
148408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pi2fw(__m64 __m) {
149408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pi2fw((__v2si)__m);
150408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
151408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
152408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
153408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pswapdsf(__m64 __m) {
154408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m);
155408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
156408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
157408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
158408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pswapdsi(__m64 __m) {
159408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pswapdsi((__v2si)__m);
160408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
161408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
162408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer#endif
163