25d7bab9b1e75a21f47a1fcead00c02cbfc1b270
[gcc.git] / gcc / config / sparc / visintrin.h
1 /* Copyright (C) 2011 Free Software Foundation, Inc.
2
3 This file is part of GCC.
4
5 GCC is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3, or (at your option)
8 any later version.
9
10 GCC is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 Under Section 7 of GPL version 3, you are granted additional
16 permissions described in the GCC Runtime Library Exception, version
17 3.1, as published by the Free Software Foundation.
18
19 You should have received a copy of the GNU General Public License and
20 a copy of the GCC Runtime Library Exception along with this program;
21 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 <http://www.gnu.org/licenses/>. */
23
24 #ifndef _VISINTRIN_H_INCLUDED
25 #define _VISINTRIN_H_INCLUDED
26
27 typedef int __v2si __attribute__ ((__vector_size__ (8)));
28 typedef short __v4hi __attribute__ ((__vector_size__ (8)));
29 typedef short __v2hi __attribute__ ((__vector_size__ (4)));
30 typedef unsigned char __v8qi __attribute__ ((__vector_size__ (8)));
31 typedef unsigned char __v4qi __attribute__ ((__vector_size__ (4)));
32 typedef int __i64 __attribute__ ((__mode__ (DI)));
33
34 extern __inline void *
35 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
36 __vis_alignaddr (void *__A, long __B)
37 {
38 return __builtin_vis_alignaddr (__A, __B);
39 }
40
41 extern __inline __i64
42 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
43 __vis_faligndatadi (__i64 __A, __i64 __B)
44 {
45 return __builtin_vis_faligndatadi (__A, __B);
46 }
47
48 extern __inline __v2si
49 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
50 __vis_faligndatav2si (__v2si __A, __v2si __B)
51 {
52 return __builtin_vis_faligndatav2si (__A, __B);
53 }
54
55 extern __inline __v4hi
56 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
57 __vis_faligndatav4hi (__v4hi __A, __v4hi __B)
58 {
59 return __builtin_vis_faligndatav4hi (__A, __B);
60 }
61
62 extern __inline __v8qi
63 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
64 __vis_faligndatav8qi (__v8qi __A, __v8qi __B)
65 {
66 return __builtin_vis_faligndatav8qi (__A, __B);
67 }
68
69 extern __inline __v4hi
70 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
71 __vis_fexpand (__v4qi __A)
72 {
73 return __builtin_vis_fexpand (__A);
74 }
75
76 extern __inline __v4hi
77 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
78 __vis_fmul8x16 (__v4qi __A, __v4hi __B)
79 {
80 return __builtin_vis_fmul8x16 (__A, __B);
81 }
82
83 extern __inline __v4hi
84 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
85 __vis_fmul8x16au (__v4qi __A, __v2hi __B)
86 {
87 return __builtin_vis_fmul8x16au (__A, __B);
88 }
89
90 extern __inline __v4hi
91 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
92 __vis_fmul8x16al (__v4qi __A, __v2hi __B)
93 {
94 return __builtin_vis_fmul8x16al (__A, __B);
95 }
96
97 extern __inline __v4hi
98 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
99 __vis_fmul8sux16 (__v8qi __A, __v4hi __B)
100 {
101 return __builtin_vis_fmul8sux16 (__A, __B);
102 }
103
104 extern __inline __v4hi
105 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
106 __vis_fmul8ulx16 (__v8qi __A, __v4hi __B)
107 {
108 return __builtin_vis_fmul8ulx16 (__A, __B);
109 }
110
111 extern __inline __v2si
112 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
113 __vis_fmuld8sux16 (__v4qi __A, __v2hi __B)
114 {
115 return __builtin_vis_fmuld8sux16 (__A, __B);
116 }
117
118 extern __inline __v2si
119 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
120 __vis_fmuld8ulx16 (__v4qi __A, __v2hi __B)
121 {
122 return __builtin_vis_fmuld8ulx16 (__A, __B);
123 }
124
125 extern __inline __v4qi
126 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
127 __vis_fpack16 (__v4hi __A)
128 {
129 return __builtin_vis_fpack16 (__A);
130 }
131
132 extern __inline __v8qi
133 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
134 __vis_fpack32 (__v2si __A, __v8qi __B)
135 {
136 return __builtin_vis_fpack32 (__A, __B);
137 }
138
139 extern __inline __v2hi
140 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
141 __vis_fpackfix (__v2si __A)
142 {
143 return __builtin_vis_fpackfix (__A);
144 }
145
146 extern __inline __v8qi
147 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
148 __vis_fpmerge (__v4qi __A, __v4qi __B)
149 {
150 return __builtin_vis_fpmerge (__A, __B);
151 }
152
153 extern __inline __i64
154 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
155 __vis_pdist (__v8qi __A, __v8qi __B, __i64 __C)
156 {
157 return __builtin_vis_pdist (__A, __B, __C);
158 }
159
160 extern __inline __i64
161 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
162 __vis_edge8 (__i64 __A, __i64 __B)
163 {
164 return __builtin_vis_edge8 (__A, __B);
165 }
166
167 extern __inline __i64
168 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
169 __vis_edge8l (__i64 __A, __i64 __B)
170 {
171 return __builtin_vis_edge8l (__A, __B);
172 }
173
174 extern __inline __i64
175 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
176 __vis_edge16 (__i64 __A, __i64 __B)
177 {
178 return __builtin_vis_edge16 (__A, __B);
179 }
180
181 extern __inline __i64
182 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
183 __vis_edge16l (__i64 __A, __i64 __B)
184 {
185 return __builtin_vis_edge16l (__A, __B);
186 }
187
188 extern __inline __i64
189 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
190 __vis_edge32 (__i64 __A, __i64 __B)
191 {
192 return __builtin_vis_edge32 (__A, __B);
193 }
194
195 extern __inline __i64
196 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
197 __vis_edge32l (__i64 __A, __i64 __B)
198 {
199 return __builtin_vis_edge32l (__A, __B);
200 }
201
202 #endif /* _VISINTRIN_H_INCLUDED */