1*e4b17023SJohn Marino /* Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
2*e4b17023SJohn Marino
3*e4b17023SJohn Marino This file is part of GCC.
4*e4b17023SJohn Marino
5*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify
6*e4b17023SJohn Marino it under the terms of the GNU General Public License as published by
7*e4b17023SJohn Marino the Free Software Foundation; either version 3, or (at your option)
8*e4b17023SJohn Marino any later version.
9*e4b17023SJohn Marino
10*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful,
11*e4b17023SJohn Marino but WITHOUT ANY WARRANTY; without even the implied warranty of
12*e4b17023SJohn Marino MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13*e4b17023SJohn Marino GNU General Public License for more details.
14*e4b17023SJohn Marino
15*e4b17023SJohn Marino Under Section 7 of GPL version 3, you are granted additional
16*e4b17023SJohn Marino permissions described in the GCC Runtime Library Exception, version
17*e4b17023SJohn Marino 3.1, as published by the Free Software Foundation.
18*e4b17023SJohn Marino
19*e4b17023SJohn Marino You should have received a copy of the GNU General Public License and
20*e4b17023SJohn Marino a copy of the GCC Runtime Library Exception along with this program;
21*e4b17023SJohn Marino see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22*e4b17023SJohn Marino <http://www.gnu.org/licenses/>. */
23*e4b17023SJohn Marino
24*e4b17023SJohn Marino /* Implemented from the mm3dnow.h (of supposedly AMD origin) included with
25*e4b17023SJohn Marino MSVC 7.1. */
26*e4b17023SJohn Marino
27*e4b17023SJohn Marino #ifndef _MM3DNOW_H_INCLUDED
28*e4b17023SJohn Marino #define _MM3DNOW_H_INCLUDED
29*e4b17023SJohn Marino
30*e4b17023SJohn Marino #ifdef __3dNOW__
31*e4b17023SJohn Marino
32*e4b17023SJohn Marino #include <mmintrin.h>
33*e4b17023SJohn Marino
34*e4b17023SJohn Marino extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_femms(void)35*e4b17023SJohn Marino _m_femms (void)
36*e4b17023SJohn Marino {
37*e4b17023SJohn Marino __builtin_ia32_femms();
38*e4b17023SJohn Marino }
39*e4b17023SJohn Marino
40*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pavgusb(__m64 __A,__m64 __B)41*e4b17023SJohn Marino _m_pavgusb (__m64 __A, __m64 __B)
42*e4b17023SJohn Marino {
43*e4b17023SJohn Marino return (__m64)__builtin_ia32_pavgusb ((__v8qi)__A, (__v8qi)__B);
44*e4b17023SJohn Marino }
45*e4b17023SJohn Marino
46*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pf2id(__m64 __A)47*e4b17023SJohn Marino _m_pf2id (__m64 __A)
48*e4b17023SJohn Marino {
49*e4b17023SJohn Marino return (__m64)__builtin_ia32_pf2id ((__v2sf)__A);
50*e4b17023SJohn Marino }
51*e4b17023SJohn Marino
52*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfacc(__m64 __A,__m64 __B)53*e4b17023SJohn Marino _m_pfacc (__m64 __A, __m64 __B)
54*e4b17023SJohn Marino {
55*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfacc ((__v2sf)__A, (__v2sf)__B);
56*e4b17023SJohn Marino }
57*e4b17023SJohn Marino
58*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfadd(__m64 __A,__m64 __B)59*e4b17023SJohn Marino _m_pfadd (__m64 __A, __m64 __B)
60*e4b17023SJohn Marino {
61*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfadd ((__v2sf)__A, (__v2sf)__B);
62*e4b17023SJohn Marino }
63*e4b17023SJohn Marino
64*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfcmpeq(__m64 __A,__m64 __B)65*e4b17023SJohn Marino _m_pfcmpeq (__m64 __A, __m64 __B)
66*e4b17023SJohn Marino {
67*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfcmpeq ((__v2sf)__A, (__v2sf)__B);
68*e4b17023SJohn Marino }
69*e4b17023SJohn Marino
70*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfcmpge(__m64 __A,__m64 __B)71*e4b17023SJohn Marino _m_pfcmpge (__m64 __A, __m64 __B)
72*e4b17023SJohn Marino {
73*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfcmpge ((__v2sf)__A, (__v2sf)__B);
74*e4b17023SJohn Marino }
75*e4b17023SJohn Marino
76*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfcmpgt(__m64 __A,__m64 __B)77*e4b17023SJohn Marino _m_pfcmpgt (__m64 __A, __m64 __B)
78*e4b17023SJohn Marino {
79*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfcmpgt ((__v2sf)__A, (__v2sf)__B);
80*e4b17023SJohn Marino }
81*e4b17023SJohn Marino
82*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfmax(__m64 __A,__m64 __B)83*e4b17023SJohn Marino _m_pfmax (__m64 __A, __m64 __B)
84*e4b17023SJohn Marino {
85*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfmax ((__v2sf)__A, (__v2sf)__B);
86*e4b17023SJohn Marino }
87*e4b17023SJohn Marino
88*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfmin(__m64 __A,__m64 __B)89*e4b17023SJohn Marino _m_pfmin (__m64 __A, __m64 __B)
90*e4b17023SJohn Marino {
91*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfmin ((__v2sf)__A, (__v2sf)__B);
92*e4b17023SJohn Marino }
93*e4b17023SJohn Marino
94*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfmul(__m64 __A,__m64 __B)95*e4b17023SJohn Marino _m_pfmul (__m64 __A, __m64 __B)
96*e4b17023SJohn Marino {
97*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfmul ((__v2sf)__A, (__v2sf)__B);
98*e4b17023SJohn Marino }
99*e4b17023SJohn Marino
100*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfrcp(__m64 __A)101*e4b17023SJohn Marino _m_pfrcp (__m64 __A)
102*e4b17023SJohn Marino {
103*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfrcp ((__v2sf)__A);
104*e4b17023SJohn Marino }
105*e4b17023SJohn Marino
106*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfrcpit1(__m64 __A,__m64 __B)107*e4b17023SJohn Marino _m_pfrcpit1 (__m64 __A, __m64 __B)
108*e4b17023SJohn Marino {
109*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfrcpit1 ((__v2sf)__A, (__v2sf)__B);
110*e4b17023SJohn Marino }
111*e4b17023SJohn Marino
112*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfrcpit2(__m64 __A,__m64 __B)113*e4b17023SJohn Marino _m_pfrcpit2 (__m64 __A, __m64 __B)
114*e4b17023SJohn Marino {
115*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfrcpit2 ((__v2sf)__A, (__v2sf)__B);
116*e4b17023SJohn Marino }
117*e4b17023SJohn Marino
118*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfrsqrt(__m64 __A)119*e4b17023SJohn Marino _m_pfrsqrt (__m64 __A)
120*e4b17023SJohn Marino {
121*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfrsqrt ((__v2sf)__A);
122*e4b17023SJohn Marino }
123*e4b17023SJohn Marino
124*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfrsqit1(__m64 __A,__m64 __B)125*e4b17023SJohn Marino _m_pfrsqit1 (__m64 __A, __m64 __B)
126*e4b17023SJohn Marino {
127*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfrsqit1 ((__v2sf)__A, (__v2sf)__B);
128*e4b17023SJohn Marino }
129*e4b17023SJohn Marino
130*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfsub(__m64 __A,__m64 __B)131*e4b17023SJohn Marino _m_pfsub (__m64 __A, __m64 __B)
132*e4b17023SJohn Marino {
133*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfsub ((__v2sf)__A, (__v2sf)__B);
134*e4b17023SJohn Marino }
135*e4b17023SJohn Marino
136*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfsubr(__m64 __A,__m64 __B)137*e4b17023SJohn Marino _m_pfsubr (__m64 __A, __m64 __B)
138*e4b17023SJohn Marino {
139*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfsubr ((__v2sf)__A, (__v2sf)__B);
140*e4b17023SJohn Marino }
141*e4b17023SJohn Marino
142*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pi2fd(__m64 __A)143*e4b17023SJohn Marino _m_pi2fd (__m64 __A)
144*e4b17023SJohn Marino {
145*e4b17023SJohn Marino return (__m64)__builtin_ia32_pi2fd ((__v2si)__A);
146*e4b17023SJohn Marino }
147*e4b17023SJohn Marino
148*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pmulhrw(__m64 __A,__m64 __B)149*e4b17023SJohn Marino _m_pmulhrw (__m64 __A, __m64 __B)
150*e4b17023SJohn Marino {
151*e4b17023SJohn Marino return (__m64)__builtin_ia32_pmulhrw ((__v4hi)__A, (__v4hi)__B);
152*e4b17023SJohn Marino }
153*e4b17023SJohn Marino
154*e4b17023SJohn Marino extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_prefetch(void * __P)155*e4b17023SJohn Marino _m_prefetch (void *__P)
156*e4b17023SJohn Marino {
157*e4b17023SJohn Marino __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */);
158*e4b17023SJohn Marino }
159*e4b17023SJohn Marino
160*e4b17023SJohn Marino extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_prefetchw(void * __P)161*e4b17023SJohn Marino _m_prefetchw (void *__P)
162*e4b17023SJohn Marino {
163*e4b17023SJohn Marino __builtin_prefetch (__P, 1, 3 /* _MM_HINT_T0 */);
164*e4b17023SJohn Marino }
165*e4b17023SJohn Marino
166*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_from_float(float __A)167*e4b17023SJohn Marino _m_from_float (float __A)
168*e4b17023SJohn Marino {
169*e4b17023SJohn Marino return __extension__ (__m64)(__v2sf){ __A, 0.0f };
170*e4b17023SJohn Marino }
171*e4b17023SJohn Marino
172*e4b17023SJohn Marino extern __inline float __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_to_float(__m64 __A)173*e4b17023SJohn Marino _m_to_float (__m64 __A)
174*e4b17023SJohn Marino {
175*e4b17023SJohn Marino union { __v2sf v; float a[2]; } __tmp;
176*e4b17023SJohn Marino __tmp.v = (__v2sf)__A;
177*e4b17023SJohn Marino return __tmp.a[0];
178*e4b17023SJohn Marino }
179*e4b17023SJohn Marino
180*e4b17023SJohn Marino #ifdef __3dNOW_A__
181*e4b17023SJohn Marino
182*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pf2iw(__m64 __A)183*e4b17023SJohn Marino _m_pf2iw (__m64 __A)
184*e4b17023SJohn Marino {
185*e4b17023SJohn Marino return (__m64)__builtin_ia32_pf2iw ((__v2sf)__A);
186*e4b17023SJohn Marino }
187*e4b17023SJohn Marino
188*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfnacc(__m64 __A,__m64 __B)189*e4b17023SJohn Marino _m_pfnacc (__m64 __A, __m64 __B)
190*e4b17023SJohn Marino {
191*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfnacc ((__v2sf)__A, (__v2sf)__B);
192*e4b17023SJohn Marino }
193*e4b17023SJohn Marino
194*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pfpnacc(__m64 __A,__m64 __B)195*e4b17023SJohn Marino _m_pfpnacc (__m64 __A, __m64 __B)
196*e4b17023SJohn Marino {
197*e4b17023SJohn Marino return (__m64)__builtin_ia32_pfpnacc ((__v2sf)__A, (__v2sf)__B);
198*e4b17023SJohn Marino }
199*e4b17023SJohn Marino
200*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pi2fw(__m64 __A)201*e4b17023SJohn Marino _m_pi2fw (__m64 __A)
202*e4b17023SJohn Marino {
203*e4b17023SJohn Marino return (__m64)__builtin_ia32_pi2fw ((__v2si)__A);
204*e4b17023SJohn Marino }
205*e4b17023SJohn Marino
206*e4b17023SJohn Marino extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_pswapd(__m64 __A)207*e4b17023SJohn Marino _m_pswapd (__m64 __A)
208*e4b17023SJohn Marino {
209*e4b17023SJohn Marino return (__m64)__builtin_ia32_pswapdsf ((__v2sf)__A);
210*e4b17023SJohn Marino }
211*e4b17023SJohn Marino
212*e4b17023SJohn Marino #endif /* __3dNOW_A__ */
213*e4b17023SJohn Marino #endif /* __3dNOW__ */
214*e4b17023SJohn Marino
215*e4b17023SJohn Marino #endif /* _MM3DNOW_H_INCLUDED */
216