Lines Matching +full:3 +full:- +full:n

1 /* SPDX-License-Identifier: GPL-2.0 */
2 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
20 unsigned long limit = current_thread_info()->addr_limit.seg; in access_ok()
37 * These are the main single-value transfer routines. They automatically
82 long __pu_err = -EFAULT; \
123 "1: stb %1, (%2,0) \n" \
124 " br 3f \n" \
125 "2: mov %0, %3 \n" \
126 " br 3f \n" \
127 ".section __ex_table, \"a\" \n" \
128 ".align 2 \n" \
129 ".long 1b,2b \n" \
130 ".previous \n" \
131 "3: \n" \
133 : "0"(err), "1"(x), "2"(ptr), "3"(-EFAULT) \
141 "1: sth %1, (%2,0) \n" \
142 " br 3f \n" \
143 "2: mov %0, %3 \n" \
144 " br 3f \n" \
145 ".section __ex_table, \"a\" \n" \
146 ".align 2 \n" \
147 ".long 1b,2b \n" \
148 ".previous \n" \
149 "3: \n" \
151 : "0"(err), "1"(x), "2"(ptr), "3"(-EFAULT) \
159 "1: stw %1, (%2,0) \n" \
160 " br 3f \n" \
161 "2: mov %0, %3 \n" \
162 " br 3f \n" \
163 ".section __ex_table,\"a\" \n" \
164 ".align 2 \n" \
165 ".long 1b, 2b \n" \
166 ".previous \n" \
167 "3: \n" \
169 : "0"(err), "1"(x), "2"(ptr), "3"(-EFAULT) \
181 " ldw %3, (%1, 0) \n" \
182 "1: stw %3, (%2, 0) \n" \
183 " ldw %3, (%1, 4) \n" \
184 "2: stw %3, (%2, 4) \n" \
185 " br 4f \n" \
186 "3: mov %0, %4 \n" \
187 " br 4f \n" \
188 ".section __ex_table, \"a\" \n" \
189 ".align 2 \n" \
190 ".long 1b, 3b \n" \
191 ".long 2b, 3b \n" \
192 ".previous \n" \
193 "4: \n" \
196 : "0"(err), "1"(psrc), "2"(ptr), "3"(0), "4"(-EFAULT) \
209 int __gu_err = -EFAULT; \
238 "1: " ins " %1, (%4,0) \n" \
239 " br 3f \n" \
241 "2: mov %0, %2 \n" \
242 " movi %1, 0 \n" \
243 " br 3f \n" \
244 ".section __ex_table,\"a\" \n" \
245 ".align 2 \n" \
246 ".long 1b, 2b \n" \
247 ".previous \n" \
248 "3: \n" \
250 : "0"(0), "r"(ptr), "2"(-EFAULT) \
256 #define ___copy_to_user(to, from, n) \ argument
260 "0: cmpnei %1, 0 \n" \
261 " bf 8f \n" \
262 " mov %3, %1 \n" \
263 " or %3, %2 \n" \
264 " andi %3, 3 \n" \
265 " cmpnei %3, 0 \n" \
266 " bf 1f \n" \
267 " br 5f \n" \
268 "1: cmplti %0, 16 \n" /* 4W */ \
269 " bt 3f \n" \
270 " ldw %3, (%2, 0) \n" \
271 " ldw %4, (%2, 4) \n" \
272 " ldw %5, (%2, 8) \n" \
273 " ldw %6, (%2, 12) \n" \
274 "2: stw %3, (%1, 0) \n" \
275 "9: stw %4, (%1, 4) \n" \
276 "10: stw %5, (%1, 8) \n" \
277 "11: stw %6, (%1, 12) \n" \
278 " addi %2, 16 \n" \
279 " addi %1, 16 \n" \
280 " subi %0, 16 \n" \
281 " br 1b \n" \
282 "3: cmplti %0, 4 \n" /* 1W */ \
283 " bt 5f \n" \
284 " ldw %3, (%2, 0) \n" \
285 "4: stw %3, (%1, 0) \n" \
286 " addi %2, 4 \n" \
287 " addi %1, 4 \n" \
288 " subi %0, 4 \n" \
289 " br 3b \n" \
290 "5: cmpnei %0, 0 \n" /* 1B */ \
291 " bf 13f \n" \
292 " ldb %3, (%2, 0) \n" \
293 "6: stb %3, (%1, 0) \n" \
294 " addi %2, 1 \n" \
295 " addi %1, 1 \n" \
296 " subi %0, 1 \n" \
297 " br 5b \n" \
298 "7: subi %0, 4 \n" \
299 "8: subi %0, 4 \n" \
300 "12: subi %0, 4 \n" \
301 " br 13f \n" \
302 ".section __ex_table, \"a\" \n" \
303 ".align 2 \n" \
304 ".long 2b, 13f \n" \
305 ".long 4b, 13f \n" \
306 ".long 6b, 13f \n" \
307 ".long 9b, 12b \n" \
308 ".long 10b, 8b \n" \
309 ".long 11b, 7b \n" \
310 ".previous \n" \
311 "13: \n" \
312 : "=r"(n), "=r"(to), "=r"(from), "=r"(w0), \
314 : "0"(n), "1"(to), "2"(from) \
318 #define ___copy_from_user(to, from, n) \ argument
323 "0: cmpnei %1, 0 \n" \
324 " bf 7f \n" \
325 " mov %3, %1 \n" \
326 " or %3, %2 \n" \
327 " andi %3, 3 \n" \
328 " cmpnei %3, 0 \n" \
329 " bf 1f \n" \
330 " br 5f \n" \
331 "1: cmplti %0, 16 \n" \
332 " bt 3f \n" \
333 "2: ldw %3, (%2, 0) \n" \
334 "10: ldw %4, (%2, 4) \n" \
335 " stw %3, (%1, 0) \n" \
336 " stw %4, (%1, 4) \n" \
337 "11: ldw %3, (%2, 8) \n" \
338 "12: ldw %4, (%2, 12) \n" \
339 " stw %3, (%1, 8) \n" \
340 " stw %4, (%1, 12) \n" \
341 " addi %2, 16 \n" \
342 " addi %1, 16 \n" \
343 " subi %0, 16 \n" \
344 " br 1b \n" \
345 "3: cmplti %0, 4 \n" \
346 " bt 5f \n" \
347 "4: ldw %3, (%2, 0) \n" \
348 " stw %3, (%1, 0) \n" \
349 " addi %2, 4 \n" \
350 " addi %1, 4 \n" \
351 " subi %0, 4 \n" \
352 " br 3b \n" \
353 "5: cmpnei %0, 0 \n" \
354 " bf 7f \n" \
355 "6: ldb %3, (%2, 0) \n" \
356 " stb %3, (%1, 0) \n" \
357 " addi %2, 1 \n" \
358 " addi %1, 1 \n" \
359 " subi %0, 1 \n" \
360 " br 5b \n" \
361 "8: stw %3, (%1, 0) \n" \
362 " subi %0, 4 \n" \
363 " bf 7f \n" \
364 "9: subi %0, 8 \n" \
365 " bf 7f \n" \
366 "13: stw %3, (%1, 8) \n" \
367 " subi %0, 12 \n" \
368 " bf 7f \n" \
369 ".section __ex_table, \"a\" \n" \
370 ".align 2 \n" \
371 ".long 2b, 7f \n" \
372 ".long 4b, 7f \n" \
373 ".long 6b, 7f \n" \
374 ".long 10b, 8b \n" \
375 ".long 11b, 9b \n" \
376 ".long 12b,13b \n" \
377 ".previous \n" \
378 "7: \n" \
379 : "=r"(n), "=r"(to), "=r"(from), "=r"(nsave), \
381 : "0"(n), "1"(to), "2"(from) \
385 unsigned long raw_copy_from_user(void *to, const void *from, unsigned long n);
386 unsigned long raw_copy_to_user(void *to, const void *from, unsigned long n);
388 unsigned long clear_user(void *to, unsigned long n);
389 unsigned long __clear_user(void __user *to, unsigned long n);
397 * Return 0 on exception, a value greater than N if too long
399 long strnlen_user(const char *src, long n);