.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