]> err.no Git - linux-2.6/commitdiff
[PATCH] ARM: Add missing new file for bitops patch
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Mon, 18 Apr 2005 21:50:01 +0000 (22:50 +0100)
committerRussell King <rmk@dyn-67.arm.linux.org.uk>
Mon, 18 Apr 2005 21:50:01 +0000 (22:50 +0100)
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
arch/arm/lib/bitops.h [new file with mode: 0644]

diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h
new file mode 100644 (file)
index 0000000..4a83ab6
--- /dev/null
@@ -0,0 +1,33 @@
+       .macro  bitop, instr
+       and     r2, r0, #7
+       mov     r3, #1
+       mov     r3, r3, lsl r2
+       save_and_disable_irqs ip, r2
+       ldrb    r2, [r1, r0, lsr #3]
+       \instr  r2, r2, r3
+       strb    r2, [r1, r0, lsr #3]
+       restore_irqs ip
+       mov     pc, lr
+       .endm
+
+/**
+ * testop - implement a test_and_xxx_bit operation.
+ * @instr: operational instruction
+ * @store: store instruction
+ *
+ * Note: we can trivially conditionalise the store instruction
+ * to avoid dirting the data cache.
+ */
+       .macro  testop, instr, store
+       add     r1, r1, r0, lsr #3
+       and     r3, r0, #7
+       mov     r0, #1
+       save_and_disable_irqs ip, r2
+       ldrb    r2, [r1]
+       tst     r2, r0, lsl r3
+       \instr  r2, r2, r0, lsl r3
+       \store  r2, [r1]
+       restore_irqs ip
+       moveq   r0, #0
+       mov     pc, lr
+       .endm