https://gcc.gnu.org/bugzilla/show_bug.cgi?id=14418
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2006-10-22 21:08:49 |2021-7-19 --- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- -m32: pushl %esi pushl %ebx subl $16, %esp movl 28(%esp), %ebx movl 32(%esp), %esi leal (%ebx,%ebx), %eax pushl %eax call bar movl %esi, 36(%esp) movl %ebx, 32(%esp) addl $20, %esp popl %ebx popl %esi jmp quux -m32 -march=i686: subl $28, %esp movl %ebx, 20(%esp) movl 32(%esp), %ebx movl %esi, 24(%esp) movl 36(%esp), %esi leal (%ebx,%ebx), %eax movl %eax, (%esp) call bar movl %esi, 36(%esp) movl 24(%esp), %esi movl %ebx, 32(%esp) movl 20(%esp), %ebx addl $28, %esp jmp quux So in the non-i686 case, it is doing push/pop's do the same as the mov's.