X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fsparc64%2Fkernel%2Fsemaphore.c;h=a809e63f03ef8f63f37ece764d1ee26a3db297b1;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=9ddfcb9a190015d8191411ad5442af1aa3c54b3c;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/arch/sparc64/kernel/semaphore.c b/arch/sparc64/kernel/semaphore.c index 9ddfcb9a1..a809e63f0 100644 --- a/arch/sparc64/kernel/semaphore.c +++ b/arch/sparc64/kernel/semaphore.c @@ -32,8 +32,9 @@ static __inline__ int __sem_update_count(struct semaphore *sem, int incr) " add %1, %4, %1\n" " cas [%3], %0, %1\n" " cmp %0, %1\n" +" membar #StoreLoad | #StoreStore\n" " bne,pn %%icc, 1b\n" -" membar #StoreLoad | #StoreStore\n" +" nop\n" : "=&r" (old_count), "=&r" (tmp), "=m" (sem->count) : "r" (&sem->count), "r" (incr), "m" (sem->count) : "cc"); @@ -65,30 +66,26 @@ void up(struct semaphore *sem) __asm__ __volatile__("\n" " ! up sem(%0)\n" " membar #StoreLoad | #LoadLoad\n" -"1: lduw [%0], %%g5\n" -" add %%g5, 1, %%g7\n" -" cas [%0], %%g5, %%g7\n" -" cmp %%g5, %%g7\n" +"1: lduw [%0], %%g1\n" +" add %%g1, 1, %%g7\n" +" cas [%0], %%g1, %%g7\n" +" cmp %%g1, %%g7\n" " bne,pn %%icc, 1b\n" " addcc %%g7, 1, %%g0\n" +" membar #StoreLoad | #StoreStore\n" " ble,pn %%icc, 3f\n" -" membar #StoreLoad | #StoreStore\n" +" nop\n" "2:\n" " .subsection 2\n" -"3: mov %0, %%g5\n" +"3: mov %0, %%g1\n" " save %%sp, -160, %%sp\n" -" mov %%g1, %%l1\n" -" mov %%g2, %%l2\n" -" mov %%g3, %%l3\n" " call %1\n" -" mov %%g5, %%o0\n" -" mov %%l1, %%g1\n" -" mov %%l2, %%g2\n" +" mov %%g1, %%o0\n" " ba,pt %%xcc, 2b\n" -" restore %%l3, %%g0, %%g3\n" +" restore\n" " .previous\n" : : "r" (sem), "i" (__up) - : "g5", "g7", "memory", "cc"); + : "g1", "g2", "g3", "g7", "memory", "cc"); } static void __sched __down(struct semaphore * sem) @@ -127,30 +124,26 @@ void __sched down(struct semaphore *sem) __asm__ __volatile__("\n" " ! down sem(%0)\n" -"1: lduw [%0], %%g5\n" -" sub %%g5, 1, %%g7\n" -" cas [%0], %%g5, %%g7\n" -" cmp %%g5, %%g7\n" +"1: lduw [%0], %%g1\n" +" sub %%g1, 1, %%g7\n" +" cas [%0], %%g1, %%g7\n" +" cmp %%g1, %%g7\n" " bne,pn %%icc, 1b\n" " cmp %%g7, 1\n" +" membar #StoreLoad | #StoreStore\n" " bl,pn %%icc, 3f\n" -" membar #StoreLoad | #StoreStore\n" +" nop\n" "2:\n" " .subsection 2\n" -"3: mov %0, %%g5\n" +"3: mov %0, %%g1\n" " save %%sp, -160, %%sp\n" -" mov %%g1, %%l1\n" -" mov %%g2, %%l2\n" -" mov %%g3, %%l3\n" " call %1\n" -" mov %%g5, %%o0\n" -" mov %%l1, %%g1\n" -" mov %%l2, %%g2\n" +" mov %%g1, %%o0\n" " ba,pt %%xcc, 2b\n" -" restore %%l3, %%g0, %%g3\n" +" restore\n" " .previous\n" : : "r" (sem), "i" (__down) - : "g5", "g7", "memory", "cc"); + : "g1", "g2", "g3", "g7", "memory", "cc"); } int down_trylock(struct semaphore *sem) @@ -175,20 +168,20 @@ int down_trylock(struct semaphore *sem) __asm__ __volatile__("\n" " ! down_trylock sem(%1) ret(%0)\n" -"1: lduw [%1], %%g5\n" -" sub %%g5, 1, %%g7\n" -" cmp %%g5, 1\n" +"1: lduw [%1], %%g1\n" +" sub %%g1, 1, %%g7\n" +" cmp %%g1, 1\n" " bl,pn %%icc, 2f\n" " mov 1, %0\n" -" cas [%1], %%g5, %%g7\n" -" cmp %%g5, %%g7\n" +" cas [%1], %%g1, %%g7\n" +" cmp %%g1, %%g7\n" " bne,pn %%icc, 1b\n" " mov 0, %0\n" " membar #StoreLoad | #StoreStore\n" "2:\n" : "=&r" (ret) : "r" (sem) - : "g5", "g7", "memory", "cc"); + : "g1", "g7", "memory", "cc"); return ret; } @@ -237,31 +230,26 @@ int __sched down_interruptible(struct semaphore *sem) __asm__ __volatile__("\n" " ! down_interruptible sem(%2) ret(%0)\n" -"1: lduw [%2], %%g5\n" -" sub %%g5, 1, %%g7\n" -" cas [%2], %%g5, %%g7\n" -" cmp %%g5, %%g7\n" +"1: lduw [%2], %%g1\n" +" sub %%g1, 1, %%g7\n" +" cas [%2], %%g1, %%g7\n" +" cmp %%g1, %%g7\n" " bne,pn %%icc, 1b\n" " cmp %%g7, 1\n" +" membar #StoreLoad | #StoreStore\n" " bl,pn %%icc, 3f\n" -" membar #StoreLoad | #StoreStore\n" +" nop\n" "2:\n" " .subsection 2\n" -"3: mov %2, %%g5\n" +"3: mov %2, %%g1\n" " save %%sp, -160, %%sp\n" -" mov %%g1, %%l1\n" -" mov %%g2, %%l2\n" -" mov %%g3, %%l3\n" " call %3\n" -" mov %%g5, %%o0\n" -" mov %%l1, %%g1\n" -" mov %%l2, %%g2\n" -" mov %%l3, %%g3\n" +" mov %%g1, %%o0\n" " ba,pt %%xcc, 2b\n" -" restore %%o0, %%g0, %0\n" +" restore\n" " .previous\n" : "=r" (ret) : "0" (ret), "r" (sem), "i" (__down_interruptible) - : "g5", "g7", "memory", "cc"); + : "g1", "g2", "g3", "g7", "memory", "cc"); return ret; }