Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54ea06f6 authored by Russell King's avatar Russell King Committed by Russell King
Browse files

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

parent 9fb1759a
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
#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