Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
screetsec
GitHub Repository: screetsec/TheFatRat
Path: blob/master/tools/android-sdk/renderscript/clang-include/mm3dnow.h
496 views
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
#include <prfchwintrin.h>
29
30
typedef float __v2sf __attribute__((__vector_size__(8)));
31
32
/* Define the default attributes for the functions in this file. */
33
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnow")))
34
35
static __inline__ void __DEFAULT_FN_ATTRS
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
/* Handle the 3dnowa instructions here. */
136
#undef __DEFAULT_FN_ATTRS
137
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnowa")))
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
173