Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/score/lib/string.S
10817 views
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 <[email protected]>
8
* Lennox Wu <[email protected]>
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
br r3
179
.previous
180
.section __ex_table, "a"
181
.align 2
182
99:
183
.word 0b, 99b
184
.previous
185
186