diff options
Diffstat (limited to 'gcc-4.9/gcc/ada/set_targ.ads')
-rwxr-xr-x | gcc-4.9/gcc/ada/set_targ.ads | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/ada/set_targ.ads b/gcc-4.9/gcc/ada/set_targ.ads new file mode 100755 index 000000000..d3ae3d838 --- /dev/null +++ b/gcc-4.9/gcc/ada/set_targ.ads @@ -0,0 +1,150 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S E T _ T A R G -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2013-2014, 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. 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 COPYING3. If not, go to -- +-- http://www.gnu.org/licenses for a complete copy of the license. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package handles setting target dependent parameters. If the -gnatet +-- switch is not set, then these values are taken from the back end (via the +-- routines in Get_Targ, and the enumerate_modes routine in misc.c). If the +-- switch is set, then the values are read from the target.atp file in the +-- current directory (usually written with the Write_Target_Dependent_Values +-- procedure defined in this package). + +-- Note that all these values return sizes of C types with corresponding +-- names. This allows GNAT to define the corresponding Ada types to have +-- the same representation. There is one exception: the representation +-- of Wide_Character_Type uses twice the size of a C char, instead of the +-- size of wchar_t, since this corresponds to expected Ada usage. + +with Einfo; use Einfo; +with Types; use Types; + +package Set_Targ is + + ----------------------------- + -- Target-Dependent Values -- + ----------------------------- + + -- The following is a table of target dependent values. In normal operation + -- these values are set by calling the appropriate C backend routines that + -- interface to back end routines that determine target characteristics. + + -- If the -gnateT switch is used, then any values that are read from the + -- file target.atp in the current directory overwrite values set from the + -- back end. This is used by tools other than the compiler, e.g. to do + -- semantic analysis of programs that will run on some other target than + -- the machine on which the tool is run. + + -- Note: fields marked with a question mark are boolean fields, where a + -- value of 0 is False, and a value of 1 is True. + + Bits_BE : Nat; -- Bits stored big-endian? + Bits_Per_Unit : Pos; -- Bits in a storage unit + Bits_Per_Word : Pos; -- Bits in a word + Bytes_BE : Nat; -- Bytes stored big-endian? + Char_Size : Pos; -- Standard.Character'Size + Double_Float_Alignment : Nat; -- Alignment of double float + Double_Scalar_Alignment : Nat; -- Alignment of double length scalar + Double_Size : Pos; -- Standard.Long_Float'Size + Float_Size : Pos; -- Standard.Float'Size + Float_Words_BE : Nat; -- Float words stored big-endian? + Int_Size : Pos; -- Standard.Integer'Size + Long_Double_Size : Pos; -- Standard.Long_Long_Float'Size + Long_Long_Size : Pos; -- Standard.Long_Long_Integer'Size + Long_Size : Pos; -- Standard.Long_Integer'Size + Maximum_Alignment : Pos; -- Maximum permitted alignment + Max_Unaligned_Field : Pos; -- Maximum size for unaligned bit field + Pointer_Size : Pos; -- System.Address'Size + Short_Enums : Nat; -- Foreign enums use short size? + Short_Size : Pos; -- Standard.Short_Integer'Size + Strict_Alignment : Nat; -- Strict alignment? + System_Allocator_Alignment : Nat; -- Alignment for malloc calls + Wchar_T_Size : Pos; -- Interfaces.C.wchar_t'Size + Words_BE : Nat; -- Words stored big-endian? + + ------------------------------------- + -- Registered Floating-Point Types -- + ------------------------------------- + + -- This table contains the list of modes supported by the back-end as + -- provided by the back end routine enumerate_modes in misc.c. Note that + -- we only store floating-point modes (see Register_Float_Type). + + type FPT_Mode_Entry is record + NAME : String_Ptr; -- Name of mode (no null character at end) + DIGS : Natural; -- Digits for floating-point type + FLOAT_REP : Float_Rep_Kind; -- Float representation + PRECISION : Natural; -- Precision in bits + SIZE : Natural; -- Size in bits + ALIGNMENT : Natural; -- Alignment in bits + end record; + + FPT_Mode_Table : array (1 .. 1000) of FPT_Mode_Entry; + Num_FPT_Modes : Natural := 0; + -- Table containing the supported modes and number of entries + + ----------------- + -- Subprograms -- + ----------------- + + procedure Write_Target_Dependent_Values; + -- This routine writes the file target.atp in the current directory with + -- the values of the global target parameters as listed above, and as set + -- by prior calls to Initialize/Read_Target_Dependent_Values. The format + -- of the target.atp file is as follows + -- + -- First come the values of the variables defined in this spec: + -- + -- One line per value + -- + -- name value + -- + -- where name is the name of the parameter, spelled out in full, + -- and cased as in the above list, and value is an unsigned decimal + -- integer. Two or more blanks separates the name from the value. + -- + -- All the variables must be present, in alphabetical order (i.e. the + -- same order as the declarations in this spec). + -- + -- Then there is a blank line to separate the two parts of the file. Then + -- come the lines showing the floating-point types to be registered. + -- + -- One line per registered mode + -- + -- name digs float_rep precision alignment + -- + -- where name is the string name of the type (which can have single + -- spaces embedded in the name (e.g. long double). The name is followed + -- by at least two blanks. The following fields are as described above + -- for a Mode_Entry (where float_rep is I/V/A for IEEE-754-Binary, + -- Vax_Native, AAMP), fields are separated by at least one blank, and + -- a LF character immediately follows the alignment field. + -- + -- ??? We do not write the size for backward compatibility reasons, + -- which means that target.atp will not be a complete description for + -- the very peculiar cases where the size cannot be computed from the + -- precision and the alignment by the formula: + -- + -- size := (precision + alignment - 1) / alignment * alignment + +end Set_Targ; |