https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67283
--- Comment #10 from Xavier Roche <roche at httrack dot com> --- The "Second test case" attached should produce exactly the same bytes (byte-to-byte) for the two demo_1 and demo_2 functions. And this would not rely on stack size that might change. With GCC 4.4.7: demo_2(): subq $72, %rsp movl $0, 32(%rsp) movq 32(%rsp), %rax movq $0, 48(%rsp) movq $0, 40(%rsp) movq $0, 8(%rsp) movq $0, 16(%rsp) movq %rax, (%rsp) call some_unknown_function(foo) addq $72, %rsp ret demo_1(): subq $72, %rsp movl $0, 32(%rsp) movq 32(%rsp), %rax movq $0, 48(%rsp) movq $0, 40(%rsp) movq $0, 8(%rsp) movq $0, 16(%rsp) movq %rax, (%rsp) call some_unknown_function(foo) addq $72, %rsp ret