--- //depot/vendor/freebsd/src/sys/alpha/include/atomic.h 2005/07/15 18:20:34 +++ //depot/projects/smpng/sys/alpha/include/atomic.h 2005/08/18 21:04:01 @@ -56,12 +56,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldl_l %0, %2\n\t" /* load old value */ - "bis %0, %3, %0\n\t" /* calculate new value */ + "1:\tldl_l %0, %1\n\t" /* load old value */ + "bis %0, %2, %0\n\t" /* calculate new value */ "stl_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ : "=&r" (temp), "=m" (*p) - : "m" (*p), "r" (v) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -76,8 +76,8 @@ "bic %0, %2, %0\n\t" /* calculate new value */ "stl_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -92,8 +92,8 @@ "addl %0, %2, %0\n\t" /* calculate new value */ "stl_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -108,8 +108,8 @@ "subl %0, %2, %0\n\t" /* calculate new value */ "stl_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -125,8 +125,8 @@ "ldiq %1,0\n\t" /* value to store */ "stl_c %1,%2\n\t" /* attempt to store */ "beq %1,1b\n" /* if the store failed, spin */ - : "=&r"(result), "=&r"(temp), "+m" (*addr) - : + : "=&r"(result), "=&r"(temp), "=m" (*addr) + : "m" (*addr) : "memory"); #endif @@ -143,8 +143,8 @@ "bis %0, %2, %0\n\t" /* calculate new value */ "stq_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -159,8 +159,8 @@ "bic %0, %2, %0\n\t" /* calculate new value */ "stq_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -175,8 +175,8 @@ "addq %0, %2, %0\n\t" /* calculate new value */ "stq_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -191,8 +191,8 @@ "subq %0, %2, %0\n\t" /* calculate new value */ "stq_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -208,8 +208,8 @@ "ldiq %1,0\n\t" /* value to store */ "stq_c %1,%2\n\t" /* attempt to store */ "beq %1,1b\n" /* if the store failed, spin */ - : "=&r"(result), "=&r"(temp), "+m" (*addr) - : + : "=&r"(result), "=&r"(temp), "=m" (*addr) + : "m" (*addr) : "memory"); #endif @@ -296,8 +296,8 @@ "stl_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n\t" /* if it failed, spin */ "2:\n" - : "=&r" (ret), "+m" (*p) - : "r" ((long)(int)cmpval), "r" (newval) + : "=&r" (ret), "=m" (*p) + : "r" ((long)(int)cmpval), "r" (newval), "m" (*p) : "memory"); #endif @@ -323,8 +323,8 @@ "stq_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n\t" /* if it failed, spin */ "2:\n" - : "=&r" (ret), "+m" (*p) - : "r" (cmpval), "r" (newval) + : "=&r" (ret), "=m" (*p) + : "r" (cmpval), "r" (newval), "m" (*p) : "memory"); #endif --- //depot/vendor/freebsd/src/sys/amd64/include/atomic.h 2005/08/18 14:40:47 +++ //depot/projects/smpng/sys/amd64/include/atomic.h 2005/08/18 21:04:01 @@ -99,8 +99,8 @@ atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ { \ __asm __volatile(__XSTRING(MPLOCKED) OP \ - : "+m" (*p) \ - : CONS (V)); \ + : "=m" (*p) \ + : CONS (V), "m" (*p)); \ } \ struct __hack @@ -119,15 +119,16 @@ __asm __volatile ( " " __XSTRING(MPLOCKED) " " - " cmpxchgl %1,%2 ; " + " cmpxchgl %2,%1 ; " " setz %%al ; " " movzbl %%al,%0 ; " "1: " "# atomic_cmpset_int" - : "+a" (res) /* 0 (result) */ - : "r" (src), /* 1 */ - "m" (*(dst)) /* 2 */ - : "memory"); + : "+a" (res), /* 0 (result) */ + "=m" (*dst) /* 1 */ + : "r" (src), /* 2 */ + "m" (*dst) /* 3 */ + : "memory"); return (res); } @@ -139,15 +140,16 @@ __asm __volatile ( " " __XSTRING(MPLOCKED) " " - " cmpxchgq %1,%2 ; " + " cmpxchgq %2,%1 ; " " setz %%al ; " " movzbq %%al,%0 ; " "1: " "# atomic_cmpset_long" - : "+a" (res) /* 0 (result) */ - : "r" (src), /* 1 */ - "m" (*(dst)) /* 2 */ - : "memory"); + : "+a" (res), /* 0 (result) */ + "=m" (*dst) /* 1 */ + : "r" (src), /* 2 */ + "m" (*dst) /* 3 */ + : "memory"); return (res); } @@ -185,8 +187,9 @@ \ __asm __volatile(__XSTRING(MPLOCKED) LOP \ : "=a" (res), /* 0 (result) */\ - "+m" (*p) /* 1 */ \ - : : "memory"); \ + "=m" (*p) /* 1 */ \ + : "m" (*p) /* 2 */ \ + : "memory"); \ \ return (res); \ } \ @@ -198,9 +201,9 @@ atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ { \ __asm __volatile(SOP \ - : "+m" (*p), /* 0 */ \ + : "=m" (*p), /* 0 */ \ "+r" (v) /* 1 */ \ - : : "memory"); \ + : "m" (*p)); /* 2 */ \ } \ struct __hack @@ -246,12 +249,13 @@ { u_int result; + result = 0; __asm __volatile ( - " xorl %0,%0 ; " " xchgl %1,%0 ; " "# atomic_readandclear_int" - : "=&r" (result) /* 0 (result) */ - : "m" (*addr)); /* 1 (addr) */ + : "+r" (result), /* 0 (result) */ + "=m" (*addr) /* 1 (addr) */ + : "m" (*addr)); return (result); } @@ -261,12 +265,13 @@ { u_long result; + result = 0; __asm __volatile ( - " xorq %0,%0 ; " " xchgq %1,%0 ; " "# atomic_readandclear_long" - : "=&r" (result) /* 0 (result) */ - : "m" (*addr)); /* 1 (addr) */ + : "+r" (result), /* 0 (result) */ + "=m" (*addr) /* 1 (addr) */ + : "m" (*addr)); return (result); } --- //depot/vendor/freebsd/src/sys/i386/include/atomic.h 2005/07/15 18:20:34 +++ //depot/projects/smpng/sys/i386/include/atomic.h 2005/08/18 21:04:01 @@ -98,8 +98,8 @@ atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ { \ __asm __volatile(__XSTRING(MPLOCKED) OP \ - : "+m" (*p) \ - : CONS (V)); \ + : "=m" (*p) \ + : CONS (V), "m" (*p)); \ } \ struct __hack @@ -123,15 +123,16 @@ " cli ; " " cmpl %0,%2 ; " " jne 1f ; " - " movl %1,%2 ; " + " movl %2,%1 ; " "1: " " sete %%al; " " movzbl %%al,%0 ; " " popfl ; " "# atomic_cmpset_int" - : "+a" (res) /* 0 (result) */ - : "r" (src), /* 1 */ - "m" (*(dst)) /* 2 */ + : "+a" (res), /* 0 (result) */ + "=m" (*dst) /* 1 */ + : "r" (src), /* 2 */ + "m" (*dst) /* 3 */ : "memory"); return (res); @@ -146,15 +147,16 @@ __asm __volatile ( " " __XSTRING(MPLOCKED) " " - " cmpxchgl %1,%2 ; " + " cmpxchgl %2,%1 ; " " setz %%al ; " " movzbl %%al,%0 ; " "1: " "# atomic_cmpset_int" - : "+a" (res) /* 0 (result) */ - : "r" (src), /* 1 */ - "m" (*(dst)) /* 2 */ - : "memory"); + : "+a" (res), /* 0 (result) */ + "=m" (*dst) /* 1 */ + : "r" (src), /* 2 */ + "m" (*dst) /* 3 */ + : "memory"); return (res); } @@ -194,8 +196,9 @@ \ __asm __volatile(__XSTRING(MPLOCKED) LOP \ : "=a" (res), /* 0 (result) */\ - "+m" (*p) /* 1 */ \ - : : "memory"); \ + "=m" (*p) /* 1 */ \ + : "m" (*p) /* 2 */ \ + : "memory"); \ \ return (res); \ } \ @@ -207,9 +210,9 @@ atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ { \ __asm __volatile(SOP \ - : "+m" (*p), /* 0 */ \ + : "=m" (*p), /* 0 */ \ "+r" (v) /* 1 */ \ - : : "memory"); \ + : "m" (*p)); /* 2 */ \ } \ struct __hack @@ -263,12 +266,13 @@ { u_int result; + result = 0; __asm __volatile ( - " xorl %0,%0 ; " " xchgl %1,%0 ; " "# atomic_readandclear_int" - : "=&r" (result) /* 0 (result) */ - : "m" (*addr)); /* 1 (addr) */ + : "+r" (result), /* 0 (result) */ + "=m" (*addr) /* 1 (addr) */ + : "m" (*addr)); return (result); } @@ -278,12 +282,13 @@ { u_long result; + result = 0; __asm __volatile ( - " xorl %0,%0 ; " " xchgl %1,%0 ; " "# atomic_readandclear_long" - : "=&r" (result) /* 0 (result) */ - : "m" (*addr)); /* 1 (addr) */ + : "+r" (result), /* 0 (result) */ + "=m" (*addr) /* 1 (addr) */ + : "m" (*addr)); return (result); } --- //depot/vendor/freebsd/src/sys/powerpc/include/atomic.h 2005/07/15 18:20:34 +++ //depot/projects/smpng/sys/powerpc/include/atomic.h 2005/08/18 21:04:01 @@ -63,8 +63,8 @@ "or %0, %3, %0\n\t" /* calculate new value */ "stwcx. %0, 0, %2\n\t" /* attempt to store */ "bne- 1b\n\t" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (p), "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (p), "r" (v), "m" (*p) : "cc", "memory"); #endif } @@ -80,8 +80,8 @@ "andc %0, %0, %3\n\t" /* calculate new value */ "stwcx. %0, 0, %2\n\t" /* attempt to store */ "bne- 1b\n\t" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (p), "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (p), "r" (v), "m" (*p) : "cc", "memory"); #endif } @@ -97,8 +97,8 @@ "add %0, %3, %0\n\t" /* calculate new value */ "stwcx. %0, 0, %2\n\t" /* attempt to store */ "bne- 1b\n\t" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (p), "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (p), "r" (v), "m" (*p) : "cc", "memory"); #endif } @@ -114,8 +114,8 @@ "subf %0, %3, %0\n\t" /* calculate new value */ "stwcx. %0, 0, %2\n\t" /* attempt to store */ "bne- 1b\n\t" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (p), "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (p), "r" (v), "m" (*p) : "cc", "memory"); #endif } @@ -132,8 +132,8 @@ "li %1, 0\n\t" /* load new value */ "stwcx. %1, 0, %3\n\t" /* attempt to store */ "bne- 1b\n\t" /* spin if failed */ - : "=&r"(result), "=&r"(temp), "+m" (*addr) - : "r" (addr) + : "=&r"(result), "=&r"(temp), "=m" (*addr) + : "r" (addr), "m" (*addr) : "cc", "memory"); #endif @@ -382,8 +382,8 @@ "stwcx. %0, 0, %2\n\t" /* clear reservation (74xx) */ "li %0, 0\n\t" /* failure - retval = 0 */ "3:\n\t" - : "=&r" (ret), "+m" (*p) - : "r" (p), "r" (cmpval), "r" (newval) + : "=&r" (ret), "=m" (*p) + : "r" (p), "r" (cmpval), "r" (newval), "m" (*p) : "cc", "memory"); #endif