diff options
Diffstat (limited to 'arch/arm/lib/bitops.h')
| -rw-r--r-- | arch/arm/lib/bitops.h | 26 | 
1 files changed, 22 insertions, 4 deletions
diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h index 10d868a5a48..d6408d1ee54 100644 --- a/arch/arm/lib/bitops.h +++ b/arch/arm/lib/bitops.h @@ -1,5 +1,9 @@ +#include <asm/unwind.h> +  #if __LINUX_ARM_ARCH__ >= 6 -	.macro	bitop, instr +	.macro	bitop, name, instr +ENTRY(	\name		) +UNWIND(	.fnstart	)  	ands	ip, r1, #3  	strneb	r1, [ip]		@ assert word-aligned  	mov	r2, #1 @@ -13,9 +17,13 @@  	cmp	r0, #0  	bne	1b  	bx	lr +UNWIND(	.fnend		) +ENDPROC(\name		)  	.endm -	.macro	testop, instr, store +	.macro	testop, name, instr, store +ENTRY(	\name		) +UNWIND(	.fnstart	)  	ands	ip, r1, #3  	strneb	r1, [ip]		@ assert word-aligned  	mov	r2, #1 @@ -34,9 +42,13 @@  	cmp	r0, #0  	movne	r0, #1  2:	bx	lr +UNWIND(	.fnend		) +ENDPROC(\name		)  	.endm  #else -	.macro	bitop, instr +	.macro	bitop, name, instr +ENTRY(	\name		) +UNWIND(	.fnstart	)  	ands	ip, r1, #3  	strneb	r1, [ip]		@ assert word-aligned  	and	r2, r0, #31 @@ -49,6 +61,8 @@  	str	r2, [r1, r0, lsl #2]  	restore_irqs ip  	mov	pc, lr +UNWIND(	.fnend		) +ENDPROC(\name		)  	.endm  /** @@ -59,7 +73,9 @@   * Note: we can trivially conditionalise the store instruction   * to avoid dirtying the data cache.   */ -	.macro	testop, instr, store +	.macro	testop, name, instr, store +ENTRY(	\name		) +UNWIND(	.fnstart	)  	ands	ip, r1, #3  	strneb	r1, [ip]		@ assert word-aligned  	and	r3, r0, #31 @@ -73,5 +89,7 @@  	moveq	r0, #0  	restore_irqs ip  	mov	pc, lr +UNWIND(	.fnend		) +ENDPROC(\name		)  	.endm  #endif  |