Adrian Bunk | 88278ca | 2008-05-19 16:53:02 -0700 | [diff] [blame] | 1 | /* |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 2 | * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc |
3 | * generic strncmp routine. | ||||
4 | */ | ||||
5 | |||||
6 | .text | ||||
7 | .align 4 | ||||
8 | .global __strncmp, strncmp | ||||
9 | __strncmp: | ||||
10 | strncmp: | ||||
11 | mov %o0, %g3 | ||||
12 | mov 0, %o3 | ||||
13 | |||||
14 | cmp %o2, 3 | ||||
15 | ble 7f | ||||
16 | mov 0, %g2 | ||||
17 | |||||
18 | sra %o2, 2, %o4 | ||||
19 | ldub [%g3], %o3 | ||||
20 | |||||
21 | 0: | ||||
22 | ldub [%o1], %g2 | ||||
23 | add %g3, 1, %g3 | ||||
24 | and %o3, 0xff, %o0 | ||||
25 | |||||
26 | cmp %o0, 0 | ||||
27 | be 8f | ||||
28 | add %o1, 1, %o1 | ||||
29 | |||||
30 | cmp %o0, %g2 | ||||
31 | be,a 1f | ||||
32 | ldub [%g3], %o3 | ||||
33 | |||||
34 | retl | ||||
35 | sub %o0, %g2, %o0 | ||||
36 | |||||
37 | 1: | ||||
38 | ldub [%o1], %g2 | ||||
39 | add %g3,1, %g3 | ||||
40 | and %o3, 0xff, %o0 | ||||
41 | |||||
42 | cmp %o0, 0 | ||||
43 | be 8f | ||||
44 | add %o1, 1, %o1 | ||||
45 | |||||
46 | cmp %o0, %g2 | ||||
47 | be,a 1f | ||||
48 | ldub [%g3], %o3 | ||||
49 | |||||
50 | retl | ||||
51 | sub %o0, %g2, %o0 | ||||
52 | |||||
53 | 1: | ||||
54 | ldub [%o1], %g2 | ||||
55 | add %g3, 1, %g3 | ||||
56 | and %o3, 0xff, %o0 | ||||
57 | |||||
58 | cmp %o0, 0 | ||||
59 | be 8f | ||||
60 | add %o1, 1, %o1 | ||||
61 | |||||
62 | cmp %o0, %g2 | ||||
63 | be,a 1f | ||||
64 | ldub [%g3], %o3 | ||||
65 | |||||
66 | retl | ||||
67 | sub %o0, %g2, %o0 | ||||
68 | |||||
69 | 1: | ||||
70 | ldub [%o1], %g2 | ||||
71 | add %g3, 1, %g3 | ||||
72 | and %o3, 0xff, %o0 | ||||
73 | |||||
74 | cmp %o0, 0 | ||||
75 | be 8f | ||||
76 | add %o1, 1, %o1 | ||||
77 | |||||
78 | cmp %o0, %g2 | ||||
79 | be 1f | ||||
80 | add %o4, -1, %o4 | ||||
81 | |||||
82 | retl | ||||
83 | sub %o0, %g2, %o0 | ||||
84 | |||||
85 | 1: | ||||
86 | |||||
87 | cmp %o4, 0 | ||||
88 | bg,a 0b | ||||
89 | ldub [%g3], %o3 | ||||
90 | |||||
91 | b 7f | ||||
92 | and %o2, 3, %o2 | ||||
93 | |||||
94 | 9: | ||||
95 | ldub [%o1], %g2 | ||||
96 | add %g3, 1, %g3 | ||||
97 | and %o3, 0xff, %o0 | ||||
98 | |||||
99 | cmp %o0, 0 | ||||
100 | be 8f | ||||
101 | add %o1, 1, %o1 | ||||
102 | |||||
103 | cmp %o0, %g2 | ||||
104 | be 7f | ||||
105 | add %o2, -1, %o2 | ||||
106 | |||||
107 | 8: | ||||
108 | retl | ||||
109 | sub %o0, %g2, %o0 | ||||
110 | |||||
111 | 7: | ||||
112 | cmp %o2, 0 | ||||
113 | bg,a 9b | ||||
114 | ldub [%g3], %o3 | ||||
115 | |||||
116 | and %g2, 0xff, %o0 | ||||
117 | retl | ||||
118 | sub %o3, %o0, %o0 |