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

1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
6 * -__clear_user( ) called multiple times during elf load was byte loop
10 * -Hand crafted constant propagation for "constant" copy sizes
11 * -stock kernel shrunk by 33K at -O3
14 * -Added option to (UN)inline copy_(to|from)_user to reduce code sz
15 * -kernel shrunk by 200K even at -O3 (gcc 4.2.1)
16 * -Enabled when doing -Os
32 * where TASK_SIZE could either be retrieved from thread_info->addr_limit or
39 * non-ngeative, which implies that buffer start will be within limit too.
42 * compile time constant, causing first sub-expression to be compile time
45 * The second part would generate weird large LIMMs e.g. (0x6000_0000 - 0x10),
51 ((addr) <= (get_fs() - (sz))))
70 * Returns 0 on success, -EFAULT if not.
71 * @ret already contains 0 - given that errors will be less likely
73 * In case of error, fixup code will make it -EFAULT
77 "1: "op" %1,[%2]\n" \
78 "2: ;nop\n" \
79 " .section .fixup, \"ax\"\n" \
80 " .align 4\n" \
81 "3: # return -EFAULT\n" \
82 " mov %0, %3\n" \
83 " # zero out dst ptr\n" \
84 " mov %1, 0\n" \
85 " j 2b\n" \
86 " .previous\n" \
87 " .section __ex_table, \"a\"\n" \
88 " .align 4\n" \
89 " .word 1b,3b\n" \
90 " .previous\n" \
93 : "r" (src), "ir" (-EFAULT))
97 "1: ld %1,[%2]\n" \
98 "4: ld %R1,[%2, 4]\n" \
99 "2: ;nop\n" \
100 " .section .fixup, \"ax\"\n" \
101 " .align 4\n" \
102 "3: # return -EFAULT\n" \
103 " mov %0, %3\n" \
104 " # zero out dst ptr\n" \
105 " mov %1, 0\n" \
106 " mov %R1, 0\n" \
107 " j 2b\n" \
108 " .previous\n" \
109 " .section __ex_table, \"a\"\n" \
110 " .align 4\n" \
111 " .word 1b,3b\n" \
112 " .word 4b,3b\n" \
113 " .previous\n" \
116 : "r" (src), "ir" (-EFAULT))
132 "1: "op" %1,[%2]\n" \
133 "2: ;nop\n" \
134 " .section .fixup, \"ax\"\n" \
135 " .align 4\n" \
136 "3: mov %0, %3\n" \
137 " j 2b\n" \
138 " .previous\n" \
139 " .section __ex_table, \"a\"\n" \
140 " .align 4\n" \
141 " .word 1b,3b\n" \
142 " .previous\n" \
145 : "r" (src), "r" (dst), "ir" (-EFAULT))
149 "1: st %1,[%2]\n" \
150 "4: st %R1,[%2, 4]\n" \
151 "2: ;nop\n" \
152 " .section .fixup, \"ax\"\n" \
153 " .align 4\n" \
154 "3: mov %0, %3\n" \
155 " j 2b\n" \
156 " .previous\n" \
157 " .section __ex_table, \"a\"\n" \
158 " .align 4\n" \
159 " .word 1b,3b\n" \
160 " .word 4b,3b\n" \
161 " .previous\n" \
164 : "r" (src), "r" (dst), "ir" (-EFAULT))
168 raw_copy_from_user(void *to, const void __user *from, unsigned long n) in raw_copy_from_user() argument
173 unsigned long orig_n = n; in raw_copy_from_user()
175 if (n == 0) in raw_copy_from_user()
184 " mov.f lp_count, %0 \n" in raw_copy_from_user()
185 " lpnz 2f \n" in raw_copy_from_user()
186 "1: ldb.ab %1, [%3, 1] \n" in raw_copy_from_user()
187 " stb.ab %1, [%2, 1] \n" in raw_copy_from_user()
188 " sub %0,%0,1 \n" in raw_copy_from_user()
189 "2: ;nop \n" in raw_copy_from_user()
190 " .section .fixup, \"ax\" \n" in raw_copy_from_user()
191 " .align 4 \n" in raw_copy_from_user()
192 "3: j 2b \n" in raw_copy_from_user()
193 " .previous \n" in raw_copy_from_user()
194 " .section __ex_table, \"a\" \n" in raw_copy_from_user()
195 " .align 4 \n" in raw_copy_from_user()
196 " .word 1b, 3b \n" in raw_copy_from_user()
197 " .previous \n" in raw_copy_from_user()
199 : "+r" (n), in raw_copy_from_user()
209 return n; in raw_copy_from_user()
213 * Hand-crafted constant propagation to reduce code sz of the in raw_copy_from_user()
223 " lsr lp_count, %7,4 \n" in raw_copy_from_user()
224 " lp 3f \n" in raw_copy_from_user()
225 "1: ld.ab %3, [%2, 4] \n" in raw_copy_from_user()
226 "11: ld.ab %4, [%2, 4] \n" in raw_copy_from_user()
227 "12: ld.ab %5, [%2, 4] \n" in raw_copy_from_user()
228 "13: ld.ab %6, [%2, 4] \n" in raw_copy_from_user()
229 " st.ab %3, [%1, 4] \n" in raw_copy_from_user()
230 " st.ab %4, [%1, 4] \n" in raw_copy_from_user()
231 " st.ab %5, [%1, 4] \n" in raw_copy_from_user()
232 " st.ab %6, [%1, 4] \n" in raw_copy_from_user()
233 " sub %0,%0,16 \n" in raw_copy_from_user()
234 "3: ;nop \n" in raw_copy_from_user()
235 " .section .fixup, \"ax\" \n" in raw_copy_from_user()
236 " .align 4 \n" in raw_copy_from_user()
237 "4: j 3b \n" in raw_copy_from_user()
238 " .previous \n" in raw_copy_from_user()
239 " .section __ex_table, \"a\" \n" in raw_copy_from_user()
240 " .align 4 \n" in raw_copy_from_user()
241 " .word 1b, 4b \n" in raw_copy_from_user()
242 " .word 11b,4b \n" in raw_copy_from_user()
243 " .word 12b,4b \n" in raw_copy_from_user()
244 " .word 13b,4b \n" in raw_copy_from_user()
245 " .previous \n" in raw_copy_from_user()
248 : "ir"(n) in raw_copy_from_user()
255 "14: ld.ab %3, [%2,4] \n" in raw_copy_from_user()
256 "15: ld.ab %4, [%2,4] \n" in raw_copy_from_user()
257 " st.ab %3, [%1,4] \n" in raw_copy_from_user()
258 " st.ab %4, [%1,4] \n" in raw_copy_from_user()
259 " sub %0,%0,8 \n" in raw_copy_from_user()
260 "31: ;nop \n" in raw_copy_from_user()
261 " .section .fixup, \"ax\" \n" in raw_copy_from_user()
262 " .align 4 \n" in raw_copy_from_user()
263 "4: j 31b \n" in raw_copy_from_user()
264 " .previous \n" in raw_copy_from_user()
265 " .section __ex_table, \"a\" \n" in raw_copy_from_user()
266 " .align 4 \n" in raw_copy_from_user()
267 " .word 14b,4b \n" in raw_copy_from_user()
268 " .word 15b,4b \n" in raw_copy_from_user()
269 " .previous \n" in raw_copy_from_user()
279 "16: ld.ab %3, [%2,4] \n" in raw_copy_from_user()
280 " st.ab %3, [%1,4] \n" in raw_copy_from_user()
281 " sub %0,%0,4 \n" in raw_copy_from_user()
282 "32: ;nop \n" in raw_copy_from_user()
283 " .section .fixup, \"ax\" \n" in raw_copy_from_user()
284 " .align 4 \n" in raw_copy_from_user()
285 "4: j 32b \n" in raw_copy_from_user()
286 " .previous \n" in raw_copy_from_user()
287 " .section __ex_table, \"a\" \n" in raw_copy_from_user()
288 " .align 4 \n" in raw_copy_from_user()
289 " .word 16b,4b \n" in raw_copy_from_user()
290 " .previous \n" in raw_copy_from_user()
299 "17: ldw.ab %3, [%2,2] \n" in raw_copy_from_user()
300 " stw.ab %3, [%1,2] \n" in raw_copy_from_user()
301 " sub %0,%0,2 \n" in raw_copy_from_user()
302 "33: ;nop \n" in raw_copy_from_user()
303 " .section .fixup, \"ax\" \n" in raw_copy_from_user()
304 " .align 4 \n" in raw_copy_from_user()
305 "4: j 33b \n" in raw_copy_from_user()
306 " .previous \n" in raw_copy_from_user()
307 " .section __ex_table, \"a\" \n" in raw_copy_from_user()
308 " .align 4 \n" in raw_copy_from_user()
309 " .word 17b,4b \n" in raw_copy_from_user()
310 " .previous \n" in raw_copy_from_user()
317 "18: ldb.ab %3, [%2,2] \n" in raw_copy_from_user()
318 " stb.ab %3, [%1,2] \n" in raw_copy_from_user()
319 " sub %0,%0,1 \n" in raw_copy_from_user()
320 "34: ; nop \n" in raw_copy_from_user()
321 " .section .fixup, \"ax\" \n" in raw_copy_from_user()
322 " .align 4 \n" in raw_copy_from_user()
323 "4: j 34b \n" in raw_copy_from_user()
324 " .previous \n" in raw_copy_from_user()
325 " .section __ex_table, \"a\" \n" in raw_copy_from_user()
326 " .align 4 \n" in raw_copy_from_user()
327 " .word 18b,4b \n" in raw_copy_from_user()
328 " .previous \n" in raw_copy_from_user()
333 } else { /* n is NOT constant, so laddered copy of 16x,8,4,2,1 */ in raw_copy_from_user()
336 " mov %0,%3 \n" in raw_copy_from_user()
337 " lsr.f lp_count, %3,4 \n" /* 16x bytes */ in raw_copy_from_user()
338 " lpnz 3f \n" in raw_copy_from_user()
339 "1: ld.ab %5, [%2, 4] \n" in raw_copy_from_user()
340 "11: ld.ab %6, [%2, 4] \n" in raw_copy_from_user()
341 "12: ld.ab %7, [%2, 4] \n" in raw_copy_from_user()
342 "13: ld.ab %8, [%2, 4] \n" in raw_copy_from_user()
343 " st.ab %5, [%1, 4] \n" in raw_copy_from_user()
344 " st.ab %6, [%1, 4] \n" in raw_copy_from_user()
345 " st.ab %7, [%1, 4] \n" in raw_copy_from_user()
346 " st.ab %8, [%1, 4] \n" in raw_copy_from_user()
347 " sub %0,%0,16 \n" in raw_copy_from_user()
348 "3: and.f %3,%3,0xf \n" /* stragglers */ in raw_copy_from_user()
349 " bz 34f \n" in raw_copy_from_user()
350 " bbit0 %3,3,31f \n" /* 8 bytes left */ in raw_copy_from_user()
351 "14: ld.ab %5, [%2,4] \n" in raw_copy_from_user()
352 "15: ld.ab %6, [%2,4] \n" in raw_copy_from_user()
353 " st.ab %5, [%1,4] \n" in raw_copy_from_user()
354 " st.ab %6, [%1,4] \n" in raw_copy_from_user()
355 " sub.f %0,%0,8 \n" in raw_copy_from_user()
356 "31: bbit0 %3,2,32f \n" /* 4 bytes left */ in raw_copy_from_user()
357 "16: ld.ab %5, [%2,4] \n" in raw_copy_from_user()
358 " st.ab %5, [%1,4] \n" in raw_copy_from_user()
359 " sub.f %0,%0,4 \n" in raw_copy_from_user()
360 "32: bbit0 %3,1,33f \n" /* 2 bytes left */ in raw_copy_from_user()
361 "17: ldw.ab %5, [%2,2] \n" in raw_copy_from_user()
362 " stw.ab %5, [%1,2] \n" in raw_copy_from_user()
363 " sub.f %0,%0,2 \n" in raw_copy_from_user()
364 "33: bbit0 %3,0,34f \n" in raw_copy_from_user()
365 "18: ldb.ab %5, [%2,1] \n" /* 1 byte left */ in raw_copy_from_user()
366 " stb.ab %5, [%1,1] \n" in raw_copy_from_user()
367 " sub.f %0,%0,1 \n" in raw_copy_from_user()
368 "34: ;nop \n" in raw_copy_from_user()
369 " .section .fixup, \"ax\" \n" in raw_copy_from_user()
370 " .align 4 \n" in raw_copy_from_user()
371 "4: j 34b \n" in raw_copy_from_user()
372 " .previous \n" in raw_copy_from_user()
373 " .section __ex_table, \"a\" \n" in raw_copy_from_user()
374 " .align 4 \n" in raw_copy_from_user()
375 " .word 1b, 4b \n" in raw_copy_from_user()
376 " .word 11b,4b \n" in raw_copy_from_user()
377 " .word 12b,4b \n" in raw_copy_from_user()
378 " .word 13b,4b \n" in raw_copy_from_user()
379 " .word 14b,4b \n" in raw_copy_from_user()
380 " .word 15b,4b \n" in raw_copy_from_user()
381 " .word 16b,4b \n" in raw_copy_from_user()
382 " .word 17b,4b \n" in raw_copy_from_user()
383 " .word 18b,4b \n" in raw_copy_from_user()
384 " .previous \n" in raw_copy_from_user()
385 : "=r" (res), "+r"(to), "+r"(from), "+r"(n), "=r"(val), in raw_copy_from_user()
395 raw_copy_to_user(void __user *to, const void *from, unsigned long n) in raw_copy_to_user() argument
400 unsigned long orig_n = n; in raw_copy_to_user()
402 if (n == 0) in raw_copy_to_user()
411 " mov.f lp_count, %0 \n" in raw_copy_to_user()
412 " lpnz 3f \n" in raw_copy_to_user()
413 " ldb.ab %1, [%3, 1] \n" in raw_copy_to_user()
414 "1: stb.ab %1, [%2, 1] \n" in raw_copy_to_user()
415 " sub %0, %0, 1 \n" in raw_copy_to_user()
416 "3: ;nop \n" in raw_copy_to_user()
417 " .section .fixup, \"ax\" \n" in raw_copy_to_user()
418 " .align 4 \n" in raw_copy_to_user()
419 "4: j 3b \n" in raw_copy_to_user()
420 " .previous \n" in raw_copy_to_user()
421 " .section __ex_table, \"a\" \n" in raw_copy_to_user()
422 " .align 4 \n" in raw_copy_to_user()
423 " .word 1b, 4b \n" in raw_copy_to_user()
424 " .previous \n" in raw_copy_to_user()
426 : "+r" (n), in raw_copy_to_user()
435 return n; in raw_copy_to_user()
445 " lsr lp_count, %7,4 \n" in raw_copy_to_user()
446 " lp 3f \n" in raw_copy_to_user()
447 " ld.ab %3, [%2, 4] \n" in raw_copy_to_user()
448 " ld.ab %4, [%2, 4] \n" in raw_copy_to_user()
449 " ld.ab %5, [%2, 4] \n" in raw_copy_to_user()
450 " ld.ab %6, [%2, 4] \n" in raw_copy_to_user()
451 "1: st.ab %3, [%1, 4] \n" in raw_copy_to_user()
452 "11: st.ab %4, [%1, 4] \n" in raw_copy_to_user()
453 "12: st.ab %5, [%1, 4] \n" in raw_copy_to_user()
454 "13: st.ab %6, [%1, 4] \n" in raw_copy_to_user()
455 " sub %0, %0, 16 \n" in raw_copy_to_user()
456 "3:;nop \n" in raw_copy_to_user()
457 " .section .fixup, \"ax\" \n" in raw_copy_to_user()
458 " .align 4 \n" in raw_copy_to_user()
459 "4: j 3b \n" in raw_copy_to_user()
460 " .previous \n" in raw_copy_to_user()
461 " .section __ex_table, \"a\" \n" in raw_copy_to_user()
462 " .align 4 \n" in raw_copy_to_user()
463 " .word 1b, 4b \n" in raw_copy_to_user()
464 " .word 11b,4b \n" in raw_copy_to_user()
465 " .word 12b,4b \n" in raw_copy_to_user()
466 " .word 13b,4b \n" in raw_copy_to_user()
467 " .previous \n" in raw_copy_to_user()
470 : "ir"(n) in raw_copy_to_user()
477 " ld.ab %3, [%2,4] \n" in raw_copy_to_user()
478 " ld.ab %4, [%2,4] \n" in raw_copy_to_user()
479 "14: st.ab %3, [%1,4] \n" in raw_copy_to_user()
480 "15: st.ab %4, [%1,4] \n" in raw_copy_to_user()
481 " sub %0, %0, 8 \n" in raw_copy_to_user()
482 "31:;nop \n" in raw_copy_to_user()
483 " .section .fixup, \"ax\" \n" in raw_copy_to_user()
484 " .align 4 \n" in raw_copy_to_user()
485 "4: j 31b \n" in raw_copy_to_user()
486 " .previous \n" in raw_copy_to_user()
487 " .section __ex_table, \"a\" \n" in raw_copy_to_user()
488 " .align 4 \n" in raw_copy_to_user()
489 " .word 14b,4b \n" in raw_copy_to_user()
490 " .word 15b,4b \n" in raw_copy_to_user()
491 " .previous \n" in raw_copy_to_user()
501 " ld.ab %3, [%2,4] \n" in raw_copy_to_user()
502 "16: st.ab %3, [%1,4] \n" in raw_copy_to_user()
503 " sub %0, %0, 4 \n" in raw_copy_to_user()
504 "32:;nop \n" in raw_copy_to_user()
505 " .section .fixup, \"ax\" \n" in raw_copy_to_user()
506 " .align 4 \n" in raw_copy_to_user()
507 "4: j 32b \n" in raw_copy_to_user()
508 " .previous \n" in raw_copy_to_user()
509 " .section __ex_table, \"a\" \n" in raw_copy_to_user()
510 " .align 4 \n" in raw_copy_to_user()
511 " .word 16b,4b \n" in raw_copy_to_user()
512 " .previous \n" in raw_copy_to_user()
521 " ldw.ab %3, [%2,2] \n" in raw_copy_to_user()
522 "17: stw.ab %3, [%1,2] \n" in raw_copy_to_user()
523 " sub %0, %0, 2 \n" in raw_copy_to_user()
524 "33:;nop \n" in raw_copy_to_user()
525 " .section .fixup, \"ax\" \n" in raw_copy_to_user()
526 " .align 4 \n" in raw_copy_to_user()
527 "4: j 33b \n" in raw_copy_to_user()
528 " .previous \n" in raw_copy_to_user()
529 " .section __ex_table, \"a\" \n" in raw_copy_to_user()
530 " .align 4 \n" in raw_copy_to_user()
531 " .word 17b,4b \n" in raw_copy_to_user()
532 " .previous \n" in raw_copy_to_user()
539 " ldb.ab %3, [%2,1] \n" in raw_copy_to_user()
540 "18: stb.ab %3, [%1,1] \n" in raw_copy_to_user()
541 " sub %0, %0, 1 \n" in raw_copy_to_user()
542 "34: ;nop \n" in raw_copy_to_user()
543 " .section .fixup, \"ax\" \n" in raw_copy_to_user()
544 " .align 4 \n" in raw_copy_to_user()
545 "4: j 34b \n" in raw_copy_to_user()
546 " .previous \n" in raw_copy_to_user()
547 " .section __ex_table, \"a\" \n" in raw_copy_to_user()
548 " .align 4 \n" in raw_copy_to_user()
549 " .word 18b,4b \n" in raw_copy_to_user()
550 " .previous \n" in raw_copy_to_user()
555 } else { /* n is NOT constant, so laddered copy of 16x,8,4,2,1 */ in raw_copy_to_user()
558 " mov %0,%3 \n" in raw_copy_to_user()
559 " lsr.f lp_count, %3,4 \n" /* 16x bytes */ in raw_copy_to_user()
560 " lpnz 3f \n" in raw_copy_to_user()
561 " ld.ab %5, [%2, 4] \n" in raw_copy_to_user()
562 " ld.ab %6, [%2, 4] \n" in raw_copy_to_user()
563 " ld.ab %7, [%2, 4] \n" in raw_copy_to_user()
564 " ld.ab %8, [%2, 4] \n" in raw_copy_to_user()
565 "1: st.ab %5, [%1, 4] \n" in raw_copy_to_user()
566 "11: st.ab %6, [%1, 4] \n" in raw_copy_to_user()
567 "12: st.ab %7, [%1, 4] \n" in raw_copy_to_user()
568 "13: st.ab %8, [%1, 4] \n" in raw_copy_to_user()
569 " sub %0, %0, 16 \n" in raw_copy_to_user()
570 "3: and.f %3,%3,0xf \n" /* stragglers */ in raw_copy_to_user()
571 " bz 34f \n" in raw_copy_to_user()
572 " bbit0 %3,3,31f \n" /* 8 bytes left */ in raw_copy_to_user()
573 " ld.ab %5, [%2,4] \n" in raw_copy_to_user()
574 " ld.ab %6, [%2,4] \n" in raw_copy_to_user()
575 "14: st.ab %5, [%1,4] \n" in raw_copy_to_user()
576 "15: st.ab %6, [%1,4] \n" in raw_copy_to_user()
577 " sub.f %0, %0, 8 \n" in raw_copy_to_user()
578 "31: bbit0 %3,2,32f \n" /* 4 bytes left */ in raw_copy_to_user()
579 " ld.ab %5, [%2,4] \n" in raw_copy_to_user()
580 "16: st.ab %5, [%1,4] \n" in raw_copy_to_user()
581 " sub.f %0, %0, 4 \n" in raw_copy_to_user()
582 "32: bbit0 %3,1,33f \n" /* 2 bytes left */ in raw_copy_to_user()
583 " ldw.ab %5, [%2,2] \n" in raw_copy_to_user()
584 "17: stw.ab %5, [%1,2] \n" in raw_copy_to_user()
585 " sub.f %0, %0, 2 \n" in raw_copy_to_user()
586 "33: bbit0 %3,0,34f \n" in raw_copy_to_user()
587 " ldb.ab %5, [%2,1] \n" /* 1 byte left */ in raw_copy_to_user()
588 "18: stb.ab %5, [%1,1] \n" in raw_copy_to_user()
589 " sub.f %0, %0, 1 \n" in raw_copy_to_user()
590 "34: ;nop \n" in raw_copy_to_user()
591 " .section .fixup, \"ax\" \n" in raw_copy_to_user()
592 " .align 4 \n" in raw_copy_to_user()
593 "4: j 34b \n" in raw_copy_to_user()
594 " .previous \n" in raw_copy_to_user()
595 " .section __ex_table, \"a\" \n" in raw_copy_to_user()
596 " .align 4 \n" in raw_copy_to_user()
597 " .word 1b, 4b \n" in raw_copy_to_user()
598 " .word 11b,4b \n" in raw_copy_to_user()
599 " .word 12b,4b \n" in raw_copy_to_user()
600 " .word 13b,4b \n" in raw_copy_to_user()
601 " .word 14b,4b \n" in raw_copy_to_user()
602 " .word 15b,4b \n" in raw_copy_to_user()
603 " .word 16b,4b \n" in raw_copy_to_user()
604 " .word 17b,4b \n" in raw_copy_to_user()
605 " .word 18b,4b \n" in raw_copy_to_user()
606 " .previous \n" in raw_copy_to_user()
607 : "=r" (res), "+r"(to), "+r"(from), "+r"(n), "=r"(val), in raw_copy_to_user()
616 static inline unsigned long __arc_clear_user(void __user *to, unsigned long n) in __arc_clear_user() argument
618 long res = n; in __arc_clear_user()
622 " bbit0 %0, 0, 1f \n" in __arc_clear_user()
623 "75: stb.ab %2, [%0,1] \n" in __arc_clear_user()
624 " sub %1, %1, 1 \n" in __arc_clear_user()
625 "1: bbit0 %0, 1, 2f \n" in __arc_clear_user()
626 "76: stw.ab %2, [%0,2] \n" in __arc_clear_user()
627 " sub %1, %1, 2 \n" in __arc_clear_user()
628 "2: asr.f lp_count, %1, 2 \n" in __arc_clear_user()
629 " lpnz 3f \n" in __arc_clear_user()
630 "77: st.ab %2, [%0,4] \n" in __arc_clear_user()
631 " sub %1, %1, 4 \n" in __arc_clear_user()
632 "3: bbit0 %1, 1, 4f \n" in __arc_clear_user()
633 "78: stw.ab %2, [%0,2] \n" in __arc_clear_user()
634 " sub %1, %1, 2 \n" in __arc_clear_user()
635 "4: bbit0 %1, 0, 5f \n" in __arc_clear_user()
636 "79: stb.ab %2, [%0,1] \n" in __arc_clear_user()
637 " sub %1, %1, 1 \n" in __arc_clear_user()
638 "5: \n" in __arc_clear_user()
639 " .section .fixup, \"ax\" \n" in __arc_clear_user()
640 " .align 4 \n" in __arc_clear_user()
641 "3: j 5b \n" in __arc_clear_user()
642 " .previous \n" in __arc_clear_user()
643 " .section __ex_table, \"a\" \n" in __arc_clear_user()
644 " .align 4 \n" in __arc_clear_user()
645 " .word 75b, 3b \n" in __arc_clear_user()
646 " .word 76b, 3b \n" in __arc_clear_user()
647 " .word 77b, 3b \n" in __arc_clear_user()
648 " .word 78b, 3b \n" in __arc_clear_user()
649 " .word 79b, 3b \n" in __arc_clear_user()
650 " .previous \n" in __arc_clear_user()
668 " mov lp_count, %5 \n" in __arc_strncpy_from_user()
669 " lp 3f \n" in __arc_strncpy_from_user()
670 "1: ldb.ab %3, [%2, 1] \n" in __arc_strncpy_from_user()
671 " breq.d %3, 0, 3f \n" in __arc_strncpy_from_user()
672 " stb.ab %3, [%1, 1] \n" in __arc_strncpy_from_user()
673 " add %0, %0, 1 # Num of NON NULL bytes copied \n" in __arc_strncpy_from_user()
674 "3: \n" in __arc_strncpy_from_user()
675 " .section .fixup, \"ax\" \n" in __arc_strncpy_from_user()
676 " .align 4 \n" in __arc_strncpy_from_user()
677 "4: mov %0, %4 # sets @res as -EFAULT \n" in __arc_strncpy_from_user()
678 " j 3b \n" in __arc_strncpy_from_user()
679 " .previous \n" in __arc_strncpy_from_user()
680 " .section __ex_table, \"a\" \n" in __arc_strncpy_from_user()
681 " .align 4 \n" in __arc_strncpy_from_user()
682 " .word 1b, 4b \n" in __arc_strncpy_from_user()
683 " .previous \n" in __arc_strncpy_from_user()
685 : "g"(-EFAULT), "r"(count) in __arc_strncpy_from_user()
691 static inline long __arc_strnlen_user(const char __user *s, long n) in __arc_strnlen_user() argument
697 " mov %2, %1 \n" in __arc_strnlen_user()
698 "1: ldb.ab %3, [%0, 1] \n" in __arc_strnlen_user()
699 " breq.d %3, 0, 2f \n" in __arc_strnlen_user()
700 " sub.f %2, %2, 1 \n" in __arc_strnlen_user()
701 " bnz 1b \n" in __arc_strnlen_user()
702 " sub %2, %2, 1 \n" in __arc_strnlen_user()
703 "2: sub %0, %1, %2 \n" in __arc_strnlen_user()
704 "3: ;nop \n" in __arc_strnlen_user()
705 " .section .fixup, \"ax\" \n" in __arc_strnlen_user()
706 " .align 4 \n" in __arc_strnlen_user()
707 "4: mov %0, 0 \n" in __arc_strnlen_user()
708 " j 3b \n" in __arc_strnlen_user()
709 " .previous \n" in __arc_strnlen_user()
710 " .section __ex_table, \"a\" \n" in __arc_strnlen_user()
711 " .align 4 \n" in __arc_strnlen_user()
712 " .word 1b, 4b \n" in __arc_strnlen_user()
713 " .previous \n" in __arc_strnlen_user()
715 : "0"(s), "1"(n) in __arc_strnlen_user()
726 #define __clear_user(d, n) __arc_clear_user(d, n) argument
727 #define __strncpy_from_user(d, s, n) __arc_strncpy_from_user(d, s, n) argument
728 #define __strnlen_user(s, n) __arc_strnlen_user(s, n) argument
731 unsigned long n);
734 extern long arc_strnlen_user_noinline(const char __user *src, long n);
736 #define __clear_user(d, n) arc_clear_user_noinline(d, n) argument
737 #define __strncpy_from_user(d, s, n) arc_strncpy_from_user_noinline(d, s, n) argument
738 #define __strnlen_user(s, n) arc_strnlen_user_noinline(s, n) argument
743 #include <asm-generic/uaccess.h>