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-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,d2cba5965c7bfcd5 X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2002-03-03 08:40:40 PST Message-ID: <3C8251B8.60003@users.sf.net> From: Dave Poirier User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.8) Gecko/20020204 X-Accept-Language: en-us MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: 64bit access to an array of 8bit values References: <3C823A1A.6030006@users.sf.net> <0CFB5EECF8614F8D.52C8F36A468D2F14.3AD3D533D2B72FDB@lp.airnews.net> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Date: Sun, 03 Mar 2002 11:39:20 -0500 NNTP-Posting-Host: 65.94.42.23 X-Complaints-To: abuse@sympatico.ca X-Trace: news20.bellglobal.com 1015173560 65.94.42.23 (Sun, 03 Mar 2002 11:39:20 EST) NNTP-Posting-Date: Sun, 03 Mar 2002 11:39:20 EST Organization: Bell Sympatico Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!cyclone.bc.net!torn!webster!nf1.bellglobal.com!nf2.bellglobal.com!news20.bellglobal.com.POSTED!not-for-mail Xref: archiver1.google.com comp.lang.ada:20726 Date: 2002-03-03T11:39:20-05:00 List-Id: John R. Strohm wrote: > The short answer is that you can't do what you want to do. > > The Ada compiler is not required to allocate precisely one byte per array > element, and it probably didn't. Instead, it will probably allocate one > "word" per array element, because word access is probably faster than byte > access. > > Consider for a moment a processor like the TI 320C30 floating-point digital > signal processor. It provides a 32-bit word, but it does NOT provide any > direct mechanism for addressing individual bytes within the word. Location > N is 32 bits wide. Location N+1 is the next 32 bits. > > Consider for a moment the old Harris superminicomputers. They used a 24-bit > word. There is NOTHING the Ada compiler can do for you in that case, > because 32-bit and 64-bit access DOESN'T EXIST on that machine. > > I was told in school many years ago that there was also a German standard > architecture, that specified a 48-bit word, of which three bits were > reserved for type tagging. So you effectively had a 45-bit word that you > COULDN'T coerce to a different type without a lot of pain. > > The first easy answer is that you model your memory as an array of Bit64, > and do the necessary bitpicking to extract the Bit8, Bit16, and Bit32 values > yourself. If your machine doesn't support Bit64-like objects, then do it as > Bit32 and hack around the Bit64 access. > > The other easy answer is that you model your memory as an array of Bit8, and > then you build up your Bit16, Bit32, and Bit64 accesses by doing multiple > Bit8 fetches and stores. > > The UGLY answer is to create several procedures, MyPeek8, MyPoke8, MyPeek16, > MyPoke16, MyPeek32, ..., and then do assembly language interface to hide > your memory model under them. If you are a real glutton for punishment, > look at the Ada machine code insertion capability. Trust me: you DON'T want > to do this. (I had to do a VMEbus interface for a DSP board this way > several years ago. It worked, but it was NO FUN AT ALL.) hrm, thanks for the information here, I see now why it can't be done. I'll follow your tip and just make an array of 64bit values. Otherwise the cost of multiplication to reconstruct a 64bit or even 32bit value from individual 8bits elements is too great. Thanks again! :) EKS - Dave Poirier Ada95... where portability takes you in another dimension altogether!