From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,e49db73f947323a6 X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news3.google.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Bill Findlay Newsgroups: comp.lang.ada Subject: Re: GNAT for a PPC Mac OS X machine Date: Mon, 18 Apr 2011 16:46:38 +0100 Message-ID: References: <9133l8FtmtU1@mid.individual.net> Mime-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Trace: individual.net 3c8vGaoTb73Tvts3GPtxMQ2kPl4+pqtKcBtqgbSwaKQyhIghNr Cancel-Lock: sha1:GW981HWx5cgEsgRUh/W+gqmvzak= User-Agent: Microsoft-Entourage/12.28.0.101117 Thread-Topic: GNAT for a PPC Mac OS X machine Thread-Index: Acv9382nPpwavY2YvkCfUIaddm4Fvg== Xref: g2news2.google.com comp.lang.ada:19831 Date: 2011-04-18T16:46:38+01:00 List-Id: On 18/04/2011 16:28, in article 9133l8FtmtU1@mid.individual.net, "Niklas Holsti" 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;