1------------------------------------------------------------------------------
2--                                                                          --
3--                         GNAT COMPILER COMPONENTS                         --
4--                                                                          --
5--                             G E T _ T A R G                              --
6--                                                                          --
7--                                 S p e c                                  --
8--                                                                          --
9--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
10--                                                                          --
11-- GNAT is free software;  you can  redistribute it  and/or modify it under --
12-- terms of the  GNU General Public License as published  by the Free Soft- --
13-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
14-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
15-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
17-- for  more details.  You should have  received  a copy of the GNU General --
18-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
19-- http://www.gnu.org/licenses for a complete copy of the license.          --
20--                                                                          --
21-- GNAT was originally developed  by the GNAT team at  New York University. --
22-- Extensive contributions were provided by Ada Core Technologies Inc.      --
23--                                                                          --
24------------------------------------------------------------------------------
25
26--  This package provides an Import to the C functions which provide
27--  values related to types on the target system. It is only needed for
28--  exp_dbug and the elaboration of ttypes, via the Set_Targs package.
29--  It also contains the routine for registering floating-point types.
30
31--  NOTE: Any changes in this package must be reflected in aa_getta.adb
32--  and any other version in the various back ends.
33
34--  Note that all these values return sizes of C types with corresponding
35--  names. This allows GNAT to define the corresponding Ada types to have
36--  the same representation. There is one exception to this general rule:
37--  the Wide_Character_Type uses twice the size of a C char, instead of the
38--  size of wchar_t.
39
40with Einfo; use Einfo;
41with Types; use Types;
42
43package Get_Targ is
44
45   --  Functions returning individual runtime values
46
47   function Get_Bits_Per_Unit              return Pos;
48   --  System.Storage_Unit
49
50   function Get_Bits_Per_Word              return Pos;
51   --  System.Word_Size
52
53   function Get_Char_Size                  return Pos;
54   --  Size of Standard.Character
55
56   function Get_Wchar_T_Size               return Pos;
57   --  Size of Interfaces.C.wchar_t
58
59   function Get_Short_Size                 return Pos;
60   --  Size of Standard.Short_Integer
61
62   function Get_Int_Size                   return Pos;
63   --  Size of Standard.Integer
64
65   function Get_Long_Size                  return Pos;
66   --  Size of Standard.Long_Integer
67
68   function Get_Long_Long_Size             return Pos;
69   --  Size of Standard.Long_Long_Integer
70
71   function Get_Float_Size                 return Pos;
72   --  Size of Standard.Float
73
74   function Get_Double_Size                return Pos;
75   --  Size of Standard.Long_Float
76
77   function Get_Long_Double_Size           return Pos;
78   --  Size of Standard.Long_Long_Float
79
80   function Get_Pointer_Size               return Pos;
81   --  Size of System.Address
82
83   function Get_Maximum_Alignment          return Pos;
84   --  Maximum supported alignment
85
86   function Get_Float_Words_BE             return Nat;
87   --  Non-zero iff float words big endian
88
89   function Get_Words_BE                   return Nat;
90   --  Non-zero iff integer words big endian
91
92   function Get_Bytes_BE                   return Nat;
93   --  Non-zero iff bytes big-endian
94
95   function Get_Bits_BE                    return Nat;
96   --  Non-zero iff bit order big endian
97
98   function Get_Strict_Alignment           return Nat;
99   --  Non-zero if target requires strict alignent
100
101   function Get_System_Allocator_Alignment return Nat;
102   --  Alignment guaranteed by malloc falls
103
104   function Get_Double_Float_Alignment     return Nat;
105   --  Alignment required for Long_Float or 0 if no special requirement
106
107   function Get_Double_Scalar_Alignment    return Nat;
108   --  Alignment required for Long_Long_Integer or larger integer types
109   --  or 0 if no special requirement.
110
111   function Get_Short_Enums                return Int;
112   --  Returns non-zero if we are in short enums mode, where foreign convention
113   --  (in particular C and C++) enumeration types will be sized as in Ada,
114   --  using the shortest possibility from 8,16,32 bits, signed or unsigned.
115   --  A zero value means Short_Enums are not in use, and in this case all
116   --  foreign convention enumeration types are given the same size as c int.
117
118   --  Other subprograms
119
120   function Get_Max_Unaligned_Field return Pos;
121   --  Returns the maximum supported size in bits for a field that is
122   --  not aligned on a storage unit boundary.
123
124   function Width_From_Size  (Size : Pos) return Pos;
125   function Digits_From_Size (Size : Pos) return Pos;
126   --  Calculate values for 'Width or 'Digits from 'Size
127
128   type C_String is array (0 .. 255) of aliased Character;
129   pragma Convention (C, C_String);
130
131   type Register_Type_Proc is access procedure
132     (C_Name    : C_String;       -- Nul-terminated string with name of type
133      Digs      : Natural;        -- Digits for floating point, 0 otherwise
134      Complex   : Boolean;        -- True iff type has real and imaginary parts
135      Count     : Natural;        -- Number of elements in vector, 0 otherwise
136      Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
137      Precision : Positive;       -- Precision of representation in bits
138      Size      : Positive;       -- Size of representation in bits
139      Alignment : Natural);       -- Required alignment in bits
140   pragma Convention (C, Register_Type_Proc);
141   --  Call back procedure for Register_Back_End_Types. This is to be used by
142   --  Create_Standard to create predefined types for all types supported by
143   --  the back end.
144
145   procedure Register_Back_End_Types (Call_Back : Register_Type_Proc);
146   --  Calls the Call_Back function with information for each supported type
147
148end Get_Targ;
149