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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,8309f2bc055237c4 X-Google-Attributes: gid103376,public From: lutz@iks-jena.de (Lutz Donnerhacke) Subject: Re: Bit manipulation Date: 2000/11/13 Message-ID: #1/1 X-Deja-AN: 693112254 Distribution: world Content-Transfer-Encoding: 8bit References: <8u8v6n$b7o$1@nnrp1.deja.com> <2WTH$pdrCfOd@eisner.decus.org> <8ub6kt$6nd$1@nnrp1.deja.com> <8ubeq8$cgm$1@nnrp1.deja.com> <3A0D38E9.BB87D8CD@mindspring.com> <8uoq5g$of6$1@nnrp1.deja.com> <8up1j4$uqe$1@nnrp1.deja.com> Content-Type: text/plain; charset=ISO-8859-1 Organization: IKS GmbH Jena Mime-Version: 1.0 User-Agent: slrn/0.9.5.7 (UNIX) Newsgroups: comp.lang.ada Date: 2000-11-13T00:00:00+00:00 List-Id: * Robert Dewar wrote: > lutz@iks-jena.de (Lutz Donnerhacke) wrote: >> GNAT can not compile it. Bit_Order can not be set. > >That is incorrect, as of version 3.13, GNAT implements the capability of >setting Bit_Order in situations where this makes sense, including this >one. Great. I found the announcement (it was posted while I was unable to access any computer) >Not at all! Setting Bit_Order is quite valuable for some situations of >endian independence. You are just confused about the purpose and semantics >of this capability. The fact that it does not do what you want it to do >does not make it senseless! >A typical useful application is to specify the position of bits within a >single byte as 8 record componens in a manner that is endian-independent. This would ease one of my programming issues. Fine. >Not evan vaguely. Like many people you are confusing byte endianness with >bit order. I see your point. So word8 can only be used: with Ada.Unchecked_Conversion; with System; procedure endian is type word8 is mod 2**8; type word32 is mod 2**32; type composite is array (1..4) of word8; pragma Pack(composite); type lowrec is record val: composite; end record; type highrec is record val: composite; end record; for lowrec'Bit_Order use System.Low_Order_First; for highrec'Bit_Order use System.High_Order_First; function w32tohigh is new Ada.Unchecked_Conversion(word32, highrec); function lowtow32 is new Ada.Unchecked_Conversion(lowrec, word32); function h2l32 (h : word32) return word32 is hr : highrec := w32tohigh (h); lr : lowrec; begin lr.val(1) := hr.val(4); lr.val(2) := hr.val(3); lr.val(3) := hr.val(2); lr.val(4) := hr.val(1); return lowtow32 (lr); end h2l32; begin null; end endian; >I would recommend reading the section in my book on Microprocessors on >this subject which is at least an attempt to sort this out. Google did not came back with an URL. May I ask for a hint? >We do indeed! The Bit_Order attribute in Ada talks ONLY about numbering of >the bits, it does NOT provide a facility for reversing bits AT ALL! Yep. I read the passage, but was unable to understand it correctly. >So that is why you should read the documentation carefully. Norman Cohen >has also written a useful piece on Bit_Order, it is in one of the relevant >AI's. Perhaps someone can give the reference. URL? Google is very quite on this keywords, too. >One even has to wonder if the original questioner *really* wants to do >what he says he wants to do. In my experience, most people who want to >reverse bits, don't really want to, they are confused in the same way that >Lutz was confused into thinking that endianness switching involves >bit-reversal. >of course there are legitimate requirements for bit order swaps in the >communications area, but you have to wonder .... Can I use GNAT 3.13 to work with Token Ring MACs ;-)