1 /* Copyright (C) 2003 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, write to the Free
16 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
20 #include "lowlevel-atomic.h"
24 #define SYS_gettimeofday __NR_gettimeofday
29 #define EWOULDBLOCK 11
34 .globl __lll_mutex_lock_wait
35 .type __lll_mutex_lock_wait,@function
36 .hidden __lll_mutex_lock_wait
38 __lll_mutex_lock_wait:
41 mov #0, r7 /* No timeout. */
44 add #1, r6 /* account for the preceeded xadd. */
58 .size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait
61 .globl __lll_mutex_timedlock_wait
62 .type __lll_mutex_timedlock_wait,@function
63 .hidden __lll_mutex_timedlock_wait
65 __lll_mutex_timedlock_wait:
66 /* Check for a valid timeout value. */
80 /* Stack frame for the timespec and timeval structs. */
84 /* Get current time. */
87 mov #SYS_gettimeofday, r3
91 /* Compute relative timeout. */
94 dmulu.l r0, r1 /* Micro seconds to nano seconds. */
108 bf 5f /* Time is already up. */
110 mov.l r2, @r15 /* Store relative timeout. */
137 /* Check whether the time expired. */
156 .size __lll_mutex_timedlock_wait,.-__lll_mutex_timedlock_wait
159 .globl __lll_mutex_unlock_wake
160 .type __lll_mutex_unlock_wake,@function
161 .hidden __lll_mutex_unlock_wake
163 __lll_mutex_unlock_wake:
165 mov #1, r6 /* Wake one thread. */
167 mov.l r7, @r4 /* Stores 0. */
174 .size __lll_mutex_unlock_wake,.-__lll_mutex_unlock_wake