1*bed243d3SAndroid Build Coastguard Worker /*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------===
2*bed243d3SAndroid Build Coastguard Worker *
3*bed243d3SAndroid Build Coastguard Worker * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*bed243d3SAndroid Build Coastguard Worker * See https://llvm.org/LICENSE.txt for license information.
5*bed243d3SAndroid Build Coastguard Worker * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*bed243d3SAndroid Build Coastguard Worker *
7*bed243d3SAndroid Build Coastguard Worker *===-----------------------------------------------------------------------===
8*bed243d3SAndroid Build Coastguard Worker */
9*bed243d3SAndroid Build Coastguard Worker
10*bed243d3SAndroid Build Coastguard Worker #ifndef _MM3DNOW_H_INCLUDED
11*bed243d3SAndroid Build Coastguard Worker #define _MM3DNOW_H_INCLUDED
12*bed243d3SAndroid Build Coastguard Worker
13*bed243d3SAndroid Build Coastguard Worker #include <mmintrin.h>
14*bed243d3SAndroid Build Coastguard Worker #include <prfchwintrin.h>
15*bed243d3SAndroid Build Coastguard Worker
16*bed243d3SAndroid Build Coastguard Worker typedef float __v2sf __attribute__((__vector_size__(8)));
17*bed243d3SAndroid Build Coastguard Worker
18*bed243d3SAndroid Build Coastguard Worker /* Define the default attributes for the functions in this file. */
19*bed243d3SAndroid Build Coastguard Worker #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnow"), __min_vector_width__(64)))
20*bed243d3SAndroid Build Coastguard Worker
21*bed243d3SAndroid Build Coastguard Worker static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("3dnow")))
_m_femms(void)22*bed243d3SAndroid Build Coastguard Worker _m_femms(void) {
23*bed243d3SAndroid Build Coastguard Worker __builtin_ia32_femms();
24*bed243d3SAndroid Build Coastguard Worker }
25*bed243d3SAndroid Build Coastguard Worker
26*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pavgusb(__m64 __m1,__m64 __m2)27*bed243d3SAndroid Build Coastguard Worker _m_pavgusb(__m64 __m1, __m64 __m2) {
28*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2);
29*bed243d3SAndroid Build Coastguard Worker }
30*bed243d3SAndroid Build Coastguard Worker
31*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pf2id(__m64 __m)32*bed243d3SAndroid Build Coastguard Worker _m_pf2id(__m64 __m) {
33*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pf2id((__v2sf)__m);
34*bed243d3SAndroid Build Coastguard Worker }
35*bed243d3SAndroid Build Coastguard Worker
36*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfacc(__m64 __m1,__m64 __m2)37*bed243d3SAndroid Build Coastguard Worker _m_pfacc(__m64 __m1, __m64 __m2) {
38*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2);
39*bed243d3SAndroid Build Coastguard Worker }
40*bed243d3SAndroid Build Coastguard Worker
41*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfadd(__m64 __m1,__m64 __m2)42*bed243d3SAndroid Build Coastguard Worker _m_pfadd(__m64 __m1, __m64 __m2) {
43*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2);
44*bed243d3SAndroid Build Coastguard Worker }
45*bed243d3SAndroid Build Coastguard Worker
46*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfcmpeq(__m64 __m1,__m64 __m2)47*bed243d3SAndroid Build Coastguard Worker _m_pfcmpeq(__m64 __m1, __m64 __m2) {
48*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2);
49*bed243d3SAndroid Build Coastguard Worker }
50*bed243d3SAndroid Build Coastguard Worker
51*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfcmpge(__m64 __m1,__m64 __m2)52*bed243d3SAndroid Build Coastguard Worker _m_pfcmpge(__m64 __m1, __m64 __m2) {
53*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2);
54*bed243d3SAndroid Build Coastguard Worker }
55*bed243d3SAndroid Build Coastguard Worker
56*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfcmpgt(__m64 __m1,__m64 __m2)57*bed243d3SAndroid Build Coastguard Worker _m_pfcmpgt(__m64 __m1, __m64 __m2) {
58*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2);
59*bed243d3SAndroid Build Coastguard Worker }
60*bed243d3SAndroid Build Coastguard Worker
61*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfmax(__m64 __m1,__m64 __m2)62*bed243d3SAndroid Build Coastguard Worker _m_pfmax(__m64 __m1, __m64 __m2) {
63*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2);
64*bed243d3SAndroid Build Coastguard Worker }
65*bed243d3SAndroid Build Coastguard Worker
66*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfmin(__m64 __m1,__m64 __m2)67*bed243d3SAndroid Build Coastguard Worker _m_pfmin(__m64 __m1, __m64 __m2) {
68*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2);
69*bed243d3SAndroid Build Coastguard Worker }
70*bed243d3SAndroid Build Coastguard Worker
71*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfmul(__m64 __m1,__m64 __m2)72*bed243d3SAndroid Build Coastguard Worker _m_pfmul(__m64 __m1, __m64 __m2) {
73*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2);
74*bed243d3SAndroid Build Coastguard Worker }
75*bed243d3SAndroid Build Coastguard Worker
76*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfrcp(__m64 __m)77*bed243d3SAndroid Build Coastguard Worker _m_pfrcp(__m64 __m) {
78*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfrcp((__v2sf)__m);
79*bed243d3SAndroid Build Coastguard Worker }
80*bed243d3SAndroid Build Coastguard Worker
81*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfrcpit1(__m64 __m1,__m64 __m2)82*bed243d3SAndroid Build Coastguard Worker _m_pfrcpit1(__m64 __m1, __m64 __m2) {
83*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2);
84*bed243d3SAndroid Build Coastguard Worker }
85*bed243d3SAndroid Build Coastguard Worker
86*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfrcpit2(__m64 __m1,__m64 __m2)87*bed243d3SAndroid Build Coastguard Worker _m_pfrcpit2(__m64 __m1, __m64 __m2) {
88*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2);
89*bed243d3SAndroid Build Coastguard Worker }
90*bed243d3SAndroid Build Coastguard Worker
91*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfrsqrt(__m64 __m)92*bed243d3SAndroid Build Coastguard Worker _m_pfrsqrt(__m64 __m) {
93*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m);
94*bed243d3SAndroid Build Coastguard Worker }
95*bed243d3SAndroid Build Coastguard Worker
96*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfrsqrtit1(__m64 __m1,__m64 __m2)97*bed243d3SAndroid Build Coastguard Worker _m_pfrsqrtit1(__m64 __m1, __m64 __m2) {
98*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2);
99*bed243d3SAndroid Build Coastguard Worker }
100*bed243d3SAndroid Build Coastguard Worker
101*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfsub(__m64 __m1,__m64 __m2)102*bed243d3SAndroid Build Coastguard Worker _m_pfsub(__m64 __m1, __m64 __m2) {
103*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2);
104*bed243d3SAndroid Build Coastguard Worker }
105*bed243d3SAndroid Build Coastguard Worker
106*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfsubr(__m64 __m1,__m64 __m2)107*bed243d3SAndroid Build Coastguard Worker _m_pfsubr(__m64 __m1, __m64 __m2) {
108*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2);
109*bed243d3SAndroid Build Coastguard Worker }
110*bed243d3SAndroid Build Coastguard Worker
111*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pi2fd(__m64 __m)112*bed243d3SAndroid Build Coastguard Worker _m_pi2fd(__m64 __m) {
113*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pi2fd((__v2si)__m);
114*bed243d3SAndroid Build Coastguard Worker }
115*bed243d3SAndroid Build Coastguard Worker
116*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pmulhrw(__m64 __m1,__m64 __m2)117*bed243d3SAndroid Build Coastguard Worker _m_pmulhrw(__m64 __m1, __m64 __m2) {
118*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2);
119*bed243d3SAndroid Build Coastguard Worker }
120*bed243d3SAndroid Build Coastguard Worker
121*bed243d3SAndroid Build Coastguard Worker /* Handle the 3dnowa instructions here. */
122*bed243d3SAndroid Build Coastguard Worker #undef __DEFAULT_FN_ATTRS
123*bed243d3SAndroid Build Coastguard Worker #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnowa"), __min_vector_width__(64)))
124*bed243d3SAndroid Build Coastguard Worker
125*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pf2iw(__m64 __m)126*bed243d3SAndroid Build Coastguard Worker _m_pf2iw(__m64 __m) {
127*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pf2iw((__v2sf)__m);
128*bed243d3SAndroid Build Coastguard Worker }
129*bed243d3SAndroid Build Coastguard Worker
130*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfnacc(__m64 __m1,__m64 __m2)131*bed243d3SAndroid Build Coastguard Worker _m_pfnacc(__m64 __m1, __m64 __m2) {
132*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2);
133*bed243d3SAndroid Build Coastguard Worker }
134*bed243d3SAndroid Build Coastguard Worker
135*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pfpnacc(__m64 __m1,__m64 __m2)136*bed243d3SAndroid Build Coastguard Worker _m_pfpnacc(__m64 __m1, __m64 __m2) {
137*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2);
138*bed243d3SAndroid Build Coastguard Worker }
139*bed243d3SAndroid Build Coastguard Worker
140*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pi2fw(__m64 __m)141*bed243d3SAndroid Build Coastguard Worker _m_pi2fw(__m64 __m) {
142*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pi2fw((__v2si)__m);
143*bed243d3SAndroid Build Coastguard Worker }
144*bed243d3SAndroid Build Coastguard Worker
145*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pswapdsf(__m64 __m)146*bed243d3SAndroid Build Coastguard Worker _m_pswapdsf(__m64 __m) {
147*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m);
148*bed243d3SAndroid Build Coastguard Worker }
149*bed243d3SAndroid Build Coastguard Worker
150*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_m_pswapdsi(__m64 __m)151*bed243d3SAndroid Build Coastguard Worker _m_pswapdsi(__m64 __m) {
152*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_pswapdsi((__v2si)__m);
153*bed243d3SAndroid Build Coastguard Worker }
154*bed243d3SAndroid Build Coastguard Worker
155*bed243d3SAndroid Build Coastguard Worker #undef __DEFAULT_FN_ATTRS
156*bed243d3SAndroid Build Coastguard Worker
157*bed243d3SAndroid Build Coastguard Worker #endif
158