Merge branches 'arm/rockchip', 'arm/exynos', 'arm/smmu', 'x86/vt-d', 'x86/amd', ...
[sfrench/cifs-2.6.git] / arch / score / lib / string.S
1 /*
2  * arch/score/lib/string.S
3  *
4  * Score Processor version.
5  *
6  * Copyright (C) 2009 Sunplus Core Technology Co., Ltd.
7  *  Chen Liqin <liqin.chen@sunplusct.com>
8  *  Lennox Wu <lennox.wu@sunplusct.com>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, see the file COPYING, or write
22  * to the Free Software Foundation, Inc.,
23  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
24  */
25
26 #include <linux/linkage.h>
27 #include <asm-generic/errno.h>
28
29         .text
30         .align 2
31 ENTRY(__strncpy_from_user)
32         cmpi.c  r6, 0
33         mv      r9, r6
34         ble     .L2
35 0:      lbu     r7, [r5]
36         ldi     r8, 0
37 1:      sb      r7, [r4]
38 2:      lb      r6, [r5]
39         cmp.c   r6, r8
40         beq     .L2
41
42 .L5:
43         addi    r8, 1
44         cmp.c   r8, r9
45         beq     .L7
46 3:      lbu     r6, [r5, 1]+
47 4:      sb      r6, [r4, 1]+
48 5:      lb      r7, [r5]
49         cmpi.c  r7, 0
50         bne     .L5
51 .L7:
52         mv      r4, r8
53         br      r3
54 .L2:
55         ldi     r8, 0
56         mv      r4, r8
57         br      r3
58         .section .fixup, "ax"
59 99:
60         ldi     r4, -EFAULT
61         br      r3
62         .previous
63         .section __ex_table, "a"
64         .align  2
65         .word   0b ,99b
66         .word   1b ,99b
67         .word   2b ,99b
68         .word   3b ,99b
69         .word   4b ,99b
70         .word   5b ,99b
71         .previous
72
73         .align 2
74 ENTRY(__strnlen_user)
75         cmpi.c  r5, 0
76         ble     .L11
77 0:      lb      r6, [r4]
78         ldi     r7, 0
79         cmp.c   r6, r7
80         beq     .L11
81 .L15:
82         addi    r7, 1
83         cmp.c   r7, r5
84         beq     .L23
85 1:      lb      r6, [r4,1]+
86         cmpi.c  r6, 0
87         bne     .L15
88 .L23:
89         addri   r4, r7, 1
90         br      r3
91
92 .L11:
93         ldi     r4, 1
94         br      r3
95         .section .fixup, "ax"
96 99:
97         ldi     r4, 0
98         br      r3
99
100         .section __ex_table,"a"
101         .align 2
102         .word   0b, 99b
103         .word   1b, 99b
104         .previous
105
106         .align 2
107 ENTRY(__strlen_user)
108 0:      lb      r6, [r4]
109         mv      r7, r4
110         extsb   r6, r6
111         cmpi.c  r6, 0
112         mv      r4, r6
113         beq     .L27
114 .L28:
115 1:      lb      r6, [r7, 1]+
116         addi    r6, 1
117         cmpi.c  r6, 0
118         bne     .L28
119 .L27:
120         br      r3
121         .section .fixup, "ax"
122         ldi     r4, 0x0
123         br      r3
124 99:
125         ldi     r4, 0
126         br      r3
127         .previous
128         .section __ex_table, "a"
129         .align  2
130         .word   0b ,99b
131         .word   1b ,99b
132         .previous
133
134         .align 2
135 ENTRY(__copy_tofrom_user)
136         cmpi.c  r6, 0
137         mv      r10,r6
138         beq     .L32
139         ldi     r9, 0
140 .L34:
141         add     r6, r5, r9
142 0:      lbu     r8, [r6]
143         add     r7, r4, r9
144 1:      sb      r8, [r7]
145         addi    r9, 1
146         cmp.c   r9, r10
147         bne     .L34
148 .L32:
149         ldi     r4, 0
150         br      r3
151         .section .fixup, "ax"
152 99:
153         sub     r4, r10, r9
154         br      r3
155         .previous
156         .section __ex_table, "a"
157         .align  2
158         .word   0b, 99b
159         .word   1b, 99b
160         .previous
161
162         .align 2
163 ENTRY(__clear_user)
164         cmpi.c  r5, 0
165         beq     .L38
166         ldi     r6, 0
167         mv      r7, r6
168 .L40:
169         addi    r6, 1
170 0:      sb      r7, [r4]+, 1
171         cmp.c   r6, r5
172         bne     .L40
173 .L38:
174         ldi     r4, 0
175         br      r3
176
177         .section .fixup, "ax"
178 99:
179         br      r3
180         .previous
181         .section __ex_table, "a"
182         .align  2
183         .word   0b, 99b
184         .previous