]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/ada/interfac.ads
3psoccon.ads, [...]: Files added.
[thirdparty/gcc.git] / gcc / ada / interfac.ads
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT COMPILER COMPONENTS --
4 -- --
5 -- I N T E R F A C E S --
6 -- --
7 -- S p e c --
8 -- --
9 -- Copyright (C) 2002-2003 Free Software Foundation, Inc. --
10 -- --
11 -- This specification is derived from the Ada Reference Manual for use with --
12 -- GNAT. The copyright notice above, and the license provisions that follow --
13 -- apply solely to the implementation dependent additions to thie file. --
14 -- --
15 -- GNAT is free software; you can redistribute it and/or modify it under --
16 -- terms of the GNU General Public License as published by the Free Soft- --
17 -- ware Foundation; either version 2, or (at your option) any later ver- --
18 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
19 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
20 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
21 -- for more details. You should have received a copy of the GNU General --
22 -- Public License distributed with GNAT; see file COPYING. If not, write --
23 -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
24 -- MA 02111-1307, USA. --
25 -- --
26 -- As a special exception, if other files instantiate generics from this --
27 -- unit, or you link this unit with other files to produce an executable, --
28 -- this unit does not by itself cause the resulting executable to be --
29 -- covered by the GNU General Public License. This exception does not --
30 -- however invalidate any other reasons why the executable file might be --
31 -- covered by the GNU Public License. --
32 -- --
33 -- GNAT was originally developed by the GNAT team at New York University. --
34 -- Extensive contributions were provided by Ada Core Technologies Inc. --
35 -- --
36 ------------------------------------------------------------------------------
37
38 -- Assumes integer sizes of 8, 16, 32 and 64 are available, and that the
39 -- floating-point formats are IEEE compatible.
40
41 -- Note: There is a specialized version of this package for OpenVMS.
42
43 package Interfaces is
44 pragma Pure (Interfaces);
45
46 type Integer_8 is range -2 ** 7 .. 2 ** 7 - 1;
47 for Integer_8'Size use 8;
48
49 type Integer_16 is range -2 ** 15 .. 2 ** 15 - 1;
50 for Integer_16'Size use 16;
51
52 type Integer_32 is range -2 ** 31 .. 2 ** 31 - 1;
53 for Integer_32'Size use 32;
54
55 type Integer_64 is range -2 ** 63 .. 2 ** 63 - 1;
56 for Integer_64'Size use 64;
57
58 type Unsigned_8 is mod 2 ** 8;
59 for Unsigned_8'Size use 8;
60
61 type Unsigned_16 is mod 2 ** 16;
62 for Unsigned_16'Size use 16;
63
64 type Unsigned_32 is mod 2 ** 32;
65 for Unsigned_32'Size use 32;
66
67 type Unsigned_64 is mod 2 ** 64;
68 for Unsigned_64'Size use 64;
69
70 function Shift_Left
71 (Value : Unsigned_8;
72 Amount : Natural)
73 return Unsigned_8;
74
75 function Shift_Right
76 (Value : Unsigned_8;
77 Amount : Natural)
78 return Unsigned_8;
79
80 function Shift_Right_Arithmetic
81 (Value : Unsigned_8;
82 Amount : Natural)
83 return Unsigned_8;
84
85 function Rotate_Left
86 (Value : Unsigned_8;
87 Amount : Natural)
88 return Unsigned_8;
89
90 function Rotate_Right
91 (Value : Unsigned_8;
92 Amount : Natural)
93 return Unsigned_8;
94
95 function Shift_Left
96 (Value : Unsigned_16;
97 Amount : Natural)
98 return Unsigned_16;
99
100 function Shift_Right
101 (Value : Unsigned_16;
102 Amount : Natural)
103 return Unsigned_16;
104
105 function Shift_Right_Arithmetic
106 (Value : Unsigned_16;
107 Amount : Natural)
108 return Unsigned_16;
109
110 function Rotate_Left
111 (Value : Unsigned_16;
112 Amount : Natural)
113 return Unsigned_16;
114
115 function Rotate_Right
116 (Value : Unsigned_16;
117 Amount : Natural)
118 return Unsigned_16;
119
120 function Shift_Left
121 (Value : Unsigned_32;
122 Amount : Natural)
123 return Unsigned_32;
124
125 function Shift_Right
126 (Value : Unsigned_32;
127 Amount : Natural)
128 return Unsigned_32;
129
130 function Shift_Right_Arithmetic
131 (Value : Unsigned_32;
132 Amount : Natural)
133 return Unsigned_32;
134
135 function Rotate_Left
136 (Value : Unsigned_32;
137 Amount : Natural)
138 return Unsigned_32;
139
140 function Rotate_Right
141 (Value : Unsigned_32;
142 Amount : Natural)
143 return Unsigned_32;
144
145 function Shift_Left
146 (Value : Unsigned_64;
147 Amount : Natural)
148 return Unsigned_64;
149
150 function Shift_Right
151 (Value : Unsigned_64;
152 Amount : Natural)
153 return Unsigned_64;
154
155 function Shift_Right_Arithmetic
156 (Value : Unsigned_64;
157 Amount : Natural)
158 return Unsigned_64;
159
160 function Rotate_Left
161 (Value : Unsigned_64;
162 Amount : Natural)
163 return Unsigned_64;
164
165 function Rotate_Right
166 (Value : Unsigned_64;
167 Amount : Natural)
168 return Unsigned_64;
169
170 pragma Import (Intrinsic, Shift_Left);
171 pragma Import (Intrinsic, Shift_Right);
172 pragma Import (Intrinsic, Shift_Right_Arithmetic);
173 pragma Import (Intrinsic, Rotate_Left);
174 pragma Import (Intrinsic, Rotate_Right);
175
176 -- Floating point types. We assume that we are on an IEEE machine, and
177 -- that the types Short_Float and Long_Float in Standard refer to the
178 -- 32-bit short and 64-bit long IEEE forms. Furthermore, if there is
179 -- an extended float, we assume that it is available as Long_Long_Float.
180 -- Note: it is harmless, and explicitly permitted, to include additional
181 -- types in interfaces, so it is not wrong to have IEEE_Extended_Float
182 -- defined even if the extended format is not available.
183
184 type IEEE_Float_32 is new Short_Float;
185 type IEEE_Float_64 is new Long_Float;
186 type IEEE_Extended_Float is new Long_Long_Float;
187
188 end Interfaces;