1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
-- { dg-do run }
with System;
with Ada.Unchecked_Conversion;
with Ada.Streams; use Ada.Streams;
with Ada.Text_IO;
procedure SSO1 is
type Unsigned_Integer_4 is mod 2 ** 32;
for Unsigned_Integer_4'Size use 32;
Default_Bit_Order_Pos : constant Natural := System.Bit_Order'Pos (System.Default_Bit_Order);
Opposite_Bit_Order_Pos : constant Natural := 1 - Default_Bit_Order_Pos;
Opposite_Bit_Order : constant System.Bit_Order := System.Bit_Order'Val (Opposite_Bit_Order_Pos);
type Rec is
record
X, Y : Unsigned_Integer_4;
end record;
for Rec'Bit_Order use System.Default_Bit_Order;
for Rec'Scalar_Storage_Order use System.Default_Bit_Order;
for Rec use
record
X at 0 * 4 range 0 .. 31;
Y at 1 * 4 range 0 .. 31;
end record;
type Nested_Rec is
record
I : Unsigned_Integer_4;
R : Rec;
J : Unsigned_Integer_4;
end record;
for Nested_Rec use
record
I at 0 * 4 range 0 .. 31;
R at 1 * 4 range 0 .. 63;
J at 3 * 4 range 0 .. 31;
end record;
for Nested_Rec'Bit_Order use Opposite_Bit_Order;
for Nested_Rec'Scalar_Storage_Order use Opposite_Bit_Order;
Nr : Nested_Rec
:= (I => 1,
R => (X => 1,
Y => 1),
J => 1);
subtype Nested_Rec_As_Stream is Ada.Streams.Stream_Element_Array (1 ..16);
function To_Stream is
new Ada.Unchecked_Conversion (Nested_Rec, Nested_Rec_As_Stream);
Nr_Stream : constant Nested_Rec_As_Stream := To_Stream (Nr);
Expected : constant array (System.Bit_Order) of Nested_Rec_As_Stream :=
(System.Low_Order_First =>
(0, 0, 0, 1,
1, 0, 0, 0,
1, 0, 0, 0,
0, 0, 0, 1),
System.High_Order_First =>
(1, 0, 0, 0,
0, 0, 0, 1,
0, 0, 0, 1,
1, 0, 0, 0));
begin
if Nr_Stream /= Expected (System.Default_Bit_Order) then
raise Program_Error;
end if;
end;
|