Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm/lib/io-readsl.S
26295 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* linux/arch/arm/lib/io-readsl.S
4
*
5
* Copyright (C) 1995-2000 Russell King
6
*/
7
#include <linux/linkage.h>
8
#include <asm/assembler.h>
9
10
ENTRY(__raw_readsl)
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: ldr r3, [r0, #0]
20
ldr r4, [r0, #0]
21
ldr ip, [r0, #0]
22
ldr lr, [r0, #0]
23
subs r2, r2, #4
24
stmia r1!, {r3, r4, ip, lr}
25
bpl 1b
26
ldmfd sp!, {r4, lr}
27
2: movs r2, r2, lsl #31
28
ldrcs r3, [r0, #0]
29
ldrcs ip, [r0, #0]
30
stmiacs r1!, {r3, ip}
31
ldrne r3, [r0, #0]
32
strne r3, [r1, #0]
33
ret lr
34
35
3: ldr r3, [r0]
36
cmp ip, #2
37
mov ip, r3, get_byte_0
38
strb ip, [r1], #1
39
bgt 6f
40
mov ip, r3, get_byte_1
41
strb ip, [r1], #1
42
beq 5f
43
mov ip, r3, get_byte_2
44
strb ip, [r1], #1
45
46
4: subs r2, r2, #1
47
mov ip, r3, lspull #24
48
ldrne r3, [r0]
49
orrne ip, ip, r3, lspush #8
50
strne ip, [r1], #4
51
bne 4b
52
b 8f
53
54
5: subs r2, r2, #1
55
mov ip, r3, lspull #16
56
ldrne r3, [r0]
57
orrne ip, ip, r3, lspush #16
58
strne ip, [r1], #4
59
bne 5b
60
b 7f
61
62
6: subs r2, r2, #1
63
mov ip, r3, lspull #8
64
ldrne r3, [r0]
65
orrne ip, ip, r3, lspush #24
66
strne ip, [r1], #4
67
bne 6b
68
69
mov r3, ip, get_byte_2
70
strb r3, [r1, #2]
71
7: mov r3, ip, get_byte_1
72
strb r3, [r1, #1]
73
8: mov r3, ip, get_byte_0
74
strb r3, [r1, #0]
75
ret lr
76
ENDPROC(__raw_readsl)
77
78