]> Git Repo - linux.git/blame - arch/arm/lib/io-readsb.S
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
[linux.git] / arch / arm / lib / io-readsb.S
CommitLineData
d2912cb1 1/* SPDX-License-Identifier: GPL-2.0-only */
1da177e4
LT
2/*
3 * linux/arch/arm/lib/io-readsb.S
4 *
5 * Copyright (C) 1995-2000 Russell King
1da177e4
LT
6 */
7#include <linux/linkage.h>
8#include <asm/assembler.h>
9
a9c4814d 10.Linsb_align: rsb ip, ip, #4
1da177e4
LT
11 cmp ip, r2
12 movgt ip, r2
13 cmp ip, #2
14 ldrb r3, [r0]
15 strb r3, [r1], #1
e44fc388
SA
16 ldrbge r3, [r0]
17 strbge r3, [r1], #1
18 ldrbgt r3, [r0]
19 strbgt r3, [r1], #1
1da177e4 20 subs r2, r2, ip
a9c4814d 21 bne .Linsb_aligned
1da177e4
LT
22
23ENTRY(__raw_readsb)
24 teq r2, #0 @ do we have to check for the zero len?
6ebbf2ce 25 reteq lr
1da177e4 26 ands ip, r1, #3
a9c4814d 27 bne .Linsb_align
1da177e4 28
a9c4814d 29.Linsb_aligned: stmfd sp!, {r4 - r6, lr}
1da177e4
LT
30
31 subs r2, r2, #16
a9c4814d 32 bmi .Linsb_no_16
1da177e4 33
a9c4814d 34.Linsb_16_lp: ldrb r3, [r0]
1da177e4
LT
35 ldrb r4, [r0]
36 ldrb r5, [r0]
37 mov r3, r3, put_byte_0
38 ldrb r6, [r0]
39 orr r3, r3, r4, put_byte_1
40 ldrb r4, [r0]
41 orr r3, r3, r5, put_byte_2
42 ldrb r5, [r0]
43 orr r3, r3, r6, put_byte_3
44 ldrb r6, [r0]
45 mov r4, r4, put_byte_0
46 ldrb ip, [r0]
47 orr r4, r4, r5, put_byte_1
48 ldrb r5, [r0]
49 orr r4, r4, r6, put_byte_2
50 ldrb r6, [r0]
51 orr r4, r4, ip, put_byte_3
52 ldrb ip, [r0]
53 mov r5, r5, put_byte_0
54 ldrb lr, [r0]
55 orr r5, r5, r6, put_byte_1
56 ldrb r6, [r0]
57 orr r5, r5, ip, put_byte_2
58 ldrb ip, [r0]
59 orr r5, r5, lr, put_byte_3
60 ldrb lr, [r0]
61 mov r6, r6, put_byte_0
62 orr r6, r6, ip, put_byte_1
63 ldrb ip, [r0]
64 orr r6, r6, lr, put_byte_2
65 orr r6, r6, ip, put_byte_3
66 stmia r1!, {r3 - r6}
67
68 subs r2, r2, #16
a9c4814d 69 bpl .Linsb_16_lp
1da177e4
LT
70
71 tst r2, #15
e44fc388 72 ldmfdeq sp!, {r4 - r6, pc}
1da177e4 73
a9c4814d
NP
74.Linsb_no_16: tst r2, #8
75 beq .Linsb_no_8
1da177e4
LT
76
77 ldrb r3, [r0]
78 ldrb r4, [r0]
79 ldrb r5, [r0]
80 mov r3, r3, put_byte_0
81 ldrb r6, [r0]
82 orr r3, r3, r4, put_byte_1
83 ldrb r4, [r0]
84 orr r3, r3, r5, put_byte_2
85 ldrb r5, [r0]
86 orr r3, r3, r6, put_byte_3
87 ldrb r6, [r0]
88 mov r4, r4, put_byte_0
89 ldrb ip, [r0]
90 orr r4, r4, r5, put_byte_1
91 orr r4, r4, r6, put_byte_2
92 orr r4, r4, ip, put_byte_3
93 stmia r1!, {r3, r4}
94
a9c4814d
NP
95.Linsb_no_8: tst r2, #4
96 beq .Linsb_no_4
1da177e4
LT
97
98 ldrb r3, [r0]
99 ldrb r4, [r0]
100 ldrb r5, [r0]
101 ldrb r6, [r0]
102 mov r3, r3, put_byte_0
103 orr r3, r3, r4, put_byte_1
104 orr r3, r3, r5, put_byte_2
105 orr r3, r3, r6, put_byte_3
106 str r3, [r1], #4
107
a9c4814d 108.Linsb_no_4: ands r2, r2, #3
e44fc388 109 ldmfdeq sp!, {r4 - r6, pc}
1da177e4
LT
110
111 cmp r2, #2
112 ldrb r3, [r0]
113 strb r3, [r1], #1
e44fc388
SA
114 ldrbge r3, [r0]
115 strbge r3, [r1], #1
116 ldrbgt r3, [r0]
117 strbgt r3, [r1]
1da177e4 118
1b93a717 119 ldmfd sp!, {r4 - r6, pc}
93ed3970 120ENDPROC(__raw_readsb)
This page took 0.88928 seconds and 4 git commands to generate.