2 * linux/arch/arm/lib/io-readsb.S
4 * Copyright (C) 1995-2000 Russell King
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
10 #include <linux/linkage.h>
11 #include <asm/assembler.h>
12 #include <asm/export.h>
14 .Linsb_align: rsb ip, ip, #4
28 teq r2, #0 @ do we have to check for the zero len?
33 .Linsb_aligned: stmfd sp!, {r4 - r6, lr}
38 .Linsb_16_lp: ldrb r3, [r0]
41 mov r3, r3, put_byte_0
43 orr r3, r3, r4, put_byte_1
45 orr r3, r3, r5, put_byte_2
47 orr r3, r3, r6, put_byte_3
49 mov r4, r4, put_byte_0
51 orr r4, r4, r5, put_byte_1
53 orr r4, r4, r6, put_byte_2
55 orr r4, r4, ip, put_byte_3
57 mov r5, r5, put_byte_0
59 orr r5, r5, r6, put_byte_1
61 orr r5, r5, ip, put_byte_2
63 orr r5, r5, lr, put_byte_3
65 mov r6, r6, put_byte_0
66 orr r6, r6, ip, put_byte_1
68 orr r6, r6, lr, put_byte_2
69 orr r6, r6, ip, put_byte_3
76 ldmeqfd sp!, {r4 - r6, pc}
78 .Linsb_no_16: tst r2, #8
84 mov r3, r3, put_byte_0
86 orr r3, r3, r4, put_byte_1
88 orr r3, r3, r5, put_byte_2
90 orr r3, r3, r6, put_byte_3
92 mov r4, r4, put_byte_0
94 orr r4, r4, r5, put_byte_1
95 orr r4, r4, r6, put_byte_2
96 orr r4, r4, ip, put_byte_3
99 .Linsb_no_8: tst r2, #4
106 mov r3, r3, put_byte_0
107 orr r3, r3, r4, put_byte_1
108 orr r3, r3, r5, put_byte_2
109 orr r3, r3, r6, put_byte_3
112 .Linsb_no_4: ands r2, r2, #3
113 ldmeqfd sp!, {r4 - r6, pc}
123 ldmfd sp!, {r4 - r6, pc}
124 ENDPROC(__raw_readsb)
125 EXPORT_SYMBOL(__raw_readsb)