From: awdorrin <awdorrin@gmail.com>
Subject: GNAT 4.4.5 Record Bit_Order Endian issues
Date: Mon, 14 Jan 2013 09:43:51 -0800 (PST)
Date: 2013-01-14T09:43:51-08:00 [thread overview]
Message-ID: <20bda3de-b033-4b4e-8298-2ac47701b814@googlegroups.com> (raw)
I have a record with specification definition that starts, using big endian notation, with:
for TRACK_RECORD_TYPE use
record
TRACK_ID at 0 range 0 .. 11;
TRACK_ID_CNT at 1 range 4 .. 9;
...
The meaning being that the first 12 bits hold a track id and the next 6 bits hold the Count value.
I have had success in the past, using the gnat 4.4.5 compiler under Debian 6.0.6, to use the directive: for TRACK_RECORD_TYPE'Bit_Order use System.High_Order_First;
In order to continue using the definition in the big endian notation.
From the build output, the Bit_Order flag at first appears to be processed correctly, with the built compiler flags displaying to translated little endian definition as:
for TRACK_RECORD_TYPE use
record
TRACK_ID at 0 range 4 .. 15;
TRACK_ID_CNT at 1 range 11 .. 6;
...
But the TRACK_ID_CNT range does not provide the proper definition.
I believe it should be: TRACK_ID_CNT at 1 range 5 .. 0
Using the following code:
TRK_REC.TRACK_ID := 1;
Text_IO.Put_Line("A: TRK_REC.TRACK_ID = " & Int32'Image(TRK_REC.TRACK_ID));
TRK_REC.TRACK_ID_CNT := 1;
Text_IO.Put_Line("B: TRK_REC.TRACK_ID = " & Int32'Image(TRK_REC.TRACK_ID));
The output displayed is:
A: TRK_REC.TRACK_ID = 1
B: TRK_REC.TRACK_ID = 1025
Apparently because the TRACK_ID field is being read as a 16-bit value where:
"0000 0100 0000 0001" -> "BBBB CCAA AAAA AAAA"
where the 'A' bits are the TRACK_ID and the B bits are part of the TRACK_ID_CNT field, and the 'C' bits are an overlap of the second variable, due to the improper definition translation.
Not sure if this 'bug' would be fixed in a newer version of the GNAT compiler or not.
next reply other threads:[~2013-01-14 17:43 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-14 17:43 awdorrin [this message]
2013-01-15 0:38 ` GNAT 4.4.5 Record Bit_Order Endian issues Randy Brukardt
2013-01-15 1:57 ` Adam Beneschan
2013-01-15 16:57 ` AdaMagica
2013-01-15 22:24 ` Stephen Leake
2013-01-16 10:44 ` Simon Wright
2013-01-16 19:00 ` AdaMagica
2013-01-16 21:34 ` Simon Wright
2013-01-16 23:14 ` Randy Brukardt
2013-01-17 3:49 ` Stephen Leake
2013-01-17 15:32 ` awdorrin
2013-01-18 9:49 ` Stephen Leake
2013-01-18 13:04 ` Robert A Duff
2013-01-19 1:43 ` Stephen Leake
2013-01-19 12:48 ` AdaMagica
2013-01-22 0:14 ` Randy Brukardt
2013-01-17 17:28 ` Simon Wright
2013-01-18 9:56 ` Stephen Leake
2013-01-17 18:04 ` awdorrin
2013-01-17 19:50 ` awdorrin
2013-01-18 9:58 ` Stephen Leake
2013-01-17 20:58 ` Simon Wright
2013-01-17 21:29 ` awdorrin
2013-01-17 22:16 ` awdorrin
2013-01-18 6:15 ` J-P. Rosen
2013-01-18 15:28 ` Niklas Holsti
2013-01-18 9:37 ` Stephen Leake
2013-01-18 12:24 ` awdorrin
2013-01-18 15:11 ` awdorrin
2013-01-19 1:48 ` Stephen Leake
2013-01-18 17:19 ` Simon Wright
2013-01-22 9:49 ` quinot
2013-01-28 13:39 ` quinot
-- strict thread matches above, loose matches on Subject: below --
2013-01-22 3:21 Stephen Leake
2013-01-22 5:14 ` Jeffrey Carter
2013-01-23 1:29 ` Stephen Leake
2013-01-22 22:40 ` Randy Brukardt
2013-01-23 1:38 ` Stephen Leake
2013-01-23 10:58 ` Simon Wright
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox