File: sso1.adb

package info (click to toggle)
gcc-arm-none-eabi 15%3A12.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 959,712 kB
  • sloc: cpp: 3,275,382; ansic: 2,061,766; ada: 840,956; f90: 208,513; makefile: 76,132; asm: 73,433; xml: 50,448; exp: 34,146; sh: 32,436; objc: 15,637; fortran: 14,012; python: 11,991; pascal: 6,787; awk: 4,779; perl: 3,054; yacc: 338; ml: 285; lex: 201; haskell: 122
file content (77 lines) | stat: -rw-r--r-- 2,010 bytes parent folder | download | duplicates (3)
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;