1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
TEXT strcmp(SB), $-4
MOVW R0, R1
MOVW s2+4(FP), R2
MOVW $0xFF, R3 /* mask */
_align: /* align s1 on 4 */
TST $3, R1
BEQ _aligned
MOVBU.P 1(R1), R4 /* implicit write back */
MOVBU.P 1(R2), R8 /* implicit write back */
SUB.S R8, R4, R0
BNE _return
CMP $0, R4
BEQ _return
B _align
_aligned: /* is s2 now aligned? */
TST $3, R2
BNE _unaligned
_aloop:
MOVW.P 4(R1), R5 /* 4 at a time */
MOVW.P 4(R2), R7
AND R5, R3, R4
AND R7, R3, R8
SUB.S R8, R4, R0
BNE _return
CMP $0, R4
BEQ _return
AND R5>>8, R3, R4
AND R7>>8, R3, R8
SUB.S R8, R4, R0
BNE _return
CMP $0, R4
BEQ _return
AND R5>>16, R3, R4
AND R7>>16, R3, R8
SUB.S R8, R4, R0
BNE _return
CMP $0, R4
BEQ _return
AND R5>>24, R3, R4
AND R7>>24, R3, R8
SUB.S R8, R4, R0
BNE _return
CMP $0, R4
BEQ _return
B _aloop
_return:
RET
_unaligned:
MOVBU.P 1(R1), R4 /* implicit write back */
MOVBU.P 1(R2), R8 /* implicit write back */
SUB.S R8, R4, R0
BNE _return
CMP $0, R4
BEQ _return
B _unaligned
|