1 ------------------------------------------------------------------------------
3 -- GNAT COMPILER COMPONENTS --
5 -- S Y S T E M . S T O R A G E _ E L E M E N T S --
9 -- This specification is adapted from the Ada Reference Manual for use with --
10 -- GNAT. In accordance with the copyright of that document, you can freely --
11 -- copy and modify this specification, provided that if you redistribute a --
12 -- modified version, any changes that you have made are clearly indicated. --
14 ------------------------------------------------------------------------------
16 -- Warning: declarations in this package are ambiguous with respect to the
17 -- extra declarations that can be introduced into System using Extend_System.
18 -- It is a good idea to avoid use clauses for this package!
20 pragma Warnings (Off);
21 -- This is to stop bootstrap problems with the use of Inline_Always
22 -- To be removed (along with redundant Inline pragmas) in 3.13.
24 package System.Storage_Elements is
25 pragma Pure (Storage_Elements);
26 -- Note that we take advantage of the implementation permission to make
27 -- this unit Pure instead of Preelaborable; see RM 13.7.1(15).
29 type Storage_Offset is range
30 -(2 ** (Standard."-" (Standard'Address_Size, 1))) ..
31 +(2 ** (Standard."-" (Standard'Address_Size, 1))) - 1;
32 -- Note: the reason for the qualification of "-" here by Standard is
33 -- that we have a current bug in GNAT that otherwise causes a bogus
34 -- ambiguity when this unit is analyzed in an Rtsfind context.
36 subtype Storage_Count is Storage_Offset range 0 .. Storage_Offset'Last;
38 type Storage_Element is mod 2 ** Storage_Unit;
39 for Storage_Element'Size use Storage_Unit;
42 array (Storage_Offset range <>) of aliased Storage_Element;
43 for Storage_Array'Component_Size use Storage_Unit;
47 function "+" (Left : Address; Right : Storage_Offset) return Address;
48 pragma Convention (Intrinsic, "+");
50 pragma Inline_Always ("+");
52 function "+" (Left : Storage_Offset; Right : Address) return Address;
53 pragma Convention (Intrinsic, "+");
55 pragma Inline_Always ("+");
57 function "-" (Left : Address; Right : Storage_Offset) return Address;
58 pragma Convention (Intrinsic, "-");
60 pragma Inline_Always ("-");
62 function "-" (Left, Right : Address) return Storage_Offset;
63 pragma Convention (Intrinsic, "-");
65 pragma Inline_Always ("-");
69 Right : Storage_Offset)
70 return Storage_Offset;
71 pragma Convention (Intrinsic, "mod");
72 pragma Inline ("mod");
73 pragma Inline_Always ("mod");
75 -- Conversion to/from integers
77 type Integer_Address is mod Memory_Size;
79 function To_Address (Value : Integer_Address) return Address;
80 pragma Convention (Intrinsic, To_Address);
81 pragma Inline (To_Address);
82 pragma Inline_Always (To_Address);
84 function To_Integer (Value : Address) return Integer_Address;
85 pragma Convention (Intrinsic, To_Integer);
86 pragma Inline (To_Integer);
87 pragma Inline_Always (To_Integer);
89 end System.Storage_Elements;