Roman Zippel <[EMAIL PROTECTED]> writes: > This is taken from execute/20040709-1.c: > > struct K { unsigned int k : 6, l : 1, j : 10, i : 15; }; > struct K retmeK (struct K x) > { > return x; > } > > This produces the following code: > > retmeK: > link.w %fp,#0 > move.l %d3,-(%sp) > move.l %d2,-(%sp) > clr.l %d0 > move.l 8(%fp),%d1 > bfextu %d1{#7:#10},%d3 > bfextu %d1{#17:#15},%d2 > bfins %d2,%d0{#17:#15} > bfins %d3,%d0{#7:#10} > -> moveq #26,%d2 > lsr.l %d2,%d1 > bfins %d1,%d0{#0:#7} > move.l (%sp)+,%d2 > move.l (%sp)+,%d3 > unlk %fp > rts
The code generated by 4.3.0 20070122 still looks correct. > Even without this bug gcc usage of bitfield instruction has become a > little insane lately, e.g. 2.95/3.4 produce this code: > > retmeK: > link.w %a6,#0 > move.l 8(%a6),%d0 > unlk %a6 > rts FWIW, I get this very code with 4.3.0 20070122 when compiling without optimisation. Andreas. -- Andreas Schwab, SuSE Labs, [EMAIL PROTECTED] SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."