Author: kib
Date: Sat Dec 18 16:41:11 2010
New Revision: 216524
URL: http://svn.freebsd.org/changeset/base/216524

Log:
  Inform a compiler which asm statements in the x86 implementation of
  atomics change eflags.
  
  Reviewed by:  jhb
  MFC after:    2 weeks

Modified:
  head/sys/amd64/include/atomic.h
  head/sys/i386/include/atomic.h

Modified: head/sys/amd64/include/atomic.h
==============================================================================
--- head/sys/amd64/include/atomic.h     Sat Dec 18 15:45:10 2010        
(r216523)
+++ head/sys/amd64/include/atomic.h     Sat Dec 18 16:41:11 2010        
(r216524)
@@ -108,7 +108,8 @@ atomic_##NAME##_##TYPE(volatile u_##TYPE
 {                                                      \
        __asm __volatile(MPLOCKED OP                    \
        : "=m" (*p)                                     \
-       : CONS (V), "m" (*p));                          \
+       : CONS (V), "m" (*p)                            \
+       : "cc");                                        \
 }                                                      \
                                                        \
 static __inline void                                   \
@@ -117,7 +118,7 @@ atomic_##NAME##_barr_##TYPE(volatile u_#
        __asm __volatile(MPLOCKED OP                    \
        : "=m" (*p)                                     \
        : CONS (V), "m" (*p)                            \
-       : "memory");                                    \
+       : "memory", "cc");                              \
 }                                                      \
 struct __hack
 
@@ -145,7 +146,7 @@ atomic_cmpset_int(volatile u_int *dst, u
        : "r" (src),                    /* 2 */
          "a" (expect),                 /* 3 */
          "m" (*dst)                    /* 4 */
-       : "memory");
+       : "memory", "cc");
 
        return (res);
 }
@@ -166,7 +167,7 @@ atomic_cmpset_long(volatile u_long *dst,
        : "r" (src),                    /* 2 */
          "a" (expect),                 /* 3 */
          "m" (*dst)                    /* 4 */
-       : "memory");
+       : "memory", "cc");
 
        return (res);
 }
@@ -185,8 +186,8 @@ atomic_fetchadd_int(volatile u_int *p, u
        "# atomic_fetchadd_int"
        : "+r" (v),                     /* 0 (result) */
          "=m" (*p)                     /* 1 */
-       : "m" (*p));                    /* 2 */
-
+       : "m" (*p)                      /* 2 */
+       : "cc");
        return (v);
 }
 
@@ -204,8 +205,8 @@ atomic_fetchadd_long(volatile u_long *p,
        "# atomic_fetchadd_long"
        : "+r" (v),                     /* 0 (result) */
          "=m" (*p)                     /* 1 */
-       : "m" (*p));                    /* 2 */
-
+       : "m" (*p)                      /* 2 */
+       : "cc");
        return (v);
 }
 
@@ -249,7 +250,7 @@ atomic_load_acq_##TYPE(volatile u_##TYPE
        : "=a" (res),                   /* 0 */         \
          "=m" (*p)                     /* 1 */         \
        : "m" (*p)                      /* 2 */         \
-       : "memory");                                    \
+       : "memory", "cc");                              \
                                                        \
        return (res);                                   \
 }                                                      \

Modified: head/sys/i386/include/atomic.h
==============================================================================
--- head/sys/i386/include/atomic.h      Sat Dec 18 15:45:10 2010        
(r216523)
+++ head/sys/i386/include/atomic.h      Sat Dec 18 16:41:11 2010        
(r216524)
@@ -106,7 +106,8 @@ atomic_##NAME##_##TYPE(volatile u_##TYPE
 {                                                      \
        __asm __volatile(MPLOCKED OP                    \
        : "=m" (*p)                                     \
-       : CONS (V), "m" (*p));                          \
+       : CONS (V), "m" (*p)                            \
+       : "cc");                                        \
 }                                                      \
                                                        \
 static __inline void                                   \
@@ -115,7 +116,7 @@ atomic_##NAME##_barr_##TYPE(volatile u_#
        __asm __volatile(MPLOCKED OP                    \
        : "=m" (*p)                                     \
        : CONS (V), "m" (*p)                            \
-       : "memory");                                    \
+       : "memory", "cc");                              \
 }                                                      \
 struct __hack
 
@@ -172,7 +173,7 @@ atomic_cmpset_int(volatile u_int *dst, u
        : "r" (src),                    /* 2 */
          "a" (expect),                 /* 3 */
          "m" (*dst)                    /* 4 */
-       : "memory");
+       : "memory", "cc");
 
        return (res);
 }
@@ -193,8 +194,8 @@ atomic_fetchadd_int(volatile u_int *p, u
        "# atomic_fetchadd_int"
        : "+r" (v),                     /* 0 (result) */
          "=m" (*p)                     /* 1 */
-       : "m" (*p));                    /* 2 */
-
+       : "m" (*p)                      /* 2 */
+       : "cc");
        return (v);
 }
 
@@ -238,7 +239,7 @@ atomic_load_acq_##TYPE(volatile u_##TYPE
        : "=a" (res),                   /* 0 */         \
          "=m" (*p)                     /* 1 */         \
        : "m" (*p)                      /* 2 */         \
-       : "memory");                                    \
+       : "memory", "cc");                              \
                                                        \
        return (res);                                   \
 }                                                      \
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to