|
@@ -30,8 +30,6 @@
|
|
|
}) \
|
|
|
)
|
|
|
|
|
|
-#if 1 /* defined __PIC__ || defined __pic__ */
|
|
|
-
|
|
|
/* This code avoids pushing/popping ebx as much as possible.
|
|
|
* I think the main reason was that older GCCs had problems
|
|
|
* with proper saving/restoring of ebx if "b" constraint was used,
|
|
@@ -126,56 +124,5 @@ __asm__ (
|
|
|
#define ASMFMT_6(arg1, arg2, arg3, arg4, arg5, arg6) \
|
|
|
, "a" (arg1), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5), "g" (arg6)
|
|
|
|
|
|
-#else /* !PIC */
|
|
|
-
|
|
|
-/* Simpler code which just uses "b" constraint to load ebx.
|
|
|
- * Seems to work with gc 4.2.x, and generates slightly smaller,
|
|
|
- * but slightly slower code. Example (time syscall):
|
|
|
- *
|
|
|
- * - 8b 4c 24 04 mov 0x4(%esp),%ecx
|
|
|
- * - 87 cb xchg %ecx,%ebx
|
|
|
- * + 53 push %ebx
|
|
|
- * + 8b 5c 24 08 mov 0x8(%esp),%ebx
|
|
|
- * b8 0d 00 00 00 mov $0xd,%eax
|
|
|
- * cd 80 int $0x80
|
|
|
- * - 87 cb xchg %ecx,%ebx
|
|
|
- * + 5b pop %ebx
|
|
|
- * c3 ret
|
|
|
- *
|
|
|
- * 2 bytes smaller, but uses stack via "push/pop ebx"
|
|
|
- */
|
|
|
-
|
|
|
-#define LOADARGS_0
|
|
|
-#define LOADARGS_1
|
|
|
-#define LOADARGS_2
|
|
|
-#define LOADARGS_3
|
|
|
-#define LOADARGS_4
|
|
|
-#define LOADARGS_5
|
|
|
-#define LOADARGS_6 "push %%ebp\n\t" "movl %7, %%ebp\n\t"
|
|
|
-
|
|
|
-#define RESTOREARGS_0
|
|
|
-#define RESTOREARGS_1
|
|
|
-#define RESTOREARGS_2
|
|
|
-#define RESTOREARGS_3
|
|
|
-#define RESTOREARGS_4
|
|
|
-#define RESTOREARGS_5
|
|
|
-#define RESTOREARGS_6 "pop %%ebp\n\t"
|
|
|
-
|
|
|
-#define ASMFMT_0()
|
|
|
-#define ASMFMT_1(arg1) \
|
|
|
- , "b" (arg1)
|
|
|
-#define ASMFMT_2(arg1, arg2) \
|
|
|
- , "b" (arg1), "c" (arg2)
|
|
|
-#define ASMFMT_3(arg1, arg2, arg3) \
|
|
|
- , "b" (arg1), "c" (arg2), "d" (arg3)
|
|
|
-#define ASMFMT_4(arg1, arg2, arg3, arg4) \
|
|
|
- , "b" (arg1), "c" (arg2), "d" (arg3), "S" (arg4)
|
|
|
-#define ASMFMT_5(arg1, arg2, arg3, arg4, arg5) \
|
|
|
- , "b" (arg1), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5)
|
|
|
-#define ASMFMT_6(arg1, arg2, arg3, arg4, arg5, arg6) \
|
|
|
- , "b" (arg1), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5), "m" (arg6)
|
|
|
-
|
|
|
-#endif /* !PIC */
|
|
|
-
|
|
|
#endif /* __ASSEMBLER__ */
|
|
|
#endif /* _BITS_SYSCALLS_H */
|