--- glibc-2.11/ports/sysdeps/mips/memcpy.S	2010-09-23 11:11:37.023377658 -0400
+++ glibc-2.11/ports/sysdeps/mips/memcpy.S	2010-09-23 11:12:18.493377795 -0400
@@ -38,18 +38,25 @@
 ENTRY (memcpy)
 	.set	noreorder
 
+	pref    0, 0(a1)
+	pref    1, 0(a0)
 	slti	t0, a2, 8		# Less than 8?
 	bne	t0, zero, L(last8)
 	move	v0, a0			# Setup exit value before too late
-
+	pref    0, 1*32(a1)
+	pref    1, 1*32(a0)
 	xor	t0, a1, a0		# Find a0/a1 displacement
 	andi	t0, 0x3
 	bne	t0, zero, L(shift)	# Go handle the unaligned case
 	subu	t1, zero, a1
+	pref    0, 2*32(a1)
+	pref    1, 2*32(a0)
 	andi	t1, 0x3			# a0/a1 are aligned, but are we
 	beq	t1, zero, L(chk8w)	#  starting in the middle of a word?
 	subu	a2, t1
 	LWHI	t0, 0(a1)		# Yes we are... take care of that
+	pref    0, 3*32(a1)
+	pref    1, 3*32(a0)
 	addu	a1, t1
 	SWHI	t0, 0(a0)
 	addu	a0, t1
@@ -78,6 +85,8 @@
 	sw	t4, -16(a0)
 	sw	t5, -12(a0)
 	sw	t6,  -8(a0)
+	pref	0, 8*32(a1)
+	pref	1, 8*32(a0)
 	bne	a1, a3, L(lop8w)
 	sw	t7,  -4(a0)
 
--- glibc-2.11/ports/sysdeps/mips/memset.S	2010-09-23 11:11:45.593376404 -0400
+++ glibc-2.11/ports/sysdeps/mips/memset.S	2010-09-23 11:12:08.053376731 -0400
@@ -32,6 +32,7 @@
 ENTRY (memset)
 	.set	noreorder
 
+	pref    1, 0(a0)
 	slti	t1, a2, 8		# Less than 8?
 	bne	t1, zero, L(last8)
 	move	v0, a0			# Setup exit value before too late
@@ -57,9 +58,23 @@
 	subu	a3, a2, t0
 	addu	a3, a0			# a3 is last loop address +1
 	move	a2, t0			# a2 is now # of bytes left after loop
+	pref    1, 1*32(a0)
 L(loopw):	
 	addiu	a0, 8			# Handle 2 words pr. iteration
 	sw	a1, -8(a0)
+	beq	a0, a3, L(chkl)
+	sw	a1, -4(a0)
+	addiu   a0, 8
+	sw	a1, -8(a0)
+	beq	a0, a3, L(chkl)
+	sw	a1, -4(a0)
+	addiu   a0, 8
+	sw	a1, -8(a0)
+	beq	a0, a3, L(chkl)
+	sw	a1, -4(a0)
+	addiu   a0, 8 
+	sw	a1, -8(a0)
+	pref    1, 2*32(a0)
 	bne	a0, a3, L(loopw)
 	sw	a1, -4(a0)
 
