xref: /dflybsd-src/contrib/gcc-4.7/gcc/config/i386/mm3dnow.h (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
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