http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50329
Sebastian Huber <sebastian.hu...@embedded-brains.de> changed: What |Removed |Added ---------------------------------------------------------------------------- Attachment #25229|0 |1 is obsolete| | --- Comment #1 from Sebastian Huber <sebastian.hu...@embedded-brains.de> 2012-07-19 08:11:15 UTC --- Created attachment 27830 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27830 Sample code On GCC 4.7.1 20120614 the situation is even more worse: .file "test.c" .section ".text" .align 2 .globl a .type a, @function a: stwu 1,-536(1) li 9,0 stw 9,8(1) li 9,-128 stb 9,8(1) lwz 9,8(1) addi 1,1,536 stw 9,0(3) blr .size a, .-a .align 2 .globl b .type b, @function b: stwu 1,-544(1) mflr 0 li 4,0 li 5,516 stw 31,540(1) mr 31,3 addi 3,1,8 stw 0,548(1) bl memset li 9,-128 stb 9,8(1) lwz 9,8(1) stw 9,0(31) lwz 0,548(1) lwz 31,540(1) mtlr 0 addi 1,1,544 blr .size b, .-b .align 2 .globl c .type c, @function c: li 9,0 li 10,1 rlwimi 9,10,31,0,0 stw 9,0(3) blr .size c, .-c .ident "GCC: (GNU) 4.7.1 20120614 (RTEMS gcc-4.7.1-3.suse12.1/newlib-1.20.0-10.suse12.1)" Here we see additional store and load operations to assemble the structure value. The test case (c) is also sub-optimal since two instructions are sufficient to load a 32-bit constant.