Lines Matching +full:0 +full:- +full:4
2 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
9 * -__clear_user( ) called multiple times during elf load was byte loop
13 * -Hand crafted constant propagation for "constant" copy sizes
14 * -stock kernel shrunk by 33K at -O3
17 * -Added option to (UN)inline copy_(to|from)_user to reduce code sz
18 * -kernel shrunk by 200K even at -O3 (gcc 4.2.1)
19 * -Enabled when doing -Os
35 * where TASK_SIZE could either be retrieved from thread_info->addr_limit or
42 * non-ngeative, which implies that buffer start will be within limit too.
45 * compile time constant, causing first sub-expression to be compile time
48 * The second part would generate weird large LIMMs e.g. (0x6000_0000 - 0x10),
54 ((addr) <= (get_fs() - (sz))))
62 long __ret = 0; /* success by default */ \
66 case 4: __arc_get_user_one(*(k), u, "ld", __ret); break; \
73 * Returns 0 on success, -EFAULT if not.
74 * @ret already contains 0 - given that errors will be less likely
76 * In case of error, fixup code will make it -EFAULT
83 " .align 4\n" \
84 "3: # return -EFAULT\n" \
85 " mov %0, %3\n" \
87 " mov %1, 0\n" \
91 " .align 4\n" \
96 : "r" (src), "ir" (-EFAULT))
101 "4: ld %R1,[%2, 4]\n" \
104 " .align 4\n" \
105 "3: # return -EFAULT\n" \
106 " mov %0, %3\n" \
108 " mov %1, 0\n" \
109 " mov %R1, 0\n" \
113 " .align 4\n" \
115 " .word 4b,3b\n" \
119 : "r" (src), "ir" (-EFAULT))
123 long __ret = 0; /* success by default */ \
127 case 4: __arc_put_user_one(*(k), u, "st", __ret); break; \
138 " .align 4\n" \
139 "3: mov %0, %3\n" \
143 " .align 4\n" \
148 : "r" (src), "r" (dst), "ir" (-EFAULT))
153 "4: st %R1,[%2, 4]\n" \
156 " .align 4\n" \
157 "3: mov %0, %3\n" \
161 " .align 4\n" \
163 " .word 4b,3b\n" \
167 : "r" (src), "r" (dst), "ir" (-EFAULT))
173 long res = 0; in raw_copy_from_user()
178 if (n == 0) in raw_copy_from_user()
179 return 0; in raw_copy_from_user()
182 if (((unsigned long)to & 0x3) || ((unsigned long)from & 0x3)) { in raw_copy_from_user()
187 " mov.f lp_count, %0 \n" in raw_copy_from_user()
191 " sub %0,%0,1 \n" in raw_copy_from_user()
194 " .align 4 \n" in raw_copy_from_user()
198 " .align 4 \n" in raw_copy_from_user()
216 * Hand-crafted constant propagation to reduce code sz of the in raw_copy_from_user()
217 * laddered copy 16x,8,4,2,1 in raw_copy_from_user()
226 " lsr lp_count, %7,4 \n" in raw_copy_from_user()
228 "1: ld.ab %3, [%2, 4] \n" in raw_copy_from_user()
229 "11: ld.ab %4, [%2, 4] \n" in raw_copy_from_user()
230 "12: ld.ab %5, [%2, 4] \n" in raw_copy_from_user()
231 "13: ld.ab %6, [%2, 4] \n" in raw_copy_from_user()
232 " st.ab %3, [%1, 4] \n" in raw_copy_from_user()
233 " st.ab %4, [%1, 4] \n" in raw_copy_from_user()
234 " st.ab %5, [%1, 4] \n" in raw_copy_from_user()
235 " st.ab %6, [%1, 4] \n" in raw_copy_from_user()
236 " sub %0,%0,16 \n" in raw_copy_from_user()
239 " .align 4 \n" in raw_copy_from_user()
240 "4: j 3b \n" in raw_copy_from_user()
243 " .align 4 \n" in raw_copy_from_user()
244 " .word 1b, 4b \n" in raw_copy_from_user()
245 " .word 11b,4b \n" in raw_copy_from_user()
246 " .word 12b,4b \n" in raw_copy_from_user()
247 " .word 13b,4b \n" in raw_copy_from_user()
258 "14: ld.ab %3, [%2,4] \n" in raw_copy_from_user()
259 "15: ld.ab %4, [%2,4] \n" in raw_copy_from_user()
260 " st.ab %3, [%1,4] \n" in raw_copy_from_user()
261 " st.ab %4, [%1,4] \n" in raw_copy_from_user()
262 " sub %0,%0,8 \n" in raw_copy_from_user()
265 " .align 4 \n" in raw_copy_from_user()
266 "4: j 31b \n" in raw_copy_from_user()
269 " .align 4 \n" in raw_copy_from_user()
270 " .word 14b,4b \n" in raw_copy_from_user()
271 " .word 15b,4b \n" in raw_copy_from_user()
278 if (orig_n / 4) { in raw_copy_from_user()
279 orig_n = orig_n % 4; in raw_copy_from_user()
282 "16: ld.ab %3, [%2,4] \n" in raw_copy_from_user()
283 " st.ab %3, [%1,4] \n" in raw_copy_from_user()
284 " sub %0,%0,4 \n" in raw_copy_from_user()
287 " .align 4 \n" in raw_copy_from_user()
288 "4: j 32b \n" in raw_copy_from_user()
291 " .align 4 \n" in raw_copy_from_user()
292 " .word 16b,4b \n" in raw_copy_from_user()
304 " sub %0,%0,2 \n" in raw_copy_from_user()
307 " .align 4 \n" in raw_copy_from_user()
308 "4: j 33b \n" in raw_copy_from_user()
311 " .align 4 \n" in raw_copy_from_user()
312 " .word 17b,4b \n" in raw_copy_from_user()
322 " sub %0,%0,1 \n" in raw_copy_from_user()
325 " .align 4 \n" in raw_copy_from_user()
326 "4: j 34b \n" in raw_copy_from_user()
329 " .align 4 \n" in raw_copy_from_user()
330 " .word 18b,4b \n" in raw_copy_from_user()
336 } else { /* n is NOT constant, so laddered copy of 16x,8,4,2,1 */ in raw_copy_from_user()
339 " mov %0,%3 \n" in raw_copy_from_user()
340 " lsr.f lp_count, %3,4 \n" /* 16x bytes */ in raw_copy_from_user()
342 "1: ld.ab %5, [%2, 4] \n" in raw_copy_from_user()
343 "11: ld.ab %6, [%2, 4] \n" in raw_copy_from_user()
344 "12: ld.ab %7, [%2, 4] \n" in raw_copy_from_user()
345 "13: ld.ab %8, [%2, 4] \n" in raw_copy_from_user()
346 " st.ab %5, [%1, 4] \n" in raw_copy_from_user()
347 " st.ab %6, [%1, 4] \n" in raw_copy_from_user()
348 " st.ab %7, [%1, 4] \n" in raw_copy_from_user()
349 " st.ab %8, [%1, 4] \n" in raw_copy_from_user()
350 " sub %0,%0,16 \n" in raw_copy_from_user()
351 "3: and.f %3,%3,0xf \n" /* stragglers */ in raw_copy_from_user()
354 "14: ld.ab %5, [%2,4] \n" in raw_copy_from_user()
355 "15: ld.ab %6, [%2,4] \n" in raw_copy_from_user()
356 " st.ab %5, [%1,4] \n" in raw_copy_from_user()
357 " st.ab %6, [%1,4] \n" in raw_copy_from_user()
358 " sub.f %0,%0,8 \n" in raw_copy_from_user()
359 "31: bbit0 %3,2,32f \n" /* 4 bytes left */ in raw_copy_from_user()
360 "16: ld.ab %5, [%2,4] \n" in raw_copy_from_user()
361 " st.ab %5, [%1,4] \n" in raw_copy_from_user()
362 " sub.f %0,%0,4 \n" in raw_copy_from_user()
366 " sub.f %0,%0,2 \n" in raw_copy_from_user()
367 "33: bbit0 %3,0,34f \n" in raw_copy_from_user()
370 " sub.f %0,%0,1 \n" in raw_copy_from_user()
373 " .align 4 \n" in raw_copy_from_user()
374 "4: j 34b \n" in raw_copy_from_user()
377 " .align 4 \n" in raw_copy_from_user()
378 " .word 1b, 4b \n" in raw_copy_from_user()
379 " .word 11b,4b \n" in raw_copy_from_user()
380 " .word 12b,4b \n" in raw_copy_from_user()
381 " .word 13b,4b \n" in raw_copy_from_user()
382 " .word 14b,4b \n" in raw_copy_from_user()
383 " .word 15b,4b \n" in raw_copy_from_user()
384 " .word 16b,4b \n" in raw_copy_from_user()
385 " .word 17b,4b \n" in raw_copy_from_user()
386 " .word 18b,4b \n" in raw_copy_from_user()
400 long res = 0; in raw_copy_to_user()
405 if (n == 0) in raw_copy_to_user()
406 return 0; in raw_copy_to_user()
409 if (((unsigned long)to & 0x3) || ((unsigned long)from & 0x3)) { in raw_copy_to_user()
414 " mov.f lp_count, %0 \n" in raw_copy_to_user()
418 " sub %0, %0, 1 \n" in raw_copy_to_user()
421 " .align 4 \n" in raw_copy_to_user()
422 "4: j 3b \n" in raw_copy_to_user()
425 " .align 4 \n" in raw_copy_to_user()
426 " .word 1b, 4b \n" in raw_copy_to_user()
448 " lsr lp_count, %7,4 \n" in raw_copy_to_user()
450 " ld.ab %3, [%2, 4] \n" in raw_copy_to_user()
451 " ld.ab %4, [%2, 4] \n" in raw_copy_to_user()
452 " ld.ab %5, [%2, 4] \n" in raw_copy_to_user()
453 " ld.ab %6, [%2, 4] \n" in raw_copy_to_user()
454 "1: st.ab %3, [%1, 4] \n" in raw_copy_to_user()
455 "11: st.ab %4, [%1, 4] \n" in raw_copy_to_user()
456 "12: st.ab %5, [%1, 4] \n" in raw_copy_to_user()
457 "13: st.ab %6, [%1, 4] \n" in raw_copy_to_user()
458 " sub %0, %0, 16 \n" in raw_copy_to_user()
461 " .align 4 \n" in raw_copy_to_user()
462 "4: j 3b \n" in raw_copy_to_user()
465 " .align 4 \n" in raw_copy_to_user()
466 " .word 1b, 4b \n" in raw_copy_to_user()
467 " .word 11b,4b \n" in raw_copy_to_user()
468 " .word 12b,4b \n" in raw_copy_to_user()
469 " .word 13b,4b \n" in raw_copy_to_user()
480 " ld.ab %3, [%2,4] \n" in raw_copy_to_user()
481 " ld.ab %4, [%2,4] \n" in raw_copy_to_user()
482 "14: st.ab %3, [%1,4] \n" in raw_copy_to_user()
483 "15: st.ab %4, [%1,4] \n" in raw_copy_to_user()
484 " sub %0, %0, 8 \n" in raw_copy_to_user()
487 " .align 4 \n" in raw_copy_to_user()
488 "4: j 31b \n" in raw_copy_to_user()
491 " .align 4 \n" in raw_copy_to_user()
492 " .word 14b,4b \n" in raw_copy_to_user()
493 " .word 15b,4b \n" in raw_copy_to_user()
500 if (orig_n / 4) { in raw_copy_to_user()
501 orig_n = orig_n % 4; in raw_copy_to_user()
504 " ld.ab %3, [%2,4] \n" in raw_copy_to_user()
505 "16: st.ab %3, [%1,4] \n" in raw_copy_to_user()
506 " sub %0, %0, 4 \n" in raw_copy_to_user()
509 " .align 4 \n" in raw_copy_to_user()
510 "4: j 32b \n" in raw_copy_to_user()
513 " .align 4 \n" in raw_copy_to_user()
514 " .word 16b,4b \n" in raw_copy_to_user()
526 " sub %0, %0, 2 \n" in raw_copy_to_user()
529 " .align 4 \n" in raw_copy_to_user()
530 "4: j 33b \n" in raw_copy_to_user()
533 " .align 4 \n" in raw_copy_to_user()
534 " .word 17b,4b \n" in raw_copy_to_user()
544 " sub %0, %0, 1 \n" in raw_copy_to_user()
547 " .align 4 \n" in raw_copy_to_user()
548 "4: j 34b \n" in raw_copy_to_user()
551 " .align 4 \n" in raw_copy_to_user()
552 " .word 18b,4b \n" in raw_copy_to_user()
558 } else { /* n is NOT constant, so laddered copy of 16x,8,4,2,1 */ in raw_copy_to_user()
561 " mov %0,%3 \n" in raw_copy_to_user()
562 " lsr.f lp_count, %3,4 \n" /* 16x bytes */ in raw_copy_to_user()
564 " ld.ab %5, [%2, 4] \n" in raw_copy_to_user()
565 " ld.ab %6, [%2, 4] \n" in raw_copy_to_user()
566 " ld.ab %7, [%2, 4] \n" in raw_copy_to_user()
567 " ld.ab %8, [%2, 4] \n" in raw_copy_to_user()
568 "1: st.ab %5, [%1, 4] \n" in raw_copy_to_user()
569 "11: st.ab %6, [%1, 4] \n" in raw_copy_to_user()
570 "12: st.ab %7, [%1, 4] \n" in raw_copy_to_user()
571 "13: st.ab %8, [%1, 4] \n" in raw_copy_to_user()
572 " sub %0, %0, 16 \n" in raw_copy_to_user()
573 "3: and.f %3,%3,0xf \n" /* stragglers */ in raw_copy_to_user()
576 " ld.ab %5, [%2,4] \n" in raw_copy_to_user()
577 " ld.ab %6, [%2,4] \n" in raw_copy_to_user()
578 "14: st.ab %5, [%1,4] \n" in raw_copy_to_user()
579 "15: st.ab %6, [%1,4] \n" in raw_copy_to_user()
580 " sub.f %0, %0, 8 \n" in raw_copy_to_user()
581 "31: bbit0 %3,2,32f \n" /* 4 bytes left */ in raw_copy_to_user()
582 " ld.ab %5, [%2,4] \n" in raw_copy_to_user()
583 "16: st.ab %5, [%1,4] \n" in raw_copy_to_user()
584 " sub.f %0, %0, 4 \n" in raw_copy_to_user()
588 " sub.f %0, %0, 2 \n" in raw_copy_to_user()
589 "33: bbit0 %3,0,34f \n" in raw_copy_to_user()
592 " sub.f %0, %0, 1 \n" in raw_copy_to_user()
595 " .align 4 \n" in raw_copy_to_user()
596 "4: j 34b \n" in raw_copy_to_user()
599 " .align 4 \n" in raw_copy_to_user()
600 " .word 1b, 4b \n" in raw_copy_to_user()
601 " .word 11b,4b \n" in raw_copy_to_user()
602 " .word 12b,4b \n" in raw_copy_to_user()
603 " .word 13b,4b \n" in raw_copy_to_user()
604 " .word 14b,4b \n" in raw_copy_to_user()
605 " .word 15b,4b \n" in raw_copy_to_user()
606 " .word 16b,4b \n" in raw_copy_to_user()
607 " .word 17b,4b \n" in raw_copy_to_user()
608 " .word 18b,4b \n" in raw_copy_to_user()
625 " bbit0 %0, 0, 1f \n" in __arc_clear_user()
626 "75: stb.ab %2, [%0,1] \n" in __arc_clear_user()
628 "1: bbit0 %0, 1, 2f \n" in __arc_clear_user()
629 "76: stw.ab %2, [%0,2] \n" in __arc_clear_user()
633 "77: st.ab %2, [%0,4] \n" in __arc_clear_user()
634 " sub %1, %1, 4 \n" in __arc_clear_user()
635 "3: bbit0 %1, 1, 4f \n" in __arc_clear_user()
636 "78: stw.ab %2, [%0,2] \n" in __arc_clear_user()
638 "4: bbit0 %1, 0, 5f \n" in __arc_clear_user()
639 "79: stb.ab %2, [%0,1] \n" in __arc_clear_user()
643 " .align 4 \n" in __arc_clear_user()
647 " .align 4 \n" in __arc_clear_user()
655 : "i"(0) in __arc_clear_user()
664 long res = 0; in __arc_strncpy_from_user()
667 if (count == 0) in __arc_strncpy_from_user()
668 return 0; in __arc_strncpy_from_user()
674 " breq.d %3, 0, 3f \n" in __arc_strncpy_from_user()
676 " add %0, %0, 1 # Num of NON NULL bytes copied \n" in __arc_strncpy_from_user()
679 " .align 4 \n" in __arc_strncpy_from_user()
680 "4: mov %0, %4 # sets @res as -EFAULT \n" in __arc_strncpy_from_user()
684 " .align 4 \n" in __arc_strncpy_from_user()
685 " .word 1b, 4b \n" in __arc_strncpy_from_user()
688 : "g"(-EFAULT), "r"(count) in __arc_strncpy_from_user()
701 "1: ldb.ab %3, [%0, 1] \n" in __arc_strnlen_user()
702 " breq.d %3, 0, 2f \n" in __arc_strnlen_user()
706 "2: sub %0, %1, %2 \n" in __arc_strnlen_user()
709 " .align 4 \n" in __arc_strnlen_user()
710 "4: mov %0, 0 \n" in __arc_strnlen_user()
714 " .align 4 \n" in __arc_strnlen_user()
715 " .word 1b, 4b \n" in __arc_strnlen_user()
718 : "0"(s), "1"(n) in __arc_strnlen_user()
745 #include <asm-generic/uaccess.h>