summaryrefslogtreecommitdiff
path: root/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-03-11 04:07:00 +0000
committerUlrich Drepper <drepper@redhat.com>2003-03-11 04:07:00 +0000
commit2a544d82ce6d7214cf1f95a9b8b814ce40e97253 (patch)
tree565e32b0cafd4e38f05e99e842b170dbbdc279a2 /nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
parentec06436c5b64512d108f63d4d7c3456fced2d503 (diff)
Update.
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (__lll_mutex_lock_wait): Reverse order of first two parameters. (__lll_mutex_timedlock_wait): Likewise. (lll_mutex_lock): Adjust asm for that. (lll_mutex_timedlock): Likewise. Mark cx, cc, r10 as clobbered. (lll_lock): Adjust asm for operand order change. * sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S: New file. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevelmutex.S: New file.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h16
1 files changed, 8 insertions, 8 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
index fa472baeea..f7e9450a1a 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
@@ -42,10 +42,10 @@
/* Does not preserve %eax and %ecx. */
-extern int __lll_mutex_lock_wait (int val, int *__futex) attribute_hidden;
+extern int __lll_mutex_lock_wait (int *__futex, int __val) attribute_hidden;
/* Does not preserver %eax, %ecx, and %edx. */
-extern int __lll_mutex_timedlock_wait (int val, int *__futex,
- const struct timespec *abstime)
+extern int __lll_mutex_timedlock_wait (int *__futex, int __val,
+ const struct timespec *__abstime)
attribute_hidden;
/* Preserves all registers but %eax. */
extern int __lll_mutex_unlock_wait (int *__futex) attribute_hidden;
@@ -71,7 +71,7 @@ extern int __lll_mutex_unlock_wait (int *__futex) attribute_hidden;
"jmp 2f\n\t" \
".previous\n" \
"2:" \
- : "=D" (ignore1), "=&S" (ignore2), "=m" (futex) \
+ : "=S" (ignore1), "=&D" (ignore2), "=m" (futex) \
: "0" (1), "2" (futex) \
: "memory"); })
@@ -82,8 +82,8 @@ extern int __lll_mutex_unlock_wait (int *__futex) attribute_hidden;
"testl %0, %0\n\t" \
"jne 1f\n\t" \
".subsection 1\n" \
- "1:\tmovl %0, %%edi\n\t" \
- "leaq %4, %%rsi\n\t" \
+ "1:\tmovl %0, %%esi\n\t" \
+ "leaq %4, %%rdi\n\t" \
"movq %7, %%rdx\n\t" \
"call __lll_mutex_timedlock_wait\n\t" \
"jmp 2f\n\t" \
@@ -92,7 +92,7 @@ extern int __lll_mutex_unlock_wait (int *__futex) attribute_hidden;
: "=a" (result), "=&D" (ignore1), "=&S" (ignore2), \
"=&d" (ignore2), "=m" (futex) \
: "0" (1), "4" (futex), "m" (timeout) \
- : "memory"); \
+ : "memory", "cx", "cc", "r10"); \
result; })
@@ -157,7 +157,7 @@ extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
"jmp 2f\n\t" \
".previous\n" \
"2:" \
- : "=D" (ignore1), "=&S" (ignore2), "=m" (futex) \
+ : "=S" (ignore1), "=&D" (ignore2), "=m" (futex) \
: "0" (-1), "2" (futex) \
: "memory"); })