]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/doc/gcc/extensions-to-the-c-language-family/target-builtins/sparc-vis-built-in-functions.rst
23d076a71056e7760717971748ed0750eba81e6b
[thirdparty/gcc.git] / gcc / doc / gcc / extensions-to-the-c-language-family / target-builtins / sparc-vis-built-in-functions.rst
1 ..
2 Copyright 1988-2022 Free Software Foundation, Inc.
3 This is part of the GCC manual.
4 For copying conditions, see the copyright.rst file.
5
6 .. _sparc-vis-built-in-functions:
7
8 SPARC VIS Built-in Functions
9 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10
11 GCC supports SIMD operations on the SPARC using both the generic vector
12 extensions (see :ref:`vector-extensions`) as well as built-in functions for
13 the SPARC Visual Instruction Set (VIS). When you use the :option:`-mvis`
14 switch, the VIS extension is exposed as the following built-in functions:
15
16 .. code-block:: c++
17
18 typedef int v1si __attribute__ ((vector_size (4)));
19 typedef int v2si __attribute__ ((vector_size (8)));
20 typedef short v4hi __attribute__ ((vector_size (8)));
21 typedef short v2hi __attribute__ ((vector_size (4)));
22 typedef unsigned char v8qi __attribute__ ((vector_size (8)));
23 typedef unsigned char v4qi __attribute__ ((vector_size (4)));
24
25 void __builtin_vis_write_gsr (int64_t);
26 int64_t __builtin_vis_read_gsr (void);
27
28 void * __builtin_vis_alignaddr (void *, long);
29 void * __builtin_vis_alignaddrl (void *, long);
30 int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
31 v2si __builtin_vis_faligndatav2si (v2si, v2si);
32 v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
33 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
34
35 v4hi __builtin_vis_fexpand (v4qi);
36
37 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
38 v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
39 v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
40 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
41 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
42 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
43 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
44
45 v4qi __builtin_vis_fpack16 (v4hi);
46 v8qi __builtin_vis_fpack32 (v2si, v8qi);
47 v2hi __builtin_vis_fpackfix (v2si);
48 v8qi __builtin_vis_fpmerge (v4qi, v4qi);
49
50 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
51
52 long __builtin_vis_edge8 (void *, void *);
53 long __builtin_vis_edge8l (void *, void *);
54 long __builtin_vis_edge16 (void *, void *);
55 long __builtin_vis_edge16l (void *, void *);
56 long __builtin_vis_edge32 (void *, void *);
57 long __builtin_vis_edge32l (void *, void *);
58
59 long __builtin_vis_fcmple16 (v4hi, v4hi);
60 long __builtin_vis_fcmple32 (v2si, v2si);
61 long __builtin_vis_fcmpne16 (v4hi, v4hi);
62 long __builtin_vis_fcmpne32 (v2si, v2si);
63 long __builtin_vis_fcmpgt16 (v4hi, v4hi);
64 long __builtin_vis_fcmpgt32 (v2si, v2si);
65 long __builtin_vis_fcmpeq16 (v4hi, v4hi);
66 long __builtin_vis_fcmpeq32 (v2si, v2si);
67
68 v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
69 v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
70 v2si __builtin_vis_fpadd32 (v2si, v2si);
71 v1si __builtin_vis_fpadd32s (v1si, v1si);
72 v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
73 v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
74 v2si __builtin_vis_fpsub32 (v2si, v2si);
75 v1si __builtin_vis_fpsub32s (v1si, v1si);
76
77 long __builtin_vis_array8 (long, long);
78 long __builtin_vis_array16 (long, long);
79 long __builtin_vis_array32 (long, long);
80
81 When you use the :option:`-mvis2` switch, the VIS version 2.0 built-in
82 functions also become available:
83
84 .. code-block:: c++
85
86 long __builtin_vis_bmask (long, long);
87 int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
88 v2si __builtin_vis_bshufflev2si (v2si, v2si);
89 v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
90 v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
91
92 long __builtin_vis_edge8n (void *, void *);
93 long __builtin_vis_edge8ln (void *, void *);
94 long __builtin_vis_edge16n (void *, void *);
95 long __builtin_vis_edge16ln (void *, void *);
96 long __builtin_vis_edge32n (void *, void *);
97 long __builtin_vis_edge32ln (void *, void *);
98
99 When you use the :option:`-mvis3` switch, the VIS version 3.0 built-in
100 functions also become available:
101
102 .. code-block:: c++
103
104 void __builtin_vis_cmask8 (long);
105 void __builtin_vis_cmask16 (long);
106 void __builtin_vis_cmask32 (long);
107
108 v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
109
110 v4hi __builtin_vis_fsll16 (v4hi, v4hi);
111 v4hi __builtin_vis_fslas16 (v4hi, v4hi);
112 v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
113 v4hi __builtin_vis_fsra16 (v4hi, v4hi);
114 v2si __builtin_vis_fsll16 (v2si, v2si);
115 v2si __builtin_vis_fslas16 (v2si, v2si);
116 v2si __builtin_vis_fsrl16 (v2si, v2si);
117 v2si __builtin_vis_fsra16 (v2si, v2si);
118
119 long __builtin_vis_pdistn (v8qi, v8qi);
120
121 v4hi __builtin_vis_fmean16 (v4hi, v4hi);
122
123 int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
124 int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
125
126 v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
127 v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
128 v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
129 v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
130 v2si __builtin_vis_fpadds32 (v2si, v2si);
131 v1si __builtin_vis_fpadds32s (v1si, v1si);
132 v2si __builtin_vis_fpsubs32 (v2si, v2si);
133 v1si __builtin_vis_fpsubs32s (v1si, v1si);
134
135 long __builtin_vis_fucmple8 (v8qi, v8qi);
136 long __builtin_vis_fucmpne8 (v8qi, v8qi);
137 long __builtin_vis_fucmpgt8 (v8qi, v8qi);
138 long __builtin_vis_fucmpeq8 (v8qi, v8qi);
139
140 float __builtin_vis_fhadds (float, float);
141 double __builtin_vis_fhaddd (double, double);
142 float __builtin_vis_fhsubs (float, float);
143 double __builtin_vis_fhsubd (double, double);
144 float __builtin_vis_fnhadds (float, float);
145 double __builtin_vis_fnhaddd (double, double);
146
147 int64_t __builtin_vis_umulxhi (int64_t, int64_t);
148 int64_t __builtin_vis_xmulx (int64_t, int64_t);
149 int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
150
151 When you use the :option:`-mvis4` switch, the VIS version 4.0 built-in
152 functions also become available:
153
154 .. code-block:: c++
155
156 v8qi __builtin_vis_fpadd8 (v8qi, v8qi);
157 v8qi __builtin_vis_fpadds8 (v8qi, v8qi);
158 v8qi __builtin_vis_fpaddus8 (v8qi, v8qi);
159 v4hi __builtin_vis_fpaddus16 (v4hi, v4hi);
160
161 v8qi __builtin_vis_fpsub8 (v8qi, v8qi);
162 v8qi __builtin_vis_fpsubs8 (v8qi, v8qi);
163 v8qi __builtin_vis_fpsubus8 (v8qi, v8qi);
164 v4hi __builtin_vis_fpsubus16 (v4hi, v4hi);
165
166 long __builtin_vis_fpcmple8 (v8qi, v8qi);
167 long __builtin_vis_fpcmpgt8 (v8qi, v8qi);
168 long __builtin_vis_fpcmpule16 (v4hi, v4hi);
169 long __builtin_vis_fpcmpugt16 (v4hi, v4hi);
170 long __builtin_vis_fpcmpule32 (v2si, v2si);
171 long __builtin_vis_fpcmpugt32 (v2si, v2si);
172
173 v8qi __builtin_vis_fpmax8 (v8qi, v8qi);
174 v4hi __builtin_vis_fpmax16 (v4hi, v4hi);
175 v2si __builtin_vis_fpmax32 (v2si, v2si);
176
177 v8qi __builtin_vis_fpmaxu8 (v8qi, v8qi);
178 v4hi __builtin_vis_fpmaxu16 (v4hi, v4hi);
179 v2si __builtin_vis_fpmaxu32 (v2si, v2si);
180
181 v8qi __builtin_vis_fpmin8 (v8qi, v8qi);
182 v4hi __builtin_vis_fpmin16 (v4hi, v4hi);
183 v2si __builtin_vis_fpmin32 (v2si, v2si);
184
185 v8qi __builtin_vis_fpminu8 (v8qi, v8qi);
186 v4hi __builtin_vis_fpminu16 (v4hi, v4hi);
187 v2si __builtin_vis_fpminu32 (v2si, v2si);
188
189 When you use the :option:`-mvis4b` switch, the VIS version 4.0B
190 built-in functions also become available:
191
192 .. code-block:: c++
193
194 v8qi __builtin_vis_dictunpack8 (double, int);
195 v4hi __builtin_vis_dictunpack16 (double, int);
196 v2si __builtin_vis_dictunpack32 (double, int);
197
198 long __builtin_vis_fpcmple8shl (v8qi, v8qi, int);
199 long __builtin_vis_fpcmpgt8shl (v8qi, v8qi, int);
200 long __builtin_vis_fpcmpeq8shl (v8qi, v8qi, int);
201 long __builtin_vis_fpcmpne8shl (v8qi, v8qi, int);
202
203 long __builtin_vis_fpcmple16shl (v4hi, v4hi, int);
204 long __builtin_vis_fpcmpgt16shl (v4hi, v4hi, int);
205 long __builtin_vis_fpcmpeq16shl (v4hi, v4hi, int);
206 long __builtin_vis_fpcmpne16shl (v4hi, v4hi, int);
207
208 long __builtin_vis_fpcmple32shl (v2si, v2si, int);
209 long __builtin_vis_fpcmpgt32shl (v2si, v2si, int);
210 long __builtin_vis_fpcmpeq32shl (v2si, v2si, int);
211 long __builtin_vis_fpcmpne32shl (v2si, v2si, int);
212
213 long __builtin_vis_fpcmpule8shl (v8qi, v8qi, int);
214 long __builtin_vis_fpcmpugt8shl (v8qi, v8qi, int);
215 long __builtin_vis_fpcmpule16shl (v4hi, v4hi, int);
216 long __builtin_vis_fpcmpugt16shl (v4hi, v4hi, int);
217 long __builtin_vis_fpcmpule32shl (v2si, v2si, int);
218 long __builtin_vis_fpcmpugt32shl (v2si, v2si, int);
219
220 long __builtin_vis_fpcmpde8shl (v8qi, v8qi, int);
221 long __builtin_vis_fpcmpde16shl (v4hi, v4hi, int);
222 long __builtin_vis_fpcmpde32shl (v2si, v2si, int);
223
224 long __builtin_vis_fpcmpur8shl (v8qi, v8qi, int);
225 long __builtin_vis_fpcmpur16shl (v4hi, v4hi, int);
226 long __builtin_vis_fpcmpur32shl (v2si, v2si, int);