diff options
author | Michael I. Bushnell <mib@gnu.org> | 1992-10-06 18:31:16 +0000 |
---|---|---|
committer | Michael I. Bushnell <mib@gnu.org> | 1992-10-06 18:31:16 +0000 |
commit | 964ab87456cf79f0f5787796c3e8917502d9f9d8 (patch) | |
tree | 8b51be116a45e60209dcd0490297594bd9b3c13d /libthreads/i386/lock.s | |
parent | c70cb4b79a12ceb9f6c460a833199cd1e37963b1 (diff) |
entered into RCS
Diffstat (limited to 'libthreads/i386/lock.s')
-rw-r--r-- | libthreads/i386/lock.s | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/libthreads/i386/lock.s b/libthreads/i386/lock.s new file mode 100644 index 00000000..e27fa7ff --- /dev/null +++ b/libthreads/i386/lock.s @@ -0,0 +1,70 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: lock.s,v $ + * Revision 2.5 91/05/14 17:57:20 mrt + * Correcting copyright + * + * Revision 2.4 91/05/08 13:36:15 dbg + * Unlock lock with a locked instruction (xchg). + * [91/03/20 dbg] + * + * Revision 2.3 91/02/14 14:20:18 mrt + * Changed to new Mach copyright + * [91/02/13 12:20:06 mrt] + * + * Revision 2.2 90/05/03 15:54:59 dbg + * Created. + * [90/02/05 dbg] + * + */ + +#include <i386/asm.h> + +/* + * boolean_t spin_try_lock(int *m) + */ +ENTRY(spin_try_lock) + movl 4(%esp),%ecx / point at mutex + movl $1,%eax / set locked value in acc + xchg %eax,(%ecx) / swap with mutex + / xchg with memory is automatically + / locked + xorl $1,%eax / 1 (locked) => FALSE + / 0 (locked) => TRUE + ret + +/* + * void spin_unlock(int *m) + */ +ENTRY(spin_unlock) + movl 4(%esp),%ecx / point at mutex + xorl %eax,%eax / set unlocked value in acc + xchg %eax,(%ecx) / swap with mutex + / xchg with memory is automatically + / locked + ret |