33
33
* /
34
34
35
35
/ *
36
- * asmlinkage __wsum csum_partial(const void * buf , int len , __wsum sum) ;
36
+ * unsigned int csum_partial(const unsigned char * buf , int len ,
37
+ * unsigned int sum) ;
37
38
* /
38
39
39
40
.text
@@ -45,49 +46,28 @@ ENTRY(csum_partial)
45
46
* Fortunately , it is easy to convert 2 - byte alignment to 4 - byte
46
47
* alignment for the unrolled loop .
47
48
* /
49
+ mov r5 , r1
48
50
mov r4 , r0
49
- tst # 3 , r0 ! Check alignment.
50
- bt /s 2f ! Jump if alignment is ok.
51
- mov r4 , r7 ! Keep a copy to check for alignment
51
+ tst # 2 , r0 ! Check alignment.
52
+ bt 2f ! Jump if alignment is ok.
52
53
!
53
- tst # 1 , r0 ! Check alignment.
54
- bt 21f ! Jump if alignment is boundary of 2bytes.
55
-
56
- ! buf is odd
57
- tst r5 , r5
58
- add # - 1 , r5
59
- bt 9f
60
- mov .b @r4 +, r0
61
- extu.b r0 , r0
62
- addc r0 , r6 ! t= 0 from previous tst
63
- mov r6 , r0
64
- shll8 r6
65
- shlr16 r0
66
- shlr8 r0
67
- or r0 , r6
68
- mov r4 , r0
69
- tst # 2 , r0
70
- bt 2f
71
- 21 :
72
- ! buf is 2 byte aligned (len could be 0 )
73
54
add # - 2 , r5 ! Alignment uses up two bytes.
74
55
cmp /pz r5 !
75
56
bt /s 1f ! Jump if we had at least two bytes.
76
57
clrt
77
58
bra 6f
78
59
add # 2 , r5 ! r5 was < 2 . Deal with it.
79
60
1 :
61
+ mov r5 , r1 ! Save new len for later use.
80
62
mov .w @r4 +, r0
81
63
extu.w r0 , r0
82
64
addc r0 , r6
83
65
bf 2f
84
66
add # 1 , r6
85
67
2 :
86
- ! buf is 4 byte aligned (len could be 0 )
87
- mov r5 , r1
88
68
mov # - 5 , r0
89
- shld r0 , r1
90
- tst r1 , r1
69
+ shld r0 , r5
70
+ tst r5 , r5
91
71
bt /s 4f ! if it's = 0 , go to 4f
92
72
clrt
93
73
. align 2
@@ -109,31 +89,30 @@ ENTRY(csum_partial)
109
89
addc r0 , r6
110
90
addc r2 , r6
111
91
movt r0
112
- dt r1
92
+ dt r5
113
93
bf/s 3b
114
94
cmp /eq # 1 , r0
115
- ! here , we know r1 == 0
116
- addc r1 , r6 ! add carry to r6
95
+ ! here , we know r5 == 0
96
+ addc r5 , r6 ! add carry to r6
117
97
4 :
118
- mov r5 , r0
98
+ mov r1 , r0
119
99
and # 0x1c , r0
120
100
tst r0 , r0
121
- bt 6f
122
- ! 4 bytes or more remaining
123
- mov r0 , r1
124
- shlr2 r1
101
+ bt /s 6f
102
+ mov r0 , r5
103
+ shlr2 r5
125
104
mov # 0 , r2
126
105
5 :
127
106
addc r2 , r6
128
107
mov .l @r4 +, r2
129
108
movt r0
130
- dt r1
109
+ dt r5
131
110
bf/s 5b
132
111
cmp /eq # 1 , r0
133
112
addc r2 , r6
134
- addc r1 , r6 ! r1 == 0 here , so it means add carry - bit
113
+ addc r5 , r6 ! r5 == 0 here , so it means add carry - bit
135
114
6 :
136
- ! 3 bytes or less remaining
115
+ mov r1 , r5
137
116
mov # 3 , r0
138
117
and r0 , r5
139
118
tst r5 , r5
@@ -159,16 +138,6 @@ ENTRY(csum_partial)
159
138
mov # 0 , r0
160
139
addc r0 , r6
161
140
9 :
162
- ! Check if the buffer was misaligned , if so realign sum
163
- mov r7 , r0
164
- tst # 1 , r0
165
- bt 10f
166
- mov r6 , r0
167
- shll8 r6
168
- shlr16 r0
169
- shlr8 r0
170
- or r0 , r6
171
- 10 :
172
141
rts
173
142
mov r6 , r0
174
143
0 commit comments