Subject: Re: [PATCH] ixgbe: Introduce new 10GbE driver for Intel 82598 based PCI Express adapters...

From: Jeff Garzik <[email-masked]>
Date: Mon, 02 Jul 2007 10:25:49 -0400

Arjan van de Ven wrote:
>  >> +    u32 alloc_rx_buff_failed;
>>> +    struct {
>>> +        unsigned int rx_csum_enabled    :1;
>>> +        unsigned int msi_capable    :1;
>>> +        unsigned int msi_enabled    :1;
>>> +        unsigned int msix_capable    :1;
>>> +        unsigned int msix_enabled    :1;
>>> +        unsigned int imir_enabled    :1;
>>> +        unsigned int in_netpoll        :1;
>>> +    } flags;
>>
>> always avoid bitfields.  They generate horrible code, and endian 
>> problems abound (though no endian problems are apparent here).
> 
> they generate no worse code than open coding the checks for these 
> feature flags...

That would be the logical assumption, but reality does not bear that 
logic out to be true.

I'm not sure whether gcc is confused about ABI alignment or such, on 
various platforms, but every time I look at the asm generated it is 
/not/ equivalent to open-coded feature flags and bitwise logic.  Often 
it is demonstrably worse.

The same is true for icc too :)  Bitfields are just bad juju for 
compilers, I guess.

	Jeff