summaryrefslogtreecommitdiffstats
path: root/c/src/lib
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-09-21 00:42:07 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-09-21 00:42:07 +0000
commit7ddcfb8cd494b75ee061adcd423feaadef199721 (patch)
treee4f23e58136bedf77c0ae9c9fd245c20982f5dac /c/src/lib
parentUpdate from Aleksey (Quality Quorum <qqi@world.std.com>) to pick up some (diff)
downloadrtems-7ddcfb8cd494b75ee061adcd423feaadef199721.tar.bz2
Patch from Eric Norum and David Fiddes to put ColdFire support in
the inet checksum routine.
Diffstat (limited to 'c/src/lib')
-rw-r--r--c/src/lib/libnetworking/netinet/in_cksum_m68k.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/c/src/lib/libnetworking/netinet/in_cksum_m68k.c b/c/src/lib/libnetworking/netinet/in_cksum_m68k.c
index 561d68ab44..58199c3adf 100644
--- a/c/src/lib/libnetworking/netinet/in_cksum_m68k.c
+++ b/c/src/lib/libnetworking/netinet/in_cksum_m68k.c
@@ -113,16 +113,15 @@ in_cksum(m, len)
* It should work for all 68k family members.
*/
{
- unsigned long tcnt = mlen, t1, t2;
+ unsigned long tcnt = mlen, t1;
__asm__ volatile (
"movel %2,%3\n\t"
"lsrl #6,%2 | count/64 = # loop traversals\n\t"
"andl #0x3c,%3 | Then find fractions of a chunk\n\t"
"negl %3\n\t | Each long uses 4 instruction bytes\n\t"
#if IS_COLDFIRE
- "move %%cc,%4 | Move the CC into a temp reg\n\t"
- "andil #0xf,%4 | Clear X (extended carry flag)\n\t"
- "move %4,%%cc | Move the modified value back to the cc\n\t"
+ "addql #1,%2 | Clear X (extended carry flag)\n\t"
+ "subql #1,%2 | \n\t"
#else
"andi #0xf,%%cc | Clear X (extended carry flag)\n\t"
#endif
@@ -169,12 +168,13 @@ in_cksum(m, len)
"movel #0xffff,%2 | Get word mask\n\t"
"movel %0,%3 | Fold 32 bit sum to 16 bits\n\t"
"swap %3 |\n\t"
- "andl %2,%0 |\n\t"
- "andl %2,%3 |\n\t"
+ "andl %2,%0 | Mask to 16-bit sum\n\t"
+ "andl %2,%3 | Mask to 16-bit sum\n\t"
"addl %3,%0 |\n\t"
"movel %0,%3 | Add in last carry\n\t"
"swap %3 |\n\t"
"addl %3,%0 |\n\t"
+ "andl %2,%0 | Mask to 16-bit sum\n\t"
#else
"dbf %2,lcsum1_lbl | (NB- dbf doesn't affect X)\n\t"
"movel %0,%3 | Fold 32 bit sum to 16 bits\n\t"
@@ -182,9 +182,10 @@ in_cksum(m, len)
"addxw %3,%0 |\n\t"
"moveq #0,%3 | Add in last carry\n\t"
"addxw %3,%0 |\n\t"
+ "andl #0xffff,%0 | Mask to 16-bit sum\n"
#endif
- "andl #0xffff,%0 | Mask to 16-bit sum\n" :
- "=d" (sum), "=a" (w), "=d" (tcnt) , "=d" (t1), "=d" (t2) :
+ :
+ "=d" (sum), "=a" (w), "=d" (tcnt) , "=d" (t1) :
"0" (sum), "1" (w), "2" (tcnt) :
"cc", "memory");
}