------------------------------------------------------------------------------ -- -- -- 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-2009, 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 3, 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. -- -- -- -- As a special exception under Section 7 of GPL version 3, you are granted -- -- additional permissions described in the GCC Runtime Library Exception, -- -- version 3.1, as published by the Free Software Foundation. -- -- -- -- You should have received a copy of the GNU General Public License and -- -- a copy of the GCC Runtime Library Exception along with this program; -- -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- -- . -- -- -- -- 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 accommodate 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;