------------------------------------------------------------------------------ -- -- -- 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;