http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50325
--- Comment #25 from Iain Sandoe <iains at gcc dot gnu.org> 2011-12-01 11:08:28 UTC --- the following tried using the vendor's gcc-4.2: typedef struct { unsigned short flda:9; float b; unsigned int fldc:17; float d; unsigned long long flde:33; float f; } Struct; extern float __attribute__((noinline)) foo (Struct s); int main () { Struct q = {0x1fd, 1.0F, 0x1fffd, 2.0F, 0x1fffffffdLL, 3.0F}; /* Is layed out thus xx = space directives: 0xfe 0x80 xx xx 0x3F800000 0xff fe 80 xx 0x40000000 ff ff ff fe 80 xx xx xx 0x40400000 i.e. all ms aligned... */ /* It is passed in r3..r9 in 32 bit chunks with the same organization as memory - no shuffling at that stage. */ return (int) foo (q); }