Module Name: src Committed By: matt Date: Mon Jul 22 03:30:38 UTC 2013
Modified Files: src/sys/arch/m68k/m68k: oc_cksum.s Log Message: Use motorola syntax Adjust for coldfire (no binary difference for non-coldfire To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/m68k/m68k/oc_cksum.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/m68k/m68k/oc_cksum.s diff -u src/sys/arch/m68k/m68k/oc_cksum.s:1.6 src/sys/arch/m68k/m68k/oc_cksum.s:1.7 --- src/sys/arch/m68k/m68k/oc_cksum.s:1.6 Fri Dec 23 05:06:19 2011 +++ src/sys/arch/m68k/m68k/oc_cksum.s Mon Jul 22 03:30:38 2013 @@ -1,4 +1,4 @@ -| $NetBSD: oc_cksum.s,v 1.6 2011/12/23 05:06:19 tsutsui Exp $ +| $NetBSD: oc_cksum.s,v 1.7 2013/07/22 03:30:38 matt Exp $ | Copyright (c) 1988 Regents of the University of California. | All rights reserved. @@ -91,10 +91,10 @@ .text ENTRY(oc_cksum) - movl %sp@(4),%a0 | get buffer ptr - movl %sp@(8),%d1 | get byte count - movl %sp@(12),%d0 | get starting value - movl %d2,%sp@- | free a reg + movl 4(%sp),%a0 | get buffer ptr + movl 8(%sp),%d1 | get byte count + movl 12(%sp),%d0 | get starting value + movl %d2,-(%sp) | free a reg | test for possible 1, 2 or 3 bytes of excess at end | of buffer. The usual case is no excess (the usual @@ -108,56 +108,85 @@ ENTRY(oc_cksum) btst #1,%d1 jne L7 | if two bytes excess L1: - movl %d1,%d2 +#ifdef __mcoldfire__ + movq #-4,%d2 | mask to clear bottom two bits + andl %d2,%d1 | longword truncate length + movl %d1,%d2 | move length to d2 + movl %d1,%a1 | move length to a1 + addl %a0,%a1 | add start so a1 now points to end + movq #0x3c,%d1 | then find fractions of a chunk + andl %d1,%d2 + negl %d2 + subl %d1,%d1 | this can never carry so X is cleared +#else + movl %d1,%d2 | move to d2 lsrl #6,%d1 | make cnt into # of 64 byte chunks andl #0x3c,%d2 | then find fractions of a chunk negl %d2 andb #0xf,%cc | clear X - jmp %pc@(L3-.-2:b,%d2) +#endif + jmp (L3-.-2:b,%pc,%d2) L2: - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 - movl %a0@+,%d2 + movl (%a0)+,%d2 addxl %d2,%d0 L3: +#ifdef __mcoldfire__ + cmpal %a0,%a1 | cmpa doesn't affect X + bne L2 | loop until reached +#else dbra %d1,L2 | (NB- dbra doesn't affect X) +#endif movl %d0,%d1 | fold 32 bit sum to 16 bits swap %d1 | (NB- swap doesn't affect X) +#ifdef __mcoldfire__ + mvzw %d1,%d1 | zero extend %d1 (doesn't affect X) + mvzw %d0,%d0 | zero extend %d0 (doesn't affect X) + addxl %d1,%d0 | + jcc L4 + addql #1,%d0 +#else addxw %d1,%d0 jcc L4 addw #1,%d0 +#endif L4: +#ifdef __mcoldfire__ + mvzw %d0,%d0 +#else andl #0xffff,%d0 - movl %sp@+,%d2 +#endif + movl (%sp)+,%d2 rts L5: | deal with 1 or 3 excess bytes at the end of the buffer. @@ -166,18 +195,18 @@ L5: | deal with 1 or 3 excess bytes at t | 3 bytes excess clrl %d2 - movw %a0@(-3,%d1:l),%d2 | add in last full word then drop + movw (-3,%a0,%d1:l),%d2 | add in last full word then drop addl %d2,%d0 | through to pick up last byte L6: | 1 byte excess clrl %d2 - movb %a0@(-1,%d1:l),%d2 + movb (-1,%a0,%d1:l),%d2 lsll #8,%d2 addl %d2,%d0 jra L1 L7: | 2 bytes excess clrl %d2 - movw %a0@(-2,%d1:l),%d2 + movw (-2,%a0,%d1:l),%d2 addl %d2,%d0 jra L1