Merge with master.kernel.org:/home/rmk/linux-2.6-rmk.git
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Mon, 18 Apr 2005 23:25:10 +0000 (16:25 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Mon, 18 Apr 2005 23:25:10 +0000 (16:25 -0700)
This adds the missing arch/arm/lib/bitops.h file.

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