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
|
| .text
| /*
| * This is a version of ip_compute_csum() optimized for IP headers,
| * which always checksum on 4 octet boundaries.
| *
| * extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl);
| *
| */
| .global _ip_fast_csum
| .type _ip_fast_csum,function
| _ip_fast_csum:
| !! TXRPT needs loops - 1
| SUBS TXRPT,D0Ar2,#1
| MOV D0Re0,#0
| BLO $Lfast_csum_exit
| $Lfast_csum_loop:
| GETD D1Ar3,[D1Ar1++]
| ADDS D0Re0,D0Re0,D1Ar3
| ADDCS D0Re0,D0Re0,#1
| BR $Lfast_csum_loop
| LSR D0Ar4,D0Re0,#16
| AND D0Re0,D0Re0,#0xffff
| AND D0Ar4,D0Ar4,#0xffff
| ADD D0Re0,D0Re0,D0Ar4
| LSR D0Ar4,D0Re0,#16
| ADD D0Re0,D0Re0,D0Ar4
| XOR D0Re0,D0Re0,#-1
| AND D0Re0,D0Re0,#0xffff
| $Lfast_csum_exit:
| MOV PC,D1RtP
| .size _ip_fast_csum,.-_ip_fast_csum
|
|