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=3.8 required=5.0 tests=BAYES_00,INVALID_MSGID, RATWARE_MS_HASH,RATWARE_OUTLOOK_NONAME autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,ffdd4d59cbfb4caf X-Google-Attributes: gid103376,public From: "David C. Hoos, Sr." Subject: Re: Ada 95 Numerics questions for the experts Date: 1997/08/27 Message-ID: <01bcb2f2$b512f700$928871a5@dhoos>#1/1 X-Deja-AN: 268621847 References: <3401C14B.480@gsfc.nasa.gov> Distribution: world X-Complaints-To: usenet@news.advicom.net X-Trace: polo.iquest.com 872703354 5371 (None) 165.113.136.146 Organization: ADViCOM -- Advanced Internet Communications Newsgroups: comp.lang.ada Date: 1997-08-27T00:00:00+00:00 List-Id: Just a couple of points, viz.: 1. The DEC Ada compiler for VAXen allowed biased rep clauses, as well. It's gratifying that gnat chose to implement this also. 2. The problem with your packed array example, however, is that what you are asking the compiler to do is to force array elements which are smaller than one byte to straddle byte boundaries. No compiler likes to do this, as far as I know. (Record components straddling byte boundaries, are another matter, and they are handled quite nicely without any ugly source code). Simply using pragma Pack instead of a "for 'size use 24" clause will result in your 8-element x 3-bit array occupying 32 bits, which is not bad at all. Undoubtedly, the extra code required to mask and shift the varying amounts as a function of the array index would substantially exceed the one byte of array size saved. Besides, even if the compiler did give you your 24-bit array, it would probably skip to the next 32-bit boundary for the next object in memory, anyway. Even gnat will not give you a 24-bit array for this case (at least the WinNT version 3.09). David C. Hoos, Sr. Jeff Creem wrote in article ... > In article , dewar@merv.cs.nyu.edu (Robert Dewar) wrote: > > >Jeff says > > > Even something like > > type My_Type is range 0 .. 7; > for My_Type'size use 3; > type My_Array is array(1 .. 8) of M > for My_Array'size use 24; > > > Is not allowed because the element size of My_Arary is less than 8 it > rounds to 8 for each element. This can be a real pain at times. While > I basically agree with the rational in the LRM for the minimum level of > support I think that if a compiler supports the systems programming annex that > rep specs like mine above should be required (of course I would think > that since it is something I wanted....I'm not biased :) > > The cool GNAT rep spec example that robert gave would also be nice but > probably not required. If a compiler does not support the rep specs > like in roberts example the code to work around it is pretty minor, if > it does not support component sizes less than 8 and you really need > them to interface to hardware, the code gets ugly very quickly and > often starts to look like ugly C code. > > > In any case GNAT handles everything I've ever wanted in a rep spec.. Too > bad there is not a supported vxWorks port.. > > Jeff >