6b13f685e
김민수
BSP 최초 추가
|
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
.text
buf .req r0
len .req r1
sum .req r2
td0 .req r3
td1 .req r4 @ save before use
td2 .req r5 @ save before use
td3 .req lr
.Lzero: mov r0, sum
add sp, sp,
ldr pc, [sp],
.Lless8: teq len,
beq .Lzero
tst buf,
movne sum, sum, ror
ldrneb td0, [buf],
subne len, len,
adcnes sum, sum, td0, put_byte_1
.Lless4: tst len,
beq .Lless8_byte
.Lless8_wordlp:
ldrh td0, [buf],
sub len, len,
ldrb td0, [buf],
ldrb td3, [buf],
sub len, len,
orr td0, td0, td3, lsl
orr td0, td3, td0, lsl
adcs sum, sum, td0
tst len,
bne .Lless8_wordlp
.Lless8_byte: tst len,
ldrneb td0, [buf],
adcnes sum, sum, td0, put_byte_0 @ update checksum
.Ldone: adc r0, sum,
ldr td0, [sp],
tst td0,
movne r0, r0, ror
ldr pc, [sp],
.Lnot_aligned: tst buf,
ldrneb td0, [buf],
subne len, len,
adcnes sum, sum, td0, put_byte_1 @ update checksum
tst buf,
ldrneh td0, [buf],
subne len, len,
ldrneb td0, [buf],
ldrneb ip, [buf],
subne len, len,
orrne td0, td0, ip, lsl
orrne td0, ip, td0, lsl
adcnes sum, sum, td0 @ update checksum
mov pc, lr
ENTRY(csum_partial)
stmfd sp!, {buf, lr}
cmp len,
blo .Lless8 @ 8 bytes to copy.
tst buf,
movne sum, sum, ror
adds sum, sum,
tst buf,
blne .Lnot_aligned @ align destination, return here
1: bics ip, len,
beq 3f
stmfd sp!, {r4 - r5}
2: ldmia buf!, {td0, td1, td2, td3}
adcs sum, sum, td0
adcs sum, sum, td1
adcs sum, sum, td2
adcs sum, sum, td3
ldmia buf!, {td0, td1, td2, td3}
adcs sum, sum, td0
adcs sum, sum, td1
adcs sum, sum, td2
adcs sum, sum, td3
sub ip, ip,
teq ip,
bne 2b
ldmfd sp!, {r4 - r5}
3: tst len,
beq .Lless4
4: ldr td0, [buf],
sub len, len,
adcs sum, sum, td0
tst len,
bne 4b
b .Lless4
ENDPROC(csum_partial)
|