patch-2.4.11-dontuse linux/arch/cris/lib/checksumcopy.S
Next file: linux/arch/cris/lib/csumcpfruser.S
Previous file: linux/arch/cris/lib/checksum.S
Back to the patch index
Back to the overall index
- Lines: 185
- Date:
Mon Oct 8 11:43:54 2001
- Orig file:
v2.4.10/linux/arch/cris/lib/checksumcopy.S
- Orig date:
Sun Aug 12 13:27:58 2001
diff -u --recursive --new-file v2.4.10/linux/arch/cris/lib/checksumcopy.S linux/arch/cris/lib/checksumcopy.S
@@ -1,4 +1,4 @@
-/* $Id: checksumcopy.S,v 1.6 2001/06/28 03:57:16 hp Exp $
+/* $Id: checksumcopy.S,v 1.7 2001/10/01 14:47:35 bjornw Exp $
* A fast checksum+copy routine using movem
* Copyright (c) 1998, 2001 Axis Communications AB
*
@@ -8,8 +8,8 @@
* int len, unsigned int sum)
*/
- .globl _csum_partial_copy_nocheck
-_csum_partial_copy_nocheck:
+ .globl csum_partial_copy_nocheck
+csum_partial_copy_nocheck:
;; r10 - src
;; r11 - dst
@@ -20,8 +20,8 @@
;; we also do _NOT_ want to compute a checksum over more than the
;; actual length when length < 40
- cmpu.w 80,r12
- blo word_loop
+ cmpu.w 80, $r12
+ blo _word_loop
nop
;; need to save the registers we use below in the movem loop
@@ -29,104 +29,104 @@
;; only r0 - r8 have to be saved, the other ones are clobber-able
;; according to the ABI
- subq 9*4,sp
- movem r8,[sp]
+ subq 9*4, $sp
+ movem $r8, [$sp]
;; do a movem copy and checksum
- subq 10*4,r12 ; update length for the first loop
+ subq 10*4, $r12 ; update length for the first loop
-mloop: movem [r10+],r9 ; read 10 longwords
+_mloop: movem [$r10+],$r9 ; read 10 longwords
1: ;; A failing userspace access will have this as PC.
- movem r9,[r11+] ; write 10 longwords
+ movem $r9,[$r11+] ; write 10 longwords
;; perform dword checksumming on the 10 longwords
- add.d r0,r13
+ add.d $r0,$r13
ax
- add.d r1,r13
+ add.d $r1,$r13
ax
- add.d r2,r13
+ add.d $r2,$r13
ax
- add.d r3,r13
+ add.d $r3,$r13
ax
- add.d r4,r13
+ add.d $r4,$r13
ax
- add.d r5,r13
+ add.d $r5,$r13
ax
- add.d r6,r13
+ add.d $r6,$r13
ax
- add.d r7,r13
+ add.d $r7,$r13
ax
- add.d r8,r13
+ add.d $r8,$r13
ax
- add.d r9,r13
+ add.d $r9,$r13
;; fold the carry into the checksum, to avoid having to loop the carry
;; back into the top
ax
- addq 0,r13
+ addq 0,$r13
ax ; do it again, since we might have generated a carry
- addq 0,r13
+ addq 0,$r13
- subq 10*4,r12
- bge mloop
+ subq 10*4,$r12
+ bge _mloop
nop
- addq 10*4,r12 ; compensate for last loop underflowing length
+ addq 10*4,$r12 ; compensate for last loop underflowing length
- movem [sp+],r8 ; restore regs
+ movem [$sp+],$r8 ; restore regs
-word_loop:
+_word_loop:
;; only fold if there is anything to fold.
- cmpq 0,r13
- beq no_fold
+ cmpq 0,$r13
+ beq _no_fold
;; fold 32-bit checksum into a 16-bit checksum, to avoid carries below
;; r9 can be used as temporary.
- move.d r13,r9
- lsrq 16,r9 ; r0 = checksum >> 16
- and.d 0xffff,r13 ; checksum = checksum & 0xffff
- add.d r9,r13 ; checksum += r0
- move.d r13,r9 ; do the same again, maybe we got a carry last add
- lsrq 16,r9
- and.d 0xffff,r13
- add.d r9,r13
-
-no_fold:
- cmpq 2,r12
- blt no_words
+ move.d $r13,$r9
+ lsrq 16,$r9 ; r0 = checksum >> 16
+ and.d 0xffff,$r13 ; checksum = checksum & 0xffff
+ add.d $r9,$r13 ; checksum += r0
+ move.d $r13,$r9 ; do the same again, maybe we got a carry last add
+ lsrq 16,$r9
+ and.d 0xffff,$r13
+ add.d $r9,$r13
+
+_no_fold:
+ cmpq 2,$r12
+ blt _no_words
nop
;; copy and checksum the rest of the words
- subq 2,r12
+ subq 2,$r12
-wloop: move.w [r10+],r9
+_wloop: move.w [$r10+],$r9
2: ;; A failing userspace access will have this as PC.
- addu.w r9,r13
- subq 2,r12
- bge wloop
- move.w r9,[r11+]
+ addu.w $r9,$r13
+ subq 2,$r12
+ bge _wloop
+ move.w $r9,[$r11+]
- addq 2,r12
+ addq 2,$r12
-no_words:
+_no_words:
;; see if we have one odd byte more
- cmpq 1,r12
- beq do_byte
+ cmpq 1,$r12
+ beq _do_byte
nop
ret
- move.d r13, r10
+ move.d $r13, $r10
-do_byte:
+_do_byte:
;; copy and checksum the last byte
- move.b [r10],r9
+ move.b [$r10],$r9
3: ;; A failing userspace access will have this as PC.
- addu.b r9,r13
- move.b r9,[r11]
+ addu.b $r9,$r13
+ move.b $r9,[$r11]
ret
- move.d r13, r10
+ move.d $r13, $r10
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)