diff options
| -rw-r--r-- | libc/sysdeps/linux/i386/bits/syscalls.h | 15 | 
1 files changed, 11 insertions, 4 deletions
| diff --git a/libc/sysdeps/linux/i386/bits/syscalls.h b/libc/sysdeps/linux/i386/bits/syscalls.h index 46c2d9962..a6e26d7ec 100644 --- a/libc/sysdeps/linux/i386/bits/syscalls.h +++ b/libc/sysdeps/linux/i386/bits/syscalls.h @@ -141,14 +141,21 @@ __asm__ (  #define RESTOREARGS_6  "pop %%ebp\n\t" RESTOREARGS_1  #define ASMFMT_0() +/* "acdSD" constraint would work too, but "SD" would use esi/edi and cause + * them to be pushed/popped by compiler, "a" would use eax and cause ebx + * to be saved/restored on stack, not in register. Narrowing choice down + * to "ecx or edx" results in smaller and faster code: */  #define ASMFMT_1(arg1) \ -	, "acdSD" (arg1) +	, "cd" (arg1) +/* Can use "adSD" constraint here: */  #define ASMFMT_2(arg1, arg2) \ -	, "adSD" (arg1), "c" (arg2) +	, "d" (arg1), "c" (arg2) +/* Can use "aSD" constraint here: */  #define ASMFMT_3(arg1, arg2, arg3) \ -	, "aSD" (arg1), "c" (arg2), "d" (arg3) +	, "a" (arg1), "c" (arg2), "d" (arg3) +/* Can use "aD" constraint here: */  #define ASMFMT_4(arg1, arg2, arg3, arg4) \ -	, "aD" (arg1), "c" (arg2), "d" (arg3), "S" (arg4) +	, "a" (arg1), "c" (arg2), "d" (arg3), "S" (arg4)  #define ASMFMT_5(arg1, arg2, arg3, arg4, arg5) \  	, "a" (arg1), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5)  #define ASMFMT_6(arg1, arg2, arg3, arg4, arg5, arg6) \ | 
