1with Vect3_Pkg; 2 3package Vect3 is 4 5 -- Unconstrained array types are vectorizable, possibly with special 6 -- help for the programmer 7 type Varray is array (Vect3_Pkg.Index_Type range <>) of Long_Float; 8 for Varray'Alignment use 16; 9 10 function "+" (X, Y : Varray) return Varray; 11 procedure Add (X, Y : Varray; R : out Varray); 12 procedure Add (X, Y : not null access Varray; R : not null access Varray); 13 14 15 -- Constrained array types are vectorizable 16 type Sarray is array (Vect3_Pkg.Index_Type(1) .. Vect3_Pkg.Index_Type(4)) 17 of Long_Float; 18 for Sarray'Alignment use 16; 19 20 function "+" (X, Y : Sarray) return Sarray; 21 procedure Add (X, Y : Sarray; R : out Sarray); 22 procedure Add (X, Y : not null access Sarray; R : not null access Sarray); 23 24 25 type Darray1 is array (Vect3_Pkg.Index_Type(1) .. Vect3_Pkg.N) of Long_Float; 26 for Darray1'Alignment use 16; 27 28 function "+" (X, Y : Darray1) return Darray1; 29 procedure Add (X, Y : Darray1; R : out Darray1); 30 procedure Add (X, Y : not null access Darray1; R : not null access Darray1); 31 32 33 type Darray2 is array (Vect3_Pkg.K .. Vect3_Pkg.Index_Type(4)) of Long_Float; 34 for Darray2'Alignment use 16; 35 36 function "+" (X, Y : Darray2) return Darray2; 37 procedure Add (X, Y : Darray2; R : out Darray2); 38 procedure Add (X, Y : not null access Darray2; R : not null access Darray2); 39 40 41 type Darray3 is array (Vect3_Pkg.K .. Vect3_Pkg.N) of Long_Float; 42 for Darray3'Alignment use 16; 43 44 function "+" (X, Y : Darray3) return Darray3; 45 procedure Add (X, Y : Darray3; R : out Darray3); 46 procedure Add (X, Y : not null access Darray3; R : not null access Darray3); 47 48end Vect3; 49