mm3dnow.h revision 221339
1/*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------===
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to deal
5 * in the Software without restriction, including without limitation the rights
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 * copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 * THE SOFTWARE.
20 *
21 *===-----------------------------------------------------------------------===
22 */
23
24#ifndef _MM3DNOW_H_INCLUDED
25#define _MM3DNOW_H_INCLUDED
26
27#include <mmintrin.h>
28
29typedef float __v2sf __attribute__((__vector_size__(8)));
30
31static __inline__ void __attribute__((__always_inline__, __nodebug__))
32_m_femms() {
33  __builtin_ia32_femms();
34}
35
36static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
37_m_pavgusb(__m64 __m1, __m64 __m2) {
38  return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2);
39}
40
41static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
42_m_pf2id(__m64 __m) {
43  return (__m64)__builtin_ia32_pf2id((__v2sf)__m);
44}
45
46static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
47_m_pfacc(__m64 __m1, __m64 __m2) {
48  return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2);
49}
50
51static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
52_m_pfadd(__m64 __m1, __m64 __m2) {
53  return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2);
54}
55
56static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
57_m_pfcmpeq(__m64 __m1, __m64 __m2) {
58  return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2);
59}
60
61static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
62_m_pfcmpge(__m64 __m1, __m64 __m2) {
63  return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2);
64}
65
66static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
67_m_pfcmpgt(__m64 __m1, __m64 __m2) {
68  return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2);
69}
70
71static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
72_m_pfmax(__m64 __m1, __m64 __m2) {
73  return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2);
74}
75
76static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
77_m_pfmin(__m64 __m1, __m64 __m2) {
78  return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2);
79}
80
81static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
82_m_pfmul(__m64 __m1, __m64 __m2) {
83  return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2);
84}
85
86static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
87_m_pfrcp(__m64 __m) {
88  return (__m64)__builtin_ia32_pfrcp((__v2sf)__m);
89}
90
91static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
92_m_pfrcpit1(__m64 __m1, __m64 __m2) {
93  return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2);
94}
95
96static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
97_m_pfrcpit2(__m64 __m1, __m64 __m2) {
98  return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2);
99}
100
101static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
102_m_pfrsqrt(__m64 __m) {
103  return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m);
104}
105
106static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
107_m_pfrsqrtit1(__m64 __m1, __m64 __m2) {
108  return (__m64)__builtin_ia32_pfrsqrtit1((__v2sf)__m1, (__v2sf)__m2);
109}
110
111static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
112_m_pfsub(__m64 __m1, __m64 __m2) {
113  return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2);
114}
115
116static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
117_m_pfsubr(__m64 __m1, __m64 __m2) {
118  return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2);
119}
120
121static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
122_m_pi2fd(__m64 __m) {
123  return (__m64)__builtin_ia32_pi2fd((__v2si)__m);
124}
125
126static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
127_m_pmulhrw(__m64 __m1, __m64 __m2) {
128  return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2);
129}
130
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