vserver 1.9.3
[linux-2.6.git] / include / asm-i386 / rwlock.h
index 291091d..b57cc7a 100644 (file)
 
 #define __build_read_lock_ptr(rw, helper)   \
        asm volatile(LOCK "subl $1,(%0)\n\t" \
-                    "js 2f\n" \
+                    "jns 1f\n" \
+                    "call " helper "\n\t" \
                     "1:\n" \
-                    LOCK_SECTION_START("") \
-                    "2:\tcall " helper "\n\t" \
-                    "jmp 1b\n" \
-                    LOCK_SECTION_END \
                     ::"a" (rw) : "memory")
 
 #define __build_read_lock_const(rw, helper)   \
        asm volatile(LOCK "subl $1,%0\n\t" \
-                    "js 2f\n" \
-                    "1:\n" \
-                    LOCK_SECTION_START("") \
-                    "2:\tpushl %%eax\n\t" \
+                    "jns 1f\n" \
+                    "pushl %%eax\n\t" \
                     "leal %0,%%eax\n\t" \
                     "call " helper "\n\t" \
                     "popl %%eax\n\t" \
-                    "jmp 1b\n" \
-                    LOCK_SECTION_END \
+                    "1:\n" \
                     :"=m" (*(volatile int *)rw) : : "memory")
 
 #define __build_read_lock(rw, helper)  do { \
 
 #define __build_write_lock_ptr(rw, helper) \
        asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
-                    "jnz 2f\n" \
+                    "jz 1f\n" \
+                    "call " helper "\n\t" \
                     "1:\n" \
-                    LOCK_SECTION_START("") \
-                    "2:\tcall " helper "\n\t" \
-                    "jmp 1b\n" \
-                    LOCK_SECTION_END \
                     ::"a" (rw) : "memory")
 
 #define __build_write_lock_const(rw, helper) \
        asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \
-                    "jnz 2f\n" \
-                    "1:\n" \
-                    LOCK_SECTION_START("") \
-                    "2:\tpushl %%eax\n\t" \
+                    "jz 1f\n" \
+                    "pushl %%eax\n\t" \
                     "leal %0,%%eax\n\t" \
                     "call " helper "\n\t" \
                     "popl %%eax\n\t" \
-                    "jmp 1b\n" \
-                    LOCK_SECTION_END \
+                    "1:\n" \
                     :"=m" (*(volatile int *)rw) : : "memory")
 
 #define __build_write_lock(rw, helper) do { \