Root/arch/sparc/lib/strlen_user_32.S

Source at commit 0de2b2b3be81048189a32f7a3d3ba0ba9ec817b6 created 11 years 11 months ago.
By Maarten ter Huurne, MIPS: JZ4740: Fixed value for round robin constant.
1/* strlen_user.S: Sparc optimized strlen_user code
2 *
3 * Return length of string in userspace including terminating 0
4 * or 0 for error
5 *
6 * Copyright (C) 1991,1996 Free Software Foundation
7 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
8 * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
9 */
10
11#define LO_MAGIC 0x01010101
12#define HI_MAGIC 0x80808080
13
1410:
15    ldub [%o0], %o5
16    cmp %o5, 0
17    be 1f
18     add %o0, 1, %o0
19    andcc %o0, 3, %g0
20    be 4f
21     or %o4, %lo(HI_MAGIC), %o3
2211:
23    ldub [%o0], %o5
24    cmp %o5, 0
25    be 2f
26     add %o0, 1, %o0
27    andcc %o0, 3, %g0
28    be 5f
29     sethi %hi(LO_MAGIC), %o4
3012:
31    ldub [%o0], %o5
32    cmp %o5, 0
33    be 3f
34     add %o0, 1, %o0
35    b 13f
36     or %o4, %lo(LO_MAGIC), %o2
371:
38    retl
39     mov 1, %o0
402:
41    retl
42     mov 2, %o0
433:
44    retl
45     mov 3, %o0
46
47    .align 4
48    .global __strlen_user, __strnlen_user
49__strlen_user:
50    sethi %hi(32768), %o1
51__strnlen_user:
52    mov %o1, %g1
53    mov %o0, %o1
54    andcc %o0, 3, %g0
55    bne 10b
56     sethi %hi(HI_MAGIC), %o4
57    or %o4, %lo(HI_MAGIC), %o3
584:
59    sethi %hi(LO_MAGIC), %o4
605:
61    or %o4, %lo(LO_MAGIC), %o2
6213:
63    ld [%o0], %o5
642:
65    sub %o5, %o2, %o4
66    andcc %o4, %o3, %g0
67    bne 82f
68     add %o0, 4, %o0
69    sub %o0, %o1, %g2
7081: cmp %g2, %g1
71    blu 13b
72     mov %o0, %o4
73    ba,a 1f
74
75    /* Check every byte. */
7682: srl %o5, 24, %g5
77    andcc %g5, 0xff, %g0
78    be 1f
79     add %o0, -3, %o4
80    srl %o5, 16, %g5
81    andcc %g5, 0xff, %g0
82    be 1f
83     add %o4, 1, %o4
84    srl %o5, 8, %g5
85    andcc %g5, 0xff, %g0
86    be 1f
87     add %o4, 1, %o4
88    andcc %o5, 0xff, %g0
89    bne 81b
90     sub %o0, %o1, %g2
91
92    add %o4, 1, %o4
931:
94    retl
95     sub %o4, %o1, %o0
96
97    .section .fixup,#alloc,#execinstr
98    .align 4
999:
100    retl
101     clr %o0
102
103    .section __ex_table,#alloc
104    .align 4
105
106    .word 10b, 9b
107    .word 11b, 9b
108    .word 12b, 9b
109    .word 13b, 9b
110

Archive Download this file



interactive