comp.lang.ada
 help / color / mirror / Atom feed
From: Bill Findlay <yaldnif.w@blueyonder.co.uk>
Subject: Re: GNAT for a PPC Mac OS X machine
Date: Mon, 18 Apr 2011 16:46:38 +0100
Date: 2011-04-18T16:46:38+01:00	[thread overview]
Message-ID: <C9D21B6E.9939%yaldnif.w@blueyonder.co.uk> (raw)
In-Reply-To: 9133l8FtmtU1@mid.individual.net

On 18/04/2011 16:28, in article 9133l8FtmtU1@mid.individual.net, "Niklas
Holsti" <niklas.holsti@tidorum.invalid> wrote:

> Bill Findlay wrote:
> 
]>> The problem now is a portability issue.
>> 
>> I have the declarations:
>> 
>>    type word is mod 2**48;
>> 
>> ...
>> 
>>    type field_of_16_bits is mod 2**16;
>> 
>>    type Q_part is new field_of_16_bits;
>> 
>>    type Q_register is
>>       record
>>          C_part, I_part, M_part : Q_part;
>>       end record;
>>    for Q_register'Size use KDF9.word'Size;
>> 
>> And this is fine in Intel.  But on PPC, we get the error:
>> 
>>     92.    for Q_register'Size use word'Size;
>>                                         |
>>>>> size for "Q_register" too small, minimum allowed is 64
>> 
>> It's puzzling that the compiler refuses to give Q_register the size that it
>> happily gave to word.  (The aspect clause is there to support unchecked
>> conversions between the word and Q_register types.)
> 
> Bill, even if you get the Size clause to work, I hope your code does not
> rely on the Q_register components C_part, I_part, M_part being
> Unchecked_Converted to or from some well-known bit positions within the
> "word" value, as that would unportable.

I did not give the complete declaration, which is:

   type Q_register is
      record
         C_part, I_part, M_part : KDF9.Q_part;
      end record;
   for Q_register'Size use KDF9.word'Size;
   for Q_register'Bit_Order use Low_Order_First;
   for Q_register use
      record
         C_part at 0 range 32 .. 47;
         I_part at 0 range 16 .. 31;
         M_part at 0 range  0 .. 15;
      end record;

> If you only intend to use the "word" as an opaque container for a
> Q_register value, and never access the integer value of the whole "word"
> or particular bits of the "word", Unchecked_Conversion is ok.

Yes, but I need to make those integer properties OK as well.
I hoped that the declarations above would achieve this portably
(they work perfectly in the x86_64 and x86_32 versions).

> Otherwise it would be better to use shifting and masking operations to
> convert between the Q_register type and the word type; then you would
> know exactly which bits in the "word" contain which parts of the Q_register.

I hope to get the compiler to do that busy work for me. 8-)

> Apologies if my comment is obvious to you. No offence meant.

None taken. All comment is welcome.

-- 
Bill Findlay
with blueyonder.co.uk;
use  surname & forename;





  reply	other threads:[~2011-04-18 15:46 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-17 14:02 GNAT for a PPC Mac OS X machine Bill Findlay
2011-04-17 14:43 ` Simon Wright
2011-04-17 18:47   ` Bill Findlay
2011-04-18  1:50   ` Bill Findlay
2011-04-18  9:30     ` Simon Wright
2011-04-18 14:31       ` Bill Findlay
2011-04-18 15:28         ` Niklas Holsti
2011-04-18 15:46           ` Bill Findlay [this message]
2011-04-18 17:08             ` Niklas Holsti
2011-04-19  3:07               ` Bill Findlay
2011-04-18 15:52         ` Georg Bauhaus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox