1------------------------------------------------------------------------------
2--                                                                          --
3--                         GNAT COMPILER COMPONENTS                         --
4--                                                                          --
5--       G N A T . A L T I V E C . L O W _ L E V E L _ V E C T O R S        --
6--                                                                          --
7--                                 S p e c                                  --
8--                          (Hard Binding Version)                          --
9--                                                                          --
10--          Copyright (C) 2004-2018, Free Software Foundation, Inc.         --
11--                                                                          --
12-- GNAT is free software;  you can  redistribute it  and/or modify it under --
13-- terms of the  GNU General Public License as published  by the Free Soft- --
14-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
15-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
16-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
17-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
18--                                                                          --
19-- As a special exception under Section 7 of GPL version 3, you are granted --
20-- additional permissions described in the GCC Runtime Library Exception,   --
21-- version 3.1, as published by the Free Software Foundation.               --
22--                                                                          --
23-- You should have received a copy of the GNU General Public License and    --
24-- a copy of the GCC Runtime Library Exception along with this program;     --
25-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
26-- <http://www.gnu.org/licenses/>.                                          --
27--                                                                          --
28-- GNAT was originally developed  by the GNAT team at  New York University. --
29-- Extensive contributions were provided by Ada Core Technologies Inc.      --
30--                                                                          --
31------------------------------------------------------------------------------
32
33--  This unit exposes the low level vector support for the Hard binding,
34--  intended for AltiVec capable targets. See Altivec.Design for a description
35--  of what is expected to be exposed.
36
37package GNAT.Altivec.Low_Level_Vectors is
38   pragma Elaborate_Body;
39
40   ----------------------------------------
41   -- Low-level Vector Type Declarations --
42   ----------------------------------------
43
44   type LL_VUC is private;
45   type LL_VSC is private;
46   type LL_VBC is private;
47
48   type LL_VUS is private;
49   type LL_VSS is private;
50   type LL_VBS is private;
51
52   type LL_VUI is private;
53   type LL_VSI is private;
54   type LL_VBI is private;
55
56   type LL_VF  is private;
57   type LL_VP  is private;
58
59   ------------------------------------
60   -- Low-level Functional Interface --
61   ------------------------------------
62
63   function abs_v16qi (A : LL_VSC) return LL_VSC;
64   function abs_v8hi  (A : LL_VSS) return LL_VSS;
65   function abs_v4si  (A : LL_VSI) return LL_VSI;
66   function abs_v4sf  (A : LL_VF)  return LL_VF;
67
68   function abss_v16qi (A : LL_VSC) return LL_VSC;
69   function abss_v8hi  (A : LL_VSS) return LL_VSS;
70   function abss_v4si  (A : LL_VSI) return LL_VSI;
71
72   function vaddubm (A : LL_VSC; B : LL_VSC) return LL_VSC;
73   function vadduhm (A : LL_VSS; B : LL_VSS) return LL_VSS;
74   function vadduwm (A : LL_VSI; B : LL_VSI) return LL_VSI;
75   function vaddfp  (A : LL_VF;  B : LL_VF)  return LL_VF;
76
77   function vaddcuw (A : LL_VSI; B : LL_VSI) return LL_VSI;
78
79   function vaddubs (A : LL_VSC; B : LL_VSC) return LL_VSC;
80   function vaddsbs (A : LL_VSC; B : LL_VSC) return LL_VSC;
81   function vadduhs (A : LL_VSS; B : LL_VSS) return LL_VSS;
82   function vaddshs (A : LL_VSS; B : LL_VSS) return LL_VSS;
83   function vadduws (A : LL_VSI; B : LL_VSI) return LL_VSI;
84   function vaddsws (A : LL_VSI; B : LL_VSI) return LL_VSI;
85
86   function vand  (A : LL_VSI; B : LL_VSI) return LL_VSI;
87   function vandc (A : LL_VSI; B : LL_VSI) return LL_VSI;
88
89   function vavgub (A : LL_VSC; B : LL_VSC) return LL_VSC;
90   function vavgsb (A : LL_VSC; B : LL_VSC) return LL_VSC;
91   function vavguh (A : LL_VSS; B : LL_VSS) return LL_VSS;
92   function vavgsh (A : LL_VSS; B : LL_VSS) return LL_VSS;
93   function vavguw (A : LL_VSI; B : LL_VSI) return LL_VSI;
94   function vavgsw (A : LL_VSI; B : LL_VSI) return LL_VSI;
95
96   function vcmpbfp (A : LL_VF; B : LL_VF) return LL_VSI;
97
98   function vcmpequb (A : LL_VSC; B : LL_VSC) return LL_VSC;
99   function vcmpequh (A : LL_VSS; B : LL_VSS) return LL_VSS;
100   function vcmpequw (A : LL_VSI; B : LL_VSI) return LL_VSI;
101   function vcmpeqfp (A : LL_VF;  B : LL_VF)  return LL_VF;
102
103   function vcmpgefp (A : LL_VF; B : LL_VF) return LL_VF;
104
105   function vcmpgtub (A : LL_VSC; B : LL_VSC) return LL_VSC;
106   function vcmpgtsb (A : LL_VSC; B : LL_VSC) return LL_VSC;
107   function vcmpgtuh (A : LL_VSS; B : LL_VSS) return LL_VSS;
108   function vcmpgtsh (A : LL_VSS; B : LL_VSS) return LL_VSS;
109   function vcmpgtuw (A : LL_VSI; B : LL_VSI) return LL_VSI;
110   function vcmpgtsw (A : LL_VSI; B : LL_VSI) return LL_VSI;
111   function vcmpgtfp (A : LL_VF;  B : LL_VF)  return LL_VF;
112
113   function vcfux (A : LL_VUI; B : c_int) return LL_VF;
114   function vcfsx (A : LL_VSI; B : c_int) return LL_VF;
115
116   function vctsxs (A : LL_VF; B : c_int) return LL_VSI;
117   function vctuxs (A : LL_VF; B : c_int) return LL_VUI;
118
119   procedure dss (A : c_int);
120   procedure dssall;
121
122   procedure dst    (A : c_ptr; B : c_int; C : c_int);
123   procedure dstst  (A : c_ptr; B : c_int; C : c_int);
124   procedure dststt (A : c_ptr; B : c_int; C : c_int);
125   procedure dstt   (A : c_ptr; B : c_int; C : c_int);
126
127   function vexptefp (A : LL_VF) return LL_VF;
128
129   function vrfim (A : LL_VF) return LL_VF;
130
131   function lvx   (A : c_long; B : c_ptr) return LL_VSI;
132   function lvebx (A : c_long; B : c_ptr) return LL_VSC;
133   function lvehx (A : c_long; B : c_ptr) return LL_VSS;
134   function lvewx (A : c_long; B : c_ptr) return LL_VSI;
135   function lvxl  (A : c_long; B : c_ptr) return LL_VSI;
136
137   function vlogefp (A : LL_VF) return LL_VF;
138
139   function lvsl  (A : c_long; B : c_ptr) return LL_VSC;
140   function lvsr  (A : c_long; B : c_ptr) return LL_VSC;
141
142   function vmaddfp (A : LL_VF; B : LL_VF; C : LL_VF) return LL_VF;
143
144   function vmhaddshs  (A : LL_VSS; B : LL_VSS; C : LL_VSS) return LL_VSS;
145
146   function vmaxub (A : LL_VSC; B : LL_VSC) return LL_VSC;
147   function vmaxsb (A : LL_VSC; B : LL_VSC) return LL_VSC;
148   function vmaxuh (A : LL_VSS; B : LL_VSS) return LL_VSS;
149   function vmaxsh (A : LL_VSS; B : LL_VSS) return LL_VSS;
150   function vmaxuw (A : LL_VSI; B : LL_VSI) return LL_VSI;
151   function vmaxsw (A : LL_VSI; B : LL_VSI) return LL_VSI;
152   function vmaxfp (A : LL_VF;  B : LL_VF)  return LL_VF;
153
154   function vmrghb (A : LL_VSC; B : LL_VSC) return LL_VSC;
155   function vmrghh (A : LL_VSS; B : LL_VSS) return LL_VSS;
156   function vmrghw (A : LL_VSI; B : LL_VSI) return LL_VSI;
157   function vmrglb (A : LL_VSC; B : LL_VSC) return LL_VSC;
158   function vmrglh (A : LL_VSS; B : LL_VSS) return LL_VSS;
159   function vmrglw (A : LL_VSI; B : LL_VSI) return LL_VSI;
160
161   function mfvscr return LL_VSS;
162
163   function vminfp (A : LL_VF;  B : LL_VF)  return LL_VF;
164   function vminsb (A : LL_VSC; B : LL_VSC) return LL_VSC;
165   function vminsh (A : LL_VSS; B : LL_VSS) return LL_VSS;
166   function vminsw (A : LL_VSI; B : LL_VSI) return LL_VSI;
167   function vminub (A : LL_VSC; B : LL_VSC) return LL_VSC;
168   function vminuh (A : LL_VSS; B : LL_VSS) return LL_VSS;
169   function vminuw (A : LL_VSI; B : LL_VSI) return LL_VSI;
170
171   function vmladduhm (A : LL_VSS; B : LL_VSS; C : LL_VSS) return LL_VSS;
172
173   function vmhraddshs (A : LL_VSS; B : LL_VSS; C : LL_VSS) return LL_VSS;
174
175   function vmsumubm (A : LL_VSC; B : LL_VSC; C : LL_VSI) return LL_VSI;
176   function vmsummbm (A : LL_VSC; B : LL_VSC; C : LL_VSI) return LL_VSI;
177   function vmsumuhm (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI;
178   function vmsumshm (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI;
179   function vmsumuhs (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI;
180   function vmsumshs (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI;
181
182   procedure mtvscr (A : LL_VSI);
183
184   function vmuleub (A : LL_VSC; B : LL_VSC) return LL_VSS;
185   function vmuleuh (A : LL_VSS; B : LL_VSS) return LL_VSI;
186   function vmulesb (A : LL_VSC; B : LL_VSC) return LL_VSS;
187   function vmulesh (A : LL_VSS; B : LL_VSS) return LL_VSI;
188
189   function vmulosb (A : LL_VSC; B : LL_VSC) return LL_VSS;
190   function vmulosh (A : LL_VSS; B : LL_VSS) return LL_VSI;
191   function vmuloub (A : LL_VSC; B : LL_VSC) return LL_VSS;
192   function vmulouh (A : LL_VSS; B : LL_VSS) return LL_VSI;
193
194   function vnmsubfp (A : LL_VF; B : LL_VF; C : LL_VF) return LL_VF;
195
196   function vxor (A : LL_VSI; B : LL_VSI) return LL_VSI;
197   function vnor (A : LL_VSI; B : LL_VSI) return LL_VSI;
198   function vor  (A : LL_VSI; B : LL_VSI) return LL_VSI;
199
200   function vpkuhum (A : LL_VSS; B : LL_VSS) return LL_VSC;
201   function vpkuwum (A : LL_VSI; B : LL_VSI) return LL_VSS;
202   function vpkpx   (A : LL_VSI; B : LL_VSI) return LL_VSS;
203   function vpkuhus (A : LL_VSS; B : LL_VSS) return LL_VSC;
204   function vpkuwus (A : LL_VSI; B : LL_VSI) return LL_VSS;
205   function vpkshss (A : LL_VSS; B : LL_VSS) return LL_VSC;
206   function vpkswss (A : LL_VSI; B : LL_VSI) return LL_VSS;
207   function vpkshus (A : LL_VSS; B : LL_VSS) return LL_VSC;
208   function vpkswus (A : LL_VSI; B : LL_VSI) return LL_VSS;
209
210   function vperm_4si (A : LL_VSI; B : LL_VSI; C : LL_VSC) return LL_VSI;
211
212   function vrefp (A : LL_VF) return LL_VF;
213
214   function vrlb (A : LL_VSC; B : LL_VSC) return LL_VSC;
215   function vrlh (A : LL_VSS; B : LL_VSS) return LL_VSS;
216   function vrlw (A : LL_VSI; B : LL_VSI) return LL_VSI;
217
218   function vrfin (A : LL_VF) return LL_VF;
219   function vrfip (A : LL_VF) return LL_VF;
220   function vrfiz (A : LL_VF) return LL_VF;
221
222   function vrsqrtefp (A : LL_VF) return LL_VF;
223
224   function vsel_4si (A : LL_VSI; B : LL_VSI; C : LL_VSI) return LL_VSI;
225
226   function vslb (A : LL_VSC; B : LL_VSC) return LL_VSC;
227   function vslh (A : LL_VSS; B : LL_VSS) return LL_VSS;
228   function vslw (A : LL_VSI; B : LL_VSI) return LL_VSI;
229
230   function vsldoi_4si  (A : LL_VSI; B : LL_VSI; C : c_int) return LL_VSI;
231   function vsldoi_8hi  (A : LL_VSS; B : LL_VSS; C : c_int) return LL_VSS;
232   function vsldoi_16qi (A : LL_VSC; B : LL_VSC; C : c_int) return LL_VSC;
233   function vsldoi_4sf  (A : LL_VF;  B : LL_VF;  C : c_int) return LL_VF;
234
235   function vsl  (A : LL_VSI; B : LL_VSI) return LL_VSI;
236   function vslo (A : LL_VSI; B : LL_VSI) return LL_VSI;
237
238   function vspltb (A : LL_VSC; B : c_int) return LL_VSC;
239   function vsplth (A : LL_VSS; B : c_int) return LL_VSS;
240   function vspltw (A : LL_VSI; B : c_int) return LL_VSI;
241
242   function vspltisb (A : c_int) return LL_VSC;
243   function vspltish (A : c_int) return LL_VSS;
244   function vspltisw (A : c_int) return LL_VSI;
245
246   function vsrb  (A : LL_VSC; B : LL_VSC) return LL_VSC;
247   function vsrh  (A : LL_VSS; B : LL_VSS) return LL_VSS;
248   function vsrw  (A : LL_VSI; B : LL_VSI) return LL_VSI;
249
250   function vsrab (A : LL_VSC; B : LL_VSC) return LL_VSC;
251   function vsrah (A : LL_VSS; B : LL_VSS) return LL_VSS;
252   function vsraw (A : LL_VSI; B : LL_VSI) return LL_VSI;
253
254   function vsr   (A : LL_VSI; B : LL_VSI) return LL_VSI;
255   function vsro  (A : LL_VSI; B : LL_VSI) return LL_VSI;
256
257   procedure stvx   (A : LL_VSI; B : c_int; C : c_ptr);
258   procedure stvebx (A : LL_VSC; B : c_int; C : c_ptr);
259   procedure stvehx (A : LL_VSS; B : c_int; C : c_ptr);
260   procedure stvewx (A : LL_VSI; B : c_int; C : c_ptr);
261   procedure stvxl  (A : LL_VSI; B : c_int; C : c_ptr);
262
263   function vsububm (A : LL_VSC; B : LL_VSC) return LL_VSC;
264   function vsubuhm (A : LL_VSS; B : LL_VSS) return LL_VSS;
265   function vsubuwm (A : LL_VSI; B : LL_VSI) return LL_VSI;
266   function vsubfp  (A : LL_VF;  B : LL_VF)  return LL_VF;
267
268   function vsubcuw (A : LL_VSI; B : LL_VSI) return LL_VSI;
269
270   function vsububs (A : LL_VSC; B : LL_VSC) return LL_VSC;
271   function vsubsbs (A : LL_VSC; B : LL_VSC) return LL_VSC;
272   function vsubuhs (A : LL_VSS; B : LL_VSS) return LL_VSS;
273   function vsubshs (A : LL_VSS; B : LL_VSS) return LL_VSS;
274   function vsubuws (A : LL_VSI; B : LL_VSI) return LL_VSI;
275   function vsubsws (A : LL_VSI; B : LL_VSI) return LL_VSI;
276
277   function vsum4ubs (A : LL_VSC; B : LL_VSI) return LL_VSI;
278   function vsum4sbs (A : LL_VSC; B : LL_VSI) return LL_VSI;
279   function vsum4shs (A : LL_VSS; B : LL_VSI) return LL_VSI;
280
281   function vsum2sws (A : LL_VSI; B : LL_VSI) return LL_VSI;
282   function vsumsws  (A : LL_VSI; B : LL_VSI) return LL_VSI;
283
284   function vupkhsb (A : LL_VSC) return LL_VSS;
285   function vupkhsh (A : LL_VSS) return LL_VSI;
286   function vupkhpx (A : LL_VSS) return LL_VSI;
287
288   function vupklsb (A : LL_VSC) return LL_VSS;
289   function vupklsh (A : LL_VSS) return LL_VSI;
290   function vupklpx (A : LL_VSS) return LL_VSI;
291
292   function vcmpequb_p (A : c_int; B : LL_VSC; C : LL_VSC) return c_int;
293   function vcmpequh_p (A : c_int; B : LL_VSS; C : LL_VSS) return c_int;
294   function vcmpequw_p (A : c_int; B : LL_VSI; C : LL_VSI) return c_int;
295   function vcmpeqfp_p (A : c_int; B : LL_VF; C : LL_VF) return c_int;
296
297   function vcmpgtub_p (A : c_int; B : LL_VSC; C : LL_VSC) return c_int;
298   function vcmpgtuh_p (A : c_int; B : LL_VSS; C : LL_VSS) return c_int;
299   function vcmpgtuw_p (A : c_int; B : LL_VSI; C : LL_VSI) return c_int;
300   function vcmpgtsb_p (A : c_int; B : LL_VSC; C : LL_VSC) return c_int;
301   function vcmpgtsh_p (A : c_int; B : LL_VSS; C : LL_VSS) return c_int;
302   function vcmpgtsw_p (A : c_int; B : LL_VSI; C : LL_VSI) return c_int;
303   function vcmpgtfp_p (A : c_int; B : LL_VF;  C : LL_VF)  return c_int;
304
305   function vcmpgefp_p (A : c_int; B : LL_VF; C : LL_VF) return c_int;
306   function vcmpbfp_p  (A : c_int; B : LL_VF; C : LL_VF) return c_int;
307
308private
309
310   ---------------------------------------
311   -- Low-level Vector Type Definitions --
312   ---------------------------------------
313
314   --  [PIM-2.3.3 Alignment of aggregate and unions containing vector types]:
315
316   --     "Aggregates (structures and arrays) and unions containing vector
317   --      types must be aligned on 16-byte boundaries and their internal
318   --      organization padded, if necessary, so that each internal vector
319   --      type is aligned on a 16-byte boundary. This is an extension to
320   --      all ABIs (AIX, Apple, SVR4, and EABI).
321
322   --------------------------
323   -- char Core Components --
324   --------------------------
325
326   type LL_VUC is array (1 .. 16) of unsigned_char;
327   for LL_VUC'Alignment use VECTOR_ALIGNMENT;
328   pragma Machine_Attribute (LL_VUC, "vector_type");
329   pragma Suppress (All_Checks, LL_VUC);
330
331   type LL_VSC is array (1 .. 16) of signed_char;
332   for LL_VSC'Alignment use VECTOR_ALIGNMENT;
333   pragma Machine_Attribute (LL_VSC, "vector_type");
334   pragma Suppress (All_Checks, LL_VSC);
335
336   type LL_VBC is array (1 .. 16) of unsigned_char;
337   for LL_VBC'Alignment use VECTOR_ALIGNMENT;
338   pragma Machine_Attribute (LL_VBC, "vector_type");
339   pragma Suppress (All_Checks, LL_VBC);
340
341   ---------------------------
342   -- short Core Components --
343   ---------------------------
344
345   type LL_VUS is array (1 .. 8) of unsigned_short;
346   for LL_VUS'Alignment use VECTOR_ALIGNMENT;
347   pragma Machine_Attribute (LL_VUS, "vector_type");
348   pragma Suppress (All_Checks, LL_VUS);
349
350   type LL_VSS is array (1 .. 8) of signed_short;
351   for LL_VSS'Alignment use VECTOR_ALIGNMENT;
352   pragma Machine_Attribute (LL_VSS, "vector_type");
353   pragma Suppress (All_Checks, LL_VSS);
354
355   type LL_VBS is array (1 .. 8) of unsigned_short;
356   for LL_VBS'Alignment use VECTOR_ALIGNMENT;
357   pragma Machine_Attribute (LL_VBS, "vector_type");
358   pragma Suppress (All_Checks, LL_VBS);
359
360   -------------------------
361   -- int Core Components --
362   -------------------------
363
364   type LL_VUI is array (1 .. 4) of unsigned_int;
365   for LL_VUI'Alignment use VECTOR_ALIGNMENT;
366   pragma Machine_Attribute (LL_VUI, "vector_type");
367   pragma Suppress (All_Checks, LL_VUI);
368
369   type LL_VSI is array (1 .. 4) of signed_int;
370   for LL_VSI'Alignment use VECTOR_ALIGNMENT;
371   pragma Machine_Attribute (LL_VSI, "vector_type");
372   pragma Suppress (All_Checks, LL_VSI);
373
374   type LL_VBI is array (1 .. 4) of unsigned_int;
375   for LL_VBI'Alignment use VECTOR_ALIGNMENT;
376   pragma Machine_Attribute (LL_VBI, "vector_type");
377   pragma Suppress (All_Checks, LL_VBI);
378
379   ---------------------------
380   -- Float Core Components --
381   ---------------------------
382
383   type LL_VF is array (1 .. 4) of Float;
384   for LL_VF'Alignment use VECTOR_ALIGNMENT;
385   pragma Machine_Attribute (LL_VF, "vector_type");
386   pragma Suppress (All_Checks, LL_VF);
387
388   ---------------------------
389   -- pixel Core Components --
390   ---------------------------
391
392   type LL_VP is array (1 .. 8) of pixel;
393   for LL_VP'Alignment use VECTOR_ALIGNMENT;
394   pragma Machine_Attribute (LL_VP, "vector_type");
395   pragma Suppress (All_Checks, LL_VP);
396
397   ------------------------------------
398   -- Low-level Functional Interface --
399   ------------------------------------
400
401   --  The functions we have to expose here are exactly those for which
402   --  GCC builtins are available. Calls to these functions will be turned
403   --  into real AltiVec instructions by the GCC back-end.
404
405   pragma Convention_Identifier (LL_Altivec, Intrinsic);
406
407   pragma Import (LL_Altivec, dss,         "__builtin_altivec_dss");
408   pragma Import (LL_Altivec, dssall,      "__builtin_altivec_dssall");
409   pragma Import (LL_Altivec, dst,         "__builtin_altivec_dst");
410   pragma Import (LL_Altivec, dstst,       "__builtin_altivec_dstst");
411   pragma Import (LL_Altivec, dststt,      "__builtin_altivec_dststt");
412   pragma Import (LL_Altivec, dstt,        "__builtin_altivec_dstt");
413   pragma Import (LL_Altivec, mtvscr,      "__builtin_altivec_mtvscr");
414   pragma Import (LL_Altivec, mfvscr,      "__builtin_altivec_mfvscr");
415   pragma Import (LL_Altivec, stvebx,      "__builtin_altivec_stvebx");
416   pragma Import (LL_Altivec, stvehx,      "__builtin_altivec_stvehx");
417   pragma Import (LL_Altivec, stvewx,      "__builtin_altivec_stvewx");
418   pragma Import (LL_Altivec, stvx,        "__builtin_altivec_stvx");
419   pragma Import (LL_Altivec, stvxl,       "__builtin_altivec_stvxl");
420   pragma Import (LL_Altivec, lvebx,       "__builtin_altivec_lvebx");
421   pragma Import (LL_Altivec, lvehx,       "__builtin_altivec_lvehx");
422   pragma Import (LL_Altivec, lvewx,       "__builtin_altivec_lvewx");
423   pragma Import (LL_Altivec, lvx,         "__builtin_altivec_lvx");
424   pragma Import (LL_Altivec, lvxl,        "__builtin_altivec_lvxl");
425   pragma Import (LL_Altivec, lvsl,        "__builtin_altivec_lvsl");
426   pragma Import (LL_Altivec, lvsr,        "__builtin_altivec_lvsr");
427   pragma Import (LL_Altivec, abs_v16qi,   "__builtin_altivec_abs_v16qi");
428   pragma Import (LL_Altivec, abs_v8hi,    "__builtin_altivec_abs_v8hi");
429   pragma Import (LL_Altivec, abs_v4si,    "__builtin_altivec_abs_v4si");
430   pragma Import (LL_Altivec, abs_v4sf,    "__builtin_altivec_abs_v4sf");
431   pragma Import (LL_Altivec, abss_v16qi,  "__builtin_altivec_abss_v16qi");
432   pragma Import (LL_Altivec, abss_v8hi,   "__builtin_altivec_abss_v8hi");
433   pragma Import (LL_Altivec, abss_v4si,   "__builtin_altivec_abss_v4si");
434   pragma Import (LL_Altivec, vaddcuw,     "__builtin_altivec_vaddcuw");
435   pragma Import (LL_Altivec, vaddfp,      "__builtin_altivec_vaddfp");
436   pragma Import (LL_Altivec, vaddsbs,     "__builtin_altivec_vaddsbs");
437   pragma Import (LL_Altivec, vaddshs,     "__builtin_altivec_vaddshs");
438   pragma Import (LL_Altivec, vaddsws,     "__builtin_altivec_vaddsws");
439   pragma Import (LL_Altivec, vaddubm,     "__builtin_altivec_vaddubm");
440   pragma Import (LL_Altivec, vaddubs,     "__builtin_altivec_vaddubs");
441   pragma Import (LL_Altivec, vadduhm,     "__builtin_altivec_vadduhm");
442   pragma Import (LL_Altivec, vadduhs,     "__builtin_altivec_vadduhs");
443   pragma Import (LL_Altivec, vadduwm,     "__builtin_altivec_vadduwm");
444   pragma Import (LL_Altivec, vadduws,     "__builtin_altivec_vadduws");
445   pragma Import (LL_Altivec, vand,        "__builtin_altivec_vand");
446   pragma Import (LL_Altivec, vandc,       "__builtin_altivec_vandc");
447   pragma Import (LL_Altivec, vavgsb,      "__builtin_altivec_vavgsb");
448   pragma Import (LL_Altivec, vavgsh,      "__builtin_altivec_vavgsh");
449   pragma Import (LL_Altivec, vavgsw,      "__builtin_altivec_vavgsw");
450   pragma Import (LL_Altivec, vavgub,      "__builtin_altivec_vavgub");
451   pragma Import (LL_Altivec, vavguh,      "__builtin_altivec_vavguh");
452   pragma Import (LL_Altivec, vavguw,      "__builtin_altivec_vavguw");
453   pragma Import (LL_Altivec, vcfsx,       "__builtin_altivec_vcfsx");
454   pragma Import (LL_Altivec, vcfux,       "__builtin_altivec_vcfux");
455   pragma Import (LL_Altivec, vcmpbfp,     "__builtin_altivec_vcmpbfp");
456   pragma Import (LL_Altivec, vcmpeqfp,    "__builtin_altivec_vcmpeqfp");
457   pragma Import (LL_Altivec, vcmpequb,    "__builtin_altivec_vcmpequb");
458   pragma Import (LL_Altivec, vcmpequh,    "__builtin_altivec_vcmpequh");
459   pragma Import (LL_Altivec, vcmpequw,    "__builtin_altivec_vcmpequw");
460   pragma Import (LL_Altivec, vcmpgefp,    "__builtin_altivec_vcmpgefp");
461   pragma Import (LL_Altivec, vcmpgtfp,    "__builtin_altivec_vcmpgtfp");
462   pragma Import (LL_Altivec, vcmpgtsb,    "__builtin_altivec_vcmpgtsb");
463   pragma Import (LL_Altivec, vcmpgtsh,    "__builtin_altivec_vcmpgtsh");
464   pragma Import (LL_Altivec, vcmpgtsw,    "__builtin_altivec_vcmpgtsw");
465   pragma Import (LL_Altivec, vcmpgtub,    "__builtin_altivec_vcmpgtub");
466   pragma Import (LL_Altivec, vcmpgtuh,    "__builtin_altivec_vcmpgtuh");
467   pragma Import (LL_Altivec, vcmpgtuw,    "__builtin_altivec_vcmpgtuw");
468   pragma Import (LL_Altivec, vctsxs,      "__builtin_altivec_vctsxs");
469   pragma Import (LL_Altivec, vctuxs,      "__builtin_altivec_vctuxs");
470   pragma Import (LL_Altivec, vexptefp,    "__builtin_altivec_vexptefp");
471   pragma Import (LL_Altivec, vlogefp,     "__builtin_altivec_vlogefp");
472   pragma Import (LL_Altivec, vmaddfp,     "__builtin_altivec_vmaddfp");
473   pragma Import (LL_Altivec, vmaxfp,      "__builtin_altivec_vmaxfp");
474   pragma Import (LL_Altivec, vmaxsb,      "__builtin_altivec_vmaxsb");
475   pragma Import (LL_Altivec, vmaxsh,      "__builtin_altivec_vmaxsh");
476   pragma Import (LL_Altivec, vmaxsw,      "__builtin_altivec_vmaxsw");
477   pragma Import (LL_Altivec, vmaxub,      "__builtin_altivec_vmaxub");
478   pragma Import (LL_Altivec, vmaxuh,      "__builtin_altivec_vmaxuh");
479   pragma Import (LL_Altivec, vmaxuw,      "__builtin_altivec_vmaxuw");
480   pragma Import (LL_Altivec, vmhaddshs,   "__builtin_altivec_vmhaddshs");
481   pragma Import (LL_Altivec, vmhraddshs,  "__builtin_altivec_vmhraddshs");
482   pragma Import (LL_Altivec, vminfp,      "__builtin_altivec_vminfp");
483   pragma Import (LL_Altivec, vminsb,      "__builtin_altivec_vminsb");
484   pragma Import (LL_Altivec, vminsh,      "__builtin_altivec_vminsh");
485   pragma Import (LL_Altivec, vminsw,      "__builtin_altivec_vminsw");
486   pragma Import (LL_Altivec, vminub,      "__builtin_altivec_vminub");
487   pragma Import (LL_Altivec, vminuh,      "__builtin_altivec_vminuh");
488   pragma Import (LL_Altivec, vminuw,      "__builtin_altivec_vminuw");
489   pragma Import (LL_Altivec, vmladduhm,   "__builtin_altivec_vmladduhm");
490   pragma Import (LL_Altivec, vmrghb,      "__builtin_altivec_vmrghb");
491   pragma Import (LL_Altivec, vmrghh,      "__builtin_altivec_vmrghh");
492   pragma Import (LL_Altivec, vmrghw,      "__builtin_altivec_vmrghw");
493   pragma Import (LL_Altivec, vmrglb,      "__builtin_altivec_vmrglb");
494   pragma Import (LL_Altivec, vmrglh,      "__builtin_altivec_vmrglh");
495   pragma Import (LL_Altivec, vmrglw,      "__builtin_altivec_vmrglw");
496   pragma Import (LL_Altivec, vmsummbm,    "__builtin_altivec_vmsummbm");
497   pragma Import (LL_Altivec, vmsumshm,    "__builtin_altivec_vmsumshm");
498   pragma Import (LL_Altivec, vmsumshs,    "__builtin_altivec_vmsumshs");
499   pragma Import (LL_Altivec, vmsumubm,    "__builtin_altivec_vmsumubm");
500   pragma Import (LL_Altivec, vmsumuhm,    "__builtin_altivec_vmsumuhm");
501   pragma Import (LL_Altivec, vmsumuhs,    "__builtin_altivec_vmsumuhs");
502   pragma Import (LL_Altivec, vmulesb,     "__builtin_altivec_vmulesb");
503   pragma Import (LL_Altivec, vmulesh,     "__builtin_altivec_vmulesh");
504   pragma Import (LL_Altivec, vmuleub,     "__builtin_altivec_vmuleub");
505   pragma Import (LL_Altivec, vmuleuh,     "__builtin_altivec_vmuleuh");
506   pragma Import (LL_Altivec, vmulosb,     "__builtin_altivec_vmulosb");
507   pragma Import (LL_Altivec, vmulosh,     "__builtin_altivec_vmulosh");
508   pragma Import (LL_Altivec, vmuloub,     "__builtin_altivec_vmuloub");
509   pragma Import (LL_Altivec, vmulouh,     "__builtin_altivec_vmulouh");
510   pragma Import (LL_Altivec, vnmsubfp,    "__builtin_altivec_vnmsubfp");
511   pragma Import (LL_Altivec, vnor,        "__builtin_altivec_vnor");
512   pragma Import (LL_Altivec, vxor,        "__builtin_altivec_vxor");
513   pragma Import (LL_Altivec, vor,         "__builtin_altivec_vor");
514   pragma Import (LL_Altivec, vperm_4si,   "__builtin_altivec_vperm_4si");
515   pragma Import (LL_Altivec, vpkpx,       "__builtin_altivec_vpkpx");
516   pragma Import (LL_Altivec, vpkshss,     "__builtin_altivec_vpkshss");
517   pragma Import (LL_Altivec, vpkshus,     "__builtin_altivec_vpkshus");
518   pragma Import (LL_Altivec, vpkswss,     "__builtin_altivec_vpkswss");
519   pragma Import (LL_Altivec, vpkswus,     "__builtin_altivec_vpkswus");
520   pragma Import (LL_Altivec, vpkuhum,     "__builtin_altivec_vpkuhum");
521   pragma Import (LL_Altivec, vpkuhus,     "__builtin_altivec_vpkuhus");
522   pragma Import (LL_Altivec, vpkuwum,     "__builtin_altivec_vpkuwum");
523   pragma Import (LL_Altivec, vpkuwus,     "__builtin_altivec_vpkuwus");
524   pragma Import (LL_Altivec, vrefp,       "__builtin_altivec_vrefp");
525   pragma Import (LL_Altivec, vrfim,       "__builtin_altivec_vrfim");
526   pragma Import (LL_Altivec, vrfin,       "__builtin_altivec_vrfin");
527   pragma Import (LL_Altivec, vrfip,       "__builtin_altivec_vrfip");
528   pragma Import (LL_Altivec, vrfiz,       "__builtin_altivec_vrfiz");
529   pragma Import (LL_Altivec, vrlb,        "__builtin_altivec_vrlb");
530   pragma Import (LL_Altivec, vrlh,        "__builtin_altivec_vrlh");
531   pragma Import (LL_Altivec, vrlw,        "__builtin_altivec_vrlw");
532   pragma Import (LL_Altivec, vrsqrtefp,   "__builtin_altivec_vrsqrtefp");
533   pragma Import (LL_Altivec, vsel_4si,    "__builtin_altivec_vsel_4si");
534   pragma Import (LL_Altivec, vsldoi_4si,  "__builtin_altivec_vsldoi_4si");
535   pragma Import (LL_Altivec, vsldoi_8hi,  "__builtin_altivec_vsldoi_8hi");
536   pragma Import (LL_Altivec, vsldoi_16qi, "__builtin_altivec_vsldoi_16qi");
537   pragma Import (LL_Altivec, vsldoi_4sf,  "__builtin_altivec_vsldoi_4sf");
538   pragma Import (LL_Altivec, vsl,         "__builtin_altivec_vsl");
539   pragma Import (LL_Altivec, vslb,        "__builtin_altivec_vslb");
540   pragma Import (LL_Altivec, vslh,        "__builtin_altivec_vslh");
541   pragma Import (LL_Altivec, vslo,        "__builtin_altivec_vslo");
542   pragma Import (LL_Altivec, vslw,        "__builtin_altivec_vslw");
543   pragma Import (LL_Altivec, vspltb,      "__builtin_altivec_vspltb");
544   pragma Import (LL_Altivec, vsplth,      "__builtin_altivec_vsplth");
545   pragma Import (LL_Altivec, vspltisb,    "__builtin_altivec_vspltisb");
546   pragma Import (LL_Altivec, vspltish,    "__builtin_altivec_vspltish");
547   pragma Import (LL_Altivec, vspltisw,    "__builtin_altivec_vspltisw");
548   pragma Import (LL_Altivec, vspltw,      "__builtin_altivec_vspltw");
549   pragma Import (LL_Altivec, vsr,         "__builtin_altivec_vsr");
550   pragma Import (LL_Altivec, vsrab,       "__builtin_altivec_vsrab");
551   pragma Import (LL_Altivec, vsrah,       "__builtin_altivec_vsrah");
552   pragma Import (LL_Altivec, vsraw,       "__builtin_altivec_vsraw");
553   pragma Import (LL_Altivec, vsrb,        "__builtin_altivec_vsrb");
554   pragma Import (LL_Altivec, vsrh,        "__builtin_altivec_vsrh");
555   pragma Import (LL_Altivec, vsro,        "__builtin_altivec_vsro");
556   pragma Import (LL_Altivec, vsrw,        "__builtin_altivec_vsrw");
557   pragma Import (LL_Altivec, vsubcuw,     "__builtin_altivec_vsubcuw");
558   pragma Import (LL_Altivec, vsubfp,      "__builtin_altivec_vsubfp");
559   pragma Import (LL_Altivec, vsubsbs,     "__builtin_altivec_vsubsbs");
560   pragma Import (LL_Altivec, vsubshs,     "__builtin_altivec_vsubshs");
561   pragma Import (LL_Altivec, vsubsws,     "__builtin_altivec_vsubsws");
562   pragma Import (LL_Altivec, vsububm,     "__builtin_altivec_vsububm");
563   pragma Import (LL_Altivec, vsububs,     "__builtin_altivec_vsububs");
564   pragma Import (LL_Altivec, vsubuhm,     "__builtin_altivec_vsubuhm");
565   pragma Import (LL_Altivec, vsubuhs,     "__builtin_altivec_vsubuhs");
566   pragma Import (LL_Altivec, vsubuwm,     "__builtin_altivec_vsubuwm");
567   pragma Import (LL_Altivec, vsubuws,     "__builtin_altivec_vsubuws");
568   pragma Import (LL_Altivec, vsum2sws,    "__builtin_altivec_vsum2sws");
569   pragma Import (LL_Altivec, vsum4sbs,    "__builtin_altivec_vsum4sbs");
570   pragma Import (LL_Altivec, vsum4shs,    "__builtin_altivec_vsum4shs");
571   pragma Import (LL_Altivec, vsum4ubs,    "__builtin_altivec_vsum4ubs");
572   pragma Import (LL_Altivec, vsumsws,     "__builtin_altivec_vsumsws");
573   pragma Import (LL_Altivec, vupkhpx,     "__builtin_altivec_vupkhpx");
574   pragma Import (LL_Altivec, vupkhsb,     "__builtin_altivec_vupkhsb");
575   pragma Import (LL_Altivec, vupkhsh,     "__builtin_altivec_vupkhsh");
576   pragma Import (LL_Altivec, vupklpx,     "__builtin_altivec_vupklpx");
577   pragma Import (LL_Altivec, vupklsb,     "__builtin_altivec_vupklsb");
578   pragma Import (LL_Altivec, vupklsh,     "__builtin_altivec_vupklsh");
579   pragma Import (LL_Altivec, vcmpbfp_p,   "__builtin_altivec_vcmpbfp_p");
580   pragma Import (LL_Altivec, vcmpeqfp_p,  "__builtin_altivec_vcmpeqfp_p");
581   pragma Import (LL_Altivec, vcmpgefp_p,  "__builtin_altivec_vcmpgefp_p");
582   pragma Import (LL_Altivec, vcmpgtfp_p,  "__builtin_altivec_vcmpgtfp_p");
583   pragma Import (LL_Altivec, vcmpequw_p,  "__builtin_altivec_vcmpequw_p");
584   pragma Import (LL_Altivec, vcmpgtsw_p,  "__builtin_altivec_vcmpgtsw_p");
585   pragma Import (LL_Altivec, vcmpgtuw_p,  "__builtin_altivec_vcmpgtuw_p");
586   pragma Import (LL_Altivec, vcmpgtuh_p,  "__builtin_altivec_vcmpgtuh_p");
587   pragma Import (LL_Altivec, vcmpgtsh_p,  "__builtin_altivec_vcmpgtsh_p");
588   pragma Import (LL_Altivec, vcmpequh_p,  "__builtin_altivec_vcmpequh_p");
589   pragma Import (LL_Altivec, vcmpequb_p,  "__builtin_altivec_vcmpequb_p");
590   pragma Import (LL_Altivec, vcmpgtsb_p,  "__builtin_altivec_vcmpgtsb_p");
591   pragma Import (LL_Altivec, vcmpgtub_p,  "__builtin_altivec_vcmpgtub_p");
592
593end GNAT.Altivec.Low_Level_Vectors;
594