diff --git a/src/pkg/runtime/386/memmove.s b/src/pkg/runtime/386/memmove.s
index 38a0652b5d9c3b2a8f40f7fae892f7362072cda7..471553ba2166e243b2a1e1bbbb54add60b74f9da 100644
--- a/src/pkg/runtime/386/memmove.s
+++ b/src/pkg/runtime/386/memmove.s
@@ -32,7 +32,6 @@ TEXT runtime·memmove(SB), 7, $0
 
 /*
  * check and set for backwards
- * should we look closer for overlap?
  */
 	CMPL	SI, DI
 	JLS	back
@@ -40,6 +39,7 @@ TEXT runtime·memmove(SB), 7, $0
 /*
  * forward copy loop
  */
+forward:	
 	MOVL	BX, CX
 	SHRL	$2, CX
 	ANDL	$3, BX
@@ -50,11 +50,19 @@ TEXT runtime·memmove(SB), 7, $0
 
 	MOVL	to+0(FP),AX
 	RET
+/*
+ * check overlap
+ */
+back:
+	MOVL	SI, CX
+	ADDL	BX, CX
+	CMPL	CX, DI
+	JLS	forward
 /*
  * whole thing backwards has
  * adjusted addresses
  */
-back:
+
 	ADDL	BX, DI
 	ADDL	BX, SI
 	STD
diff --git a/src/pkg/runtime/amd64/memmove.s b/src/pkg/runtime/amd64/memmove.s
index 9966b0ba7ad9f553370f7e394ef2f4a15d7c735c..fc9573f72e15cadf4cfa358c5217e68b246ae48b 100644
--- a/src/pkg/runtime/amd64/memmove.s
+++ b/src/pkg/runtime/amd64/memmove.s
@@ -33,7 +33,6 @@ TEXT runtime·memmove(SB), 7, $0
 
 /*
  * check and set for backwards
- * should we look closer for overlap?
  */
 	CMPQ	SI, DI
 	JLS	back
@@ -41,6 +40,7 @@ TEXT runtime·memmove(SB), 7, $0
 /*
  * forward copy loop
  */
+forward:	
 	MOVQ	BX, CX
 	SHRQ	$3, CX
 	ANDQ	$7, BX
@@ -51,11 +51,19 @@ TEXT runtime·memmove(SB), 7, $0
 
 	MOVQ	to+0(FP),AX
 	RET
+back:
+/*
+ * check overlap
+ */
+	MOVQ	SI, CX
+	ADDQ	BX, CX
+	CMPQ	CX, DI
+	JLS	forward
+	
 /*
  * whole thing backwards has
  * adjusted addresses
  */
-back:
 	ADDQ	BX, DI
 	ADDQ	BX, SI
 	STD