1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | #ifndef _MM3DNOW_H_INCLUDED |
25 | #define _MM3DNOW_H_INCLUDED |
26 | |
27 | #include <mmintrin.h> |
28 | #include <prfchwintrin.h> |
29 | |
30 | typedef float __v2sf __attribute__((__vector_size__(8))); |
31 | |
32 | |
33 | #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnow"), __min_vector_width__(64))) |
34 | |
35 | static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("3dnow"))) |
36 | _m_femms(void) { |
37 | __builtin_ia32_femms(); |
38 | } |
39 | |
40 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
41 | _m_pavgusb(__m64 __m1, __m64 __m2) { |
42 | return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); |
43 | } |
44 | |
45 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
46 | _m_pf2id(__m64 __m) { |
47 | return (__m64)__builtin_ia32_pf2id((__v2sf)__m); |
48 | } |
49 | |
50 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
51 | _m_pfacc(__m64 __m1, __m64 __m2) { |
52 | return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); |
53 | } |
54 | |
55 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
56 | _m_pfadd(__m64 __m1, __m64 __m2) { |
57 | return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); |
58 | } |
59 | |
60 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
61 | _m_pfcmpeq(__m64 __m1, __m64 __m2) { |
62 | return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); |
63 | } |
64 | |
65 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
66 | _m_pfcmpge(__m64 __m1, __m64 __m2) { |
67 | return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); |
68 | } |
69 | |
70 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
71 | _m_pfcmpgt(__m64 __m1, __m64 __m2) { |
72 | return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); |
73 | } |
74 | |
75 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
76 | _m_pfmax(__m64 __m1, __m64 __m2) { |
77 | return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); |
78 | } |
79 | |
80 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
81 | _m_pfmin(__m64 __m1, __m64 __m2) { |
82 | return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); |
83 | } |
84 | |
85 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
86 | _m_pfmul(__m64 __m1, __m64 __m2) { |
87 | return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); |
88 | } |
89 | |
90 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
91 | _m_pfrcp(__m64 __m) { |
92 | return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); |
93 | } |
94 | |
95 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
96 | _m_pfrcpit1(__m64 __m1, __m64 __m2) { |
97 | return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); |
98 | } |
99 | |
100 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
101 | _m_pfrcpit2(__m64 __m1, __m64 __m2) { |
102 | return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); |
103 | } |
104 | |
105 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
106 | _m_pfrsqrt(__m64 __m) { |
107 | return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); |
108 | } |
109 | |
110 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
111 | _m_pfrsqrtit1(__m64 __m1, __m64 __m2) { |
112 | return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2); |
113 | } |
114 | |
115 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
116 | _m_pfsub(__m64 __m1, __m64 __m2) { |
117 | return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); |
118 | } |
119 | |
120 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
121 | _m_pfsubr(__m64 __m1, __m64 __m2) { |
122 | return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); |
123 | } |
124 | |
125 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
126 | _m_pi2fd(__m64 __m) { |
127 | return (__m64)__builtin_ia32_pi2fd((__v2si)__m); |
128 | } |
129 | |
130 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
131 | _m_pmulhrw(__m64 __m1, __m64 __m2) { |
132 | return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); |
133 | } |
134 | |
135 | |
136 | #undef __DEFAULT_FN_ATTRS |
137 | #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnowa"), __min_vector_width__(64))) |
138 | |
139 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
140 | _m_pf2iw(__m64 __m) { |
141 | return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); |
142 | } |
143 | |
144 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
145 | _m_pfnacc(__m64 __m1, __m64 __m2) { |
146 | return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); |
147 | } |
148 | |
149 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
150 | _m_pfpnacc(__m64 __m1, __m64 __m2) { |
151 | return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); |
152 | } |
153 | |
154 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
155 | _m_pi2fw(__m64 __m) { |
156 | return (__m64)__builtin_ia32_pi2fw((__v2si)__m); |
157 | } |
158 | |
159 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
160 | _m_pswapdsf(__m64 __m) { |
161 | return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); |
162 | } |
163 | |
164 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
165 | _m_pswapdsi(__m64 __m) { |
166 | return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); |
167 | } |
168 | |
169 | #undef __DEFAULT_FN_ATTRS |
170 | |
171 | #endif |
172 | |