Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm/lib/io-writesl.S
26295 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* linux/arch/arm/lib/io-writesl.S
4
*
5
* Copyright (C) 1995-2000 Russell King
6
*/
7
#include <linux/linkage.h>
8
#include <asm/assembler.h>
9
10
ENTRY(__raw_writesl)
11
teq r2, #0 @ do we have to check for the zero len?
12
reteq lr
13
ands ip, r1, #3
14
bne 3f
15
16
subs r2, r2, #4
17
bmi 2f
18
stmfd sp!, {r4, lr}
19
1: ldmia r1!, {r3, r4, ip, lr}
20
subs r2, r2, #4
21
str r3, [r0, #0]
22
str r4, [r0, #0]
23
str ip, [r0, #0]
24
str lr, [r0, #0]
25
bpl 1b
26
ldmfd sp!, {r4, lr}
27
2: movs r2, r2, lsl #31
28
ldmiacs r1!, {r3, ip}
29
strcs r3, [r0, #0]
30
ldrne r3, [r1, #0]
31
strcs ip, [r0, #0]
32
strne r3, [r0, #0]
33
ret lr
34
35
3: bic r1, r1, #3
36
ldr r3, [r1], #4
37
cmp ip, #2
38
blt 5f
39
bgt 6f
40
41
4: mov ip, r3, lspull #16
42
ldr r3, [r1], #4
43
subs r2, r2, #1
44
orr ip, ip, r3, lspush #16
45
str ip, [r0]
46
bne 4b
47
ret lr
48
49
5: mov ip, r3, lspull #8
50
ldr r3, [r1], #4
51
subs r2, r2, #1
52
orr ip, ip, r3, lspush #24
53
str ip, [r0]
54
bne 5b
55
ret lr
56
57
6: mov ip, r3, lspull #24
58
ldr r3, [r1], #4
59
subs r2, r2, #1
60
orr ip, ip, r3, lspush #8
61
str ip, [r0]
62
bne 6b
63
ret lr
64
ENDPROC(__raw_writesl)
65
66