mm3dnow.h revision 408d5d1a3c578e59b457ba2065e866f9d71ffec5
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>
28408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
29408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencertypedef float __v2sf __attribute__((__vector_size__(8)));
30408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
31408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
32408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_femms() {
33408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  __builtin_ia32_femms();
34408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
35408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
36408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
37408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pavgusb(__m64 __m1, __m64 __m2) {
38408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2);
39408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
40408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
41408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
42408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pf2id(__m64 __m) {
43408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pf2id((__v2sf)__m);
44408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
45408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
46408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
47408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfacc(__m64 __m1, __m64 __m2) {
48408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2);
49408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
50408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
51408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
52408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfadd(__m64 __m1, __m64 __m2) {
53408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2);
54408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
55408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
56408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
57408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpeq(__m64 __m1, __m64 __m2) {
58408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2);
59408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
60408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
61408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
62408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpge(__m64 __m1, __m64 __m2) {
63408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2);
64408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
65408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
66408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
67408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfcmpgt(__m64 __m1, __m64 __m2) {
68408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2);
69408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
70408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
71408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
72408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmax(__m64 __m1, __m64 __m2) {
73408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2);
74408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
75408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
76408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
77408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmin(__m64 __m1, __m64 __m2) {
78408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2);
79408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
80408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
81408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
82408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfmul(__m64 __m1, __m64 __m2) {
83408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2);
84408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
85408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
86408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
87408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcp(__m64 __m) {
88408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfrcp((__v2sf)__m);
89408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
90408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
91408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
92408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcpit1(__m64 __m1, __m64 __m2) {
93408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2);
94408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
95408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
96408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
97408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrcpit2(__m64 __m1, __m64 __m2) {
98408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2);
99408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
100408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
101408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
102408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrsqrt(__m64 __m) {
103408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m);
104408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
105408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
106408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
107408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfrsqrtit1(__m64 __m1, __m64 __m2) {
108408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfrsqrtit1((__v2sf)__m1, (__v2sf)__m2);
109408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
110408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
111408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
112408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfsub(__m64 __m1, __m64 __m2) {
113408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2);
114408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
115408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
116408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
117408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfsubr(__m64 __m1, __m64 __m2) {
118408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2);
119408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
120408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
121408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
122408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pi2fd(__m64 __m) {
123408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pi2fd((__v2si)__m);
124408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
125408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
126408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
127408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pmulhrw(__m64 __m1, __m64 __m2) {
128408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2);
129408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
130408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
131408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
132408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pf2iw(__m64 __m) {
133408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pf2iw((__v2sf)__m);
134408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
135408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
136408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
137408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfnacc(__m64 __m1, __m64 __m2) {
138408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2);
139408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
140408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
141408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
142408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pfpnacc(__m64 __m1, __m64 __m2) {
143408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2);
144408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
145408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
146408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
147408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pi2fw(__m64 __m) {
148408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pi2fw((__v2si)__m);
149408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
150408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
151408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
152408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pswapdsf(__m64 __m) {
153408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m);
154408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
155408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
156408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
157408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer_m_pswapdsi(__m64 __m) {
158408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer  return (__m64)__builtin_ia32_pswapdsi((__v2si)__m);
159408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer}
160408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer
161408d5d1a3c578e59b457ba2065e866f9d71ffec5Michael J. Spencer#endif
162