ChangeSet 1.2181.24.5, 2005/03/24 14:44:07-08:00, [EMAIL PROTECTED]

        [SPARC64]: Eliminate g5 register usage in rwsem.
        
        Also, semaphore stuff needs a g5 register clobber
        until we move over to actually passing -ffixed-g5
        to the compiler.
        
        Signed-off-by: David S. Miller <[EMAIL PROTECTED]>



 arch/sparc64/kernel/semaphore.c |    6 +-
 arch/sparc64/lib/rwsem.c        |  119 +++++++++++++++++-----------------------
 include/asm-sparc64/rwsem.h     |   10 +--
 3 files changed, 59 insertions(+), 76 deletions(-)


diff -Nru a/arch/sparc64/kernel/semaphore.c b/arch/sparc64/kernel/semaphore.c
--- a/arch/sparc64/kernel/semaphore.c   2005-04-03 21:12:06 -07:00
+++ b/arch/sparc64/kernel/semaphore.c   2005-04-03 21:12:06 -07:00
@@ -83,7 +83,7 @@
 "       restore\n"
 "      .previous\n"
        : : "r" (sem), "i" (__up)
-       : "g1", "g2", "g3", "g7", "memory", "cc");
+       : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
 }
 
 static void __sched __down(struct semaphore * sem)
@@ -140,7 +140,7 @@
 "       restore\n"
 "      .previous\n"
        : : "r" (sem), "i" (__down)
-       : "g1", "g2", "g3", "g7", "memory", "cc");
+       : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
 }
 
 int down_trylock(struct semaphore *sem)
@@ -246,6 +246,6 @@
 "      .previous\n"
        : "=r" (ret)
        : "0" (ret), "r" (sem), "i" (__down_interruptible)
-       : "g1", "g2", "g3", "g7", "memory", "cc");
+       : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
        return ret;
 }
diff -Nru a/arch/sparc64/lib/rwsem.c b/arch/sparc64/lib/rwsem.c
--- a/arch/sparc64/lib/rwsem.c  2005-04-03 21:12:06 -07:00
+++ b/arch/sparc64/lib/rwsem.c  2005-04-03 21:12:06 -07:00
@@ -18,10 +18,10 @@
 {
        __asm__ __volatile__(
                "! beginning __down_read\n"
-               "1:\tlduw       [%0], %%g5\n\t"
-               "add            %%g5, 1, %%g7\n\t"
-               "cas            [%0], %%g5, %%g7\n\t"
-               "cmp            %%g5, %%g7\n\t"
+               "1:\tlduw       [%0], %%g1\n\t"
+               "add            %%g1, 1, %%g7\n\t"
+               "cas            [%0], %%g1, %%g7\n\t"
+               "cmp            %%g1, %%g7\n\t"
                "bne,pn         %%icc, 1b\n\t"
                " add           %%g7, 1, %%g7\n\t"
                "cmp            %%g7, 0\n\t"
@@ -29,21 +29,16 @@
                " membar        #StoreLoad | #StoreStore\n"
                "2:\n\t"
                ".subsection    2\n"
-               "3:\tmov        %0, %%g5\n\t"
+               "3:\tmov        %0, %%g1\n\t"
                "save           %%sp, -160, %%sp\n\t"
-               "mov            %%g1, %%l1\n\t"
-               "mov            %%g2, %%l2\n\t"
-               "mov            %%g3, %%l3\n\t"
                "call           %1\n\t"
-               " mov           %%g5, %%o0\n\t"
-               "mov            %%l1, %%g1\n\t"
-               "mov            %%l2, %%g2\n\t"
+               " mov           %%g1, %%o0\n\t"
                "ba,pt          %%xcc, 2b\n\t"
-               " restore       %%l3, %%g0, %%g3\n\t"
+               " restore\n\t"
                ".previous\n\t"
                "! ending __down_read"
                : : "r" (sem), "i" (rwsem_down_read_failed)
-               : "g5", "g7", "memory", "cc");
+               : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
 }
 EXPORT_SYMBOL(__down_read);
 
@@ -53,13 +48,13 @@
 
        __asm__ __volatile__(
                "! beginning __down_read_trylock\n"
-               "1:\tlduw       [%1], %%g5\n\t"
-               "add            %%g5, 1, %%g7\n\t"
+               "1:\tlduw       [%1], %%g1\n\t"
+               "add            %%g1, 1, %%g7\n\t"
                "cmp            %%g7, 0\n\t"
                "bl,pn          %%icc, 2f\n\t"
                " mov           0, %0\n\t"
-               "cas            [%1], %%g5, %%g7\n\t"
-               "cmp            %%g5, %%g7\n\t"
+               "cas            [%1], %%g1, %%g7\n\t"
+               "cmp            %%g1, %%g7\n\t"
                "bne,pn         %%icc, 1b\n\t"
                " mov           1, %0\n\t"
                "membar         #StoreLoad | #StoreStore\n"
@@ -67,7 +62,7 @@
                "! ending __down_read_trylock"
                : "=&r" (result)
                 : "r" (sem)
-               : "g5", "g7", "memory", "cc");
+               : "g1", "g7", "memory", "cc");
 
        return result;
 }
@@ -79,30 +74,27 @@
                "! beginning __down_write\n\t"
                "sethi          %%hi(%2), %%g1\n\t"
                "or             %%g1, %%lo(%2), %%g1\n"
-               "1:\tlduw       [%0], %%g5\n\t"
-               "add            %%g5, %%g1, %%g7\n\t"
-               "cas            [%0], %%g5, %%g7\n\t"
-               "cmp            %%g5, %%g7\n\t"
+               "1:\tlduw       [%0], %%g3\n\t"
+               "add            %%g3, %%g1, %%g7\n\t"
+               "cas            [%0], %%g3, %%g7\n\t"
+               "cmp            %%g3, %%g7\n\t"
                "bne,pn         %%icc, 1b\n\t"
                " cmp           %%g7, 0\n\t"
                "bne,pn         %%icc, 3f\n\t"
                " membar        #StoreLoad | #StoreStore\n"
                "2:\n\t"
                ".subsection    2\n"
-               "3:\tmov        %0, %%g5\n\t"
+               "3:\tmov        %0, %%g1\n\t"
                "save           %%sp, -160, %%sp\n\t"
-               "mov            %%g2, %%l2\n\t"
-               "mov            %%g3, %%l3\n\t"
                "call           %1\n\t"
-               " mov           %%g5, %%o0\n\t"
-               "mov            %%l2, %%g2\n\t"
+               " mov           %%g1, %%o0\n\t"
                "ba,pt          %%xcc, 2b\n\t"
-               " restore       %%l3, %%g0, %%g3\n\t"
+               " restore\n\t"
                ".previous\n\t"
                "! ending __down_write"
                : : "r" (sem), "i" (rwsem_down_write_failed),
                    "i" (RWSEM_ACTIVE_WRITE_BIAS)
-               : "g1", "g5", "g7", "memory", "cc");
+               : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
 }
 EXPORT_SYMBOL(__down_write);
 
@@ -114,13 +106,13 @@
                "! beginning __down_write_trylock\n\t"
                "sethi          %%hi(%2), %%g1\n\t"
                "or             %%g1, %%lo(%2), %%g1\n"
-               "1:\tlduw       [%1], %%g5\n\t"
-               "cmp            %%g5, 0\n\t"
+               "1:\tlduw       [%1], %%g3\n\t"
+               "cmp            %%g3, 0\n\t"
                "bne,pn         %%icc, 2f\n\t"
                " mov           0, %0\n\t"
-               "add            %%g5, %%g1, %%g7\n\t"
-               "cas            [%1], %%g5, %%g7\n\t"
-               "cmp            %%g5, %%g7\n\t"
+               "add            %%g3, %%g1, %%g7\n\t"
+               "cas            [%1], %%g3, %%g7\n\t"
+               "cmp            %%g3, %%g7\n\t"
                "bne,pn         %%icc, 1b\n\t"
                " mov           1, %0\n\t"
                "membar         #StoreLoad | #StoreStore\n"
@@ -128,7 +120,7 @@
                "! ending __down_write_trylock"
                : "=&r" (result)
                : "r" (sem), "i" (RWSEM_ACTIVE_WRITE_BIAS)
-               : "g1", "g5", "g7", "memory", "cc");
+               : "g1", "g3", "g7", "memory", "cc");
 
        return result;
 }
@@ -138,10 +130,10 @@
 {
        __asm__ __volatile__(
                "! beginning __up_read\n\t"
-               "1:\tlduw       [%0], %%g5\n\t"
-               "sub            %%g5, 1, %%g7\n\t"
-               "cas            [%0], %%g5, %%g7\n\t"
-               "cmp            %%g5, %%g7\n\t"
+               "1:\tlduw       [%0], %%g1\n\t"
+               "sub            %%g1, 1, %%g7\n\t"
+               "cas            [%0], %%g1, %%g7\n\t"
+               "cmp            %%g1, %%g7\n\t"
                "bne,pn         %%icc, 1b\n\t"
                " cmp           %%g7, 0\n\t"
                "bl,pn          %%icc, 3f\n\t"
@@ -153,20 +145,17 @@
                "or             %%g1, %%lo(%2), %%g1\n\t"
                "andcc          %%g7, %%g1, %%g0\n\t"
                "bne,pn         %%icc, 2b\n\t"
-               " mov           %0, %%g5\n\t"
+               " mov           %0, %%g1\n\t"
                "save           %%sp, -160, %%sp\n\t"
-               "mov            %%g2, %%l2\n\t"
-               "mov            %%g3, %%l3\n\t"
                "call           %1\n\t"
-               " mov           %%g5, %%o0\n\t"
-               "mov            %%l2, %%g2\n\t"
+               " mov           %%g1, %%o0\n\t"
                "ba,pt          %%xcc, 2b\n\t"
-               " restore       %%l3, %%g0, %%g3\n\t"
+               " restore\n\t"
                ".previous\n\t"
                "! ending __up_read"
                : : "r" (sem), "i" (rwsem_wake),
                    "i" (RWSEM_ACTIVE_MASK)
-               : "g1", "g5", "g7", "memory", "cc");
+               : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
 }
 EXPORT_SYMBOL(__up_read);
 
@@ -176,10 +165,10 @@
                "! beginning __up_write\n\t"
                "sethi          %%hi(%2), %%g1\n\t"
                "or             %%g1, %%lo(%2), %%g1\n"
-               "1:\tlduw       [%0], %%g5\n\t"
-               "sub            %%g5, %%g1, %%g7\n\t"
-               "cas            [%0], %%g5, %%g7\n\t"
-               "cmp            %%g5, %%g7\n\t"
+               "1:\tlduw       [%0], %%g3\n\t"
+               "sub            %%g3, %%g1, %%g7\n\t"
+               "cas            [%0], %%g3, %%g7\n\t"
+               "cmp            %%g3, %%g7\n\t"
                "bne,pn         %%icc, 1b\n\t"
                " sub           %%g7, %%g1, %%g7\n\t"
                "cmp            %%g7, 0\n\t"
@@ -187,20 +176,17 @@
                " membar        #StoreLoad | #StoreStore\n"
                "2:\n\t"
                ".subsection 2\n"
-               "3:\tmov        %0, %%g5\n\t"
+               "3:\tmov        %0, %%g1\n\t"
                "save           %%sp, -160, %%sp\n\t"
-               "mov            %%g2, %%l2\n\t"
-               "mov            %%g3, %%l3\n\t"
                "call           %1\n\t"
-               " mov           %%g5, %%o0\n\t"
-               "mov            %%l2, %%g2\n\t"
+               " mov           %%g1, %%o0\n\t"
                "ba,pt          %%xcc, 2b\n\t"
-               " restore       %%l3, %%g0, %%g3\n\t"
+               " restore\n\t"
                ".previous\n\t"
                "! ending __up_write"
                : : "r" (sem), "i" (rwsem_wake),
                    "i" (RWSEM_ACTIVE_WRITE_BIAS)
-               : "g1", "g5", "g7", "memory", "cc");
+               : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
 }
 EXPORT_SYMBOL(__up_write);
 
@@ -210,10 +196,10 @@
                "! beginning __downgrade_write\n\t"
                "sethi          %%hi(%2), %%g1\n\t"
                "or             %%g1, %%lo(%2), %%g1\n"
-               "1:\tlduw       [%0], %%g5\n\t"
-               "sub            %%g5, %%g1, %%g7\n\t"
-               "cas            [%0], %%g5, %%g7\n\t"
-               "cmp            %%g5, %%g7\n\t"
+               "1:\tlduw       [%0], %%g3\n\t"
+               "sub            %%g3, %%g1, %%g7\n\t"
+               "cas            [%0], %%g3, %%g7\n\t"
+               "cmp            %%g3, %%g7\n\t"
                "bne,pn         %%icc, 1b\n\t"
                " sub           %%g7, %%g1, %%g7\n\t"
                "cmp            %%g7, 0\n\t"
@@ -221,19 +207,16 @@
                " membar        #StoreLoad | #StoreStore\n"
                "2:\n\t"
                ".subsection 2\n"
-               "3:\tmov        %0, %%g5\n\t"
+               "3:\tmov        %0, %%g1\n\t"
                "save           %%sp, -160, %%sp\n\t"
-               "mov            %%g2, %%l2\n\t"
-               "mov            %%g3, %%l3\n\t"
                "call           %1\n\t"
-               " mov           %%g5, %%o0\n\t"
-               "mov            %%l2, %%g2\n\t"
+               " mov           %%g1, %%o0\n\t"
                "ba,pt          %%xcc, 2b\n\t"
-               " restore       %%l3, %%g0, %%g3\n\t"
+               " restore\n\t"
                ".previous\n\t"
                "! ending __up_write"
                : : "r" (sem), "i" (rwsem_downgrade_wake),
                    "i" (RWSEM_WAITING_BIAS)
-               : "g1", "g5", "g7", "memory", "cc");
+               : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
 }
 EXPORT_SYMBOL(__downgrade_write);
diff -Nru a/include/asm-sparc64/rwsem.h b/include/asm-sparc64/rwsem.h
--- a/include/asm-sparc64/rwsem.h       2005-04-03 21:12:06 -07:00
+++ b/include/asm-sparc64/rwsem.h       2005-04-03 21:12:06 -07:00
@@ -56,16 +56,16 @@
        int tmp = delta;
 
        __asm__ __volatile__(
-               "1:\tlduw       [%2], %%g5\n\t"
-               "add            %%g5, %1, %%g7\n\t"
-               "cas            [%2], %%g5, %%g7\n\t"
-               "cmp            %%g5, %%g7\n\t"
+               "1:\tlduw       [%2], %%g1\n\t"
+               "add            %%g1, %1, %%g7\n\t"
+               "cas            [%2], %%g1, %%g7\n\t"
+               "cmp            %%g1, %%g7\n\t"
                "bne,pn         %%icc, 1b\n\t"
                " membar        #StoreLoad | #StoreStore\n\t"
                "mov            %%g7, %0\n\t"
                : "=&r" (tmp)
                : "0" (tmp), "r" (sem)
-               : "g5", "g7", "memory", "cc");
+               : "g1", "g7", "memory", "cc");
 
        return tmp + delta;
 }
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to