Hacker News new | ask | show | jobs
by sunfish 2140 days ago
The compiler is using push and pop here just for their side effect of adjusting the stack pointer, to keep the stack pointer 16-byte aligned.
2 comments

Shouldn't the C runtime do that before calling main?
It does; the stack pointer starts out aligned, but then the function does a call, and the call instruction adjusts the stack pointer by 8 bytes to push the return address, which would cause it to be misaligned. The push pushes an extra 8 bytes so that the stack pointer is aligned in the callee.
Any reason not to just do some other “increment stack pointer” option?
The instruction is smaller. Push rax is encoded into 1 bytes, while an increment stack pointer would be 4.