OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [sparc/] [lib/] [strlen_user.S] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 xianfeng
/* 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
 
14
10:
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
22
11:
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
30
12:
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
37
1:
38
        retl
39
         mov    1, %o0
40
2:
41
        retl
42
         mov    2, %o0
43
3:
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
58
4:
59
        sethi   %hi(LO_MAGIC), %o4
60
5:
61
        or      %o4, %lo(LO_MAGIC), %o2
62
13:
63
        ld      [%o0], %o5
64
2:
65
        sub     %o5, %o2, %o4
66
        andcc   %o4, %o3, %g0
67
        bne     82f
68
         add    %o0, 4, %o0
69
        sub     %o0, %o1, %g2
70
81:     cmp     %g2, %g1
71
        blu     13b
72
         mov    %o0, %o4
73
        ba,a    1f
74
 
75
        /* Check every byte. */
76
82:     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
93
1:
94
        retl
95
         sub    %o4, %o1, %o0
96
 
97
        .section .fixup,#alloc,#execinstr
98
        .align  4
99
9:
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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.