OLD | NEW |
| (Empty) |
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 | |
29 typedef float __v2sf __attribute__((__vector_size__(8))); | |
30 | |
31 static __inline__ void __attribute__((__always_inline__, __nodebug__)) | |
32 _m_femms() { | |
33 __builtin_ia32_femms(); | |
34 } | |
35 | |
36 static __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 | |
41 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) | |
42 _m_pf2id(__m64 __m) { | |
43 return (__m64)__builtin_ia32_pf2id((__v2sf)__m); | |
44 } | |
45 | |
46 static __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 | |
51 static __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 | |
56 static __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 | |
61 static __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 | |
66 static __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 | |
71 static __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 | |
76 static __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 | |
81 static __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 | |
86 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) | |
87 _m_pfrcp(__m64 __m) { | |
88 return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); | |
89 } | |
90 | |
91 static __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 | |
96 static __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 | |
101 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) | |
102 _m_pfrsqrt(__m64 __m) { | |
103 return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); | |
104 } | |
105 | |
106 static __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 | |
111 static __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 | |
116 static __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 | |
121 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) | |
122 _m_pi2fd(__m64 __m) { | |
123 return (__m64)__builtin_ia32_pi2fd((__v2si)__m); | |
124 } | |
125 | |
126 static __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 | |
131 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) | |
132 _m_pf2iw(__m64 __m) { | |
133 return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); | |
134 } | |
135 | |
136 static __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 | |
141 static __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 | |
146 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) | |
147 _m_pi2fw(__m64 __m) { | |
148 return (__m64)__builtin_ia32_pi2fw((__v2si)__m); | |
149 } | |
150 | |
151 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) | |
152 _m_pswapdsf(__m64 __m) { | |
153 return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); | |
154 } | |
155 | |
156 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) | |
157 _m_pswapdsi(__m64 __m) { | |
158 return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); | |
159 } | |
160 | |
161 #endif | |
OLD | NEW |