tree e486f20da3931e62f07014c4aaf8d7042d656151
parent 9fb1759a3102c26cd8f64254a7c3e532782c2bb8
author Russell King <[EMAIL PROTECTED]> Sat, 16 Jul 2005 15:21:51 +0100
committer Russell King <[EMAIL PROTECTED]> Sat, 16 Jul 2005 15:21:51 +0100

[PATCH] ARM: Convert bitops to use ARMv6 ldrex/strex instructions

Signed-off-by: Russell King <[EMAIL PROTECTED]>

 arch/arm/lib/bitops.h |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+)

diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h
--- a/arch/arm/lib/bitops.h
+++ b/arch/arm/lib/bitops.h
@@ -1,3 +1,33 @@
+#if __LINUX_ARM_ARCH__ >= 6
+       .macro  bitop, instr
+       mov     r2, #1
+       and     r3, r0, #7              @ Get bit offset
+       add     r1, r1, r0, lsr #3      @ Get byte offset
+       mov     r3, r2, lsl r3
+1:     ldrexb  r2, [r1]
+       \instr  r2, r2, r3
+       strexb  r0, r2, [r1]
+       cmpne   r0, #0
+       bne     1b
+       mov     pc, lr
+       .endm
+
+       .macro  testop, instr, store
+       and     r3, r0, #7              @ Get bit offset
+       mov     r2, #1
+       add     r1, r1, r0, lsr #3      @ Get byte offset
+       mov     r3, r2, lsl r3          @ create mask
+1:     ldrexb  r2, [r1]
+       ands    r0, r2, r3              @ save old value of bit
+       \instr  ip, r2, r3                      @ toggle bit
+       strexb  r2, ip, [r1]
+       cmp     r2, #0
+       bne     1b
+       cmp     r0, #0
+       movne   r0, #1
+2:     mov     pc, lr
+       .endm
+#else
        .macro  bitop, instr
        and     r2, r0, #7
        mov     r3, #1
@@ -31,3 +61,4 @@
        moveq   r0, #0
        mov     pc, lr
        .endm
+#endif
-
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