+ * grab the function argument from the stack
+ */
+ "movl %3,%%eax\n\t"
+ /*
+ * Get %%esp 8-aligned, first saving the current value. This
+ * moves it down another zero or four bytes, depending on
+ * whether it was already aligned or not. This is a bit
+ * subtle -- we must not have a swizzled %esp at any place
+ * where we might refer to one of the %digit parameters to
+ * this piece of assembly code, since gcc may generate
+ * %esp-relative stack offsets which will then be wrong.
+ */
+ "movl %%esp, %6\n\t"
+ "subl $4, %%esp\n\t"
+ "andl $0xFFFFFFF8, %%esp\n\t"
+ /*
+ * And finally, jump to the function argument.