]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libc/mips/strchr.s
sdiahci, sdodin: avoid calling kproc() while holding ilock()
[plan9front.git] / sys / src / libc / mips / strchr.s
1         TEXT    strchr(SB), $0
2 MOVW R1, 0(FP)
3         MOVB    c+7(FP), R4
4         MOVW    s+0(FP), R3
5
6         BEQ     R4, l2
7
8 /*
9  * char is not null
10  */
11 l1:
12         MOVB    (R3), R1
13         ADDU    $1, R3
14         BEQ     R1, ret
15         BNE     R1,R4, l1
16         JMP     rm1
17
18 /*
19  * char is null
20  * align to word
21  */
22 l2:
23         AND     $3,R3, R1
24         BEQ     R1, l3
25         MOVB    (R3), R1
26         ADDU    $1, R3
27         BNE     R1, l2
28         JMP     rm1
29
30 l3:
31         MOVW    $0xff000000, R6
32         MOVW    $0x00ff0000, R7
33
34 l4:
35         MOVW    (R3), R5
36         ADDU    $4, R3
37         AND     R6,R5, R1
38         AND     R7,R5, R2
39         BEQ     R1, b0
40         AND     $0xff00,R5, R1
41         BEQ     R2, b1
42         AND     $0xff,R5, R2
43         BEQ     R1, b2
44         BNE     R2, l4
45
46 rm1:
47         ADDU    $-1,R3, R1
48         JMP     ret
49
50 b2:
51         ADDU    $-2,R3, R1
52         JMP     ret
53
54 b1:
55         ADDU    $-3,R3, R1
56         JMP     ret
57
58 b0:
59         ADDU    $-4,R3, R1
60         JMP     ret
61
62 ret:
63         RET