aboutsummaryrefslogtreecommitdiffstats
path: root/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/semaphore.c
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-03-12 00:15:31 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-03-12 00:15:31 +0000
commitee53d3b8685245febda44ac761877871ec4cd0f4 (patch)
tree67e5392c3f16c0716b3ca8356cd93cd244b58d4b /xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/semaphore.c
parent7c2ffc6c5043e0a49fbe1b81f9da465ec68a9e64 (diff)
downloadxen-ee53d3b8685245febda44ac761877871ec4cd0f4.tar.gz
xen-ee53d3b8685245febda44ac761877871ec4cd0f4.tar.bz2
xen-ee53d3b8685245febda44ac761877871ec4cd0f4.zip
bitkeeper revision 1.122.1.5 (3e6e7c23wQxW8Ugs0UKsqigrHkcXQg)
mkbuildtree: new file .del-hypervisor-ifs~86b59453fcfcbc0d: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/hypervisor-ifs .del-usercopy.c~a4e3819a4723317b: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/lib/usercopy.c .del-sys_i386.c~ad2d4399a2d28db9: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/sys_i386.c .del-strstr.c~a59de40cfa231931: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/lib/strstr.c .del-semaphore.c~e68c48eef7115b45: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/semaphore.c .del-pageattr.c~f12f3a2d4d9a5533: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/mm/pageattr.c .del-old-checksum.c~f071ac0bcd5b2d9a: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/lib/old-checksum.c .del-mmx.c~c322b85572d0e637: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/lib/mmx.c .del-memcpy.c~40a930c62e045f5: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/lib/memcpy.c .del-iodebug.c~23f7b78313546ddc: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/lib/iodebug.c .del-getuser.S~b9140bdb7786f6dc: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/lib/getuser.S .del-extable.c~d3064107fd4524e5: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/mm/extable.c .del-dec_and_lock.c~702a868529eefccf: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/lib/dec_and_lock.c .del-checksum.S~a821c465832e250c: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/lib/checksum.S .del-xor.h~998f147781a971b7: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/xor.h .del-vga.h~45c4f65abf0d3704: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/vga.h .del-user.h~dd2c2e4cf89a81: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/user.h .del-unistd.h~33920ed4177b943c: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/unistd.h .del-unaligned.h~535ed3d510980f67: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/unaligned.h .del-ucontext.h~217079ee95a5eb94: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/ucontext.h .del-uaccess.h~3681b94ef8d5a0f4: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/uaccess.h .del-types.h~c4fb05b781c9652c: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/types.h .del-tlb.h~6ad1bd639fc9d921: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/tlb.h .del-timex.h~51d9b0c83c732bcc: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/timex.h .del-termios.h~ccfbd8bcc37ae57d: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/termios.h .del-termbits.h~438385b2cd8fd6b0: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/termbits.h .del-string.h~673ad5d9e7f34adc: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/string.h .del-string-486.h~365fff788bc1adf5: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/string-486.h .del-statfs.h~65d9b1d7c4114f2e: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/statfs.h .del-stat.h~c1aa8136a8e00c11: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/stat.h .del-spinlock.h~ec9397b86265414c: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/spinlock.h .del-softirq.h~587d767979e60f4a: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/softirq.h .del-sockios.h~30f6e946644b28a4: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/sockios.h .del-socket.h~4b1ff6de54a2e75: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/socket.h .del-smplock.h~d5ea37028dfc0796: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/smplock.h .del-signal.h~bff6ca682e48d282: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/signal.h .del-siginfo.h~6e147c4b81453d48: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/siginfo.h .del-sigcontext.h~15a1460eea0fc80d: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/sigcontext.h .del-shmparam.h~97d1aa6d272dd55c: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/shmparam.h .del-shmbuf.h~d92a8c2e377edd83: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/shmbuf.h .del-setup.h~4250896c3e302c1d: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/setup.h .del-serial.h~584ec6aaea6b0efc: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/serial.h .del-sembuf.h~4fc6c36d718bc878: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/sembuf.h .del-semaphore.h~90a0e3df1d186e71: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/semaphore.h .del-ptrace.c~5c3f8d1f817aa462: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/ptrace.c .del-init_task.c~319ec38b798d3c7c: Delete: xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/init_task.c .del-scatterlist.h~1988430d982706fb: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/scatterlist.h .del-rwsem.h~548d272fd25fd023: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/rwsem.h .del-rwlock.h~75a3e9a0d5b70d88: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/rwlock.h .del-resource.h~4ac2e8ff9316f133: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/resource.h .del-posix_types.h~14d068cffd4b8776: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/posix_types.h .del-poll.h~15c1158844d735b: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/poll.h .del-parport.h~ce6ec6eea26a26f: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/parport.h .del-param.h~1fcb86dbbfaae433: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/param.h .del-namei.h~f25c9c58c76cddf4: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/namei.h .del-mtrr.h~375ef594799aeb34: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/mtrr.h .del-msr.h~cbf3b3e52c9bed91: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/msr.h .del-msgbuf.h~ab21bfe6a970c7d6: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/msgbuf.h .del-mpspec.h~9a3c3e9cda38bf43: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/mpspec.h .del-module.h~e271946131c6cf33: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/module.h .del-mmx.h~bc63c7c24adb85ea: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/mmx.h .del-mman.h~43ec3a0326f0d774: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/mman.h .del-mca_dma.h~a4e495084d965428: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/mca_dma.h .del-mc146818rtc.h~d7e968dbd77bc13a: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/mc146818rtc.h .del-math_emu.h~fba78190435e5abd: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/math_emu.h .del-locks.h~e022163a8c6f92: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/locks.h .del-linux_logo.h~2034953cfe415a: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/linux_logo.h .del-ldt.h~191ca1efbffba82a: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/ldt.h .del-kmap_types.h~517fab0f9758f3b: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/kmap_types.h .del-keyboard.h~b2a7fe4183f53eb0: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/keyboard.h .del-ipcbuf.h~cee91af271f4ead9: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/ipcbuf.h .del-ipc.h~f6063a09bec6a01e: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/ipc.h .del-ioctls.h~cc185671abf46a0a: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/ioctls.h .del-ioctl.h~8603eb7a7f9acbad: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/ioctl.h .del-io_apic.h~9f66b09afe289021: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/io_apic.h .del-init.h~9d30d474b845bc1: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/init.h .del-ide.h~805c47c1a5ebf196: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/ide.h .del-i387.h~3b360e96fea6fe7: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/i387.h .del-hdreg.h~c4bbd6ffab3763d6: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/hdreg.h .del-hardirq.h~9b375250fe601395: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/hardirq.h .del-floppy.h~d6f10807cbe15906: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/floppy.h .del-fcntl.h~ee3e644a21150dde: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/fcntl.h .del-errno.h~bab55cfe5c4ff883: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/errno.h .del-elf.h~af645629b45e7fe7: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/elf.h .del-dma.h~938dff3f930de2e4: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/dma.h .del-div64.h~aa6562c04bfaf412: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/div64.h .del-delay.h~e3ba89df403d5622: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/delay.h .del-debugreg.h~b3975b26e222b6c3: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/debugreg.h .del-current.h~800e8314ee81c074: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/current.h .del-cpufeature.h~89666e396b49acdd: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/cpufeature.h .del-checksum.h~82af6c19c8cc4ff3: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/checksum.h .del-cache.h~694ef1ffd8450db4: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/cache.h .del-byteorder.h~f14ceb3575444d8a: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/byteorder.h .del-boot.h~83206c92a8649e3f: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/boot.h .del-bitops.h~e3c609f48d6cdb91: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/bitops.h .del-atomic.h~328669154749bfad: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/atomic.h .del-apicdef.h~2f13a4cfaa79d855: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/apicdef.h .del-apic.h~2690e76edadb6a8: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/apic.h .del-a.out.h~b638f33fa82e889d: Delete: xenolinux-2.4.21-pre4-sparse/include/asm-xeno/a.out.h
Diffstat (limited to 'xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/semaphore.c')
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/semaphore.c291
1 files changed, 0 insertions, 291 deletions
diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/semaphore.c b/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/semaphore.c
deleted file mode 100644
index fd44981804..0000000000
--- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/semaphore.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * i386 semaphore implementation.
- *
- * (C) Copyright 1999 Linus Torvalds
- *
- * Portions Copyright 1999 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- *
- * rw semaphores implemented November 1999 by Benjamin LaHaise <bcrl@redhat.com>
- */
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <asm/semaphore.h>
-
-/*
- * Semaphores are implemented using a two-way counter:
- * The "count" variable is decremented for each process
- * that tries to acquire the semaphore, while the "sleeping"
- * variable is a count of such acquires.
- *
- * Notably, the inline "up()" and "down()" functions can
- * efficiently test if they need to do any extra work (up
- * needs to do something only if count was negative before
- * the increment operation.
- *
- * "sleeping" and the contention routine ordering is
- * protected by the semaphore spinlock.
- *
- * Note that these functions are only called when there is
- * contention on the lock, and as such all this is the
- * "non-critical" part of the whole semaphore business. The
- * critical part is the inline stuff in <asm/semaphore.h>
- * where we want to avoid any extra jumps and calls.
- */
-
-/*
- * Logic:
- * - only on a boundary condition do we need to care. When we go
- * from a negative count to a non-negative, we wake people up.
- * - when we go from a non-negative count to a negative do we
- * (a) synchronize with the "sleeper" count and (b) make sure
- * that we're on the wakeup list before we synchronize so that
- * we cannot lose wakeup events.
- */
-
-void __up(struct semaphore *sem)
-{
- wake_up(&sem->wait);
-}
-
-static spinlock_t semaphore_lock = SPIN_LOCK_UNLOCKED;
-
-void __down(struct semaphore * sem)
-{
- struct task_struct *tsk = current;
- DECLARE_WAITQUEUE(wait, tsk);
- tsk->state = TASK_UNINTERRUPTIBLE;
- add_wait_queue_exclusive(&sem->wait, &wait);
-
- spin_lock_irq(&semaphore_lock);
- sem->sleepers++;
- for (;;) {
- int sleepers = sem->sleepers;
-
- /*
- * Add "everybody else" into it. They aren't
- * playing, because we own the spinlock.
- */
- if (!atomic_add_negative(sleepers - 1, &sem->count)) {
- sem->sleepers = 0;
- break;
- }
- sem->sleepers = 1; /* us - see -1 above */
- spin_unlock_irq(&semaphore_lock);
-
- schedule();
- tsk->state = TASK_UNINTERRUPTIBLE;
- spin_lock_irq(&semaphore_lock);
- }
- spin_unlock_irq(&semaphore_lock);
- remove_wait_queue(&sem->wait, &wait);
- tsk->state = TASK_RUNNING;
- wake_up(&sem->wait);
-}
-
-int __down_interruptible(struct semaphore * sem)
-{
- int retval = 0;
- struct task_struct *tsk = current;
- DECLARE_WAITQUEUE(wait, tsk);
- tsk->state = TASK_INTERRUPTIBLE;
- add_wait_queue_exclusive(&sem->wait, &wait);
-
- spin_lock_irq(&semaphore_lock);
- sem->sleepers ++;
- for (;;) {
- int sleepers = sem->sleepers;
-
- /*
- * With signals pending, this turns into
- * the trylock failure case - we won't be
- * sleeping, and we* can't get the lock as
- * it has contention. Just correct the count
- * and exit.
- */
- if (signal_pending(current)) {
- retval = -EINTR;
- sem->sleepers = 0;
- atomic_add(sleepers, &sem->count);
- break;
- }
-
- /*
- * Add "everybody else" into it. They aren't
- * playing, because we own the spinlock. The
- * "-1" is because we're still hoping to get
- * the lock.
- */
- if (!atomic_add_negative(sleepers - 1, &sem->count)) {
- sem->sleepers = 0;
- break;
- }
- sem->sleepers = 1; /* us - see -1 above */
- spin_unlock_irq(&semaphore_lock);
-
- schedule();
- tsk->state = TASK_INTERRUPTIBLE;
- spin_lock_irq(&semaphore_lock);
- }
- spin_unlock_irq(&semaphore_lock);
- tsk->state = TASK_RUNNING;
- remove_wait_queue(&sem->wait, &wait);
- wake_up(&sem->wait);
- return retval;
-}
-
-/*
- * Trylock failed - make sure we correct for
- * having decremented the count.
- *
- * We could have done the trylock with a
- * single "cmpxchg" without failure cases,
- * but then it wouldn't work on a 386.
- */
-int __down_trylock(struct semaphore * sem)
-{
- int sleepers;
- unsigned long flags;
-
- spin_lock_irqsave(&semaphore_lock, flags);
- sleepers = sem->sleepers + 1;
- sem->sleepers = 0;
-
- /*
- * Add "everybody else" and us into it. They aren't
- * playing, because we own the spinlock.
- */
- if (!atomic_add_negative(sleepers, &sem->count))
- wake_up(&sem->wait);
-
- spin_unlock_irqrestore(&semaphore_lock, flags);
- return 1;
-}
-
-
-/*
- * The semaphore operations have a special calling sequence that
- * allow us to do a simpler in-line version of them. These routines
- * need to convert that sequence back into the C sequence when
- * there is contention on the semaphore.
- *
- * %ecx contains the semaphore pointer on entry. Save the C-clobbered
- * registers (%eax, %edx and %ecx) except %eax when used as a return
- * value..
- */
-asm(
-".text\n"
-".align 4\n"
-".globl __down_failed\n"
-"__down_failed:\n\t"
-#if defined(CONFIG_FRAME_POINTER)
- "pushl %ebp\n\t"
- "movl %esp,%ebp\n\t"
-#endif
- "pushl %eax\n\t"
- "pushl %edx\n\t"
- "pushl %ecx\n\t"
- "call __down\n\t"
- "popl %ecx\n\t"
- "popl %edx\n\t"
- "popl %eax\n\t"
-#if defined(CONFIG_FRAME_POINTER)
- "movl %ebp,%esp\n\t"
- "popl %ebp\n\t"
-#endif
- "ret"
-);
-
-asm(
-".text\n"
-".align 4\n"
-".globl __down_failed_interruptible\n"
-"__down_failed_interruptible:\n\t"
-#if defined(CONFIG_FRAME_POINTER)
- "pushl %ebp\n\t"
- "movl %esp,%ebp\n\t"
-#endif
- "pushl %edx\n\t"
- "pushl %ecx\n\t"
- "call __down_interruptible\n\t"
- "popl %ecx\n\t"
- "popl %edx\n\t"
-#if defined(CONFIG_FRAME_POINTER)
- "movl %ebp,%esp\n\t"
- "popl %ebp\n\t"
-#endif
- "ret"
-);
-
-asm(
-".text\n"
-".align 4\n"
-".globl __down_failed_trylock\n"
-"__down_failed_trylock:\n\t"
-#if defined(CONFIG_FRAME_POINTER)
- "pushl %ebp\n\t"
- "movl %esp,%ebp\n\t"
-#endif
- "pushl %edx\n\t"
- "pushl %ecx\n\t"
- "call __down_trylock\n\t"
- "popl %ecx\n\t"
- "popl %edx\n\t"
-#if defined(CONFIG_FRAME_POINTER)
- "movl %ebp,%esp\n\t"
- "popl %ebp\n\t"
-#endif
- "ret"
-);
-
-asm(
-".text\n"
-".align 4\n"
-".globl __up_wakeup\n"
-"__up_wakeup:\n\t"
- "pushl %eax\n\t"
- "pushl %edx\n\t"
- "pushl %ecx\n\t"
- "call __up\n\t"
- "popl %ecx\n\t"
- "popl %edx\n\t"
- "popl %eax\n\t"
- "ret"
-);
-
-/*
- * rw spinlock fallbacks
- */
-#if defined(CONFIG_SMP)
-asm(
-".text\n"
-".align 4\n"
-".globl __write_lock_failed\n"
-"__write_lock_failed:\n\t"
- LOCK "addl $" RW_LOCK_BIAS_STR ",(%eax)\n"
-"1: rep; nop\n\t"
- "cmpl $" RW_LOCK_BIAS_STR ",(%eax)\n\t"
- "jne 1b\n\t"
- LOCK "subl $" RW_LOCK_BIAS_STR ",(%eax)\n\t"
- "jnz __write_lock_failed\n\t"
- "ret"
-);
-
-asm(
-".text\n"
-".align 4\n"
-".globl __read_lock_failed\n"
-"__read_lock_failed:\n\t"
- LOCK "incl (%eax)\n"
-"1: rep; nop\n\t"
- "cmpl $1,(%eax)\n\t"
- "js 1b\n\t"
- LOCK "decl (%eax)\n\t"
- "js __read_lock_failed\n\t"
- "ret"
-);
-#endif