proper bit fields in the D2 language?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Apr 27 13:09:20 PDT 2009


Mattias Holm wrote:
>> Bitfields in Phobos are defined portably: always populated from lsb to 
>> msb, the total size must be 8, 16, 32, or 64, and there is no hidden 
>> padding (you obtain padding with anonymous fields).
>>
>> Andrei
> 
> If this is the case, the bitfields are not portable and the behaviour is 
> the same as for GCC, except it is reversed.
> 
> The order should be:
> 
> LSByte to MSByte on little endian machines
> MSByte to LSByte on big endian machines
> 
> 
> This means that bitfields are defined in human readable order with 
> respect to the physical layout on the machine.
> 
> The point being:
> 
> struct {
>   uint a:4;
>   uint b:28;
> }
> 
> should give a structure:
>  _ _______
> |.|.......|
> 
> where each dot represents 4 bits. And this structure should be identical 
> if the data is moved between different systems, that is a TCP header 
> definition mapping into a byte stream, should be identical on both PPC 
> and x86. If the LSB to MSB ordering is used in phobos, then the 
> bitfields are as useful as the GCC bitfields, i.e. not at all.

Not at all is a tad extreme as I'm using them already. I see your point 
though. If you could submit a bug report, that would be great.


Andrei



More information about the Digitalmars-d mailing list