2005-12-05 Doug Rupp <rupp@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Dec 2005 17:10:03 +0000 (17:10 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Dec 2005 17:10:03 +0000 (17:10 +0000)
* mlib-tgt-vms-ia64.adb, mlib-tgt-vms-alpha.adb (Is_Interface): Change
Ada bind file prefix on VMS from b$ to b__.
(Build_Dynamic_Library): Change Init file suffix on VMS from $init to
__init.

* prj-nmsc.adb: Change some Hostparm.OpenVMS checks to
Targparm.OpenVMS_On_Target.
(Object_Suffix): Initialize with target object suffix.
(Get_Unit): Change Ada bind file prefix on VMS from b$ to b__.

* butil.adb: Change some Hostparm.OpenVMS checks to
Targparm.OpenVMS_On_Target.

* clean.adb: Change some Hostparm.OpenVMS checks to
Targparm.OpenVMS_On_Target.
(Object_Suffix): Initialize with call to Get_Target_Object_Suffix.
({declaraction},Delete_Binder_Generated_Files,{initialization}): Change
Ada bind file prefix on VMS from b$ to b__.

* gnatlink.adb (Process_Args): Call Add_Src_Search_Dir for -I in
--GCC so that Get_Target_Parameters can find system.ads.
(Gnatlink): Call Get_Target_Parameters in mainline.
Initialize standard packages for Targparm.
Change some Hostparm.OpenVMS checks to Targparm.OpenVMS_On_Target.
(Process_Args): Also Check for object files with target object
extension.
(Make_Binder_File_Names): Create with target object extension.
(Make_Binder_File_Names): Change Ada bind file prefix on VMS from b$
to b__.

* mlib-prj.adb: Change some Hostparm.OpenVMS checks to
Targparm.OpenVMS_On_Target.
({declaration},Build_Library,Check_Library): Change Ada bind file
prefix on VMS from b$ to b__.

* osint-b.adb: Change some Hostparm.OpenVMS checks to
Targparm.OpenVMS_On_Target.
(Create_Binder_Output): Change Ada bind file prefix on VMS from b$ to
b__.

* targext.c: New file.

* Makefile.in: add support for vxworks653 builds
(../../vxaddr2line): gnatlink with targext.o.
(TOOLS_LIBS): Move targext.o to precede libgnat.
(init.o, initialize.o): Minor clean up in dependencies.
(GNATLINK_OBJS): Add targparm.o, snames.o
Add rules fo building targext.o and linking it explicitly with all
tools.
Also add targext.o to gnatlib.

* Make-lang.in: Add rules for building targext.o and linking it in
with gnat1 and gnatbind.
Add entry for exp_sel.o.

* osint.adb Change some Hostparm.OpenVMS checks to
Targparm.OpenVMS_On_Target.
(Object_File_Name): Use target object suffix.

* osint.ads (Object_Suffix): Remove, no longer used.
(Target_Object_Suffix): Initialize with target object suffix.

* rident.ads: Add special exception to license.

* targparm.adb (Get_Target_Parameters): Set the value of
Multi_Unit_Index_Character after OpenVMS_On_Target gets its definitive
value.
(Get_Target_Parameters): Set OpenVMS_On_Target if openvms.

* targparm.ads: Add special exception to license.

* g-os_lib.ads, g-os_lib.adb (Get_Target_Debuggable_Suffix): New
function.
(Copy_File): Make sure from file is closed if error on to file
(Get_Target_Executable_Suffix, Get_Target_Object_Suffix): New functions.

* make.adb (Object_Suffix): Intialize with Get_Target_Object_Suffix.
(Executable_Suffix): Intialize with Get_Target_Executable_Suffix.

* osint-c.adb (Set_Output_Object_File_Name): Initialize extension with
target object suffix.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@108282 138bc75d-0d04-0410-961f-82ee72b054a4

34 files changed:
gcc/ada/Makefile.rtl
gcc/ada/a-elchha.adb
gcc/ada/a-exextr.adb
gcc/ada/a-taside.adb
gcc/ada/a-taster.adb [new file with mode: 0644]
gcc/ada/a-taster.ads [new file with mode: 0644]
gcc/ada/bindgen.adb
gcc/ada/bindusg.adb
gcc/ada/g-allein.ads [new file with mode: 0644]
gcc/ada/g-alleve.adb [new file with mode: 0644]
gcc/ada/g-alleve.ads [new file with mode: 0644]
gcc/ada/g-altcon.adb [new file with mode: 0644]
gcc/ada/g-altcon.ads [new file with mode: 0644]
gcc/ada/g-altive.ads [new file with mode: 0644]
gcc/ada/g-alveop.adb [new file with mode: 0644]
gcc/ada/g-alveop.ads [new file with mode: 0644]
gcc/ada/g-alvety.ads [new file with mode: 0644]
gcc/ada/g-alvevi.ads [new file with mode: 0644]
gcc/ada/impunit.adb
gcc/ada/opt.ads
gcc/ada/s-finimp.adb
gcc/ada/s-io.adb
gcc/ada/s-io.ads
gcc/ada/s-soflin.adb
gcc/ada/s-soflin.ads
gcc/ada/s-solita.adb
gcc/ada/s-stausa.ads
gcc/ada/s-tarest.adb
gcc/ada/s-tasini.adb
gcc/ada/s-taskin.adb
gcc/ada/s-taskin.ads
gcc/ada/s-tassta.adb
gcc/ada/s-tasuti.adb
gcc/ada/switch-b.adb

index d1d34ee..def747d 100644 (file)
@@ -1,5 +1,5 @@
 # Makefile.rtl for GNU Ada Compiler (GNAT).
-#   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+#   Copyright (C) 2003-2005, Free Software Foundation, Inc.
 
 #This file is part of GCC.
 
@@ -35,6 +35,7 @@ GNATRTL_TASKING_OBJS= \
   a-sytaco$(objext) \
   a-tasatt$(objext) \
   a-taside$(objext) \
+  a-taster$(objext) \
   g-boubuf$(objext) \
   g-boumai$(objext) \
   g-semaph$(objext) \
@@ -279,6 +280,13 @@ GNATRTL_NONTASKING_OBJS= \
   a-zzunio$(objext) \
   ada$(objext) \
   calendar$(objext) \
+  g-allein$(objext) \
+  g-alleve$(objext) \
+  g-altcon$(objext) \
+  g-altive$(objext) \
+  g-alveop$(objext) \
+  g-alvety$(objext) \
+  g-alvevi$(objext) \
   g-arrspl$(objext) \
   g-awk$(objext) \
   g-bubsor$(objext) \
@@ -497,6 +505,7 @@ GNATRTL_NONTASKING_OBJS= \
   s-sopco4$(objext) \
   s-sopco5$(objext) \
   s-stache$(objext) \
+  s-stausa$(objext) \
   s-stchop$(objext) \
   s-stalib$(objext) \
   s-stoele$(objext) \
index c2b38e4..135daf5 100644 (file)
 --  Default version for most targets
 
 with System.Standard_Library; use System.Standard_Library;
+--  Used for Adafinal
+
+with System.Soft_Links;
+--  Used for Task_Termination_Handler
+--           Task_Termination_NT
 
 procedure Ada.Exceptions.Last_Chance_Handler
   (Except : Exception_Occurrence)
@@ -72,6 +77,14 @@ is
    --  Convenient shortcut
 
 begin
+   --  Do not execute any task termination code when shutting down the system.
+   --  The Adafinal procedure would execute the task termination routine for
+   --  normal termination, but we have already executed the task termination
+   --  procedure because of an unhandled exception.
+
+   System.Soft_Links.Task_Termination_Handler :=
+     System.Soft_Links.Task_Termination_NT'Access;
+
    --  Let's shutdown the runtime now. The rest of the procedure needs to be
    --  careful not to use anything that would require runtime support. In
    --  particular, functions returning strings are banned since the sec stack
index b50dbc9..bb7e5ad 100644 (file)
@@ -88,7 +88,7 @@ package body Exception_Traces is
    --  Hook for GDB to support "break exception unhandled"
 
    --  For "break exception", GDB uses __gnat_raise_nodefer_with_msg, which
-   --  is not in this section because it fullfills other purposes than a mere
+   --  is not in this section because it functions as more than simply a
    --  debugger interface.
 
    --------------------------------
@@ -161,8 +161,18 @@ package body Exception_Traces is
    --------------------------------
 
    procedure Notify_Unhandled_Exception is
+      Excep : constant EOA := Get_Current_Excep.all;
+
    begin
-      Notify_Exception (Get_Current_Excep.all, Is_Unhandled => True);
+      --  Check whether there is any termination handler to be executed for
+      --  the environment task, and execute it if needed. Here we handle both
+      --  the Abnormal and Unhandled_Exception task termination. Normal
+      --  task termination routine is executed elsewhere (either in the
+      --  Task_Wrapper or in the Adafinal routine for the environment task).
+
+      Task_Termination_Handler.all (Excep.all);
+
+      Notify_Exception (Excep, Is_Unhandled => True);
       Unhandled_Exception;
    end Notify_Unhandled_Exception;
 
index 88722ac..8599af7 100644 (file)
@@ -44,7 +44,8 @@ pragma Warnings (Off);
 --  package will be categorized as Preelaborate. See AI-362 for details.
 --  It is safe in the context of the run-time to violate the rules!
 
-with System.Tasking.Stages;
+with System.Tasking.Utilities;
+--  Used for Abort_Tasks
 
 pragma Warnings (On);
 
@@ -81,7 +82,7 @@ package body Ada.Task_Identification is
       if T = Null_Task_Id then
          raise Program_Error;
       else
-         System.Tasking.Stages.Abort_Tasks
+         System.Tasking.Utilities.Abort_Tasks
            (System.Tasking.Task_List'(1 => Convert_Ids (T)));
       end if;
    end Abort_Task;
diff --git a/gcc/ada/a-taster.adb b/gcc/ada/a-taster.adb
new file mode 100644 (file)
index 0000000..93374b2
--- /dev/null
@@ -0,0 +1,128 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                 A D A . T A S K _ T E R M I N A T I O N                  --
+--                                                                          --
+--                                 B o d y                                  --
+--                                                                          --
+--            Copyright (C) 2005, Free Software Foundation, Inc.            --
+--                                                                          --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT. The copyright notice above, and the license provisions that follow --
+-- apply solely to the  contents of the part following the private keyword. --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
+-- Boston, MA 02110-1301, USA.                                              --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with System.Tasking;
+--  used for Task_Id
+
+with System.Task_Primitives.Operations;
+--  used for Self
+
+with Unchecked_Conversion;
+
+package body Ada.Task_Termination is
+
+   use type Ada.Task_Identification.Task_Id;
+
+   package STPO renames System.Task_Primitives.Operations;
+
+   -----------------------
+   -- Local subprograms --
+   -----------------------
+
+   function To_TT is new Unchecked_Conversion
+     (System.Tasking.Termination_Handler, Termination_Handler);
+
+   function To_ST is new Unchecked_Conversion
+     (Termination_Handler, System.Tasking.Termination_Handler);
+
+   function To_Task_Id is new Unchecked_Conversion
+     (Ada.Task_Identification.Task_Id, System.Tasking.Task_Id);
+
+   -----------------------------------
+   -- Current_Task_Fallback_Handler --
+   -----------------------------------
+
+   function Current_Task_Fallback_Handler return Termination_Handler is
+   begin
+      return To_TT (System.Tasking.Self.Common.Fall_Back_Handler);
+   end Current_Task_Fallback_Handler;
+
+   -------------------------------------
+   -- Set_Dependents_Fallback_Handler --
+   -------------------------------------
+
+   procedure Set_Dependents_Fallback_Handler
+     (Handler : Termination_Handler)
+   is
+   begin
+      STPO.Self.Common.Fall_Back_Handler := To_ST (Handler);
+   end Set_Dependents_Fallback_Handler;
+
+   --------------------------
+   -- Set_Specific_Handler --
+   --------------------------
+
+   procedure Set_Specific_Handler
+     (T       : Ada.Task_Identification.Task_Id;
+      Handler : Termination_Handler)
+   is
+   begin
+      --  Tasking_Error is raised if the task identified by T has already
+      --  terminated. Program_Error is raised if the value of T is
+      --  Null_Task_Id.
+
+      if T = Ada.Task_Identification.Null_Task_Id then
+         raise Program_Error;
+      elsif Ada.Task_Identification.Is_Terminated (T) then
+         raise Tasking_Error;
+      else
+         To_Task_Id (T).Common.Specific_Handler := To_ST (Handler);
+      end if;
+   end Set_Specific_Handler;
+
+   ----------------------
+   -- Specific_Handler --
+   ----------------------
+
+   function Specific_Handler
+     (T : Ada.Task_Identification.Task_Id) return Termination_Handler
+   is
+   begin
+      --  Tasking_Error is raised if the task identified by T has already
+      --  terminated. Program_Error is raised if the value of T is
+      --  Null_Task_Id.
+
+      if T = Ada.Task_Identification.Null_Task_Id then
+         raise Program_Error;
+      elsif Ada.Task_Identification.Is_Terminated (T) then
+         raise Tasking_Error;
+      else
+         return To_TT (To_Task_Id (T).Common.Specific_Handler);
+      end if;
+   end Specific_Handler;
+
+end Ada.Task_Termination;
diff --git a/gcc/ada/a-taster.ads b/gcc/ada/a-taster.ads
new file mode 100644 (file)
index 0000000..5a496a8
--- /dev/null
@@ -0,0 +1,43 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                 A D A . T A S K _ T E R M I N A T I O N                  --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--            Copyright (C) 2005, Free Software Foundation, Inc.            --
+--                                                                          --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT. The copyright notice above, and the license provisions that follow --
+-- apply solely to the  contents of the part following the private keyword. --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with Ada.Task_Identification;
+with Ada.Exceptions;
+
+package Ada.Task_Termination is
+   pragma Preelaborate (Task_Termination);
+
+   type Cause_Of_Termination is (Normal, Abnormal, Unhandled_Exception);
+
+   type Termination_Handler is access protected procedure
+     (Cause : Cause_Of_Termination;
+      T     : Ada.Task_Identification.Task_Id;
+      X     : Ada.Exceptions.Exception_Occurrence);
+
+   procedure Set_Dependents_Fallback_Handler
+     (Handler : Termination_Handler);
+   function Current_Task_Fallback_Handler return Termination_Handler;
+
+   procedure Set_Specific_Handler
+     (T       : Ada.Task_Identification.Task_Id;
+      Handler : Termination_Handler);
+   function Specific_Handler
+     (T : Ada.Task_Identification.Task_Id) return Termination_Handler;
+
+end Ada.Task_Termination;
index 9962530..b64798f 100644 (file)
@@ -1268,6 +1268,22 @@ package body Bindgen is
          WBI ("      pragma Import (C, finalize, ""__gnat_finalize"");");
       end if;
 
+      --  If we want to analyze the stack, we have to import corresponding
+      --  symbols
+
+      if Dynamic_Stack_Measurement then
+         WBI ("");
+         WBI ("      procedure Output_Results;");
+         WBI ("      pragma Import (C, Output_Results, " &
+              """__gnat_stack_usage_output_results"");");
+
+         WBI ("");
+         WBI ("      " &
+              "procedure Initialize_Stack_Analysis (Buffer_Size : Natural);");
+         WBI ("      pragma Import (C, Initialize_Stack_Analysis, " &
+              """__gnat_stack_usage_initialize"");");
+      end if;
+
       --  Deal with declarations for main program case
 
       if not No_Main_Subprogram then
@@ -1360,6 +1376,13 @@ package body Bindgen is
          Write_Statement_Buffer;
       end if;
 
+      if Dynamic_Stack_Measurement then
+         Set_String ("      Initialize_Stack_Analysis (");
+         Set_Int (Dynamic_Stack_Measurement_Array_Size);
+         Set_String (");");
+         Write_Statement_Buffer;
+      end if;
+
       if not Cumulative_Restrictions.Set (No_Finalization) then
 
          if not No_Main_Subprogram
@@ -1398,6 +1421,12 @@ package body Bindgen is
          end if;
       end if;
 
+      --  Prints the result of static stack analysis
+
+      if Dynamic_Stack_Measurement then
+         WBI ("      Output_Results;");
+      end if;
+
       --  Finalize is only called if we have a run time
 
       if not Cumulative_Restrictions.Set (No_Finalization) then
@@ -1506,6 +1535,15 @@ package body Bindgen is
          Write_Statement_Buffer;
       end if;
 
+      --  Initializes dynamic stack measurement if needed
+
+      if Dynamic_Stack_Measurement then
+         Set_String ("   __gnat_stack_usage_initialize (");
+         Set_Int (Dynamic_Stack_Measurement_Array_Size);
+         Set_String (");");
+         Write_Statement_Buffer;
+      end if;
+
       --  The __gnat_initialize routine is used only if we have a run-time
 
       if not Suppress_Standard_Library_On_Target then
@@ -1552,6 +1590,12 @@ package body Bindgen is
          WBI ("   system__standard_library__adafinal ();");
       end if;
 
+      --  Outputs the dynamic stack measurement if needed
+
+      if Dynamic_Stack_Measurement then
+         WBI ("   __gnat_stack_usage_output_results ();");
+      end if;
+
       --  The finalize routine is used only if we have a run-time
 
       if not Suppress_Standard_Library_On_Target then
@@ -1681,7 +1725,7 @@ package body Bindgen is
                --  filename object is seen. Multiply defined symbols will
                --  result.
 
-               if Hostparm.OpenVMS
+               if OpenVMS_On_Target
                  and then Is_Internal_File_Name
                   (ALIs.Table
                    (Units.Table (Elab_Order.Table (E)).My_ALI).Sfile)
@@ -2244,6 +2288,12 @@ package body Bindgen is
          WBI ("extern void __gnat_install_handler (void);");
       end if;
 
+      if Dynamic_Stack_Measurement then
+         WBI ("");
+         WBI ("extern void __gnat_stack_usage_output_results (void);");
+         WBI ("extern void __gnat_stack_usage_initialize (int size);");
+      end if;
+
       WBI ("");
 
       Gen_Elab_Defs_C;
@@ -2780,7 +2830,7 @@ package body Bindgen is
             With_GNARL := True;
          end if;
 
-         if Hostparm.OpenVMS and then Name_Buffer (1 .. 5) = "dec%s" then
+         if OpenVMS_On_Target and then Name_Buffer (1 .. 5) = "dec%s" then
             With_DECGNAT := True;
          end if;
       end loop;
index 667c982..046b6aa 100644 (file)
@@ -214,6 +214,12 @@ begin
    Write_Str ("  -Tn       Set time slice value to n milliseconds (n >= 0)");
    Write_Eol;
 
+   --  Line for -u switch
+
+   Write_Str ("  -un       Enable dynamic stack analysis, with n results ");
+   Write_Str ("stored");
+   Write_Eol;
+
    --  Line for -v switch
 
    Write_Str ("  -v        Verbose mode. Error messages, ");
diff --git a/gcc/ada/g-allein.ads b/gcc/ada/g-allein.ads
new file mode 100644 (file)
index 0000000..6721fed
--- /dev/null
@@ -0,0 +1,1356 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--     G N A T . A L T I V E C . L O W _ L E V E L _ I N T E R F A C E      --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 2004-2005, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This unit provides entities to be used internally by the units common to
+--  both bindings (Hard or Soft), and relevant to the interfacing with the
+--  underlying Low Level support.
+
+--  The set of "services" includes:
+--
+--  o Imports to the low level routines for which a direct binding is
+--    mandatory (or just possible when analyzed as such).
+--
+--  o Conversion routines (unchecked) between low level types, or between
+--    various pointer representations.
+
+with GNAT.Altivec.Vector_Types;
+with GNAT.Altivec.Low_Level_Vectors;
+
+with Ada.Unchecked_Conversion;
+
+package GNAT.Altivec.Low_Level_Interface is
+
+   ----------------------------------------------------------------------------
+   -- Imports for "argument must be literal" constraints in the Hard binding --
+   ----------------------------------------------------------------------------
+
+   use GNAT.Altivec.Vector_Types;
+
+   -- vec_ctf --
+
+   function vec_ctf_vui_cint_r_vf
+     (A : vector_unsigned_int;
+      B : c_int) return vector_float;
+
+   pragma Import
+     (LL_Altivec, vec_ctf_vui_cint_r_vf, "__builtin_altivec_vcfux");
+
+   function vec_ctf_vsi_cint_r_vf
+     (A : vector_signed_int;
+      B : c_int) return vector_float;
+
+   pragma Import
+     (LL_Altivec, vec_ctf_vsi_cint_r_vf, "__builtin_altivec_vcfsx");
+
+   -- vec_vcfsx --
+
+   function vec_vcfsx_vsi_cint_r_vf
+     (A : vector_signed_int;
+      B : c_int) return vector_float;
+
+   pragma Import
+     (LL_Altivec, vec_vcfsx_vsi_cint_r_vf, "__builtin_altivec_vcfsx");
+
+   -- vec_vcfux --
+
+   function vec_vcfux_vui_cint_r_vf
+     (A : vector_unsigned_int;
+      B : c_int) return vector_float;
+
+   pragma Import
+     (LL_Altivec, vec_vcfux_vui_cint_r_vf, "__builtin_altivec_vcfux");
+
+   -- vec_cts --
+
+   function vec_cts_vf_cint_r_vsi
+     (A : vector_float;
+      B : c_int) return vector_signed_int;
+
+   pragma Import
+     (LL_Altivec, vec_cts_vf_cint_r_vsi, "__builtin_altivec_vctsxs");
+
+   -- vec_ctu --
+
+   function vec_ctu_vf_cint_r_vui
+     (A : vector_float;
+      B : c_int) return vector_unsigned_int;
+
+   pragma Import
+     (LL_Altivec, vec_ctu_vf_cint_r_vui, "__builtin_altivec_vctuxs");
+
+   -- vec_dss --
+
+   procedure vec_dss_cint
+     (A : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dss_cint, "__builtin_altivec_dss");
+
+   -- vec_dst --
+
+   procedure vec_dst_kvucp_cint_cint
+     (A : const_vector_unsigned_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvucp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kvscp_cint_cint
+     (A : const_vector_signed_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvscp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kvbcp_cint_cint
+     (A : const_vector_bool_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvbcp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kvusp_cint_cint
+     (A : const_vector_unsigned_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvusp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kvssp_cint_cint
+     (A : const_vector_signed_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvssp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kvbsp_cint_cint
+     (A : const_vector_bool_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvbsp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kvxp_cint_cint
+     (A : const_vector_pixel_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvxp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kvuip_cint_cint
+     (A : const_vector_unsigned_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvuip_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kvsip_cint_cint
+     (A : const_vector_signed_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvsip_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kvbip_cint_cint
+     (A : const_vector_bool_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvbip_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kvfp_cint_cint
+     (A : const_vector_float_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kvfp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kucp_cint_cint
+     (A : const_unsigned_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kucp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kscp_cint_cint
+     (A : const_signed_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kscp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kusp_cint_cint
+     (A : const_unsigned_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kusp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_ksp_cint_cint
+     (A : const_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_ksp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kuip_cint_cint
+     (A : const_unsigned_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kuip_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kip_cint_cint
+     (A : const_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kip_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kulongp_cint_cint
+     (A : const_unsigned_long_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kulongp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_klongp_cint_cint
+     (A : const_long_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_klongp_cint_cint, "__builtin_altivec_dst");
+
+   procedure vec_dst_kfp_cint_cint
+     (A : const_float_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dst_kfp_cint_cint, "__builtin_altivec_dst");
+
+   -- vec_dstst --
+
+   procedure vec_dstst_kvucp_cint_cint
+     (A : const_vector_unsigned_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvucp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kvscp_cint_cint
+     (A : const_vector_signed_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvscp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kvbcp_cint_cint
+     (A : const_vector_bool_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvbcp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kvusp_cint_cint
+     (A : const_vector_unsigned_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvusp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kvssp_cint_cint
+     (A : const_vector_signed_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvssp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kvbsp_cint_cint
+     (A : const_vector_bool_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvbsp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kvxp_cint_cint
+     (A : const_vector_pixel_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvxp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kvuip_cint_cint
+     (A : const_vector_unsigned_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvuip_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kvsip_cint_cint
+     (A : const_vector_signed_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvsip_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kvbip_cint_cint
+     (A : const_vector_bool_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvbip_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kvfp_cint_cint
+     (A : const_vector_float_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kvfp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kucp_cint_cint
+     (A : const_unsigned_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kucp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kscp_cint_cint
+     (A : const_signed_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kscp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kusp_cint_cint
+     (A : const_unsigned_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kusp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_ksp_cint_cint
+     (A : const_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_ksp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kuip_cint_cint
+     (A : const_unsigned_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kuip_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kip_cint_cint
+     (A : const_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kip_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kulongp_cint_cint
+     (A : const_unsigned_long_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kulongp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_klongp_cint_cint
+     (A : const_long_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_klongp_cint_cint, "__builtin_altivec_dstst");
+
+   procedure vec_dstst_kfp_cint_cint
+     (A : const_float_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstst_kfp_cint_cint, "__builtin_altivec_dstst");
+
+   -- vec_dststt --
+
+   procedure vec_dststt_kvucp_cint_cint
+     (A : const_vector_unsigned_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvucp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kvscp_cint_cint
+     (A : const_vector_signed_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvscp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kvbcp_cint_cint
+     (A : const_vector_bool_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvbcp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kvusp_cint_cint
+     (A : const_vector_unsigned_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvusp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kvssp_cint_cint
+     (A : const_vector_signed_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvssp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kvbsp_cint_cint
+     (A : const_vector_bool_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvbsp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kvxp_cint_cint
+     (A : const_vector_pixel_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvxp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kvuip_cint_cint
+     (A : const_vector_unsigned_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvuip_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kvsip_cint_cint
+     (A : const_vector_signed_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvsip_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kvbip_cint_cint
+     (A : const_vector_bool_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvbip_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kvfp_cint_cint
+     (A : const_vector_float_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kvfp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kucp_cint_cint
+     (A : const_unsigned_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kucp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kscp_cint_cint
+     (A : const_signed_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kscp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kusp_cint_cint
+     (A : const_unsigned_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kusp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_ksp_cint_cint
+     (A : const_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_ksp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kuip_cint_cint
+     (A : const_unsigned_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kuip_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kip_cint_cint
+     (A : const_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kip_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kulongp_cint_cint
+     (A : const_unsigned_long_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kulongp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_klongp_cint_cint
+     (A : const_long_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_klongp_cint_cint, "__builtin_altivec_dststt");
+
+   procedure vec_dststt_kfp_cint_cint
+     (A : const_float_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dststt_kfp_cint_cint, "__builtin_altivec_dststt");
+
+   -- vec_dstt --
+
+   procedure vec_dstt_kvucp_cint_cint
+     (A : const_vector_unsigned_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvucp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kvscp_cint_cint
+     (A : const_vector_signed_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvscp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kvbcp_cint_cint
+     (A : const_vector_bool_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvbcp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kvusp_cint_cint
+     (A : const_vector_unsigned_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvusp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kvssp_cint_cint
+     (A : const_vector_signed_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvssp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kvbsp_cint_cint
+     (A : const_vector_bool_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvbsp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kvxp_cint_cint
+     (A : const_vector_pixel_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvxp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kvuip_cint_cint
+     (A : const_vector_unsigned_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvuip_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kvsip_cint_cint
+     (A : const_vector_signed_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvsip_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kvbip_cint_cint
+     (A : const_vector_bool_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvbip_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kvfp_cint_cint
+     (A : const_vector_float_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kvfp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kucp_cint_cint
+     (A : const_unsigned_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kucp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kscp_cint_cint
+     (A : const_signed_char_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kscp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kusp_cint_cint
+     (A : const_unsigned_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kusp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_ksp_cint_cint
+     (A : const_short_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_ksp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kuip_cint_cint
+     (A : const_unsigned_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kuip_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kip_cint_cint
+     (A : const_int_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kip_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kulongp_cint_cint
+     (A : const_unsigned_long_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kulongp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_klongp_cint_cint
+     (A : const_long_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_klongp_cint_cint, "__builtin_altivec_dstt");
+
+   procedure vec_dstt_kfp_cint_cint
+     (A : const_float_ptr;
+      B : c_int;
+      C : c_int);
+
+   pragma Import
+     (LL_Altivec, vec_dstt_kfp_cint_cint, "__builtin_altivec_dstt");
+
+   -- vec_sld --
+
+   --  ??? The base GCC implementation maps everything to vsldoi_4si, while
+   --  it defines builtin variants for all the modes. Adjust here, to avoid
+   --  the infamous argument mode mismatch.
+
+   function vec_sld_vf_vf_cint_r_vf
+     (A : vector_float;
+      B : vector_float;
+      C : c_int) return vector_float;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vf_vf_cint_r_vf, "__builtin_altivec_vsldoi_4sf");
+
+   function vec_sld_vsi_vsi_cint_r_vsi
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : c_int) return vector_signed_int;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vsi_vsi_cint_r_vsi, "__builtin_altivec_vsldoi_4si");
+
+   function vec_sld_vui_vui_cint_r_vui
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : c_int) return vector_unsigned_int;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vui_vui_cint_r_vui, "__builtin_altivec_vsldoi_4si");
+
+   function vec_sld_vbi_vbi_cint_r_vbi
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : c_int) return vector_bool_int;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vbi_vbi_cint_r_vbi, "__builtin_altivec_vsldoi_4si");
+
+   function vec_sld_vss_vss_cint_r_vss
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : c_int) return vector_signed_short;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vss_vss_cint_r_vss, "__builtin_altivec_vsldoi_8hi");
+
+   function vec_sld_vus_vus_cint_r_vus
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : c_int) return vector_unsigned_short;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vus_vus_cint_r_vus, "__builtin_altivec_vsldoi_8hi");
+
+   function vec_sld_vbs_vbs_cint_r_vbs
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : c_int) return vector_bool_short;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vbs_vbs_cint_r_vbs, "__builtin_altivec_vsldoi_8hi");
+
+   function vec_sld_vx_vx_cint_r_vx
+     (A : vector_pixel;
+      B : vector_pixel;
+      C : c_int) return vector_pixel;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vx_vx_cint_r_vx, "__builtin_altivec_vsldoi_4si");
+
+   function vec_sld_vsc_vsc_cint_r_vsc
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : c_int) return vector_signed_char;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vsc_vsc_cint_r_vsc, "__builtin_altivec_vsldoi_16qi");
+
+   function vec_sld_vuc_vuc_cint_r_vuc
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : c_int) return vector_unsigned_char;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vuc_vuc_cint_r_vuc, "__builtin_altivec_vsldoi_16qi");
+
+   function vec_sld_vbc_vbc_cint_r_vbc
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : c_int) return vector_bool_char;
+
+   pragma Import
+     (LL_Altivec, vec_sld_vbc_vbc_cint_r_vbc, "__builtin_altivec_vsldoi_16qi");
+
+   -- vec_splat --
+
+   function vec_splat_vsc_cint_r_vsc
+     (A : vector_signed_char;
+      B : c_int) return vector_signed_char;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vsc_cint_r_vsc, "__builtin_altivec_vspltb");
+
+   function vec_splat_vuc_cint_r_vuc
+     (A : vector_unsigned_char;
+      B : c_int) return vector_unsigned_char;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vuc_cint_r_vuc, "__builtin_altivec_vspltb");
+
+   function vec_splat_vbc_cint_r_vbc
+     (A : vector_bool_char;
+      B : c_int) return vector_bool_char;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vbc_cint_r_vbc, "__builtin_altivec_vspltb");
+
+   function vec_splat_vss_cint_r_vss
+     (A : vector_signed_short;
+      B : c_int) return vector_signed_short;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vss_cint_r_vss, "__builtin_altivec_vsplth");
+
+   function vec_splat_vus_cint_r_vus
+     (A : vector_unsigned_short;
+      B : c_int) return vector_unsigned_short;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vus_cint_r_vus, "__builtin_altivec_vsplth");
+
+   function vec_splat_vbs_cint_r_vbs
+     (A : vector_bool_short;
+      B : c_int) return vector_bool_short;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vbs_cint_r_vbs, "__builtin_altivec_vsplth");
+
+   function vec_splat_vx_cint_r_vx
+     (A : vector_pixel;
+      B : c_int) return vector_pixel;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vx_cint_r_vx, "__builtin_altivec_vsplth");
+
+   function vec_splat_vf_cint_r_vf
+     (A : vector_float;
+      B : c_int) return vector_float;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vf_cint_r_vf, "__builtin_altivec_vspltw");
+
+   function vec_splat_vsi_cint_r_vsi
+     (A : vector_signed_int;
+      B : c_int) return vector_signed_int;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vsi_cint_r_vsi, "__builtin_altivec_vspltw");
+
+   function vec_splat_vui_cint_r_vui
+     (A : vector_unsigned_int;
+      B : c_int) return vector_unsigned_int;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vui_cint_r_vui, "__builtin_altivec_vspltw");
+
+   function vec_splat_vbi_cint_r_vbi
+     (A : vector_bool_int;
+      B : c_int) return vector_bool_int;
+
+   pragma Import
+     (LL_Altivec, vec_splat_vbi_cint_r_vbi, "__builtin_altivec_vspltw");
+
+   -- vec_vspltw --
+
+   function vec_vspltw_vf_cint_r_vf
+     (A : vector_float;
+      B : c_int) return vector_float;
+
+   pragma Import
+     (LL_Altivec, vec_vspltw_vf_cint_r_vf, "__builtin_altivec_vspltw");
+
+   function vec_vspltw_vsi_cint_r_vsi
+     (A : vector_signed_int;
+      B : c_int) return vector_signed_int;
+
+   pragma Import
+     (LL_Altivec, vec_vspltw_vsi_cint_r_vsi, "__builtin_altivec_vspltw");
+
+   function vec_vspltw_vui_cint_r_vui
+     (A : vector_unsigned_int;
+      B : c_int) return vector_unsigned_int;
+
+   pragma Import
+     (LL_Altivec, vec_vspltw_vui_cint_r_vui, "__builtin_altivec_vspltw");
+
+   function vec_vspltw_vbi_cint_r_vbi
+     (A : vector_bool_int;
+      B : c_int) return vector_bool_int;
+
+   pragma Import
+     (LL_Altivec, vec_vspltw_vbi_cint_r_vbi, "__builtin_altivec_vspltw");
+
+   -- vec_vsplth --
+
+   function vec_vsplth_vbs_cint_r_vbs
+     (A : vector_bool_short;
+      B : c_int) return vector_bool_short;
+
+   pragma Import
+     (LL_Altivec, vec_vsplth_vbs_cint_r_vbs, "__builtin_altivec_vsplth");
+
+   function vec_vsplth_vss_cint_r_vss
+     (A : vector_signed_short;
+      B : c_int) return vector_signed_short;
+
+   pragma Import
+     (LL_Altivec, vec_vsplth_vss_cint_r_vss, "__builtin_altivec_vsplth");
+
+   function vec_vsplth_vus_cint_r_vus
+     (A : vector_unsigned_short;
+      B : c_int) return vector_unsigned_short;
+
+   pragma Import
+     (LL_Altivec, vec_vsplth_vus_cint_r_vus, "__builtin_altivec_vsplth");
+
+   function vec_vsplth_vx_cint_r_vx
+     (A : vector_pixel;
+      B : c_int) return vector_pixel;
+
+   pragma Import
+     (LL_Altivec, vec_vsplth_vx_cint_r_vx, "__builtin_altivec_vsplth");
+
+   -- vec_vspltb --
+
+   function vec_vspltb_vsc_cint_r_vsc
+     (A : vector_signed_char;
+      B : c_int) return vector_signed_char;
+
+   pragma Import
+     (LL_Altivec, vec_vspltb_vsc_cint_r_vsc, "__builtin_altivec_vspltb");
+
+   function vec_vspltb_vuc_cint_r_vuc
+     (A : vector_unsigned_char;
+      B : c_int) return vector_unsigned_char;
+
+   pragma Import
+     (LL_Altivec, vec_vspltb_vuc_cint_r_vuc, "__builtin_altivec_vspltb");
+
+   function vec_vspltb_vbc_cint_r_vbc
+     (A : vector_bool_char;
+      B : c_int) return vector_bool_char;
+
+   pragma Import
+     (LL_Altivec, vec_vspltb_vbc_cint_r_vbc, "__builtin_altivec_vspltb");
+
+   -- vec_splat_s8 --
+
+   function vec_splat_s8_cint_r_vsc
+     (A : c_int) return vector_signed_char;
+
+   pragma Import
+     (LL_Altivec, vec_splat_s8_cint_r_vsc, "__builtin_altivec_vspltisb");
+
+   -- vec_splat_s16 --
+
+   function vec_splat_s16_cint_r_vss
+     (A : c_int) return vector_signed_short;
+
+   pragma Import
+     (LL_Altivec, vec_splat_s16_cint_r_vss, "__builtin_altivec_vspltish");
+
+   -- vec_splat_s32 --
+
+   function vec_splat_s32_cint_r_vsi
+     (A : c_int) return vector_signed_int;
+
+   pragma Import
+     (LL_Altivec, vec_splat_s32_cint_r_vsi, "__builtin_altivec_vspltisw");
+
+   -- vec_splat_u8 --
+
+   function vec_splat_u8_cint_r_vuc
+     (A : c_int) return vector_unsigned_char;
+
+   pragma Import
+     (LL_Altivec, vec_splat_u8_cint_r_vuc, "__builtin_altivec_vspltisb");
+
+   -- vec_splat_u16 --
+
+   function vec_splat_u16_cint_r_vus
+     (A : c_int) return vector_unsigned_short;
+
+   pragma Import
+     (LL_Altivec, vec_splat_u16_cint_r_vus, "__builtin_altivec_vspltish");
+
+   -- vec_splat_u32 --
+
+   function vec_splat_u32_cint_r_vui
+     (A : c_int) return vector_unsigned_int;
+
+   pragma Import
+     (LL_Altivec, vec_splat_u32_cint_r_vui, "__builtin_altivec_vspltisw");
+
+   ------------------------------------------------------------
+   -- Imports for low-level signature consistent subprograms --
+   ------------------------------------------------------------
+
+   -- vec_dssall --
+
+   procedure vec_dssall;
+
+   pragma Import
+     (LL_Altivec, vec_dssall, "__builtin_altivec_dssall");
+
+   -----------------------------------------
+   -- Conversions between low level types --
+   -----------------------------------------
+
+   use GNAT.Altivec.Low_Level_Vectors;
+
+   --  Something like...
+   --
+   --  TYPES="LL_VBC LL_VUC LL_VSC LL_VBS LL_VUS LL_VSS \
+   --         LL_VBI LL_VUI LL_VSI LL_VF LL_VP"
+   --  for TT in `echo $TYPES`; do
+   --  for ST in `echo $TYPES`; do
+   --  echo "function To_$TT is new Ada.Unchecked_Conversion ($ST, $TT);"
+   --  done
+   --  echo ""
+   --  done
+
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VBC, LL_VBC);
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VUC, LL_VBC);
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VSC, LL_VBC);
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VBS, LL_VBC);
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VUS, LL_VBC);
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VSS, LL_VBC);
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VBI, LL_VBC);
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VUI, LL_VBC);
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VSI, LL_VBC);
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VF, LL_VBC);
+   function To_LL_VBC is new Ada.Unchecked_Conversion (LL_VP, LL_VBC);
+
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VBC, LL_VUC);
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VUC, LL_VUC);
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VSC, LL_VUC);
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VBS, LL_VUC);
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VUS, LL_VUC);
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VSS, LL_VUC);
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VBI, LL_VUC);
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VUI, LL_VUC);
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VSI, LL_VUC);
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VF, LL_VUC);
+   function To_LL_VUC is new Ada.Unchecked_Conversion (LL_VP, LL_VUC);
+
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VBC, LL_VSC);
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VUC, LL_VSC);
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VSC, LL_VSC);
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VBS, LL_VSC);
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VUS, LL_VSC);
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VSS, LL_VSC);
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VBI, LL_VSC);
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VUI, LL_VSC);
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VSI, LL_VSC);
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VF, LL_VSC);
+   function To_LL_VSC is new Ada.Unchecked_Conversion (LL_VP, LL_VSC);
+
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VBC, LL_VBS);
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VUC, LL_VBS);
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VSC, LL_VBS);
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VBS, LL_VBS);
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VUS, LL_VBS);
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VSS, LL_VBS);
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VBI, LL_VBS);
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VUI, LL_VBS);
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VSI, LL_VBS);
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VF, LL_VBS);
+   function To_LL_VBS is new Ada.Unchecked_Conversion (LL_VP, LL_VBS);
+
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VBC, LL_VUS);
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VUC, LL_VUS);
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VSC, LL_VUS);
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VBS, LL_VUS);
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VUS, LL_VUS);
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VSS, LL_VUS);
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VBI, LL_VUS);
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VUI, LL_VUS);
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VSI, LL_VUS);
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VF, LL_VUS);
+   function To_LL_VUS is new Ada.Unchecked_Conversion (LL_VP, LL_VUS);
+
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VBC, LL_VSS);
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VUC, LL_VSS);
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VSC, LL_VSS);
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VBS, LL_VSS);
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VUS, LL_VSS);
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VSS, LL_VSS);
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VBI, LL_VSS);
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VUI, LL_VSS);
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VSI, LL_VSS);
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VF, LL_VSS);
+   function To_LL_VSS is new Ada.Unchecked_Conversion (LL_VP, LL_VSS);
+
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VBC, LL_VBI);
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VUC, LL_VBI);
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VSC, LL_VBI);
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VBS, LL_VBI);
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VUS, LL_VBI);
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VSS, LL_VBI);
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VBI, LL_VBI);
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VUI, LL_VBI);
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VSI, LL_VBI);
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VF, LL_VBI);
+   function To_LL_VBI is new Ada.Unchecked_Conversion (LL_VP, LL_VBI);
+
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VBC, LL_VUI);
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VUC, LL_VUI);
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VSC, LL_VUI);
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VBS, LL_VUI);
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VUS, LL_VUI);
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VSS, LL_VUI);
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VBI, LL_VUI);
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VUI, LL_VUI);
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VSI, LL_VUI);
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VF, LL_VUI);
+   function To_LL_VUI is new Ada.Unchecked_Conversion (LL_VP, LL_VUI);
+
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VBC, LL_VSI);
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VUC, LL_VSI);
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VSC, LL_VSI);
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VBS, LL_VSI);
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VUS, LL_VSI);
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VSS, LL_VSI);
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VBI, LL_VSI);
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VUI, LL_VSI);
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VSI, LL_VSI);
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VF, LL_VSI);
+   function To_LL_VSI is new Ada.Unchecked_Conversion (LL_VP, LL_VSI);
+
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VBC, LL_VF);
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VUC, LL_VF);
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VSC, LL_VF);
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VBS, LL_VF);
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VUS, LL_VF);
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VSS, LL_VF);
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VBI, LL_VF);
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VUI, LL_VF);
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VSI, LL_VF);
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VF, LL_VF);
+   function To_LL_VF is new Ada.Unchecked_Conversion (LL_VP, LL_VF);
+
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VBC, LL_VP);
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VUC, LL_VP);
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VSC, LL_VP);
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VBS, LL_VP);
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VUS, LL_VP);
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VSS, LL_VP);
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VBI, LL_VP);
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VUI, LL_VP);
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VSI, LL_VP);
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VF, LL_VP);
+   function To_LL_VP is new Ada.Unchecked_Conversion (LL_VP, LL_VP);
+
+   ----------------------------------------------
+   -- Conversions between pointer/access types --
+   ----------------------------------------------
+
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_unsigned_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_signed_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_bool_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_unsigned_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_signed_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_bool_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_unsigned_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_signed_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_bool_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_float_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (vector_pixel_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_bool_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_signed_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_unsigned_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_bool_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_signed_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_unsigned_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_bool_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_signed_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_unsigned_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_float_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_vector_pixel_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (c_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (signed_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (unsigned_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (signed_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (unsigned_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (signed_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (unsigned_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (long_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (signed_long_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (unsigned_long_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (float_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_signed_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_unsigned_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_signed_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_unsigned_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_signed_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_unsigned_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_long_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_signed_long_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_unsigned_long_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (const_float_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_signed_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_unsigned_char_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_signed_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_unsigned_short_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_signed_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_unsigned_int_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_long_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_signed_long_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_unsigned_long_ptr, c_ptr);
+   function To_PTR is
+      new Ada.Unchecked_Conversion (constv_float_ptr, c_ptr);
+
+end GNAT.Altivec.Low_Level_Interface;
diff --git a/gcc/ada/g-alleve.adb b/gcc/ada/g-alleve.adb
new file mode 100644 (file)
index 0000000..2da8697
--- /dev/null
@@ -0,0 +1,5035 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--       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        --
+--                                                                          --
+--                                 B o d y                                  --
+--                         (Soft Binding Version)                           --
+--                                                                          --
+--          Copyright (C) 2004-2005, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  ??? What is exactly needed for the soft case is still a bit unclear on
+--  some accounts. The expected functional equivalence with the Hard binding
+--  might require tricky things to be done on some targets.
+
+--  Examples that come to mind are endianness variations or differences in the
+--  base FP model while we need the operation results to be the same as what
+--  the real AltiVec instructions would do on a PowerPC.
+
+with Ada.Numerics.Generic_Elementary_Functions;
+with Interfaces;                       use Interfaces;
+with System.Storage_Elements;          use System.Storage_Elements;
+
+with GNAT.Altivec.Conversions;         use  GNAT.Altivec.Conversions;
+with GNAT.Altivec.Low_Level_Interface; use  GNAT.Altivec.Low_Level_Interface;
+
+package body GNAT.Altivec.Low_Level_Vectors is
+
+   --  This package assumes C_float is an IEEE single-precision float type
+
+   pragma Assert (C_float'Machine_Radix = 2);
+   pragma Assert (C_float'Machine_Mantissa = 24);
+   pragma Assert (C_float'Machine_Emin = -125);
+   pragma Assert (C_float'Machine_Emax = 128);
+   pragma Assert (C_float'Machine_Rounds);
+   pragma Assert (not C_float'Machine_Overflows);
+   pragma Assert (C_float'Signed_Zeros);
+   pragma Assert (C_float'Denorm);
+
+   --  Pixel types. As defined in [PIM-2.1 Data types]:
+   --  A 16-bit pixel is 1/5/5/5;
+   --  A 32-bit pixel is 8/8/8/8.
+   --  We use the following records as an intermediate representation, to
+   --  ease computation.
+
+   type Unsigned_1 is mod 2 ** 1;
+   type Unsigned_5 is mod 2 ** 5;
+
+   type Pixel_16 is record
+      T : Unsigned_1;
+      R : Unsigned_5;
+      G : Unsigned_5;
+      B : Unsigned_5;
+   end record;
+
+   type Pixel_32 is record
+      T : unsigned_char;
+      R : unsigned_char;
+      G : unsigned_char;
+      B : unsigned_char;
+   end record;
+
+   --  Conversions to/from the pixel records to the integer types that are
+   --  actually stored into the pixel vectors:
+
+   function To_Pixel (Source : unsigned_short) return Pixel_16;
+   function To_unsigned_short (Source : Pixel_16) return unsigned_short;
+   function To_Pixel (Source : unsigned_int) return Pixel_32;
+   function To_unsigned_int (Source : Pixel_32) return unsigned_int;
+
+   package C_float_Operations is
+     new Ada.Numerics.Generic_Elementary_Functions (C_float);
+
+   --  Model of the Vector Status and Control Register (VSCR), as
+   --  defined in [PIM-4.1 Vector Status and Control Register]:
+
+   VSCR : unsigned_int;
+
+   --  Positions of the flags in VSCR(0 .. 31):
+
+   NJ_POS   : constant := 15;
+   SAT_POS  : constant := 31;
+
+   --  To control overflows, integer operations are done on 64-bit types:
+
+   SINT64_MIN : constant := -2 ** 63;
+   SINT64_MAX : constant := 2 ** 63 - 1;
+   UINT64_MAX : constant := 2 ** 64 - 1;
+
+   type SI64 is range SINT64_MIN .. SINT64_MAX;
+   type UI64 is mod UINT64_MAX + 1;
+
+   type F64 is digits 15
+     range -16#0.FFFF_FFFF_FFFF_F8#E+256 .. 16#0.FFFF_FFFF_FFFF_F8#E+256;
+
+   function Bits
+     (X    : unsigned_int;
+      Low  : Natural;
+      High : Natural) return unsigned_int;
+
+   function Bits
+     (X    : unsigned_short;
+      Low  : Natural;
+      High : Natural) return unsigned_short;
+
+   function Bits
+     (X    : unsigned_char;
+      Low  : Natural;
+      High : Natural) return unsigned_char;
+
+   function Write_Bit
+     (X     : unsigned_int;
+      Where : Natural;
+      Value : Unsigned_1) return unsigned_int;
+
+   function Write_Bit
+     (X     : unsigned_short;
+      Where : Natural;
+      Value : Unsigned_1) return unsigned_short;
+
+   function Write_Bit
+     (X     : unsigned_char;
+      Where : Natural;
+      Value : Unsigned_1) return unsigned_char;
+
+   function NJ_Truncate (X : C_float) return C_float;
+   --  If NJ and A is a denormalized number, return zero
+
+   function Bound_Align
+     (X : Integer_Address;
+      Y : Integer_Address) return Integer_Address;
+   --  [PIM-4.3 Notations and Conventions]
+   --  Align X in a y-byte boundary and return the result
+
+   function Rnd_To_FP_Nearest (X : F64) return C_float;
+   --  [PIM-4.3 Notations and Conventions]
+
+   function Rnd_To_FPI_Near (X : F64) return F64;
+
+   function Rnd_To_FPI_Trunc (X : F64) return F64;
+
+   function FP_Recip_Est (X : C_float) return C_float;
+   --  [PIM-4.3 Notations and Conventions]
+   --  12-bit accurate floating-point estimate of 1/x
+
+   function ROTL
+     (Value  : unsigned_char;
+      Amount : Natural) return unsigned_char;
+   --  [PIM-4.3 Notations and Conventions]
+   --  Rotate left
+
+   function ROTL
+     (Value  : unsigned_short;
+      Amount : Natural) return unsigned_short;
+
+   function ROTL
+     (Value  : unsigned_int;
+      Amount : Natural) return unsigned_int;
+
+   function Recip_SQRT_Est (X : C_float) return C_float;
+
+   function Shift_Left
+     (Value  : unsigned_char;
+      Amount : Natural) return unsigned_char;
+   --  [PIM-4.3 Notations and Conventions]
+   --  Shift left
+
+   function Shift_Left
+     (Value  : unsigned_short;
+      Amount : Natural) return unsigned_short;
+
+   function Shift_Left
+     (Value  : unsigned_int;
+      Amount : Natural) return unsigned_int;
+
+   function Shift_Right
+     (Value  : unsigned_char;
+      Amount : Natural) return unsigned_char;
+   --  [PIM-4.3 Notations and Conventions]
+   --  Shift Right
+
+   function Shift_Right
+     (Value  : unsigned_short;
+      Amount : Natural) return unsigned_short;
+
+   function Shift_Right
+     (Value  : unsigned_int;
+      Amount : Natural) return unsigned_int;
+
+   Signed_Bool_False : constant := 0;
+   Signed_Bool_True  : constant := -1;
+
+   ------------------------------
+   -- Signed_Operations (spec) --
+   ------------------------------
+
+   generic
+      type Component_Type is range <>;
+      type Index_Type is range <>;
+      type Varray_Type is array (Index_Type) of Component_Type;
+
+   package Signed_Operations is
+
+      function Modular_Result (X : SI64) return Component_Type;
+
+      function Saturate (X : SI64) return Component_Type;
+
+      function Saturate (X : F64) return Component_Type;
+
+      function Sign_Extend (X : c_int) return Component_Type;
+      --  [PIM-4.3 Notations and Conventions]
+      --  Sign-extend X
+
+      function abs_vxi (A : Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, abs_vxi);
+
+      function abss_vxi (A : Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, abss_vxi);
+
+      function vaddsxs (A : Varray_Type; B : Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, vaddsxs);
+
+      function vavgsx (A : Varray_Type; B : Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, vavgsx);
+
+      function vcmpgtsx (A : Varray_Type; B : Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, vcmpgtsx);
+
+      function lvexx (A : c_long; B : c_ptr) return Varray_Type;
+      pragma Convention (LL_Altivec, lvexx);
+
+      function vmaxsx (A : Varray_Type;  B : Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, vmaxsx);
+
+      function vmrghx (A : Varray_Type; B : Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, vmrghx);
+
+      function vmrglx (A : Varray_Type; B : Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, vmrglx);
+
+      function vminsx (A : Varray_Type; B : Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, vminsx);
+
+      function vspltx (A : Varray_Type; B : c_int) return Varray_Type;
+      pragma Convention (LL_Altivec, vspltx);
+
+      function vspltisx (A : c_int) return Varray_Type;
+      pragma Convention (LL_Altivec, vspltisx);
+
+      type Bit_Operation is
+        access function
+        (Value  : Component_Type;
+         Amount : Natural) return Component_Type;
+
+      function vsrax
+        (A          : Varray_Type;
+         B          : Varray_Type;
+         Shift_Func : Bit_Operation) return Varray_Type;
+
+      procedure stvexx (A : Varray_Type; B : c_int; C : c_ptr);
+      pragma Convention (LL_Altivec, stvexx);
+
+      function vsubsxs (A : Varray_Type; B : Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, vsubsxs);
+
+      function Check_CR6 (A : c_int; D : Varray_Type) return c_int;
+      --  If D is the result of a vcmp operation and A the flag for
+      --  the kind of operation (e.g CR6_LT), check the predicate
+      --  that corresponds to this flag.
+
+   end Signed_Operations;
+
+   ------------------------------
+   -- Signed_Operations (body) --
+   ------------------------------
+
+   package body Signed_Operations is
+
+      Bool_True  : constant Component_Type := Signed_Bool_True;
+      Bool_False : constant Component_Type := Signed_Bool_False;
+
+      Number_Of_Elements : constant Integer :=
+                             VECTOR_BIT / Component_Type'Size;
+
+      --------------------
+      -- Modular_Result --
+      --------------------
+
+      function Modular_Result (X : SI64) return Component_Type is
+         D : Component_Type;
+
+      begin
+         if X > 0 then
+            D := Component_Type (UI64 (X)
+                                 mod (UI64 (Component_Type'Last) + 1));
+         else
+            D := Component_Type ((-(UI64 (-X)
+                                    mod (UI64 (Component_Type'Last) + 1))));
+         end if;
+
+         return D;
+      end Modular_Result;
+
+      --------------
+      -- Saturate --
+      --------------
+
+      function Saturate (X : SI64) return Component_Type is
+         D : Component_Type;
+
+      begin
+         --  Saturation, as defined in
+         --  [PIM-4.1 Vector Status and Control Register]
+
+         D := Component_Type (SI64'Max
+                              (SI64 (Component_Type'First),
+                               SI64'Min
+                               (SI64 (Component_Type'Last),
+                                X)));
+
+         if SI64 (D) /= X then
+            VSCR := Write_Bit (VSCR, SAT_POS, 1);
+         end if;
+
+         return D;
+      end Saturate;
+
+      function Saturate (X : F64) return Component_Type is
+         D : Component_Type;
+
+      begin
+         --  Saturation, as defined in
+         --  [PIM-4.1 Vector Status and Control Register]
+
+         D := Component_Type (F64'Max
+                              (F64 (Component_Type'First),
+                               F64'Min
+                               (F64 (Component_Type'Last),
+                                X)));
+
+         if F64 (D) /= X then
+            VSCR := Write_Bit (VSCR, SAT_POS, 1);
+         end if;
+
+         return D;
+      end Saturate;
+
+      -----------------
+      -- Sign_Extend --
+      -----------------
+
+      function Sign_Extend (X : c_int) return Component_Type is
+      begin
+         --  X is usually a 5-bits literal. In the case of the simulator,
+         --  it is an integral parameter, so sign extension is straightforward.
+
+         return Component_Type (X);
+      end Sign_Extend;
+
+      -------------
+      -- abs_vxi --
+      -------------
+
+      function abs_vxi (A : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for K in Varray_Type'Range loop
+            if A (K) /= Component_Type'First then
+               D (K) := abs (A (K));
+            else
+               D (K) := Component_Type'First;
+            end if;
+         end loop;
+
+         return D;
+      end abs_vxi;
+
+      --------------
+      -- abss_vxi --
+      --------------
+
+      function abss_vxi (A : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for K in Varray_Type'Range loop
+            D (K) := Saturate (abs (SI64 (A (K))));
+         end loop;
+
+         return D;
+      end abss_vxi;
+
+      -------------
+      -- vaddsxs --
+      -------------
+
+      function vaddsxs (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := Saturate (SI64 (A (J)) + SI64 (B (J)));
+         end loop;
+
+         return D;
+      end vaddsxs;
+
+      ------------
+      -- vavgsx --
+      ------------
+
+      function vavgsx (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := Component_Type ((SI64 (A (J)) + SI64 (B (J)) + 1) / 2);
+         end loop;
+
+         return D;
+      end vavgsx;
+
+      --------------
+      -- vcmpgtsx --
+      --------------
+
+      function vcmpgtsx
+        (A : Varray_Type;
+         B : Varray_Type) return Varray_Type
+      is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            if A (J) > B (J) then
+               D (J) := Bool_True;
+            else
+               D (J) := Bool_False;
+            end if;
+         end loop;
+
+         return D;
+      end vcmpgtsx;
+
+      -----------
+      -- lvexx --
+      -----------
+
+      function lvexx (A : c_long; B : c_ptr) return Varray_Type is
+         D  : Varray_Type;
+         S  : Integer;
+         EA : Integer_Address;
+         J  : Index_Type;
+
+      begin
+         S := 16 / Number_Of_Elements;
+         EA := Bound_Align (Integer_Address (A) + To_Integer (B),
+                            Integer_Address (S));
+         J := Index_Type (((EA mod 16) / Integer_Address (S))
+                          + Integer_Address (Index_Type'First));
+
+         declare
+            Component : Component_Type;
+            for Component'Address use To_Address (EA);
+         begin
+            D (J) := Component;
+         end;
+
+         return D;
+      end lvexx;
+
+      ------------
+      -- vmaxsx --
+      ------------
+
+      function vmaxsx (A : Varray_Type;  B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            if A (J) > B (J) then
+               D (J) := A (J);
+            else
+               D (J) := B (J);
+            end if;
+         end loop;
+
+         return D;
+      end vmaxsx;
+
+      ------------
+      -- vmrghx --
+      ------------
+
+      function vmrghx (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D      : Varray_Type;
+         Offset : constant Integer := Integer (Index_Type'First);
+         M      : constant Integer := Number_Of_Elements / 2;
+
+      begin
+         for J in 0 .. M - 1 loop
+            D (Index_Type (2 * J + Offset)) := A (Index_Type (J + Offset));
+            D (Index_Type (2 * J + Offset + 1)) := B (Index_Type (J + Offset));
+         end loop;
+
+         return D;
+      end vmrghx;
+
+      ------------
+      -- vmrglx --
+      ------------
+
+      function vmrglx (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D      : Varray_Type;
+         Offset : constant Integer := Integer (Index_Type'First);
+         M      : constant Integer := Number_Of_Elements / 2;
+
+      begin
+         for J in 0 .. M - 1 loop
+            D (Index_Type (2 * J + Offset)) := A (Index_Type (J + Offset + M));
+            D (Index_Type (2 * J + Offset + 1)) :=
+              B (Index_Type (J + Offset + M));
+         end loop;
+
+         return D;
+      end vmrglx;
+
+      ------------
+      -- vminsx --
+      ------------
+
+      function vminsx (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            if A (J) < B (J) then
+               D (J) := A (J);
+            else
+               D (J) := B (J);
+            end if;
+         end loop;
+
+         return D;
+      end vminsx;
+
+      ------------
+      -- vspltx --
+      ------------
+
+      function vspltx (A : Varray_Type; B : c_int) return Varray_Type is
+         J : constant Integer :=
+               Integer (B) mod Number_Of_Elements
+           + Integer (Varray_Type'First);
+         D : Varray_Type;
+
+      begin
+         for K in Varray_Type'Range loop
+            D (K) := A (Index_Type (J));
+         end loop;
+
+         return D;
+      end vspltx;
+
+      --------------
+      -- vspltisx --
+      --------------
+
+      function vspltisx (A : c_int) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := Sign_Extend (A);
+         end loop;
+
+         return D;
+      end vspltisx;
+
+      -----------
+      -- vsrax --
+      -----------
+
+      function vsrax
+        (A          : Varray_Type;
+         B          : Varray_Type;
+         Shift_Func : Bit_Operation) return Varray_Type
+      is
+         D : Varray_Type;
+         S : constant Component_Type :=
+               Component_Type (128 / Number_Of_Elements);
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := Shift_Func (A (J), Natural (B (J) mod S));
+         end loop;
+
+         return D;
+      end vsrax;
+
+      ------------
+      -- stvexx --
+      ------------
+
+      procedure stvexx (A : Varray_Type; B : c_int; C : c_ptr) is
+         S  : Integer;
+         EA : Integer_Address;
+         J  : Index_Type;
+
+      begin
+         S := 16 / Number_Of_Elements;
+         EA := Bound_Align (Integer_Address (B) + To_Integer (C),
+                            Integer_Address (S));
+         J := Index_Type ((EA mod 16) / Integer_Address (S)
+                          + Integer_Address (Index_Type'First));
+
+         declare
+            Component : Component_Type;
+            for Component'Address use To_Address (EA);
+         begin
+            Component := A (J);
+         end;
+      end stvexx;
+
+      -------------
+      -- vsubsxs --
+      -------------
+
+      function vsubsxs (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := Saturate (SI64 (A (J)) - SI64 (B (J)));
+         end loop;
+
+         return D;
+      end vsubsxs;
+
+      ---------------
+      -- Check_CR6 --
+      ---------------
+
+      function Check_CR6 (A : c_int; D : Varray_Type) return c_int is
+         All_Element : Boolean := True;
+         Any_Element : Boolean := False;
+
+      begin
+         for J in Varray_Type'Range loop
+            All_Element := All_Element and (D (J) = Bool_True);
+            Any_Element := Any_Element or  (D (J) = Bool_True);
+         end loop;
+
+         if A = CR6_LT then
+            if All_Element then
+               return 1;
+            else
+               return 0;
+            end if;
+
+         elsif A = CR6_EQ then
+            if not Any_Element then
+               return 1;
+            else
+               return 0;
+            end if;
+
+         elsif A = CR6_EQ_REV then
+            if Any_Element then
+               return 1;
+            else
+               return 0;
+            end if;
+
+         elsif A = CR6_LT_REV then
+            if not All_Element then
+               return 1;
+            else
+               return 0;
+            end if;
+         end if;
+
+         return 0;
+      end Check_CR6;
+
+   end Signed_Operations;
+
+   --------------------------------
+   -- Unsigned_Operations (spec) --
+   --------------------------------
+
+   generic
+      type Component_Type is mod <>;
+      type Index_Type is range <>;
+      type Varray_Type is array (Index_Type) of Component_Type;
+
+   package Unsigned_Operations is
+
+      function Bits
+        (X    : Component_Type;
+         Low  : Natural;
+         High : Natural) return Component_Type;
+      --  Return X [Low:High] as defined in [PIM-4.3 Notations and Conventions]
+      --  using big endian bit ordering.
+
+      function Write_Bit
+        (X     : Component_Type;
+         Where : Natural;
+         Value : Unsigned_1) return Component_Type;
+      --  Write Value into X[Where:Where] (if it fits in) and return the result
+      --  (big endian bit ordering).
+
+      function Modular_Result (X : UI64) return Component_Type;
+
+      function Saturate (X : UI64) return Component_Type;
+
+      function Saturate (X : F64) return Component_Type;
+
+      function Saturate (X : SI64) return Component_Type;
+
+      function vadduxm  (A : Varray_Type; B : Varray_Type) return Varray_Type;
+
+      function vadduxs  (A : Varray_Type; B : Varray_Type) return Varray_Type;
+
+      function vavgux   (A : Varray_Type; B : Varray_Type) return Varray_Type;
+
+      function vcmpequx (A : Varray_Type; B : Varray_Type) return Varray_Type;
+
+      function vcmpgtux (A : Varray_Type; B : Varray_Type) return Varray_Type;
+
+      function vmaxux   (A : Varray_Type; B : Varray_Type) return Varray_Type;
+
+      function vminux   (A : Varray_Type; B : Varray_Type) return Varray_Type;
+
+      type Bit_Operation is
+        access function
+        (Value  : Component_Type;
+         Amount : Natural) return Component_Type;
+
+      function vrlx
+        (A    : Varray_Type;
+         B    : Varray_Type;
+         ROTL : Bit_Operation) return Varray_Type;
+
+      function vsxx
+        (A          : Varray_Type;
+         B          : Varray_Type;
+         Shift_Func : Bit_Operation) return Varray_Type;
+      --  Vector shift (left or right, depending on Shift_Func)
+
+      function vsubuxm (A : Varray_Type; B : Varray_Type) return Varray_Type;
+
+      function vsubuxs (A : Varray_Type; B : Varray_Type) return Varray_Type;
+
+      function Check_CR6 (A : c_int; D : Varray_Type) return c_int;
+      --  If D is the result of a vcmp operation and A the flag for
+      --  the kind of operation (e.g CR6_LT), check the predicate
+      --  that corresponds to this flag.
+
+   end Unsigned_Operations;
+
+   --------------------------------
+   -- Unsigned_Operations (body) --
+   --------------------------------
+
+   package body Unsigned_Operations is
+
+      Number_Of_Elements : constant Integer :=
+                             VECTOR_BIT / Component_Type'Size;
+
+      Bool_True  : constant Component_Type := Component_Type'Last;
+      Bool_False : constant Component_Type := 0;
+
+      --------------------
+      -- Modular_Result --
+      --------------------
+
+      function Modular_Result (X : UI64) return Component_Type is
+         D : Component_Type;
+      begin
+         D := Component_Type (X mod (UI64 (Component_Type'Last) + 1));
+         return D;
+      end Modular_Result;
+
+      --------------
+      -- Saturate --
+      --------------
+
+      function Saturate (X : UI64) return Component_Type is
+         D : Component_Type;
+
+      begin
+         --  Saturation, as defined in
+         --  [PIM-4.1 Vector Status and Control Register]
+
+         D := Component_Type (UI64'Max
+                              (UI64 (Component_Type'First),
+                               UI64'Min
+                               (UI64 (Component_Type'Last),
+                                X)));
+
+         if UI64 (D) /= X then
+            VSCR := Write_Bit (VSCR, SAT_POS, 1);
+         end if;
+
+         return D;
+      end Saturate;
+
+      function Saturate (X : SI64) return Component_Type is
+         D : Component_Type;
+
+      begin
+         --  Saturation, as defined in
+         --  [PIM-4.1 Vector Status and Control Register]
+
+         D := Component_Type (SI64'Max
+                              (SI64 (Component_Type'First),
+                               SI64'Min
+                               (SI64 (Component_Type'Last),
+                                X)));
+
+         if SI64 (D) /= X then
+            VSCR := Write_Bit (VSCR, SAT_POS, 1);
+         end if;
+
+         return D;
+      end Saturate;
+
+      function Saturate (X : F64) return Component_Type is
+         D : Component_Type;
+
+      begin
+         --  Saturation, as defined in
+         --  [PIM-4.1 Vector Status and Control Register]
+
+         D := Component_Type (F64'Max
+                              (F64 (Component_Type'First),
+                               F64'Min
+                               (F64 (Component_Type'Last),
+                                X)));
+
+         if F64 (D) /= X then
+            VSCR := Write_Bit (VSCR, SAT_POS, 1);
+         end if;
+
+         return D;
+      end Saturate;
+
+      ----------
+      -- Bits --
+      ----------
+
+      function Bits
+        (X    : Component_Type;
+         Low  : Natural;
+         High : Natural) return Component_Type
+      is
+         Mask : Component_Type := 0;
+
+         --  The Altivec ABI uses a big endian bit ordering, and we are
+         --  using little endian bit ordering for extracting bits:
+
+         Low_LE  : constant Natural := Component_Type'Size - 1 - High;
+         High_LE : constant Natural := Component_Type'Size - 1 - Low;
+
+      begin
+         pragma Assert (Low <= Component_Type'Size);
+         pragma Assert (High <= Component_Type'Size);
+
+         for J in Low_LE .. High_LE loop
+            Mask := Mask or 2 ** J;
+         end loop;
+
+         return (X and Mask) / 2 ** Low_LE;
+      end Bits;
+
+      ---------------
+      -- Write_Bit --
+      ---------------
+
+      function Write_Bit
+        (X     : Component_Type;
+         Where : Natural;
+         Value : Unsigned_1) return Component_Type
+      is
+         Result   : Component_Type := 0;
+
+         --  The Altivec ABI uses a big endian bit ordering, and we are
+         --  using little endian bit ordering for extracting bits:
+
+         Where_LE : constant Natural := Component_Type'Size - 1 - Where;
+
+      begin
+         pragma Assert (Where < Component_Type'Size);
+
+         case Value is
+            when 1 =>
+               Result := X or 2 ** Where_LE;
+            when 0 =>
+               Result := X and not (2 ** Where_LE);
+         end case;
+
+         return Result;
+      end Write_Bit;
+
+      -------------
+      -- vadduxm --
+      -------------
+
+      function vadduxm (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := A (J) + B (J);
+         end loop;
+
+         return D;
+      end vadduxm;
+
+      -------------
+      -- vadduxs --
+      -------------
+
+      function vadduxs (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := Saturate (UI64 (A (J)) + UI64 (B (J)));
+         end loop;
+
+         return D;
+      end vadduxs;
+
+      ------------
+      -- vavgux --
+      ------------
+
+      function vavgux (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := Component_Type ((UI64 (A (J)) + UI64 (B (J)) + 1) / 2);
+         end loop;
+
+         return D;
+      end vavgux;
+
+      --------------
+      -- vcmpequx --
+      --------------
+
+      function vcmpequx
+        (A : Varray_Type;
+         B : Varray_Type) return Varray_Type
+      is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            if A (J) = B (J) then
+               D (J) := Bool_True;
+            else
+               D (J) := Bool_False;
+            end if;
+         end loop;
+
+         return D;
+      end vcmpequx;
+
+      --------------
+      -- vcmpgtux --
+      --------------
+
+      function vcmpgtux
+        (A : Varray_Type;
+         B : Varray_Type) return Varray_Type
+      is
+         D : Varray_Type;
+      begin
+         for J in Varray_Type'Range loop
+            if A (J) > B (J) then
+               D (J) := Bool_True;
+            else
+               D (J) := Bool_False;
+            end if;
+         end loop;
+
+         return D;
+      end vcmpgtux;
+
+      ------------
+      -- vmaxux --
+      ------------
+
+      function vmaxux (A : Varray_Type;  B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            if A (J) > B (J) then
+               D (J) := A (J);
+            else
+               D (J) := B (J);
+            end if;
+         end loop;
+
+         return D;
+      end vmaxux;
+
+      ------------
+      -- vminux --
+      ------------
+
+      function vminux (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            if A (J) < B (J) then
+               D (J) := A (J);
+            else
+               D (J) := B (J);
+            end if;
+         end loop;
+
+         return D;
+      end vminux;
+
+      ----------
+      -- vrlx --
+      ----------
+
+      function vrlx
+        (A    : Varray_Type;
+         B    : Varray_Type;
+         ROTL : Bit_Operation) return Varray_Type
+      is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := ROTL (A (J), Natural (B (J)));
+         end loop;
+
+         return D;
+      end vrlx;
+
+      ----------
+      -- vsxx --
+      ----------
+
+      function vsxx
+        (A          : Varray_Type;
+         B          : Varray_Type;
+         Shift_Func : Bit_Operation) return Varray_Type
+      is
+         D : Varray_Type;
+         S : constant Component_Type :=
+               Component_Type (128 / Number_Of_Elements);
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := Shift_Func (A (J), Natural (B (J) mod S));
+         end loop;
+
+         return D;
+      end vsxx;
+
+      -------------
+      -- vsubuxm --
+      -------------
+
+      function vsubuxm (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := A (J) - B (J);
+         end loop;
+
+         return D;
+      end vsubuxm;
+
+      -------------
+      -- vsubuxs --
+      -------------
+
+      function vsubuxs (A : Varray_Type; B : Varray_Type) return Varray_Type is
+         D : Varray_Type;
+
+      begin
+         for J in Varray_Type'Range loop
+            D (J) := Saturate (SI64 (A (J)) - SI64 (B (J)));
+         end loop;
+
+         return D;
+      end vsubuxs;
+
+      ---------------
+      -- Check_CR6 --
+      ---------------
+
+      function Check_CR6 (A : c_int; D : Varray_Type) return c_int is
+         All_Element : Boolean := True;
+         Any_Element : Boolean := False;
+
+      begin
+         for J in Varray_Type'Range loop
+            All_Element := All_Element and (D (J) = Bool_True);
+            Any_Element := Any_Element or  (D (J) = Bool_True);
+         end loop;
+
+         if A = CR6_LT then
+            if All_Element then
+               return 1;
+            else
+               return 0;
+            end if;
+
+         elsif A = CR6_EQ then
+            if not Any_Element then
+               return 1;
+            else
+               return 0;
+            end if;
+
+         elsif A = CR6_EQ_REV then
+            if Any_Element then
+               return 1;
+            else
+               return 0;
+            end if;
+
+         elsif A = CR6_LT_REV then
+            if not All_Element then
+               return 1;
+            else
+               return 0;
+            end if;
+         end if;
+
+         return 0;
+      end Check_CR6;
+
+   end Unsigned_Operations;
+
+   --------------------------------------
+   -- Signed_Merging_Operations (spec) --
+   --------------------------------------
+
+   generic
+      type Component_Type is range <>;
+      type Index_Type is range <>;
+      type Varray_Type is array (Index_Type) of Component_Type;
+      type Double_Component_Type is range <>;
+      type Double_Index_Type is range <>;
+      type Double_Varray_Type is array (Double_Index_Type)
+        of Double_Component_Type;
+
+   package Signed_Merging_Operations is
+
+      pragma Assert (Integer (Varray_Type'First)
+                     = Integer (Double_Varray_Type'First));
+      pragma Assert (Varray_Type'Length = 2 * Double_Varray_Type'Length);
+      pragma Assert (2 * Component_Type'Size = Double_Component_Type'Size);
+
+      function Saturate
+        (X : Double_Component_Type) return Component_Type;
+
+      function vmulxsx
+        (Use_Even_Components : Boolean;
+         A                   : Varray_Type;
+         B                   : Varray_Type) return Double_Varray_Type;
+
+      function vpksxss
+        (A : Double_Varray_Type;
+         B : Double_Varray_Type) return Varray_Type;
+      pragma Convention (LL_Altivec, vpksxss);
+
+      function vupkxsx
+        (A      : Varray_Type;
+         Offset : Natural) return Double_Varray_Type;
+
+   end Signed_Merging_Operations;
+
+   --------------------------------------
+   -- Signed_Merging_Operations (body) --
+   --------------------------------------
+
+   package body Signed_Merging_Operations is
+
+      --------------
+      -- Saturate --
+      --------------
+
+      function Saturate
+        (X : Double_Component_Type) return Component_Type
+      is
+         D : Component_Type;
+
+      begin
+         --  Saturation, as defined in
+         --  [PIM-4.1 Vector Status and Control Register]
+
+         D := Component_Type (Double_Component_Type'Max
+                              (Double_Component_Type (Component_Type'First),
+                               Double_Component_Type'Min
+                               (Double_Component_Type (Component_Type'Last),
+                                X)));
+
+         if Double_Component_Type (D) /= X then
+            VSCR := Write_Bit (VSCR, SAT_POS, 1);
+         end if;
+
+         return D;
+      end Saturate;
+
+      -------------
+      -- vmulsxs --
+      -------------
+
+      function vmulxsx
+        (Use_Even_Components : Boolean;
+         A                   : Varray_Type;
+         B                   : Varray_Type) return Double_Varray_Type
+      is
+         Double_Offset : Double_Index_Type;
+         Offset        : Index_Type;
+         D             : Double_Varray_Type;
+         N             : constant Integer :=
+                           Integer (Double_Index_Type'Last)
+                           - Integer (Double_Index_Type'First) + 1;
+
+      begin
+
+         for J in 0 .. N - 1 loop
+            if Use_Even_Components then
+               Offset := Index_Type (2 * J + Integer (Index_Type'First));
+            else
+               Offset := Index_Type (2 * J + 1 + Integer (Index_Type'First));
+            end if;
+
+            Double_Offset :=
+              Double_Index_Type (J + Integer (Double_Index_Type'First));
+            D (Double_Offset) :=
+              Double_Component_Type (A (Offset))
+              * Double_Component_Type (B (Offset));
+         end loop;
+
+         return D;
+      end vmulxsx;
+
+      -------------
+      -- vpksxss --
+      -------------
+
+      function vpksxss
+        (A : Double_Varray_Type;
+         B : Double_Varray_Type) return Varray_Type
+      is
+         N             : constant Index_Type :=
+                           Index_Type (Double_Index_Type'Last);
+         D             : Varray_Type;
+         Offset        : Index_Type;
+         Double_Offset : Double_Index_Type;
+
+      begin
+         for J in 0 .. N - 1 loop
+            Offset := Index_Type (Integer (J) + Integer (Index_Type'First));
+            Double_Offset :=
+              Double_Index_Type (Integer (J)
+                                 + Integer (Double_Index_Type'First));
+            D (Offset) := Saturate (A (Double_Offset));
+            D (Offset + N) := Saturate (B (Double_Offset));
+         end loop;
+
+         return D;
+      end vpksxss;
+
+      -------------
+      -- vupkxsx --
+      -------------
+
+      function vupkxsx
+        (A      : Varray_Type;
+         Offset : Natural) return Double_Varray_Type
+      is
+         K : Index_Type;
+         D : Double_Varray_Type;
+
+      begin
+         for J in Double_Varray_Type'Range loop
+            K := Index_Type (Integer (J)
+                             - Integer (Double_Index_Type'First)
+                             + Integer (Index_Type'First)
+                             + Offset);
+            D (J) := Double_Component_Type (A (K));
+         end loop;
+
+         return D;
+      end vupkxsx;
+
+   end Signed_Merging_Operations;
+
+   ----------------------------------------
+   -- Unsigned_Merging_Operations (spec) --
+   ----------------------------------------
+
+   generic
+      type Component_Type is mod <>;
+      type Index_Type is range <>;
+      type Varray_Type is array (Index_Type) of Component_Type;
+      type Double_Component_Type is mod <>;
+      type Double_Index_Type is range <>;
+      type Double_Varray_Type is array (Double_Index_Type)
+        of Double_Component_Type;
+
+   package Unsigned_Merging_Operations is
+
+      pragma Assert (Integer (Varray_Type'First)
+                     = Integer (Double_Varray_Type'First));
+      pragma Assert (Varray_Type'Length = 2 * Double_Varray_Type'Length);
+      pragma Assert (2 * Component_Type'Size = Double_Component_Type'Size);
+
+      function UI_To_UI_Mod
+        (X : Double_Component_Type;
+         Y : Natural) return Component_Type;
+
+      function Saturate (X : Double_Component_Type) return Component_Type;
+
+      function vmulxux
+        (Use_Even_Components : Boolean;
+         A                   : Varray_Type;
+         B                   : Varray_Type) return Double_Varray_Type;
+
+      function vpkuxum
+        (A : Double_Varray_Type;
+         B : Double_Varray_Type) return Varray_Type;
+
+      function vpkuxus
+        (A : Double_Varray_Type;
+         B : Double_Varray_Type) return Varray_Type;
+
+   end Unsigned_Merging_Operations;
+
+   ----------------------------------------
+   -- Unsigned_Merging_Operations (body) --
+   ----------------------------------------
+
+   package body Unsigned_Merging_Operations is
+
+      ------------------
+      -- UI_To_UI_Mod --
+      ------------------
+
+      function UI_To_UI_Mod
+        (X : Double_Component_Type;
+         Y : Natural) return Component_Type is
+         Z : Component_Type;
+      begin
+         Z := Component_Type (X mod 2 ** Y);
+         return Z;
+      end UI_To_UI_Mod;
+
+      --------------
+      -- Saturate --
+      --------------
+
+      function Saturate (X : Double_Component_Type) return Component_Type is
+         D : Component_Type;
+
+      begin
+         --  Saturation, as defined in
+         --  [PIM-4.1 Vector Status and Control Register]
+
+         D := Component_Type (Double_Component_Type'Max
+                              (Double_Component_Type (Component_Type'First),
+                               Double_Component_Type'Min
+                               (Double_Component_Type (Component_Type'Last),
+                                X)));
+
+         if Double_Component_Type (D) /= X then
+            VSCR := Write_Bit (VSCR, SAT_POS, 1);
+         end if;
+
+         return D;
+      end Saturate;
+
+      -------------
+      -- vmulxux --
+      -------------
+
+      function vmulxux
+        (Use_Even_Components : Boolean;
+         A                   : Varray_Type;
+         B                   : Varray_Type) return Double_Varray_Type
+      is
+         Double_Offset : Double_Index_Type;
+         Offset        : Index_Type;
+         D             : Double_Varray_Type;
+         N             : constant Integer :=
+                           Integer (Double_Index_Type'Last)
+                           - Integer (Double_Index_Type'First) + 1;
+
+      begin
+         for J in 0 .. N - 1 loop
+            if Use_Even_Components then
+               Offset := Index_Type (2 * J + Integer (Index_Type'First));
+            else
+               Offset := Index_Type (2 * J + 1 + Integer (Index_Type'First));
+            end if;
+
+            Double_Offset :=
+              Double_Index_Type (J + Integer (Double_Index_Type'First));
+            D (Double_Offset) :=
+              Double_Component_Type (A (Offset))
+              * Double_Component_Type (B (Offset));
+         end loop;
+
+         return D;
+      end vmulxux;
+
+      -------------
+      -- vpkuxum --
+      -------------
+
+      function vpkuxum
+        (A : Double_Varray_Type;
+         B : Double_Varray_Type) return Varray_Type
+      is
+         S             : constant Natural :=
+                           Double_Component_Type'Size / 2;
+         N             : constant Index_Type :=
+                           Index_Type (Double_Index_Type'Last);
+         D             : Varray_Type;
+         Offset        : Index_Type;
+         Double_Offset : Double_Index_Type;
+
+      begin
+         for J in 0 .. N - 1 loop
+            Offset := Index_Type (Integer (J) + Integer (Index_Type'First));
+            Double_Offset :=
+              Double_Index_Type (Integer (J)
+                                 + Integer (Double_Index_Type'First));
+            D (Offset) := UI_To_UI_Mod (A (Double_Offset), S);
+            D (Offset + N) := UI_To_UI_Mod (B (Double_Offset), S);
+         end loop;
+
+         return D;
+      end vpkuxum;
+
+      -------------
+      -- vpkuxus --
+      -------------
+
+      function vpkuxus
+        (A : Double_Varray_Type;
+         B : Double_Varray_Type) return Varray_Type
+      is
+         N             : constant Index_Type :=
+                           Index_Type (Double_Index_Type'Last);
+         D             : Varray_Type;
+         Offset        : Index_Type;
+         Double_Offset : Double_Index_Type;
+
+      begin
+         for J in 0 .. N - 1 loop
+            Offset := Index_Type (Integer (J) + Integer (Index_Type'First));
+            Double_Offset :=
+              Double_Index_Type (Integer (J)
+                                 + Integer (Double_Index_Type'First));
+            D (Offset) := Saturate (A (Double_Offset));
+            D (Offset + N) := Saturate (B (Double_Offset));
+         end loop;
+
+         return D;
+      end vpkuxus;
+
+   end Unsigned_Merging_Operations;
+
+   package LL_VSC_Operations is
+     new Signed_Operations (signed_char,
+                            Vchar_Range,
+                            Varray_signed_char);
+
+   package LL_VSS_Operations is
+     new Signed_Operations (signed_short,
+                            Vshort_Range,
+                            Varray_signed_short);
+
+   package LL_VSI_Operations is
+     new Signed_Operations (signed_int,
+                            Vint_Range,
+                            Varray_signed_int);
+
+   package LL_VUC_Operations is
+     new Unsigned_Operations (unsigned_char,
+                              Vchar_Range,
+                              Varray_unsigned_char);
+
+   package LL_VUS_Operations is
+     new Unsigned_Operations (unsigned_short,
+                              Vshort_Range,
+                              Varray_unsigned_short);
+
+   package LL_VUI_Operations is
+     new Unsigned_Operations (unsigned_int,
+                              Vint_Range,
+                              Varray_unsigned_int);
+
+   package LL_VSC_LL_VSS_Operations is
+     new Signed_Merging_Operations (signed_char,
+                                    Vchar_Range,
+                                    Varray_signed_char,
+                                    signed_short,
+                                    Vshort_Range,
+                                    Varray_signed_short);
+
+   package LL_VSS_LL_VSI_Operations is
+     new Signed_Merging_Operations (signed_short,
+                                    Vshort_Range,
+                                    Varray_signed_short,
+                                    signed_int,
+                                    Vint_Range,
+                                    Varray_signed_int);
+
+   package LL_VUC_LL_VUS_Operations is
+     new Unsigned_Merging_Operations (unsigned_char,
+                                      Vchar_Range,
+                                      Varray_unsigned_char,
+                                      unsigned_short,
+                                      Vshort_Range,
+                                      Varray_unsigned_short);
+
+   package LL_VUS_LL_VUI_Operations is
+     new Unsigned_Merging_Operations (unsigned_short,
+                                      Vshort_Range,
+                                      Varray_unsigned_short,
+                                      unsigned_int,
+                                      Vint_Range,
+                                      Varray_unsigned_int);
+
+   ----------
+   -- Bits --
+   ----------
+
+   function Bits
+     (X    : unsigned_int;
+      Low  : Natural;
+      High : Natural) return unsigned_int renames LL_VUI_Operations.Bits;
+
+   function Bits
+     (X    : unsigned_short;
+      Low  : Natural;
+      High : Natural) return unsigned_short renames LL_VUS_Operations.Bits;
+
+   function Bits
+     (X    : unsigned_char;
+      Low  : Natural;
+      High : Natural) return unsigned_char renames LL_VUC_Operations.Bits;
+
+   ---------------
+   -- Write_Bit --
+   ---------------
+
+   function Write_Bit
+     (X     : unsigned_int;
+      Where : Natural;
+      Value : Unsigned_1) return unsigned_int
+     renames LL_VUI_Operations.Write_Bit;
+
+   function Write_Bit
+     (X     : unsigned_short;
+      Where : Natural;
+      Value : Unsigned_1) return unsigned_short
+     renames LL_VUS_Operations.Write_Bit;
+
+   function Write_Bit
+     (X     : unsigned_char;
+      Where : Natural;
+      Value : Unsigned_1) return unsigned_char
+     renames LL_VUC_Operations.Write_Bit;
+
+   -----------------
+   -- Bound_Align --
+   -----------------
+
+   function Bound_Align
+     (X : Integer_Address;
+      Y : Integer_Address) return Integer_Address
+   is
+      D : Integer_Address;
+   begin
+      D := X - X mod Y;
+      return D;
+   end Bound_Align;
+
+   -----------------
+   -- NJ_Truncate --
+   -----------------
+
+   function NJ_Truncate (X : C_float) return C_float is
+      D : C_float;
+
+   begin
+      if (Bits (VSCR, NJ_POS, NJ_POS) = 1)
+        and then abs (X) < 2.0 ** (-126)
+      then
+         if X < 0.0 then
+            D := -0.0;
+         else
+            D := 0.0;
+         end if;
+      else
+         D := X;
+      end if;
+
+      return D;
+   end NJ_Truncate;
+
+   -----------------------
+   -- Rnd_To_FP_Nearest --
+   -----------------------
+
+   function Rnd_To_FP_Nearest (X : F64) return C_float is
+   begin
+      return C_float (X);
+   end Rnd_To_FP_Nearest;
+
+   ---------------------
+   -- Rnd_To_FPI_Near --
+   ---------------------
+
+   function Rnd_To_FPI_Near (X : F64) return F64 is
+      Result  : F64;
+      Ceiling : F64;
+   begin
+      Result := F64 (SI64 (X));
+
+      if (F64'Ceiling (X) - X) = (X + 1.0 - F64'Ceiling (X)) then
+         --  Round to even
+         Ceiling := F64'Ceiling (X);
+         if Rnd_To_FPI_Trunc (Ceiling / 2.0) * 2.0 = Ceiling then
+            Result := Ceiling;
+         else
+            Result := Ceiling - 1.0;
+         end if;
+      end if;
+
+      return Result;
+   end Rnd_To_FPI_Near;
+
+   ----------------------
+   -- Rnd_To_FPI_Trunc --
+   ----------------------
+
+   function Rnd_To_FPI_Trunc (X : F64) return F64 is
+      Result : F64;
+
+   begin
+      Result := F64'Ceiling (X);
+
+      --  Rnd_To_FPI_Trunc rounds toward 0, 'Ceiling rounds toward
+      --  +Infinity
+
+      if X > 0.0
+        and then Result /= X
+      then
+         Result := Result - 1.0;
+      end if;
+
+      return Result;
+   end Rnd_To_FPI_Trunc;
+
+   ------------------
+   -- FP_Recip_Est --
+   ------------------
+
+   function FP_Recip_Est (X : C_float) return C_float is
+   begin
+      --  ???  [PIM-4.4 vec_re] "For result that are not +0, -0, +Inf,
+      --  -Inf, or QNaN, the estimate has a relative error no greater
+      --  than one part in 4096, that is:
+      --  Abs ((estimate - 1 / x) / (1 / x)) < = 1/4096"
+
+      return NJ_Truncate (1.0 / NJ_Truncate (X));
+   end FP_Recip_Est;
+
+   ----------
+   -- ROTL --
+   ----------
+
+   function ROTL
+     (Value  : unsigned_char;
+      Amount : Natural) return unsigned_char
+   is
+      Result : Unsigned_8;
+   begin
+      Result := Rotate_Left (Unsigned_8 (Value), Amount);
+      return unsigned_char (Result);
+   end ROTL;
+
+   function ROTL
+     (Value  : unsigned_short;
+      Amount : Natural) return unsigned_short
+   is
+      Result : Unsigned_16;
+   begin
+      Result := Rotate_Left (Unsigned_16 (Value), Amount);
+      return unsigned_short (Result);
+   end ROTL;
+
+   function ROTL
+     (Value  : unsigned_int;
+      Amount : Natural) return unsigned_int
+   is
+      Result : Unsigned_32;
+   begin
+      Result := Rotate_Left (Unsigned_32 (Value), Amount);
+      return unsigned_int (Result);
+   end ROTL;
+
+   --------------------
+   -- Recip_SQRT_Est --
+   --------------------
+
+   function Recip_SQRT_Est (X : C_float) return C_float is
+      Result : C_float;
+
+   begin
+      --  ???
+      --  [PIM-4.4 vec_rsqrte] the estimate has a relative error in precision
+      --  no greater than one part in 4096, that is:
+      --  abs ((estimate - 1 / sqrt (x)) / (1 / sqrt (x)) <= 1 / 4096"
+
+      Result := 1.0 / NJ_Truncate (C_float_Operations.Sqrt (NJ_Truncate (X)));
+      return NJ_Truncate (Result);
+   end Recip_SQRT_Est;
+
+   ----------------
+   -- Shift_Left --
+   ----------------
+
+   function Shift_Left
+     (Value  : unsigned_char;
+      Amount : Natural) return unsigned_char
+   is
+      Result : Unsigned_8;
+   begin
+      Result := Shift_Left (Unsigned_8 (Value), Amount);
+      return unsigned_char (Result);
+   end Shift_Left;
+
+   function Shift_Left
+     (Value  : unsigned_short;
+      Amount : Natural) return unsigned_short
+   is
+      Result : Unsigned_16;
+   begin
+      Result := Shift_Left (Unsigned_16 (Value), Amount);
+      return unsigned_short (Result);
+   end Shift_Left;
+
+   function Shift_Left
+     (Value  : unsigned_int;
+      Amount : Natural) return unsigned_int
+   is
+      Result : Unsigned_32;
+   begin
+      Result := Shift_Left (Unsigned_32 (Value), Amount);
+      return unsigned_int (Result);
+   end Shift_Left;
+
+   -----------------
+   -- Shift_Right --
+   -----------------
+
+   function Shift_Right
+     (Value  : unsigned_char;
+      Amount : Natural) return unsigned_char
+   is
+      Result : Unsigned_8;
+   begin
+      Result := Shift_Right (Unsigned_8 (Value), Amount);
+      return unsigned_char (Result);
+   end Shift_Right;
+
+   function Shift_Right
+     (Value  : unsigned_short;
+      Amount : Natural) return unsigned_short
+   is
+      Result : Unsigned_16;
+   begin
+      Result := Shift_Right (Unsigned_16 (Value), Amount);
+      return unsigned_short (Result);
+   end Shift_Right;
+
+   function Shift_Right
+     (Value  : unsigned_int;
+      Amount : Natural) return unsigned_int
+   is
+      Result : Unsigned_32;
+   begin
+      Result := Shift_Right (Unsigned_32 (Value), Amount);
+      return unsigned_int (Result);
+   end Shift_Right;
+
+   -------------------
+   -- Shift_Right_A --
+   -------------------
+
+   generic
+      type Signed_Type is range <>;
+      type Unsigned_Type is mod <>;
+      with function Shift_Right (Value : Unsigned_Type; Amount : Natural)
+                                return Unsigned_Type;
+   function Shift_Right_Arithmetic
+     (Value  : Signed_Type;
+      Amount : Natural) return Signed_Type;
+
+   function Shift_Right_Arithmetic
+     (Value  : Signed_Type;
+      Amount : Natural) return Signed_Type
+   is
+   begin
+      if Value > 0 then
+         return Signed_Type (Shift_Right (Unsigned_Type (Value), Amount));
+      else
+         return -Signed_Type (Shift_Right (Unsigned_Type (-Value - 1), Amount)
+                              + 1);
+      end if;
+   end Shift_Right_Arithmetic;
+
+   function Shift_Right_A is new Shift_Right_Arithmetic (signed_int,
+                                                         Unsigned_32,
+                                                         Shift_Right);
+
+   function Shift_Right_A is new Shift_Right_Arithmetic (signed_short,
+                                                         Unsigned_16,
+                                                         Shift_Right);
+
+   function Shift_Right_A is new Shift_Right_Arithmetic (signed_char,
+                                                         Unsigned_8,
+                                                         Shift_Right);
+   --------------
+   -- To_Pixel --
+   --------------
+
+   function To_Pixel (Source : unsigned_short) return Pixel_16 is
+
+      --  This conversion should not depend on the host endianess;
+      --  therefore, we cannot use an unchecked conversion.
+
+      Target : Pixel_16;
+
+   begin
+      Target.T := Unsigned_1 (Bits (Source, 0, 0)   mod 2 ** 1);
+      Target.R := Unsigned_5 (Bits (Source, 1, 5)   mod 2 ** 5);
+      Target.G := Unsigned_5 (Bits (Source, 6, 10)  mod 2 ** 5);
+      Target.B := Unsigned_5 (Bits (Source, 11, 15) mod 2 ** 5);
+      return Target;
+   end To_Pixel;
+
+   function To_Pixel (Source : unsigned_int) return Pixel_32 is
+
+      --  This conversion should not depend on the host endianess;
+      --  therefore, we cannot use an unchecked conversion.
+
+      Target : Pixel_32;
+
+   begin
+      Target.T := unsigned_char (Bits (Source, 0, 7));
+      Target.R := unsigned_char (Bits (Source, 8, 15));
+      Target.G := unsigned_char (Bits (Source, 16, 23));
+      Target.B := unsigned_char (Bits (Source, 24, 31));
+      return Target;
+   end To_Pixel;
+
+   ---------------------
+   -- To_unsigned_int --
+   ---------------------
+
+   function To_unsigned_int (Source : Pixel_32) return unsigned_int is
+
+      --  This conversion should not depend on the host endianess;
+      --  therefore, we cannot use an unchecked conversion.
+      --  It should also be the same result, value-wise, on two hosts
+      --  with the same endianess.
+
+      Target : unsigned_int := 0;
+
+   begin
+      --  In big endian bit ordering, Pixel_32 looks like:
+      --  -------------------------------------
+      --  |   T    |   R    |   G    |    B   |
+      --  -------------------------------------
+      --  0 (MSB)  7        15       23       32
+      --
+      --  Sizes of the components: (8/8/8/8)
+      --
+      Target := Target or unsigned_int (Source.T);
+      Target := Shift_Left (Target, 8);
+      Target := Target or unsigned_int (Source.R);
+      Target := Shift_Left (Target, 8);
+      Target := Target or unsigned_int (Source.G);
+      Target := Shift_Left (Target, 8);
+      Target := Target or unsigned_int (Source.B);
+      return Target;
+   end To_unsigned_int;
+
+   -----------------------
+   -- To_unsigned_short --
+   -----------------------
+
+   function To_unsigned_short (Source : Pixel_16) return unsigned_short is
+
+      --  This conversion should not depend on the host endianess;
+      --  therefore, we cannot use an unchecked conversion.
+      --  It should also be the same result, value-wise, on two hosts
+      --  with the same endianess.
+
+      Target : unsigned_short := 0;
+
+   begin
+      --  In big endian bit ordering, Pixel_16 looks like:
+      --  -------------------------------------
+      --  |   T    |   R    |   G    |    B   |
+      --  -------------------------------------
+      --  0 (MSB)  1        5        11       15
+      --
+      --  Sizes of the components: (1/5/5/5)
+      --
+      Target := Target or unsigned_short (Source.T);
+      Target := Shift_Left (Target, 5);
+      Target := Target or unsigned_short (Source.R);
+      Target := Shift_Left (Target, 5);
+      Target := Target or unsigned_short (Source.G);
+      Target := Shift_Left (Target, 5);
+      Target := Target or unsigned_short (Source.B);
+      return Target;
+   end To_unsigned_short;
+
+   ---------------
+   -- abs_v16qi --
+   ---------------
+
+   function abs_v16qi (A : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+   begin
+      return To_Vector ((Values =>
+                           LL_VSC_Operations.abs_vxi (VA.Values)));
+   end abs_v16qi;
+
+   --------------
+   -- abs_v8hi --
+   --------------
+
+   function abs_v8hi (A : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+   begin
+      return To_Vector ((Values =>
+                           LL_VSS_Operations.abs_vxi (VA.Values)));
+   end abs_v8hi;
+
+   --------------
+   -- abs_v4si --
+   --------------
+
+   function abs_v4si (A : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+   begin
+      return To_Vector ((Values =>
+                           LL_VSI_Operations.abs_vxi (VA.Values)));
+   end abs_v4si;
+
+   --------------
+   -- abs_v4sf --
+   --------------
+
+   function abs_v4sf (A : LL_VF) return LL_VF is
+      D  : Varray_float;
+      VA : constant VF_View := To_View (A);
+
+   begin
+      for J in Varray_float'Range loop
+         D (J) := abs (VA.Values (J));
+      end loop;
+
+      return To_Vector ((Values => D));
+   end abs_v4sf;
+
+   ----------------
+   -- abss_v16qi --
+   ----------------
+
+   function abss_v16qi (A : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+   begin
+      return To_Vector ((Values =>
+                           LL_VSC_Operations.abss_vxi (VA.Values)));
+   end abss_v16qi;
+
+   ---------------
+   -- abss_v8hi --
+   ---------------
+
+   function abss_v8hi (A : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+   begin
+      return To_Vector ((Values =>
+                           LL_VSS_Operations.abss_vxi (VA.Values)));
+   end abss_v8hi;
+
+   ---------------
+   -- abss_v4si --
+   ---------------
+
+   function abss_v4si (A : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+   begin
+      return To_Vector ((Values =>
+                           LL_VSI_Operations.abss_vxi (VA.Values)));
+   end abss_v4si;
+
+   -------------
+   -- vaddubm --
+   -------------
+
+   function vaddubm (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      UC : constant GNAT.Altivec.Low_Level_Vectors.LL_VUC :=
+             To_LL_VUC (A);
+      VA : constant VUC_View :=
+             To_View (UC);
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : Varray_unsigned_char;
+
+   begin
+      D := LL_VUC_Operations.vadduxm (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (VUC_View'(Values => D)));
+   end vaddubm;
+
+   -------------
+   -- vadduhm --
+   -------------
+
+   function vadduhm (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : Varray_unsigned_short;
+
+   begin
+      D := LL_VUS_Operations.vadduxm (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (VUS_View'(Values => D)));
+   end vadduhm;
+
+   -------------
+   -- vadduwm --
+   -------------
+
+   function vadduwm (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : Varray_unsigned_int;
+
+   begin
+      D := LL_VUI_Operations.vadduxm (VA.Values, VB.Values);
+      return To_LL_VSI (To_Vector (VUI_View'(Values => D)));
+   end vadduwm;
+
+   ------------
+   -- vaddfp --
+   ------------
+
+   function vaddfp (A : LL_VF; B : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      VB : constant VF_View := To_View (B);
+      D  : Varray_float;
+
+   begin
+      for J in Varray_float'Range loop
+         D (J) := NJ_Truncate (NJ_Truncate (VA.Values (J))
+                               + NJ_Truncate (VB.Values (J)));
+      end loop;
+
+      return To_Vector (VF_View'(Values => D));
+   end vaddfp;
+
+   -------------
+   -- vaddcuw --
+   -------------
+
+   function vaddcuw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      Addition_Result : UI64;
+      D               : VUI_View;
+      VA              : constant VUI_View := To_View (To_LL_VUI (A));
+      VB              : constant VUI_View := To_View (To_LL_VUI (B));
+
+   begin
+      for J in Varray_unsigned_int'Range loop
+         Addition_Result :=
+           UI64 (VA.Values (J)) + UI64 (VB.Values (J));
+
+         if Addition_Result > UI64 (unsigned_int'Last) then
+            D.Values (J) := 1;
+         else
+            D.Values (J) := 0;
+         end if;
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vaddcuw;
+
+   -------------
+   -- vaddubs --
+   -------------
+
+   function vaddubs (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+
+   begin
+      return To_LL_VSC (To_Vector
+                        (VUC_View'(Values =>
+                                     (LL_VUC_Operations.vadduxs
+                                      (VA.Values,
+                                       VB.Values)))));
+   end vaddubs;
+
+   -------------
+   -- vaddsbs --
+   -------------
+
+   function vaddsbs (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSC_View;
+
+   begin
+      D.Values := LL_VSC_Operations.vaddsxs (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vaddsbs;
+
+   -------------
+   -- vadduhs --
+   -------------
+
+   function vadduhs (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+
+   begin
+      D.Values := LL_VUS_Operations.vadduxs (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vadduhs;
+
+   -------------
+   -- vaddshs --
+   -------------
+
+   function vaddshs (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSS_View;
+
+   begin
+      D.Values := LL_VSS_Operations.vaddsxs (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vaddshs;
+
+   -------------
+   -- vadduws --
+   -------------
+
+   function vadduws (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+
+   begin
+      D.Values := LL_VUI_Operations.vadduxs (VA.Values, VB.Values);
+      return To_LL_VSI (To_Vector (D));
+   end vadduws;
+
+   -------------
+   -- vaddsws --
+   -------------
+
+   function vaddsws (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VSI_View;
+
+   begin
+      D.Values := LL_VSI_Operations.vaddsxs (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vaddsws;
+
+   ----------
+   -- vand --
+   ----------
+
+   function vand (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+
+   begin
+      for J in Varray_unsigned_int'Range loop
+         D.Values (J) := VA.Values (J) and VB.Values (J);
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vand;
+
+   -----------
+   -- vandc --
+   -----------
+
+   function vandc (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+
+   begin
+      for J in Varray_unsigned_int'Range loop
+         D.Values (J) := VA.Values (J) and not VB.Values (J);
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vandc;
+
+   ------------
+   -- vavgub --
+   ------------
+
+   function vavgub (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+
+   begin
+      D.Values := LL_VUC_Operations.vavgux (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (D));
+   end vavgub;
+
+   ------------
+   -- vavgsb --
+   ------------
+
+   function vavgsb (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSC_View;
+
+   begin
+      D.Values := LL_VSC_Operations.vavgsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vavgsb;
+
+   ------------
+   -- vavguh --
+   ------------
+
+   function vavguh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+
+   begin
+      D.Values := LL_VUS_Operations.vavgux (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vavguh;
+
+   ------------
+   -- vavgsh --
+   ------------
+
+   function vavgsh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSS_View;
+
+   begin
+      D.Values := LL_VSS_Operations.vavgsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vavgsh;
+
+   ------------
+   -- vavguw --
+   ------------
+
+   function vavguw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+
+   begin
+      D.Values := LL_VUI_Operations.vavgux (VA.Values, VB.Values);
+      return To_LL_VSI (To_Vector (D));
+   end vavguw;
+
+   ------------
+   -- vavgsw --
+   ------------
+
+   function vavgsw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VSI_View;
+
+   begin
+      D.Values := LL_VSI_Operations.vavgsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vavgsw;
+
+   -----------
+   -- vrfip --
+   -----------
+
+   function vrfip (A : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      D  : VF_View;
+
+   begin
+      for J in Varray_float'Range loop
+
+         --  If A (J) is infinite, D (J) should be infinite; With
+         --  IEEE floating points, we can use 'Ceiling for that purpose.
+
+         D.Values (J) := C_float'Ceiling (NJ_Truncate (VA.Values (J)));
+
+      end loop;
+
+      return To_Vector (D);
+   end vrfip;
+
+   -------------
+   -- vcmpbfp --
+   -------------
+
+   function vcmpbfp (A : LL_VF; B : LL_VF) return LL_VSI is
+      VA   : constant VF_View := To_View (A);
+      VB   : constant VF_View := To_View (B);
+      D    : VUI_View;
+      K    : Vint_Range;
+
+   begin
+      for J in Varray_float'Range loop
+         K := Vint_Range (J);
+         D.Values (K) := 0;
+
+         if NJ_Truncate (VB.Values (J)) < 0.0 then
+
+            --  [PIM-4.4 vec_cmpb] "If any single-precision floating-point
+            --  word element in B is negative; the corresponding element in A
+            --  is out of bounds.
+
+            D.Values (K) := Write_Bit (D.Values (K), 0, 1);
+            D.Values (K) := Write_Bit (D.Values (K), 1, 1);
+
+         else
+            if NJ_Truncate (VA.Values (J))
+              <= NJ_Truncate (VB.Values (J)) then
+               D.Values (K) := Write_Bit (D.Values (K), 0, 0);
+            else
+               D.Values (K) := Write_Bit (D.Values (K), 0, 1);
+            end if;
+
+            if NJ_Truncate (VA.Values (J))
+              >= -NJ_Truncate (VB.Values (J)) then
+               D.Values (K) := Write_Bit (D.Values (K), 1, 0);
+            else
+               D.Values (K) := Write_Bit (D.Values (K), 1, 1);
+            end if;
+         end if;
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vcmpbfp;
+
+   --------------
+   -- vcmpequb --
+   --------------
+
+   function vcmpequb (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+
+   begin
+      D.Values := LL_VUC_Operations.vcmpequx (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (D));
+   end vcmpequb;
+
+   --------------
+   -- vcmpequh --
+   --------------
+
+   function vcmpequh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUS_Operations.vcmpequx (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vcmpequh;
+
+   --------------
+   -- vcmpequw --
+   --------------
+
+   function vcmpequw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+   begin
+      D.Values := LL_VUI_Operations.vcmpequx (VA.Values, VB.Values);
+      return To_LL_VSI (To_Vector (D));
+   end vcmpequw;
+
+   --------------
+   -- vcmpeqfp --
+   --------------
+
+   function vcmpeqfp (A : LL_VF; B : LL_VF) return LL_VSI is
+      VA : constant VF_View := To_View (A);
+      VB : constant VF_View := To_View (B);
+      D  : VUI_View;
+      K  : Vint_Range;
+
+   begin
+      for J in Varray_float'Range loop
+         K := Vint_Range (J);
+
+         if VA.Values (J) = VB.Values (J) then
+            D.Values (K) := unsigned_int'Last;
+         else
+            D.Values (K) := 0;
+         end if;
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vcmpeqfp;
+
+   --------------
+   -- vcmpgefp --
+   --------------
+
+   function vcmpgefp (A : LL_VF; B : LL_VF) return LL_VSI is
+      VA : constant VF_View := To_View (A);
+      VB : constant VF_View := To_View (B);
+      D : VSI_View;
+      K : Vint_Range;
+
+   begin
+      for J in Varray_float'Range loop
+         K := Vint_Range (J);
+
+         if VA.Values (J) >= VB.Values (J) then
+            D.Values (K) := Signed_Bool_True;
+         else
+            D.Values (K) := Signed_Bool_False;
+         end if;
+      end loop;
+
+      return To_Vector (D);
+   end vcmpgefp;
+
+   --------------
+   -- vcmpgtub --
+   --------------
+
+   function vcmpgtub (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+   begin
+      D.Values := LL_VUC_Operations.vcmpgtux (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (D));
+   end vcmpgtub;
+
+   --------------
+   -- vcmpgtsb --
+   --------------
+
+   function vcmpgtsb (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSC_View;
+   begin
+      D.Values := LL_VSC_Operations.vcmpgtsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vcmpgtsb;
+
+   --------------
+   -- vcmpgtuh --
+   --------------
+
+   function vcmpgtuh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUS_Operations.vcmpgtux (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vcmpgtuh;
+
+   --------------
+   -- vcmpgtsh --
+   --------------
+
+   function vcmpgtsh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSS_Operations.vcmpgtsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vcmpgtsh;
+
+   --------------
+   -- vcmpgtuw --
+   --------------
+
+   function vcmpgtuw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+   begin
+      D.Values := LL_VUI_Operations.vcmpgtux (VA.Values, VB.Values);
+      return To_LL_VSI (To_Vector (D));
+   end vcmpgtuw;
+
+   --------------
+   -- vcmpgtsw --
+   --------------
+
+   function vcmpgtsw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VSI_View;
+   begin
+      D.Values := LL_VSI_Operations.vcmpgtsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vcmpgtsw;
+
+   --------------
+   -- vcmpgtfp --
+   --------------
+
+   function vcmpgtfp (A : LL_VF; B : LL_VF) return LL_VSI is
+      VA : constant VF_View := To_View (A);
+      VB : constant VF_View := To_View (B);
+      D  : VSI_View;
+      K  : Vint_Range;
+
+   begin
+      for J in Varray_float'Range loop
+         K := Vint_Range (J);
+
+         if NJ_Truncate (VA.Values (J))
+           > NJ_Truncate (VB.Values (J)) then
+            D.Values (K) := Signed_Bool_True;
+         else
+            D.Values (K) := Signed_Bool_False;
+         end if;
+      end loop;
+
+      return To_Vector (D);
+   end vcmpgtfp;
+
+   -----------
+   -- vcfux --
+   -----------
+
+   function vcfux (A : LL_VSI; B : c_int) return LL_VF is
+      D  : VF_View;
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      K  : Vfloat_Range;
+
+   begin
+      for J in Varray_signed_int'Range loop
+         K := Vfloat_Range (J);
+
+         --  Note: The conversion to Integer is safe, as Integers are required
+         --  to include the range -2 ** 15 + 1 .. 2 ** 15 + 1 and therefore
+         --  include the range of B (should be 0 .. 255).
+
+         D.Values (K) :=
+           C_float (VA.Values (J)) / (2.0 ** Integer (B));
+      end loop;
+
+      return To_Vector (D);
+   end vcfux;
+
+   -----------
+   -- vcfsx --
+   -----------
+
+   function vcfsx (A : LL_VSI; B : c_int) return LL_VF is
+      VA : constant VSI_View := To_View (A);
+      D  : VF_View;
+      K  : Vfloat_Range;
+
+   begin
+      for J in Varray_signed_int'Range loop
+         K := Vfloat_Range (J);
+         D.Values (K) := C_float (VA.Values (J))
+           / (2.0 ** Integer (B));
+      end loop;
+
+      return To_Vector (D);
+   end vcfsx;
+
+   ------------
+   -- vctsxs --
+   ------------
+
+   function vctsxs (A : LL_VF; B : c_int) return LL_VSI is
+      VA : constant VF_View := To_View (A);
+      D  : VSI_View;
+      K  : Vfloat_Range;
+
+   begin
+      for J in Varray_signed_int'Range loop
+         K := Vfloat_Range (J);
+         D.Values (J) :=
+           LL_VSI_Operations.Saturate
+           (F64 (NJ_Truncate (VA.Values (K)))
+            * F64 (2.0 ** Integer (B)));
+      end loop;
+
+      return To_Vector (D);
+   end vctsxs;
+
+   ------------
+   -- vctuxs --
+   ------------
+
+   function vctuxs (A : LL_VF; B : c_int) return LL_VSI is
+      VA : constant VF_View := To_View (A);
+      D  : VUI_View;
+      K  : Vfloat_Range;
+
+   begin
+      for J in Varray_unsigned_int'Range loop
+         K := Vfloat_Range (J);
+         D.Values (J) :=
+           LL_VUI_Operations.Saturate
+           (F64 (NJ_Truncate (VA.Values (K)))
+            * F64 (2.0 ** Integer (B)));
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vctuxs;
+
+   ---------
+   -- dss --
+   ---------
+
+   --  No-ops, as allowed by [PEM-5.2.1.1 Data Stream Touch (dst)]:
+
+   procedure dss (A : c_int) is
+      pragma Unreferenced (A);
+   begin
+      null;
+   end dss;
+
+   ------------
+   -- dssall --
+   ------------
+
+   --  No-ops, as allowed by [PEM-5.2.1.1 Data Stream Touch (dst)]:
+
+   procedure dssall is
+   begin
+      null;
+   end dssall;
+
+   ---------
+   -- dst --
+   ---------
+
+   --  No-ops, as allowed by [PEM-5.2.1.1 Data Stream Touch (dst)]:
+
+   procedure dst    (A : c_ptr; B : c_int; C : c_int) is
+      pragma Unreferenced (A);
+      pragma Unreferenced (B);
+      pragma Unreferenced (C);
+   begin
+      null;
+   end dst;
+
+   -----------
+   -- dstst --
+   -----------
+
+   --  No-ops, as allowed by [PEM-5.2.1.1 Data Stream Touch (dst)]:
+
+   procedure dstst  (A : c_ptr; B : c_int; C : c_int) is
+      pragma Unreferenced (A);
+      pragma Unreferenced (B);
+      pragma Unreferenced (C);
+   begin
+      null;
+   end dstst;
+
+   ------------
+   -- dststt --
+   ------------
+
+   --  No-ops, as allowed by [PEM-5.2.1.1 Data Stream Touch (dst)]:
+
+   procedure dststt (A : c_ptr; B : c_int; C : c_int) is
+      pragma Unreferenced (A);
+      pragma Unreferenced (B);
+      pragma Unreferenced (C);
+   begin
+      null;
+   end dststt;
+
+   ----------
+   -- dstt --
+   ----------
+
+   --  No-ops, as allowed by [PEM-5.2.1.1 Data Stream Touch (dst)]:
+
+   procedure dstt   (A : c_ptr; B : c_int; C : c_int) is
+      pragma Unreferenced (A);
+      pragma Unreferenced (B);
+      pragma Unreferenced (C);
+   begin
+      null;
+   end dstt;
+
+   --------------
+   -- vexptefp --
+   --------------
+
+   function vexptefp (A : LL_VF) return LL_VF is
+      use C_float_Operations;
+
+      VA : constant VF_View := To_View (A);
+      D  : VF_View;
+
+   begin
+      for J in Varray_float'Range loop
+
+         --  ??? Check the precision of the operation.
+         --  As described in [PEM-6 vexptefp]:
+         --  If theorical_result is equal to 2 at the power of A (J) with
+         --  infinite precision, we should have:
+         --  abs ((D (J) - theorical_result) / theorical_result) <= 1/16
+
+         D.Values (J) := 2.0 ** NJ_Truncate (VA.Values (J));
+      end loop;
+
+      return To_Vector (D);
+   end vexptefp;
+
+   -----------
+   -- vrfim --
+   -----------
+
+   function vrfim (A : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      D  : VF_View;
+
+   begin
+      for J in Varray_float'Range loop
+
+         --  If A (J) is infinite, D (J) should be infinite; With
+         --  IEEE floating point, we can use 'Ceiling for that purpose.
+
+         D.Values (J) := C_float'Ceiling (NJ_Truncate (VA.Values (J)));
+
+         --  Vrfim rounds toward -Infinity, whereas 'Ceiling rounds toward
+         --  +Infinity:
+
+         if D.Values (J) /= VA.Values (J) then
+            D.Values (J) := D.Values (J) - 1.0;
+         end if;
+      end loop;
+
+      return To_Vector (D);
+   end vrfim;
+
+   ---------
+   -- lvx --
+   ---------
+
+   function lvx (A : c_long; B : c_ptr) return LL_VSI is
+      EA : Integer_Address;
+
+   begin
+      EA := Bound_Align (Integer_Address (A) + To_Integer (B), 16);
+
+      declare
+         D : LL_VSI;
+         for D'Address use To_Address (EA);
+      begin
+         return D;
+      end;
+   end lvx;
+
+   -----------
+   -- lvebx --
+   -----------
+
+   function lvebx (A : c_long; B : c_ptr) return LL_VSC is
+      D : VSC_View;
+   begin
+      D.Values := LL_VSC_Operations.lvexx (A, B);
+      return To_Vector (D);
+   end lvebx;
+
+   -----------
+   -- lvehx --
+   -----------
+
+   function lvehx (A : c_long; B : c_ptr) return LL_VSS is
+      D : VSS_View;
+   begin
+      D.Values := LL_VSS_Operations.lvexx (A, B);
+      return To_Vector (D);
+   end lvehx;
+
+   -----------
+   -- lvewx --
+   -----------
+
+   function lvewx (A : c_long; B : c_ptr) return LL_VSI is
+      D : VSI_View;
+   begin
+      D.Values := LL_VSI_Operations.lvexx (A, B);
+      return To_Vector (D);
+   end lvewx;
+
+   ----------
+   -- lvxl --
+   ----------
+
+   function lvxl  (A : c_long; B : c_ptr) return LL_VSI renames
+     lvx;
+
+   -------------
+   -- vlogefp --
+   -------------
+
+   function vlogefp (A : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      D  : VF_View;
+
+   begin
+      for J in Varray_float'Range loop
+
+         --  ??? Check the precision of the operation.
+         --  As described in [PEM-6 vlogefp]:
+         --  If theorical_result is equal to the log2 of A (J) with
+         --  infinite precision, we should have:
+         --  abs (D (J) - theorical_result) <= 1/32,
+         --  unless abs(D(J) - 1) <= 1/8.
+
+         D.Values (J) :=
+           C_float_Operations.Log (NJ_Truncate (VA.Values (J)), 2.0);
+      end loop;
+
+      return To_Vector (D);
+   end vlogefp;
+
+   ----------
+   -- lvsl --
+   ----------
+
+   function lvsl (A : c_long; B : c_ptr) return LL_VSC is
+      type bit4_type is mod 16#F# + 1;
+      for bit4_type'Alignment use 1;
+      EA : Integer_Address;
+      D  : VUC_View;
+      SH : bit4_type;
+
+   begin
+      EA := Integer_Address (A) + To_Integer (B);
+      SH := bit4_type (EA mod 2 ** 4);
+
+      for J in D.Values'Range loop
+         D.Values (J) := unsigned_char (SH) + unsigned_char (J)
+           - unsigned_char (D.Values'First);
+      end loop;
+
+      return To_LL_VSC (To_Vector (D));
+   end lvsl;
+
+   ----------
+   -- lvsr --
+   ----------
+
+   function lvsr (A : c_long; B : c_ptr) return LL_VSC is
+      type bit4_type is mod 16#F# + 1;
+      for bit4_type'Alignment use 1;
+      EA : Integer_Address;
+      D  : VUC_View;
+      SH : bit4_type;
+
+   begin
+      EA := Integer_Address (A) + To_Integer (B);
+      SH := bit4_type (EA mod 2 ** 4);
+
+      for J in D.Values'Range loop
+         D.Values (J) := (16#F# - unsigned_char (SH)) + unsigned_char (J);
+      end loop;
+
+      return To_LL_VSC (To_Vector (D));
+   end lvsr;
+
+   -------------
+   -- vmaddfp --
+   -------------
+
+   function vmaddfp (A : LL_VF; B : LL_VF; C : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      VB : constant VF_View := To_View (B);
+      VC : constant VF_View := To_View (C);
+      D  : VF_View;
+
+   begin
+      for J in Varray_float'Range loop
+         D.Values (J) :=
+           Rnd_To_FP_Nearest (F64 (VA.Values (J))
+                              * F64 (VB.Values (J))
+                              + F64 (VC.Values (J)));
+      end loop;
+
+      return To_Vector (D);
+   end vmaddfp;
+
+   ---------------
+   -- vmhaddshs --
+   ---------------
+
+   function vmhaddshs  (A : LL_VSS; B : LL_VSS; C : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      VC : constant VSS_View := To_View (C);
+      D  : VSS_View;
+
+   begin
+      for J in Varray_signed_short'Range loop
+         D.Values (J) := LL_VSS_Operations.Saturate
+           ((SI64 (VA.Values (J)) * SI64 (VB.Values (J)))
+            / SI64 (2 ** 15) + SI64 (VC.Values (J)));
+      end loop;
+
+      return To_Vector (D);
+   end vmhaddshs;
+
+   ------------
+   -- vmaxub --
+   ------------
+
+   function vmaxub (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+   begin
+      D.Values := LL_VUC_Operations.vmaxux (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (D));
+   end vmaxub;
+
+   ------------
+   -- vmaxsb --
+   ------------
+
+   function vmaxsb (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSC_View;
+   begin
+      D.Values := LL_VSC_Operations.vmaxsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vmaxsb;
+
+   ------------
+   -- vmaxuh --
+   ------------
+
+   function vmaxuh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUS_Operations.vmaxux (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vmaxuh;
+
+   ------------
+   -- vmaxsh --
+   ------------
+
+   function vmaxsh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSS_Operations.vmaxsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vmaxsh;
+
+   ------------
+   -- vmaxuw --
+   ------------
+
+   function vmaxuw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+   begin
+      D.Values := LL_VUI_Operations.vmaxux (VA.Values, VB.Values);
+      return To_LL_VSI (To_Vector (D));
+   end vmaxuw;
+
+   ------------
+   -- vmaxsw --
+   ------------
+
+   function vmaxsw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VSI_View;
+   begin
+      D.Values := LL_VSI_Operations.vmaxsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vmaxsw;
+
+   --------------
+   -- vmaxsxfp --
+   --------------
+
+   function vmaxfp (A : LL_VF; B : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      VB : constant VF_View := To_View (B);
+      D  : VF_View;
+
+   begin
+      for J in Varray_float'Range loop
+         if VA.Values (J) > VB.Values (J) then
+            D.Values (J) := VA.Values (J);
+         else
+            D.Values (J) := VB.Values (J);
+         end if;
+      end loop;
+
+      return To_Vector (D);
+   end vmaxfp;
+
+   ------------
+   -- vmrghb --
+   ------------
+
+   function vmrghb (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSC_View;
+   begin
+      D.Values := LL_VSC_Operations.vmrghx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vmrghb;
+
+   ------------
+   -- vmrghh --
+   ------------
+
+   function vmrghh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSS_Operations.vmrghx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vmrghh;
+
+   ------------
+   -- vmrghw --
+   ------------
+
+   function vmrghw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VSI_View;
+   begin
+      D.Values := LL_VSI_Operations.vmrghx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vmrghw;
+
+   ------------
+   -- vmrglb --
+   ------------
+
+   function vmrglb (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSC_View;
+   begin
+      D.Values := LL_VSC_Operations.vmrglx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vmrglb;
+
+   ------------
+   -- vmrglh --
+   ------------
+
+   function vmrglh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSS_Operations.vmrglx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vmrglh;
+
+   ------------
+   -- vmrglw --
+   ------------
+
+   function vmrglw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VSI_View;
+   begin
+      D.Values := LL_VSI_Operations.vmrglx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vmrglw;
+
+   ------------
+   -- mfvscr --
+   ------------
+
+   function  mfvscr return LL_VSS is
+      D : VUS_View;
+   begin
+      for J in Varray_unsigned_short'Range loop
+         D.Values (J) := 0;
+      end loop;
+
+      D.Values (Varray_unsigned_short'Last) :=
+        unsigned_short (VSCR mod 2 ** unsigned_short'Size);
+      D.Values (Varray_unsigned_short'Last - 1) :=
+        unsigned_short (VSCR / 2 ** unsigned_short'Size);
+      return To_LL_VSS (To_Vector (D));
+   end mfvscr;
+
+   ------------
+   -- vminfp --
+   ------------
+
+   function vminfp (A : LL_VF;  B : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      VB : constant VF_View := To_View (B);
+      D  : VF_View;
+
+   begin
+      for J in Varray_float'Range loop
+         if VA.Values (J) < VB.Values (J) then
+            D.Values (J) := VA.Values (J);
+         else
+            D.Values (J) := VB.Values (J);
+         end if;
+      end loop;
+
+      return To_Vector (D);
+   end vminfp;
+
+   ------------
+   -- vminsb --
+   ------------
+
+   function vminsb (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSC_View;
+   begin
+      D.Values := LL_VSC_Operations.vminsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vminsb;
+
+   ------------
+   -- vminub --
+   ------------
+
+   function vminub (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+   begin
+      D.Values := LL_VUC_Operations.vminux (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (D));
+   end vminub;
+
+   ------------
+   -- vminsh --
+   ------------
+
+   function vminsh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSS_Operations.vminsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vminsh;
+
+   ------------
+   -- vminuh --
+   ------------
+
+   function vminuh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUS_Operations.vminux (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vminuh;
+
+   ------------
+   -- vminsw --
+   ------------
+
+   function vminsw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VSI_View;
+   begin
+      D.Values := LL_VSI_Operations.vminsx (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vminsw;
+
+   ------------
+   -- vminuw --
+   ------------
+
+   function vminuw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+   begin
+      D.Values := LL_VUI_Operations.vminux (VA.Values,
+                                            VB.Values);
+      return To_LL_VSI (To_Vector (D));
+   end vminuw;
+
+   ---------------
+   -- vmladduhm --
+   ---------------
+
+   function vmladduhm (A : LL_VSS; B : LL_VSS; C : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      VC : constant VUS_View := To_View (To_LL_VUS (C));
+      D  : VUS_View;
+
+   begin
+      for J in Varray_unsigned_short'Range loop
+         D.Values (J) := VA.Values (J) * VB.Values (J)
+           + VC.Values (J);
+      end loop;
+
+      return To_LL_VSS (To_Vector (D));
+   end vmladduhm;
+
+   ----------------
+   -- vmhraddshs --
+   ----------------
+
+   function vmhraddshs (A : LL_VSS; B : LL_VSS; C : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      VC : constant VSS_View := To_View (C);
+      D  : VSS_View;
+
+   begin
+      for J in Varray_signed_short'Range loop
+         D.Values (J) :=
+           LL_VSS_Operations.Saturate (((SI64 (VA.Values (J))
+                                         * SI64 (VB.Values (J))
+                                         + 2 ** 14)
+                                        / 2 ** 15
+                                        + SI64 (VC.Values (J))));
+      end loop;
+
+      return To_Vector (D);
+   end vmhraddshs;
+
+   --------------
+   -- vmsumubm --
+   --------------
+
+   function vmsumubm (A : LL_VSC; B : LL_VSC; C : LL_VSI) return LL_VSI is
+      Offset : Vchar_Range;
+      VA     : constant VUC_View := To_View (To_LL_VUC (A));
+      VB     : constant VUC_View := To_View (To_LL_VUC (B));
+      VC     : constant VUI_View := To_View (To_LL_VUI (C));
+      D      : VUI_View;
+
+   begin
+      for J in 0 .. 3 loop
+         Offset := Vchar_Range (4 * J + Integer (Vchar_Range'First));
+         D.Values (Vint_Range
+                   (J + Integer (Vint_Range'First))) :=
+           (unsigned_int (VA.Values (Offset))
+            * unsigned_int (VB.Values (Offset)))
+           + (unsigned_int (VA.Values (Offset + 1))
+              * unsigned_int (VB.Values (1 + Offset)))
+           + (unsigned_int (VA.Values (2 + Offset))
+              * unsigned_int (VB.Values (2 + Offset)))
+           + (unsigned_int (VA.Values (3 + Offset))
+              * unsigned_int (VB.Values (3 + Offset)))
+           + VC.Values (Vint_Range
+                        (J + Integer (Varray_unsigned_int'First)));
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vmsumubm;
+
+   --------------
+   -- vmsumumbm --
+   --------------
+
+   function vmsummbm (A : LL_VSC; B : LL_VSC; C : LL_VSI) return LL_VSI is
+      Offset : Vchar_Range;
+      VA     : constant VSC_View := To_View (A);
+      VB     : constant VUC_View := To_View (To_LL_VUC (B));
+      VC     : constant VSI_View := To_View (C);
+      D      : VSI_View;
+
+   begin
+      for J in 0 .. 3 loop
+         Offset := Vchar_Range (4 * J + Integer (Vchar_Range'First));
+         D.Values (Vint_Range
+                   (J + Integer (Varray_unsigned_int'First))) := 0
+           + LL_VSI_Operations.Modular_Result (SI64 (VA.Values (Offset))
+                                               * SI64 (VB.Values (Offset)))
+           + LL_VSI_Operations.Modular_Result (SI64 (VA.Values (Offset + 1))
+                                               * SI64 (VB.Values
+                                                       (1 + Offset)))
+           + LL_VSI_Operations.Modular_Result (SI64 (VA.Values (2 + Offset))
+                                               * SI64 (VB.Values
+                                                       (2 + Offset)))
+           + LL_VSI_Operations.Modular_Result (SI64 (VA.Values (3 + Offset))
+                                               * SI64 (VB.Values
+                                                       (3 + Offset)))
+           + VC.Values (Vint_Range
+                        (J + Integer (Varray_unsigned_int'First)));
+      end loop;
+
+      return To_Vector (D);
+   end vmsummbm;
+
+   --------------
+   -- vmsumuhm --
+   --------------
+
+   function vmsumuhm (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI is
+      Offset : Vshort_Range;
+      VA     : constant VUS_View := To_View (To_LL_VUS (A));
+      VB     : constant VUS_View := To_View (To_LL_VUS (B));
+      VC     : constant VUI_View := To_View (To_LL_VUI (C));
+      D      : VUI_View;
+
+   begin
+      for J in 0 .. 3 loop
+         Offset :=
+           Vshort_Range (2 * J + Integer (Vshort_Range'First));
+         D.Values (Vint_Range
+                   (J + Integer (Varray_unsigned_int'First))) :=
+           (unsigned_int (VA.Values (Offset))
+            * unsigned_int (VB.Values (Offset)))
+           + (unsigned_int (VA.Values (Offset + 1))
+              * unsigned_int (VB.Values (1 + Offset)))
+           + VC.Values (Vint_Range
+                        (J + Integer (Vint_Range'First)));
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vmsumuhm;
+
+   --------------
+   -- vmsumshm --
+   --------------
+
+   function vmsumshm (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI is
+      VA     : constant VSS_View := To_View (A);
+      VB     : constant VSS_View := To_View (B);
+      VC     : constant VSI_View := To_View (C);
+      Offset : Vshort_Range;
+      D      : VSI_View;
+
+   begin
+      for J in 0 .. 3 loop
+         Offset :=
+           Vshort_Range (2 * J + Integer (Varray_signed_char'First));
+         D.Values (Vint_Range
+                   (J + Integer (Varray_unsigned_int'First))) := 0
+           + LL_VSI_Operations.Modular_Result (SI64 (VA.Values (Offset))
+                                               * SI64 (VB.Values (Offset)))
+           + LL_VSI_Operations.Modular_Result (SI64 (VA.Values (Offset + 1))
+                                               * SI64 (VB.Values
+                                                       (1 + Offset)))
+           + VC.Values (Vint_Range
+                        (J + Integer (Varray_unsigned_int'First)));
+      end loop;
+
+      return To_Vector (D);
+   end vmsumshm;
+
+   --------------
+   -- vmsumuhs --
+   --------------
+
+   function vmsumuhs (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI is
+      Offset : Vshort_Range;
+      VA     : constant VUS_View := To_View (To_LL_VUS (A));
+      VB     : constant VUS_View := To_View (To_LL_VUS (B));
+      VC     : constant VUI_View := To_View (To_LL_VUI (C));
+      D      : VUI_View;
+
+   begin
+      for J in 0 .. 3 loop
+         Offset :=
+           Vshort_Range (2 * J + Integer (Varray_signed_short'First));
+         D.Values (Vint_Range
+                   (J + Integer (Varray_unsigned_int'First))) :=
+           LL_VUI_Operations.Saturate
+           (UI64 (VA.Values (Offset))
+            * UI64 (VB.Values (Offset))
+            + UI64 (VA.Values (Offset + 1))
+            * UI64 (VB.Values (1 + Offset))
+            + UI64 (VC.Values
+                    (Vint_Range
+                     (J + Integer (Varray_unsigned_int'First)))));
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vmsumuhs;
+
+   --------------
+   -- vmsumshs --
+   --------------
+
+   function vmsumshs (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI is
+      VA     : constant VSS_View := To_View (A);
+      VB     : constant VSS_View := To_View (B);
+      VC     : constant VSI_View := To_View (C);
+      Offset : Vshort_Range;
+      D      : VSI_View;
+
+   begin
+      for J in 0 .. 3 loop
+         Offset :=
+           Vshort_Range (2 * J + Integer (Varray_signed_short'First));
+         D.Values (Vint_Range
+                   (J + Integer (Varray_signed_int'First))) :=
+           LL_VSI_Operations.Saturate
+           (SI64 (VA.Values (Offset))
+            * SI64 (VB.Values (Offset))
+            + SI64 (VA.Values (Offset + 1))
+            * SI64 (VB.Values (1 + Offset))
+            + SI64 (VC.Values
+                    (Vint_Range
+                     (J + Integer (Varray_signed_int'First)))));
+      end loop;
+
+      return To_Vector (D);
+   end vmsumshs;
+
+   ------------
+   -- mtvscr --
+   ------------
+
+   procedure mtvscr (A : LL_VSI) is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+   begin
+      VSCR := VA.Values (Varray_unsigned_int'Last);
+   end mtvscr;
+
+   -------------
+   -- vmuleub --
+   -------------
+
+   function vmuleub (A : LL_VSC; B : LL_VSC) return LL_VSS is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUC_LL_VUS_Operations.vmulxux (True,
+                                                    VA.Values,
+                                                    VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vmuleub;
+
+   -------------
+   -- vmuleuh --
+   -------------
+
+   function vmuleuh (A : LL_VSS; B : LL_VSS) return LL_VSI is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUI_View;
+   begin
+      D.Values := LL_VUS_LL_VUI_Operations.vmulxux (True,
+                                                    VA.Values,
+                                                    VB.Values);
+      return To_LL_VSI (To_Vector (D));
+   end vmuleuh;
+
+   -------------
+   -- vmulesb --
+   -------------
+
+   function vmulesb (A : LL_VSC; B : LL_VSC) return LL_VSS is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSC_LL_VSS_Operations.vmulxsx (True,
+                                                    VA.Values,
+                                                    VB.Values);
+      return To_Vector (D);
+   end vmulesb;
+
+   -------------
+   -- vmulesh --
+   -------------
+
+   function vmulesh (A : LL_VSS; B : LL_VSS) return LL_VSI is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSI_View;
+   begin
+      D.Values := LL_VSS_LL_VSI_Operations.vmulxsx (True,
+                                                    VA.Values,
+                                                    VB.Values);
+      return To_Vector (D);
+   end vmulesh;
+
+   -------------
+   -- vmuloub --
+   -------------
+
+   function vmuloub (A : LL_VSC; B : LL_VSC) return LL_VSS is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUC_LL_VUS_Operations.vmulxux (False,
+                                                    VA.Values,
+                                                    VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vmuloub;
+
+   -------------
+   -- vmulouh --
+   -------------
+
+   function vmulouh (A : LL_VSS; B : LL_VSS) return LL_VSI is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUI_View;
+   begin
+      D.Values :=
+        LL_VUS_LL_VUI_Operations.vmulxux (False, VA.Values, VB.Values);
+      return To_LL_VSI (To_Vector (D));
+   end vmulouh;
+
+   -------------
+   -- vmulosb --
+   -------------
+
+   function vmulosb (A : LL_VSC; B : LL_VSC) return LL_VSS is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSC_LL_VSS_Operations.vmulxsx (False,
+                                                    VA.Values,
+                                                    VB.Values);
+      return To_Vector (D);
+   end vmulosb;
+
+   -------------
+   -- vmulosh --
+   -------------
+
+   function vmulosh (A : LL_VSS; B : LL_VSS) return LL_VSI is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSI_View;
+   begin
+      D.Values := LL_VSS_LL_VSI_Operations.vmulxsx (False,
+                                                    VA.Values,
+                                                    VB.Values);
+      return To_Vector (D);
+   end vmulosh;
+
+   --------------
+   -- vnmsubfp --
+   --------------
+
+   function vnmsubfp (A : LL_VF; B : LL_VF; C : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      VB : constant VF_View := To_View (B);
+      VC : constant VF_View := To_View (C);
+      D  : VF_View;
+
+   begin
+      for J in Vfloat_Range'Range loop
+         D.Values (J) :=
+           -Rnd_To_FP_Nearest (F64 (VA.Values (J))
+                               * F64 (VB.Values (J))
+                               - F64 (VC.Values (J)));
+      end loop;
+
+      return To_Vector (D);
+   end vnmsubfp;
+
+   ----------
+   -- vnor --
+   ----------
+
+   function vnor (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+
+   begin
+      for J in Vint_Range'Range loop
+         D.Values (J) := not (VA.Values (J) or VB.Values (J));
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vnor;
+
+   ----------
+   -- vor --
+   ----------
+
+   function vor (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+
+   begin
+      for J in Vint_Range'Range loop
+         D.Values (J) := VA.Values (J) or VB.Values (J);
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vor;
+
+   -------------
+   -- vpkuhum --
+   -------------
+
+   function vpkuhum (A : LL_VSS; B : LL_VSS) return LL_VSC is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUC_View;
+   begin
+      D.Values := LL_VUC_LL_VUS_Operations.vpkuxum (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (D));
+   end vpkuhum;
+
+   -------------
+   -- vpkuwum --
+   -------------
+
+   function vpkuwum (A : LL_VSI; B : LL_VSI) return LL_VSS is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUS_LL_VUI_Operations.vpkuxum (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vpkuwum;
+
+   -----------
+   -- vpkpx --
+   -----------
+
+   function vpkpx (A : LL_VSI; B : LL_VSI) return LL_VSS is
+      VA     : constant VUI_View := To_View (To_LL_VUI (A));
+      VB     : constant VUI_View := To_View (To_LL_VUI (B));
+      D      : VUS_View;
+      Offset : Vint_Range;
+      P16    : Pixel_16;
+      P32    : Pixel_32;
+
+   begin
+      for J in 0 .. 3 loop
+         Offset := Vint_Range (J + Integer (Vshort_Range'First));
+         P32 := To_Pixel (VA.Values (Offset));
+         P16.T := Unsigned_1 (P32.T mod 2 ** 1);
+         P16.R := Unsigned_5 (Shift_Right (P32.R, 3) mod 2 ** 5);
+         P16.G := Unsigned_5 (Shift_Right (P32.G, 3) mod 2 ** 5);
+         P16.B := Unsigned_5 (Shift_Right (P32.B, 3) mod 2 ** 5);
+         D.Values (Vshort_Range (Offset)) := To_unsigned_short (P16);
+         P32 := To_Pixel (VB.Values (Offset));
+         P16.T := Unsigned_1 (P32.T mod 2 ** 1);
+         P16.R := Unsigned_5 (Shift_Right (P32.R, 3) mod 2 ** 5);
+         P16.G := Unsigned_5 (Shift_Right (P32.G, 3) mod 2 ** 5);
+         P16.B := Unsigned_5 (Shift_Right (P32.B, 3) mod 2 ** 5);
+         D.Values (Vshort_Range (Offset) + 4) := To_unsigned_short (P16);
+      end loop;
+
+      return To_LL_VSS (To_Vector (D));
+   end vpkpx;
+
+   -------------
+   -- vpkuhus --
+   -------------
+
+   function vpkuhus (A : LL_VSS; B : LL_VSS) return LL_VSC is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUC_View;
+   begin
+      D.Values := LL_VUC_LL_VUS_Operations.vpkuxus (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (D));
+   end vpkuhus;
+
+   -------------
+   -- vpkuwus --
+   -------------
+
+   function vpkuwus (A : LL_VSI; B : LL_VSI) return LL_VSS is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUS_LL_VUI_Operations.vpkuxus (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vpkuwus;
+
+   -------------
+   -- vpkshss --
+   -------------
+
+   function vpkshss (A : LL_VSS; B : LL_VSS) return LL_VSC is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSC_View;
+   begin
+      D.Values := LL_VSC_LL_VSS_Operations.vpksxss (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vpkshss;
+
+   -------------
+   -- vpkswss --
+   -------------
+
+   function vpkswss (A : LL_VSI; B : LL_VSI) return LL_VSS is
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSS_LL_VSI_Operations.vpksxss (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vpkswss;
+
+   -------------
+   -- vpksxus --
+   -------------
+
+   generic
+      type Signed_Component_Type is range <>;
+      type Signed_Index_Type is range <>;
+      type Signed_Varray_Type is
+        array (Signed_Index_Type) of Signed_Component_Type;
+      type Unsigned_Component_Type is mod <>;
+      type Unsigned_Index_Type is range <>;
+      type Unsigned_Varray_Type is
+        array (Unsigned_Index_Type) of Unsigned_Component_Type;
+
+   function vpksxus
+     (A : Signed_Varray_Type;
+      B : Signed_Varray_Type) return Unsigned_Varray_Type;
+
+   function vpksxus
+     (A : Signed_Varray_Type;
+      B : Signed_Varray_Type) return Unsigned_Varray_Type
+   is
+      N             : constant Unsigned_Index_Type :=
+                        Unsigned_Index_Type (Signed_Index_Type'Last);
+      Offset        : Unsigned_Index_Type;
+      Signed_Offset : Signed_Index_Type;
+      D             : Unsigned_Varray_Type;
+
+      function Saturate
+        (X : Signed_Component_Type) return Unsigned_Component_Type;
+      --  Saturation, as defined in
+      --  [PIM-4.1 Vector Status and Control Register]
+
+      --------------
+      -- Saturate --
+      --------------
+
+      function Saturate
+        (X : Signed_Component_Type) return Unsigned_Component_Type
+      is
+         D : Unsigned_Component_Type;
+
+      begin
+         D := Unsigned_Component_Type
+           (Signed_Component_Type'Max
+            (Signed_Component_Type (Unsigned_Component_Type'First),
+             Signed_Component_Type'Min
+             (Signed_Component_Type (Unsigned_Component_Type'Last),
+              X)));
+         if Signed_Component_Type (D) /= X then
+            VSCR := Write_Bit (VSCR, SAT_POS, 1);
+         end if;
+
+         return D;
+      end Saturate;
+
+      --  Start of processing for vpksxus
+
+   begin
+      for J in 0 .. N - 1 loop
+         Offset :=
+           Unsigned_Index_Type (Integer (J)
+                                + Integer (Unsigned_Index_Type'First));
+         Signed_Offset :=
+           Signed_Index_Type (Integer (J)
+                              + Integer (Signed_Index_Type'First));
+         D (Offset) := Saturate (A (Signed_Offset));
+         D (Offset + N) := Saturate (B (Signed_Offset));
+      end loop;
+
+      return D;
+   end vpksxus;
+
+   -------------
+   -- vpkshus --
+   -------------
+
+   function vpkshus (A : LL_VSS; B : LL_VSS) return LL_VSC is
+      function vpkshus_Instance is
+        new vpksxus (signed_short,
+                     Vshort_Range,
+                     Varray_signed_short,
+                     unsigned_char,
+                     Vchar_Range,
+                     Varray_unsigned_char);
+
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VUC_View;
+
+   begin
+      D.Values := vpkshus_Instance (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (D));
+   end vpkshus;
+
+   -------------
+   -- vpkswus --
+   -------------
+
+   function vpkswus (A : LL_VSI; B : LL_VSI) return LL_VSS is
+      function vpkswus_Instance is
+        new vpksxus (signed_int,
+                     Vint_Range,
+                     Varray_signed_int,
+                     unsigned_short,
+                     Vshort_Range,
+                     Varray_unsigned_short);
+
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VUS_View;
+   begin
+      D.Values := vpkswus_Instance (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vpkswus;
+
+   ---------------
+   -- vperm_4si --
+   ---------------
+
+   function vperm_4si (A : LL_VSI; B : LL_VSI; C : LL_VSC) return LL_VSI is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      VC : constant VUC_View := To_View (To_LL_VUC (C));
+      J  : Vchar_Range;
+      D  : VUC_View;
+
+   begin
+      for N in Vchar_Range'Range loop
+         J := Vchar_Range (Integer (Bits (VC.Values (N), 4, 7))
+                           + Integer (Vchar_Range'First));
+
+         if Bits (VC.Values (N), 3, 3) = 0 then
+            D.Values (N) := VA.Values (J);
+         else
+            D.Values (N) := VB.Values (J);
+         end if;
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vperm_4si;
+
+   -----------
+   -- vrefp --
+   -----------
+
+   function vrefp (A : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      D  : VF_View;
+
+   begin
+      for J in Vfloat_Range'Range loop
+         D.Values (J) := FP_Recip_Est (VA.Values (J));
+      end loop;
+
+      return To_Vector (D);
+   end vrefp;
+
+   ----------
+   -- vrlb --
+   ----------
+
+   function vrlb (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+   begin
+      D.Values := LL_VUC_Operations.vrlx (VA.Values, VB.Values, ROTL'Access);
+      return To_LL_VSC (To_Vector (D));
+   end vrlb;
+
+   ----------
+   -- vrlh --
+   ----------
+
+   function vrlh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUS_Operations.vrlx (VA.Values, VB.Values, ROTL'Access);
+      return To_LL_VSS (To_Vector (D));
+   end vrlh;
+
+   ----------
+   -- vrlw --
+   ----------
+
+   function vrlw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+   begin
+      D.Values := LL_VUI_Operations.vrlx (VA.Values, VB.Values, ROTL'Access);
+      return To_LL_VSI (To_Vector (D));
+   end vrlw;
+
+   -----------
+   -- vrfin --
+   -----------
+
+   function vrfin (A : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      D  : VF_View;
+
+   begin
+      for J in Vfloat_Range'Range loop
+         D.Values (J) := C_float (Rnd_To_FPI_Near (F64 (VA.Values (J))));
+      end loop;
+
+      return To_Vector (D);
+   end vrfin;
+
+   ---------------
+   -- vrsqrtefp --
+   ---------------
+
+   function vrsqrtefp (A : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      D  : VF_View;
+
+   begin
+      for J in Vfloat_Range'Range loop
+         D.Values (J) := Recip_SQRT_Est (VA.Values (J));
+      end loop;
+
+      return To_Vector (D);
+   end vrsqrtefp;
+
+   --------------
+   -- vsel_4si --
+   --------------
+
+   function vsel_4si (A : LL_VSI; B : LL_VSI; C : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      VC : constant VUI_View := To_View (To_LL_VUI (C));
+      D  : VUI_View;
+
+   begin
+      for J in Vint_Range'Range loop
+         D.Values (J) := ((not VC.Values (J)) and VA.Values (J))
+           or (VC.Values (J) and VB.Values (J));
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vsel_4si;
+
+   ----------
+   -- vslb --
+   ----------
+
+   function vslb (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+   begin
+      D.Values :=
+        LL_VUC_Operations.vsxx (VA.Values, VB.Values, Shift_Left'Access);
+      return To_LL_VSC (To_Vector (D));
+   end vslb;
+
+   ----------
+   -- vslh --
+   ----------
+
+   function vslh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+   begin
+      D.Values :=
+        LL_VUS_Operations.vsxx (VA.Values, VB.Values, Shift_Left'Access);
+      return To_LL_VSS (To_Vector (D));
+   end vslh;
+
+   ----------
+   -- vslw --
+   ----------
+
+   function vslw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+   begin
+      D.Values :=
+        LL_VUI_Operations.vsxx (VA.Values, VB.Values, Shift_Left'Access);
+      return To_LL_VSI (To_Vector (D));
+   end vslw;
+
+   ----------------
+   -- vsldoi_4si --
+   ----------------
+
+   function vsldoi_4si (A : LL_VSI; B : LL_VSI; C : c_int) return LL_VSI is
+      VA     : constant VUC_View := To_View (To_LL_VUC (A));
+      VB     : constant VUC_View := To_View (To_LL_VUC (B));
+      Offset : c_int;
+      Bound  : c_int;
+      D      : VUC_View;
+
+   begin
+      for J in Vchar_Range'Range loop
+         Offset := c_int (J) + C;
+         Bound := c_int (Vchar_Range'First)
+           + c_int (Varray_unsigned_char'Length);
+
+         if Offset < Bound then
+            D.Values (J) := VA.Values (Vchar_Range (Offset));
+         else
+            D.Values (J) :=
+              VB.Values (Vchar_Range (Offset - Bound
+                                      + c_int (Vchar_Range'First)));
+         end if;
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vsldoi_4si;
+
+   ----------------
+   -- vsldoi_8hi --
+   ----------------
+
+   function vsldoi_8hi (A : LL_VSS; B : LL_VSS; C : c_int) return LL_VSS is
+   begin
+      return To_LL_VSS (vsldoi_4si (To_LL_VSI (A), To_LL_VSI (B), C));
+   end vsldoi_8hi;
+
+   -----------------
+   -- vsldoi_16qi --
+   -----------------
+
+   function vsldoi_16qi (A : LL_VSC; B : LL_VSC; C : c_int) return LL_VSC is
+   begin
+      return To_LL_VSC (vsldoi_4si (To_LL_VSI (A), To_LL_VSI (B), C));
+   end vsldoi_16qi;
+
+   ----------------
+   -- vsldoi_4sf --
+   ----------------
+
+   function vsldoi_4sf (A : LL_VF; B : LL_VF; C : c_int) return LL_VF is
+   begin
+      return To_LL_VF (vsldoi_4si (To_LL_VSI (A), To_LL_VSI (B), C));
+   end vsldoi_4sf;
+
+   ---------
+   -- vsl --
+   ---------
+
+   function vsl  (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+      M  : constant Natural :=
+             Natural (Bits (VB.Values (Vint_Range'Last), 29, 31));
+
+      --  [PIM-4.4 vec_sll] "Note that the three low-order byte elements in B
+      --  must be the same. Otherwise the value placed into D is undefined."
+      --  ??? Shall we add a optional check for B?
+
+   begin
+      for J in Vint_Range'Range loop
+         D.Values (J) := 0;
+         D.Values (J) := D.Values (J) + Shift_Left (VA.Values (J), M);
+
+         if J /= Vint_Range'Last then
+            D.Values (J) :=
+              D.Values (J) + Shift_Right (VA.Values (J + 1),
+                                          signed_int'Size - M);
+         end if;
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vsl;
+
+   ----------
+   -- vslo --
+   ----------
+
+   function vslo (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+      M  : constant Natural :=
+             Natural (Bits (VB.Values (Vchar_Range'Last), 1, 4));
+      J  : Natural;
+
+   begin
+      for N in Vchar_Range'Range loop
+         J := Natural (N) + M;
+
+         if J <= Natural (Vchar_Range'Last) then
+            D.Values (N) := VA.Values (Vchar_Range (J));
+         else
+            D.Values (N) := 0;
+         end if;
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vslo;
+
+   ------------
+   -- vspltb --
+   ------------
+
+   function vspltb (A : LL_VSC; B : c_int) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+      D  : VSC_View;
+   begin
+      D.Values := LL_VSC_Operations.vspltx (VA.Values, B);
+      return To_Vector (D);
+   end vspltb;
+
+   ------------
+   -- vsplth --
+   ------------
+
+   function vsplth (A : LL_VSS; B : c_int) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSS_Operations.vspltx (VA.Values, B);
+      return To_Vector (D);
+   end vsplth;
+
+   ------------
+   -- vspltw --
+   ------------
+
+   function vspltw (A : LL_VSI; B : c_int) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+      D  : VSI_View;
+   begin
+      D.Values := LL_VSI_Operations.vspltx (VA.Values, B);
+      return To_Vector (D);
+   end vspltw;
+
+   --------------
+   -- vspltisb --
+   --------------
+
+   function vspltisb (A : c_int) return LL_VSC is
+      D : VSC_View;
+   begin
+      D.Values := LL_VSC_Operations.vspltisx (A);
+      return To_Vector (D);
+   end vspltisb;
+
+   --------------
+   -- vspltish --
+   --------------
+
+   function vspltish (A : c_int) return LL_VSS is
+      D : VSS_View;
+   begin
+      D.Values := LL_VSS_Operations.vspltisx (A);
+      return To_Vector (D);
+   end vspltish;
+
+   --------------
+   -- vspltisw --
+   --------------
+
+   function vspltisw (A : c_int) return LL_VSI is
+      D : VSI_View;
+   begin
+      D.Values := LL_VSI_Operations.vspltisx (A);
+      return To_Vector (D);
+   end vspltisw;
+
+   ----------
+   -- vsrb --
+   ----------
+
+   function vsrb (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+   begin
+      D.Values :=
+        LL_VUC_Operations.vsxx (VA.Values, VB.Values, Shift_Right'Access);
+      return To_LL_VSC (To_Vector (D));
+   end vsrb;
+
+   ----------
+   -- vsrh --
+   ----------
+
+   function vsrh (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+   begin
+      D.Values :=
+        LL_VUS_Operations.vsxx (VA.Values, VB.Values, Shift_Right'Access);
+      return To_LL_VSS (To_Vector (D));
+   end vsrh;
+
+   ----------
+   -- vsrw --
+   ----------
+
+   function vsrw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+   begin
+      D.Values :=
+        LL_VUI_Operations.vsxx (VA.Values, VB.Values, Shift_Right'Access);
+      return To_LL_VSI (To_Vector (D));
+   end vsrw;
+
+   -----------
+   -- vsrab --
+   -----------
+
+   function vsrab (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSC_View;
+   begin
+      D.Values :=
+        LL_VSC_Operations.vsrax (VA.Values, VB.Values, Shift_Right_A'Access);
+      return To_Vector (D);
+   end vsrab;
+
+   -----------
+   -- vsrah --
+   -----------
+
+   function vsrah (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSS_View;
+   begin
+      D.Values :=
+        LL_VSS_Operations.vsrax (VA.Values, VB.Values, Shift_Right_A'Access);
+      return To_Vector (D);
+   end vsrah;
+
+   -----------
+   -- vsraw --
+   -----------
+
+   function vsraw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VSI_View;
+   begin
+      D.Values :=
+        LL_VSI_Operations.vsrax (VA.Values, VB.Values, Shift_Right_A'Access);
+      return To_Vector (D);
+   end vsraw;
+
+   ---------
+   -- vsr --
+   ---------
+
+   function vsr  (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      M  : constant Natural :=
+             Natural (Bits (VB.Values (Vint_Range'Last), 29, 31));
+      D  : VUI_View;
+
+   begin
+      for J in Vint_Range'Range loop
+         D.Values (J) := 0;
+         D.Values (J) := D.Values (J) + Shift_Right (VA.Values (J), M);
+
+         if J /= Vint_Range'First then
+            D.Values (J) :=
+              D.Values (J)
+              + Shift_Left (VA.Values (J - 1), signed_int'Size - M);
+         end if;
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vsr;
+
+   ----------
+   -- vsro --
+   ----------
+
+   function vsro (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      M  : constant Natural :=
+             Natural (Bits (VB.Values (Vchar_Range'Last), 1, 4));
+      J  : Natural;
+      D  : VUC_View;
+
+   begin
+      for N in Vchar_Range'Range loop
+         J := Natural (N) - M;
+
+         if J >= Natural (Vchar_Range'First) then
+            D.Values (N) := VA.Values (Vchar_Range (J));
+         else
+            D.Values (N) := 0;
+         end if;
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vsro;
+
+   ----------
+   -- stvx --
+   ----------
+
+   procedure stvx   (A : LL_VSI; B : c_int; C : c_ptr) is
+      EA : Integer_Address;
+
+   begin
+      EA := Bound_Align (Integer_Address (B) + To_Integer (C), 16);
+
+      declare
+         D : LL_VSI;
+         for D'Address use To_Address (EA);
+      begin
+         D := A;
+      end;
+   end stvx;
+
+   ------------
+   -- stvewx --
+   ------------
+
+   procedure stvebx (A : LL_VSC; B : c_int; C : c_ptr) is
+      VA : constant VSC_View := To_View (A);
+   begin
+      LL_VSC_Operations.stvexx (VA.Values, B, C);
+   end stvebx;
+
+   ------------
+   -- stvehx --
+   ------------
+
+   procedure stvehx (A : LL_VSS; B : c_int; C : c_ptr) is
+      VA : constant VSS_View := To_View (A);
+   begin
+      LL_VSS_Operations.stvexx (VA.Values, B, C);
+   end stvehx;
+
+   ------------
+   -- stvewx --
+   ------------
+
+   procedure stvewx (A : LL_VSI; B : c_int; C : c_ptr) is
+      VA : constant VSI_View := To_View (A);
+   begin
+      LL_VSI_Operations.stvexx (VA.Values, B, C);
+   end stvewx;
+
+   -----------
+   -- stvxl --
+   -----------
+
+   procedure stvxl   (A : LL_VSI; B : c_int; C : c_ptr) renames stvx;
+
+   -------------
+   -- vsububm --
+   -------------
+
+   function vsububm (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+   begin
+      D.Values := LL_VUC_Operations.vsubuxm (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (D));
+   end vsububm;
+
+   -------------
+   -- vsubuhm --
+   -------------
+
+   function vsubuhm (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUS_Operations.vsubuxm (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vsubuhm;
+
+   -------------
+   -- vsubuwm --
+   -------------
+
+   function vsubuwm (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+   begin
+      D.Values := LL_VUI_Operations.vsubuxm (VA.Values, VB.Values);
+      return To_LL_VSI (To_Vector (D));
+   end vsubuwm;
+
+   ------------
+   -- vsubfp --
+   ------------
+
+   function vsubfp (A : LL_VF; B : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      VB : constant VF_View := To_View (B);
+      D  : VF_View;
+
+   begin
+      for J in Vfloat_Range'Range loop
+         D.Values (J) :=
+           NJ_Truncate (NJ_Truncate (VA.Values (J))
+                        - NJ_Truncate (VB.Values (J)));
+      end loop;
+
+      return To_Vector (D);
+   end vsubfp;
+
+   -------------
+   -- vsubcuw --
+   -------------
+
+   function vsubcuw (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      Subst_Result : SI64;
+
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+
+   begin
+      for J in Vint_Range'Range loop
+         Subst_Result := SI64 (VA.Values (J)) - SI64 (VB.Values (J));
+
+         if Subst_Result < SI64 (unsigned_int'First) then
+            D.Values (J) := 0;
+         else
+            D.Values (J) := 1;
+         end if;
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vsubcuw;
+
+   -------------
+   -- vsububs --
+   -------------
+
+   function vsububs (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VUC_View := To_View (To_LL_VUC (A));
+      VB : constant VUC_View := To_View (To_LL_VUC (B));
+      D  : VUC_View;
+   begin
+      D.Values := LL_VUC_Operations.vsubuxs (VA.Values, VB.Values);
+      return To_LL_VSC (To_Vector (D));
+   end vsububs;
+
+   -------------
+   -- vsubsbs --
+   -------------
+
+   function vsubsbs (A : LL_VSC; B : LL_VSC) return LL_VSC is
+      VA : constant VSC_View := To_View (A);
+      VB : constant VSC_View := To_View (B);
+      D  : VSC_View;
+   begin
+      D.Values := LL_VSC_Operations.vsubsxs (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vsubsbs;
+
+   -------------
+   -- vsubuhs --
+   -------------
+
+   function vsubuhs (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VUS_View := To_View (To_LL_VUS (A));
+      VB : constant VUS_View := To_View (To_LL_VUS (B));
+      D  : VUS_View;
+   begin
+      D.Values := LL_VUS_Operations.vsubuxs (VA.Values, VB.Values);
+      return To_LL_VSS (To_Vector (D));
+   end vsubuhs;
+
+   -------------
+   -- vsubshs --
+   -------------
+
+   function vsubshs (A : LL_VSS; B : LL_VSS) return LL_VSS is
+      VA : constant VSS_View := To_View (A);
+      VB : constant VSS_View := To_View (B);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSS_Operations.vsubsxs (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vsubshs;
+
+   -------------
+   -- vsubuws --
+   -------------
+
+   function vsubuws (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+   begin
+      D.Values := LL_VUI_Operations.vsubuxs (VA.Values, VB.Values);
+      return To_LL_VSI (To_Vector (D));
+   end vsubuws;
+
+   -------------
+   -- vsubsws --
+   -------------
+
+   function vsubsws (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VSI_View := To_View (A);
+      VB : constant VSI_View := To_View (B);
+      D  : VSI_View;
+   begin
+      D.Values := LL_VSI_Operations.vsubsxs (VA.Values, VB.Values);
+      return To_Vector (D);
+   end vsubsws;
+
+   --------------
+   -- vsum4ubs --
+   --------------
+
+   function vsum4ubs (A : LL_VSC; B : LL_VSI) return LL_VSI is
+      VA     : constant VUC_View := To_View (To_LL_VUC (A));
+      VB     : constant VUI_View := To_View (To_LL_VUI (B));
+      Offset : Vchar_Range;
+      D      : VUI_View;
+
+   begin
+      for J in 0 .. 3 loop
+         Offset := Vchar_Range (4 * J + Integer (Vchar_Range'First));
+         D.Values (Vint_Range (J + Integer (Vint_Range'First))) :=
+           LL_VUI_Operations.Saturate
+           (UI64 (VA.Values (Offset))
+            + UI64 (VA.Values (Offset + 1))
+            + UI64 (VA.Values (Offset + 2))
+            + UI64 (VA.Values (Offset + 3))
+            + UI64 (VB.Values (Vint_Range (J + Integer (Vint_Range'First)))));
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vsum4ubs;
+
+   --------------
+   -- vsum4sbs --
+   --------------
+
+   function vsum4sbs (A : LL_VSC; B : LL_VSI) return LL_VSI is
+      VA     : constant VSC_View := To_View (A);
+      VB     : constant VSI_View := To_View (B);
+      Offset : Vchar_Range;
+      D      : VSI_View;
+
+   begin
+      for J in 0 .. 3 loop
+         Offset := Vchar_Range (4 * J + Integer (Vchar_Range'First));
+         D.Values (Vint_Range (J + Integer (Vint_Range'First))) :=
+           LL_VSI_Operations.Saturate
+           (SI64 (VA.Values (Offset))
+            + SI64 (VA.Values (Offset + 1))
+            + SI64 (VA.Values (Offset + 2))
+            + SI64 (VA.Values (Offset + 3))
+            + SI64 (VB.Values (Vint_Range (J + Integer (Vint_Range'First)))));
+      end loop;
+
+      return To_Vector (D);
+   end vsum4sbs;
+
+   --------------
+   -- vsum4shs --
+   --------------
+
+   function vsum4shs (A : LL_VSS; B : LL_VSI) return LL_VSI is
+      VA     : constant VSS_View := To_View (A);
+      VB     : constant VSI_View := To_View (B);
+      Offset : Vshort_Range;
+      D      : VSI_View;
+
+   begin
+      for J in 0 .. 3 loop
+         Offset := Vshort_Range (2 * J + Integer (Vchar_Range'First));
+         D.Values (Vint_Range (J + Integer (Vint_Range'First))) :=
+           LL_VSI_Operations.Saturate
+           (SI64 (VA.Values (Offset))
+            + SI64 (VA.Values (Offset + 1))
+            + SI64 (VB.Values (Vint_Range (J + Integer (Vint_Range'First)))));
+      end loop;
+
+      return To_Vector (D);
+   end vsum4shs;
+
+   --------------
+   -- vsum2sws --
+   --------------
+
+   function vsum2sws (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA     : constant VSI_View := To_View (A);
+      VB     : constant VSI_View := To_View (B);
+      Offset : Vint_Range;
+      D      : VSI_View;
+
+   begin
+      for J in 0 .. 1 loop
+         Offset := Vint_Range (2 * J + Integer (Vchar_Range'First));
+         D.Values (Offset) := 0;
+         D.Values (Offset + 1) :=
+           LL_VSI_Operations.Saturate
+           (SI64 (VA.Values (Offset))
+            + SI64 (VA.Values (Offset + 1))
+            + SI64 (VB.Values (Vint_Range (Offset + 1))));
+      end loop;
+
+      return To_Vector (D);
+   end vsum2sws;
+
+   -------------
+   -- vsumsws --
+   -------------
+
+   function vsumsws (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA         : constant VSI_View := To_View (A);
+      VB         : constant VSI_View := To_View (B);
+      D          : VSI_View;
+      Sum_Buffer : SI64 := 0;
+
+   begin
+      for J in Vint_Range'Range loop
+         D.Values (J) := 0;
+         Sum_Buffer := Sum_Buffer + SI64 (VA.Values (J));
+      end loop;
+
+      Sum_Buffer := Sum_Buffer + SI64 (VB.Values (Vint_Range'Last));
+      D.Values (Vint_Range'Last) := LL_VSI_Operations.Saturate (Sum_Buffer);
+      return To_Vector (D);
+   end vsumsws;
+
+   -----------
+   -- vrfiz --
+   -----------
+
+   function vrfiz (A : LL_VF) return LL_VF is
+      VA : constant VF_View := To_View (A);
+      D  : VF_View;
+   begin
+      for J in Vfloat_Range'Range loop
+         D.Values (J) := C_float (Rnd_To_FPI_Trunc (F64 (VA.Values (J))));
+      end loop;
+
+      return To_Vector (D);
+   end vrfiz;
+
+   -------------
+   -- vupkhsb --
+   -------------
+
+   function vupkhsb (A : LL_VSC) return LL_VSS is
+      VA : constant VSC_View := To_View (A);
+      D  : VSS_View;
+   begin
+      D.Values := LL_VSC_LL_VSS_Operations.vupkxsx (VA.Values, 0);
+      return To_Vector (D);
+   end vupkhsb;
+
+   -------------
+   -- vupkhsh --
+   -------------
+
+   function vupkhsh (A : LL_VSS) return LL_VSI is
+      VA : constant VSS_View := To_View (A);
+      D  : VSI_View;
+   begin
+      D.Values := LL_VSS_LL_VSI_Operations.vupkxsx (VA.Values, 0);
+      return To_Vector (D);
+   end vupkhsh;
+
+   -------------
+   -- vupkxpx --
+   -------------
+
+   function vupkxpx (A : LL_VSS; Offset : Natural) return LL_VSI;
+   --  For vupkhpx and vupklpx (depending on Offset)
+
+   function vupkxpx (A : LL_VSS; Offset : Natural) return LL_VSI is
+      VA  : constant VUS_View := To_View (To_LL_VUS (A));
+      K   : Vshort_Range;
+      D   : VUI_View;
+      P16 : Pixel_16;
+      P32 : Pixel_32;
+
+      function Sign_Extend (X : Unsigned_1) return unsigned_char;
+
+      function Sign_Extend (X : Unsigned_1) return unsigned_char is
+      begin
+         if X = 1 then
+            return 16#FF#;
+         else
+            return 16#00#;
+         end if;
+      end Sign_Extend;
+
+   begin
+      for J in Vint_Range'Range loop
+         K := Vshort_Range (Integer (J)
+                            - Integer (Vint_Range'First)
+                            + Integer (Vshort_Range'First)
+                            + Offset);
+         P16 := To_Pixel (VA.Values (K));
+         P32.T := Sign_Extend (P16.T);
+         P32.R := unsigned_char (P16.R);
+         P32.G := unsigned_char (P16.G);
+         P32.B := unsigned_char (P16.B);
+         D.Values (J) := To_unsigned_int (P32);
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vupkxpx;
+
+   -------------
+   -- vupkhpx --
+   -------------
+
+   function vupkhpx (A : LL_VSS) return LL_VSI is
+   begin
+      return vupkxpx (A, 0);
+   end vupkhpx;
+
+   -------------
+   -- vupklsb --
+   -------------
+
+   function vupklsb (A : LL_VSC) return LL_VSS is
+      VA : constant VSC_View := To_View (A);
+      D  : VSS_View;
+   begin
+      D.Values :=
+        LL_VSC_LL_VSS_Operations.vupkxsx (VA.Values,
+                                          Varray_signed_short'Length);
+      return To_Vector (D);
+   end vupklsb;
+
+   -------------
+   -- vupklsh --
+   -------------
+
+   function vupklsh (A : LL_VSS) return LL_VSI is
+      VA : constant VSS_View := To_View (A);
+      D  : VSI_View;
+   begin
+      D.Values :=
+        LL_VSS_LL_VSI_Operations.vupkxsx (VA.Values,
+                                          Varray_signed_int'Length);
+      return To_Vector (D);
+   end vupklsh;
+
+   -------------
+   -- vupklpx --
+   -------------
+
+   function vupklpx (A : LL_VSS) return LL_VSI is
+   begin
+      return vupkxpx (A, Varray_signed_int'Length);
+   end vupklpx;
+
+   ----------
+   -- vxor --
+   ----------
+
+   function vxor (A : LL_VSI; B : LL_VSI) return LL_VSI is
+      VA : constant VUI_View := To_View (To_LL_VUI (A));
+      VB : constant VUI_View := To_View (To_LL_VUI (B));
+      D  : VUI_View;
+
+   begin
+      for J in Vint_Range'Range loop
+         D.Values (J) := VA.Values (J) xor VB.Values (J);
+      end loop;
+
+      return To_LL_VSI (To_Vector (D));
+   end vxor;
+
+   ----------------
+   -- vcmpequb_p --
+   ----------------
+
+   function vcmpequb_p (A : c_int; B : LL_VSC; C : LL_VSC) return c_int is
+      D : LL_VSC;
+   begin
+      D := vcmpequb (B, C);
+      return LL_VSC_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpequb_p;
+
+   ----------------
+   -- vcmpequh_p --
+   ----------------
+
+   function vcmpequh_p (A : c_int; B : LL_VSS; C : LL_VSS) return c_int is
+      D : LL_VSS;
+   begin
+      D := vcmpequh (B, C);
+      return LL_VSS_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpequh_p;
+
+   ----------------
+   -- vcmpequw_p --
+   ----------------
+
+   function vcmpequw_p (A : c_int; B : LL_VSI; C : LL_VSI) return c_int is
+      D : LL_VSI;
+   begin
+      D := vcmpequw (B, C);
+      return LL_VSI_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpequw_p;
+
+   ----------------
+   -- vcmpeqfp_p --
+   ----------------
+
+   function vcmpeqfp_p (A : c_int; B : LL_VF; C : LL_VF) return c_int is
+      D : LL_VSI;
+   begin
+      D := vcmpeqfp (B, C);
+      return LL_VSI_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpeqfp_p;
+
+   ----------------
+   -- vcmpgtub_p --
+   ----------------
+
+   function vcmpgtub_p (A : c_int; B : LL_VSC; C : LL_VSC) return c_int is
+      D : LL_VSC;
+   begin
+      D := vcmpgtub (B, C);
+      return LL_VSC_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpgtub_p;
+
+   ----------------
+   -- vcmpgtuh_p --
+   ----------------
+
+   function vcmpgtuh_p (A : c_int; B : LL_VSS; C : LL_VSS) return c_int is
+      D : LL_VSS;
+   begin
+      D := vcmpgtuh (B, C);
+      return LL_VSS_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpgtuh_p;
+
+   ----------------
+   -- vcmpgtuw_p --
+   ----------------
+
+   function vcmpgtuw_p (A : c_int; B : LL_VSI; C : LL_VSI) return c_int is
+      D : LL_VSI;
+   begin
+      D := vcmpgtuw (B, C);
+      return LL_VSI_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpgtuw_p;
+
+   ----------------
+   -- vcmpgtsb_p --
+   ----------------
+
+   function vcmpgtsb_p (A : c_int; B : LL_VSC; C : LL_VSC) return c_int is
+      D : LL_VSC;
+   begin
+      D := vcmpgtsb (B, C);
+      return LL_VSC_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpgtsb_p;
+
+   ----------------
+   -- vcmpgtsh_p --
+   ----------------
+
+   function vcmpgtsh_p (A : c_int; B : LL_VSS; C : LL_VSS) return c_int is
+      D : LL_VSS;
+   begin
+      D := vcmpgtsh (B, C);
+      return LL_VSS_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpgtsh_p;
+
+   ----------------
+   -- vcmpgtsw_p --
+   ----------------
+
+   function vcmpgtsw_p (A : c_int; B : LL_VSI; C : LL_VSI) return c_int is
+      D : LL_VSI;
+   begin
+      D := vcmpgtsw (B, C);
+      return LL_VSI_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpgtsw_p;
+
+   ----------------
+   -- vcmpgefp_p --
+   ----------------
+
+   function vcmpgefp_p (A : c_int; B : LL_VF; C : LL_VF) return c_int is
+      D : LL_VSI;
+   begin
+      D := vcmpgefp (B, C);
+      return LL_VSI_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpgefp_p;
+
+   ----------------
+   -- vcmpgtfp_p --
+   ----------------
+
+   function vcmpgtfp_p (A : c_int; B : LL_VF; C : LL_VF) return c_int is
+      D : LL_VSI;
+   begin
+      D := vcmpgtfp (B, C);
+      return LL_VSI_Operations.Check_CR6 (A, To_View (D).Values);
+   end vcmpgtfp_p;
+
+   ----------------
+   -- vcmpbfp_p --
+   ----------------
+
+   function vcmpbfp_p (A : c_int; B : LL_VF; C : LL_VF) return c_int is
+      D : VSI_View;
+   begin
+      D := To_View (vcmpbfp (B, C));
+
+      for J in Vint_Range'Range loop
+         --  vcmpbfp is not returning the usual bool vector; do the conversion
+         if D.Values (J) = 0 then
+            D.Values (J) := Signed_Bool_False;
+         else
+            D.Values (J) := Signed_Bool_True;
+         end if;
+      end loop;
+
+      return LL_VSI_Operations.Check_CR6 (A, D.Values);
+   end vcmpbfp_p;
+
+end GNAT.Altivec.Low_Level_Vectors;
diff --git a/gcc/ada/g-alleve.ads b/gcc/ada/g-alleve.ads
new file mode 100644 (file)
index 0000000..8094b80
--- /dev/null
@@ -0,0 +1,528 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--       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        --
+--                                                                          --
+--                                 S p e c                                  --
+--                         (Soft Binding Version)                           --
+--                                                                          --
+--          Copyright (C) 2004-2005, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This unit exposes the low level vector support for the Soft binding,
+--  intended for non AltiVec capable targets. See Altivec.Design for a
+--  description of what is expected to be exposed.
+
+with GNAT.Altivec.Vector_Views; use GNAT.Altivec.Vector_Views;
+
+package GNAT.Altivec.Low_Level_Vectors is
+
+   ----------------------------------------
+   -- Low level vector type declarations --
+   ----------------------------------------
+
+   type LL_VUC is private;
+   type LL_VSC is private;
+   type LL_VBC is private;
+
+   type LL_VUS is private;
+   type LL_VSS is private;
+   type LL_VBS is private;
+
+   type LL_VUI is private;
+   type LL_VSI is private;
+   type LL_VBI is private;
+
+   type LL_VF  is private;
+   type LL_VP  is private;
+
+   ------------------------------------
+   -- Low level functional interface --
+   ------------------------------------
+
+   function abs_v16qi (A : LL_VSC) return LL_VSC;
+   function abs_v8hi  (A : LL_VSS) return LL_VSS;
+   function abs_v4si  (A : LL_VSI) return LL_VSI;
+   function abs_v4sf  (A : LL_VF)  return LL_VF;
+
+   function abss_v16qi (A : LL_VSC) return LL_VSC;
+   function abss_v8hi  (A : LL_VSS) return LL_VSS;
+   function abss_v4si  (A : LL_VSI) return LL_VSI;
+
+   function vaddubm (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vadduhm (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vadduwm (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vaddfp  (A : LL_VF;  B : LL_VF)  return LL_VF;
+
+   function vaddcuw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vaddubs (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vaddsbs (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vadduhs (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vaddshs (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vadduws (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vaddsws (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vand  (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vandc (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vavgub (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vavgsb (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vavguh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vavgsh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vavguw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vavgsw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vcmpbfp (A : LL_VF; B : LL_VF) return LL_VSI;
+
+   function vcmpequb (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vcmpequh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vcmpequw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vcmpeqfp (A : LL_VF; B : LL_VF) return LL_VSI;
+
+   function vcmpgefp (A : LL_VF; B : LL_VF) return LL_VSI;
+
+   function vcmpgtub (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vcmpgtsb (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vcmpgtuh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vcmpgtsh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vcmpgtuw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vcmpgtsw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vcmpgtfp (A : LL_VF; B : LL_VF) return LL_VSI;
+
+   function vcfux (A : LL_VSI; B : c_int) return LL_VF;
+   function vcfsx (A : LL_VSI; B : c_int) return LL_VF;
+
+   function vctsxs (A : LL_VF; B : c_int) return LL_VSI;
+   function vctuxs (A : LL_VF; B : c_int) return LL_VSI;
+
+   procedure dss (A : c_int);
+   procedure dssall;
+
+   procedure dst    (A : c_ptr; B : c_int; C : c_int);
+   procedure dstst  (A : c_ptr; B : c_int; C : c_int);
+   procedure dststt (A : c_ptr; B : c_int; C : c_int);
+   procedure dstt   (A : c_ptr; B : c_int; C : c_int);
+
+   function vexptefp (A : LL_VF) return LL_VF;
+
+   function vrfim (A : LL_VF) return LL_VF;
+
+   function lvx   (A : c_long; B : c_ptr) return LL_VSI;
+   function lvebx (A : c_long; B : c_ptr) return LL_VSC;
+   function lvehx (A : c_long; B : c_ptr) return LL_VSS;
+   function lvewx (A : c_long; B : c_ptr) return LL_VSI;
+   function lvxl  (A : c_long; B : c_ptr) return LL_VSI;
+
+   function vlogefp (A : LL_VF) return LL_VF;
+
+   function lvsl  (A : c_long; B : c_ptr) return LL_VSC;
+   function lvsr  (A : c_long; B : c_ptr) return LL_VSC;
+
+   function vmaddfp (A : LL_VF; B : LL_VF; C : LL_VF) return LL_VF;
+
+   function vmhaddshs  (A : LL_VSS; B : LL_VSS; C : LL_VSS) return LL_VSS;
+
+   function vmaxub (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vmaxsb (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vmaxuh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vmaxsh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vmaxuw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vmaxsw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vmaxfp (A : LL_VF;  B : LL_VF)  return LL_VF;
+
+   function vmrghb (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vmrghh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vmrghw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vmrglb (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vmrglh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vmrglw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function mfvscr return LL_VSS;
+
+   function vminfp (A : LL_VF;  B : LL_VF)  return LL_VF;
+   function vminsb (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vminsh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vminsw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vminub (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vminuh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vminuw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vmladduhm (A : LL_VSS; B : LL_VSS; C : LL_VSS) return LL_VSS;
+
+   function vmhraddshs (A : LL_VSS; B : LL_VSS; C : LL_VSS) return LL_VSS;
+
+   function vmsumubm (A : LL_VSC; B : LL_VSC; C : LL_VSI) return LL_VSI;
+   function vmsummbm (A : LL_VSC; B : LL_VSC; C : LL_VSI) return LL_VSI;
+   function vmsumuhm (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI;
+   function vmsumshm (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI;
+   function vmsumuhs (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI;
+   function vmsumshs (A : LL_VSS; B : LL_VSS; C : LL_VSI) return LL_VSI;
+
+   procedure mtvscr (A : LL_VSI);
+
+   function vmuleub (A : LL_VSC; B : LL_VSC) return LL_VSS;
+   function vmuleuh (A : LL_VSS; B : LL_VSS) return LL_VSI;
+   function vmulesb (A : LL_VSC; B : LL_VSC) return LL_VSS;
+   function vmulesh (A : LL_VSS; B : LL_VSS) return LL_VSI;
+
+   function vmulosb (A : LL_VSC; B : LL_VSC) return LL_VSS;
+   function vmulosh (A : LL_VSS; B : LL_VSS) return LL_VSI;
+   function vmuloub (A : LL_VSC; B : LL_VSC) return LL_VSS;
+   function vmulouh (A : LL_VSS; B : LL_VSS) return LL_VSI;
+
+   function vnmsubfp (A : LL_VF; B : LL_VF; C : LL_VF) return LL_VF;
+
+   function vxor (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vnor (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vor  (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vpkuhum (A : LL_VSS; B : LL_VSS) return LL_VSC;
+   function vpkuwum (A : LL_VSI; B : LL_VSI) return LL_VSS;
+   function vpkpx   (A : LL_VSI; B : LL_VSI) return LL_VSS;
+   function vpkuhus (A : LL_VSS; B : LL_VSS) return LL_VSC;
+   function vpkuwus (A : LL_VSI; B : LL_VSI) return LL_VSS;
+   function vpkshss (A : LL_VSS; B : LL_VSS) return LL_VSC;
+   function vpkswss (A : LL_VSI; B : LL_VSI) return LL_VSS;
+   function vpkshus (A : LL_VSS; B : LL_VSS) return LL_VSC;
+   function vpkswus (A : LL_VSI; B : LL_VSI) return LL_VSS;
+
+   function vperm_4si (A : LL_VSI; B : LL_VSI; C : LL_VSC) return LL_VSI;
+
+   function vrefp (A : LL_VF) return LL_VF;
+
+   function vrlb (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vrlh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vrlw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vrfin (A : LL_VF) return LL_VF;
+   function vrfip (A : LL_VF) return LL_VF;
+   function vrfiz (A : LL_VF) return LL_VF;
+
+   function vrsqrtefp (A : LL_VF) return LL_VF;
+
+   function vsel_4si (A : LL_VSI; B : LL_VSI; C : LL_VSI) return LL_VSI;
+
+   function vslb (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vslh (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vslw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vsldoi_4si  (A : LL_VSI; B : LL_VSI; C : c_int) return LL_VSI;
+   function vsldoi_8hi  (A : LL_VSS; B : LL_VSS; C : c_int) return LL_VSS;
+   function vsldoi_16qi (A : LL_VSC; B : LL_VSC; C : c_int) return LL_VSC;
+   function vsldoi_4sf  (A : LL_VF;  B : LL_VF;  C : c_int) return LL_VF;
+
+   function vsl  (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vslo (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vspltb (A : LL_VSC; B : c_int) return LL_VSC;
+   function vsplth (A : LL_VSS; B : c_int) return LL_VSS;
+   function vspltw (A : LL_VSI; B : c_int) return LL_VSI;
+
+   function vspltisb (A : c_int) return LL_VSC;
+   function vspltish (A : c_int) return LL_VSS;
+   function vspltisw (A : c_int) return LL_VSI;
+
+   function vsrb  (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vsrh  (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vsrw  (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vsrab (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vsrah (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vsraw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vsr   (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vsro  (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   procedure stvx   (A : LL_VSI; B : c_int; C : c_ptr);
+   procedure stvebx (A : LL_VSC; B : c_int; C : c_ptr);
+   procedure stvehx (A : LL_VSS; B : c_int; C : c_ptr);
+   procedure stvewx (A : LL_VSI; B : c_int; C : c_ptr);
+   procedure stvxl  (A : LL_VSI; B : c_int; C : c_ptr);
+
+   function vsububm (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vsubuhm (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vsubuwm (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vsubfp  (A : LL_VF;  B : LL_VF)  return LL_VF;
+
+   function vsubcuw (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vsububs (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vsubsbs (A : LL_VSC; B : LL_VSC) return LL_VSC;
+   function vsubuhs (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vsubshs (A : LL_VSS; B : LL_VSS) return LL_VSS;
+   function vsubuws (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vsubsws (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vsum4ubs (A : LL_VSC; B : LL_VSI) return LL_VSI;
+   function vsum4sbs (A : LL_VSC; B : LL_VSI) return LL_VSI;
+   function vsum4shs (A : LL_VSS; B : LL_VSI) return LL_VSI;
+
+   function vsum2sws (A : LL_VSI; B : LL_VSI) return LL_VSI;
+   function vsumsws  (A : LL_VSI; B : LL_VSI) return LL_VSI;
+
+   function vupkhsb (A : LL_VSC) return LL_VSS;
+   function vupkhsh (A : LL_VSS) return LL_VSI;
+   function vupkhpx (A : LL_VSS) return LL_VSI;
+
+   function vupklsb (A : LL_VSC) return LL_VSS;
+   function vupklsh (A : LL_VSS) return LL_VSI;
+   function vupklpx (A : LL_VSS) return LL_VSI;
+
+   function vcmpequb_p (A : c_int; B : LL_VSC; C : LL_VSC) return c_int;
+   function vcmpequh_p (A : c_int; B : LL_VSS; C : LL_VSS) return c_int;
+   function vcmpequw_p (A : c_int; B : LL_VSI; C : LL_VSI) return c_int;
+   function vcmpeqfp_p (A : c_int; B : LL_VF; C : LL_VF) return c_int;
+
+   function vcmpgtub_p (A : c_int; B : LL_VSC; C : LL_VSC) return c_int;
+   function vcmpgtuh_p (A : c_int; B : LL_VSS; C : LL_VSS) return c_int;
+   function vcmpgtuw_p (A : c_int; B : LL_VSI; C : LL_VSI) return c_int;
+   function vcmpgtsb_p (A : c_int; B : LL_VSC; C : LL_VSC) return c_int;
+   function vcmpgtsh_p (A : c_int; B : LL_VSS; C : LL_VSS) return c_int;
+   function vcmpgtsw_p (A : c_int; B : LL_VSI; C : LL_VSI) return c_int;
+   function vcmpgtfp_p (A : c_int; B : LL_VF; C : LL_VF) return c_int;
+
+   function vcmpgefp_p (A : c_int; B : LL_VF; C : LL_VF) return c_int;
+   function vcmpbfp_p  (A : c_int; B : LL_VF; C : LL_VF) return c_int;
+
+private
+
+   ---------------------------------------
+   -- Low level vector type definitions --
+   ---------------------------------------
+
+   --  We simply use the natural array definitions corresponding to each
+   --  user-level vector type.
+
+   type LL_VUI is new VUC_View;
+   type LL_VSI is new VUC_View;
+
+   type LL_VUS is new VUC_View;
+   type LL_VSS is new VUC_View;
+
+   type LL_VUC is new VUC_View;
+   type LL_VSC is new VUC_View;
+
+   type LL_VF is new VUC_View;
+
+   type LL_VBC is new VUC_View;
+   type LL_VBS is new VUC_View;
+   type LL_VBI is new VUC_View;
+   type LL_VP is new VUC_View;
+
+   ------------------------------------
+   -- Low level functional interface --
+   ------------------------------------
+
+   pragma Convention_Identifier (LL_Altivec, C);
+
+   pragma Export (LL_Altivec, dss,         "__builtin_altivec_dss");
+   pragma Export (LL_Altivec, dssall,      "__builtin_altivec_dssall");
+   pragma Export (LL_Altivec, dst,         "__builtin_altivec_dst");
+   pragma Export (LL_Altivec, dstst,       "__builtin_altivec_dstst");
+   pragma Export (LL_Altivec, dststt,      "__builtin_altivec_dststt");
+   pragma Export (LL_Altivec, dstt,        "__builtin_altivec_dstt");
+   pragma Export (LL_Altivec, mtvscr,      "__builtin_altivec_mtvscr");
+   pragma Export (LL_Altivec, mfvscr,      "__builtin_altivec_mfvscr");
+   pragma Export (LL_Altivec, stvebx,      "__builtin_altivec_stvebx");
+   pragma Export (LL_Altivec, stvehx,      "__builtin_altivec_stvehx");
+   pragma Export (LL_Altivec, stvewx,      "__builtin_altivec_stvewx");
+   pragma Export (LL_Altivec, stvx,        "__builtin_altivec_stvx");
+   pragma Export (LL_Altivec, stvxl,       "__builtin_altivec_stvxl");
+   pragma Export (LL_Altivec, lvebx,       "__builtin_altivec_lvebx");
+   pragma Export (LL_Altivec, lvehx,       "__builtin_altivec_lvehx");
+   pragma Export (LL_Altivec, lvewx,       "__builtin_altivec_lvewx");
+   pragma Export (LL_Altivec, lvx,         "__builtin_altivec_lvx");
+   pragma Export (LL_Altivec, lvxl,        "__builtin_altivec_lvxl");
+   pragma Export (LL_Altivec, lvsl,        "__builtin_altivec_lvsl");
+   pragma Export (LL_Altivec, lvsr,        "__builtin_altivec_lvsr");
+   pragma Export (LL_Altivec, abs_v16qi,   "__builtin_altivec_abs_v16qi");
+   pragma Export (LL_Altivec, abs_v8hi,    "__builtin_altivec_abs_v8hi");
+   pragma Export (LL_Altivec, abs_v4si,    "__builtin_altivec_abs_v4si");
+   pragma Export (LL_Altivec, abs_v4sf,    "__builtin_altivec_abs_v4sf");
+   pragma Export (LL_Altivec, abss_v16qi,  "__builtin_altivec_abss_v16qi");
+   pragma Export (LL_Altivec, abss_v8hi,   "__builtin_altivec_abss_v8hi");
+   pragma Export (LL_Altivec, abss_v4si,   "__builtin_altivec_abss_v4si");
+   pragma Export (LL_Altivec, vaddcuw,     "__builtin_altivec_vaddcuw");
+   pragma Export (LL_Altivec, vaddfp,      "__builtin_altivec_vaddfp");
+   pragma Export (LL_Altivec, vaddsbs,     "__builtin_altivec_vaddsbs");
+   pragma Export (LL_Altivec, vaddshs,     "__builtin_altivec_vaddshs");
+   pragma Export (LL_Altivec, vaddsws,     "__builtin_altivec_vaddsws");
+   pragma Export (LL_Altivec, vaddubm,     "__builtin_altivec_vaddubm");
+   pragma Export (LL_Altivec, vaddubs,     "__builtin_altivec_vaddubs");
+   pragma Export (LL_Altivec, vadduhm,     "__builtin_altivec_vadduhm");
+   pragma Export (LL_Altivec, vadduhs,     "__builtin_altivec_vadduhs");
+   pragma Export (LL_Altivec, vadduwm,     "__builtin_altivec_vadduwm");
+   pragma Export (LL_Altivec, vadduws,     "__builtin_altivec_vadduws");
+   pragma Export (LL_Altivec, vand,        "__builtin_altivec_vand");
+   pragma Export (LL_Altivec, vandc,       "__builtin_altivec_vandc");
+   pragma Export (LL_Altivec, vavgsb,      "__builtin_altivec_vavgsb");
+   pragma Export (LL_Altivec, vavgsh,      "__builtin_altivec_vavgsh");
+   pragma Export (LL_Altivec, vavgsw,      "__builtin_altivec_vavgsw");
+   pragma Export (LL_Altivec, vavgub,      "__builtin_altivec_vavgub");
+   pragma Export (LL_Altivec, vavguh,      "__builtin_altivec_vavguh");
+   pragma Export (LL_Altivec, vavguw,      "__builtin_altivec_vavguw");
+   pragma Export (LL_Altivec, vcfsx,       "__builtin_altivec_vcfsx");
+   pragma Export (LL_Altivec, vcfux,       "__builtin_altivec_vcfux");
+   pragma Export (LL_Altivec, vcmpbfp,     "__builtin_altivec_vcmpbfp");
+   pragma Export (LL_Altivec, vcmpeqfp,    "__builtin_altivec_vcmpeqfp");
+   pragma Export (LL_Altivec, vcmpequb,    "__builtin_altivec_vcmpequb");
+   pragma Export (LL_Altivec, vcmpequh,    "__builtin_altivec_vcmpequh");
+   pragma Export (LL_Altivec, vcmpequw,    "__builtin_altivec_vcmpequw");
+   pragma Export (LL_Altivec, vcmpgefp,    "__builtin_altivec_vcmpgefp");
+   pragma Export (LL_Altivec, vcmpgtfp,    "__builtin_altivec_vcmpgtfp");
+   pragma Export (LL_Altivec, vcmpgtsb,    "__builtin_altivec_vcmpgtsb");
+   pragma Export (LL_Altivec, vcmpgtsh,    "__builtin_altivec_vcmpgtsh");
+   pragma Export (LL_Altivec, vcmpgtsw,    "__builtin_altivec_vcmpgtsw");
+   pragma Export (LL_Altivec, vcmpgtub,    "__builtin_altivec_vcmpgtub");
+   pragma Export (LL_Altivec, vcmpgtuh,    "__builtin_altivec_vcmpgtuh");
+   pragma Export (LL_Altivec, vcmpgtuw,    "__builtin_altivec_vcmpgtuw");
+   pragma Export (LL_Altivec, vctsxs,      "__builtin_altivec_vctsxs");
+   pragma Export (LL_Altivec, vctuxs,      "__builtin_altivec_vctuxs");
+   pragma Export (LL_Altivec, vexptefp,    "__builtin_altivec_vexptefp");
+   pragma Export (LL_Altivec, vlogefp,     "__builtin_altivec_vlogefp");
+   pragma Export (LL_Altivec, vmaddfp,     "__builtin_altivec_vmaddfp");
+   pragma Export (LL_Altivec, vmaxfp,      "__builtin_altivec_vmaxfp");
+   pragma Export (LL_Altivec, vmaxsb,      "__builtin_altivec_vmaxsb");
+   pragma Export (LL_Altivec, vmaxsh,      "__builtin_altivec_vmaxsh");
+   pragma Export (LL_Altivec, vmaxsw,      "__builtin_altivec_vmaxsw");
+   pragma Export (LL_Altivec, vmaxub,      "__builtin_altivec_vmaxub");
+   pragma Export (LL_Altivec, vmaxuh,      "__builtin_altivec_vmaxuh");
+   pragma Export (LL_Altivec, vmaxuw,      "__builtin_altivec_vmaxuw");
+   pragma Export (LL_Altivec, vmhaddshs,   "__builtin_altivec_vmhaddshs");
+   pragma Export (LL_Altivec, vmhraddshs,  "__builtin_altivec_vmhraddshs");
+   pragma Export (LL_Altivec, vminfp,      "__builtin_altivec_vminfp");
+   pragma Export (LL_Altivec, vminsb,      "__builtin_altivec_vminsb");
+   pragma Export (LL_Altivec, vminsh,      "__builtin_altivec_vminsh");
+   pragma Export (LL_Altivec, vminsw,      "__builtin_altivec_vminsw");
+   pragma Export (LL_Altivec, vminub,      "__builtin_altivec_vminub");
+   pragma Export (LL_Altivec, vminuh,      "__builtin_altivec_vminuh");
+   pragma Export (LL_Altivec, vminuw,      "__builtin_altivec_vminuw");
+   pragma Export (LL_Altivec, vmladduhm,   "__builtin_altivec_vmladduhm");
+   pragma Export (LL_Altivec, vmrghb,      "__builtin_altivec_vmrghb");
+   pragma Export (LL_Altivec, vmrghh,      "__builtin_altivec_vmrghh");
+   pragma Export (LL_Altivec, vmrghw,      "__builtin_altivec_vmrghw");
+   pragma Export (LL_Altivec, vmrglb,      "__builtin_altivec_vmrglb");
+   pragma Export (LL_Altivec, vmrglh,      "__builtin_altivec_vmrglh");
+   pragma Export (LL_Altivec, vmrglw,      "__builtin_altivec_vmrglw");
+   pragma Export (LL_Altivec, vmsummbm,    "__builtin_altivec_vmsummbm");
+   pragma Export (LL_Altivec, vmsumshm,    "__builtin_altivec_vmsumshm");
+   pragma Export (LL_Altivec, vmsumshs,    "__builtin_altivec_vmsumshs");
+   pragma Export (LL_Altivec, vmsumubm,    "__builtin_altivec_vmsumubm");
+   pragma Export (LL_Altivec, vmsumuhm,    "__builtin_altivec_vmsumuhm");
+   pragma Export (LL_Altivec, vmsumuhs,    "__builtin_altivec_vmsumuhs");
+   pragma Export (LL_Altivec, vmulesb,     "__builtin_altivec_vmulesb");
+   pragma Export (LL_Altivec, vmulesh,     "__builtin_altivec_vmulesh");
+   pragma Export (LL_Altivec, vmuleub,     "__builtin_altivec_vmuleub");
+   pragma Export (LL_Altivec, vmuleuh,     "__builtin_altivec_vmuleuh");
+   pragma Export (LL_Altivec, vmulosb,     "__builtin_altivec_vmulosb");
+   pragma Export (LL_Altivec, vmulosh,     "__builtin_altivec_vmulosh");
+   pragma Export (LL_Altivec, vmuloub,     "__builtin_altivec_vmuloub");
+   pragma Export (LL_Altivec, vmulouh,     "__builtin_altivec_vmulouh");
+   pragma Export (LL_Altivec, vnmsubfp,    "__builtin_altivec_vnmsubfp");
+   pragma Export (LL_Altivec, vnor,        "__builtin_altivec_vnor");
+   pragma Export (LL_Altivec, vxor,        "__builtin_altivec_vxor");
+   pragma Export (LL_Altivec, vor,         "__builtin_altivec_vor");
+   pragma Export (LL_Altivec, vperm_4si,   "__builtin_altivec_vperm_4si");
+   pragma Export (LL_Altivec, vpkpx,       "__builtin_altivec_vpkpx");
+   pragma Export (LL_Altivec, vpkshss,     "__builtin_altivec_vpkshss");
+   pragma Export (LL_Altivec, vpkshus,     "__builtin_altivec_vpkshus");
+   pragma Export (LL_Altivec, vpkswss,     "__builtin_altivec_vpkswss");
+   pragma Export (LL_Altivec, vpkswus,     "__builtin_altivec_vpkswus");
+   pragma Export (LL_Altivec, vpkuhum,     "__builtin_altivec_vpkuhum");
+   pragma Export (LL_Altivec, vpkuhus,     "__builtin_altivec_vpkuhus");
+   pragma Export (LL_Altivec, vpkuwum,     "__builtin_altivec_vpkuwum");
+   pragma Export (LL_Altivec, vpkuwus,     "__builtin_altivec_vpkuwus");
+   pragma Export (LL_Altivec, vrefp,       "__builtin_altivec_vrefp");
+   pragma Export (LL_Altivec, vrfim,       "__builtin_altivec_vrfim");
+   pragma Export (LL_Altivec, vrfin,       "__builtin_altivec_vrfin");
+   pragma Export (LL_Altivec, vrfip,       "__builtin_altivec_vrfip");
+   pragma Export (LL_Altivec, vrfiz,       "__builtin_altivec_vrfiz");
+   pragma Export (LL_Altivec, vrlb,        "__builtin_altivec_vrlb");
+   pragma Export (LL_Altivec, vrlh,        "__builtin_altivec_vrlh");
+   pragma Export (LL_Altivec, vrlw,        "__builtin_altivec_vrlw");
+   pragma Export (LL_Altivec, vrsqrtefp,   "__builtin_altivec_vrsqrtefp");
+   pragma Export (LL_Altivec, vsel_4si,    "__builtin_altivec_vsel_4si");
+   pragma Export (LL_Altivec, vsldoi_4si,  "__builtin_altivec_vsldoi_4si");
+   pragma Export (LL_Altivec, vsldoi_8hi,  "__builtin_altivec_vsldoi_8hi");
+   pragma Export (LL_Altivec, vsldoi_16qi, "__builtin_altivec_vsldoi_16qi");
+   pragma Export (LL_Altivec, vsldoi_4sf,  "__builtin_altivec_vsldoi_4sf");
+   pragma Export (LL_Altivec, vsl,         "__builtin_altivec_vsl");
+   pragma Export (LL_Altivec, vslb,        "__builtin_altivec_vslb");
+   pragma Export (LL_Altivec, vslh,        "__builtin_altivec_vslh");
+   pragma Export (LL_Altivec, vslo,        "__builtin_altivec_vslo");
+   pragma Export (LL_Altivec, vslw,        "__builtin_altivec_vslw");
+   pragma Export (LL_Altivec, vspltb,      "__builtin_altivec_vspltb");
+   pragma Export (LL_Altivec, vsplth,      "__builtin_altivec_vsplth");
+   pragma Export (LL_Altivec, vspltisb,    "__builtin_altivec_vspltisb");
+   pragma Export (LL_Altivec, vspltish,    "__builtin_altivec_vspltish");
+   pragma Export (LL_Altivec, vspltisw,    "__builtin_altivec_vspltisw");
+   pragma Export (LL_Altivec, vspltw,      "__builtin_altivec_vspltw");
+   pragma Export (LL_Altivec, vsr,         "__builtin_altivec_vsr");
+   pragma Export (LL_Altivec, vsrab,       "__builtin_altivec_vsrab");
+   pragma Export (LL_Altivec, vsrah,       "__builtin_altivec_vsrah");
+   pragma Export (LL_Altivec, vsraw,       "__builtin_altivec_vsraw");
+   pragma Export (LL_Altivec, vsrb,        "__builtin_altivec_vsrb");
+   pragma Export (LL_Altivec, vsrh,        "__builtin_altivec_vsrh");
+   pragma Export (LL_Altivec, vsro,        "__builtin_altivec_vsro");
+   pragma Export (LL_Altivec, vsrw,        "__builtin_altivec_vsrw");
+   pragma Export (LL_Altivec, vsubcuw,     "__builtin_altivec_vsubcuw");
+   pragma Export (LL_Altivec, vsubfp,      "__builtin_altivec_vsubfp");
+   pragma Export (LL_Altivec, vsubsbs,     "__builtin_altivec_vsubsbs");
+   pragma Export (LL_Altivec, vsubshs,     "__builtin_altivec_vsubshs");
+   pragma Export (LL_Altivec, vsubsws,     "__builtin_altivec_vsubsws");
+   pragma Export (LL_Altivec, vsububm,     "__builtin_altivec_vsububm");
+   pragma Export (LL_Altivec, vsububs,     "__builtin_altivec_vsububs");
+   pragma Export (LL_Altivec, vsubuhm,     "__builtin_altivec_vsubuhm");
+   pragma Export (LL_Altivec, vsubuhs,     "__builtin_altivec_vsubuhs");
+   pragma Export (LL_Altivec, vsubuwm,     "__builtin_altivec_vsubuwm");
+   pragma Export (LL_Altivec, vsubuws,     "__builtin_altivec_vsubuws");
+   pragma Export (LL_Altivec, vsum2sws,    "__builtin_altivec_vsum2sws");
+   pragma Export (LL_Altivec, vsum4sbs,    "__builtin_altivec_vsum4sbs");
+   pragma Export (LL_Altivec, vsum4shs,    "__builtin_altivec_vsum4shs");
+   pragma Export (LL_Altivec, vsum4ubs,    "__builtin_altivec_vsum4ubs");
+   pragma Export (LL_Altivec, vsumsws,     "__builtin_altivec_vsumsws");
+   pragma Export (LL_Altivec, vupkhpx,     "__builtin_altivec_vupkhpx");
+   pragma Export (LL_Altivec, vupkhsb,     "__builtin_altivec_vupkhsb");
+   pragma Export (LL_Altivec, vupkhsh,     "__builtin_altivec_vupkhsh");
+   pragma Export (LL_Altivec, vupklpx,     "__builtin_altivec_vupklpx");
+   pragma Export (LL_Altivec, vupklsb,     "__builtin_altivec_vupklsb");
+   pragma Export (LL_Altivec, vupklsh,     "__builtin_altivec_vupklsh");
+   pragma Export (LL_Altivec, vcmpbfp_p,   "__builtin_altivec_vcmpbfp_p");
+   pragma Export (LL_Altivec, vcmpeqfp_p,  "__builtin_altivec_vcmpeqfp_p");
+   pragma Export (LL_Altivec, vcmpgefp_p,  "__builtin_altivec_vcmpgefp_p");
+   pragma Export (LL_Altivec, vcmpgtfp_p,  "__builtin_altivec_vcmpgtfp_p");
+   pragma Export (LL_Altivec, vcmpequw_p,  "__builtin_altivec_vcmpequw_p");
+   pragma Export (LL_Altivec, vcmpgtsw_p,  "__builtin_altivec_vcmpgtsw_p");
+   pragma Export (LL_Altivec, vcmpgtuw_p,  "__builtin_altivec_vcmpgtuw_p");
+   pragma Export (LL_Altivec, vcmpgtuh_p,  "__builtin_altivec_vcmpgtuh_p");
+   pragma Export (LL_Altivec, vcmpgtsh_p,  "__builtin_altivec_vcmpgtsh_p");
+   pragma Export (LL_Altivec, vcmpequh_p,  "__builtin_altivec_vcmpequh_p");
+   pragma Export (LL_Altivec, vcmpequb_p,  "__builtin_altivec_vcmpequb_p");
+   pragma Export (LL_Altivec, vcmpgtsb_p,  "__builtin_altivec_vcmpgtsb_p");
+   pragma Export (LL_Altivec, vcmpgtub_p,  "__builtin_altivec_vcmpgtub_p");
+
+end GNAT.Altivec.Low_Level_Vectors;
diff --git a/gcc/ada/g-altcon.adb b/gcc/ada/g-altcon.adb
new file mode 100644 (file)
index 0000000..2969ba2
--- /dev/null
@@ -0,0 +1,486 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--             G N A T . A L T I V E C . C O N V E R S I O N S              --
+--                                                                          --
+--                                 B o d y                                  --
+--                                                                          --
+--            Copyright (C) 2005, Free Software Foundation, Inc.            --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with Ada.Unchecked_Conversion;
+
+with System; use System;
+
+with GNAT.Altivec.Low_Level_Interface; use GNAT.Altivec.Low_Level_Interface;
+with GNAT.Altivec.Low_Level_Vectors;   use GNAT.Altivec.Low_Level_Vectors;
+
+package body GNAT.Altivec.Conversions is
+
+   function To_Varray_unsigned_char is
+     new Ada.Unchecked_Conversion (Varray_signed_char,
+                                   Varray_unsigned_char);
+
+   function To_Varray_unsigned_char is
+     new Ada.Unchecked_Conversion (Varray_bool_char,
+                                   Varray_unsigned_char);
+
+   function To_Varray_unsigned_short is
+     new Ada.Unchecked_Conversion (Varray_signed_short,
+                                   Varray_unsigned_short);
+
+   function To_Varray_unsigned_short is
+     new Ada.Unchecked_Conversion (Varray_bool_short,
+                                   Varray_unsigned_short);
+
+   function To_Varray_unsigned_short is
+      new Ada.Unchecked_Conversion (Varray_pixel,
+                                    Varray_unsigned_short);
+
+   function To_Varray_unsigned_int is
+     new Ada.Unchecked_Conversion (Varray_signed_int,
+                                   Varray_unsigned_int);
+
+   function To_Varray_unsigned_int is
+     new Ada.Unchecked_Conversion (Varray_bool_int,
+                                   Varray_unsigned_int);
+
+   function To_Varray_unsigned_int is
+      new Ada.Unchecked_Conversion (Varray_float,
+                                    Varray_unsigned_int);
+
+   function To_Varray_signed_char is
+     new Ada.Unchecked_Conversion (Varray_unsigned_char,
+                                   Varray_signed_char);
+
+   function To_Varray_bool_char is
+     new Ada.Unchecked_Conversion (Varray_unsigned_char,
+                                   Varray_bool_char);
+
+   function To_Varray_signed_short is
+     new Ada.Unchecked_Conversion (Varray_unsigned_short,
+                                   Varray_signed_short);
+
+   function To_Varray_bool_short is
+     new Ada.Unchecked_Conversion (Varray_unsigned_short,
+                                   Varray_bool_short);
+
+   function To_Varray_pixel is
+     new Ada.Unchecked_Conversion (Varray_unsigned_short,
+                                   Varray_pixel);
+
+   function To_Varray_signed_int is
+     new Ada.Unchecked_Conversion (Varray_unsigned_int,
+                                   Varray_signed_int);
+
+   function To_Varray_bool_int is
+     new Ada.Unchecked_Conversion (Varray_unsigned_int,
+                                   Varray_bool_int);
+
+   function To_Varray_float is
+     new Ada.Unchecked_Conversion (Varray_unsigned_int,
+                                   Varray_float);
+
+   function To_VUC is new Ada.Unchecked_Conversion (VUC_View, VUC);
+   function To_VSC is new Ada.Unchecked_Conversion (VSC_View, VSC);
+   function To_VBC is new Ada.Unchecked_Conversion (VBC_View, VBC);
+   function To_VUS is new Ada.Unchecked_Conversion (VUS_View, VUS);
+   function To_VSS is new Ada.Unchecked_Conversion (VSS_View, VSS);
+   function To_VBS is new Ada.Unchecked_Conversion (VBS_View, VBS);
+   function To_VUI is new Ada.Unchecked_Conversion (VUI_View, VUI);
+   function To_VSI is new Ada.Unchecked_Conversion (VSI_View, VSI);
+   function To_VBI is new Ada.Unchecked_Conversion (VBI_View, VBI);
+   function To_VF  is new Ada.Unchecked_Conversion (VF_View,  VF);
+   function To_VP  is new Ada.Unchecked_Conversion (VP_View,  VP);
+
+   function To_VUC_View is new Ada.Unchecked_Conversion (VUC, VUC_View);
+   function To_VSC_View is new Ada.Unchecked_Conversion (VSC, VSC_View);
+   function To_VBC_View is new Ada.Unchecked_Conversion (VBC, VBC_View);
+   function To_VUS_View is new Ada.Unchecked_Conversion (VUS, VUS_View);
+   function To_VSS_View is new Ada.Unchecked_Conversion (VSS, VSS_View);
+   function To_VBS_View is new Ada.Unchecked_Conversion (VBS, VBS_View);
+   function To_VUI_View is new Ada.Unchecked_Conversion (VUI, VUI_View);
+   function To_VSI_View is new Ada.Unchecked_Conversion (VSI, VSI_View);
+   function To_VBI_View is new Ada.Unchecked_Conversion (VBI, VBI_View);
+   function To_VF_View  is new Ada.Unchecked_Conversion (VF,  VF_View);
+   function To_VP_View  is new Ada.Unchecked_Conversion (VP,  VP_View);
+
+   pragma Warnings (Off, Default_Bit_Order);
+
+   ---------------
+   -- To_Vector --
+   ---------------
+
+   function To_Vector (S : VSC_View) return VSC is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VSC (S);
+      else
+         declare
+            Result : LL_VUC;
+            VS     : constant VUC_View :=
+                       (Values => To_Varray_unsigned_char (S.Values));
+         begin
+            Result := To_Vector (VS);
+            return To_LL_VSC (Result);
+         end;
+      end if;
+   end To_Vector;
+
+   function To_Vector (S : VBC_View) return VBC is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VBC (S);
+      else
+         declare
+            Result : LL_VUC;
+            VS     : constant VUC_View :=
+                       (Values => To_Varray_unsigned_char (S.Values));
+         begin
+            Result := To_Vector (VS);
+            return To_LL_VBC (Result);
+         end;
+      end if;
+   end To_Vector;
+
+   function To_Vector (S : VSS_View) return VSS is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VSS (S);
+      else
+         declare
+            Result : LL_VUS;
+            VS     : constant VUS_View :=
+                       (Values => To_Varray_unsigned_short (S.Values));
+         begin
+            Result := To_Vector (VS);
+            return VSS (To_LL_VSS (Result));
+         end;
+      end if;
+   end To_Vector;
+
+   function To_Vector (S : VBS_View) return VBS is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VBS (S);
+      else
+         declare
+            Result : LL_VUS;
+            VS     : constant VUS_View :=
+                       (Values => To_Varray_unsigned_short (S.Values));
+         begin
+            Result := To_Vector (VS);
+            return To_LL_VBS (Result);
+         end;
+      end if;
+   end To_Vector;
+
+   function To_Vector (S : VP_View) return VP is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VP (S);
+      else
+         declare
+            Result : LL_VUS;
+            VS     : constant VUS_View :=
+                       (Values => To_Varray_unsigned_short (S.Values));
+         begin
+            Result := To_Vector (VS);
+            return To_LL_VP (Result);
+         end;
+      end if;
+   end To_Vector;
+
+   function To_Vector (S : VSI_View) return VSI is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VSI (S);
+      else
+         declare
+            Result : LL_VUI;
+            VS     : constant VUI_View :=
+                       (Values => To_Varray_unsigned_int (S.Values));
+         begin
+            Result := To_Vector (VS);
+            return To_LL_VSI (Result);
+         end;
+      end if;
+   end To_Vector;
+
+   function To_Vector (S : VBI_View) return VBI is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VBI (S);
+      else
+         declare
+            Result : LL_VUI;
+            VS     : constant VUI_View :=
+                       (Values => To_Varray_unsigned_int (S.Values));
+         begin
+            Result := To_Vector (VS);
+            return To_LL_VBI (Result);
+         end;
+      end if;
+   end To_Vector;
+
+   function To_Vector (S : VF_View) return VF is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VF (S);
+      else
+         declare
+            Result : LL_VUI;
+            VS     : constant VUI_View :=
+                       (Values => To_Varray_unsigned_int (S.Values));
+         begin
+            Result := To_Vector (VS);
+            return To_LL_VF (Result);
+         end;
+      end if;
+   end To_Vector;
+
+   function To_Vector (S : VUC_View) return VUC is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VUC (S);
+      else
+         declare
+            Result : VUC_View;
+         begin
+            for J in Vchar_Range'Range loop
+               Result.Values (J) :=
+                 S.Values (Vchar_Range'Last - J + Vchar_Range'First);
+            end loop;
+            return To_VUC (Result);
+         end;
+      end if;
+   end To_Vector;
+
+   function To_Vector (S : VUS_View) return VUS is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VUS (S);
+      else
+         declare
+            Result : VUS_View;
+         begin
+            for J in Vshort_Range'Range loop
+               Result.Values (J) :=
+                 S.Values (Vshort_Range'Last - J + Vshort_Range'First);
+            end loop;
+            return To_VUS (Result);
+         end;
+      end if;
+   end To_Vector;
+
+   function To_Vector (S : VUI_View) return VUI is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VUI (S);
+      else
+         declare
+            Result : VUI_View;
+         begin
+            for J in Vint_Range'Range loop
+               Result.Values (J) :=
+                 S.Values (Vint_Range'Last - J + Vint_Range'First);
+            end loop;
+            return To_VUI (Result);
+         end;
+      end if;
+   end To_Vector;
+
+   --------------
+   -- To_View --
+   --------------
+
+   function To_View (S : VSC) return VSC_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VSC_View (S);
+      else
+         declare
+            Result : VUC_View;
+         begin
+            Result := To_View (To_LL_VUC (S));
+            return (Values => To_Varray_signed_char (Result.Values));
+         end;
+      end if;
+   end To_View;
+
+   function To_View (S : VBC) return VBC_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VBC_View (S);
+      else
+         declare
+            Result : VUC_View;
+         begin
+            Result := To_View (To_LL_VUC (S));
+            return (Values => To_Varray_bool_char (Result.Values));
+         end;
+      end if;
+   end To_View;
+
+   function To_View (S : VSS) return VSS_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VSS_View (S);
+      else
+         declare
+            Result : VUS_View;
+         begin
+            Result := To_View (To_LL_VUS (S));
+            return (Values => To_Varray_signed_short (Result.Values));
+         end;
+      end if;
+   end To_View;
+
+   function To_View (S : VBS) return VBS_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VBS_View (S);
+      else
+         declare
+            Result : VUS_View;
+         begin
+            Result := To_View (To_LL_VUS (S));
+            return (Values => To_Varray_bool_short (Result.Values));
+         end;
+      end if;
+   end To_View;
+
+   function To_View (S : VP) return VP_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VP_View (S);
+      else
+         declare
+            Result : VUS_View;
+         begin
+            Result := To_View (To_LL_VUS (S));
+            return (Values => To_Varray_pixel (Result.Values));
+         end;
+      end if;
+   end To_View;
+
+   function To_View (S : VSI) return VSI_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VSI_View (S);
+      else
+         declare
+            Result : VUI_View;
+         begin
+            Result := To_View (To_LL_VUI (S));
+            return (Values => To_Varray_signed_int (Result.Values));
+         end;
+      end if;
+   end To_View;
+
+   function To_View (S : VBI) return VBI_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VBI_View (S);
+      else
+         declare
+            Result : VUI_View;
+         begin
+            Result := To_View (To_LL_VUI (S));
+            return (Values => To_Varray_bool_int (Result.Values));
+         end;
+      end if;
+   end To_View;
+
+   function To_View (S : VF) return VF_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VF_View (S);
+      else
+         declare
+            Result : VUI_View;
+         begin
+            Result := To_View (To_LL_VUI (S));
+            return (Values => To_Varray_float (Result.Values));
+         end;
+      end if;
+   end To_View;
+
+   function To_View (S : VUC) return VUC_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VUC_View (S);
+      else
+         declare
+            VS     : constant VUC_View := To_VUC_View (S);
+            Result : VUC_View;
+         begin
+            for J in Vchar_Range'Range loop
+               Result.Values (J) :=
+                 VS.Values (Vchar_Range'Last - J + Vchar_Range'First);
+            end loop;
+            return Result;
+         end;
+      end if;
+   end To_View;
+
+   function To_View (S : VUS) return VUS_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VUS_View (S);
+      else
+         declare
+            VS     : constant VUS_View := To_VUS_View (S);
+            Result : VUS_View;
+         begin
+            for J in Vshort_Range'Range loop
+               Result.Values (J) :=
+                 VS.Values (Vshort_Range'Last - J + Vshort_Range'First);
+            end loop;
+            return Result;
+         end;
+      end if;
+   end To_View;
+
+   function To_View (S : VUI) return VUI_View is
+   begin
+      if Default_Bit_Order = High_Order_First then
+         return To_VUI_View (S);
+      else
+         declare
+            VS     : constant VUI_View := To_VUI_View (S);
+            Result : VUI_View;
+         begin
+            for J in Vint_Range'Range loop
+               Result.Values (J) :=
+                 VS.Values (Vint_Range'Last - J + Vint_Range'First);
+            end loop;
+            return Result;
+         end;
+      end if;
+   end To_View;
+
+end GNAT.Altivec.Conversions;
diff --git a/gcc/ada/g-altcon.ads b/gcc/ada/g-altcon.ads
new file mode 100644 (file)
index 0000000..d32ac8a
--- /dev/null
@@ -0,0 +1,103 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--             G N A T . A L T I V E C . C O N V E R S I O N S              --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--            Copyright (C) 2005, Free Software Foundation, Inc.            --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This unit provides the Vector/Views conversions
+
+with GNAT.Altivec.Vector_Types; use GNAT.Altivec.Vector_Types;
+with GNAT.Altivec.Vector_Views; use GNAT.Altivec.Vector_Views;
+
+package GNAT.Altivec.Conversions is
+
+   ---------------------
+   -- char components --
+   ---------------------
+
+   function To_Vector (S : VUC_View) return VUC;
+   function To_Vector (S : VSC_View) return VSC;
+   function To_Vector (S : VBC_View) return VBC;
+
+   function To_View (S : VUC) return VUC_View;
+   function To_View (S : VSC) return VSC_View;
+   function To_View (S : VBC) return VBC_View;
+
+   ----------------------
+   -- short components --
+   ----------------------
+
+   function To_Vector (S : VUS_View) return VUS;
+   function To_Vector (S : VSS_View) return VSS;
+   function To_Vector (S : VBS_View) return VBS;
+
+   function To_View (S : VUS) return VUS_View;
+   function To_View (S : VSS) return VSS_View;
+   function To_View (S : VBS) return VBS_View;
+
+   --------------------
+   -- int components --
+   --------------------
+
+   function To_Vector (S : VUI_View) return VUI;
+   function To_Vector (S : VSI_View) return VSI;
+   function To_Vector (S : VBI_View) return VBI;
+
+   function To_View (S : VUI) return VUI_View;
+   function To_View (S : VSI) return VSI_View;
+   function To_View (S : VBI) return VBI_View;
+
+   ----------------------
+   -- float components --
+   ----------------------
+
+   function To_Vector (S : VF_View) return VF;
+
+   function To_View (S : VF) return VF_View;
+
+   ----------------------
+   -- pixel components --
+   ----------------------
+
+   function To_Vector (S : VP_View) return VP;
+
+   function To_View (S : VP) return VP_View;
+
+private
+
+   --  We want the above subprograms to always be inlined in the case of the
+   --  hard PowerPC AltiVec support in order to avoid the unnecessary function
+   --  call. On the other hand there is no problem with inlining these
+   --  subprograms on little-endian targets.
+
+   pragma Inline_Always (To_Vector);
+   pragma Inline_Always (To_View);
+
+end GNAT.Altivec.Conversions;
diff --git a/gcc/ada/g-altive.ads b/gcc/ada/g-altive.ads
new file mode 100644 (file)
index 0000000..4cb82ed
--- /dev/null
@@ -0,0 +1,455 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--                         G N A T . A L T I V E C                          --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 2004-2005, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+-------------------------
+-- General description --
+-------------------------
+
+--  This is the root of a package hierarchy offering an Ada binding to the
+--  PowerPC AltiVec extensions. These extensions basically consist in a set of
+--  128bit vector types together with a set of subprograms operating on such
+--  vectors. On a real Altivec capable target, vector objects map to hardware
+--  vector registers and the subprograms map to a set of specific hardware
+--  instructions.
+
+--  Relevant documents are:
+
+--  o AltiVec Technology, Programming Interface Manual (1999-06)
+--    to which we will refer as [PIM], describes the data types, the
+--    functional interface and the ABI conventions.
+
+--  o AltiVec Technology, Programming Environments Manual (2002-02)
+--    to which we will refer as [PEM], describes the hardware architecture
+--    and instruction set.
+
+--  These documents, as well as a number of others of general interest on the
+--  AltiVec technology, are available from the Motorola/AltiVec Web site at
+
+--  http://www.motorola.com/altivec
+
+--  We offer two versions of this binding: one for real AltiVec capable
+--  targets, and one for other targets. In the latter case, everything is
+--  emulated in software. We will refer to the two bindings as:
+
+--  o The Hard binding for AltiVec capable targets (with the appropriate
+--    hardware support and corresponding instruction set)
+
+--  o The Soft binding for other targets (with the low level primitives
+--    emulated in software).
+
+--  The two versions of the binding are expected to be equivalent from the
+--  functional standpoint. The same client application code should observe no
+--  difference in operation results, even if the Soft version is used on a
+--  non-powerpc target. The Hard binding is naturally expected to run faster
+--  than the Soft version on the same target.
+
+--  We also offer interfaces not strictly part of the base AltiVec API, such
+--  as vector conversions to/from array representations, which are of interest
+--  for client applications (e.g. for vector initialization purposes) and may
+--  also be used as implementation facilities.
+
+-----------------------------------------
+-- General package architecture survey --
+-----------------------------------------
+
+--  The various vector representations are all "containers" of elementary
+--  values, the possible types of which are declared in this root package to
+--  be generally accessible.
+
+--  From the user standpoint, the two versions of the binding are available
+--  through a consistent hierarchy of units providing identical services:
+
+--                             GNAT.Altivec
+--                           (component types)
+--                                   |
+--          o----------------o----------------o-------------o
+--          |                |                |             |
+--    Vector_Types   Vector_Operations   Vector_Views   Conversions
+
+--  The user can manipulate vectors through two families of types: Vector
+--  types and View types.
+
+--  Vector types are defined in the GNAT.Altivec.Vector_Types package
+
+--  On these types, the user can apply the Altivec operations defined in
+--  GNAT.Altivec.Vector_Operations. Their layout is opaque and may vary across
+--  configurations, for it is typically target-endianness dependant.
+
+--  Vector_Types and Vector_Operations implement the core binding to the
+--  AltiVec API, as described in [PIM-2.1 data types] and [PIM-4 AltiVec
+--  operations and predicates].
+
+--  View types are defined in the GNAT.Altivec.Vector_Views package
+
+--  These types do not represent Altivec vectors per se, in the sense that the
+--  Altivec_Operations are not available for them. They are intended to allow
+--  Vector initializations as well as access to the Vector component values.
+
+--  The GNAT.Altivec.Conversions package is provided to convert a View to the
+--  corresponding Vector and vice-versa.
+
+--  The two versions of the binding rely on a low level internal interface,
+--  and switching from one version to the other amounts to select one low
+--  level implementation instead of the other.
+
+--  The bindings are provided as a set of sources together with a project file
+--  (altivec.gpr). The hard/soft binding selection is controlled by a project
+--  variable on targets where switching makes sense. See the example usage
+--  section below.
+
+---------------------------
+-- Underlying principles --
+---------------------------
+
+--  The general organization sketched above has been devised from a number
+--  of driving ideas:
+
+--  o From the clients standpoint, the two versions of the binding should be
+--    as easily exchangable as possible,
+
+--  o From the maintenance standpoint, we want to avoid as much code
+--    duplication as possible.
+
+--  o From both standpoints above, we want to maintain a clear interface
+--    separation between the base bindings to the Motorola API and the
+--    additional facilities.
+
+--  The identification of the low level interface is directly inspired by the
+--  the base API organization, basically consisting of a rich set of functions
+--  around a core of low level primitives mapping to AltiVec instructions.
+
+--  See for instance "vec_add" in [PIM-4.4 Generic and Specific AltiVec
+--  operations]: no less than six result/arguments combinations of byte vector
+--  types map to "vaddubm".
+
+--  The "hard" version of the low level primitives map to real AltiVec
+--  instructions via the corresponding GCC builtins. The "soft" version is
+--  a software emulation of those.
+
+-------------------
+-- Example usage --
+-------------------
+
+--  Here is a sample program declaring and initializing two vectors, 'add'ing
+--  them and displaying the result components:
+
+--  with GNAT.Altivec.Vector_Types;      use GNAT.Altivec.Vector_Types;
+--  with GNAT.Altivec.Vector_Operations; use GNAT.Altivec.Vector_Operations;
+--  with GNAT.Altivec.Vector_Views;      use GNAT.Altivec.Vector_Views;
+--  with GNAT.Altivec.Conversions;       use GNAT.Altivec.Conversions;
+
+--  use GNAT.Altivec;
+
+--  procedure Sample is
+--     Va : Vector_Unsigned_Int := To_Vector ((Values => (1, 2, 3, 4)));
+--     Vb : Vector_Unsigned_Int := To_Vector ((Values => (1, 2, 3, 4)));
+
+--     Vs : Vector_Unsigned_Int;
+--     Vs_View : VUI_View;
+--  begin
+--     Vs := Vec_Add (Va, Vb);
+--     Vs_View := To_View (Vs);
+
+--     for I in Vs_View.Values'Range loop
+--        Put_Line (Unsigned_Int'Image (Vs_View.Values (I)));
+--     end loop;
+--  end;
+
+--  This currently requires the GNAT project management facilities to compile,
+--  to automatically retrieve the set of necessary sources and switches
+--  depending on your configuration. For the example above, customizing the
+--  switches to include -g also, this would be something like:
+
+--  sample.gpr
+--
+--  with "altivec.gpr";
+--
+--  project Sample is
+
+--    for Source_Dirs use (".");
+--    for Main use ("sample");
+
+--    package Compiler is
+--       for Default_Switches ("Ada") use
+--           Altivec.Compiler'Default_Switches ("Ada") & "-g";
+--    end Compiler;
+
+--  end Sample;
+
+--  $ gnatmake -Psample
+--  [...]
+--  $ ./sample
+--  2
+--  4
+--  6
+--  8
+
+------------------------------------------------------------------------------
+
+with System;
+
+package GNAT.Altivec is
+
+   --  Definitions of constants and vector/array component types common to all
+   --  the versions of the binding.
+
+   --  All the vector types are 128bits
+
+   VECTOR_BIT : constant := 128;
+
+   -------------------------------------------
+   -- [PIM-2.3.1 Alignment of vector types] --
+   -------------------------------------------
+
+   --  "A defined data item of any vector data type in memory is always
+   --  aligned on a 16-byte boundary. A pointer to any vector data type always
+   --  points to a 16-byte boundary. The compiler is responsible for aligning
+   --  vector data types on 16-byte boundaries."
+
+   VECTOR_ALIGNMENT : constant := 16;
+
+   -------------------------------------------------------
+   -- [PIM-2.1] Data Types - Interpretation of contents --
+   -------------------------------------------------------
+
+   ---------------------
+   -- char components --
+   ---------------------
+
+   CHAR_BIT    : constant := 8;
+   SCHAR_MIN   : constant := -2 ** (CHAR_BIT - 1);
+   SCHAR_MAX   : constant := 2 ** (CHAR_BIT - 1) - 1;
+   UCHAR_MAX   : constant := 2 ** CHAR_BIT - 1;
+
+   type unsigned_char is mod UCHAR_MAX + 1;
+   for unsigned_char'Size use CHAR_BIT;
+
+   type signed_char is range SCHAR_MIN .. SCHAR_MAX;
+   for signed_char'Size use CHAR_BIT;
+
+   subtype bool_char is unsigned_char;
+   --  ??? There is a difference here between what the Altivec Technology
+   --  Programming Interface Manual says and what GCC says. In the manual,
+   --  vector_bool_char is a vector_unsigned_char, while in altivec.h it
+   --  is a vector_signed_char.
+
+   bool_char_True  : constant bool_char := bool_char'Last;
+   bool_char_False : constant bool_char := 0;
+
+   ----------------------
+   -- short components --
+   ----------------------
+
+   SHORT_BIT   : constant := 16;
+   SSHORT_MIN  : constant := -2 ** (SHORT_BIT - 1);
+   SSHORT_MAX  : constant := 2 ** (SHORT_BIT - 1) - 1;
+   USHORT_MAX  : constant := 2 ** SHORT_BIT - 1;
+
+   type unsigned_short is mod USHORT_MAX + 1;
+   for unsigned_short'Size use SHORT_BIT;
+
+   subtype unsigned_short_int is unsigned_short;
+
+   type signed_short is range SSHORT_MIN .. SSHORT_MAX;
+   for signed_short'Size use SHORT_BIT;
+
+   subtype signed_short_int is signed_short;
+
+   subtype bool_short is unsigned_short;
+   --  ??? See bool_char
+
+   bool_short_True  : constant bool_short := bool_short'Last;
+   bool_short_False : constant bool_short := 0;
+
+   subtype bool_short_int is bool_short;
+
+   --------------------
+   -- int components --
+   --------------------
+
+   INT_BIT     : constant := 32;
+   SINT_MIN    : constant := -2 ** (INT_BIT - 1);
+   SINT_MAX    : constant := 2 ** (INT_BIT - 1) - 1;
+   UINT_MAX    : constant := 2 ** INT_BIT - 1;
+
+   type unsigned_int is mod UINT_MAX + 1;
+   for unsigned_int'Size use INT_BIT;
+
+   type signed_int is range SINT_MIN .. SINT_MAX;
+   for signed_int'Size use INT_BIT;
+
+   subtype bool_int is unsigned_int;
+   --  ??? See bool_char
+
+   bool_int_True  : constant bool_int := bool_int'Last;
+   bool_int_False : constant bool_int := 0;
+
+   ----------------------
+   -- float components --
+   ----------------------
+
+   FLOAT_BIT   : constant := 32;
+   FLOAT_DIGIT : constant := 6;
+   FLOAT_MIN   : constant := -16#0.FFFF_FF#E+32;
+   FLOAT_MAX   : constant := 16#0.FFFF_FF#E+32;
+
+   type C_float is digits FLOAT_DIGIT range FLOAT_MIN .. FLOAT_MAX;
+   for C_float'Size use FLOAT_BIT;
+
+   ----------------------
+   -- pixel components --
+   ----------------------
+
+   subtype pixel is unsigned_short;
+
+   -----------------------------------------------------------
+   -- Subtypes for variants found in the GCC implementation --
+   -----------------------------------------------------------
+
+   subtype c_int is signed_int;
+   subtype c_short is c_int;
+
+   LONG_BIT  : constant := 32;
+   --  Some of the GCC builtins are built with "long" arguments and
+   --  expect SImode to come in.
+
+   SLONG_MIN : constant := -2 ** (LONG_BIT - 1);
+   SLONG_MAX : constant :=  2 ** (LONG_BIT - 1) - 1;
+   ULONG_MAX : constant :=  2 ** LONG_BIT - 1;
+
+   type signed_long   is range SLONG_MIN .. SLONG_MAX;
+   type unsigned_long is mod ULONG_MAX + 1;
+
+   subtype c_long is signed_long;
+
+   subtype c_ptr is System.Address;
+
+   ---------------------------------------------------------
+   -- Access types, for the sake of some argument passing --
+   ---------------------------------------------------------
+
+   type signed_char_ptr    is access all signed_char;
+   type unsigned_char_ptr  is access all unsigned_char;
+
+   type short_ptr          is access all c_short;
+   type signed_short_ptr   is access all signed_short;
+   type unsigned_short_ptr is access all unsigned_short;
+
+   type int_ptr            is access all c_int;
+   type signed_int_ptr     is access all signed_int;
+   type unsigned_int_ptr   is access all unsigned_int;
+
+   type long_ptr           is access all c_long;
+   type signed_long_ptr    is access all signed_long;
+   type unsigned_long_ptr  is access all unsigned_long;
+
+   type float_ptr          is access all Float;
+
+   --
+
+   type const_signed_char_ptr    is access constant signed_char;
+   type const_unsigned_char_ptr  is access constant unsigned_char;
+
+   type const_short_ptr          is access constant c_short;
+   type const_signed_short_ptr   is access constant signed_short;
+   type const_unsigned_short_ptr is access constant unsigned_short;
+
+   type const_int_ptr            is access constant c_int;
+   type const_signed_int_ptr     is access constant signed_int;
+   type const_unsigned_int_ptr   is access constant unsigned_int;
+
+   type const_long_ptr           is access constant c_long;
+   type const_signed_long_ptr    is access constant signed_long;
+   type const_unsigned_long_ptr  is access constant unsigned_long;
+
+   type const_float_ptr          is access constant Float;
+
+   --  Access to const volatile arguments need specialized types
+
+   type volatile_float is new Float;
+   pragma Volatile (volatile_float);
+
+   type volatile_signed_char is new signed_char;
+   pragma Volatile (volatile_signed_char);
+
+   type volatile_unsigned_char is new unsigned_char;
+   pragma Volatile (volatile_unsigned_char);
+
+   type volatile_signed_short is new signed_short;
+   pragma Volatile (volatile_signed_short);
+
+   type volatile_unsigned_short is new unsigned_short;
+   pragma Volatile (volatile_unsigned_short);
+
+   type volatile_signed_int is new signed_int;
+   pragma Volatile (volatile_signed_int);
+
+   type volatile_unsigned_int is new unsigned_int;
+   pragma Volatile (volatile_unsigned_int);
+
+   type volatile_signed_long is new signed_long;
+   pragma Volatile (volatile_signed_long);
+
+   type volatile_unsigned_long is new unsigned_long;
+   pragma Volatile (volatile_unsigned_long);
+
+   type constv_char_ptr           is access constant volatile_signed_char;
+   type constv_signed_char_ptr    is access constant volatile_signed_char;
+   type constv_unsigned_char_ptr  is access constant volatile_unsigned_char;
+
+   type constv_short_ptr          is access constant volatile_signed_short;
+   type constv_signed_short_ptr   is access constant volatile_signed_short;
+   type constv_unsigned_short_ptr is access constant volatile_unsigned_short;
+
+   type constv_int_ptr            is access constant volatile_signed_int;
+   type constv_signed_int_ptr     is access constant volatile_signed_int;
+   type constv_unsigned_int_ptr   is access constant volatile_unsigned_int;
+
+   type constv_long_ptr           is access constant volatile_signed_long;
+   type constv_signed_long_ptr    is access constant volatile_signed_long;
+   type constv_unsigned_long_ptr  is access constant volatile_unsigned_long;
+
+   type constv_float_ptr  is access constant volatile_float;
+
+private
+
+   -----------------------
+   -- Various constants --
+   -----------------------
+
+   CR6_EQ     : constant := 0;
+   CR6_EQ_REV : constant := 1;
+   CR6_LT     : constant := 2;
+   CR6_LT_REV : constant := 3;
+
+end GNAT.Altivec;
diff --git a/gcc/ada/g-alveop.adb b/gcc/ada/g-alveop.adb
new file mode 100644 (file)
index 0000000..62e0b17
--- /dev/null
@@ -0,0 +1,9704 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--       G N A T . A L T I V E C . V E C T O R _ O P E R A T I O N S        --
+--                                                                          --
+--                                 B o d y                                  --
+--                                                                          --
+--           Copyright (C) 2004-2005, Free Software Foundation, Inc.        --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with GNAT.Altivec.Low_Level_Vectors; use GNAT.Altivec.Low_Level_Vectors;
+
+package body GNAT.Altivec.Vector_Operations is
+
+   --------------------------------------------------------
+   -- Bodies for generic and specific Altivec operations --
+   --------------------------------------------------------
+
+   -- vec_abs --
+
+   function vec_abs
+     (A : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (abs_v16qi (A));
+   end vec_abs;
+
+   function vec_abs
+     (A : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (abs_v8hi (A));
+   end vec_abs;
+
+   function vec_abs
+     (A : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (abs_v4si (A));
+   end vec_abs;
+
+   function vec_abs
+     (A : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (abs_v4sf (A));
+   end vec_abs;
+
+   -- vec_abss --
+
+   function vec_abss
+     (A : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (abss_v16qi (A));
+   end vec_abss;
+
+   function vec_abss
+     (A : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (abss_v8hi (A));
+   end vec_abss;
+
+   function vec_abss
+     (A : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (abss_v4si (A));
+   end vec_abss;
+
+   -- vec_add --
+
+   function vec_add
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_add;
+
+   function vec_add
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF  (vaddfp (To_LL_VF  (A), To_LL_VF  (B)));
+   end vec_add;
+
+   -- vec_vaddfp --
+
+   function vec_vaddfp
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF  (vaddfp (To_LL_VF  (A), To_LL_VF  (B)));
+   end vec_vaddfp;
+
+   -- vec_vadduwm --
+
+   function vec_vadduwm
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vadduwm;
+
+   function vec_vadduwm
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vadduwm;
+
+   function vec_vadduwm
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vadduwm;
+
+   function vec_vadduwm
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vadduwm;
+
+   function vec_vadduwm
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vadduwm;
+
+   function vec_vadduwm
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vadduwm;
+
+   -- vec_vadduhm --
+
+   function vec_vadduhm
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vadduhm;
+
+   function vec_vadduhm
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vadduhm;
+
+   function vec_vadduhm
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vadduhm;
+
+   function vec_vadduhm
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vadduhm;
+
+   function vec_vadduhm
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vadduhm;
+
+   function vec_vadduhm
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vadduhm;
+
+   -- vec_vaddubm --
+
+   function vec_vaddubm
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddubm;
+
+   function vec_vaddubm
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddubm;
+
+   function vec_vaddubm
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddubm;
+
+   function vec_vaddubm
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddubm;
+
+   function vec_vaddubm
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddubm;
+
+   function vec_vaddubm
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddubm;
+
+   -- vec_addc --
+
+   function vec_addc
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vaddcuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_addc;
+
+   -- vec_adds --
+
+   function vec_adds
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vaddshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vaddshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vaddshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vaddsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vaddsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_adds;
+
+   function vec_adds
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vaddsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_adds;
+
+   -- vec_vaddsws --
+
+   function vec_vaddsws
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vaddsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vaddsws;
+
+   function vec_vaddsws
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vaddsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vaddsws;
+
+   function vec_vaddsws
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vaddsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vaddsws;
+
+   -- vec_vadduws --
+
+   function vec_vadduws
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vadduws;
+
+   function vec_vadduws
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vadduws;
+
+   function vec_vadduws
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vadduws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vadduws;
+
+   -- vec_vaddshs --
+
+   function vec_vaddshs
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vaddshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vaddshs;
+
+   function vec_vaddshs
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vaddshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vaddshs;
+
+   function vec_vaddshs
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vaddshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vaddshs;
+
+   -- vec_vadduhs --
+
+   function vec_vadduhs
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vadduhs;
+
+   function vec_vadduhs
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vadduhs;
+
+   function vec_vadduhs
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vadduhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vadduhs;
+
+   -- vec_vaddsbs --
+
+   function vec_vaddsbs
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddsbs;
+
+   function vec_vaddsbs
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddsbs;
+
+   function vec_vaddsbs
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vaddsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddsbs;
+
+   -- vec_vaddubs --
+
+   function vec_vaddubs
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddubs;
+
+   function vec_vaddubs
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddubs;
+
+   function vec_vaddubs
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vaddubs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vaddubs;
+
+   -- vec_and --
+
+   function vec_and
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF  (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_float;
+      B : vector_bool_int) return vector_float
+   is
+   begin
+      return To_LL_VF  (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_bool_int;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF  (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   function vec_and
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vand (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_and;
+
+   -- vec_andc --
+
+   function vec_andc
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF  (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_float;
+      B : vector_bool_int) return vector_float
+   is
+   begin
+      return To_LL_VF  (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_bool_int;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF  (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   function vec_andc
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vandc (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_andc;
+
+   -- vec_avg --
+
+   function vec_avg
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vavgub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_avg;
+
+   function vec_avg
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vavgsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_avg;
+
+   function vec_avg
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vavguh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_avg;
+
+   function vec_avg
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vavgsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_avg;
+
+   function vec_avg
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vavguw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_avg;
+
+   function vec_avg
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vavgsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_avg;
+
+   -- vec_vavgsw --
+
+   function vec_vavgsw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vavgsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vavgsw;
+
+   -- vec_vavguw --
+
+   function vec_vavguw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vavguw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vavguw;
+
+   -- vec_vavgsh --
+
+   function vec_vavgsh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vavgsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vavgsh;
+
+   -- vec_vavguh --
+
+   function vec_vavguh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vavguh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vavguh;
+
+   -- vec_vavgsb --
+
+   function vec_vavgsb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vavgsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vavgsb;
+
+   -- vec_vavgub --
+
+   function vec_vavgub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vavgub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vavgub;
+
+   -- vec_ceil --
+
+   function vec_ceil
+     (A : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF  (vrfip (To_LL_VF  (A)));
+   end vec_ceil;
+
+   -- vec_cmpb --
+
+   function vec_cmpb
+     (A : vector_float;
+      B : vector_float) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vcmpbfp (To_LL_VF  (A), To_LL_VF  (B)));
+   end vec_cmpb;
+
+   -- vec_cmpeq --
+
+   function vec_cmpeq
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vcmpequb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_cmpeq;
+
+   function vec_cmpeq
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vcmpequb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_cmpeq;
+
+   function vec_cmpeq
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vcmpequh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_cmpeq;
+
+   function vec_cmpeq
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vcmpequh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_cmpeq;
+
+   function vec_cmpeq
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpequw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_cmpeq;
+
+   function vec_cmpeq
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpequw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_cmpeq;
+
+   function vec_cmpeq
+     (A : vector_float;
+      B : vector_float) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpeqfp (To_LL_VF  (A), To_LL_VF  (B)));
+   end vec_cmpeq;
+
+   -- vec_vcmpeqfp --
+
+   function vec_vcmpeqfp
+     (A : vector_float;
+      B : vector_float) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpeqfp (To_LL_VF  (A), To_LL_VF  (B)));
+   end vec_vcmpeqfp;
+
+   -- vec_vcmpequw --
+
+   function vec_vcmpequw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpequw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vcmpequw;
+
+   function vec_vcmpequw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpequw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vcmpequw;
+
+   -- vec_vcmpequh --
+
+   function vec_vcmpequh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vcmpequh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vcmpequh;
+
+   function vec_vcmpequh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vcmpequh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vcmpequh;
+
+   -- vec_vcmpequb --
+
+   function vec_vcmpequb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vcmpequb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vcmpequb;
+
+   function vec_vcmpequb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vcmpequb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vcmpequb;
+
+   -- vec_cmpge --
+
+   function vec_cmpge
+     (A : vector_float;
+      B : vector_float) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgefp (To_LL_VF  (A), To_LL_VF  (B)));
+   end vec_cmpge;
+
+   -- vec_cmpgt --
+
+   function vec_cmpgt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vcmpgtub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_cmpgt;
+
+   function vec_cmpgt
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vcmpgtsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_cmpgt;
+
+   function vec_cmpgt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vcmpgtuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_cmpgt;
+
+   function vec_cmpgt
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vcmpgtsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_cmpgt;
+
+   function vec_cmpgt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgtuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_cmpgt;
+
+   function vec_cmpgt
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgtsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_cmpgt;
+
+   function vec_cmpgt
+     (A : vector_float;
+      B : vector_float) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgtfp (To_LL_VF  (A), To_LL_VF  (B)));
+   end vec_cmpgt;
+
+   -- vec_vcmpgtfp --
+
+   function vec_vcmpgtfp
+     (A : vector_float;
+      B : vector_float) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgtfp (To_LL_VF  (A), To_LL_VF  (B)));
+   end vec_vcmpgtfp;
+
+   -- vec_vcmpgtsw --
+
+   function vec_vcmpgtsw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgtsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vcmpgtsw;
+
+   -- vec_vcmpgtuw --
+
+   function vec_vcmpgtuw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgtuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vcmpgtuw;
+
+   -- vec_vcmpgtsh --
+
+   function vec_vcmpgtsh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vcmpgtsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vcmpgtsh;
+
+   -- vec_vcmpgtuh --
+
+   function vec_vcmpgtuh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vcmpgtuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vcmpgtuh;
+
+   -- vec_vcmpgtsb --
+
+   function vec_vcmpgtsb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vcmpgtsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vcmpgtsb;
+
+   -- vec_vcmpgtub --
+
+   function vec_vcmpgtub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vcmpgtub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vcmpgtub;
+
+   -- vec_cmple --
+
+   function vec_cmple
+     (A : vector_float;
+      B : vector_float) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgefp (To_LL_VF  (B), To_LL_VF  (A)));
+   end vec_cmple;
+
+   -- vec_cmplt --
+
+   function vec_cmplt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vcmpgtub (To_LL_VSC (B), To_LL_VSC (A)));
+   end vec_cmplt;
+
+   function vec_cmplt
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vcmpgtsb (To_LL_VSC (B), To_LL_VSC (A)));
+   end vec_cmplt;
+
+   function vec_cmplt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vcmpgtuh (To_LL_VSS (B), To_LL_VSS (A)));
+   end vec_cmplt;
+
+   function vec_cmplt
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vcmpgtsh (To_LL_VSS (B), To_LL_VSS (A)));
+   end vec_cmplt;
+
+   function vec_cmplt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgtuw (To_LL_VSI (B), To_LL_VSI (A)));
+   end vec_cmplt;
+
+   function vec_cmplt
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgtsw (To_LL_VSI (B), To_LL_VSI (A)));
+   end vec_cmplt;
+
+   function vec_cmplt
+     (A : vector_float;
+      B : vector_float) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vcmpgtfp (To_LL_VF  (B), To_LL_VF  (A)));
+   end vec_cmplt;
+
+   -- vec_expte --
+
+   function vec_expte
+     (A : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vexptefp (To_LL_VF (A)));
+   end vec_expte;
+
+   -- vec_floor --
+
+   function vec_floor
+     (A : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vrfim (To_LL_VF (A)));
+   end vec_floor;
+
+   -- vec_ld --
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_float_ptr) return vector_float
+   is
+   begin
+      return To_LL_VF (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_float_ptr) return vector_float
+   is
+   begin
+      return To_LL_VF (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_bool_int_ptr) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_signed_int_ptr) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_int_ptr) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_long_ptr) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_unsigned_int_ptr) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_unsigned_int_ptr) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_unsigned_long_ptr) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_bool_short_ptr) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_pixel_ptr) return vector_pixel
+   is
+   begin
+      return To_LL_VP (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_signed_short_ptr) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_short_ptr) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_unsigned_short_ptr) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_unsigned_short_ptr) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_bool_char_ptr) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_signed_char_ptr) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_signed_char_ptr) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_unsigned_char_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   function vec_ld
+     (A : c_long;
+      B : const_unsigned_char_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvx (A, To_PTR (B)));
+   end vec_ld;
+
+   -- vec_lde --
+
+   function vec_lde
+     (A : c_long;
+      B : const_signed_char_ptr) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (lvebx (A, To_PTR (B)));
+   end vec_lde;
+
+   function vec_lde
+     (A : c_long;
+      B : const_unsigned_char_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvebx (A, To_PTR (B)));
+   end vec_lde;
+
+   function vec_lde
+     (A : c_long;
+      B : const_short_ptr) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (lvehx (A, To_PTR (B)));
+   end vec_lde;
+
+   function vec_lde
+     (A : c_long;
+      B : const_unsigned_short_ptr) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (lvehx (A, To_PTR (B)));
+   end vec_lde;
+
+   function vec_lde
+     (A : c_long;
+      B : const_float_ptr) return vector_float
+   is
+   begin
+      return To_LL_VF (lvewx (A, To_PTR (B)));
+   end vec_lde;
+
+   function vec_lde
+     (A : c_long;
+      B : const_int_ptr) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (lvewx (A, To_PTR (B)));
+   end vec_lde;
+
+   function vec_lde
+     (A : c_long;
+      B : const_unsigned_int_ptr) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (lvewx (A, To_PTR (B)));
+   end vec_lde;
+
+   function vec_lde
+     (A : c_long;
+      B : const_long_ptr) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (lvewx (A, To_PTR (B)));
+   end vec_lde;
+
+   function vec_lde
+     (A : c_long;
+      B : const_unsigned_long_ptr) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (lvewx (A, To_PTR (B)));
+   end vec_lde;
+
+   -- vec_lvewx --
+
+   function vec_lvewx
+     (A : c_long;
+      B : float_ptr) return vector_float
+   is
+   begin
+      return To_LL_VF (lvewx (A, To_PTR (B)));
+   end vec_lvewx;
+
+   function vec_lvewx
+     (A : c_long;
+      B : int_ptr) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (lvewx (A, To_PTR (B)));
+   end vec_lvewx;
+
+   function vec_lvewx
+     (A : c_long;
+      B : unsigned_int_ptr) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (lvewx (A, To_PTR (B)));
+   end vec_lvewx;
+
+   function vec_lvewx
+     (A : c_long;
+      B : long_ptr) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (lvewx (A, To_PTR (B)));
+   end vec_lvewx;
+
+   function vec_lvewx
+     (A : c_long;
+      B : unsigned_long_ptr) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (lvewx (A, To_PTR (B)));
+   end vec_lvewx;
+
+   -- vec_lvehx --
+
+   function vec_lvehx
+     (A : c_long;
+      B : short_ptr) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (lvehx (A, To_PTR (B)));
+   end vec_lvehx;
+
+   function vec_lvehx
+     (A : c_long;
+      B : unsigned_short_ptr) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (lvehx (A, To_PTR (B)));
+   end vec_lvehx;
+
+   -- vec_lvebx --
+
+   function vec_lvebx
+     (A : c_long;
+      B : signed_char_ptr) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (lvebx (A, To_PTR (B)));
+   end vec_lvebx;
+
+   function vec_lvebx
+     (A : c_long;
+      B : unsigned_char_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvebx (A, To_PTR (B)));
+   end vec_lvebx;
+
+   -- vec_ldl --
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_float_ptr) return vector_float
+   is
+   begin
+      return To_LL_VF (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_float_ptr) return vector_float
+   is
+   begin
+      return To_LL_VF (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_bool_int_ptr) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_signed_int_ptr) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_int_ptr) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_long_ptr) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_unsigned_int_ptr) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_unsigned_int_ptr) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_unsigned_long_ptr) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_bool_short_ptr) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_pixel_ptr) return vector_pixel
+   is
+   begin
+      return To_LL_VP (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_signed_short_ptr) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_short_ptr) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_unsigned_short_ptr) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_unsigned_short_ptr) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_bool_char_ptr) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_signed_char_ptr) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_signed_char_ptr) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_unsigned_char_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_unsigned_char_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvxl (A, To_PTR (B)));
+   end vec_ldl;
+
+   -- vec_loge --
+
+   function vec_loge
+     (A : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vlogefp (To_LL_VF (A)));
+   end vec_loge;
+
+   -- vec_lvsl --
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_unsigned_char_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsl (A, To_PTR (B)));
+   end vec_lvsl;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_signed_char_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsl (A, To_PTR (B)));
+   end vec_lvsl;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_unsigned_short_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsl (A, To_PTR (B)));
+   end vec_lvsl;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_short_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsl (A, To_PTR (B)));
+   end vec_lvsl;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_unsigned_int_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsl (A, To_PTR (B)));
+   end vec_lvsl;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_int_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsl (A, To_PTR (B)));
+   end vec_lvsl;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_unsigned_long_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsl (A, To_PTR (B)));
+   end vec_lvsl;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_long_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsl (A, To_PTR (B)));
+   end vec_lvsl;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_float_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsl (A, To_PTR (B)));
+   end vec_lvsl;
+
+   -- vec_lvsr --
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_unsigned_char_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsr (A, To_PTR (B)));
+   end vec_lvsr;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_signed_char_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsr (A, To_PTR (B)));
+   end vec_lvsr;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_unsigned_short_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsr (A, To_PTR (B)));
+   end vec_lvsr;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_short_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsr (A, To_PTR (B)));
+   end vec_lvsr;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_unsigned_int_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsr (A, To_PTR (B)));
+   end vec_lvsr;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_int_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsr (A, To_PTR (B)));
+   end vec_lvsr;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_unsigned_long_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsr (A, To_PTR (B)));
+   end vec_lvsr;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_long_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsr (A, To_PTR (B)));
+   end vec_lvsr;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_float_ptr) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (lvsr (A, To_PTR (B)));
+   end vec_lvsr;
+
+   -- vec_madd --
+
+   function vec_madd
+     (A : vector_float;
+      B : vector_float;
+      C : vector_float) return vector_float
+   is
+   begin
+      return vmaddfp (A, B, C);
+   end vec_madd;
+
+   -- vec_madds --
+
+   function vec_madds
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return vmhaddshs (A, B, C);
+   end vec_madds;
+
+   -- vec_max --
+
+   function vec_max
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vmaxub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vmaxub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vmaxub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vmaxsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vmaxsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vmaxsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmaxuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmaxuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmaxuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmaxsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmaxsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmaxsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmaxuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmaxuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmaxuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmaxsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmaxsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmaxsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_max;
+
+   function vec_max
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vmaxfp (To_LL_VF (A), To_LL_VF (B)));
+   end vec_max;
+
+   -- vec_vmaxfp --
+
+   function vec_vmaxfp
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vmaxfp (To_LL_VF (A), To_LL_VF (B)));
+   end vec_vmaxfp;
+
+   -- vec_vmaxsw --
+
+   function vec_vmaxsw
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmaxsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmaxsw;
+
+   function vec_vmaxsw
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmaxsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmaxsw;
+
+   function vec_vmaxsw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmaxsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmaxsw;
+
+   -- vec_vmaxuw --
+
+   function vec_vmaxuw
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmaxuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmaxuw;
+
+   function vec_vmaxuw
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmaxuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmaxuw;
+
+   function vec_vmaxuw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmaxuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmaxuw;
+
+   -- vec_vmaxsh --
+
+   function vec_vmaxsh
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmaxsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmaxsh;
+
+   function vec_vmaxsh
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmaxsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmaxsh;
+
+   function vec_vmaxsh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmaxsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmaxsh;
+
+   -- vec_vmaxuh --
+
+   function vec_vmaxuh
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmaxuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmaxuh;
+
+   function vec_vmaxuh
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmaxuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmaxuh;
+
+   function vec_vmaxuh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmaxuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmaxuh;
+
+   -- vec_vmaxsb --
+
+   function vec_vmaxsb
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vmaxsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmaxsb;
+
+   function vec_vmaxsb
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vmaxsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmaxsb;
+
+   function vec_vmaxsb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vmaxsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmaxsb;
+
+   -- vec_vmaxub --
+
+   function vec_vmaxub
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vmaxub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmaxub;
+
+   function vec_vmaxub
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vmaxub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmaxub;
+
+   function vec_vmaxub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vmaxub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmaxub;
+
+   -- vec_mergeh --
+
+   function vec_mergeh
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vmrghb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_mergeh;
+
+   function vec_mergeh
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vmrghb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_mergeh;
+
+   function vec_mergeh
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vmrghb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_mergeh;
+
+   function vec_mergeh
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vmrghh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mergeh;
+
+   function vec_mergeh
+     (A : vector_pixel;
+      B : vector_pixel) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vmrghh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mergeh;
+
+   function vec_mergeh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmrghh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mergeh;
+
+   function vec_mergeh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmrghh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mergeh;
+
+   function vec_mergeh
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vmrghw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_mergeh;
+
+   function vec_mergeh
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vmrghw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_mergeh;
+
+   function vec_mergeh
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmrghw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_mergeh;
+
+   function vec_mergeh
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmrghw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_mergeh;
+
+   -- vec_vmrghw --
+
+   function vec_vmrghw
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vmrghw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmrghw;
+
+   function vec_vmrghw
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vmrghw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmrghw;
+
+   function vec_vmrghw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmrghw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmrghw;
+
+   function vec_vmrghw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmrghw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmrghw;
+
+   -- vec_vmrghh --
+
+   function vec_vmrghh
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vmrghh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmrghh;
+
+   function vec_vmrghh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmrghh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmrghh;
+
+   function vec_vmrghh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmrghh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmrghh;
+
+   function vec_vmrghh
+     (A : vector_pixel;
+      B : vector_pixel) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vmrghh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmrghh;
+
+   -- vec_vmrghb --
+
+   function vec_vmrghb
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vmrghb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmrghb;
+
+   function vec_vmrghb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vmrghb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmrghb;
+
+   function vec_vmrghb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vmrghb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmrghb;
+
+   -- vec_mergel --
+
+   function vec_mergel
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vmrglb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_mergel;
+
+   function vec_mergel
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vmrglb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_mergel;
+
+   function vec_mergel
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vmrglb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_mergel;
+
+   function vec_mergel
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vmrglh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mergel;
+
+   function vec_mergel
+     (A : vector_pixel;
+      B : vector_pixel) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vmrglh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mergel;
+
+   function vec_mergel
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmrglh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mergel;
+
+   function vec_mergel
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmrglh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mergel;
+
+   function vec_mergel
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vmrglw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_mergel;
+
+   function vec_mergel
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vmrglw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_mergel;
+
+   function vec_mergel
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmrglw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_mergel;
+
+   function vec_mergel
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmrglw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_mergel;
+
+   -- vec_vmrglw --
+
+   function vec_vmrglw
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vmrglw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmrglw;
+
+   function vec_vmrglw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmrglw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmrglw;
+
+   function vec_vmrglw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmrglw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmrglw;
+
+   function vec_vmrglw
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vmrglw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vmrglw;
+
+   -- vec_vmrglh --
+
+   function vec_vmrglh
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vmrglh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmrglh;
+
+   function vec_vmrglh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmrglh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmrglh;
+
+   function vec_vmrglh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmrglh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmrglh;
+
+   function vec_vmrglh
+     (A : vector_pixel;
+      B : vector_pixel) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vmrglh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmrglh;
+
+   -- vec_vmrglb --
+
+   function vec_vmrglb
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vmrglb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmrglb;
+
+   function vec_vmrglb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vmrglb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmrglb;
+
+   function vec_vmrglb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vmrglb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmrglb;
+
+   -- vec_mfvscr --
+
+   function vec_mfvscr return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (mfvscr);
+   end vec_mfvscr;
+
+   -- vec_min --
+
+   function vec_min
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vminub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vminub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vminub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vminsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vminsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vminsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vminuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vminuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vminuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vminsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vminsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vminsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vminuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vminuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vminuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vminsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vminsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vminsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_min;
+
+   function vec_min
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vminfp (To_LL_VF (A), To_LL_VF (B)));
+   end vec_min;
+
+   -- vec_vminfp --
+
+   function vec_vminfp
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vminfp (To_LL_VF (A), To_LL_VF (B)));
+   end vec_vminfp;
+
+   -- vec_vminsw --
+
+   function vec_vminsw
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vminsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vminsw;
+
+   function vec_vminsw
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vminsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vminsw;
+
+   function vec_vminsw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vminsw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vminsw;
+
+   -- vec_vminuw --
+
+   function vec_vminuw
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vminuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vminuw;
+
+   function vec_vminuw
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vminuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vminuw;
+
+   function vec_vminuw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vminuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vminuw;
+
+   -- vec_vminsh --
+
+   function vec_vminsh
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vminsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vminsh;
+
+   function vec_vminsh
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vminsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vminsh;
+
+   function vec_vminsh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vminsh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vminsh;
+
+   -- vec_vminuh --
+
+   function vec_vminuh
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vminuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vminuh;
+
+   function vec_vminuh
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vminuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vminuh;
+
+   function vec_vminuh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vminuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vminuh;
+
+   -- vec_vminsb --
+
+   function vec_vminsb
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vminsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vminsb;
+
+   function vec_vminsb
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vminsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vminsb;
+
+   function vec_vminsb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vminsb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vminsb;
+
+   -- vec_vminub --
+
+   function vec_vminub
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vminub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vminub;
+
+   function vec_vminub
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vminub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vminub;
+
+   function vec_vminub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vminub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vminub;
+
+   -- vec_mladd --
+
+   function vec_mladd
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return vmladduhm (A, B, C);
+   end vec_mladd;
+
+   function vec_mladd
+     (A : vector_signed_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return vmladduhm (A, To_LL_VSS (B), To_LL_VSS (C));
+   end vec_mladd;
+
+   function vec_mladd
+     (A : vector_unsigned_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return vmladduhm (To_LL_VSS (A), B, C);
+   end vec_mladd;
+
+   function vec_mladd
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return
+        To_LL_VUS (vmladduhm (To_LL_VSS (A), To_LL_VSS (B), To_LL_VSS (C)));
+   end vec_mladd;
+
+   -- vec_mradds --
+
+   function vec_mradds
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return vmhraddshs (A, B, C);
+   end vec_mradds;
+
+   -- vec_msum --
+
+   function vec_msum
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return
+        To_LL_VUI (vmsumubm (To_LL_VSC (A), To_LL_VSC (B), To_LL_VSI (C)));
+   end vec_msum;
+
+   function vec_msum
+     (A : vector_signed_char;
+      B : vector_unsigned_char;
+      C : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return
+        To_LL_VSI (vmsummbm (To_LL_VSC (A), To_LL_VSC (B), To_LL_VSI (C)));
+   end vec_msum;
+
+   function vec_msum
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return
+        To_LL_VUI (vmsumuhm (To_LL_VSS (A), To_LL_VSS (B), To_LL_VSI (C)));
+   end vec_msum;
+
+   function vec_msum
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return
+        To_LL_VSI (vmsumshm (To_LL_VSS (A), To_LL_VSS (B), To_LL_VSI (C)));
+   end vec_msum;
+
+   -- vec_vmsumshm --
+
+   function vec_vmsumshm
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return
+        To_LL_VSI (vmsumshm (To_LL_VSS (A), To_LL_VSS (B), To_LL_VSI (C)));
+   end vec_vmsumshm;
+
+   -- vec_vmsumuhm --
+
+   function vec_vmsumuhm
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return
+        To_LL_VUI (vmsumuhm (To_LL_VSS (A), To_LL_VSS (B), To_LL_VSI (C)));
+   end vec_vmsumuhm;
+
+   -- vec_vmsummbm --
+
+   function vec_vmsummbm
+     (A : vector_signed_char;
+      B : vector_unsigned_char;
+      C : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return
+        To_LL_VSI (vmsummbm (To_LL_VSC (A), To_LL_VSC (B), To_LL_VSI (C)));
+   end vec_vmsummbm;
+
+   -- vec_vmsumubm --
+
+   function vec_vmsumubm
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return
+        To_LL_VUI (vmsumubm (To_LL_VSC (A), To_LL_VSC (B), To_LL_VSI (C)));
+   end vec_vmsumubm;
+
+   -- vec_msums --
+
+   function vec_msums
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return
+        To_LL_VUI (vmsumuhs (To_LL_VSS (A), To_LL_VSS (B), To_LL_VSI (C)));
+   end vec_msums;
+
+   function vec_msums
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return
+        To_LL_VSI (vmsumshs (To_LL_VSS (A), To_LL_VSS (B), To_LL_VSI (C)));
+   end vec_msums;
+
+   -- vec_vmsumshs --
+
+   function vec_vmsumshs
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return
+        To_LL_VSI (vmsumshs (To_LL_VSS (A), To_LL_VSS (B), To_LL_VSI (C)));
+   end vec_vmsumshs;
+
+   -- vec_vmsumuhs --
+
+   function vec_vmsumuhs
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return
+        To_LL_VUI (vmsumuhs (To_LL_VSS (A), To_LL_VSS (B), To_LL_VSI (C)));
+   end vec_vmsumuhs;
+
+   -- vec_mtvscr --
+
+   procedure vec_mtvscr
+     (A : vector_signed_int)
+   is
+   begin
+      mtvscr (To_LL_VSI (A));
+   end vec_mtvscr;
+
+   procedure vec_mtvscr
+     (A : vector_unsigned_int)
+   is
+   begin
+      mtvscr (To_LL_VSI (A));
+   end vec_mtvscr;
+
+   procedure vec_mtvscr
+     (A : vector_bool_int)
+   is
+   begin
+      mtvscr (To_LL_VSI (A));
+   end vec_mtvscr;
+
+   procedure vec_mtvscr
+     (A : vector_signed_short)
+   is
+   begin
+      mtvscr (To_LL_VSI (A));
+   end vec_mtvscr;
+
+   procedure vec_mtvscr
+     (A : vector_unsigned_short)
+   is
+   begin
+      mtvscr (To_LL_VSI (A));
+   end vec_mtvscr;
+
+   procedure vec_mtvscr
+     (A : vector_bool_short)
+   is
+   begin
+      mtvscr (To_LL_VSI (A));
+   end vec_mtvscr;
+
+   procedure vec_mtvscr
+     (A : vector_pixel)
+   is
+   begin
+      mtvscr (To_LL_VSI (A));
+   end vec_mtvscr;
+
+   procedure vec_mtvscr
+     (A : vector_signed_char)
+   is
+   begin
+      mtvscr (To_LL_VSI (A));
+   end vec_mtvscr;
+
+   procedure vec_mtvscr
+     (A : vector_unsigned_char)
+   is
+   begin
+      mtvscr (To_LL_VSI (A));
+   end vec_mtvscr;
+
+   procedure vec_mtvscr
+     (A : vector_bool_char)
+   is
+   begin
+      mtvscr (To_LL_VSI (A));
+   end vec_mtvscr;
+
+   -- vec_mule --
+
+   function vec_mule
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmuleub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_mule;
+
+   function vec_mule
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmulesb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_mule;
+
+   function vec_mule
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmuleuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mule;
+
+   function vec_mule
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmulesh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mule;
+
+   -- vec_vmulesh --
+
+   function vec_vmulesh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmulesh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmulesh;
+
+   -- vec_vmuleuh --
+
+   function vec_vmuleuh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmuleuh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmuleuh;
+
+   -- vec_vmulesb --
+
+   function vec_vmulesb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmuleub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmulesb;
+
+   -- vec_vmuleub --
+
+   function vec_vmuleub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmuleub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmuleub;
+
+   -- vec_mulo --
+
+   function vec_mulo
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmuloub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_mulo;
+
+   function vec_mulo
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmulosb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_mulo;
+
+   function vec_mulo
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmulouh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mulo;
+
+   function vec_mulo
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmulosh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_mulo;
+
+   -- vec_vmulosh --
+
+   function vec_vmulosh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vmulosh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmulosh;
+
+   -- vec_vmulouh --
+
+   function vec_vmulouh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vmulouh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vmulouh;
+
+   -- vec_vmulosb --
+
+   function vec_vmulosb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vmulosb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmulosb;
+
+   -- vec_vmuloub --
+
+   function vec_vmuloub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vmuloub (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vmuloub;
+
+   -- vec_nmsub --
+
+   function vec_nmsub
+     (A : vector_float;
+      B : vector_float;
+      C : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vnmsubfp (To_LL_VF (A), To_LL_VF (B), To_LL_VF (C)));
+   end vec_nmsub;
+
+   -- vec_nor --
+
+   function vec_nor
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vnor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_nor;
+
+   function vec_nor
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vnor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_nor;
+
+   function vec_nor
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vnor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_nor;
+
+   function vec_nor
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vnor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_nor;
+
+   function vec_nor
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vnor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_nor;
+
+   function vec_nor
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vnor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_nor;
+
+   function vec_nor
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vnor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_nor;
+
+   function vec_nor
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vnor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_nor;
+
+   function vec_nor
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vnor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_nor;
+
+   function vec_nor
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vnor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_nor;
+
+   -- vec_or --
+
+   function vec_or
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_float;
+      B : vector_bool_int) return vector_float
+   is
+   begin
+      return To_LL_VF (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_bool_int;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   function vec_or
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_or;
+
+   -- vec_pack --
+
+   function vec_pack
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vpkuhum (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_pack;
+
+   function vec_pack
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vpkuhum (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_pack;
+
+   function vec_pack
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vpkuhum (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_pack;
+
+   function vec_pack
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vpkuwum (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_pack;
+
+   function vec_pack
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vpkuwum (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_pack;
+
+   function vec_pack
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vpkuwum (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_pack;
+
+   -- vec_vpkuwum --
+
+   function vec_vpkuwum
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vpkuwum (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vpkuwum;
+
+   function vec_vpkuwum
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vpkuwum (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vpkuwum;
+
+   function vec_vpkuwum
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vpkuwum (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vpkuwum;
+
+   -- vec_vpkuhum --
+
+   function vec_vpkuhum
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vpkuhum (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vpkuhum;
+
+   function vec_vpkuhum
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vpkuhum (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vpkuhum;
+
+   function vec_vpkuhum
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vpkuhum (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vpkuhum;
+
+   -- vec_packpx --
+
+   function vec_packpx
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vpkpx (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_packpx;
+
+   -- vec_packs --
+
+   function vec_packs
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vpkuhus (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_packs;
+
+   function vec_packs
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vpkshss (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_packs;
+
+   function vec_packs
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vpkuwus (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_packs;
+
+   function vec_packs
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vpkswss (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_packs;
+
+   -- vec_vpkswss --
+
+   function vec_vpkswss
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vpkswss (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vpkswss;
+
+   -- vec_vpkuwus --
+
+   function vec_vpkuwus
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vpkuwus (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vpkuwus;
+
+   -- vec_vpkshss --
+
+   function vec_vpkshss
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vpkshss (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vpkshss;
+
+   -- vec_vpkuhus --
+
+   function vec_vpkuhus
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vpkuhus (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vpkuhus;
+
+   -- vec_packsu --
+
+   function vec_packsu
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vpkuhus (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_packsu;
+
+   function vec_packsu
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vpkshus (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_packsu;
+
+   function vec_packsu
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vpkuwus (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_packsu;
+
+   function vec_packsu
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vpkswus (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_packsu;
+
+   -- vec_vpkswus --
+
+   function vec_vpkswus
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vpkswus (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vpkswus;
+
+   -- vec_vpkshus --
+
+   function vec_vpkshus
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vpkshus (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vpkshus;
+
+   -- vec_perm --
+
+   function vec_perm
+     (A : vector_float;
+      B : vector_float;
+      C : vector_unsigned_char) return vector_float
+   is
+   begin
+      return
+        To_LL_VF (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   function vec_perm
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : vector_unsigned_char) return vector_signed_int
+   is
+   begin
+      return
+        To_LL_VSI (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   function vec_perm
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : vector_unsigned_char) return vector_unsigned_int
+   is
+   begin
+      return
+        To_LL_VUI (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   function vec_perm
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : vector_unsigned_char) return vector_bool_int
+   is
+   begin
+      return
+        To_LL_VBI (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   function vec_perm
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_unsigned_char) return vector_signed_short
+   is
+   begin
+      return
+        To_LL_VSS (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   function vec_perm
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_char) return vector_unsigned_short
+   is
+   begin
+      return
+        To_LL_VUS (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   function vec_perm
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : vector_unsigned_char) return vector_bool_short
+   is
+   begin
+      return
+        To_LL_VBS (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   function vec_perm
+     (A : vector_pixel;
+      B : vector_pixel;
+      C : vector_unsigned_char) return vector_pixel
+   is
+   begin
+      return To_LL_VP
+        (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   function vec_perm
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC
+        (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   function vec_perm
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return
+        To_LL_VUC (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   function vec_perm
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : vector_unsigned_char) return vector_bool_char
+   is
+   begin
+      return
+        To_LL_VBC (vperm_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSC (C)));
+   end vec_perm;
+
+   -- vec_re --
+
+   function vec_re
+     (A : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vrefp (To_LL_VF (A)));
+   end vec_re;
+
+   -- vec_rl --
+
+   function vec_rl
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vrlb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_rl;
+
+   function vec_rl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vrlb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_rl;
+
+   function vec_rl
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vrlh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_rl;
+
+   function vec_rl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vrlh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_rl;
+
+   function vec_rl
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vrlw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_rl;
+
+   function vec_rl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vrlw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_rl;
+
+   -- vec_vrlw --
+
+   function vec_vrlw
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vrlw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vrlw;
+
+   function vec_vrlw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vrlw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vrlw;
+
+   -- vec_vrlh --
+
+   function vec_vrlh
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vrlh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vrlh;
+
+   function vec_vrlh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vrlh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vrlh;
+
+   -- vec_vrlb --
+
+   function vec_vrlb
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vrlb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vrlb;
+
+   function vec_vrlb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vrlb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vrlb;
+
+   -- vec_round --
+
+   function vec_round
+     (A : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vrfin (To_LL_VF (A)));
+   end vec_round;
+
+   -- vec_rsqrte --
+
+   function vec_rsqrte
+     (A : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vrsqrtefp (To_LL_VF (A)));
+   end vec_rsqrte;
+
+   -- vec_sel --
+
+   function vec_sel
+     (A : vector_float;
+      B : vector_float;
+      C : vector_bool_int) return vector_float
+   is
+   begin
+      return To_LL_VF (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_float;
+      B : vector_float;
+      C : vector_unsigned_int) return vector_float
+   is
+   begin
+      return To_LL_VF (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return
+        To_LL_VSI (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return
+        To_LL_VSI (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return
+        To_LL_VUI (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return
+        To_LL_VUI (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : vector_bool_int) return vector_bool_int
+   is
+   begin
+      return
+        To_LL_VBI (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : vector_unsigned_int) return vector_bool_int
+   is
+   begin
+      return
+        To_LL_VBI (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return
+        To_LL_VSS (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return
+        To_LL_VSS (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return
+        To_LL_VUS (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return
+        To_LL_VUS (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : vector_bool_short) return vector_bool_short
+   is
+   begin
+      return
+        To_LL_VBS (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : vector_unsigned_short) return vector_bool_short
+   is
+   begin
+      return
+        To_LL_VBS (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return
+        To_LL_VSC (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return
+        To_LL_VSC (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return
+        To_LL_VUC (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return
+        To_LL_VUC (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : vector_bool_char) return vector_bool_char
+   is
+   begin
+      return
+        To_LL_VBC (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   function vec_sel
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : vector_unsigned_char) return vector_bool_char
+   is
+   begin
+      return
+        To_LL_VBC (vsel_4si (To_LL_VSI (A), To_LL_VSI (B), To_LL_VSI (C)));
+   end vec_sel;
+
+   -- vec_sl --
+
+   function vec_sl
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vslb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sl;
+
+   function vec_sl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vslb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sl;
+
+   function vec_sl
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vslh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sl;
+
+   function vec_sl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vslh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sl;
+
+   function vec_sl
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vslw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sl;
+
+   function vec_sl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vslw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sl;
+
+   -- vec_vslw --
+
+   function vec_vslw
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vslw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vslw;
+
+   function vec_vslw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vslw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vslw;
+
+   -- vec_vslh --
+
+   function vec_vslh
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vslh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vslh;
+
+   function vec_vslh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vslh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vslh;
+
+   -- vec_vslb --
+
+   function vec_vslb
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vslb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vslb;
+
+   function vec_vslb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vslb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vslb;
+
+   -- vec_sll --
+
+   function vec_sll
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_signed_int;
+      B : vector_unsigned_short) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_unsigned_int;
+      B : vector_unsigned_short) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_bool_int;
+      B : vector_unsigned_short) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_bool_int;
+      B : vector_unsigned_char) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_signed_short;
+      B : vector_unsigned_int) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_unsigned_short;
+      B : vector_unsigned_int) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_bool_short;
+      B : vector_unsigned_int) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_bool_short;
+      B : vector_unsigned_char) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_pixel;
+      B : vector_unsigned_int) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_pixel;
+      B : vector_unsigned_short) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_signed_char;
+      B : vector_unsigned_int) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_signed_char;
+      B : vector_unsigned_short) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_unsigned_char;
+      B : vector_unsigned_int) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_unsigned_char;
+      B : vector_unsigned_short) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_bool_char;
+      B : vector_unsigned_int) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_bool_char;
+      B : vector_unsigned_short) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   function vec_sll
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vsl (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sll;
+
+   -- vec_slo --
+
+   function vec_slo
+     (A : vector_float;
+      B : vector_signed_char) return vector_float
+   is
+   begin
+      return To_LL_VF (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_float;
+      B : vector_unsigned_char) return vector_float
+   is
+   begin
+      return To_LL_VF (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_signed_int;
+      B : vector_signed_char) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_unsigned_int;
+      B : vector_signed_char) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_signed_short;
+      B : vector_signed_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_unsigned_short;
+      B : vector_signed_char) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_pixel;
+      B : vector_signed_char) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_unsigned_char;
+      B : vector_signed_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   function vec_slo
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vslo (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_slo;
+
+   -- vec_sr --
+
+   function vec_sr
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsrb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sr;
+
+   function vec_sr
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsrb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sr;
+
+   function vec_sr
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsrh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sr;
+
+   function vec_sr
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsrh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sr;
+
+   function vec_sr
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsrw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sr;
+
+   function vec_sr
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsrw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sr;
+
+   -- vec_vsrw --
+
+   function vec_vsrw
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsrw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsrw;
+
+   function vec_vsrw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsrw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsrw;
+
+   -- vec_vsrh --
+
+   function vec_vsrh
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsrh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsrh;
+
+   function vec_vsrh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsrh (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsrh;
+
+   -- vec_vsrb --
+
+   function vec_vsrb
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsrb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsrb;
+
+   function vec_vsrb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsrb (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsrb;
+
+   -- vec_sra --
+
+   function vec_sra
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsrab (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sra;
+
+   function vec_sra
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsrab (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sra;
+
+   function vec_sra
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsrah (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sra;
+
+   function vec_sra
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsrah (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sra;
+
+   function vec_sra
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsraw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sra;
+
+   function vec_sra
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsraw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sra;
+
+   -- vec_vsraw --
+
+   function vec_vsraw
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsraw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsraw;
+
+   function vec_vsraw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsraw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsraw;
+
+   -- vec_vsrah --
+
+   function vec_vsrah
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsrah (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsrah;
+
+   function vec_vsrah
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsrah (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsrah;
+
+   -- vec_vsrab --
+
+   function vec_vsrab
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsrab (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsrab;
+
+   function vec_vsrab
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsrab (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsrab;
+
+   -- vec_srl --
+
+   function vec_srl
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_signed_int;
+      B : vector_unsigned_short) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_short) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_bool_int;
+      B : vector_unsigned_short) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_bool_int;
+      B : vector_unsigned_char) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_signed_short;
+      B : vector_unsigned_int) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_int) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_bool_short;
+      B : vector_unsigned_int) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_bool_short;
+      B : vector_unsigned_char) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_pixel;
+      B : vector_unsigned_int) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_pixel;
+      B : vector_unsigned_short) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_signed_char;
+      B : vector_unsigned_int) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_signed_char;
+      B : vector_unsigned_short) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_int) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_short) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_bool_char;
+      B : vector_unsigned_int) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_bool_char;
+      B : vector_unsigned_short) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   function vec_srl
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vsr (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_srl;
+
+   -- vec_sro --
+
+   function vec_sro
+     (A : vector_float;
+      B : vector_signed_char) return vector_float
+   is
+   begin
+      return To_LL_VF (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_float;
+      B : vector_unsigned_char) return vector_float
+   is
+   begin
+      return To_LL_VF (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_signed_int;
+      B : vector_signed_char) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_unsigned_int;
+      B : vector_signed_char) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_signed_short;
+      B : vector_signed_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_unsigned_short;
+      B : vector_signed_char) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_pixel;
+      B : vector_signed_char) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel
+   is
+   begin
+      return To_LL_VP (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_unsigned_char;
+      B : vector_signed_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   function vec_sro
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsro (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sro;
+
+   -- vec_st --
+
+   procedure vec_st
+     (A : vector_float;
+      B : c_int;
+      C : vector_float_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_float;
+      B : c_int;
+      C : float_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_signed_int;
+      B : c_int;
+      C : vector_signed_int_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_signed_int;
+      B : c_int;
+      C : int_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : vector_unsigned_int_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_bool_int;
+      B : c_int;
+      C : vector_bool_int_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_bool_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_bool_int;
+      B : c_int;
+      C : int_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_signed_short;
+      B : c_int;
+      C : vector_signed_short_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_signed_short;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : vector_unsigned_short_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_bool_short;
+      B : c_int;
+      C : vector_bool_short_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_bool_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_pixel;
+      B : c_int;
+      C : vector_pixel_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_pixel;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_pixel;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_bool_short;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_signed_char;
+      B : c_int;
+      C : vector_signed_char_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_signed_char;
+      B : c_int;
+      C : signed_char_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : vector_unsigned_char_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_bool_char;
+      B : c_int;
+      C : vector_bool_char_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_bool_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   procedure vec_st
+     (A : vector_bool_char;
+      B : c_int;
+      C : signed_char_ptr)
+   is
+   begin
+      stvx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_st;
+
+   -- vec_ste --
+
+   procedure vec_ste
+     (A : vector_signed_char;
+      B : c_int;
+      C : signed_char_ptr)
+   is
+   begin
+      stvebx (To_LL_VSC (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   is
+   begin
+      stvebx (To_LL_VSC (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_bool_char;
+      B : c_int;
+      C : signed_char_ptr)
+   is
+   begin
+      stvebx (To_LL_VSC (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_bool_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   is
+   begin
+      stvebx (To_LL_VSC (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_signed_short;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_bool_short;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_bool_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_pixel;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_pixel;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_float;
+      B : c_int;
+      C : float_ptr)
+   is
+   begin
+      stvewx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_signed_int;
+      B : c_int;
+      C : int_ptr)
+   is
+   begin
+      stvewx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   is
+   begin
+      stvewx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_bool_int;
+      B : c_int;
+      C : int_ptr)
+   is
+   begin
+      stvewx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_ste;
+
+   procedure vec_ste
+     (A : vector_bool_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   is
+   begin
+      stvewx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_ste;
+
+   -- vec_stvewx --
+
+   procedure vec_stvewx
+     (A : vector_float;
+      B : c_int;
+      C : float_ptr)
+   is
+   begin
+      stvewx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stvewx;
+
+   procedure vec_stvewx
+     (A : vector_signed_int;
+      B : c_int;
+      C : int_ptr)
+   is
+   begin
+      stvewx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stvewx;
+
+   procedure vec_stvewx
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   is
+   begin
+      stvewx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stvewx;
+
+   procedure vec_stvewx
+     (A : vector_bool_int;
+      B : c_int;
+      C : int_ptr)
+   is
+   begin
+      stvewx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stvewx;
+
+   procedure vec_stvewx
+     (A : vector_bool_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   is
+   begin
+      stvewx (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stvewx;
+
+   -- vec_stvehx --
+
+   procedure vec_stvehx
+     (A : vector_signed_short;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_stvehx;
+
+   procedure vec_stvehx
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_stvehx;
+
+   procedure vec_stvehx
+     (A : vector_bool_short;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_stvehx;
+
+   procedure vec_stvehx
+     (A : vector_bool_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_stvehx;
+
+   procedure vec_stvehx
+     (A : vector_pixel;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_stvehx;
+
+   procedure vec_stvehx
+     (A : vector_pixel;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvehx (To_LL_VSS (A), B, To_PTR (C));
+   end vec_stvehx;
+
+   -- vec_stvebx --
+
+   procedure vec_stvebx
+     (A : vector_signed_char;
+      B : c_int;
+      C : signed_char_ptr)
+   is
+   begin
+      stvebx (To_LL_VSC (A), B, To_PTR (C));
+   end vec_stvebx;
+
+   procedure vec_stvebx
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   is
+   begin
+      stvebx (To_LL_VSC (A), B, To_PTR (C));
+   end vec_stvebx;
+
+   procedure vec_stvebx
+     (A : vector_bool_char;
+      B : c_int;
+      C : signed_char_ptr)
+   is
+   begin
+      stvebx (To_LL_VSC (A), B, To_PTR (C));
+   end vec_stvebx;
+
+   procedure vec_stvebx
+     (A : vector_bool_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   is
+   begin
+      stvebx (To_LL_VSC (A), B, To_PTR (C));
+   end vec_stvebx;
+
+   -- vec_stl --
+
+   procedure vec_stl
+     (A : vector_float;
+      B : c_int;
+      C : vector_float_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_float;
+      B : c_int;
+      C : float_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_signed_int;
+      B : c_int;
+      C : vector_signed_int_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_signed_int;
+      B : c_int;
+      C : int_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : vector_unsigned_int_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_bool_int;
+      B : c_int;
+      C : vector_bool_int_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_bool_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_bool_int;
+      B : c_int;
+      C : int_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_signed_short;
+      B : c_int;
+      C : vector_signed_short_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_signed_short;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : vector_unsigned_short_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_bool_short;
+      B : c_int;
+      C : vector_bool_short_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_bool_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_bool_short;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_pixel;
+      B : c_int;
+      C : vector_pixel_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_pixel;
+      B : c_int;
+      C : unsigned_short_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_pixel;
+      B : c_int;
+      C : short_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_signed_char;
+      B : c_int;
+      C : vector_signed_char_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_signed_char;
+      B : c_int;
+      C : signed_char_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : vector_unsigned_char_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_bool_char;
+      B : c_int;
+      C : vector_bool_char_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_bool_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   procedure vec_stl
+     (A : vector_bool_char;
+      B : c_int;
+      C : signed_char_ptr)
+   is
+   begin
+      stvxl (To_LL_VSI (A), B, To_PTR (C));
+   end vec_stl;
+
+   -- vec_sub --
+
+   function vec_sub
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sub;
+
+   function vec_sub
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vsubfp (To_LL_VF (A), To_LL_VF (B)));
+   end vec_sub;
+
+   -- vec_vsubfp --
+
+   function vec_vsubfp
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vsubfp (To_LL_VF (A), To_LL_VF (B)));
+   end vec_vsubfp;
+
+   -- vec_vsubuwm --
+
+   function vec_vsubuwm
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubuwm;
+
+   function vec_vsubuwm
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubuwm;
+
+   function vec_vsubuwm
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubuwm;
+
+   function vec_vsubuwm
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubuwm;
+
+   function vec_vsubuwm
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubuwm;
+
+   function vec_vsubuwm
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuwm (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubuwm;
+
+   -- vec_vsubuhm --
+
+   function vec_vsubuhm
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubuhm;
+
+   function vec_vsubuhm
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubuhm;
+
+   function vec_vsubuhm
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubuhm;
+
+   function vec_vsubuhm
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubuhm;
+
+   function vec_vsubuhm
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubuhm;
+
+   function vec_vsubuhm
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhm (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubuhm;
+
+   -- vec_vsububm --
+
+   function vec_vsububm
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsububm;
+
+   function vec_vsububm
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsububm;
+
+   function vec_vsububm
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsububm;
+
+   function vec_vsububm
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsububm;
+
+   function vec_vsububm
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsububm;
+
+   function vec_vsububm
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububm (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsububm;
+
+   -- vec_subc --
+
+   function vec_subc
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubcuw (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_subc;
+
+   -- vec_subs --
+
+   function vec_subs
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsubsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsubsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsubsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_subs;
+
+   function vec_subs
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_subs;
+
+   -- vec_vsubsws --
+
+   function vec_vsubsws
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubsws;
+
+   function vec_vsubsws
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubsws;
+
+   function vec_vsubsws
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsubsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubsws;
+
+   -- vec_vsubuws --
+
+   function vec_vsubuws
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubuws;
+
+   function vec_vsubuws
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubuws;
+
+   function vec_vsubuws
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsubuws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_vsubuws;
+
+   -- vec_vsubshs --
+
+   function vec_vsubshs
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubshs;
+
+   function vec_vsubshs
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubshs;
+
+   function vec_vsubshs
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vsubshs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubshs;
+
+   -- vec_vsubuhs --
+
+   function vec_vsubuhs
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubuhs;
+
+   function vec_vsubuhs
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubuhs;
+
+   function vec_vsubuhs
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vsubuhs (To_LL_VSS (A), To_LL_VSS (B)));
+   end vec_vsubuhs;
+
+   -- vec_vsubsbs --
+
+   function vec_vsubsbs
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsubsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsubsbs;
+
+   function vec_vsubsbs
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsubsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsubsbs;
+
+   function vec_vsubsbs
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vsubsbs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsubsbs;
+
+   -- vec_vsububs --
+
+   function vec_vsububs
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsububs;
+
+   function vec_vsububs
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsububs;
+
+   function vec_vsububs
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vsububs (To_LL_VSC (A), To_LL_VSC (B)));
+   end vec_vsububs;
+
+   -- vec_sum4s --
+
+   function vec_sum4s
+     (A : vector_unsigned_char;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsum4ubs (To_LL_VSC (A), To_LL_VSI (B)));
+   end vec_sum4s;
+
+   function vec_sum4s
+     (A : vector_signed_char;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsum4sbs (To_LL_VSC (A), To_LL_VSI (B)));
+   end vec_sum4s;
+
+   function vec_sum4s
+     (A : vector_signed_short;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsum4shs (To_LL_VSS (A), To_LL_VSI (B)));
+   end vec_sum4s;
+
+   -- vec_vsum4shs --
+
+   function vec_vsum4shs
+     (A : vector_signed_short;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsum4shs (To_LL_VSS (A), To_LL_VSI (B)));
+   end vec_vsum4shs;
+
+   -- vec_vsum4sbs --
+
+   function vec_vsum4sbs
+     (A : vector_signed_char;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsum4sbs (To_LL_VSC (A), To_LL_VSI (B)));
+   end vec_vsum4sbs;
+
+   -- vec_vsum4ubs --
+
+   function vec_vsum4ubs
+     (A : vector_unsigned_char;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vsum4ubs (To_LL_VSC (A), To_LL_VSI (B)));
+   end vec_vsum4ubs;
+
+   -- vec_sum2s --
+
+   function vec_sum2s
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsum2sws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sum2s;
+
+   -- vec_sums --
+
+   function vec_sums
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vsumsws (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_sums;
+
+   -- vec_trunc --
+
+   function vec_trunc
+     (A : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vrfiz (To_LL_VF (A)));
+   end vec_trunc;
+
+   -- vec_unpackh --
+
+   function vec_unpackh
+     (A : vector_signed_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vupkhsb (To_LL_VSC (A)));
+   end vec_unpackh;
+
+   function vec_unpackh
+     (A : vector_bool_char) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vupkhsb (To_LL_VSC (A)));
+   end vec_unpackh;
+
+   function vec_unpackh
+     (A : vector_signed_short) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vupkhsh (To_LL_VSS (A)));
+   end vec_unpackh;
+
+   function vec_unpackh
+     (A : vector_bool_short) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vupkhsh (To_LL_VSS (A)));
+   end vec_unpackh;
+
+   function vec_unpackh
+     (A : vector_pixel) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vupkhpx (To_LL_VSS (A)));
+   end vec_unpackh;
+
+   -- vec_vupkhsh --
+
+   function vec_vupkhsh
+     (A : vector_bool_short) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vupkhsh (To_LL_VSS (A)));
+   end vec_vupkhsh;
+
+   function vec_vupkhsh
+     (A : vector_signed_short) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vupkhsh (To_LL_VSS (A)));
+   end vec_vupkhsh;
+
+   -- vec_vupkhpx --
+
+   function vec_vupkhpx
+     (A : vector_pixel) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vupkhpx (To_LL_VSS (A)));
+   end vec_vupkhpx;
+
+   -- vec_vupkhsb --
+
+   function vec_vupkhsb
+     (A : vector_bool_char) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vupkhsb (To_LL_VSC (A)));
+   end vec_vupkhsb;
+
+   function vec_vupkhsb
+     (A : vector_signed_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vupkhsb (To_LL_VSC (A)));
+   end vec_vupkhsb;
+
+   -- vec_unpackl --
+
+   function vec_unpackl
+     (A : vector_signed_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vupklsb (To_LL_VSC (A)));
+   end vec_unpackl;
+
+   function vec_unpackl
+     (A : vector_bool_char) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vupklsb (To_LL_VSC (A)));
+   end vec_unpackl;
+
+   function vec_unpackl
+     (A : vector_pixel) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vupklpx (To_LL_VSS (A)));
+   end vec_unpackl;
+
+   function vec_unpackl
+     (A : vector_signed_short) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vupklsh (To_LL_VSS (A)));
+   end vec_unpackl;
+
+   function vec_unpackl
+     (A : vector_bool_short) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vupklsh (To_LL_VSS (A)));
+   end vec_unpackl;
+
+   -- vec_vupklpx --
+
+   function vec_vupklpx
+     (A : vector_pixel) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vupklpx (To_LL_VSS (A)));
+   end vec_vupklpx;
+
+   -- vec_upklsh --
+
+   function vec_vupklsh
+     (A : vector_bool_short) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vupklsh (To_LL_VSS (A)));
+   end vec_vupklsh;
+
+   function vec_vupklsh
+     (A : vector_signed_short) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vupklsh (To_LL_VSS (A)));
+   end vec_vupklsh;
+
+   -- vec_vupklsb --
+
+   function vec_vupklsb
+     (A : vector_bool_char) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vupklsb (To_LL_VSC (A)));
+   end vec_vupklsb;
+
+   function vec_vupklsb
+     (A : vector_signed_char) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vupklsb (To_LL_VSC (A)));
+   end vec_vupklsb;
+
+   -- vec_xor --
+
+   function vec_xor
+     (A : vector_float;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_float;
+      B : vector_bool_int) return vector_float
+   is
+   begin
+      return To_LL_VF (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_bool_int;
+      B : vector_float) return vector_float
+   is
+   begin
+      return To_LL_VF (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   is
+   begin
+      return To_LL_VBI (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   is
+   begin
+      return To_LL_VSI (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   is
+   begin
+      return To_LL_VUI (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   is
+   begin
+      return To_LL_VBS (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   is
+   begin
+      return To_LL_VSS (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   is
+   begin
+      return To_LL_VUS (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   is
+   begin
+      return To_LL_VBC (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   is
+   begin
+      return To_LL_VSC (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   function vec_xor
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   is
+   begin
+      return To_LL_VUC (vxor (To_LL_VSI (A), To_LL_VSI (B)));
+   end vec_xor;
+
+   -----------------------------------
+   -- Bodies for Altivec predicates --
+   -----------------------------------
+
+   -- vec_all_eq --
+
+   function vec_all_eq
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_bool_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_bool_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_pixel;
+      B : vector_pixel) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_bool_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_eq;
+
+   function vec_all_eq
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpeqfp_p (CR6_LT, To_LL_VF (A), To_LL_VF (B));
+   end vec_all_eq;
+
+   -- vec_all_ge --
+
+   function vec_all_ge
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_ge;
+
+   function vec_all_ge
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgefp_p (CR6_LT, To_LL_VF (A), To_LL_VF (B));
+   end vec_all_ge;
+
+   -- vec_all_gt --
+
+   function vec_all_gt
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_LT, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_LT, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_gt;
+
+   function vec_all_gt
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgtfp_p (CR6_LT, To_LL_VF (A), To_LL_VF (B));
+   end vec_all_gt;
+
+   -- vec_all_in --
+
+   function vec_all_in
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpbfp_p (CR6_EQ, To_LL_VF (A), To_LL_VF (B));
+   end vec_all_in;
+
+   -- vec_all_le --
+
+   function vec_all_le
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_le;
+
+   function vec_all_le
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgefp_p (CR6_LT, To_LL_VF (B), To_LL_VF (A));
+   end vec_all_le;
+
+   -- vec_all_lt --
+
+   function vec_all_lt
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_LT, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_LT, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_LT, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_LT, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_LT, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_LT, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_all_lt;
+
+   function vec_all_lt
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgtfp_p (CR6_LT, To_LL_VF (B), To_LL_VF (A));
+   end vec_all_lt;
+
+   -- vec_all_nan --
+
+   function vec_all_nan
+     (A : vector_float) return c_int
+   is
+   begin
+      return vcmpeqfp_p (CR6_EQ, To_LL_VF (A), To_LL_VF (A));
+   end vec_all_nan;
+
+   -- vec_all_ne --
+
+   function vec_all_ne
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_bool_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_bool_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_pixel;
+      B : vector_pixel) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_bool_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_all_ne;
+
+   function vec_all_ne
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpeqfp_p (CR6_EQ, To_LL_VF (A), To_LL_VF (B));
+   end vec_all_ne;
+
+   -- vec_all_nge --
+
+   function vec_all_nge
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgefp_p (CR6_EQ, To_LL_VF (A), To_LL_VF (B));
+   end vec_all_nge;
+
+   -- vec_all_ngt --
+
+   function vec_all_ngt
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgtfp_p (CR6_EQ, To_LL_VF (A), To_LL_VF (B));
+   end vec_all_ngt;
+
+   -- vec_all_nle --
+
+   function vec_all_nle
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgefp_p (CR6_EQ, To_LL_VF (B), To_LL_VF (A));
+   end vec_all_nle;
+
+   -- vec_all_nlt --
+
+   function vec_all_nlt
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgtfp_p (CR6_EQ, To_LL_VF (B), To_LL_VF (A));
+   end vec_all_nlt;
+
+   -- vec_all_numeric --
+
+   function vec_all_numeric
+     (A : vector_float) return c_int
+   is
+   begin
+      return vcmpeqfp_p (CR6_LT, To_LL_VF (A), To_LL_VF (A));
+   end vec_all_numeric;
+
+   -- vec_any_eq --
+
+   function vec_any_eq
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_bool_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_bool_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_pixel;
+      B : vector_pixel) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_bool_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_eq;
+
+   function vec_any_eq
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpeqfp_p (CR6_EQ_REV, To_LL_VF (A), To_LL_VF (B));
+   end vec_any_eq;
+
+   -- vec_any_ge --
+
+   function vec_any_ge
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_LT_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_LT_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_ge;
+
+   function vec_any_ge
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgefp_p (CR6_EQ_REV, To_LL_VF (A), To_LL_VF (B));
+   end vec_any_ge;
+
+   -- vec_any_gt --
+
+   function vec_any_gt
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_gt;
+
+   function vec_any_gt
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgtfp_p (CR6_EQ_REV, To_LL_VF (A), To_LL_VF (B));
+   end vec_any_gt;
+
+   -- vec_any_le --
+
+   function vec_any_le
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_le;
+
+   function vec_any_le
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgefp_p (CR6_EQ_REV, To_LL_VF (B), To_LL_VF (A));
+   end vec_any_le;
+
+   -- vec_any_lt --
+
+   function vec_any_lt
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpgtub_p (CR6_EQ_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpgtsb_p (CR6_EQ_REV, To_LL_VSC (B), To_LL_VSC (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpgtuh_p (CR6_EQ_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpgtsh_p (CR6_EQ_REV, To_LL_VSS (B), To_LL_VSS (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpgtuw_p (CR6_EQ_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpgtsw_p (CR6_EQ_REV, To_LL_VSI (B), To_LL_VSI (A));
+   end vec_any_lt;
+
+   function vec_any_lt
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgtfp_p (CR6_EQ_REV, To_LL_VF (B), To_LL_VF (A));
+   end vec_any_lt;
+
+   -- vec_any_nan --
+
+   function vec_any_nan
+     (A : vector_float) return c_int
+   is
+   begin
+      return vcmpeqfp_p (CR6_LT_REV, To_LL_VF (A), To_LL_VF (A));
+   end vec_any_nan;
+
+   -- vec_any_ne --
+
+   function vec_any_ne
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_bool_char;
+      B : vector_bool_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int
+   is
+   begin
+      return vcmpequb_p (CR6_LT_REV, To_LL_VSC (A), To_LL_VSC (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_bool_short;
+      B : vector_bool_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_pixel;
+      B : vector_pixel) return c_int
+   is
+   begin
+      return vcmpequh_p (CR6_LT_REV, To_LL_VSS (A), To_LL_VSS (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_bool_int;
+      B : vector_bool_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int
+   is
+   begin
+      return vcmpequw_p (CR6_LT_REV, To_LL_VSI (A), To_LL_VSI (B));
+   end vec_any_ne;
+
+   function vec_any_ne
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpeqfp_p (CR6_LT_REV, To_LL_VF (A), To_LL_VF (B));
+   end vec_any_ne;
+
+   -- vec_any_nge --
+
+   function vec_any_nge
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgefp_p (CR6_LT_REV, To_LL_VF (A), To_LL_VF (B));
+   end vec_any_nge;
+
+   -- vec_any_ngt --
+
+   function vec_any_ngt
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgtfp_p (CR6_LT_REV, To_LL_VF (A), To_LL_VF (B));
+   end vec_any_ngt;
+
+   -- vec_any_nle --
+
+   function vec_any_nle
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgefp_p (CR6_LT_REV, To_LL_VF (B), To_LL_VF (A));
+   end vec_any_nle;
+
+   -- vec_any_nlt --
+
+   function vec_any_nlt
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpgtfp_p (CR6_LT_REV, To_LL_VF (B), To_LL_VF (A));
+   end vec_any_nlt;
+
+   -- vec_any_numeric --
+
+   function vec_any_numeric
+     (A : vector_float) return c_int
+   is
+   begin
+      return vcmpeqfp_p (CR6_EQ_REV, To_LL_VF (A), To_LL_VF (A));
+   end vec_any_numeric;
+
+   -- vec_any_out --
+
+   function vec_any_out
+     (A : vector_float;
+      B : vector_float) return c_int
+   is
+   begin
+      return vcmpbfp_p (CR6_EQ_REV, To_LL_VF (A), To_LL_VF (B));
+   end vec_any_out;
+
+   -- vec_step --
+
+   function vec_step
+     (V : vector_unsigned_char) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 16;
+   end vec_step;
+
+   function vec_step
+     (V : vector_signed_char) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 16;
+   end vec_step;
+
+   function vec_step
+     (V : vector_bool_char) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 16;
+   end vec_step;
+
+   function vec_step
+     (V : vector_unsigned_short) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 8;
+   end vec_step;
+
+   function vec_step
+     (V : vector_signed_short) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 8;
+   end vec_step;
+
+   function vec_step
+     (V : vector_bool_short) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 8;
+   end vec_step;
+
+   function vec_step
+     (V : vector_unsigned_int) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 4;
+   end vec_step;
+
+   function vec_step
+     (V : vector_signed_int) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 4;
+   end vec_step;
+
+   function vec_step
+     (V : vector_bool_int) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 4;
+   end vec_step;
+
+   function vec_step
+     (V : vector_float) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 4;
+   end vec_step;
+
+   function vec_step
+     (V : vector_pixel) return Integer
+   is
+      pragma Unreferenced (V);
+   begin
+      return 4;
+   end vec_step;
+
+end GNAT.Altivec.Vector_Operations;
diff --git a/gcc/ada/g-alveop.ads b/gcc/ada/g-alveop.ads
new file mode 100644 (file)
index 0000000..7e77d7f
--- /dev/null
@@ -0,0 +1,8105 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--       G N A T . A L T I V E C . V E C T O R _ O P E R A T I O N S        --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 2004-2005, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This unit is the user-level Ada interface to AltiVec operations on vector
+--  objects. It is common to both the Soft and the Hard bindings.
+
+with GNAT.Altivec.Vector_Types;  use GNAT.Altivec.Vector_Types;
+with GNAT.Altivec.Low_Level_Interface;  use GNAT.Altivec.Low_Level_Interface;
+
+package GNAT.Altivec.Vector_Operations is
+
+   --  The vast majority of the operations exposed here are overloads over a
+   --  much smaller set of low level primitives with type conversions around.
+   --
+   --  In some cases, a direct binding without any intermediate body is
+   --  possible or even even mandatory for technical reasons. What we provide
+   --  here for such cases are renamings of straight imports exposed by
+   --  Altivec.Low_Level_Interface.  See the comments in the private part for
+   --  additional details.
+
+   -------------------------------------------------------
+   -- [PIM-4.4 Generic and Specific AltiVec operations] --
+   -------------------------------------------------------
+
+   -- vec_abs --
+
+   function vec_abs
+     (A : vector_signed_char) return vector_signed_char;
+
+   function vec_abs
+     (A : vector_signed_short) return vector_signed_short;
+
+   function vec_abs
+     (A : vector_signed_int) return vector_signed_int;
+
+   function vec_abs
+     (A : vector_float) return vector_float;
+
+   -- vec_abss --
+
+   function vec_abss
+     (A : vector_signed_char) return vector_signed_char;
+
+   function vec_abss
+     (A : vector_signed_short) return vector_signed_short;
+
+   function vec_abss
+     (A : vector_signed_int) return vector_signed_int;
+
+   -- vec_add --
+
+   function vec_add
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_add
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_add
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_add
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_add
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_add
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_add
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_add
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_add
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_add
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_add
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_add
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_add
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_add
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_add
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_add
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_add
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_add
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_add
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   -- vec_vaddfp --
+
+   function vec_vaddfp
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   -- vec_vadduwm --
+
+   function vec_vadduwm
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_vadduwm
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_vadduwm
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_vadduwm
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_vadduwm
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_vadduwm
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vadduhm --
+
+   function vec_vadduhm
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_vadduhm
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_vadduhm
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_vadduhm
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_vadduhm
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_vadduhm
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vaddubm --
+
+   function vec_vaddubm
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_vaddubm
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_vaddubm
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_vaddubm
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_vaddubm
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_vaddubm
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_addc --
+
+   function vec_addc
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_adds --
+
+   function vec_adds
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_adds
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_adds
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_adds
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_adds
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_adds
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_adds
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_adds
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_adds
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_adds
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_adds
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_adds
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_adds
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_adds
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_adds
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_adds
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_adds
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_adds
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vaddsws --
+
+   function vec_vaddsws
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_vaddsws
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_vaddsws
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vadduws --
+
+   function vec_vadduws
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_vadduws
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_vadduws
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vaddshs --
+
+   function vec_vaddshs
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_vaddshs
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_vaddshs
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   -- vec_vadduhs --
+
+   function vec_vadduhs
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_vadduhs
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_vadduhs
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vaddsbs --
+
+   function vec_vaddsbs
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_vaddsbs
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_vaddsbs
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   -- vec_vaddubs --
+
+   function vec_vaddubs
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_vaddubs
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_vaddubs
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_and --
+
+   function vec_and
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   function vec_and
+     (A : vector_float;
+      B : vector_bool_int) return vector_float;
+
+   function vec_and
+     (A : vector_bool_int;
+      B : vector_float) return vector_float;
+
+   function vec_and
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int;
+
+   function vec_and
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_and
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_and
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_and
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_and
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_and
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_and
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short;
+
+   function vec_and
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_and
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_and
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_and
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_and
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_and
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_and
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_and
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char;
+
+   function vec_and
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_and
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_and
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_and
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_and
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_andc --
+
+   function vec_andc
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   function vec_andc
+     (A : vector_float;
+      B : vector_bool_int) return vector_float;
+
+   function vec_andc
+     (A : vector_bool_int;
+      B : vector_float) return vector_float;
+
+   function vec_andc
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int;
+
+   function vec_andc
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_andc
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_andc
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_andc
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_andc
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_andc
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_andc
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short;
+
+   function vec_andc
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_andc
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_andc
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_andc
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_andc
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_andc
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_andc
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_andc
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char;
+
+   function vec_andc
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_andc
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_andc
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_andc
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_andc
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_avg --
+
+   function vec_avg
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_avg
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_avg
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_avg
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_avg
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_avg
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vavgsw --
+
+   function vec_vavgsw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vavguw --
+
+   function vec_vavguw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vavgsh --
+
+   function vec_vavgsh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   -- vec_vavguh --
+
+   function vec_vavguh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vavgsb --
+
+   function vec_vavgsb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   -- vec_vavgub --
+
+   function vec_vavgub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_ceil --
+
+   function vec_ceil
+     (A : vector_float) return vector_float;
+
+   -- vec_cmpb --
+
+   function vec_cmpb
+     (A : vector_float;
+      B : vector_float) return vector_signed_int;
+
+   -- vec_cmpeq --
+
+   function vec_cmpeq
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_bool_char;
+
+   function vec_cmpeq
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_bool_char;
+
+   function vec_cmpeq
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_bool_short;
+
+   function vec_cmpeq
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_bool_short;
+
+   function vec_cmpeq
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_bool_int;
+
+   function vec_cmpeq
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_bool_int;
+
+   function vec_cmpeq
+     (A : vector_float;
+      B : vector_float) return vector_bool_int;
+
+   -- vec_vcmpeqfp --
+
+   function vec_vcmpeqfp
+     (A : vector_float;
+      B : vector_float) return vector_bool_int;
+
+   -- vec_vcmpequw --
+
+   function vec_vcmpequw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_bool_int;
+
+   function vec_vcmpequw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_bool_int;
+
+   -- vec_vcmpequh --
+
+   function vec_vcmpequh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_bool_short;
+
+   function vec_vcmpequh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_bool_short;
+
+   -- vec_vcmpequb --
+
+   function vec_vcmpequb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_bool_char;
+
+   function vec_vcmpequb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_bool_char;
+
+   -- vec_cmpge --
+
+   function vec_cmpge
+     (A : vector_float;
+      B : vector_float) return vector_bool_int;
+
+   -- vec_cmpgt --
+
+   function vec_cmpgt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_bool_char;
+
+   function vec_cmpgt
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_bool_char;
+
+   function vec_cmpgt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_bool_short;
+
+   function vec_cmpgt
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_bool_short;
+
+   function vec_cmpgt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_bool_int;
+
+   function vec_cmpgt
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_bool_int;
+
+   function vec_cmpgt
+     (A : vector_float;
+      B : vector_float) return vector_bool_int;
+
+   -- vec_vcmpgtfp --
+
+   function vec_vcmpgtfp
+     (A : vector_float;
+      B : vector_float) return vector_bool_int;
+
+   -- vec_vcmpgtsw --
+
+   function vec_vcmpgtsw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_bool_int;
+
+   -- vec_vcmpgtuw --
+
+   function vec_vcmpgtuw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_bool_int;
+
+   -- vec_vcmpgtsh --
+
+   function vec_vcmpgtsh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_bool_short;
+
+   -- vec_vcmpgtuh --
+
+   function vec_vcmpgtuh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_bool_short;
+
+   -- vec_vcmpgtsb --
+
+   function vec_vcmpgtsb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_bool_char;
+
+   -- vec_vcmpgtub --
+
+   function vec_vcmpgtub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_bool_char;
+
+   -- vec_cmple --
+
+   function vec_cmple
+     (A : vector_float;
+      B : vector_float) return vector_bool_int;
+
+   -- vec_cmplt --
+
+   function vec_cmplt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_bool_char;
+
+   function vec_cmplt
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_bool_char;
+
+   function vec_cmplt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_bool_short;
+
+   function vec_cmplt
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_bool_short;
+
+   function vec_cmplt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_bool_int;
+
+   function vec_cmplt
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_bool_int;
+
+   function vec_cmplt
+     (A : vector_float;
+      B : vector_float) return vector_bool_int;
+
+   -- vec_ctf --
+
+   function vec_ctf
+     (A : vector_unsigned_int;
+      B : c_int) return vector_float
+   renames Low_Level_Interface.vec_ctf_vui_cint_r_vf;
+
+   function vec_ctf
+     (A : vector_signed_int;
+      B : c_int) return vector_float
+   renames Low_Level_Interface.vec_ctf_vsi_cint_r_vf;
+
+   -- vec_vcfsx --
+
+   function vec_vcfsx
+     (A : vector_signed_int;
+      B : c_int) return vector_float
+   renames Low_Level_Interface.vec_vcfsx_vsi_cint_r_vf;
+
+   -- vec_vcfux --
+
+   function vec_vcfux
+     (A : vector_unsigned_int;
+      B : c_int) return vector_float
+   renames Low_Level_Interface.vec_vcfux_vui_cint_r_vf;
+
+   -- vec_cts --
+
+   function vec_cts
+     (A : vector_float;
+      B : c_int) return vector_signed_int
+   renames Low_Level_Interface.vec_cts_vf_cint_r_vsi;
+
+   -- vec_ctu --
+
+   function vec_ctu
+     (A : vector_float;
+      B : c_int) return vector_unsigned_int
+   renames Low_Level_Interface.vec_ctu_vf_cint_r_vui;
+
+   -- vec_dss --
+
+   procedure vec_dss
+     (A : c_int)
+   renames Low_Level_Interface.vec_dss_cint;
+
+   -- vec_dssall --
+
+   procedure vec_dssall
+   renames Low_Level_Interface.vec_dssall;
+
+   -- vec_dst --
+
+   procedure vec_dst
+     (A : const_vector_unsigned_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvucp_cint_cint;
+
+   procedure vec_dst
+     (A : const_vector_signed_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvscp_cint_cint;
+
+   procedure vec_dst
+     (A : const_vector_bool_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvbcp_cint_cint;
+
+   procedure vec_dst
+     (A : const_vector_unsigned_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvusp_cint_cint;
+
+   procedure vec_dst
+     (A : const_vector_signed_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvssp_cint_cint;
+
+   procedure vec_dst
+     (A : const_vector_bool_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvbsp_cint_cint;
+
+   procedure vec_dst
+     (A : const_vector_pixel_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvxp_cint_cint;
+
+   procedure vec_dst
+     (A : const_vector_unsigned_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvuip_cint_cint;
+
+   procedure vec_dst
+     (A : const_vector_signed_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvsip_cint_cint;
+
+   procedure vec_dst
+     (A : const_vector_bool_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvbip_cint_cint;
+
+   procedure vec_dst
+     (A : const_vector_float_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kvfp_cint_cint;
+
+   procedure vec_dst
+     (A : const_unsigned_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kucp_cint_cint;
+
+   procedure vec_dst
+     (A : const_signed_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kscp_cint_cint;
+
+   procedure vec_dst
+     (A : const_unsigned_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kusp_cint_cint;
+
+   procedure vec_dst
+     (A : const_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_ksp_cint_cint;
+
+   procedure vec_dst
+     (A : const_unsigned_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kuip_cint_cint;
+
+   procedure vec_dst
+     (A : const_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kip_cint_cint;
+
+   procedure vec_dst
+     (A : const_unsigned_long_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kulongp_cint_cint;
+
+   procedure vec_dst
+     (A : const_long_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_klongp_cint_cint;
+
+   procedure vec_dst
+     (A : const_float_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dst_kfp_cint_cint;
+
+   -- vec_dstst --
+
+   procedure vec_dstst
+     (A : const_vector_unsigned_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvucp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_vector_signed_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvscp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_vector_bool_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvbcp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_vector_unsigned_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvusp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_vector_signed_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvssp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_vector_bool_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvbsp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_vector_pixel_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvxp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_vector_unsigned_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvuip_cint_cint;
+
+   procedure vec_dstst
+     (A : const_vector_signed_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvsip_cint_cint;
+
+   procedure vec_dstst
+     (A : const_vector_bool_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvbip_cint_cint;
+
+   procedure vec_dstst
+     (A : const_vector_float_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kvfp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_unsigned_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kucp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_signed_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kscp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_unsigned_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kusp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_ksp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_unsigned_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kuip_cint_cint;
+
+   procedure vec_dstst
+     (A : const_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kip_cint_cint;
+
+   procedure vec_dstst
+     (A : const_unsigned_long_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kulongp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_long_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_klongp_cint_cint;
+
+   procedure vec_dstst
+     (A : const_float_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstst_kfp_cint_cint;
+
+   -- vec_dststt --
+
+   procedure vec_dststt
+     (A : const_vector_unsigned_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvucp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_vector_signed_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvscp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_vector_bool_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvbcp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_vector_unsigned_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvusp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_vector_signed_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvssp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_vector_bool_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvbsp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_vector_pixel_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvxp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_vector_unsigned_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvuip_cint_cint;
+
+   procedure vec_dststt
+     (A : const_vector_signed_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvsip_cint_cint;
+
+   procedure vec_dststt
+     (A : const_vector_bool_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvbip_cint_cint;
+
+   procedure vec_dststt
+     (A : const_vector_float_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kvfp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_unsigned_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kucp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_signed_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kscp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_unsigned_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kusp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_ksp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_unsigned_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kuip_cint_cint;
+
+   procedure vec_dststt
+     (A : const_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kip_cint_cint;
+
+   procedure vec_dststt
+     (A : const_unsigned_long_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kulongp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_long_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_klongp_cint_cint;
+
+   procedure vec_dststt
+     (A : const_float_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dststt_kfp_cint_cint;
+
+   -- vec_dstt --
+
+   procedure vec_dstt
+     (A : const_vector_unsigned_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvucp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_vector_signed_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvscp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_vector_bool_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvbcp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_vector_unsigned_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvusp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_vector_signed_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvssp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_vector_bool_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvbsp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_vector_pixel_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvxp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_vector_unsigned_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvuip_cint_cint;
+
+   procedure vec_dstt
+     (A : const_vector_signed_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvsip_cint_cint;
+
+   procedure vec_dstt
+     (A : const_vector_bool_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvbip_cint_cint;
+
+   procedure vec_dstt
+     (A : const_vector_float_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kvfp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_unsigned_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kucp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_signed_char_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kscp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_unsigned_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kusp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_short_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_ksp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_unsigned_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kuip_cint_cint;
+
+   procedure vec_dstt
+     (A : const_int_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kip_cint_cint;
+
+   procedure vec_dstt
+     (A : const_unsigned_long_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kulongp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_long_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_klongp_cint_cint;
+
+   procedure vec_dstt
+     (A : const_float_ptr;
+      B : c_int;
+      C : c_int)
+   renames Low_Level_Interface.vec_dstt_kfp_cint_cint;
+
+   -- vec_expte --
+
+   function vec_expte
+     (A : vector_float) return vector_float;
+
+   -- vec_floor --
+
+   function vec_floor
+     (A : vector_float) return vector_float;
+
+   -- vec_ld --
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_float_ptr) return vector_float;
+
+   function vec_ld
+     (A : c_long;
+      B : const_float_ptr) return vector_float;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_bool_int_ptr) return vector_bool_int;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_signed_int_ptr) return vector_signed_int;
+
+   function vec_ld
+     (A : c_long;
+      B : const_int_ptr) return vector_signed_int;
+
+   function vec_ld
+     (A : c_long;
+      B : const_long_ptr) return vector_signed_int;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_unsigned_int_ptr) return vector_unsigned_int;
+
+   function vec_ld
+     (A : c_long;
+      B : const_unsigned_int_ptr) return vector_unsigned_int;
+
+   function vec_ld
+     (A : c_long;
+      B : const_unsigned_long_ptr) return vector_unsigned_int;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_bool_short_ptr) return vector_bool_short;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_pixel_ptr) return vector_pixel;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_signed_short_ptr) return vector_signed_short;
+
+   function vec_ld
+     (A : c_long;
+      B : const_short_ptr) return vector_signed_short;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_unsigned_short_ptr) return vector_unsigned_short;
+
+   function vec_ld
+     (A : c_long;
+      B : const_unsigned_short_ptr) return vector_unsigned_short;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_bool_char_ptr) return vector_bool_char;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_signed_char_ptr) return vector_signed_char;
+
+   function vec_ld
+     (A : c_long;
+      B : const_signed_char_ptr) return vector_signed_char;
+
+   function vec_ld
+     (A : c_long;
+      B : const_vector_unsigned_char_ptr) return vector_unsigned_char;
+
+   function vec_ld
+     (A : c_long;
+      B : const_unsigned_char_ptr) return vector_unsigned_char;
+
+   -- vec_lde --
+
+   function vec_lde
+     (A : c_long;
+      B : const_signed_char_ptr) return vector_signed_char;
+
+   function vec_lde
+     (A : c_long;
+      B : const_unsigned_char_ptr) return vector_unsigned_char;
+
+   function vec_lde
+     (A : c_long;
+      B : const_short_ptr) return vector_signed_short;
+
+   function vec_lde
+     (A : c_long;
+      B : const_unsigned_short_ptr) return vector_unsigned_short;
+
+   function vec_lde
+     (A : c_long;
+      B : const_float_ptr) return vector_float;
+
+   function vec_lde
+     (A : c_long;
+      B : const_int_ptr) return vector_signed_int;
+
+   function vec_lde
+     (A : c_long;
+      B : const_unsigned_int_ptr) return vector_unsigned_int;
+
+   function vec_lde
+     (A : c_long;
+      B : const_long_ptr) return vector_signed_int;
+
+   function vec_lde
+     (A : c_long;
+      B : const_unsigned_long_ptr) return vector_unsigned_int;
+
+   -- vec_lvewx --
+
+   function vec_lvewx
+     (A : c_long;
+      B : float_ptr) return vector_float;
+
+   function vec_lvewx
+     (A : c_long;
+      B : int_ptr) return vector_signed_int;
+
+   function vec_lvewx
+     (A : c_long;
+      B : unsigned_int_ptr) return vector_unsigned_int;
+
+   function vec_lvewx
+     (A : c_long;
+      B : long_ptr) return vector_signed_int;
+
+   function vec_lvewx
+     (A : c_long;
+      B : unsigned_long_ptr) return vector_unsigned_int;
+
+   -- vec_lvehx --
+
+   function vec_lvehx
+     (A : c_long;
+      B : short_ptr) return vector_signed_short;
+
+   function vec_lvehx
+     (A : c_long;
+      B : unsigned_short_ptr) return vector_unsigned_short;
+
+   -- vec_lvebx --
+
+   function vec_lvebx
+     (A : c_long;
+      B : signed_char_ptr) return vector_signed_char;
+
+   function vec_lvebx
+     (A : c_long;
+      B : unsigned_char_ptr) return vector_unsigned_char;
+
+   -- vec_ldl --
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_float_ptr) return vector_float;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_float_ptr) return vector_float;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_bool_int_ptr) return vector_bool_int;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_signed_int_ptr) return vector_signed_int;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_int_ptr) return vector_signed_int;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_long_ptr) return vector_signed_int;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_unsigned_int_ptr) return vector_unsigned_int;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_unsigned_int_ptr) return vector_unsigned_int;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_unsigned_long_ptr) return vector_unsigned_int;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_bool_short_ptr) return vector_bool_short;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_pixel_ptr) return vector_pixel;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_signed_short_ptr) return vector_signed_short;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_short_ptr) return vector_signed_short;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_unsigned_short_ptr) return vector_unsigned_short;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_unsigned_short_ptr) return vector_unsigned_short;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_bool_char_ptr) return vector_bool_char;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_signed_char_ptr) return vector_signed_char;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_signed_char_ptr) return vector_signed_char;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_vector_unsigned_char_ptr) return vector_unsigned_char;
+
+   function vec_ldl
+     (A : c_long;
+      B : const_unsigned_char_ptr) return vector_unsigned_char;
+
+   -- vec_loge --
+
+   function vec_loge
+     (A : vector_float) return vector_float;
+
+   -- vec_lvsl --
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_unsigned_char_ptr) return vector_unsigned_char;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_signed_char_ptr) return vector_unsigned_char;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_unsigned_short_ptr) return vector_unsigned_char;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_short_ptr) return vector_unsigned_char;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_unsigned_int_ptr) return vector_unsigned_char;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_int_ptr) return vector_unsigned_char;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_unsigned_long_ptr) return vector_unsigned_char;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_long_ptr) return vector_unsigned_char;
+
+   function vec_lvsl
+     (A : c_long;
+      B : constv_float_ptr) return vector_unsigned_char;
+
+   -- vec_lvsr --
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_unsigned_char_ptr) return vector_unsigned_char;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_signed_char_ptr) return vector_unsigned_char;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_unsigned_short_ptr) return vector_unsigned_char;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_short_ptr) return vector_unsigned_char;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_unsigned_int_ptr) return vector_unsigned_char;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_int_ptr) return vector_unsigned_char;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_unsigned_long_ptr) return vector_unsigned_char;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_long_ptr) return vector_unsigned_char;
+
+   function vec_lvsr
+     (A : c_long;
+      B : constv_float_ptr) return vector_unsigned_char;
+
+   -- vec_madd --
+
+   function vec_madd
+     (A : vector_float;
+      B : vector_float;
+      C : vector_float) return vector_float;
+
+   -- vec_madds --
+
+   function vec_madds
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short;
+
+   -- vec_max --
+
+   function vec_max
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_max
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_max
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_max
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_max
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_max
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_max
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_max
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_max
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_max
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_max
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_max
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_max
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_max
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_max
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_max
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_max
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_max
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_max
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   -- vec_vmaxfp --
+
+   function vec_vmaxfp
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   -- vec_vmaxsw --
+
+   function vec_vmaxsw
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_vmaxsw
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_vmaxsw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vmaxuw --
+
+   function vec_vmaxuw
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_vmaxuw
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_vmaxuw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vmaxsh --
+
+   function vec_vmaxsh
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_vmaxsh
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_vmaxsh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   -- vec_vmaxuh --
+
+   function vec_vmaxuh
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_vmaxuh
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_vmaxuh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vmaxsb --
+
+   function vec_vmaxsb
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_vmaxsb
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_vmaxsb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   -- vec_vmaxub --
+
+   function vec_vmaxub
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_vmaxub
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_vmaxub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_mergeh --
+
+   function vec_mergeh
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char;
+
+   function vec_mergeh
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_mergeh
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_mergeh
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short;
+
+   function vec_mergeh
+     (A : vector_pixel;
+      B : vector_pixel) return vector_pixel;
+
+   function vec_mergeh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_mergeh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_mergeh
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   function vec_mergeh
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int;
+
+   function vec_mergeh
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_mergeh
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vmrghw --
+
+   function vec_vmrghw
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   function vec_vmrghw
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int;
+
+   function vec_vmrghw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_vmrghw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vmrghh --
+
+   function vec_vmrghh
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short;
+
+   function vec_vmrghh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_vmrghh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_vmrghh
+     (A : vector_pixel;
+      B : vector_pixel) return vector_pixel;
+
+   -- vec_vmrghb --
+
+   function vec_vmrghb
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char;
+
+   function vec_vmrghb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_vmrghb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_mergel --
+
+   function vec_mergel
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char;
+
+   function vec_mergel
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_mergel
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_mergel
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short;
+
+   function vec_mergel
+     (A : vector_pixel;
+      B : vector_pixel) return vector_pixel;
+
+   function vec_mergel
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_mergel
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_mergel
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   function vec_mergel
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int;
+
+   function vec_mergel
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_mergel
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vmrglw --
+
+   function vec_vmrglw
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   function vec_vmrglw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_vmrglw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_vmrglw
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int;
+
+   -- vec_vmrglh --
+
+   function vec_vmrglh
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short;
+
+   function vec_vmrglh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_vmrglh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_vmrglh
+     (A : vector_pixel;
+      B : vector_pixel) return vector_pixel;
+
+   -- vec_vmrglb --
+
+   function vec_vmrglb
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char;
+
+   function vec_vmrglb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_vmrglb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_mfvscr --
+
+   function vec_mfvscr return vector_unsigned_short;
+
+   -- vec_min --
+
+   function vec_min
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_min
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_min
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_min
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_min
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_min
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_min
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_min
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_min
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_min
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_min
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_min
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_min
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_min
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_min
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_min
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_min
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_min
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_min
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   -- vec_vminfp --
+
+   function vec_vminfp
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   -- vec_vminsw --
+
+   function vec_vminsw
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_vminsw
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_vminsw
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vminuw --
+
+   function vec_vminuw
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_vminuw
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_vminuw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vminsh --
+
+   function vec_vminsh
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_vminsh
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_vminsh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   -- vec_vminuh --
+
+   function vec_vminuh
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_vminuh
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_vminuh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vminsb --
+
+   function vec_vminsb
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_vminsb
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_vminsb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   -- vec_vminub --
+
+   function vec_vminub
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_vminub
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_vminub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_mladd --
+
+   function vec_mladd
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short;
+
+   function vec_mladd
+     (A : vector_signed_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_short) return vector_signed_short;
+
+   function vec_mladd
+     (A : vector_unsigned_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short;
+
+   function vec_mladd
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_mradds --
+
+   function vec_mradds
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short;
+
+   -- vec_msum --
+
+   function vec_msum
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_msum
+     (A : vector_signed_char;
+      B : vector_unsigned_char;
+      C : vector_signed_int) return vector_signed_int;
+
+   function vec_msum
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_msum
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_int) return vector_signed_int;
+
+   -- vec_vmsumshm --
+
+   function vec_vmsumshm
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_int) return vector_signed_int;
+
+   -- vec_vmsumuhm --
+
+   function vec_vmsumuhm
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vmsummbm --
+
+   function vec_vmsummbm
+     (A : vector_signed_char;
+      B : vector_unsigned_char;
+      C : vector_signed_int) return vector_signed_int;
+
+   -- vec_vmsumubm --
+
+   function vec_vmsumubm
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_msums --
+
+   function vec_msums
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_msums
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_int) return vector_signed_int;
+
+   -- vec_vmsumshs --
+
+   function vec_vmsumshs
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_int) return vector_signed_int;
+
+   -- vec_vmsumuhs --
+
+   function vec_vmsumuhs
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_mtvscr --
+
+   procedure vec_mtvscr
+     (A : vector_signed_int);
+
+   procedure vec_mtvscr
+     (A : vector_unsigned_int);
+
+   procedure vec_mtvscr
+     (A : vector_bool_int);
+
+   procedure vec_mtvscr
+     (A : vector_signed_short);
+
+   procedure vec_mtvscr
+     (A : vector_unsigned_short);
+
+   procedure vec_mtvscr
+     (A : vector_bool_short);
+
+   procedure vec_mtvscr
+     (A : vector_pixel);
+
+   procedure vec_mtvscr
+     (A : vector_signed_char);
+
+   procedure vec_mtvscr
+     (A : vector_unsigned_char);
+
+   procedure vec_mtvscr
+     (A : vector_bool_char);
+
+   -- vec_mule --
+
+   function vec_mule
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_short;
+
+   function vec_mule
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_short;
+
+   function vec_mule
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_int;
+
+   function vec_mule
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_int;
+
+   -- vec_vmulesh --
+
+   function vec_vmulesh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_int;
+
+   -- vec_vmuleuh --
+
+   function vec_vmuleuh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_int;
+
+   -- vec_vmulesb --
+
+   function vec_vmulesb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_short;
+
+   -- vec_vmuleub --
+
+   function vec_vmuleub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_short;
+
+   -- vec_mulo --
+
+   function vec_mulo
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_short;
+
+   function vec_mulo
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_short;
+
+   function vec_mulo
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_int;
+
+   function vec_mulo
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_int;
+
+   -- vec_vmulosh --
+
+   function vec_vmulosh
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_int;
+
+   -- vec_vmulouh --
+
+   function vec_vmulouh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_int;
+
+   -- vec_vmulosb --
+
+   function vec_vmulosb
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_short;
+
+   -- vec_vmuloub --
+
+   function vec_vmuloub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_short;
+
+   -- vec_nmsub --
+
+   function vec_nmsub
+     (A : vector_float;
+      B : vector_float;
+      C : vector_float) return vector_float;
+
+   -- vec_nor --
+
+   function vec_nor
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   function vec_nor
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_nor
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_nor
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int;
+
+   function vec_nor
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_nor
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_nor
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short;
+
+   function vec_nor
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_nor
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_nor
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char;
+
+   -- vec_or --
+
+   function vec_or
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   function vec_or
+     (A : vector_float;
+      B : vector_bool_int) return vector_float;
+
+   function vec_or
+     (A : vector_bool_int;
+      B : vector_float) return vector_float;
+
+   function vec_or
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int;
+
+   function vec_or
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_or
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_or
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_or
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_or
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_or
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_or
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short;
+
+   function vec_or
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_or
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_or
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_or
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_or
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_or
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_or
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_or
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char;
+
+   function vec_or
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_or
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_or
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_or
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_or
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_pack --
+
+   function vec_pack
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_char;
+
+   function vec_pack
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_char;
+
+   function vec_pack
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_char;
+
+   function vec_pack
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_short;
+
+   function vec_pack
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_short;
+
+   function vec_pack
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_short;
+
+   -- vec_vpkuwum --
+
+   function vec_vpkuwum
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_short;
+
+   function vec_vpkuwum
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_short;
+
+   function vec_vpkuwum
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_short;
+
+   -- vec_vpkuhum --
+
+   function vec_vpkuhum
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_char;
+
+   function vec_vpkuhum
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_char;
+
+   function vec_vpkuhum
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_char;
+
+   -- vec_packpx --
+
+   function vec_packpx
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_pixel;
+
+   -- vec_packs --
+
+   function vec_packs
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_char;
+
+   function vec_packs
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_char;
+
+   function vec_packs
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_short;
+
+   function vec_packs
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_short;
+
+   -- vec_vpkswss --
+
+   function vec_vpkswss
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_short;
+
+   -- vec_vpkuwus --
+
+   function vec_vpkuwus
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_short;
+
+   -- vec_vpkshss --
+
+   function vec_vpkshss
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_char;
+
+   -- vec_vpkuhus --
+
+   function vec_vpkuhus
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_char;
+
+   -- vec_packsu --
+
+   function vec_packsu
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_char;
+
+   function vec_packsu
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_unsigned_char;
+
+   function vec_packsu
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_short;
+
+   function vec_packsu
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_unsigned_short;
+
+   -- vec_vpkswus --
+
+   function vec_vpkswus
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_unsigned_short;
+
+   -- vec_vpkshus --
+
+   function vec_vpkshus
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_unsigned_char;
+
+   -- vec_perm --
+
+   function vec_perm
+     (A : vector_float;
+      B : vector_float;
+      C : vector_unsigned_char) return vector_float;
+
+   function vec_perm
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : vector_unsigned_char) return vector_signed_int;
+
+   function vec_perm
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : vector_unsigned_char) return vector_unsigned_int;
+
+   function vec_perm
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : vector_unsigned_char) return vector_bool_int;
+
+   function vec_perm
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_unsigned_char) return vector_signed_short;
+
+   function vec_perm
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_char) return vector_unsigned_short;
+
+   function vec_perm
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : vector_unsigned_char) return vector_bool_short;
+
+   function vec_perm
+     (A : vector_pixel;
+      B : vector_pixel;
+      C : vector_unsigned_char) return vector_pixel;
+
+   function vec_perm
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : vector_unsigned_char) return vector_signed_char;
+
+   function vec_perm
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_perm
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : vector_unsigned_char) return vector_bool_char;
+
+   -- vec_re --
+
+   function vec_re
+     (A : vector_float) return vector_float;
+
+   -- vec_rl --
+
+   function vec_rl
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_rl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_rl
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short;
+
+   function vec_rl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_rl
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int;
+
+   function vec_rl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vrlw --
+
+   function vec_vrlw
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int;
+
+   function vec_vrlw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vrlh --
+
+   function vec_vrlh
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short;
+
+   function vec_vrlh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vrlb --
+
+   function vec_vrlb
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_vrlb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_round --
+
+   function vec_round
+     (A : vector_float) return vector_float;
+
+   -- vec_rsqrte --
+
+   function vec_rsqrte
+     (A : vector_float) return vector_float;
+
+   -- vec_sel --
+
+   function vec_sel
+     (A : vector_float;
+      B : vector_float;
+      C : vector_bool_int) return vector_float;
+
+   function vec_sel
+     (A : vector_float;
+      B : vector_float;
+      C : vector_unsigned_int) return vector_float;
+
+   function vec_sel
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : vector_bool_int) return vector_signed_int;
+
+   function vec_sel
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : vector_unsigned_int) return vector_signed_int;
+
+   function vec_sel
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : vector_bool_int) return vector_unsigned_int;
+
+   function vec_sel
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_sel
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : vector_bool_int) return vector_bool_int;
+
+   function vec_sel
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : vector_unsigned_int) return vector_bool_int;
+
+   function vec_sel
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_bool_short) return vector_signed_short;
+
+   function vec_sel
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_unsigned_short) return vector_signed_short;
+
+   function vec_sel
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_bool_short) return vector_unsigned_short;
+
+   function vec_sel
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_sel
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : vector_bool_short) return vector_bool_short;
+
+   function vec_sel
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : vector_unsigned_short) return vector_bool_short;
+
+   function vec_sel
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : vector_bool_char) return vector_signed_char;
+
+   function vec_sel
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : vector_unsigned_char) return vector_signed_char;
+
+   function vec_sel
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_bool_char) return vector_unsigned_char;
+
+   function vec_sel
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_sel
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : vector_bool_char) return vector_bool_char;
+
+   function vec_sel
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : vector_unsigned_char) return vector_bool_char;
+
+   -- vec_sl --
+
+   function vec_sl
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_sl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_sl
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short;
+
+   function vec_sl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_sl
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int;
+
+   function vec_sl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vslw --
+
+   function vec_vslw
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int;
+
+   function vec_vslw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vslh --
+
+   function vec_vslh
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short;
+
+   function vec_vslh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vslb --
+
+   function vec_vslb
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_vslb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_sld --
+
+   function vec_sld
+     (A : vector_float;
+      B : vector_float;
+      C : c_int) return vector_float
+   renames Low_Level_Interface.vec_sld_vf_vf_cint_r_vf;
+
+   function vec_sld
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : c_int) return vector_signed_int
+   renames Low_Level_Interface.vec_sld_vsi_vsi_cint_r_vsi;
+
+   function vec_sld
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : c_int) return vector_unsigned_int
+   renames Low_Level_Interface.vec_sld_vui_vui_cint_r_vui;
+
+   function vec_sld
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : c_int) return vector_bool_int
+   renames Low_Level_Interface.vec_sld_vbi_vbi_cint_r_vbi;
+
+   function vec_sld
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : c_int) return vector_signed_short
+   renames Low_Level_Interface.vec_sld_vss_vss_cint_r_vss;
+
+   function vec_sld
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : c_int) return vector_unsigned_short
+   renames Low_Level_Interface.vec_sld_vus_vus_cint_r_vus;
+
+   function vec_sld
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : c_int) return vector_bool_short
+   renames Low_Level_Interface.vec_sld_vbs_vbs_cint_r_vbs;
+
+   function vec_sld
+     (A : vector_pixel;
+      B : vector_pixel;
+      C : c_int) return vector_pixel
+   renames Low_Level_Interface.vec_sld_vx_vx_cint_r_vx;
+
+   function vec_sld
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : c_int) return vector_signed_char
+   renames Low_Level_Interface.vec_sld_vsc_vsc_cint_r_vsc;
+
+   function vec_sld
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : c_int) return vector_unsigned_char
+   renames Low_Level_Interface.vec_sld_vuc_vuc_cint_r_vuc;
+
+   function vec_sld
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : c_int) return vector_bool_char
+   renames Low_Level_Interface.vec_sld_vbc_vbc_cint_r_vbc;
+
+   -- vec_sll --
+
+   function vec_sll
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int;
+
+   function vec_sll
+     (A : vector_signed_int;
+      B : vector_unsigned_short) return vector_signed_int;
+
+   function vec_sll
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int;
+
+   function vec_sll
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_sll
+     (A : vector_unsigned_int;
+      B : vector_unsigned_short) return vector_unsigned_int;
+
+   function vec_sll
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int;
+
+   function vec_sll
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_bool_int;
+
+   function vec_sll
+     (A : vector_bool_int;
+      B : vector_unsigned_short) return vector_bool_int;
+
+   function vec_sll
+     (A : vector_bool_int;
+      B : vector_unsigned_char) return vector_bool_int;
+
+   function vec_sll
+     (A : vector_signed_short;
+      B : vector_unsigned_int) return vector_signed_short;
+
+   function vec_sll
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short;
+
+   function vec_sll
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short;
+
+   function vec_sll
+     (A : vector_unsigned_short;
+      B : vector_unsigned_int) return vector_unsigned_short;
+
+   function vec_sll
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_sll
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short;
+
+   function vec_sll
+     (A : vector_bool_short;
+      B : vector_unsigned_int) return vector_bool_short;
+
+   function vec_sll
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_bool_short;
+
+   function vec_sll
+     (A : vector_bool_short;
+      B : vector_unsigned_char) return vector_bool_short;
+
+   function vec_sll
+     (A : vector_pixel;
+      B : vector_unsigned_int) return vector_pixel;
+
+   function vec_sll
+     (A : vector_pixel;
+      B : vector_unsigned_short) return vector_pixel;
+
+   function vec_sll
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel;
+
+   function vec_sll
+     (A : vector_signed_char;
+      B : vector_unsigned_int) return vector_signed_char;
+
+   function vec_sll
+     (A : vector_signed_char;
+      B : vector_unsigned_short) return vector_signed_char;
+
+   function vec_sll
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_sll
+     (A : vector_unsigned_char;
+      B : vector_unsigned_int) return vector_unsigned_char;
+
+   function vec_sll
+     (A : vector_unsigned_char;
+      B : vector_unsigned_short) return vector_unsigned_char;
+
+   function vec_sll
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_sll
+     (A : vector_bool_char;
+      B : vector_unsigned_int) return vector_bool_char;
+
+   function vec_sll
+     (A : vector_bool_char;
+      B : vector_unsigned_short) return vector_bool_char;
+
+   function vec_sll
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_bool_char;
+
+   -- vec_slo --
+
+   function vec_slo
+     (A : vector_float;
+      B : vector_signed_char) return vector_float;
+
+   function vec_slo
+     (A : vector_float;
+      B : vector_unsigned_char) return vector_float;
+
+   function vec_slo
+     (A : vector_signed_int;
+      B : vector_signed_char) return vector_signed_int;
+
+   function vec_slo
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int;
+
+   function vec_slo
+     (A : vector_unsigned_int;
+      B : vector_signed_char) return vector_unsigned_int;
+
+   function vec_slo
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int;
+
+   function vec_slo
+     (A : vector_signed_short;
+      B : vector_signed_char) return vector_signed_short;
+
+   function vec_slo
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short;
+
+   function vec_slo
+     (A : vector_unsigned_short;
+      B : vector_signed_char) return vector_unsigned_short;
+
+   function vec_slo
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short;
+
+   function vec_slo
+     (A : vector_pixel;
+      B : vector_signed_char) return vector_pixel;
+
+   function vec_slo
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel;
+
+   function vec_slo
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_slo
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_slo
+     (A : vector_unsigned_char;
+      B : vector_signed_char) return vector_unsigned_char;
+
+   function vec_slo
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_splat --
+
+   function vec_splat
+     (A : vector_signed_char;
+      B : c_int) return vector_signed_char
+   renames Low_Level_Interface.vec_splat_vsc_cint_r_vsc;
+
+   function vec_splat
+     (A : vector_unsigned_char;
+      B : c_int) return vector_unsigned_char
+   renames Low_Level_Interface.vec_splat_vuc_cint_r_vuc;
+
+   function vec_splat
+     (A : vector_bool_char;
+      B : c_int) return vector_bool_char
+   renames Low_Level_Interface.vec_splat_vbc_cint_r_vbc;
+
+   function vec_splat
+     (A : vector_signed_short;
+      B : c_int) return vector_signed_short
+   renames Low_Level_Interface.vec_splat_vss_cint_r_vss;
+
+   function vec_splat
+     (A : vector_unsigned_short;
+      B : c_int) return vector_unsigned_short
+   renames Low_Level_Interface.vec_splat_vus_cint_r_vus;
+
+   function vec_splat
+     (A : vector_bool_short;
+      B : c_int) return vector_bool_short
+   renames Low_Level_Interface.vec_splat_vbs_cint_r_vbs;
+
+   function vec_splat
+     (A : vector_pixel;
+      B : c_int) return vector_pixel
+   renames Low_Level_Interface.vec_splat_vx_cint_r_vx;
+
+   function vec_splat
+     (A : vector_float;
+      B : c_int) return vector_float
+   renames Low_Level_Interface.vec_splat_vf_cint_r_vf;
+
+   function vec_splat
+     (A : vector_signed_int;
+      B : c_int) return vector_signed_int
+   renames Low_Level_Interface.vec_splat_vsi_cint_r_vsi;
+
+   function vec_splat
+     (A : vector_unsigned_int;
+      B : c_int) return vector_unsigned_int
+   renames Low_Level_Interface.vec_splat_vui_cint_r_vui;
+
+   function vec_splat
+     (A : vector_bool_int;
+      B : c_int) return vector_bool_int
+   renames Low_Level_Interface.vec_splat_vbi_cint_r_vbi;
+
+   -- vec_vspltw --
+
+   function vec_vspltw
+     (A : vector_float;
+      B : c_int) return vector_float
+   renames Low_Level_Interface.vec_vspltw_vf_cint_r_vf;
+
+   function vec_vspltw
+     (A : vector_signed_int;
+      B : c_int) return vector_signed_int
+   renames Low_Level_Interface.vec_vspltw_vsi_cint_r_vsi;
+
+   function vec_vspltw
+     (A : vector_unsigned_int;
+      B : c_int) return vector_unsigned_int
+   renames Low_Level_Interface.vec_vspltw_vui_cint_r_vui;
+
+   function vec_vspltw
+     (A : vector_bool_int;
+      B : c_int) return vector_bool_int
+   renames Low_Level_Interface.vec_vspltw_vbi_cint_r_vbi;
+
+   -- vec_vsplth --
+
+   function vec_vsplth
+     (A : vector_bool_short;
+      B : c_int) return vector_bool_short
+   renames Low_Level_Interface.vec_vsplth_vbs_cint_r_vbs;
+
+   function vec_vsplth
+     (A : vector_signed_short;
+      B : c_int) return vector_signed_short
+   renames Low_Level_Interface.vec_vsplth_vss_cint_r_vss;
+
+   function vec_vsplth
+     (A : vector_unsigned_short;
+      B : c_int) return vector_unsigned_short
+   renames Low_Level_Interface.vec_vsplth_vus_cint_r_vus;
+
+   function vec_vsplth
+     (A : vector_pixel;
+      B : c_int) return vector_pixel
+   renames Low_Level_Interface.vec_vsplth_vx_cint_r_vx;
+
+   -- vec_vspltb --
+
+   function vec_vspltb
+     (A : vector_signed_char;
+      B : c_int) return vector_signed_char
+   renames Low_Level_Interface.vec_vspltb_vsc_cint_r_vsc;
+
+   function vec_vspltb
+     (A : vector_unsigned_char;
+      B : c_int) return vector_unsigned_char
+   renames Low_Level_Interface.vec_vspltb_vuc_cint_r_vuc;
+
+   function vec_vspltb
+     (A : vector_bool_char;
+      B : c_int) return vector_bool_char
+   renames Low_Level_Interface.vec_vspltb_vbc_cint_r_vbc;
+
+   -- vec_splat_s8 --
+
+   function vec_splat_s8
+     (A : c_int) return vector_signed_char
+   renames Low_Level_Interface.vec_splat_s8_cint_r_vsc;
+
+   -- vec_splat_s16 --
+
+   function vec_splat_s16
+     (A : c_int) return vector_signed_short
+   renames Low_Level_Interface.vec_splat_s16_cint_r_vss;
+
+   -- vec_splat_s32 --
+
+   function vec_splat_s32
+     (A : c_int) return vector_signed_int
+   renames Low_Level_Interface.vec_splat_s32_cint_r_vsi;
+
+   -- vec_splat_u8 --
+
+   function vec_splat_u8
+     (A : c_int) return vector_unsigned_char
+   renames Low_Level_Interface.vec_splat_u8_cint_r_vuc;
+
+   -- vec_splat_u16 --
+
+   function vec_splat_u16
+     (A : c_int) return vector_unsigned_short
+   renames Low_Level_Interface.vec_splat_u16_cint_r_vus;
+
+   -- vec_splat_u32 --
+
+   function vec_splat_u32
+     (A : c_int) return vector_unsigned_int
+   renames Low_Level_Interface.vec_splat_u32_cint_r_vui;
+
+   -- vec_sr --
+
+   function vec_sr
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_sr
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_sr
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short;
+
+   function vec_sr
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_sr
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int;
+
+   function vec_sr
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vsrw --
+
+   function vec_vsrw
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int;
+
+   function vec_vsrw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vsrh --
+
+   function vec_vsrh
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short;
+
+   function vec_vsrh
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vsrb --
+
+   function vec_vsrb
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_vsrb
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_sra --
+
+   function vec_sra
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_sra
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_sra
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short;
+
+   function vec_sra
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_sra
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int;
+
+   function vec_sra
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vsraw --
+
+   function vec_vsraw
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int;
+
+   function vec_vsraw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vsrah --
+
+   function vec_vsrah
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short;
+
+   function vec_vsrah
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vsrab --
+
+   function vec_vsrab
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_vsrab
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_srl --
+
+   function vec_srl
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int;
+
+   function vec_srl
+     (A : vector_signed_int;
+      B : vector_unsigned_short) return vector_signed_int;
+
+   function vec_srl
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int;
+
+   function vec_srl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_srl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_short) return vector_unsigned_int;
+
+   function vec_srl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int;
+
+   function vec_srl
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_bool_int;
+
+   function vec_srl
+     (A : vector_bool_int;
+      B : vector_unsigned_short) return vector_bool_int;
+
+   function vec_srl
+     (A : vector_bool_int;
+      B : vector_unsigned_char) return vector_bool_int;
+
+   function vec_srl
+     (A : vector_signed_short;
+      B : vector_unsigned_int) return vector_signed_short;
+
+   function vec_srl
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short;
+
+   function vec_srl
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short;
+
+   function vec_srl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_int) return vector_unsigned_short;
+
+   function vec_srl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_srl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short;
+
+   function vec_srl
+     (A : vector_bool_short;
+      B : vector_unsigned_int) return vector_bool_short;
+
+   function vec_srl
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_bool_short;
+
+   function vec_srl
+     (A : vector_bool_short;
+      B : vector_unsigned_char) return vector_bool_short;
+
+   function vec_srl
+     (A : vector_pixel;
+      B : vector_unsigned_int) return vector_pixel;
+
+   function vec_srl
+     (A : vector_pixel;
+      B : vector_unsigned_short) return vector_pixel;
+
+   function vec_srl
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel;
+
+   function vec_srl
+     (A : vector_signed_char;
+      B : vector_unsigned_int) return vector_signed_char;
+
+   function vec_srl
+     (A : vector_signed_char;
+      B : vector_unsigned_short) return vector_signed_char;
+
+   function vec_srl
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_srl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_int) return vector_unsigned_char;
+
+   function vec_srl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_short) return vector_unsigned_char;
+
+   function vec_srl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_srl
+     (A : vector_bool_char;
+      B : vector_unsigned_int) return vector_bool_char;
+
+   function vec_srl
+     (A : vector_bool_char;
+      B : vector_unsigned_short) return vector_bool_char;
+
+   function vec_srl
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_bool_char;
+
+   -- vec_sro --
+
+   function vec_sro
+     (A : vector_float;
+      B : vector_signed_char) return vector_float;
+
+   function vec_sro
+     (A : vector_float;
+      B : vector_unsigned_char) return vector_float;
+
+   function vec_sro
+     (A : vector_signed_int;
+      B : vector_signed_char) return vector_signed_int;
+
+   function vec_sro
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int;
+
+   function vec_sro
+     (A : vector_unsigned_int;
+      B : vector_signed_char) return vector_unsigned_int;
+
+   function vec_sro
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int;
+
+   function vec_sro
+     (A : vector_signed_short;
+      B : vector_signed_char) return vector_signed_short;
+
+   function vec_sro
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short;
+
+   function vec_sro
+     (A : vector_unsigned_short;
+      B : vector_signed_char) return vector_unsigned_short;
+
+   function vec_sro
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short;
+
+   function vec_sro
+     (A : vector_pixel;
+      B : vector_signed_char) return vector_pixel;
+
+   function vec_sro
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel;
+
+   function vec_sro
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_sro
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char;
+
+   function vec_sro
+     (A : vector_unsigned_char;
+      B : vector_signed_char) return vector_unsigned_char;
+
+   function vec_sro
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_st --
+
+   procedure vec_st
+     (A : vector_float;
+      B : c_int;
+      C : vector_float_ptr);
+
+   procedure vec_st
+     (A : vector_float;
+      B : c_int;
+      C : float_ptr);
+
+   procedure vec_st
+     (A : vector_signed_int;
+      B : c_int;
+      C : vector_signed_int_ptr);
+
+   procedure vec_st
+     (A : vector_signed_int;
+      B : c_int;
+      C : int_ptr);
+
+   procedure vec_st
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : vector_unsigned_int_ptr);
+
+   procedure vec_st
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : unsigned_int_ptr);
+
+   procedure vec_st
+     (A : vector_bool_int;
+      B : c_int;
+      C : vector_bool_int_ptr);
+
+   procedure vec_st
+     (A : vector_bool_int;
+      B : c_int;
+      C : unsigned_int_ptr);
+
+   procedure vec_st
+     (A : vector_bool_int;
+      B : c_int;
+      C : int_ptr);
+
+   procedure vec_st
+     (A : vector_signed_short;
+      B : c_int;
+      C : vector_signed_short_ptr);
+
+   procedure vec_st
+     (A : vector_signed_short;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_st
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : vector_unsigned_short_ptr);
+
+   procedure vec_st
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_st
+     (A : vector_bool_short;
+      B : c_int;
+      C : vector_bool_short_ptr);
+
+   procedure vec_st
+     (A : vector_bool_short;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_st
+     (A : vector_pixel;
+      B : c_int;
+      C : vector_pixel_ptr);
+
+   procedure vec_st
+     (A : vector_pixel;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_st
+     (A : vector_pixel;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_st
+     (A : vector_bool_short;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_st
+     (A : vector_signed_char;
+      B : c_int;
+      C : vector_signed_char_ptr);
+
+   procedure vec_st
+     (A : vector_signed_char;
+      B : c_int;
+      C : signed_char_ptr);
+
+   procedure vec_st
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : vector_unsigned_char_ptr);
+
+   procedure vec_st
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : unsigned_char_ptr);
+
+   procedure vec_st
+     (A : vector_bool_char;
+      B : c_int;
+      C : vector_bool_char_ptr);
+
+   procedure vec_st
+     (A : vector_bool_char;
+      B : c_int;
+      C : unsigned_char_ptr);
+
+   procedure vec_st
+     (A : vector_bool_char;
+      B : c_int;
+      C : signed_char_ptr);
+
+   -- vec_ste --
+
+   procedure vec_ste
+     (A : vector_signed_char;
+      B : c_int;
+      C : signed_char_ptr);
+
+   procedure vec_ste
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : unsigned_char_ptr);
+
+   procedure vec_ste
+     (A : vector_bool_char;
+      B : c_int;
+      C : signed_char_ptr);
+
+   procedure vec_ste
+     (A : vector_bool_char;
+      B : c_int;
+      C : unsigned_char_ptr);
+
+   procedure vec_ste
+     (A : vector_signed_short;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_ste
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_ste
+     (A : vector_bool_short;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_ste
+     (A : vector_bool_short;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_ste
+     (A : vector_pixel;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_ste
+     (A : vector_pixel;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_ste
+     (A : vector_float;
+      B : c_int;
+      C : float_ptr);
+
+   procedure vec_ste
+     (A : vector_signed_int;
+      B : c_int;
+      C : int_ptr);
+
+   procedure vec_ste
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : unsigned_int_ptr);
+
+   procedure vec_ste
+     (A : vector_bool_int;
+      B : c_int;
+      C : int_ptr);
+
+   procedure vec_ste
+     (A : vector_bool_int;
+      B : c_int;
+      C : unsigned_int_ptr);
+
+   -- vec_stvewx --
+
+   procedure vec_stvewx
+     (A : vector_float;
+      B : c_int;
+      C : float_ptr);
+
+   procedure vec_stvewx
+     (A : vector_signed_int;
+      B : c_int;
+      C : int_ptr);
+
+   procedure vec_stvewx
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : unsigned_int_ptr);
+
+   procedure vec_stvewx
+     (A : vector_bool_int;
+      B : c_int;
+      C : int_ptr);
+
+   procedure vec_stvewx
+     (A : vector_bool_int;
+      B : c_int;
+      C : unsigned_int_ptr);
+
+   -- vec_stvehx --
+
+   procedure vec_stvehx
+     (A : vector_signed_short;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_stvehx
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_stvehx
+     (A : vector_bool_short;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_stvehx
+     (A : vector_bool_short;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_stvehx
+     (A : vector_pixel;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_stvehx
+     (A : vector_pixel;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   -- vec_stvebx --
+
+   procedure vec_stvebx
+     (A : vector_signed_char;
+      B : c_int;
+      C : signed_char_ptr);
+
+   procedure vec_stvebx
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : unsigned_char_ptr);
+
+   procedure vec_stvebx
+     (A : vector_bool_char;
+      B : c_int;
+      C : signed_char_ptr);
+
+   procedure vec_stvebx
+     (A : vector_bool_char;
+      B : c_int;
+      C : unsigned_char_ptr);
+
+   -- vec_stl --
+
+   procedure vec_stl
+     (A : vector_float;
+      B : c_int;
+      C : vector_float_ptr);
+
+   procedure vec_stl
+     (A : vector_float;
+      B : c_int;
+      C : float_ptr);
+
+   procedure vec_stl
+     (A : vector_signed_int;
+      B : c_int;
+      C : vector_signed_int_ptr);
+
+   procedure vec_stl
+     (A : vector_signed_int;
+      B : c_int;
+      C : int_ptr);
+
+   procedure vec_stl
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : vector_unsigned_int_ptr);
+
+   procedure vec_stl
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : unsigned_int_ptr);
+
+   procedure vec_stl
+     (A : vector_bool_int;
+      B : c_int;
+      C : vector_bool_int_ptr);
+
+   procedure vec_stl
+     (A : vector_bool_int;
+      B : c_int;
+      C : unsigned_int_ptr);
+
+   procedure vec_stl
+     (A : vector_bool_int;
+      B : c_int;
+      C : int_ptr);
+
+   procedure vec_stl
+     (A : vector_signed_short;
+      B : c_int;
+      C : vector_signed_short_ptr);
+
+   procedure vec_stl
+     (A : vector_signed_short;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_stl
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : vector_unsigned_short_ptr);
+
+   procedure vec_stl
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_stl
+     (A : vector_bool_short;
+      B : c_int;
+      C : vector_bool_short_ptr);
+
+   procedure vec_stl
+     (A : vector_bool_short;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_stl
+     (A : vector_bool_short;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_stl
+     (A : vector_pixel;
+      B : c_int;
+      C : vector_pixel_ptr);
+
+   procedure vec_stl
+     (A : vector_pixel;
+      B : c_int;
+      C : unsigned_short_ptr);
+
+   procedure vec_stl
+     (A : vector_pixel;
+      B : c_int;
+      C : short_ptr);
+
+   procedure vec_stl
+     (A : vector_signed_char;
+      B : c_int;
+      C : vector_signed_char_ptr);
+
+   procedure vec_stl
+     (A : vector_signed_char;
+      B : c_int;
+      C : signed_char_ptr);
+
+   procedure vec_stl
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : vector_unsigned_char_ptr);
+
+   procedure vec_stl
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : unsigned_char_ptr);
+
+   procedure vec_stl
+     (A : vector_bool_char;
+      B : c_int;
+      C : vector_bool_char_ptr);
+
+   procedure vec_stl
+     (A : vector_bool_char;
+      B : c_int;
+      C : unsigned_char_ptr);
+
+   procedure vec_stl
+     (A : vector_bool_char;
+      B : c_int;
+      C : signed_char_ptr);
+
+   -- vec_sub --
+
+   function vec_sub
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_sub
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_sub
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_sub
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_sub
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_sub
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_sub
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_sub
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_sub
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_sub
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_sub
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_sub
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_sub
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_sub
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_sub
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_sub
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_sub
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_sub
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_sub
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   -- vec_vsubfp --
+
+   function vec_vsubfp
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   -- vec_vsubuwm --
+
+   function vec_vsubuwm
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_vsubuwm
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_vsubuwm
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_vsubuwm
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_vsubuwm
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_vsubuwm
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vsubuhm --
+
+   function vec_vsubuhm
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_vsubuhm
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_vsubuhm
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_vsubuhm
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_vsubuhm
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_vsubuhm
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vsububm --
+
+   function vec_vsububm
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_vsububm
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_vsububm
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_vsububm
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_vsububm
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_vsububm
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_subc --
+
+   function vec_subc
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_subs --
+
+   function vec_subs
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_subs
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_subs
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_subs
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_subs
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_subs
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_subs
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_subs
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_subs
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_subs
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_subs
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_subs
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_subs
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_subs
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_subs
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_subs
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_subs
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_subs
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vsubsws --
+
+   function vec_vsubsws
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_vsubsws
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_vsubsws
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vsubuws --
+
+   function vec_vsubuws
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_vsubuws
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_vsubuws
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_vsubshs --
+
+   function vec_vsubshs
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_vsubshs
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_vsubshs
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   -- vec_vsubuhs --
+
+   function vec_vsubuhs
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_vsubuhs
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_vsubuhs
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   -- vec_vsubsbs --
+
+   function vec_vsubsbs
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_vsubsbs
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_vsubsbs
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   -- vec_vsububs --
+
+   function vec_vsububs
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_vsububs
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_vsububs
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   -- vec_sum4s --
+
+   function vec_sum4s
+     (A : vector_unsigned_char;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_sum4s
+     (A : vector_signed_char;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_sum4s
+     (A : vector_signed_short;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vsum4shs --
+
+   function vec_vsum4shs
+     (A : vector_signed_short;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vsum4sbs --
+
+   function vec_vsum4sbs
+     (A : vector_signed_char;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_vsum4ubs --
+
+   function vec_vsum4ubs
+     (A : vector_unsigned_char;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   -- vec_sum2s --
+
+   function vec_sum2s
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_sums --
+
+   function vec_sums
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   -- vec_trunc --
+
+   function vec_trunc
+     (A : vector_float) return vector_float;
+
+   -- vec_unpackh --
+
+   function vec_unpackh
+     (A : vector_signed_char) return vector_signed_short;
+
+   function vec_unpackh
+     (A : vector_bool_char) return vector_bool_short;
+
+   function vec_unpackh
+     (A : vector_signed_short) return vector_signed_int;
+
+   function vec_unpackh
+     (A : vector_bool_short) return vector_bool_int;
+
+   function vec_unpackh
+     (A : vector_pixel) return vector_unsigned_int;
+
+   -- vec_vupkhsh --
+
+   function vec_vupkhsh
+     (A : vector_bool_short) return vector_bool_int;
+
+   function vec_vupkhsh
+     (A : vector_signed_short) return vector_signed_int;
+
+   -- vec_vupkhpx --
+
+   function vec_vupkhpx
+     (A : vector_pixel) return vector_unsigned_int;
+
+   -- vec_vupkhsb --
+
+   function vec_vupkhsb
+     (A : vector_bool_char) return vector_bool_short;
+
+   function vec_vupkhsb
+     (A : vector_signed_char) return vector_signed_short;
+
+   -- vec_unpackl --
+
+   function vec_unpackl
+     (A : vector_signed_char) return vector_signed_short;
+
+   function vec_unpackl
+     (A : vector_bool_char) return vector_bool_short;
+
+   function vec_unpackl
+     (A : vector_pixel) return vector_unsigned_int;
+
+   function vec_unpackl
+     (A : vector_signed_short) return vector_signed_int;
+
+   function vec_unpackl
+     (A : vector_bool_short) return vector_bool_int;
+
+   -- vec_vupklpx --
+
+   function vec_vupklpx
+     (A : vector_pixel) return vector_unsigned_int;
+
+   -- vec_upklsh --
+
+   function vec_vupklsh
+     (A : vector_bool_short) return vector_bool_int;
+
+   function vec_vupklsh
+     (A : vector_signed_short) return vector_signed_int;
+
+   -- vec_vupklsb --
+
+   function vec_vupklsb
+     (A : vector_bool_char) return vector_bool_short;
+
+   function vec_vupklsb
+     (A : vector_signed_char) return vector_signed_short;
+
+   -- vec_xor --
+
+   function vec_xor
+     (A : vector_float;
+      B : vector_float) return vector_float;
+
+   function vec_xor
+     (A : vector_float;
+      B : vector_bool_int) return vector_float;
+
+   function vec_xor
+     (A : vector_bool_int;
+      B : vector_float) return vector_float;
+
+   function vec_xor
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int;
+
+   function vec_xor
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_xor
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int;
+
+   function vec_xor
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int;
+
+   function vec_xor
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_xor
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int;
+
+   function vec_xor
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int;
+
+   function vec_xor
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short;
+
+   function vec_xor
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_xor
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short;
+
+   function vec_xor
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short;
+
+   function vec_xor
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_xor
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short;
+
+   function vec_xor
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short;
+
+   function vec_xor
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_xor
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char;
+
+   function vec_xor
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char;
+
+   function vec_xor
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char;
+
+   function vec_xor
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   function vec_xor
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char;
+
+   function vec_xor
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char;
+
+   ----------------------------------
+   -- [PIM-4.5 AltiVec predicates] --
+   ----------------------------------
+
+   -- vec_all_eq --
+
+   function vec_all_eq
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_eq
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_eq
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_eq
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_eq
+     (A : vector_bool_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_eq
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_eq
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_eq
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_eq
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_eq
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_eq
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_eq
+     (A : vector_bool_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_eq
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_eq
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_eq
+     (A : vector_pixel;
+      B : vector_pixel) return c_int;
+
+   function vec_all_eq
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_eq
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_eq
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_eq
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_eq
+     (A : vector_bool_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_eq
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_eq
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_eq
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_ge --
+
+   function vec_all_ge
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_ge
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_ge
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_ge
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_ge
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_ge
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_ge
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_ge
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_ge
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_ge
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_ge
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_ge
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_ge
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_ge
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_ge
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_ge
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_ge
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_ge
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_ge
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_gt --
+
+   function vec_all_gt
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_gt
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_gt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_gt
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_gt
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_gt
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_gt
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_gt
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_gt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_gt
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_gt
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_gt
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_gt
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_gt
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_gt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_gt
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_gt
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_gt
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_gt
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_in --
+
+   function vec_all_in
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_le --
+
+   function vec_all_le
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_le
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_le
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_le
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_le
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_le
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_le
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_le
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_le
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_le
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_le
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_le
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_le
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_le
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_le
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_le
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_le
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_le
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_le
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_lt --
+
+   function vec_all_lt
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_lt
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_lt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_lt
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_lt
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_lt
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_lt
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_lt
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_lt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_lt
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_lt
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_lt
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_lt
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_lt
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_lt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_lt
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_lt
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_lt
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_lt
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_nan --
+
+   function vec_all_nan
+     (A : vector_float) return c_int;
+
+   -- vec_all_ne --
+
+   function vec_all_ne
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_ne
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_ne
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_ne
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_ne
+     (A : vector_bool_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_all_ne
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_all_ne
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_all_ne
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_ne
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_ne
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_ne
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_ne
+     (A : vector_bool_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_all_ne
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_all_ne
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_all_ne
+     (A : vector_pixel;
+      B : vector_pixel) return c_int;
+
+   function vec_all_ne
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_ne
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_ne
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_ne
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_ne
+     (A : vector_bool_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_all_ne
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_all_ne
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_all_ne
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_nge --
+
+   function vec_all_nge
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_ngt --
+
+   function vec_all_ngt
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_nle --
+
+   function vec_all_nle
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_nlt --
+
+   function vec_all_nlt
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_all_numeric --
+
+   function vec_all_numeric
+     (A : vector_float) return c_int;
+
+   -- vec_any_eq --
+
+   function vec_any_eq
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_eq
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_eq
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_eq
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_eq
+     (A : vector_bool_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_eq
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_eq
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_eq
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_eq
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_eq
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_eq
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_eq
+     (A : vector_bool_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_eq
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_eq
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_eq
+     (A : vector_pixel;
+      B : vector_pixel) return c_int;
+
+   function vec_any_eq
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_eq
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_eq
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_eq
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_eq
+     (A : vector_bool_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_eq
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_eq
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_eq
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_any_ge --
+
+   function vec_any_ge
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_ge
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_ge
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_ge
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_ge
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_ge
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_ge
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_ge
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_ge
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_ge
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_ge
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_ge
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_ge
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_ge
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_ge
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_ge
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_ge
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_ge
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_ge
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_any_gt --
+
+   function vec_any_gt
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_gt
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_gt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_gt
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_gt
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_gt
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_gt
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_gt
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_gt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_gt
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_gt
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_gt
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_gt
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_gt
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_gt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_gt
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_gt
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_gt
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_gt
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_any_le --
+
+   function vec_any_le
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_le
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_le
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_le
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_le
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_le
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_le
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_le
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_le
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_le
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_le
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_le
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_le
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_le
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_le
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_le
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_le
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_le
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_le
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_any_lt --
+
+   function vec_any_lt
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_lt
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_lt
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_lt
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_lt
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_lt
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_lt
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_lt
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_lt
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_lt
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_lt
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_lt
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_lt
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_lt
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_lt
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_lt
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_lt
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_lt
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_lt
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_any_nan --
+
+   function vec_any_nan
+     (A : vector_float) return c_int;
+
+   -- vec_any_ne --
+
+   function vec_any_ne
+     (A : vector_signed_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_ne
+     (A : vector_signed_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_ne
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_ne
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_ne
+     (A : vector_bool_char;
+      B : vector_bool_char) return c_int;
+
+   function vec_any_ne
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return c_int;
+
+   function vec_any_ne
+     (A : vector_bool_char;
+      B : vector_signed_char) return c_int;
+
+   function vec_any_ne
+     (A : vector_signed_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_ne
+     (A : vector_signed_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_ne
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_ne
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_ne
+     (A : vector_bool_short;
+      B : vector_bool_short) return c_int;
+
+   function vec_any_ne
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return c_int;
+
+   function vec_any_ne
+     (A : vector_bool_short;
+      B : vector_signed_short) return c_int;
+
+   function vec_any_ne
+     (A : vector_pixel;
+      B : vector_pixel) return c_int;
+
+   function vec_any_ne
+     (A : vector_signed_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_ne
+     (A : vector_signed_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_ne
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_ne
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_ne
+     (A : vector_bool_int;
+      B : vector_bool_int) return c_int;
+
+   function vec_any_ne
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return c_int;
+
+   function vec_any_ne
+     (A : vector_bool_int;
+      B : vector_signed_int) return c_int;
+
+   function vec_any_ne
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_any_nge --
+
+   function vec_any_nge
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_any_ngt --
+
+   function vec_any_ngt
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_any_nle --
+
+   function vec_any_nle
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_any_nlt --
+
+   function vec_any_nlt
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -- vec_any_numeric --
+
+   function vec_any_numeric
+     (A : vector_float) return c_int;
+
+   -- vec_any_out --
+
+   function vec_any_out
+     (A : vector_float;
+      B : vector_float) return c_int;
+
+   -------------------------------------------
+   -- Straight overloads of routines aboves --
+   -------------------------------------------
+
+   -- vec_vaddcuw --
+
+   function vec_vaddcuw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_addc;
+
+   -- vec_vand --
+
+   function vec_vand
+     (A : vector_float;
+      B : vector_float) return vector_float
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_float;
+      B : vector_bool_int) return vector_float
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_bool_int;
+      B : vector_float) return vector_float
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   renames vec_and;
+
+   function vec_vand
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_and;
+
+   -- vec_vandc --
+
+   function vec_vandc
+     (A : vector_float;
+      B : vector_float) return vector_float
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_float;
+      B : vector_bool_int) return vector_float
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_bool_int;
+      B : vector_float) return vector_float
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   renames vec_andc;
+
+   function vec_vandc
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_andc;
+
+   -- vec_vrfip --
+
+   function vec_vrfip
+     (A : vector_float) return vector_float
+   renames vec_ceil;
+
+   -- vec_vcmpbfp --
+
+   function vec_vcmpbfp
+     (A : vector_float;
+      B : vector_float) return vector_signed_int
+   renames vec_cmpb;
+
+   -- vec_vcmpgefp --
+
+   function vec_vcmpgefp
+     (A : vector_float;
+      B : vector_float) return vector_bool_int
+   renames vec_cmpge;
+
+   -- vec_vctsxs --
+
+   function vec_vctsxs
+     (A : vector_float;
+      B : c_int) return vector_signed_int
+   renames vec_cts;
+
+   -- vec_vctuxs --
+
+   function vec_vctuxs
+     (A : vector_float;
+      B : c_int) return vector_unsigned_int
+   renames vec_ctu;
+
+   -- vec_vexptefp --
+
+   function vec_vexptefp
+     (A : vector_float) return vector_float
+   renames vec_expte;
+
+   -- vec_vrfim --
+
+   function vec_vrfim
+     (A : vector_float) return vector_float
+   renames vec_floor;
+
+   -- vec_lvx --
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_float_ptr) return vector_float
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_float_ptr) return vector_float
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_bool_int_ptr) return vector_bool_int
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_signed_int_ptr) return vector_signed_int
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_int_ptr) return vector_signed_int
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_long_ptr) return vector_signed_int
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_unsigned_int_ptr) return vector_unsigned_int
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_unsigned_int_ptr) return vector_unsigned_int
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_unsigned_long_ptr) return vector_unsigned_int
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_bool_short_ptr) return vector_bool_short
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_pixel_ptr) return vector_pixel
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_signed_short_ptr) return vector_signed_short
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_short_ptr) return vector_signed_short
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_unsigned_short_ptr) return vector_unsigned_short
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_unsigned_short_ptr) return vector_unsigned_short
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_bool_char_ptr) return vector_bool_char
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_signed_char_ptr) return vector_signed_char
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_signed_char_ptr) return vector_signed_char
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_vector_unsigned_char_ptr) return vector_unsigned_char
+   renames vec_ld;
+
+   function vec_lvx
+     (A : c_long;
+      B : const_unsigned_char_ptr) return vector_unsigned_char
+   renames vec_ld;
+
+   -- vec_lvxl --
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_float_ptr) return vector_float
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_float_ptr) return vector_float
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_bool_int_ptr) return vector_bool_int
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_signed_int_ptr) return vector_signed_int
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_int_ptr) return vector_signed_int
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_long_ptr) return vector_signed_int
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_unsigned_int_ptr) return vector_unsigned_int
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_unsigned_int_ptr) return vector_unsigned_int
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_unsigned_long_ptr) return vector_unsigned_int
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_bool_short_ptr) return vector_bool_short
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_pixel_ptr) return vector_pixel
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_signed_short_ptr) return vector_signed_short
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_short_ptr) return vector_signed_short
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_unsigned_short_ptr) return vector_unsigned_short
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_unsigned_short_ptr) return vector_unsigned_short
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_bool_char_ptr) return vector_bool_char
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_signed_char_ptr) return vector_signed_char
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_signed_char_ptr) return vector_signed_char
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_vector_unsigned_char_ptr) return vector_unsigned_char
+   renames vec_ldl;
+
+   function vec_lvxl
+     (A : c_long;
+      B : const_unsigned_char_ptr) return vector_unsigned_char
+   renames vec_ldl;
+
+   -- vec_vlogefp --
+
+   function vec_vlogefp
+     (A : vector_float) return vector_float
+   renames vec_loge;
+
+   -- vec_vmaddfp --
+
+   function vec_vmaddfp
+     (A : vector_float;
+      B : vector_float;
+      C : vector_float) return vector_float
+   renames vec_madd;
+
+   -- vec_vmhaddshs --
+
+   function vec_vmhaddshs
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short
+   renames vec_madds;
+
+   -- vec_vmladduhm --
+
+   function vec_vmladduhm
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short
+   renames vec_mladd;
+
+   function vec_vmladduhm
+     (A : vector_signed_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_short) return vector_signed_short
+   renames vec_mladd;
+
+   function vec_vmladduhm
+     (A : vector_unsigned_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short
+   renames vec_mladd;
+
+   function vec_vmladduhm
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_short) return vector_unsigned_short
+   renames vec_mladd;
+
+   -- vec_vmhraddshs --
+
+   function vec_vmhraddshs
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_signed_short) return vector_signed_short
+   renames vec_mradds;
+
+   -- vec_vnmsubfp --
+
+   function vec_vnmsubfp
+     (A : vector_float;
+      B : vector_float;
+      C : vector_float) return vector_float
+   renames vec_nmsub;
+
+   -- vec_vnor --
+
+   function vec_vnor
+     (A : vector_float;
+      B : vector_float) return vector_float
+   renames vec_nor;
+
+   function vec_vnor
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_nor;
+
+   function vec_vnor
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_nor;
+
+   function vec_vnor
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   renames vec_nor;
+
+   function vec_vnor
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   renames vec_nor;
+
+   function vec_vnor
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_nor;
+
+   function vec_vnor
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   renames vec_nor;
+
+   function vec_vnor
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_nor;
+
+   function vec_vnor
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_nor;
+
+   function vec_vnor
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   renames vec_nor;
+
+   -- vec_vor --
+
+   function vec_vor
+     (A : vector_float;
+      B : vector_float) return vector_float
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_float;
+      B : vector_bool_int) return vector_float
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_bool_int;
+      B : vector_float) return vector_float
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   renames vec_or;
+
+   function vec_vor
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_or;
+
+   -- vec_vpkpx --
+
+   function vec_vpkpx
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_pixel
+   renames vec_packpx;
+
+   -- vec_vperm --
+
+   function vec_vperm
+     (A : vector_float;
+      B : vector_float;
+      C : vector_unsigned_char) return vector_float
+   renames vec_perm;
+
+   function vec_vperm
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : vector_unsigned_char) return vector_signed_int
+   renames vec_perm;
+
+   function vec_vperm
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : vector_unsigned_char) return vector_unsigned_int
+   renames vec_perm;
+
+   function vec_vperm
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : vector_unsigned_char) return vector_bool_int
+   renames vec_perm;
+
+   function vec_vperm
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_unsigned_char) return vector_signed_short
+   renames vec_perm;
+
+   function vec_vperm
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_char) return vector_unsigned_short
+   renames vec_perm;
+
+   function vec_vperm
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : vector_unsigned_char) return vector_bool_short
+   renames vec_perm;
+
+   function vec_vperm
+     (A : vector_pixel;
+      B : vector_pixel;
+      C : vector_unsigned_char) return vector_pixel
+   renames vec_perm;
+
+   function vec_vperm
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : vector_unsigned_char) return vector_signed_char
+   renames vec_perm;
+
+   function vec_vperm
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_unsigned_char) return vector_unsigned_char
+   renames vec_perm;
+
+   function vec_vperm
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : vector_unsigned_char) return vector_bool_char
+   renames vec_perm;
+
+   -- vec_vrefp --
+
+   function vec_vrefp
+     (A : vector_float) return vector_float
+   renames vec_re;
+
+   -- vec_vrfin --
+
+   function vec_vrfin
+     (A : vector_float) return vector_float
+   renames vec_round;
+
+   -- vec_vrsqrtefp --
+
+   function vec_vrsqrtefp
+     (A : vector_float) return vector_float
+   renames vec_rsqrte;
+
+   -- vec_vsel --
+
+   function vec_vsel
+     (A : vector_float;
+      B : vector_float;
+      C : vector_bool_int) return vector_float
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_float;
+      B : vector_float;
+      C : vector_unsigned_int) return vector_float
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : vector_bool_int) return vector_signed_int
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : vector_unsigned_int) return vector_signed_int
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : vector_bool_int) return vector_unsigned_int
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : vector_unsigned_int) return vector_unsigned_int
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : vector_bool_int) return vector_bool_int
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : vector_unsigned_int) return vector_bool_int
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_bool_short) return vector_signed_short
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : vector_unsigned_short) return vector_signed_short
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_bool_short) return vector_unsigned_short
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : vector_unsigned_short) return vector_unsigned_short
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : vector_bool_short) return vector_bool_short
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : vector_unsigned_short) return vector_bool_short
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : vector_bool_char) return vector_signed_char
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : vector_unsigned_char) return vector_signed_char
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_bool_char) return vector_unsigned_char
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : vector_unsigned_char) return vector_unsigned_char
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : vector_bool_char) return vector_bool_char
+   renames vec_sel;
+
+   function vec_vsel
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : vector_unsigned_char) return vector_bool_char
+   renames vec_sel;
+
+   -- vec_vsldoi --
+
+   function vec_vsldoi
+     (A : vector_float;
+      B : vector_float;
+      C : c_int) return vector_float
+   renames vec_sld;
+
+   function vec_vsldoi
+     (A : vector_signed_int;
+      B : vector_signed_int;
+      C : c_int) return vector_signed_int
+   renames vec_sld;
+
+   function vec_vsldoi
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int;
+      C : c_int) return vector_unsigned_int
+   renames vec_sld;
+
+   function vec_vsldoi
+     (A : vector_bool_int;
+      B : vector_bool_int;
+      C : c_int) return vector_bool_int
+   renames vec_sld;
+
+   function vec_vsldoi
+     (A : vector_signed_short;
+      B : vector_signed_short;
+      C : c_int) return vector_signed_short
+   renames vec_sld;
+
+   function vec_vsldoi
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short;
+      C : c_int) return vector_unsigned_short
+   renames vec_sld;
+
+   function vec_vsldoi
+     (A : vector_bool_short;
+      B : vector_bool_short;
+      C : c_int) return vector_bool_short
+   renames vec_sld;
+
+   function vec_vsldoi
+     (A : vector_pixel;
+      B : vector_pixel;
+      C : c_int) return vector_pixel
+   renames vec_sld;
+
+   function vec_vsldoi
+     (A : vector_signed_char;
+      B : vector_signed_char;
+      C : c_int) return vector_signed_char
+   renames vec_sld;
+
+   function vec_vsldoi
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char;
+      C : c_int) return vector_unsigned_char
+   renames vec_sld;
+
+   function vec_vsldoi
+     (A : vector_bool_char;
+      B : vector_bool_char;
+      C : c_int) return vector_bool_char
+   renames vec_sld;
+
+   -- vec_vsl --
+
+   function vec_vsl
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_signed_int;
+      B : vector_unsigned_short) return vector_signed_int
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_short) return vector_unsigned_int
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_bool_int
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_bool_int;
+      B : vector_unsigned_short) return vector_bool_int
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_bool_int;
+      B : vector_unsigned_char) return vector_bool_int
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_signed_short;
+      B : vector_unsigned_int) return vector_signed_short
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_int) return vector_unsigned_short
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_bool_short;
+      B : vector_unsigned_int) return vector_bool_short
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_bool_short
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_bool_short;
+      B : vector_unsigned_char) return vector_bool_short
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_pixel;
+      B : vector_unsigned_int) return vector_pixel
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_pixel;
+      B : vector_unsigned_short) return vector_pixel
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_signed_char;
+      B : vector_unsigned_int) return vector_signed_char
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_signed_char;
+      B : vector_unsigned_short) return vector_signed_char
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_int) return vector_unsigned_char
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_short) return vector_unsigned_char
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_bool_char;
+      B : vector_unsigned_int) return vector_bool_char
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_bool_char;
+      B : vector_unsigned_short) return vector_bool_char
+   renames vec_sll;
+
+   function vec_vsl
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_bool_char
+   renames vec_sll;
+
+   -- vec_vslo --
+
+   function vec_vslo
+     (A : vector_float;
+      B : vector_signed_char) return vector_float
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_float;
+      B : vector_unsigned_char) return vector_float
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_signed_int;
+      B : vector_signed_char) return vector_signed_int
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_unsigned_int;
+      B : vector_signed_char) return vector_unsigned_int
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_signed_short;
+      B : vector_signed_char) return vector_signed_short
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_unsigned_short;
+      B : vector_signed_char) return vector_unsigned_short
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_pixel;
+      B : vector_signed_char) return vector_pixel
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_unsigned_char;
+      B : vector_signed_char) return vector_unsigned_char
+   renames vec_slo;
+
+   function vec_vslo
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_slo;
+
+   -- vec_vspltisb --
+
+   function vec_vspltisb
+     (A : c_int) return vector_signed_char
+   renames vec_splat_s8;
+
+   -- vec_vspltish --
+
+   function vec_vspltish
+     (A : c_int) return vector_signed_short
+   renames vec_splat_s16;
+
+   -- vec_vspltisw --
+
+   function vec_vspltisw
+     (A : c_int) return vector_signed_int
+   renames vec_splat_s32;
+
+   -- vec_vsr --
+
+   function vec_vsr
+     (A : vector_signed_int;
+      B : vector_unsigned_int) return vector_signed_int
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_signed_int;
+      B : vector_unsigned_short) return vector_signed_int
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_unsigned_int;
+      B : vector_unsigned_short) return vector_unsigned_int
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_bool_int
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_bool_int;
+      B : vector_unsigned_short) return vector_bool_int
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_bool_int;
+      B : vector_unsigned_char) return vector_bool_int
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_signed_short;
+      B : vector_unsigned_int) return vector_signed_short
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_signed_short;
+      B : vector_unsigned_short) return vector_signed_short
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_unsigned_short;
+      B : vector_unsigned_int) return vector_unsigned_short
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_bool_short;
+      B : vector_unsigned_int) return vector_bool_short
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_bool_short
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_bool_short;
+      B : vector_unsigned_char) return vector_bool_short
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_pixel;
+      B : vector_unsigned_int) return vector_pixel
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_pixel;
+      B : vector_unsigned_short) return vector_pixel
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_signed_char;
+      B : vector_unsigned_int) return vector_signed_char
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_signed_char;
+      B : vector_unsigned_short) return vector_signed_char
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_unsigned_char;
+      B : vector_unsigned_int) return vector_unsigned_char
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_unsigned_char;
+      B : vector_unsigned_short) return vector_unsigned_char
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_bool_char;
+      B : vector_unsigned_int) return vector_bool_char
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_bool_char;
+      B : vector_unsigned_short) return vector_bool_char
+   renames vec_srl;
+
+   function vec_vsr
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_bool_char
+   renames vec_srl;
+
+   -- vec_vsro --
+
+   function vec_vsro
+     (A : vector_float;
+      B : vector_signed_char) return vector_float
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_float;
+      B : vector_unsigned_char) return vector_float
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_signed_int;
+      B : vector_signed_char) return vector_signed_int
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_signed_int;
+      B : vector_unsigned_char) return vector_signed_int
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_unsigned_int;
+      B : vector_signed_char) return vector_unsigned_int
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_unsigned_int;
+      B : vector_unsigned_char) return vector_unsigned_int
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_signed_short;
+      B : vector_signed_char) return vector_signed_short
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_signed_short;
+      B : vector_unsigned_char) return vector_signed_short
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_unsigned_short;
+      B : vector_signed_char) return vector_unsigned_short
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_unsigned_short;
+      B : vector_unsigned_char) return vector_unsigned_short
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_pixel;
+      B : vector_signed_char) return vector_pixel
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_pixel;
+      B : vector_unsigned_char) return vector_pixel
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_signed_char;
+      B : vector_unsigned_char) return vector_signed_char
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_unsigned_char;
+      B : vector_signed_char) return vector_unsigned_char
+   renames vec_sro;
+
+   function vec_vsro
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_sro;
+
+   -- vec_stvx --
+
+   procedure vec_stvx
+     (A : vector_float;
+      B : c_int;
+      C : vector_float_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_float;
+      B : c_int;
+      C : float_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_signed_int;
+      B : c_int;
+      C : vector_signed_int_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_signed_int;
+      B : c_int;
+      C : int_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : vector_unsigned_int_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_bool_int;
+      B : c_int;
+      C : vector_bool_int_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_bool_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_bool_int;
+      B : c_int;
+      C : int_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_signed_short;
+      B : c_int;
+      C : vector_signed_short_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_signed_short;
+      B : c_int;
+      C : short_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : vector_unsigned_short_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_bool_short;
+      B : c_int;
+      C : vector_bool_short_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_bool_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_pixel;
+      B : c_int;
+      C : vector_pixel_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_pixel;
+      B : c_int;
+      C : unsigned_short_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_pixel;
+      B : c_int;
+      C : short_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_bool_short;
+      B : c_int;
+      C : short_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_signed_char;
+      B : c_int;
+      C : vector_signed_char_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_signed_char;
+      B : c_int;
+      C : signed_char_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : vector_unsigned_char_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_bool_char;
+      B : c_int;
+      C : vector_bool_char_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_bool_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   renames vec_st;
+
+   procedure vec_stvx
+     (A : vector_bool_char;
+      B : c_int;
+      C : signed_char_ptr)
+   renames vec_st;
+
+   -- vec_stvxl --
+
+   procedure vec_stvxl
+     (A : vector_float;
+      B : c_int;
+      C : vector_float_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_float;
+      B : c_int;
+      C : float_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_signed_int;
+      B : c_int;
+      C : vector_signed_int_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_signed_int;
+      B : c_int;
+      C : int_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : vector_unsigned_int_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_unsigned_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_bool_int;
+      B : c_int;
+      C : vector_bool_int_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_bool_int;
+      B : c_int;
+      C : unsigned_int_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_bool_int;
+      B : c_int;
+      C : int_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_signed_short;
+      B : c_int;
+      C : vector_signed_short_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_signed_short;
+      B : c_int;
+      C : short_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : vector_unsigned_short_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_unsigned_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_bool_short;
+      B : c_int;
+      C : vector_bool_short_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_bool_short;
+      B : c_int;
+      C : unsigned_short_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_bool_short;
+      B : c_int;
+      C : short_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_pixel;
+      B : c_int;
+      C : vector_pixel_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_pixel;
+      B : c_int;
+      C : unsigned_short_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_pixel;
+      B : c_int;
+      C : short_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_signed_char;
+      B : c_int;
+      C : vector_signed_char_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_signed_char;
+      B : c_int;
+      C : signed_char_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : vector_unsigned_char_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_unsigned_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_bool_char;
+      B : c_int;
+      C : vector_bool_char_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_bool_char;
+      B : c_int;
+      C : unsigned_char_ptr)
+   renames vec_stl;
+
+   procedure vec_stvxl
+     (A : vector_bool_char;
+      B : c_int;
+      C : signed_char_ptr)
+   renames vec_stl;
+
+   -- vec_vsubcuw --
+
+   function vec_vsubcuw
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_subc;
+
+   -- vec_vsum2sws --
+
+   function vec_vsum2sws
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_sum2s;
+
+   -- vec_vsumsws --
+
+   function vec_vsumsws
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_sums;
+
+   -- vec_vrfiz --
+
+   function vec_vrfiz
+     (A : vector_float) return vector_float
+   renames vec_trunc;
+
+   -- vec_vxor --
+
+   function vec_vxor
+     (A : vector_float;
+      B : vector_float) return vector_float
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_float;
+      B : vector_bool_int) return vector_float
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_bool_int;
+      B : vector_float) return vector_float
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_bool_int;
+      B : vector_bool_int) return vector_bool_int
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_bool_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_signed_int;
+      B : vector_bool_int) return vector_signed_int
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_signed_int;
+      B : vector_signed_int) return vector_signed_int
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_bool_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_unsigned_int;
+      B : vector_bool_int) return vector_unsigned_int
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_unsigned_int;
+      B : vector_unsigned_int) return vector_unsigned_int
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_bool_short;
+      B : vector_bool_short) return vector_bool_short
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_bool_short;
+      B : vector_signed_short) return vector_signed_short
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_signed_short;
+      B : vector_bool_short) return vector_signed_short
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_signed_short;
+      B : vector_signed_short) return vector_signed_short
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_bool_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_unsigned_short;
+      B : vector_bool_short) return vector_unsigned_short
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_unsigned_short;
+      B : vector_unsigned_short) return vector_unsigned_short
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_bool_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_bool_char;
+      B : vector_bool_char) return vector_bool_char
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_signed_char;
+      B : vector_bool_char) return vector_signed_char
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_signed_char;
+      B : vector_signed_char) return vector_signed_char
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_bool_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_unsigned_char;
+      B : vector_bool_char) return vector_unsigned_char
+   renames vec_xor;
+
+   function vec_vxor
+     (A : vector_unsigned_char;
+      B : vector_unsigned_char) return vector_unsigned_char
+   renames vec_xor;
+
+   ----------------------------------------------
+   -- [PIM 2.5.3 Value for adjusting pointers] --
+   ----------------------------------------------
+
+   --  "At compile time, vec_step (vec_data) produces the integer value
+   --  representing the amount by which a pointer to a component of an AltiVec
+   --  data type should increment to cause a pointer increment to increment by
+   --  16 bytes".
+
+   function vec_step (V : vector_unsigned_char) return Integer;
+   function vec_step (V : vector_signed_char) return Integer;
+   function vec_step (V : vector_bool_char) return Integer;
+
+   function vec_step (V : vector_unsigned_short) return Integer;
+   function vec_step (V : vector_signed_short) return Integer;
+   function vec_step (V : vector_bool_short) return Integer;
+
+   function vec_step (V : vector_unsigned_int) return Integer;
+   function vec_step (V : vector_signed_int) return Integer;
+   function vec_step (V : vector_bool_int) return Integer;
+
+   function vec_step (V : vector_float) return Integer;
+   function vec_step (V : vector_pixel) return Integer;
+
+private
+
+   -------------------------------------
+   -- Different flavors of interfaces --
+   -------------------------------------
+
+   --  The vast majority of the user visible functions are just neutral type
+   --  conversion wrappers around calls to low level primitives. For instance:
+   --
+   --        function vec_sll
+   --          (A : vector_signed_int;
+   --           B : vector_unsigned_char) return vector_signed_int is
+   --        begin
+   --          return To_VSI (vsl (To_VSI (A), To_VSI (B)));
+   --        end vec_sll;
+   --
+   --  We actually don't always need an explicit wrapper and can bind directly
+   --  with a straight Import of the low level routine, or a renaming of such
+   --  instead.
+   --
+   --  A direct binding is not possible (that is, a wrapper is mandatory) in
+   --  a number of cases:
+   --
+   --  o When the high-level/low-level types don't match, in which case a
+   --  straight import would risk wrong code generation or compiler blowups in
+   --  the Hard binding case. This is the case for 'B' in the example above.
+   --
+   --  o When the high-level/low-level argument lists differ, as is the case
+   --  for most of the AltiVec predicates, relying on a low-level primitive
+   --  which expects a control code argument, like:
+   --
+   --        function vec_any_ne
+   --           (A : vector_signed_int;
+   --            B : vector_signed_int) return c_int is
+   --        begin
+   --          return vcmpequw_p (CR6_LT_REV, To_VSI (A), To_VSI (B));
+   --        end vec_any_ne;
+   --
+   --  o When the high-level/low-level arguments order don't match, as in:
+   --
+   --        function vec_cmplt
+   --           (A : vector_unsigned_char;
+   --            B : vector_unsigned_char) return vector_bool_char is
+   --         begin
+   --           return To_VBC (vcmpgtub (To_VSC (B), To_VSC (A)));
+   --         end vec_cmplt;
+   --
+   --  Conversely, a direct (without wrapper) binding is sometimes mandatory
+   --  in the Hard binding case, because the corresponding low level code
+   --  accept only literal values for some arguments. Inlined calls to the
+   --  wrapper with proper arguments would be fine, but the wrapper body
+   --  itself would not be compilable. These can of course also be used in the
+   --  Soft binding, and so are naturally in this common unit.
+   --
+   --  Fortunately, the sets of operations for which a wrapper is required
+   --  and the set of operations for which a wrapper would not be compilable
+   --  do not intersect.
+
+   -----------------------------
+   -- Inlining considerations --
+   -----------------------------
+
+   --  The intent in the Hard binding case is to eventually map operations
+   --  to hardware instructions. Needless to say, intermediate function calls
+   --  do not fit this purpose, so all the user visible subprograms shall be
+   --  inlined. In the soft case, the bulk of the work is performed by the
+   --  low level routines, and those exported by this unit are short enough
+   --  for the inlining to make sense and even be beneficial, so...
+
+   pragma Inline_Always (vec_abs);
+   pragma Inline_Always (vec_abss);
+   pragma Inline_Always (vec_add);
+   pragma Inline_Always (vec_vaddfp);
+   pragma Inline_Always (vec_vadduwm);
+   pragma Inline_Always (vec_vadduhm);
+   pragma Inline_Always (vec_vaddubm);
+   pragma Inline_Always (vec_addc);
+   pragma Inline_Always (vec_adds);
+   pragma Inline_Always (vec_vaddsws);
+   pragma Inline_Always (vec_vadduws);
+   pragma Inline_Always (vec_vaddshs);
+   pragma Inline_Always (vec_vadduhs);
+   pragma Inline_Always (vec_vaddsbs);
+   pragma Inline_Always (vec_vaddubs);
+   pragma Inline_Always (vec_and);
+   pragma Inline_Always (vec_andc);
+   pragma Inline_Always (vec_avg);
+   pragma Inline_Always (vec_vavgsw);
+   pragma Inline_Always (vec_vavguw);
+   pragma Inline_Always (vec_vavgsh);
+   pragma Inline_Always (vec_vavguh);
+   pragma Inline_Always (vec_vavgsb);
+   pragma Inline_Always (vec_vavgub);
+   pragma Inline_Always (vec_ceil);
+   pragma Inline_Always (vec_cmpb);
+   pragma Inline_Always (vec_cmpeq);
+   pragma Inline_Always (vec_vcmpeqfp);
+   pragma Inline_Always (vec_vcmpequw);
+   pragma Inline_Always (vec_vcmpequh);
+   pragma Inline_Always (vec_vcmpequb);
+   pragma Inline_Always (vec_cmpge);
+   pragma Inline_Always (vec_cmpgt);
+   pragma Inline_Always (vec_vcmpgtfp);
+   pragma Inline_Always (vec_vcmpgtsw);
+   pragma Inline_Always (vec_vcmpgtuw);
+   pragma Inline_Always (vec_vcmpgtsh);
+   pragma Inline_Always (vec_vcmpgtuh);
+   pragma Inline_Always (vec_vcmpgtsb);
+   pragma Inline_Always (vec_vcmpgtub);
+   pragma Inline_Always (vec_cmple);
+   pragma Inline_Always (vec_cmplt);
+   pragma Inline_Always (vec_expte);
+   pragma Inline_Always (vec_floor);
+   pragma Inline_Always (vec_ld);
+   pragma Inline_Always (vec_lde);
+   pragma Inline_Always (vec_lvewx);
+   pragma Inline_Always (vec_lvehx);
+   pragma Inline_Always (vec_lvebx);
+   pragma Inline_Always (vec_ldl);
+   pragma Inline_Always (vec_loge);
+   pragma Inline_Always (vec_lvsl);
+   pragma Inline_Always (vec_lvsr);
+   pragma Inline_Always (vec_madd);
+   pragma Inline_Always (vec_madds);
+   pragma Inline_Always (vec_max);
+   pragma Inline_Always (vec_vmaxfp);
+   pragma Inline_Always (vec_vmaxsw);
+   pragma Inline_Always (vec_vmaxuw);
+   pragma Inline_Always (vec_vmaxsh);
+   pragma Inline_Always (vec_vmaxuh);
+   pragma Inline_Always (vec_vmaxsb);
+   pragma Inline_Always (vec_vmaxub);
+   pragma Inline_Always (vec_mergeh);
+   pragma Inline_Always (vec_vmrghw);
+   pragma Inline_Always (vec_vmrghh);
+   pragma Inline_Always (vec_vmrghb);
+   pragma Inline_Always (vec_mergel);
+   pragma Inline_Always (vec_vmrglw);
+   pragma Inline_Always (vec_vmrglh);
+   pragma Inline_Always (vec_vmrglb);
+   pragma Inline_Always (vec_mfvscr);
+   pragma Inline_Always (vec_min);
+   pragma Inline_Always (vec_vminfp);
+   pragma Inline_Always (vec_vminsw);
+   pragma Inline_Always (vec_vminuw);
+   pragma Inline_Always (vec_vminsh);
+   pragma Inline_Always (vec_vminuh);
+   pragma Inline_Always (vec_vminsb);
+   pragma Inline_Always (vec_vminub);
+   pragma Inline_Always (vec_mladd);
+   pragma Inline_Always (vec_mradds);
+   pragma Inline_Always (vec_msum);
+   pragma Inline_Always (vec_vmsumshm);
+   pragma Inline_Always (vec_vmsumuhm);
+   pragma Inline_Always (vec_vmsummbm);
+   pragma Inline_Always (vec_vmsumubm);
+   pragma Inline_Always (vec_msums);
+   pragma Inline_Always (vec_vmsumshs);
+   pragma Inline_Always (vec_vmsumuhs);
+   pragma Inline_Always (vec_mtvscr);
+   pragma Inline_Always (vec_mule);
+   pragma Inline_Always (vec_vmulesh);
+   pragma Inline_Always (vec_vmuleuh);
+   pragma Inline_Always (vec_vmulesb);
+   pragma Inline_Always (vec_vmuleub);
+   pragma Inline_Always (vec_mulo);
+   pragma Inline_Always (vec_vmulosh);
+   pragma Inline_Always (vec_vmulouh);
+   pragma Inline_Always (vec_vmulosb);
+   pragma Inline_Always (vec_vmuloub);
+   pragma Inline_Always (vec_nmsub);
+   pragma Inline_Always (vec_nor);
+   pragma Inline_Always (vec_or);
+   pragma Inline_Always (vec_pack);
+   pragma Inline_Always (vec_vpkuwum);
+   pragma Inline_Always (vec_vpkuhum);
+   pragma Inline_Always (vec_packpx);
+   pragma Inline_Always (vec_packs);
+   pragma Inline_Always (vec_vpkswss);
+   pragma Inline_Always (vec_vpkuwus);
+   pragma Inline_Always (vec_vpkshss);
+   pragma Inline_Always (vec_vpkuhus);
+   pragma Inline_Always (vec_packsu);
+   pragma Inline_Always (vec_vpkswus);
+   pragma Inline_Always (vec_vpkshus);
+   pragma Inline_Always (vec_perm);
+   pragma Inline_Always (vec_re);
+   pragma Inline_Always (vec_rl);
+   pragma Inline_Always (vec_vrlw);
+   pragma Inline_Always (vec_vrlh);
+   pragma Inline_Always (vec_vrlb);
+   pragma Inline_Always (vec_round);
+   pragma Inline_Always (vec_rsqrte);
+   pragma Inline_Always (vec_sel);
+   pragma Inline_Always (vec_sl);
+   pragma Inline_Always (vec_vslw);
+   pragma Inline_Always (vec_vslh);
+   pragma Inline_Always (vec_vslb);
+   pragma Inline_Always (vec_sll);
+   pragma Inline_Always (vec_slo);
+   pragma Inline_Always (vec_sr);
+   pragma Inline_Always (vec_vsrw);
+   pragma Inline_Always (vec_vsrh);
+   pragma Inline_Always (vec_vsrb);
+   pragma Inline_Always (vec_sra);
+   pragma Inline_Always (vec_vsraw);
+   pragma Inline_Always (vec_vsrah);
+   pragma Inline_Always (vec_vsrab);
+   pragma Inline_Always (vec_srl);
+   pragma Inline_Always (vec_sro);
+   pragma Inline_Always (vec_st);
+   pragma Inline_Always (vec_ste);
+   pragma Inline_Always (vec_stvewx);
+   pragma Inline_Always (vec_stvehx);
+   pragma Inline_Always (vec_stvebx);
+   pragma Inline_Always (vec_stl);
+   pragma Inline_Always (vec_sub);
+   pragma Inline_Always (vec_vsubfp);
+   pragma Inline_Always (vec_vsubuwm);
+   pragma Inline_Always (vec_vsubuhm);
+   pragma Inline_Always (vec_vsububm);
+   pragma Inline_Always (vec_subc);
+   pragma Inline_Always (vec_subs);
+   pragma Inline_Always (vec_vsubsws);
+   pragma Inline_Always (vec_vsubuws);
+   pragma Inline_Always (vec_vsubshs);
+   pragma Inline_Always (vec_vsubuhs);
+   pragma Inline_Always (vec_vsubsbs);
+   pragma Inline_Always (vec_vsububs);
+   pragma Inline_Always (vec_sum4s);
+   pragma Inline_Always (vec_vsum4shs);
+   pragma Inline_Always (vec_vsum4sbs);
+   pragma Inline_Always (vec_vsum4ubs);
+   pragma Inline_Always (vec_sum2s);
+   pragma Inline_Always (vec_sums);
+   pragma Inline_Always (vec_trunc);
+   pragma Inline_Always (vec_unpackh);
+   pragma Inline_Always (vec_vupkhsh);
+   pragma Inline_Always (vec_vupkhpx);
+   pragma Inline_Always (vec_vupkhsb);
+   pragma Inline_Always (vec_unpackl);
+   pragma Inline_Always (vec_vupklpx);
+   pragma Inline_Always (vec_vupklsh);
+   pragma Inline_Always (vec_vupklsb);
+   pragma Inline_Always (vec_xor);
+
+   pragma Inline_Always (vec_all_eq);
+   pragma Inline_Always (vec_all_ge);
+   pragma Inline_Always (vec_all_gt);
+   pragma Inline_Always (vec_all_in);
+   pragma Inline_Always (vec_all_le);
+   pragma Inline_Always (vec_all_lt);
+   pragma Inline_Always (vec_all_nan);
+   pragma Inline_Always (vec_all_ne);
+   pragma Inline_Always (vec_all_nge);
+   pragma Inline_Always (vec_all_ngt);
+   pragma Inline_Always (vec_all_nle);
+   pragma Inline_Always (vec_all_nlt);
+   pragma Inline_Always (vec_all_numeric);
+   pragma Inline_Always (vec_any_eq);
+   pragma Inline_Always (vec_any_ge);
+   pragma Inline_Always (vec_any_gt);
+   pragma Inline_Always (vec_any_le);
+   pragma Inline_Always (vec_any_lt);
+   pragma Inline_Always (vec_any_nan);
+   pragma Inline_Always (vec_any_ne);
+   pragma Inline_Always (vec_any_nge);
+   pragma Inline_Always (vec_any_ngt);
+   pragma Inline_Always (vec_any_nle);
+   pragma Inline_Always (vec_any_nlt);
+   pragma Inline_Always (vec_any_numeric);
+   pragma Inline_Always (vec_any_out);
+
+   --  Similarily, vec_step is expected to be turned into a compile time
+   --  constant, so ...
+
+   pragma Inline_Always (vec_step);
+
+end GNAT.Altivec.Vector_Operations;
diff --git a/gcc/ada/g-alvety.ads b/gcc/ada/g-alvety.ads
new file mode 100644 (file)
index 0000000..03b637e
--- /dev/null
@@ -0,0 +1,152 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--            G N A T . A L T I V E C . V E C T O R _ T Y P E S             --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 2004-2005, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This unit exposes the various vector types part of the Ada binding to
+--  Altivec facilities.
+
+with GNAT.Altivec.Low_Level_Vectors;
+
+package GNAT.Altivec.Vector_Types is
+
+   use GNAT.Altivec.Low_Level_Vectors;
+
+   ---------------------------------------------------
+   -- Vector type declarations [PIM-2.1 Data Types] --
+   ---------------------------------------------------
+
+   --  Except for assignments and pointer creation/dereference, operations
+   --  on vectors are only performed via subprograms. The vector types are
+   --  then private, and non-limited since assignments are allowed.
+
+   --  The Hard/Soft binding type-structure differentiation is achieved in
+   --  Low_Level_Vectors. Each version only exposes private vector types, that
+   --  we just sub-type here. This is fine from the design standpoint and
+   --  reduces the amount of explicit conversion required in various places
+   --  internally.
+
+   subtype vector_unsigned_char is Low_Level_Vectors.LL_VUC;
+   subtype vector_signed_char is Low_Level_Vectors.LL_VSC;
+   subtype vector_bool_char is Low_Level_Vectors.LL_VBC;
+
+   subtype vector_unsigned_short is Low_Level_Vectors.LL_VUS;
+   subtype vector_signed_short is Low_Level_Vectors.LL_VSS;
+   subtype vector_bool_short is Low_Level_Vectors.LL_VBS;
+
+   subtype vector_unsigned_int is Low_Level_Vectors.LL_VUI;
+   subtype vector_signed_int is Low_Level_Vectors.LL_VSI;
+   subtype vector_bool_int is Low_Level_Vectors.LL_VBI;
+
+   subtype vector_float is Low_Level_Vectors.LL_VF;
+   subtype vector_pixel is Low_Level_Vectors.LL_VP;
+
+   --  [PIM-2.1] shows groups of declarations with exact same component types,
+   --  e.g. vector unsigned short together with vector unsigned short int. It
+   --  so appears tempting to define subtypes for those matches here.
+   --
+   --  [PIM-2.1] does not qualify items in those groups as "the same types",
+   --  though, and [PIM-2.4.2 Assignments] reads: "if either the left hand
+   --  side or the right hand side of an expression has a vector type, then
+   --  both sides of the expression must be of the same vector type".
+   --
+   --  Not so clear what is exactly right, then. We go with subtypes for now
+   --  and can adjust later if need be.
+
+   subtype vector_unsigned_short_int is vector_unsigned_short;
+   subtype vector_signed_short_int is vector_signed_short;
+
+   subtype vector_char is vector_signed_char;
+   subtype vector_short is vector_signed_short;
+   subtype vector_int is vector_signed_int;
+
+   --------------------------------
+   -- Corresponding access types --
+   --------------------------------
+
+   type vector_unsigned_char_ptr is access all vector_unsigned_char;
+   type vector_signed_char_ptr is access all vector_signed_char;
+   type vector_bool_char_ptr is access all vector_bool_char;
+
+   type vector_unsigned_short_ptr is access all vector_unsigned_short;
+   type vector_signed_short_ptr is access all vector_signed_short;
+   type vector_bool_short_ptr is access all vector_bool_short;
+
+   type vector_unsigned_int_ptr is access all vector_unsigned_int;
+   type vector_signed_int_ptr is access all vector_signed_int;
+   type vector_bool_int_ptr is access all vector_bool_int;
+
+   type vector_float_ptr is access all vector_float;
+   type vector_pixel_ptr is access all vector_pixel;
+
+   --------------------------------------------------------------------
+   -- Additional access types, for the sake of some argument passing --
+   --------------------------------------------------------------------
+
+   --  ... because some of the operations expect pointers to possibly
+   --  constant objects.
+
+   type const_vector_bool_char_ptr     is access constant vector_bool_char;
+   type const_vector_signed_char_ptr   is access constant vector_signed_char;
+   type const_vector_unsigned_char_ptr is access constant vector_unsigned_char;
+
+   type const_vector_bool_short_ptr     is access constant vector_bool_short;
+   type const_vector_signed_short_ptr   is access constant vector_signed_short;
+   type const_vector_unsigned_short_ptr is access
+     constant vector_unsigned_short;
+
+   type const_vector_bool_int_ptr     is access constant vector_bool_int;
+   type const_vector_signed_int_ptr   is access constant vector_signed_int;
+   type const_vector_unsigned_int_ptr is access constant vector_unsigned_int;
+
+   type const_vector_float_ptr is access constant vector_float;
+   type const_vector_pixel_ptr is access constant vector_pixel;
+
+   ----------------------
+   -- Useful shortcuts --
+   ----------------------
+
+   subtype VUC is vector_unsigned_char;
+   subtype VSC is vector_signed_char;
+   subtype VBC is vector_bool_char;
+
+   subtype VUS is vector_unsigned_short;
+   subtype VSS is vector_signed_short;
+   subtype VBS is vector_bool_short;
+
+   subtype VUI is vector_unsigned_int;
+   subtype VSI is vector_signed_int;
+   subtype VBI is vector_bool_int;
+
+   subtype VP is vector_pixel;
+   subtype VF is vector_float;
+
+end GNAT.Altivec.Vector_Types;
diff --git a/gcc/ada/g-alvevi.ads b/gcc/ada/g-alvevi.ads
new file mode 100644 (file)
index 0000000..bd3a299
--- /dev/null
@@ -0,0 +1,158 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--            G N A T . A L T I V E C . V E C T O R _ V I E W S             --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--            Copyright (C) 2005, Free Software Foundation, Inc.            --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This unit provides public 'View' data types from/to which private vector
+--  representations can be converted via Altivec.Conversions. This allows
+--  convenient access to individual vector elements and provides a simple way
+--  to initialize vector objects.
+
+--  Accessing vector contents with direct memory overlays should be avoided
+--  because actual vector representations may vary across configurations, for
+--  instance to accomodate different target endianness.
+
+--  The natural representation of a vector is an array indexed by vector
+--  component number, which is materialized by the Varray type definitions
+--  below. The 16byte alignment constraint is unfortunately sometimes not
+--  properly honored for constant array aggregates, so the View types are
+--  actually records enclosing such arrays.
+
+package GNAT.Altivec.Vector_Views is
+
+   ---------------------
+   -- char components --
+   ---------------------
+
+   type Vchar_Range is range 1 .. 16;
+
+   type Varray_unsigned_char is array (Vchar_Range) of unsigned_char;
+   for Varray_unsigned_char'Alignment use VECTOR_ALIGNMENT;
+
+   type VUC_View is record
+      Values : Varray_unsigned_char;
+   end record;
+
+   type Varray_signed_char is array (Vchar_Range) of signed_char;
+   for Varray_signed_char'Alignment use VECTOR_ALIGNMENT;
+
+   type VSC_View is record
+      Values : Varray_signed_char;
+   end record;
+
+   type Varray_bool_char is array (Vchar_Range) of bool_char;
+   for Varray_bool_char'Alignment use VECTOR_ALIGNMENT;
+
+   type VBC_View is record
+      Values : Varray_bool_char;
+   end record;
+
+   ----------------------
+   -- short components --
+   ----------------------
+
+   type Vshort_Range is range 1 .. 8;
+
+   type Varray_unsigned_short is array (Vshort_Range) of unsigned_short;
+   for Varray_unsigned_short'Alignment use VECTOR_ALIGNMENT;
+
+   type VUS_View is record
+      Values : Varray_unsigned_short;
+   end record;
+
+   type Varray_signed_short is array (Vshort_Range) of signed_short;
+   for Varray_signed_short'Alignment use VECTOR_ALIGNMENT;
+
+   type VSS_View is record
+      Values : Varray_signed_short;
+   end record;
+
+   type Varray_bool_short is array (Vshort_Range) of bool_short;
+   for Varray_bool_short'Alignment use VECTOR_ALIGNMENT;
+
+   type VBS_View is record
+      Values : Varray_bool_short;
+   end record;
+
+   --------------------
+   -- int components --
+   --------------------
+
+   type Vint_Range is range 1 .. 4;
+
+   type Varray_unsigned_int is array (Vint_Range) of unsigned_int;
+   for Varray_unsigned_int'Alignment use VECTOR_ALIGNMENT;
+
+   type VUI_View is record
+      Values : Varray_unsigned_int;
+   end record;
+
+   type Varray_signed_int is array (Vint_Range) of signed_int;
+   for Varray_signed_int'Alignment use VECTOR_ALIGNMENT;
+
+   type VSI_View is record
+      Values : Varray_signed_int;
+   end record;
+
+   type Varray_bool_int is array (Vint_Range) of bool_int;
+   for Varray_bool_int'Alignment use VECTOR_ALIGNMENT;
+
+   type VBI_View is record
+      Values : Varray_bool_int;
+   end record;
+
+   ----------------------
+   -- float components --
+   ----------------------
+
+   type Vfloat_Range is range 1 .. 4;
+
+   type Varray_float is array (Vfloat_Range) of C_float;
+   for Varray_float'Alignment use VECTOR_ALIGNMENT;
+
+   type VF_View is record
+      Values : Varray_float;
+   end record;
+
+   ----------------------
+   -- pixel components --
+   ----------------------
+
+   type Vpixel_Range is range 1 .. 8;
+
+   type Varray_pixel is array (Vpixel_Range) of pixel;
+   for Varray_pixel'Alignment use VECTOR_ALIGNMENT;
+
+   type VP_View is record
+      Values : Varray_pixel;
+   end record;
+
+end GNAT.Altivec.Vector_Views;
index ff753ac..5fca815 100644 (file)
@@ -195,6 +195,11 @@ package body Impunit is
    -- GNAT Library Units --
    ------------------------
 
+     "g-altive",    -- GNAT.Altivec
+     "g-alvety",    -- GNAT.Altivec.Vector_Types
+     "g-alvevi",    -- GNAT.Altivec.Vector_Views
+     "g-alveop",    -- GNAT.Altivec.Vector_Operations
+     "g-altcon",    -- GNAT.Altivec.Conversions
      "g-arrspl",    -- GNAT.Array_Split
      "g-awk   ",    -- GNAT.AWK
      "g-boubuf",    -- GNAT.Bounded_Buffers
@@ -359,12 +364,13 @@ package body Impunit is
      "a-stzmap",    -- Ada.Strings.Wide_Wide_Maps
      "a-stzunb",    -- Ada.Strings.Wide_Wide_Unbounded
      "a-swuwha",    -- Ada.Strings.Wide_Unbounded.Wide_Hash
-     "a-szmzco",    -- Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants;
+     "a-szmzco",    -- Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants
      "a-szuzha",    -- Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Hash
-     "a-tgdico",    -- Ada.Tags.Generic_Dispatching_Constructor;
-     "a-tiunio",    -- Ada.Text_IO.Unbounded_IO;
+     "a-taster",    -- Ada.Task_Termination
+     "a-tgdico",    -- Ada.Tags.Generic_Dispatching_Constructor
+     "a-tiunio",    -- Ada.Text_IO.Unbounded_IO
      "a-wichun",    -- Ada.Wide_Characters.Unicode
-     "a-wwunio",    -- Ada.Wide_Text_IO.Wide_Unbounded_IO;
+     "a-wwunio",    -- Ada.Wide_Text_IO.Wide_Unbounded_IO
      "a-zchara",    -- Ada.Wide_Wide_Characters
      "a-zttest",    -- Ada.Wide_Wide_Text_IO.Text_Streams
      "a-ztexio",    -- Ada.Wide_Wide_Text_IO
index 69cd038..f125939 100644 (file)
@@ -344,6 +344,17 @@ package Opt is
    --  Set True for dynamic elaboration checking mode, as set by the -gnatE
    --  switch or by the use of pragma Elaboration_Checks (Dynamic).
 
+   Dynamic_Stack_Measurement : Boolean := False;
+   --  GNATBIND
+   --  Set True to enable dynamic stack measurement (-u flag for gnatbind)
+
+   Dynamic_Stack_Measurement_Array_Size : Nat := 100;
+   --  GNATBIND
+   --  Number of measurements we want to store during dynamic stack analysis.
+   --  When the buffer is full, non-storable results will be output on the fly.
+   --  The value is relevant only if Dynamic_Stack_Measurement is set. Set
+   --  by processing of -u flag for gnatbind.
+
    Elab_Dependency_Output : Boolean := False;
    --  GNATBIND
    --  Set to True to output complete list of elaboration constraints
@@ -687,15 +698,6 @@ package Opt is
    --  extension, as set by the appropriate switch. If no switch is given,
    --  then this value is initialized by Osint to the appropriate value.
 
-   Max_Line_Length : Int := Hostparm.Max_Line_Length;
-   --  This is a copy of Max_Line_Length used by the scanner. It is usually
-   --  set to be a copy of Hostparm.Max_Line_Length, and is used to check
-   --  the maximum line length in the scanner when style checking is inactive.
-   --  The only time it is set to a different value is during the scanning of
-   --  configuration pragma files, where we want to turn off all checking and
-   --  in particular we want to allow long lines. So we reset this value to
-   --  Column_Number'Last during scanning of configuration pragma files.
-
    Maximum_Processes : Positive := 1;
    --  GNATMAKE, GPRMAKE
    --  Maximum number of processes that should be spawned to carry out
index d746cd3..712bb12 100644 (file)
@@ -594,6 +594,6 @@ package body System.Finalization_Implementation is
 --  Initialization of package, set Adafinal soft link
 
 begin
-   SSL.Adafinal := Finalize_Global_List'Access;
+   SSL.Finalize_Global_List := Finalize_Global_List'Access;
 
 end System.Finalization_Implementation;
index 1afdd37..264976b 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 
 package body System.IO is
 
+   Current_Out : File_Type := Stdout;
+   pragma Atomic (Current_Out);
+   --  Current output file (modified by Set_Output)
+
    --------------
    -- New_Line --
    --------------
@@ -49,21 +53,35 @@ package body System.IO is
    ---------
 
    procedure Put (X : Integer) is
-
       procedure Put_Int (X : Integer);
       pragma Import (C, Put_Int, "put_int");
 
+      procedure Put_Int_Err (X : Integer);
+      pragma Import (C, Put_Int_Err, "put_int_stderr");
+
    begin
-      Put_Int (X);
+      case Current_Out is
+         when Stdout =>
+            Put_Int (X);
+         when Stderr =>
+            Put_Int_Err (X);
+      end case;
    end Put;
 
    procedure Put (C : Character) is
-
       procedure Put_Char (C : Character);
       pragma Import (C, Put_Char, "put_char");
 
+      procedure Put_Char_Stderr (C : Character);
+      pragma Import (C, Put_Char_Stderr, "put_char_stderr");
+
    begin
-      Put_Char (C);
+      case Current_Out is
+         when Stdout =>
+            Put_Char (C);
+         when Stderr =>
+            Put_Char_Stderr (C);
+      end case;
    end Put;
 
    procedure Put (S : String) is
@@ -83,4 +101,31 @@ package body System.IO is
       New_Line;
    end Put_Line;
 
+   ---------------------
+   -- Standard_Output --
+   ---------------------
+
+   function Standard_Output return File_Type is
+   begin
+      return Stdout;
+   end Standard_Output;
+
+   --------------------
+   -- Standard_Error --
+   --------------------
+
+   function Standard_Error return File_Type is
+   begin
+      return Stderr;
+   end Standard_Error;
+
+   ----------------
+   -- Set_Output --
+   ----------------
+
+   procedure Set_Output (File : in File_Type) is
+   begin
+      Current_Out := File;
+   end Set_Output;
+
 end System.IO;
index 6171510..7ab099b 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -48,4 +48,19 @@ package System.IO is
 
    procedure New_Line (Spacing : Positive := 1);
 
+   type File_Type is limited private;
+
+   function Standard_Error return File_Type;
+   function Standard_Output return File_Type;
+
+   procedure Set_Output (File : in File_Type);
+
+private
+
+   type File_Type is (Stdout, Stderr);
+   --  Stdout = Standard_Output, Stderr = Standard_Error
+
+   pragma Inline (Standard_Error);
+   pragma Inline (Standard_Output);
+
 end System.IO;
index 02b57bf..8c32568 100644 (file)
@@ -83,6 +83,25 @@ package body System.Soft_Links is
       null;
    end Abort_Undefer_NT;
 
+   -----------------
+   -- Adafinal_NT --
+   -----------------
+
+   procedure Adafinal_NT is
+   begin
+      --  Handle normal task termination by the environment task, but only
+      --  for the normal task termination. In the case of Abnormal and
+      --  Unhandled_Exception they must have been handled before, and the
+      --  task termination soft link must have been changed so the task
+      --  termination routine is not executed twice.
+
+      Task_Termination_Handler.all (Ada.Exceptions.Null_Occurrence);
+
+      --  Finalize the global list for controlled objects if needed
+
+      Finalize_Global_List.all;
+   end Adafinal_NT;
+
    ---------------------------
    -- Check_Abort_Status_NT --
    ---------------------------
@@ -226,14 +245,14 @@ package body System.Soft_Links is
       return NT_TSD.Pri_Stack_Info'Access;
    end Get_Stack_Info_NT;
 
-   -------------------
-   -- Null_Adafinal --
-   -------------------
+   -------------------------------
+   -- Null_Finalize_Global_List --
+   -------------------------------
 
-   procedure Null_Adafinal is
+   procedure Null_Finalize_Global_List is
    begin
       null;
-   end Null_Adafinal;
+   end Null_Finalize_Global_List;
 
    ---------------------------
    -- Set_Jmpbuf_Address_NT --
@@ -286,6 +305,16 @@ package body System.Soft_Links is
    end Task_Unlock_NT;
 
    -------------------------
+   -- Task_Termination_NT --
+   -------------------------
+
+   procedure Task_Termination_NT (Excep : EO) is
+      pragma Warnings (Off, Excep);
+   begin
+      null;
+   end Task_Termination_NT;
+
+   -------------------------
    -- Update_Exception_NT --
    -------------------------
 
index 8f166e6..2abe631 100644 (file)
@@ -62,6 +62,7 @@ package System.Soft_Links is
 
    type No_Param_Proc     is access procedure;
    type Addr_Param_Proc   is access procedure (Addr : Address);
+   type EO_Param_Proc     is access procedure (Excep : EO);
 
    type Get_Address_Call  is access function return Address;
    type Set_Address_Call  is access procedure (Addr : Address);
@@ -92,6 +93,7 @@ package System.Soft_Links is
 
    pragma Suppress (Access_Check, No_Param_Proc);
    pragma Suppress (Access_Check, Addr_Param_Proc);
+   pragma Suppress (Access_Check, EO_Param_Proc);
    pragma Suppress (Access_Check, Get_Address_Call);
    pragma Suppress (Access_Check, Set_Address_Call);
    pragma Suppress (Access_Check, Set_Address_Call2);
@@ -139,9 +141,15 @@ package System.Soft_Links is
    procedure Task_Unlock_NT;
    --  Release lock set by Task_Lock (non-tasking case, does nothing)
 
-   procedure Null_Adafinal;
-   --  Shuts down the runtime system (non-tasking no-finalization case,
-   --  does nothing)
+   procedure Task_Termination_NT (Excep : EO);
+   --  Handle task termination routines for the environment task (non-tasking
+   --  case, does nothing).
+
+   procedure Null_Finalize_Global_List;
+   --  Finalize global list for controlled objects (does nothing)
+
+   procedure Adafinal_NT;
+   --  Shuts down the runtime system (non-tasking case)
 
    Abort_Defer : No_Param_Proc := Abort_Defer_NT'Access;
    pragma Suppress (Access_Check, Abort_Defer);
@@ -197,7 +205,13 @@ package System.Soft_Links is
    --  This ensures that the lock is not left set if an exception is raised
    --  explicitly or implicitly during the critical locked region.
 
-   Adafinal : No_Param_Proc := Null_Adafinal'Access;
+   Task_Termination_Handler : EO_Param_Proc := Task_Termination_NT'Access;
+   --  Handle task termination routines (task/non-task case as appropriate)
+
+   Finalize_Global_List : No_Param_Proc := Null_Finalize_Global_List'Access;
+   --  Performs finalization of global list for controlled objects
+
+   Adafinal : No_Param_Proc := Adafinal_NT'Access;
    --  Performs the finalization of the Ada Runtime
 
    function  Get_Jmpbuf_Address_NT return  Address;
index 9202847..5c4b9ed 100644 (file)
@@ -46,12 +46,25 @@ with System.Task_Primitives.Operations;
 
 with System.Tasking;
 --  Used for Task_Id
+--           Cause_Of_Termination
+
+with Ada.Exceptions;
+--  Used for Exception_Id
+--           Exception_Occurrence
+--           Save_Occurrence
+
+with Ada.Exceptions.Is_Null_Occurrence;
 
 package body System.Soft_Links.Tasking is
 
    package STPO renames System.Task_Primitives.Operations;
    package SSL  renames System.Soft_Links;
 
+   use Ada.Exceptions;
+
+   use type System.Tasking.Task_Id;
+   use type System.Tasking.Termination_Handler;
+
    ----------------
    -- Local Data --
    ----------------
@@ -78,6 +91,9 @@ package body System.Soft_Links.Tasking is
    procedure Timed_Delay_T (Time : Duration; Mode : Integer);
    --  Task-safe version of SSL.Timed_Delay
 
+   procedure Task_Termination_Handler_T  (Excep : SSL.EO);
+   --  Task-safe version of the task termination procedure
+
    --------------------------
    -- Soft-Link Get Bodies --
    --------------------------
@@ -134,6 +150,48 @@ package body System.Soft_Links.Tasking is
       end if;
    end Timed_Delay_T;
 
+   --------------------------------
+   -- Task_Termination_Handler_T --
+   --------------------------------
+
+   procedure Task_Termination_Handler_T (Excep : SSL.EO) is
+      Self_Id : constant System.Tasking.Task_Id := STPO.Self;
+      Cause   : System.Tasking.Cause_Of_Termination;
+      EO      : Ada.Exceptions.Exception_Occurrence;
+
+   begin
+      --  We can only be here because we are terminating the environment task.
+      --  Task termination for the rest of the tasks is handled in the
+      --  Task_Wrapper.
+
+      pragma Assert (Self_Id = STPO.Environment_Task);
+
+      --  Normal task termination
+
+      if Is_Null_Occurrence (Excep) then
+         Cause := System.Tasking.Normal;
+         Ada.Exceptions.Save_Occurrence (EO, Ada.Exceptions.Null_Occurrence);
+
+      --  Abnormal task termination
+
+      elsif Exception_Identity (Excep) = Standard'Abort_Signal'Identity then
+         Cause := System.Tasking.Abnormal;
+         Ada.Exceptions.Save_Occurrence (EO, Ada.Exceptions.Null_Occurrence);
+
+      --  Termination because of an unhandled exception
+
+      else
+         Cause := System.Tasking.Unhandled_Exception;
+         Ada.Exceptions.Save_Occurrence (EO, Excep);
+      end if;
+
+      if Self_Id.Common.Specific_Handler /= null then
+         Self_Id.Common.Specific_Handler.all (Cause, Self_Id, EO);
+      elsif Self_Id.Common.Fall_Back_Handler /= null then
+         Self_Id.Common.Fall_Back_Handler.all (Cause, Self_Id, EO);
+      end if;
+   end Task_Termination_Handler_T;
+
    -----------------------------
    -- Init_Tasking_Soft_Links --
    -----------------------------
@@ -151,12 +209,13 @@ package body System.Soft_Links.Tasking is
          --  The application being executed uses tasking so that the tasking
          --  version of the following soft links need to be used.
 
-         SSL.Get_Jmpbuf_Address     := Get_Jmpbuf_Address'Access;
-         SSL.Set_Jmpbuf_Address     := Set_Jmpbuf_Address'Access;
-         SSL.Get_Sec_Stack_Addr     := Get_Sec_Stack_Addr'Access;
-         SSL.Set_Sec_Stack_Addr     := Set_Sec_Stack_Addr'Access;
-         SSL.Get_Current_Excep      := Get_Current_Excep'Access;
-         SSL.Timed_Delay            := Timed_Delay_T'Access;
+         SSL.Get_Jmpbuf_Address       := Get_Jmpbuf_Address'Access;
+         SSL.Set_Jmpbuf_Address       := Set_Jmpbuf_Address'Access;
+         SSL.Get_Sec_Stack_Addr       := Get_Sec_Stack_Addr'Access;
+         SSL.Set_Sec_Stack_Addr       := Set_Sec_Stack_Addr'Access;
+         SSL.Get_Current_Excep        := Get_Current_Excep'Access;
+         SSL.Timed_Delay              := Timed_Delay_T'Access;
+         SSL.Task_Termination_Handler := Task_Termination_Handler_T'Access;
 
          --  No need to create a new Secondary Stack, since we will use the
          --  default one created in s-secsta.adb
index 0c0d8eb..72242c2 100644 (file)
@@ -36,6 +36,7 @@ with System.Storage_Elements;
 with System.Address_To_Access_Conversions;
 
 package System.Stack_Usage is
+   pragma Preelaborate;
 
    package SSE renames System.Storage_Elements;
 
@@ -46,46 +47,43 @@ package System.Stack_Usage is
    for Word_32'Alignment use 4;
 
    subtype Stack_Address is SSE.Integer_Address;
-   --  Address on the stack.
+   --  Address on the stack
    --
-   --  NOTE:
-   --  *****
-   --
-   --  in this package, when comparing two addresses on the
-   --  stack, the comments use the terms "outer", "inner", "outermost"
-   --  and "innermost" instead of the ambigous "higher", "lower",
-   --  "highest" and "lowest". "inner" means "closer to the bottom of
-   --  stack" and is the contrary of "outer". "innermost" means "closest
-   --  address to the bottom of stack". The stack is growing from the
-   --  innermost addresses to the outermost addresses.
+   --  Note: in this package, when comparing two addresses on the stack, the
+   --  comments use the terms "outer", "inner", "outermost" and "innermost"
+   --  instead of the ambigous "higher", "lower", "highest" and "lowest".
+   --  "inner" means "closer to the bottom of stack" and is the contrary of
+   --  "outer". "innermost" means "closest address to the bottom of stack". The
+   --  stack is growing from the inner to the outer.
+
+   --  Top/Bottom would be much better than inner and outer ???
 
-   function To_Stack_Address (Value : Address) return Stack_Address
-     renames System.Storage_Elements.To_Integer;
+   function To_Stack_Address (Value : System.Address) return Stack_Address
+                              renames System.Storage_Elements.To_Integer;
 
    type Stack_Analyzer is private;
    --  Type of the stack analyzer tool. It is used to fill a portion of
    --  the stack with Pattern, and to compute the stack used after some
    --  execution.
-   --
-   --  USAGE:
-   --  ******
-   --
-   --  --  A typical use of the package is something like:
-   --
+
+   --  Usage:
+
+   --  A typical use of the package is something like:
+
    --  A : Stack_Analyzer;
-   --
+
    --  task T is
    --     pragma Storage_Size (A_Storage_Size);
    --  end T;
-   --
+
    --  [...]
-   --
+
    --     Bottom_Of_Stack : aliased Integer;
    --     --  Bottom_Of_Stack'Address will be used as an approximation of
    --     --  the bottom of stack. A good practise is to avoid allocating
    --     --  other local variables on this stack, as it would degrade
    --     --  the quality of this approximation.
-   --
+
    --  begin
    --     Initialize_Analyzer (A,
    --                          "Task t",
@@ -96,92 +94,112 @@ package System.Stack_Usage is
    --     Compute_Result (A);
    --     Report_Result (A);
    --  end T;
-   --
-   --
+
    --  Errors:
-   --  *******
    --
    --  We are instrumenting the code to measure the stack used by the user
    --  code. This method has a number of systematic errors, but several
    --  methods can be used to evaluate or reduce those errors. Here are
    --  those errors and the strategy that we use to deal with them:
-   --
-   --  * Bottom offset:
-   --   - Description: The procedure used to fill the stack with a given
-   --   pattern will itself have a stack frame. The value of the stack pointer
-   --   in this procedure is, therefore, different from the value before the
-   --   call to the instrumentation procedure.
-   --   - Strategy: The user of this package shall measure the bottom of stack
-   --   before the call to Fill_Stack and pass it in parameter.
-   --
-   --  * Instrumentation threshold at writing:
-   --   - Description: The procedure used to fill the stack with a given
-   --   pattern will itself have a stack frame.  Therefore, it will
-   --   fill the stack after this stack frame. This part of the stack will
-   --   appear as used in the final measure.
-   --   - Strategy: As the user pass the value of the bottom of stack to
-   --   the instrumentation to deal with the bottom offset error, and as
-   --   as the instrumentation procedure knows where the pattern filling
-   --   start on the stack, the difference between the two values is the
-   --   minimum stack usage that the method can measure. If, when the results
-   --   are computed, the pattern zone has been left untouched, we conclude
-   --   that the stack usage is inferior to this minimum stack usage.
-   --
-   --  * Instrumentation threshold at reading:
-   --   - Description: The procedure used to read the stack at the end of the
-   --   execution clobbers the stack by allocating its stack frame. If this
-   --   stack frame is bigger than the total stack used by the user code at
-   --   this point, it will increase the measured stack size.
-   --   - Strategy: We could augment this stack frame and see if it changes the
-   --   measure. However, this error should be negligeable.
-   --
-   --   * Pattern zone overflow:
-   --    - Description: The stack grows outer than the outermost bound of the
-   --    pattern zone. In that case, the outermost region modified in the
-   --    pattern is not the maximum value of the stack pointer during the
-   --    execution.
-   --    - Strategy: At the end of the execution, the difference between the
-   --    outermost memory region modified in the pattern zone and the
-   --    outermost bound of the pattern zone can be understood as the
-   --    biggest allocation that the method could have detect, provided
-   --    that there is no "Untouched allocated zone" error and no "Pattern
-   --    usage in user code" error. If no object in the user code is likely
-   --    to have this size, this is not likely to happen.
-   --
-   --   * Pattern usage in user code:
-   --    - Description: The pattern can be found in the object of the user
-   --    code. Therefore, the address space where this object has been
-   --    allocated will appear as untouched.
-   --    - Strategy: Choose a pattern that is uncommon. 16#0000_0000# is the
-   --    worst choice; 16#DEAD_BEEF# can be a good one. A good choice is an
-   --    address which is not a multiple of 2, and which is not in the
-   --    target address space. You can also change the pattern to see if
-   --    it changes the measure. Note that this error *very* rarely influence
-   --    the measure of the total stack usage: to have some influence, the
-   --    pattern has to be used in the object that has been allocated on the
-   --    outermost address of the used stack.
-   --
-   --   * Stack overflow:
-   --    - Description: The pattern zone does not fit on the stack.
-   --    This may lead to an erroneous execution.
-   --    - Strategy: Specify a storage size that is bigger than the
-   --    size of the pattern. 2 times bigger should be enough.
-   --
-   --   * Augmentation of the user stack frames:
-   --    - Description: The use of instrumentation object or procedure may
-   --    augment the stack frame of the caller.
-   --    - Strategy: Do *not* inline the instrumentation procedures. Do *not*
-   --    allocate the Stack_Analyzer object on the stack.
-   --
-   --   * Untouched allocated zone:
-   --    - Description: The user code may allocate objects that it will never
-   --    touch. In that case, the pattern will not be changed.
-   --    - Strategy: There are no way to detect this error. Fortunately, this
-   --    error is really rare, and it is most probably a bug in the user code,
-   --    e.g. some uninitialized variable. It is (most of the time) harmless:
-   --    it influences the measure only if the untouched allocated zone
-   --    happens to be located at the outermost value of the stack pointer
-   --    for the whole execution.
+
+   --  Bottom offset:
+
+   --     Description: The procedure used to fill the stack with a given
+   --       pattern will itself have a stack frame. The value of the stack
+   --       pointer in this procedure is, therefore, different from the value
+   --       before the call to the instrumentation procedure.
+
+   --     Strategy: The user of this package should measure the bottom of stack
+   --       before the call to Fill_Stack and pass it in parameter.
+
+   --  Instrumentation threshold at writing:
+
+   --     Description: The procedure used to fill the stack with a given
+   --       pattern will itself have a stack frame.  Therefore, it will
+   --       fill the stack after this stack frame. This part of the stack will
+   --       appear as used in the final measure.
+
+   --     Strategy: As the user passes the value of the bottom of stack to
+   --       the instrumentation to deal with the bottom offset error, and as as
+   --       the instrumentation procedure knows where the pattern filling start
+   --       on the stack, the difference between the two values is the minimum
+   --       stack usage that the method can measure. If, when the results are
+   --       computed, the pattern zone has been left untouched, we conclude
+   --       that the stack usage is inferior to this minimum stack usage.
+
+   --  Instrumentation threshold at reading:
+
+   --    Description: The procedure used to read the stack at the end of the
+   --      execution clobbers the stack by allocating its stack frame. If this
+   --      stack frame is bigger than the total stack used by the user code at
+   --      this point, it will increase the measured stack size.
+
+   --    Strategy: We could augment this stack frame and see if it changes the
+   --      measure. However, this error should be negligeable.
+
+   --   Pattern zone overflow:
+
+   --     Description: The stack grows outer than the outermost bound of the
+   --       pattern zone. In that case, the outermost region modified in the
+   --       pattern is not the maximum value of the stack pointer during the
+   --       execution.
+
+   --     Strategy: At the end of the execution, the difference between the
+   --       outermost memory region modified in the pattern zone and the
+   --       outermost bound of the pattern zone can be understood as the
+   --       biggest allocation that the method could have detect, provided
+   --       that there is no "Untouched allocated zone" error and no "Pattern
+   --       usage in user code" error. If no object in the user code is likely
+   --       to have this size, this is not likely to happen.
+
+   --   Pattern usage in user code:
+
+   --     Description: The pattern can be found in the object of the user code.
+   --       Therefore, the address space where this object has been allocated
+   --       will appear as untouched.
+
+   --     Strategy: Choose a pattern that is uncommon. 16#0000_0000# is the
+   --       worst choice; 16#DEAD_BEEF# can be a good one. A good choice is an
+   --       address which is not a multiple of 2, and which is not in the
+   --       target address space. You can also change the pattern to see if it
+   --       changes the measure. Note that this error *very* rarely influence
+   --       the measure of the total stack usage: to have some influence, the
+   --       pattern has to be used in the object that has been allocated on the
+   --       outermost address of the used stack.
+
+   --   Stack overflow:
+
+   --     Description: The pattern zone does not fit on the stack. This may
+   --       lead to an erroneous execution.
+
+   --    Strategy: Specify a storage size that is bigger than the size of the
+   --      pattern. 2 times bigger should be enough.
+
+   --   Augmentation of the user stack frames:
+
+   --     Description: The use of instrumentation object or procedure may
+   --       augment the stack frame of the caller.
+
+   --     Strategy: Do *not* inline the instrumentation procedures. Do *not*
+   --       allocate the Stack_Analyzer object on the stack.
+
+   --   Untouched allocated zone:
+
+   --     Description: The user code may allocate objects that it will never
+   --       touch. In that case, the pattern will not be changed.
+
+   --     Strategy: There are no way to detect this error. Fortunately, this
+   --       error is really rare, and it is most probably a bug in the user
+   --       code, e.g. some uninitialized variable. It is (most of the time)
+   --       harmless: it influences the measure only if the untouched allocated
+   --       zone happens to be located at the outermost value of the stack
+   --       pointer for the whole execution.
+
+   procedure Initialize (Buffer_Size : Natural);
+   pragma Export (C, Initialize, "__gnat_stack_usage_initialize");
+   --  Initializes the size of the buffer that stores the results. Only the
+   --  first Buffer_Size results are stored. Any results that do not fit in
+   --  this buffer will be displayed on the fly.
 
    procedure Fill_Stack (Analyzer : in out Stack_Analyzer);
    --  Fill an area of the stack with the pattern Analyzer.Pattern. The size
@@ -200,13 +218,26 @@ package System.Stack_Usage is
    --                    Analyzer.Inner_Pattern_Mark                  ^
    --                                            Analyzer.Outer_Pattern_Mark
 
+   procedure Initialize_Analyzer
+     (Analyzer  : in out Stack_Analyzer;
+      Task_Name : String;
+      Size      : Natural;
+      Bottom    : Stack_Address;
+      Pattern   : Word_32 := 16#DEAD_BEEF#);
+   --  Should be called before any use of a Stack_Analyzer, to initialize it.
+   --  Size is the size of the pattern zone. Bottom should be a close
+   --  approximation of the caller base frame address.
+
+   Is_Enabled : Boolean := False;
+   --  When this flag is true, then stack analysis is enabled
+
    procedure Compute_Result (Analyzer : in out Stack_Analyzer);
-   --  Read the patern zone and deduce the stack usage. It should
-   --  be called from the same frame as Fill_Stack. If Analyzer.Probe is not
-   --  null, an array of Word_32 with Analyzer.Probe elements is allocated on
-   --  Compute_Result's stack frame. Probe can be used to detect an
-   --  "instrumentation threshold at reading" error; See above.
-   --  After the call to this procedure, the memory will look like:
+   --  Read the patern zone and deduce the stack usage. It should be called
+   --  from the same frame as Fill_Stack. If Analyzer.Probe is not null, an
+   --  array of Word_32 with Analyzer.Probe elements is allocated on
+   --  Compute_Result's stack frame. Probe can be used to detect  the error:
+   --  "instrumentation threshold at reading". See above. After the call
+   --  to this procedure, the memory will look like:
    --
    --                                                             Stack growing
    --  ----------------------------------------------------------------------->
@@ -224,45 +255,38 @@ package System.Stack_Usage is
 
    procedure Report_Result (Analyzer : Stack_Analyzer);
    --  Store the results of the computation in memory, at the address
-   --  corresponding to the symbol __gnat_stack_usage_results.
-
-   type Parameterless_Procedure is access procedure;
-
-   procedure Initialize_Analyzer
-     (Analyzer  : in out Stack_Analyzer;
-      Task_Name : String;
-      Size      : Natural;
-      Bottom    : Stack_Address;
-      Pattern   : Word_32 := 16#DEAD_BEEF#);
-   --  Should be called before any use of a Stack_Analyzer, to initialize it.
-   --  Size is the size of the pattern zone.
-   --  Bottom should be a close approximation of the caller base
-   --  frame address.
+   --  corresponding to the symbol __gnat_stack_usage_results. This is not
+   --  done inside Compute_Resuls in order to use as less stack as possible
+   --  within a task.
 
    procedure Output_Results;
    --  Print the results computed so far on the standard output. Should be
    --  called when all tasks are dead.
 
+   pragma Export (C, Output_Results, "__gnat_stack_usage_output_results");
+
 private
 
+   Task_Name_Length : constant := 32;
+
    package Word_32_Addr is
-      new System.Address_To_Access_Conversions (Word_32);
+     new System.Address_To_Access_Conversions (Word_32);
 
-   type Result_Array_Id is range 0 .. 1_023;
+   type Stack_Analyzer is record
+      Task_Name : String (1 .. Task_Name_Length);
+      --  Name of the task
 
-   type Stack_Analyzer
-   is record
-      Size                   : Natural;
-      --  Size of the pattern zone.
+      Size : Natural;
+      --  Size of the pattern zone
 
-      Pattern                : Word_32 := 16#DEAD_BEEF#;
-      --  Pattern used to recognize untouched memory.
+      Pattern : Word_32;
+      --  Pattern used to recognize untouched memory
 
-      Inner_Pattern_Mark     : Stack_Address;
-      --  Innermost bound of the pattern area on the stack.
+      Inner_Pattern_Mark : Stack_Address;
+      --  Innermost bound of the pattern area on the stack
 
-      Outer_Pattern_Mark     : Stack_Address;
-      --  Outermost bound of the pattern area on the stack.
+      Outer_Pattern_Mark : Stack_Address;
+      --  Outermost bound of the pattern area on the stack
 
       Outermost_Touched_Mark : Stack_Address;
       --  Outermost address of the pattern area whose value it is pointing
@@ -270,20 +294,50 @@ private
       --  compensated, it is the outermost value of the stack pointer during
       --  the execution.
 
-      Bottom_Of_Stack        : Stack_Address;
+      Bottom_Of_Stack : Stack_Address;
       --  Address of the bottom of the stack, as given by the caller of
       --  Initialize_Analyzer.
 
-      Array_Address          : Address;
-      --  Address of the array of Word_32 that represents the pattern zone.
+      Array_Address : System.Address;
+      --  Address of the array of Word_32 that represents the pattern zone
 
-      First_Is_Outermost     : Boolean;
+      First_Is_Outermost : Boolean;
       --  Set to true if the first element of the array of Word_32 that
       --  represents the pattern zone is at the outermost address of the
       --  pattern zone; false if it is the innermost address.
 
-      Result_Id              : Result_Array_Id;
-      --  Location in the result array of the result for the current task.
+      Result_Id : Positive;
+      --  Id of the result. If less than value given to gnatbind -u corresponds
+      --  to the location in the result array of result for the current task.
+   end record;
+
+   Environment_Task_Analyzer : Stack_Analyzer;
+
+   Compute_Environment_Task  : Boolean;
+
+   type Task_Result is record
+      Task_Name : String (1 .. Task_Name_Length);
+      Measure   : Natural;
+      Max_Size  : Natural;
    end record;
 
+   type Result_Array_Type is array (Positive range <>) of Task_Result;
+   type Result_Array_Ptr is access all Result_Array_Type;
+
+   Result_Array : Result_Array_Ptr;
+   pragma Export (C, Result_Array, "__gnat_stack_usage_results");
+   --  Exported in order to have an easy accessible symbol in when debugging
+
+   Next_Id : Positive := 1;
+   --  Id of the next stack analyzer
+
+   function Stack_Size
+     (SP_Low  : Stack_Address;
+      SP_High : Stack_Address) return Natural;
+   pragma Inline (Stack_Size);
+   --  Return the size of a portion of stack delimeted by SP_High and SP_Low
+   --  (), i.e. the difference between SP_High and SP_Low. The storage element
+   --  pointed by SP_Low is not included in the size. Inlined to reduce the
+   --  size of the stack used by the instrumentation code.
+
 end System.Stack_Usage;
index f8d9a1f..f0ac3b8 100644 (file)
@@ -45,6 +45,9 @@ pragma Polling (Off);
 --  Turn off polling, we do not want ATC polling to take place during
 --  tasking operations. It causes infinite loops and other problems.
 
+with Ada.Exceptions;
+--  used for Exception_Occurrence
+
 with System.Parameters;
 --  used for Size_Type
 --           Single_Lock
@@ -83,6 +86,8 @@ package body System.Tasking.Restricted.Stages is
    package SSE  renames System.Storage_Elements;
    package SST  renames System.Secondary_Stack;
 
+   use Ada.Exceptions;
+
    use Parameters;
    use Task_Primitives.Operations;
    use Task_Info;
@@ -133,8 +138,15 @@ package body System.Tasking.Restricted.Stages is
    ---------------
 
    procedure Task_Lock is
+      Self_ID : constant Task_Id := STPO.Self;
+
    begin
-      STPO.Write_Lock (Global_Task_Lock'Access, Global_Lock => True);
+      Self_ID.Common.Global_Task_Lock_Nesting :=
+        Self_ID.Common.Global_Task_Lock_Nesting + 1;
+
+      if Self_ID.Common.Global_Task_Lock_Nesting = 1 then
+         STPO.Write_Lock (Global_Task_Lock'Access, Global_Lock => True);
+      end if;
    end Task_Lock;
 
    -----------------
@@ -142,8 +154,16 @@ package body System.Tasking.Restricted.Stages is
    -----------------
 
    procedure Task_Unlock is
+      Self_ID : constant Task_Id := STPO.Self;
+
    begin
-      STPO.Unlock (Global_Task_Lock'Access, Global_Lock => True);
+      pragma Assert (Self_ID.Common.Global_Task_Lock_Nesting > 0);
+      Self_ID.Common.Global_Task_Lock_Nesting :=
+        Self_ID.Common.Global_Task_Lock_Nesting - 1;
+
+      if Self_ID.Common.Global_Task_Lock_Nesting = 0 then
+         STPO.Unlock (Global_Task_Lock'Access, Global_Lock => True);
+      end if;
    end Task_Unlock;
 
    ------------------
@@ -162,21 +182,40 @@ package body System.Tasking.Restricted.Stages is
    procedure Task_Wrapper (Self_ID : Task_Id) is
       ID : Task_Id := Self_ID;
       pragma Volatile (ID);
-
       pragma Warnings (Off, ID);
-      --  Turn off warnings (stand alone volatile constant has to be
-      --  imported, so we cannot just make ID constant).
-
-      --  Do not delete this variable.
-      --  In some targets, we need this variable to implement a fast Self.
+      --  Variable used on some targets to implement a fast self. We turn off
+      --  warnings because a stand alone volatile constant has to be imported,
+      --  so we don't want warnings about ID not being referenced, and volatile
+      --  having no effect.
+      --
+      --  DO NOT delete ID. As noted, it is needed on some targets.
 
       use type System.Parameters.Size_Type;
       use type SSE.Storage_Offset;
 
       Secondary_Stack : aliased SSE.Storage_Array
         (1 .. Self_ID.Common.Compiler_Data.Pri_Stack_Info.Size *
-           SSE.Storage_Offset (Parameters.Sec_Stack_Ratio) / 100);
+                SSE.Storage_Offset (Parameters.Sec_Stack_Ratio) / 100);
+
+      pragma Warnings (Off);
       Secondary_Stack_Address : System.Address := Secondary_Stack'Address;
+      pragma Warnings (On);
+      --  Address of secondary stack. In the fixed secondary stack case, this
+      --  value is not modified, causing a warning, hence the bracketing with
+      --  Warnings (Off/On).
+
+      Cause : Cause_Of_Termination := Normal;
+      --  Indicates the reason why this task terminates. Normal corresponds to
+      --  a task terminating due to completing the last statement of its body.
+      --  If the task terminates because of an exception raised by the
+      --  execution of its task body, then Cause is set to Unhandled_Exception.
+      --  Aborts are not allowed in the restriced profile to which this file
+      --  belongs.
+
+      EO : Exception_Occurrence;
+      --  If the task terminates because of an exception raised by the
+      --  execution of its task body, then EO will contain the associated
+      --  exception occurrence. Otherwise, it will contain Null_Occurrence.
 
    begin
       if not Parameters.Sec_Stack_Dynamic then
@@ -190,25 +229,53 @@ package body System.Tasking.Restricted.Stages is
 
       Enter_Task (Self_ID);
 
-      --  Call the task body procedure.
+      --  Call the task body procedure
 
       begin
          --  We are separating the following portion of the code in order to
-         --  place the exception handlers in a different block.
-         --  In this way we do not call Set_Jmpbuf_Address (which needs
-         --  Self) before we set Self in Enter_Task.
+         --  place the exception handlers in a different block. In this way we
+         --  do not call Set_Jmpbuf_Address (which needs Self) before we set
+         --  Self in Enter_Task.
+
          --  Note that in the case of Ravenscar HI-E where there are no
          --  exception handlers, the exception handler is suppressed.
 
-         --  Call the task body procedure.
+         --  Call the task body procedure
 
          Self_ID.Common.Task_Entry_Point (Self_ID.Common.Task_Arg);
-         Terminate_Task (Self_ID);
+
+         --  Normal task termination
+
+         Cause := Normal;
+         Save_Occurrence (EO, Ada.Exceptions.Null_Occurrence);
 
       exception
-         when others =>
-            Terminate_Task (Self_ID);
+         when E : others =>
+
+            --  Task terminating because of an unhandled exception
+
+            Cause := Unhandled_Exception;
+            Save_Occurrence (EO, E);
       end;
+
+      --  Look for a fall-back handler. It can be either in the task itself
+      --  or in the environment task. Note that this code is always executed
+      --  by a task whose master is the environment task. The task termination
+      --  code for the environment task is executed by
+      --  SSL.Task_Termination_Handler.
+
+      --  This package is part of the restricted run time which supports
+      --  neither task hierarchies (No_Task_Hierarchy) nor specific task
+      --  termination handlers (No_Specific_Termination_Handlers).
+
+      if Self_ID.Common.Fall_Back_Handler /= null then
+         Self_ID.Common.Fall_Back_Handler.all (Cause, Self_ID, EO);
+      elsif Self_ID.Common.Parent.Common.Fall_Back_Handler /= null then
+         Self_ID.Common.Parent.Common.Fall_Back_Handler.all
+           (Cause, Self_ID, EO);
+      end if;
+
+      Terminate_Task (Self_ID);
    end Task_Wrapper;
 
    -----------------------
@@ -219,11 +286,11 @@ package body System.Tasking.Restricted.Stages is
    -- Activate_Restricted_Tasks --
    -------------------------------
 
-   --  Note that locks of activator and activated task are both locked
-   --  here. This is necessary because C.State and Self.Wait_Count
-   --  have to be synchronized. This is safe from deadlock because
-   --  the activator is always created before the activated task.
-   --  That satisfies our in-order-of-creation ATCB locking policy.
+   --  Note that locks of activator and activated task are both locked here.
+   --  This is necessary because C.State and Self.Wait_Count have to be
+   --  synchronized. This is safe from deadlock because the activator is always
+   --  created before the activated task. That satisfies our
+   --  in-order-of-creation ATCB locking policy.
 
    procedure Activate_Restricted_Tasks
      (Chain_Access : Activation_Chain_Access)
@@ -241,14 +308,13 @@ package body System.Tasking.Restricted.Stages is
          Lock_RTS;
       end if;
 
-      --  Lock self, to prevent activated tasks
-      --  from racing ahead before we finish activating the chain.
+      --  Lock self, to prevent activated tasks from racing ahead before we
+      --  finish activating the chain.
 
       Write_Lock (Self_ID);
 
-      --  Activate all the tasks in the chain.
-      --  Creation of the thread of control was deferred until
-      --  activation. So create it now.
+      --  Activate all the tasks in the chain. Creation of the thread of
+      --  control was deferred until activation. So create it now.
 
       C := Chain_Access.T_ID;
 
@@ -286,9 +352,8 @@ package body System.Tasking.Restricted.Stages is
 
       Self_ID.Common.State := Activator_Sleep;
 
-      --  Wait for the activated tasks to complete activation.
-      --  It is unsafe to abort any of these tasks until the count goes to
-      --  zero.
+      --  Wait for the activated tasks to complete activation. It is unsafe to
+      --  abort any of these tasks until the count goes to zero.
 
       loop
          exit when Self_ID.Common.Wait_Count = 0;
@@ -302,7 +367,7 @@ package body System.Tasking.Restricted.Stages is
          Unlock_RTS;
       end if;
 
-      --  Remove the tasks from the chain.
+      --  Remove the tasks from the chain
 
       Chain_Access.T_ID := null;
    end Activate_Restricted_Tasks;
@@ -328,14 +393,13 @@ package body System.Tasking.Restricted.Stages is
       Write_Lock (Activator);
       Write_Lock (Self_ID);
 
-      --  Remove dangling reference to Activator,
-      --  since a task may outlive its activator.
+      --  Remove dangling reference to Activator, since a task may outlive its
+      --  activator.
 
       Self_ID.Common.Activator := null;
 
-      --  Wake up the activator, if it is waiting for a chain
-      --  of tasks to activate, and we are the last in the chain
-      --  to complete activation
+      --  Wake up the activator, if it is waiting for a chain of tasks to
+      --  activate, and we are the last in the chain to complete activation
 
       if Activator.Common.State = Activator_Sleep then
          Activator.Common.Wait_Count := Activator.Common.Wait_Count - 1;
@@ -352,9 +416,9 @@ package body System.Tasking.Restricted.Stages is
          Unlock_RTS;
       end if;
 
-      --  After the activation, active priority should be the same
-      --  as base priority. We must unlock the Activator first,
-      --  though, since it should not wait if we have lower priority.
+      --  After the activation, active priority should be the same as base
+      --  priority. We must unlock the Activator first, though, since it should
+      --  not wait if we have lower priority.
 
       if Get_Priority (Self_ID) /= Self_ID.Common.Base_Priority then
          Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
@@ -391,8 +455,8 @@ package body System.Tasking.Restricted.Stages is
       Success       : Boolean;
 
    begin
-      --  Stack is not preallocated on this target, so that
-      --  Stack_Address must be null.
+      --  Stack is not preallocated on this target, so that Stack_Address must
+      --  be null.
 
       pragma Assert (Stack_Address = Null_Address);
 
@@ -415,9 +479,9 @@ package body System.Tasking.Restricted.Stages is
         (Self_ID, State, Discriminants, Self_ID, Elaborated, Base_Priority,
          Task_Info, Size, Created_Task, Success);
 
-      --  If we do our job right then there should never be any failures,
-      --  which was probably said about the Titanic; so just to be safe,
-      --  let's retain this code for now
+      --  If we do our job right then there should never be any failures, which
+      --  was probably said about the Titanic; so just to be safe, let's retain
+      --  this code for now
 
       if not Success then
          Unlock (Self_ID);
@@ -468,6 +532,22 @@ package body System.Tasking.Restricted.Stages is
          Lock_RTS;
       end if;
 
+      --  Handle normal task termination by the environment task, but only for
+      --  the normal task termination. In the case of Abnormal and
+      --  Unhandled_Exception they must have been handled before, and the task
+      --  termination soft link must have been changed so the task termination
+      --  routine is not executed twice.
+
+      --  Note that in the "normal" implementation in s-tassta.adb the task
+      --  termination procedure for the environment task should be executed
+      --  after termination of library-level tasks. However, this
+      --  implementation is to be used when the Ravenscar restrictions are in
+      --  effect, and AI-394 says that if there is a fall-back handler set for
+      --  the partition it should be called when the first task (including the
+      --  environment task) attempts to terminate.
+
+      SSL.Task_Termination_Handler.all (Ada.Exceptions.Null_Occurrence);
+
       Write_Lock (Self_ID);
       Sleep (Self_ID, Master_Completion_Sleep);
       Unlock (Self_ID);
index 63b47e7..318e4bd 100644 (file)
@@ -323,7 +323,7 @@ package body System.Tasking.Initialization is
 
    procedure Final_Task_Unlock (Self_ID : Task_Id) is
    begin
-      pragma Assert (Self_ID.Global_Task_Lock_Nesting = 1);
+      pragma Assert (Self_ID.Common.Global_Task_Lock_Nesting = 1);
       Unlock (Global_Task_Lock'Access, Global_Lock => True);
    end Final_Task_Unlock;
 
@@ -624,9 +624,10 @@ package body System.Tasking.Initialization is
 
    procedure Task_Lock (Self_ID : Task_Id) is
    begin
-      Self_ID.Global_Task_Lock_Nesting := Self_ID.Global_Task_Lock_Nesting + 1;
+      Self_ID.Common.Global_Task_Lock_Nesting :=
+        Self_ID.Common.Global_Task_Lock_Nesting + 1;
 
-      if Self_ID.Global_Task_Lock_Nesting = 1 then
+      if Self_ID.Common.Global_Task_Lock_Nesting = 1 then
          Defer_Abort_Nestable (Self_ID);
          Write_Lock (Global_Task_Lock'Access, Global_Lock => True);
       end if;
@@ -654,10 +655,11 @@ package body System.Tasking.Initialization is
 
    procedure Task_Unlock (Self_ID : Task_Id) is
    begin
-      pragma Assert (Self_ID.Global_Task_Lock_Nesting > 0);
-      Self_ID.Global_Task_Lock_Nesting := Self_ID.Global_Task_Lock_Nesting - 1;
+      pragma Assert (Self_ID.Common.Global_Task_Lock_Nesting > 0);
+      Self_ID.Common.Global_Task_Lock_Nesting :=
+        Self_ID.Common.Global_Task_Lock_Nesting - 1;
 
-      if Self_ID.Global_Task_Lock_Nesting = 0 then
+      if Self_ID.Common.Global_Task_Lock_Nesting = 0 then
          Unlock (Global_Task_Lock'Access, Global_Lock => True);
          Undefer_Abort_Nestable (Self_ID);
       end if;
index fd76b57..6c0ef7a 100644 (file)
@@ -107,6 +107,9 @@ package body System.Tasking is
       T.Common.Elaborated := Elaborated;
       T.Common.Activation_Failed := False;
       T.Common.Task_Info := Task_Info;
+      T.Common.Global_Task_Lock_Nesting := 0;
+      T.Common.Fall_Back_Handler := null;
+      T.Common.Specific_Handler  := null;
 
       if T.Common.Parent = null then
          --  For the environment task, the adjusted stack size is
index e979b7a..da8b800 100644 (file)
@@ -37,7 +37,8 @@
 --  Any changes to this interface may require corresponding compiler changes.
 
 with Ada.Exceptions;
---  Used for:  Exception_Id
+--  Used for Exception_Id
+--           Exception_Occurrence
 
 with System.Parameters;
 --  used for Size_Type
@@ -51,6 +52,9 @@ with System.Soft_Links;
 with System.Task_Primitives;
 --  used for Private_Data
 
+with System.Stack_Usage;
+--  used for Stack_Analyzer
+
 with Unchecked_Conversion;
 
 package System.Tasking is
@@ -329,6 +333,32 @@ package System.Tasking is
    end record;
    pragma Suppress_Initialization (Restricted_Entry_Call_Record);
 
+   -------------------------------------------
+   -- Task termination procedure definition --
+   -------------------------------------------
+
+   --  We need to redefine here these types (already defined in
+   --  Ada.Task_Termination) for avoiding circular dependencies.
+
+   type Cause_Of_Termination is (Normal, Abnormal, Unhandled_Exception);
+   --  Possible causes for task termination:
+   --
+   --    Normal means that the task terminates due to completing the
+   --    last sentence of its body, or as a result of waiting on a
+   --    terminate alternative.
+
+   --    Abnormal means that the task terminates because it is being aborted
+
+   --    handled_Exception means that the task terminates because of exception
+   --    raised by by the execution of its task_body.
+
+   type Termination_Handler is access protected procedure
+     (Cause : in Cause_Of_Termination;
+      T     : in Task_Id;
+      X     : in Ada.Exceptions.Exception_Occurrence);
+   --  Used to represent protected procedures to be executed when task
+   --  terminates.
+
    ------------------------------------
    -- Task related other definitions --
    ------------------------------------
@@ -539,6 +569,32 @@ package System.Tasking is
       Task_Info : System.Task_Info.Task_Info_Type;
       --  System-specific attributes of the task as specified by the
       --  Task_Info pragma.
+
+      Analyzer  : System.Stack_Usage.Stack_Analyzer;
+      --  For storing informations used to measure the stack usage.
+
+      Global_Task_Lock_Nesting : Natural;
+      --  This is the current nesting level of calls to
+      --  System.Tasking.Initialization.Lock_Task. This allows a task to call
+      --  Lock_Task multiple times without deadlocking. A task only locks
+      --  Global_Task_Lock when its Global_Task_Lock_Nesting goes from 0 to 1,
+      --  and only unlocked when it goes from 1 to 0.
+      --
+      --  Protection: Only accessed by Self
+
+      Fall_Back_Handler : Termination_Handler;
+      pragma Atomic (Fall_Back_Handler);
+      --  This is the fall-back handler that applies to the dependent tasks of
+      --  the task.
+      --
+      --  Protection: atomic access
+
+      Specific_Handler : Termination_Handler;
+      pragma Atomic (Specific_Handler);
+      --  This is the specific handler that applies only to this task, and not
+      --  any of its dependent tasks.
+      --
+      --  Protection: atomic access
    end record;
 
    ---------------------------------------
@@ -796,15 +852,6 @@ package System.Tasking is
       --
       --  Protection: Self.L
 
-      Global_Task_Lock_Nesting : Natural := 0;
-      --  This is the current nesting level of calls to
-      --  System.Tasking.Stages.Lock_Task_T. This allows a task to call
-      --  Lock_Task_T multiple times without deadlocking. A task only locks
-      --  All_Task_Lock when its All_Tasks_Nesting goes from 0 to 1, and only
-      --  unlocked when it goes from 1 to 0.
-      --
-      --  Protection: Only accessed by Self
-
       Open_Accepts : Accept_List_Access;
       --  This points to the Open_Accepts array of accept alternatives passed
       --  to the RTS by the compiler-generated code to Selective_Wait. It is
index 54f92eb..4ceea41 100644 (file)
@@ -68,7 +68,7 @@ with System.Soft_Links;
 --  specific data. In the absence of tasking, these routines refer to global
 --  data. In the presense of tasking, they must be replaced with pointers to
 --  task-specific versions. Also used for Create_TSD, Destroy_TSD,
---  Get_Current_Excep
+--  Get_Current_Excep, Finalize_Global_List, Task_Termination, Handler.
 
 with System.Tasking.Initialization;
 --  Used for Remove_From_All_Tasks_List
@@ -84,6 +84,7 @@ pragma Elaborate_All (System.Tasking.Initialization);
 with System.Tasking.Utilities;
 --  Used for Make_Passive
 --           Abort_One_Task
+--           Abort_Tasks
 
 with System.Tasking.Queuing;
 --  Used for Dequeue_Head
@@ -94,9 +95,6 @@ with System.Tasking.Rendezvous;
 with System.OS_Primitives;
 --  Used for Delay_Modes
 
-with System.Finalization_Implementation;
---  Used for System.Finalization_Implementation.Finalize_Global_List
-
 with System.Secondary_Stack;
 --  Used for SS_Init
 
@@ -115,6 +113,8 @@ with System.Traces.Tasking;
 with Unchecked_Deallocation;
 --  To recover from failure of ATCB initialization
 
+with System.Stack_Usage;
+
 package body System.Tasking.Stages is
 
    package STPO renames System.Task_Primitives.Operations;
@@ -232,17 +232,6 @@ package body System.Tasking.Stages is
 
    procedure Abort_Tasks (Tasks : Task_List) is
    begin
-      --  If pragma Detect_Blocking is active then Program_Error must be
-      --  raised if this potentially blocking operation is called from a
-      --  protected action.
-
-      if System.Tasking.Detect_Blocking
-        and then STPO.Self.Common.Protected_Action_Nesting > 0
-      then
-         Ada.Exceptions.Raise_Exception
-           (Program_Error'Identity, "potentially blocking operation");
-      end if;
-
       Utilities.Abort_Tasks (Tasks);
    end Abort_Tasks;
 
@@ -826,7 +815,19 @@ package body System.Tasking.Stages is
 
       Vulnerable_Complete_Task (Self_ID);
 
-      System.Finalization_Implementation.Finalize_Global_List;
+      --  Handle normal task termination by the environment task, but only
+      --  for the normal task termination. In the case of Abnormal and
+      --  Unhandled_Exception they must have been handled before, and the
+      --  task termination soft link must have been changed so the task
+      --  termination routine is not executed twice.
+
+      SSL.Task_Termination_Handler.all (Ada.Exceptions.Null_Occurrence);
+
+      --  Finalize the global list for controlled objects if needed
+
+      SSL.Finalize_Global_List.all;
+
+      --  Reset the soft links to non-tasking
 
       SSL.Abort_Defer        := SSL.Abort_Defer_NT'Access;
       SSL.Abort_Undefer      := SSL.Abort_Undefer_NT'Access;
@@ -890,14 +891,32 @@ package body System.Tasking.Stages is
       use type System.Parameters.Size_Type;
       use type SSE.Storage_Offset;
       use System.Standard_Library;
+      use System.Stack_Usage;
+
+      Bottom_Of_Stack : aliased Integer;
+
+      Secondary_Stack_Size :
+        constant SSE.Storage_Offset :=
+          Self_ID.Common.Compiler_Data.Pri_Stack_Info.Size *
+          SSE.Storage_Offset (Parameters.Sec_Stack_Ratio) / 100;
 
       Secondary_Stack :
         aliased SSE.Storage_Array
-          (1 .. Self_ID.Common.Compiler_Data.Pri_Stack_Info.Size *
-                  SSE.Storage_Offset (Parameters.Sec_Stack_Ratio) / 100);
+           (1 .. Secondary_Stack_Size);
 
+      pragma Warnings (Off);
       Secondary_Stack_Address : System.Address := Secondary_Stack'Address;
 
+      Overflow_Guard          : constant := 16#1_000#;
+
+      Size :
+        Natural := Natural (Self_ID.Common.Compiler_Data.Pri_Stack_Info.Size);
+
+      pragma Warnings (On);
+      --  Address of secondary stack. In the fixed secondary stack case, this
+      --  value is not modified, causing a warning, hence the bracketing with
+      --  Warnings (Off/On).
+
       SEH_Table : aliased SSE.Storage_Array (1 .. 8);
       --  Structured Exception Registration table (2 words)
 
@@ -905,6 +924,43 @@ package body System.Tasking.Stages is
       pragma Import (C, Install_SEH_Handler, "__gnat_install_SEH_handler");
       --  Install the SEH (Structured Exception Handling) handler
 
+      Cause : Cause_Of_Termination := Normal;
+      --  Indicates the reason why this task terminates. Normal corresponds to
+      --  a task terminating due to completing the last statement of its body,
+      --  or as a result of waiting on a terminate alternative. If the task
+      --  terminates because it is being aborted then Cause will be set to
+      --  Abnormal. If the task terminates because of an exception raised by
+      --  the execution of its task body, then Cause is set to
+      --  Unhandled_Exception.
+
+      EO : Exception_Occurrence;
+      --  If the task terminates because of an exception raised by the
+      --  execution of its task body, then EO will contain the associated
+      --  exception occurrence. Otherwise, it will contain Null_Occurrence.
+
+      procedure Search_Fall_Back_Handler (ID : Task_Id);
+      --  Procedure that searches recursively a fall-back handler through the
+      --  master relationship.
+
+      procedure Search_Fall_Back_Handler (ID : Task_Id) is
+      begin
+         --  If there is a fall back handler, execute it
+
+         if ID.Common.Fall_Back_Handler /= null then
+            ID.Common.Fall_Back_Handler.all (Cause, Self_ID, EO);
+
+         --  Otherwise look for a fall back handler in the parent
+
+         elsif ID.Common.Parent /= null then
+            Search_Fall_Back_Handler (ID.Common.Parent);
+
+         --  Otherwise, do nothing
+
+         else
+            return;
+         end if;
+      end Search_Fall_Back_Handler;
+
    begin
       pragma Assert (Self_ID.Deferral_Level = 1);
 
@@ -912,10 +968,24 @@ package body System.Tasking.Stages is
          Self_ID.Common.Compiler_Data.Sec_Stack_Addr :=
            Secondary_Stack'Address;
          SST.SS_Init (Secondary_Stack_Address, Integer (Secondary_Stack'Last));
+         Size := Size - Natural (Secondary_Stack_Size);
+      end if;
+
+      Size := Size - Overflow_Guard;
+
+      if System.Stack_Usage.Is_Enabled then
+         STPO.Lock_RTS;
+         Initialize_Analyzer (Self_ID.Common.Analyzer,
+                              Self_ID.Common.Task_Image
+                                (1 .. Self_ID.Common.Task_Image_Len),
+                              Size,
+                              SSE.To_Integer (Bottom_Of_Stack'Address));
+         STPO.Unlock_RTS;
+         Fill_Stack (Self_ID.Common.Analyzer);
       end if;
 
-      --  Set the guard page at the bottom of the stack. The call to
-      --  unprotect the page is done in Terminate_Task
+      --  Set the guard page at the bottom of the stack. The call to unprotect
+      --  the page is done in Terminate_Task
 
       Stack_Guard (Self_ID, True);
 
@@ -930,9 +1000,13 @@ package body System.Tasking.Stages is
 
       Install_SEH_Handler (SEH_Table'Address);
 
-      --  We lock RTS_Lock to wait for activator to finish activating
-      --  the rest of the chain, so that everyone in the chain comes out
-      --  in priority order.
+      --  Initialize exception occurrence
+
+      Save_Occurrence (EO, Ada.Exceptions.Null_Occurrence);
+
+      --  We lock RTS_Lock to wait for activator to finish activating the rest
+      --  of the chain, so that everyone in the chain comes out in priority
+      --  order.
 
       --  This also protects the value of
       --    Self_ID.Common.Activator.Common.Wait_Count.
@@ -980,6 +1054,17 @@ package body System.Tasking.Stages is
          when Standard'Abort_Signal =>
             Initialization.Defer_Abort_Nestable (Self_ID);
 
+            --  Update the cause that motivated the task termination so that
+            --  the appropriate information is passed to the task termination
+            --  procedure. Task termination as a result of waiting on a
+            --  terminate alternative is a normal termination, although it is
+            --  implemented using the abort mechanisms.
+
+            if Self_ID.Terminate_Alternative then
+               Cause := Normal;
+            else
+               Cause := Abnormal;
+            end if;
          when others =>
             --  ??? Using an E : others here causes CD2C11A  to fail on
             --      DEC Unix, see 7925-005.
@@ -998,8 +1083,33 @@ package body System.Tasking.Stages is
             if Exception_Trace = Unhandled_Raise then
                Trace_Unhandled_Exception_In_Task (Self_ID);
             end if;
+
+            --  Update the cause that motivated the task termination so that
+            --  the appropriate information is passed to the task termination
+            --  procedure, as well as the associated Exception_Occurrence.
+
+            Cause := Unhandled_Exception;
+            Save_Occurrence (EO, SSL.Get_Current_Excep.all.all);
       end;
 
+      --  Look for a task termination handler. This code is for all tasks but
+      --  the environment task. The task termination code for the environment
+      --  task is executed by SSL.Task_Termination_Handler.
+
+      if Self_ID.Common.Specific_Handler /= null then
+         Self_ID.Common.Specific_Handler.all (Cause, Self_ID, EO);
+      else
+         --  Look for a fall-back handler following the master relationship
+         --  for the task.
+
+         Search_Fall_Back_Handler (Self_ID);
+      end if;
+
+      if System.Stack_Usage.Is_Enabled then
+         Compute_Result (Self_ID.Common.Analyzer);
+         Report_Result (Self_ID.Common.Analyzer);
+      end if;
+
       Terminate_Task (Self_ID);
    end Task_Wrapper;
 
@@ -1021,16 +1131,16 @@ package body System.Tasking.Stages is
    --  We can't call Destroy_TSD while we are holding any other locks, because
    --  it locks Global_Task_Lock, and our deadlock prevention rules require
    --  that to be the outermost lock. Our first "solution" was to just lock
-   --  Global_Task_Lock in addition to the other locks, and force the parent
-   --  to also lock this lock between its wakeup and its freeing of the ATCB.
-   --  See Complete_Task for the parent-side of the code that has the matching
+   --  Global_Task_Lock in addition to the other locks, and force the parent to
+   --  also lock this lock between its wakeup and its freeing of the ATCB. See
+   --  Complete_Task for the parent-side of the code that has the matching
    --  calls to Task_Lock and Task_Unlock. That was not really a solution,
    --  since the operation Task_Unlock continued to access the ATCB after
-   --  unlocking, after which the parent was observed to race ahead,
-   --  deallocate the ATCB, and then reallocate it to another task. The
-   --  call to Undefer_Abortion in Task_Unlock by the "terminated" task was
-   --  overwriting the data of the new task that reused the ATCB! To solve
-   --  this problem, we introduced the new operation Final_Task_Unlock.
+   --  unlocking, after which the parent was observed to race ahead, deallocate
+   --  the ATCB, and then reallocate it to another task. The call to
+   --  Undefer_Abortion in Task_Unlock by the "terminated" task was overwriting
+   --  the data of the new task that reused the ATCB! To solve this problem, we
+   --  introduced the new operation Final_Task_Unlock.
 
    procedure Terminate_Task (Self_ID : Task_Id) is
       Environment_Task : constant Task_Id := STPO.Environment_Task;
index 6721681..ee68ebc 100644 (file)
@@ -117,9 +117,6 @@ package body System.Tasking.Utilities is
    -- Abort_Tasks --
    -----------------
 
-   --  Compiler interface only: Do not call from within the RTS,
-
-   --  except in the implementation of Ada.Task_Identification.
    --  This must be called to implement the abort statement.
    --  Much of the actual work of the abort is done by the abortee,
    --  via the Abort_Handler signal handler, and propagation of the
@@ -131,6 +128,17 @@ package body System.Tasking.Utilities is
       P       : Task_Id;
 
    begin
+      --  If pragma Detect_Blocking is active then Program_Error must be
+      --  raised if this potentially blocking operation is called from a
+      --  protected action.
+
+      if System.Tasking.Detect_Blocking
+        and then Self_Id.Common.Protected_Action_Nesting > 0
+      then
+         Ada.Exceptions.Raise_Exception
+           (Program_Error'Identity, "potentially blocking operation");
+      end if;
+
       Initialization.Defer_Abort_Nestable (Self_Id);
 
       --  ?????
index f5beb05..43be4d0 100644 (file)
@@ -286,6 +286,18 @@ package body Switch.B is
             Scan_Nat (Switch_Chars, Max, Ptr, Time_Slice_Value, C);
             Time_Slice_Value := Time_Slice_Value * 1_000;
 
+         --  Processing for u switch
+
+         when 'u' =>
+            Ptr := Ptr + 1;
+            Dynamic_Stack_Measurement := True;
+            Scan_Nat
+              (Switch_Chars,
+               Max,
+               Ptr,
+               Dynamic_Stack_Measurement_Array_Size,
+               C);
+
          --  Processing for v switch
 
          when 'v' =>