https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11824
Richard Earnshaw <rearnsha at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |FIXED Target Milestone|--- |4.6.0 --- Comment #5 from Richard Earnshaw <rearnsha at gcc dot gnu.org> --- I'm not sure exactly when this was fixed, but certainly it was some time ago. At least, gcc-4.6 appears to implement this optimization at -Os. foo: @ Function supports interworking. @ args = 0, pretend = 0, frame = 8 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r0, r1, r2, lr} mov r3, #7 mov r2, #6 mov r0, sp add r1, sp, #4 stmia sp, {r2, r3} bl func ldmfd sp!, {r1, r2, r3, lr} bx lr