Last change
on this file since 444 was
444,
checked in by satin@…, 6 years ago
|
add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc
|
File size:
1.3 KB
|
Line | |
---|
1 | ! Entry: arg0: string start address |
---|
2 | ! Exit: result: length |
---|
3 | ! |
---|
4 | ! Copyright 2002 SuperH Ltd. |
---|
5 | |
---|
6 | #include "asm.h" |
---|
7 | |
---|
8 | ENTRY(strlen) |
---|
9 | |
---|
10 | #if __SHMEDIA__ |
---|
11 | |
---|
12 | ldlo.q r2,0,r3 |
---|
13 | ptabs/l r18,tr0 |
---|
14 | pta/l loop,tr1 |
---|
15 | andi r2,-8,r0 |
---|
16 | shlli r2,3,r1 |
---|
17 | mcmpeq.b r3,r63,r3 |
---|
18 | SHHI r3,r1,r4 |
---|
19 | beqi/u r4,0,tr1 // loop |
---|
20 | #ifdef __LITTLE_ENDIAN__ |
---|
21 | movi -1,r2 |
---|
22 | addi r3,-1,r4 |
---|
23 | msad.ubq r3,r4,r2 |
---|
24 | #else |
---|
25 | shlri r3,1,r3 |
---|
26 | nsb r3,r3 |
---|
27 | shlri r3,3,r2 |
---|
28 | #endif |
---|
29 | blink tr0,r63 |
---|
30 | |
---|
31 | loop: |
---|
32 | ldlo.q r0,8,r3 |
---|
33 | addi r0,8,r0 |
---|
34 | ldlo.q r0,8,r63 |
---|
35 | mcmpeq.b r3,r63,r3 |
---|
36 | beqi/l r3,0,tr1 // loop |
---|
37 | sub r0,r2,r2 |
---|
38 | #ifdef __LITTLE_ENDIAN__ |
---|
39 | addi r3,-1,r4 |
---|
40 | addi r2,-1,r2 |
---|
41 | msad.ubq r3,r4,r2 |
---|
42 | #else |
---|
43 | shlri r3,1,r3 |
---|
44 | nsb r3,r3 |
---|
45 | shlri r3,3,r3 |
---|
46 | add r2,r3,r2 |
---|
47 | #endif |
---|
48 | blink tr0,r63 |
---|
49 | |
---|
50 | #else /* ! __SHMEDIA__, i.e. SH 1..4 / SHcompact */ |
---|
51 | |
---|
52 | #ifdef __SH5__ |
---|
53 | #define STR_INIT r2 |
---|
54 | #define STR_ORIG r0 |
---|
55 | #define STR_COPY STR_ORIG |
---|
56 | #define MASK r1 |
---|
57 | #define TMP r3 |
---|
58 | #define RESULT r2 |
---|
59 | ! r0,r1,r3: clobbered |
---|
60 | #else |
---|
61 | #define STR_INIT r4 |
---|
62 | #define STR_ORIG STR_INIT |
---|
63 | #define STR_COPY STR |
---|
64 | #define MASK r1 |
---|
65 | #define TMP r3 |
---|
66 | #define RESULT r0 |
---|
67 | ! r1,r3: clobbered |
---|
68 | #endif |
---|
69 | #define STR RESULT |
---|
70 | |
---|
71 | mov #3,MASK |
---|
72 | and STR_INIT,MASK |
---|
73 | tst MASK,MASK |
---|
74 | SL(bf, L_char_loop, mov STR_INIT, STR_COPY) |
---|
75 | L_word_loop: |
---|
76 | mov.l @STR+,TMP |
---|
77 | cmp/str MASK,TMP |
---|
78 | bf L_word_loop |
---|
79 | add #-4,STR |
---|
80 | L_char_loop: |
---|
81 | mov.b @STR+,TMP |
---|
82 | tst TMP,TMP |
---|
83 | bf L_char_loop |
---|
84 | add #-1,STR |
---|
85 | rts |
---|
86 | sub STR_ORIG,STR |
---|
87 | #endif /* ! __SHMEDIA__ */ |
---|
Note: See
TracBrowser
for help on using the repository browser.