]> git.hungrycats.org Git - linux/commitdiff
[SPARC64]: Implement little-endian bitops using normal ones.
authorDavid S. Miller <davem@nuts.davemloft.net>
Mon, 23 Aug 2004 07:36:20 +0000 (00:36 -0700)
committerDavid S. Miller <davem@nuts.davemloft.net>
Mon, 23 Aug 2004 07:36:20 +0000 (00:36 -0700)
Just like s390 and ppc64.

Signed-off-by: David S. Miller <davem@redhat.com>
arch/sparc64/kernel/sparc64_ksyms.c
arch/sparc64/lib/bitops.S
include/asm-sparc64/bitops.h

index b3d456e47290c0233730bf6ca7d5a1675973dcfb..46df529607b3f9467ad16bf26d1becfe65bac4ac 100644 (file)
@@ -185,8 +185,6 @@ EXPORT_SYMBOL(atomic_dec_and_lock);
 EXPORT_SYMBOL(___test_and_set_bit);
 EXPORT_SYMBOL(___test_and_clear_bit);
 EXPORT_SYMBOL(___test_and_change_bit);
-EXPORT_SYMBOL(___test_and_set_le_bit);
-EXPORT_SYMBOL(___test_and_clear_le_bit);
 
 /* Bit searching */
 EXPORT_SYMBOL(find_next_bit);
index 0c2aacc8398d6d06f4630ce3b60d458905773661..0ce52d065164d6ae717ab18f1c694e53d7645318 100644 (file)
@@ -64,41 +64,3 @@ ___test_and_change_bit:      /* %o0=nr, %o1=addr */
 2:     retl
         membar #StoreLoad | #StoreStore
        nop
-
-       .globl  ___test_and_set_le_bit
-___test_and_set_le_bit:        /* %o0=nr, %o1=addr */
-       srlx    %o0, 5, %g1
-       mov     1, %g5
-       sllx    %g1, 2, %g3
-       and     %o0, 31, %g2
-       sllx    %g5, %g2, %g5
-       add     %o1, %g3, %o1
-       lduwa   [%o1] ASI_PL, %g7
-1:     andcc   %g7, %g5, %o0
-       bne,pn  %icc, 2f
-        xor    %g7, %g5, %g1
-       casa    [%o1] ASI_PL, %g7, %g1
-       cmp     %g7, %g1
-       bne,a,pn %icc, 1b
-        lduwa  [%o1] ASI_PL, %g7
-2:     retl
-        membar #StoreLoad | #StoreStore
-
-       .globl  ___test_and_clear_le_bit
-___test_and_clear_le_bit:      /* %o0=nr, %o1=addr */
-       srlx    %o0, 5, %g1
-       mov     1, %g5
-       sllx    %g1, 2, %g3
-       and     %o0, 31, %g2
-       sllx    %g5, %g2, %g5
-       add     %o1, %g3, %o1
-       lduwa   [%o1] ASI_PL, %g7
-1:     andcc   %g7, %g5, %o0
-       be,pn   %icc, 2f
-        xor    %g7, %g5, %g1
-       casa    [%o1] ASI_PL, %g7, %g1
-       cmp     %g7, %g1
-       bne,a,pn %icc, 1b
-        lduwa  [%o1] ASI_PL, %g7
-2:     retl
-        membar #StoreLoad | #StoreStore
index f137654546897d04a215eab070d2199c21d89e99..1289af2416c77c7282306263919dcbbfbc6fc592 100644 (file)
@@ -228,13 +228,10 @@ extern unsigned long find_next_zero_bit(unsigned long *, unsigned long, unsigned
 #define find_first_zero_bit(addr, size) \
         find_next_zero_bit((addr), (size), 0)
 
-extern long ___test_and_set_le_bit(int nr, volatile unsigned long *addr);
-extern long ___test_and_clear_le_bit(int nr, volatile unsigned long *addr);
-
-#define test_and_set_le_bit(nr,addr)   ({___test_and_set_le_bit(nr,addr)!=0;})
-#define test_and_clear_le_bit(nr,addr) ({___test_and_clear_le_bit(nr,addr)!=0;})
-#define set_le_bit(nr,addr)            ((void)___test_and_set_le_bit(nr,addr))
-#define clear_le_bit(nr,addr)          ((void)___test_and_clear_le_bit(nr,addr))
+#define test_and_set_le_bit(nr,addr)   \
+       ({ ___test_and_set_bit((nr) ^ 0x38, (addr)) != 0; })
+#define test_and_clear_le_bit(nr,addr) \
+       ({ ___test_and_clear_bit((nr) ^ 0x38, (addr)) != 0; })
 
 static __inline__ int test_le_bit(int nr, __const__ unsigned long * addr)
 {
@@ -253,22 +250,30 @@ extern unsigned long find_next_zero_le_bit(unsigned long *, unsigned long, unsig
 
 #ifdef __KERNEL__
 
-#define ext2_set_bit(nr,addr)          test_and_set_le_bit((nr),(unsigned long *)(addr))
-#define ext2_set_bit_atomic(lock,nr,addr) test_and_set_le_bit((nr),(unsigned long *)(addr))
-#define ext2_clear_bit(nr,addr)                test_and_clear_le_bit((nr),(unsigned long *)(addr))
-#define ext2_clear_bit_atomic(lock,nr,addr) test_and_clear_le_bit((nr),(unsigned long *)(addr))
-#define ext2_test_bit(nr,addr)         test_le_bit((nr),(unsigned long *)(addr))
+#define ext2_set_bit(nr,addr)  \
+       test_and_set_le_bit((nr),(unsigned long *)(addr))
+#define ext2_set_bit_atomic(lock,nr,addr) \
+       test_and_set_le_bit((nr),(unsigned long *)(addr))
+#define ext2_clear_bit(nr,addr)        \
+       test_and_clear_le_bit((nr),(unsigned long *)(addr))
+#define ext2_clear_bit_atomic(lock,nr,addr) \
+       test_and_clear_le_bit((nr),(unsigned long *)(addr))
+#define ext2_test_bit(nr,addr) \
+       test_le_bit((nr),(unsigned long *)(addr))
 #define ext2_find_first_zero_bit(addr, size) \
        find_first_zero_le_bit((unsigned long *)(addr), (size))
 #define ext2_find_next_zero_bit(addr, size, off) \
        find_next_zero_le_bit((unsigned long *)(addr), (size), (off))
 
 /* Bitmap functions for the minix filesystem.  */
-#define minix_test_and_set_bit(nr,addr)        test_and_set_bit((nr),(unsigned long *)(addr))
-#define minix_set_bit(nr,addr)         set_bit((nr),(unsigned long *)(addr))
+#define minix_test_and_set_bit(nr,addr)        \
+       test_and_set_bit((nr),(unsigned long *)(addr))
+#define minix_set_bit(nr,addr) \
+       set_bit((nr),(unsigned long *)(addr))
 #define minix_test_and_clear_bit(nr,addr) \
        test_and_clear_bit((nr),(unsigned long *)(addr))
-#define minix_test_bit(nr,addr)                test_bit((nr),(unsigned long *)(addr))
+#define minix_test_bit(nr,addr)        \
+       test_bit((nr),(unsigned long *)(addr))
 #define minix_find_first_zero_bit(addr,size) \
        find_first_zero_bit((unsigned long *)(addr),(size))