Author: jhibbits
Date: Fri Apr 11 06:17:44 2014
New Revision: 264338
URL: http://svnweb.freebsd.org/changeset/base/264338

Log:
  Small performance optimization.  Clobber only cr0, rather than the entire CR.
  
  Discussed with:       rdivacky,nwhitehorn
  MFC after:    3 weeks

Modified:
  head/sys/powerpc/include/atomic.h
  head/sys/powerpc/include/counter.h
  head/sys/powerpc/powerpc/copyinout.c

Modified: head/sys/powerpc/include/atomic.h
==============================================================================
--- head/sys/powerpc/include/atomic.h   Fri Apr 11 06:15:58 2014        
(r264337)
+++ head/sys/powerpc/include/atomic.h   Fri Apr 11 06:17:44 2014        
(r264338)
@@ -74,7 +74,7 @@
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_add_int */
 
 #ifdef __powerpc64__
@@ -86,7 +86,7 @@
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_add_long */
 #else
 #define        __atomic_add_long(p, v, t)                              \
@@ -97,7 +97,7 @@
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_add_long */
 #endif
 
@@ -160,7 +160,7 @@ _ATOMIC_ADD(long)
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_clear_int */
 
 #ifdef __powerpc64__
@@ -172,7 +172,7 @@ _ATOMIC_ADD(long)
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_clear_long */
 #else
 #define        __atomic_clear_long(p, v, t)                            \
@@ -183,7 +183,7 @@ _ATOMIC_ADD(long)
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_clear_long */
 #endif
 
@@ -262,7 +262,7 @@ _ATOMIC_CLEAR(long)
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_set_int */
 
 #ifdef __powerpc64__
@@ -274,7 +274,7 @@ _ATOMIC_CLEAR(long)
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_set_long */
 #else
 #define        __atomic_set_long(p, v, t)                              \
@@ -285,7 +285,7 @@ _ATOMIC_CLEAR(long)
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_set_long */
 #endif
 
@@ -348,7 +348,7 @@ _ATOMIC_SET(long)
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_subtract_int */
 
 #ifdef __powerpc64__
@@ -360,7 +360,7 @@ _ATOMIC_SET(long)
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_subtract_long */
 #else
 #define        __atomic_subtract_long(p, v, t)                         \
@@ -371,7 +371,7 @@ _ATOMIC_SET(long)
        "       bne-    1b\n"                                   \
        : "=&r" (t), "=m" (*p)                                  \
        : "r" (p), "r" (v), "m" (*p)                            \
-       : "cc", "memory")                                       \
+       : "cr0", "memory")                                      \
     /* __atomic_subtract_long */
 #endif
 
@@ -444,7 +444,7 @@ atomic_readandclear_int(volatile u_int *
                "bne- 1b\n\t"                   /* spin if failed */
                : "=&r"(result), "=&r"(temp), "=m" (*addr)
                : "r" (addr), "m" (*addr)
-               : "cc", "memory");
+               : "cr0", "memory");
 #endif
 
        return (result);
@@ -465,7 +465,7 @@ atomic_readandclear_long(volatile u_long
                "bne- 1b\n\t"                   /* spin if failed */
                : "=&r"(result), "=&r"(temp), "=m" (*addr)
                : "r" (addr), "m" (*addr)
-               : "cc", "memory");
+               : "cr0", "memory");
 #endif
 
        return (result);
@@ -568,7 +568,7 @@ atomic_cmpset_int(volatile u_int* p, u_i
                "3:\n\t"
                : "=&r" (ret), "=m" (*p)
                : "r" (p), "r" (cmpval), "r" (newval), "m" (*p)
-               : "cc", "memory");
+               : "cr0", "memory");
 #endif
 
        return (ret);
@@ -604,7 +604,7 @@ atomic_cmpset_long(volatile u_long* p, u
                "3:\n\t"
                : "=&r" (ret), "=m" (*p)
                : "r" (p), "r" (cmpval), "r" (newval), "m" (*p)
-               : "cc", "memory");
+               : "cr0", "memory");
 #endif
 
        return (ret);
@@ -695,7 +695,7 @@ atomic_swap_32(volatile u_int *p, u_int 
        "       bne-    1b\n"
        : "=&r" (prev), "+m" (*(volatile u_int *)p)
        : "r" (p), "r" (v)
-       : "cc", "memory");
+       : "cr0", "memory");
 
        return (prev);
 }
@@ -712,7 +712,7 @@ atomic_swap_64(volatile u_long *p, u_lon
        "       bne-    1b\n"
        : "=&r" (prev), "+m" (*(volatile u_long *)p)
        : "r" (p), "r" (v)
-       : "cc", "memory");
+       : "cr0", "memory");
 
        return (prev);
 }

Modified: head/sys/powerpc/include/counter.h
==============================================================================
--- head/sys/powerpc/include/counter.h  Fri Apr 11 06:15:58 2014        
(r264337)
+++ head/sys/powerpc/include/counter.h  Fri Apr 11 06:17:44 2014        
(r264338)
@@ -95,7 +95,7 @@ counter_u64_add(counter_u64_t c, int64_t
            "bne-       1b"
            : "=&b" (ccpu), "=&r" (old)
            : "r" ((char *)c - (char *)&__pcpu[0]), "r" (inc)
-           : "cc", "memory");
+           : "cr0", "memory");
 }
 
 #else  /* !64bit */

Modified: head/sys/powerpc/powerpc/copyinout.c
==============================================================================
--- head/sys/powerpc/powerpc/copyinout.c        Fri Apr 11 06:15:58 2014        
(r264337)
+++ head/sys/powerpc/powerpc/copyinout.c        Fri Apr 11 06:17:44 2014        
(r264338)
@@ -503,7 +503,7 @@ casuword32(volatile uint32_t *addr, uint
                "3:\n\t"
                : "=&r" (val), "=m" (*p)
                : "r" (p), "r" (old), "r" (new), "m" (*p)
-               : "cc", "memory");
+               : "cr0", "memory");
 
        td->td_pcb->pcb_onfault = NULL;
 
@@ -551,7 +551,7 @@ casuword(volatile u_long *addr, u_long o
                "3:\n\t"
                : "=&r" (val), "=m" (*p)
                : "r" (p), "r" (old), "r" (new), "m" (*p)
-               : "cc", "memory");
+               : "cr0", "memory");
 
        td->td_pcb->pcb_onfault = NULL;
 
_______________________________________________
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