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__