From: Stephen Early Date: Wed, 6 Apr 2005 00:30:07 +0000 (+0100) Subject: Update i386 implementation of ip_csum X-Git-Tag: v0.1.18.1~15 X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/commitdiff_plain/20d324b6d71fdfbbe28479848c934ca3a1f69f16 Update i386 implementation of ip_csum Update i386 implementation of ip_csum from recent linux include/asm-i386/checksum.h to fix gcc quote syntax issue. --- diff --git a/netlink.c b/netlink.c index 466e68f..ecad16c 100644 --- a/netlink.c +++ b/netlink.c @@ -148,30 +148,30 @@ static inline uint16_t ip_csum(uint8_t *iph,uint32_t count) static inline uint16_t ip_fast_csum(uint8_t *iph, uint32_t ihl) { uint32_t sum; - __asm__ __volatile__(" - movl (%1), %0 - subl $4, %2 - jbe 2f - addl 4(%1), %0 - adcl 8(%1), %0 - adcl 12(%1), %0 -1: adcl 16(%1), %0 - lea 4(%1), %1 - decl %2 - jne 1b - adcl $0, %0 - movl %0, %2 - shrl $16, %0 - addw %w2, %w0 - adcl $0, %0 - notl %0 -2: - " + __asm__ __volatile__( + "movl (%1), %0 ;\n" + "subl $4, %2 ;\n" + "jbe 2f ;\n" + "addl 4(%1), %0 ;\n" + "adcl 8(%1), %0 ;\n" + "adcl 12(%1), %0 ;\n" +"1: adcl 16(%1), %0 ;\n" + "lea 4(%1), %1 ;\n" + "decl %2 ;\n" + "jne 1b ;\n" + "adcl $0, %0 ;\n" + "movl %0, %2 ;\n" + "shrl $16, %0 ;\n" + "addw %w2, %w0 ;\n" + "adcl $0, %0 ;\n" + "notl %0 ;\n" +"2: ;\n" /* Since the input registers which are loaded with iph and ipl are modified, we must also specify them as outputs, or gcc will assume they contain their original values. */ : "=r" (sum), "=r" (iph), "=r" (ihl) - : "1" (iph), "2" (ihl)); + : "1" (iph), "2" (ihl) + : "memory"); return sum; } #else