http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51500
--- Comment #13 from Kai Tietz <ktietz at gcc dot gnu.org> 2012-01-30 19:20:16 UTC --- Right the following sequence seems to be better IMHO: pop %eax push %ecx push %eax mov __ctx, %eax call fun pop %ecx mov %ecx, %(esp) ret