Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 43879
b: refs/heads/master
c: 773ff78
h: refs/heads/master
i:
  43877: 0988b94
  43875: ffd58d0
  43871: 367d2cf
v: v3
  • Loading branch information
Atsushi Nemoto authored and Ralf Baechle committed Dec 9, 2006
1 parent 284efee commit c35e2f5
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 76 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 52ffe760ea9ec407292d093c3f06c1cda5187228
refs/heads/master: 773ff78838ca3c07245e45c06235e0baaa5f710a
129 changes: 54 additions & 75 deletions trunk/arch/mips/lib/csum_partial.S
Original file line number Diff line number Diff line change
Expand Up @@ -65,64 +65,6 @@

.text
.set noreorder

/* unknown src alignment and < 8 bytes to go */
small_csumcpy:
move a1, t2

andi t0, a1, 4
beqz t0, 1f
andi t0, a1, 2

/* Still a full word to go */
ulw t1, (src)
PTR_ADDIU src, 4
ADDC(sum, t1)

1: move t1, zero
beqz t0, 1f
andi t0, a1, 1

/* Still a halfword to go */
ulhu t1, (src)
PTR_ADDIU src, 2

1: beqz t0, 1f
sll t1, t1, 16

lbu t2, (src)
nop

#ifdef __MIPSEB__
sll t2, t2, 8
#endif
or t1, t2

1: ADDC(sum, t1)

/* fold checksum */
sll v1, sum, 16
addu sum, v1
sltu v1, sum, v1
srl sum, sum, 16
addu sum, v1

/* odd buffer alignment? */
beqz t7, 1f
nop
sll v1, sum, 8
srl sum, sum, 8
or sum, v1
andi sum, 0xffff
1:
.set reorder
/* Add the passed partial csum. */
ADDC(sum, a2)
jr ra
.set noreorder

/* ------------------------------------------------------------------------- */

.align 5
LEAF(csum_partial)
move sum, zero
Expand All @@ -132,8 +74,7 @@ LEAF(csum_partial)
bnez t8, small_csumcpy /* < 8 bytes to copy */
move t2, a1

beqz a1, out
andi t7, src, 0x1 /* odd buffer? */
andi t7, src, 0x1 /* odd buffer? */

hword_align:
beqz t7, word_align
Expand Down Expand Up @@ -232,8 +173,9 @@ move_32bytes:
PTR_ADDU src, src, 0x20

do_end_words:
beqz t8, maybe_end_cruft
LONG_SRL t8, t8, 0x2
beqz t8, small_csumcpy
andi t2, a1, 0x3
LONG_SRL t8, t8, 0x2

end_words:
lw t0, (src)
Expand All @@ -242,21 +184,58 @@ end_words:
bnez t8, end_words
PTR_ADDU src, src, 0x4

maybe_end_cruft:
andi t2, a1, 0x3
/* unknown src alignment and < 8 bytes to go */
small_csumcpy:
move a1, t2

small_memcpy:
j small_csumcpy; move a1, t2 /* XXX ??? */
beqz t2, out
move a1, t2
andi t0, a1, 4
beqz t0, 1f
andi t0, a1, 2

end_bytes:
lb t0, (src)
LONG_SUBU a1, a1, 0x1
bnez a2, end_bytes
PTR_ADDU src, src, 0x1
/* Still a full word to go */
ulw t1, (src)
PTR_ADDIU src, 4
ADDC(sum, t1)

1: move t1, zero
beqz t0, 1f
andi t0, a1, 1

/* Still a halfword to go */
ulhu t1, (src)
PTR_ADDIU src, 2

1: beqz t0, 1f
sll t1, t1, 16

lbu t2, (src)
nop

#ifdef __MIPSEB__
sll t2, t2, 8
#endif
or t1, t2

1: ADDC(sum, t1)

out:
/* fold checksum */
sll v1, sum, 16
addu sum, v1
sltu v1, sum, v1
srl sum, sum, 16
addu sum, v1

/* odd buffer alignment? */
beqz t7, 1f
nop
sll v1, sum, 8
srl sum, sum, 8
or sum, v1
andi sum, 0xffff
1:
.set reorder
/* Add the passed partial csum. */
ADDC(sum, a2)
jr ra
move v0, sum
.set noreorder
END(csum_partial)

0 comments on commit c35e2f5

Please sign in to comment.