.align 16
__pthread_rwlock_unlock:
pushl %ebx
- pushl %esi
pushl %edi
- movl 16(%esp), %edi
+ movl 12(%esp), %edi
/* Get the lock. */
movl $1, %eax
leal READERS_WAKEUP(%edi), %ebx
0: incl (%ebx)
- xorl %esi, %esi
- movl $SYS_futex, %eax
+ LOCK
+#if MUTEX == 0
+ decl (%edi)
+#else
+ decl MUTEX(%edi)
+#endif
+ jne 7f
+
+8: movl $SYS_futex, %eax
ENTER_KERNEL
+ xorl %eax, %eax
+ popl %edi
+ popl %ebx
+ ret
+
+ .align 16
6: LOCK
#if MUTEX == 0
decl (%edi)
4: xorl %eax, %eax
popl %edi
- popl %esi
popl %ebx
ret
call __lll_mutex_unlock_wake
jmp 4b
+7:
+#if MUTEX == 0
+ movl %edi, %eax
+#else
+ leal MUTEX(%edx), %eax
+#endif
+ call __lll_mutex_unlock_wake
+ jmp 8b
+
.size __pthread_rwlock_unlock,.-__pthread_rwlock_unlock
.globl pthread_rwlock_unlock