io-writesl.S 1.3 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11
/*
 *  linux/arch/arm/lib/io-writesl.S
 *
 *  Copyright (C) 1995-2000 Russell King
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#include <linux/linkage.h>
#include <asm/assembler.h>
A
Al Viro 已提交
12
#include <asm/export.h>
L
Linus Torvalds 已提交
13 14 15

ENTRY(__raw_writesl)
		teq	r2, #0		@ do we have to check for the zero len?
16
		reteq	lr
L
Linus Torvalds 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
		ands	ip, r1, #3
		bne	3f

		subs	r2, r2, #4
		bmi	2f
		stmfd	sp!, {r4, lr}
1:		ldmia	r1!, {r3, r4, ip, lr}
		subs	r2, r2, #4
		str	r3, [r0, #0]
		str	r4, [r0, #0]
		str	ip, [r0, #0]
		str	lr, [r0, #0]
		bpl	1b
		ldmfd	sp!, {r4, lr}
2:		movs	r2, r2, lsl #31
		ldmcsia	r1!, {r3, ip}
		strcs	r3, [r0, #0]
		ldrne	r3, [r1, #0]
		strcs	ip, [r0, #0]
		strne	r3, [r0, #0]
37
		ret	lr
L
Linus Torvalds 已提交
38 39 40 41 42 43 44

3:		bic	r1, r1, #3
		ldr	r3, [r1], #4
		cmp	ip, #2
		blt	5f
		bgt	6f

45
4:		mov	ip, r3, lspull #16
L
Linus Torvalds 已提交
46 47
		ldr	r3, [r1], #4
		subs	r2, r2, #1
48
		orr	ip, ip, r3, lspush #16
L
Linus Torvalds 已提交
49 50
		str	ip, [r0]
		bne	4b
51
		ret	lr
L
Linus Torvalds 已提交
52

53
5:		mov	ip, r3, lspull #8
L
Linus Torvalds 已提交
54 55
		ldr	r3, [r1], #4
		subs	r2, r2, #1
56
		orr	ip, ip, r3, lspush #24
L
Linus Torvalds 已提交
57 58
		str	ip, [r0]
		bne	5b
59
		ret	lr
L
Linus Torvalds 已提交
60

61
6:		mov	ip, r3, lspull #24
L
Linus Torvalds 已提交
62 63
		ldr	r3, [r1], #4
		subs	r2, r2, #1
64
		orr	ip, ip, r3, lspush #8
L
Linus Torvalds 已提交
65 66
		str	ip, [r0]
		bne	6b
67
		ret	lr
68
ENDPROC(__raw_writesl)
A
Al Viro 已提交
69
EXPORT_SYMBOL(__raw_writesl)