Module Name: src Committed By: matt Date: Thu Dec 20 08:03:21 UTC 2012
Modified Files: src/sys/arch/arm/arm: cpu_in_cksum_buffer.S Log Message: Add fast path for dealing with a single 32-bit word at the end. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/arm/cpu_in_cksum_buffer.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/arm/cpu_in_cksum_buffer.S diff -u src/sys/arch/arm/arm/cpu_in_cksum_buffer.S:1.2 src/sys/arch/arm/arm/cpu_in_cksum_buffer.S:1.3 --- src/sys/arch/arm/arm/cpu_in_cksum_buffer.S:1.2 Thu Dec 20 07:18:33 2012 +++ src/sys/arch/arm/arm/cpu_in_cksum_buffer.S Thu Dec 20 08:03:21 2012 @@ -29,7 +29,7 @@ #include <machine/asm.h> -RCSID("$NetBSD: cpu_in_cksum_buffer.S,v 1.2 2012/12/20 07:18:33 matt Exp $") +RCSID("$NetBSD: cpu_in_cksum_buffer.S,v 1.3 2012/12/20 08:03:21 matt Exp $") /* * Special note: @@ -111,11 +111,14 @@ ENTRY(cpu_in_cksum_buffer) bne 3b /* yep, do them */ .Lfinal_dword: + ldr r5, [r0], #4 /* load next word */ + tst r1, #3 /* final amount one word exactly? */ + beq .Lfinal_add_one_word /* yes, and go add it */ sub r3, r1, #1 /* 0-3 = 1 word, 4-7 = 2 words */ - tst r3, #4 /* more than one word more left? */ - moveq r4, #0 /* no, just use zero */ - ldreq r5, [r0] /* no, load last word */ - ldmneia r0, {r4-r5} /* yes, load last dword */ + tst r3, #4 /* one more word left? */ + moveq r4, #0 /* no, use 0 for 1st word */ + movne r4, r5 /* yes, move from 2nd word to 1st */ + ldrne r5, [r0] /* yes, load last word */ .Lfinal_dword_noload: rsb r1, r1, #4 /* find out many bytes to discard */ #ifdef __ARMEL__