huangcm
2025-08-30 0269911b91ed7e03c24005924cc6423abf245fb8
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