swh:1:snp:c2847dfd741eae21606027cf29250d1ebcd63fb4
Raw File
Tip revision: 6ce4eac1f600b34f2f7f58f9cd8f0503d79e42ae authored by Linus Torvalds on 22 November 2013, 19:30:55 UTC
Linux 3.13-rc1
Tip revision: 6ce4eac
ip_fast_csum.S

	.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
back to top