Index: boot/arch/arm32/loader/asm.S
===================================================================
--- boot/arch/arm32/loader/asm.S	(revision 619e7c9b0af31177bf441bbb64d080b4ba93bd4a)
+++ boot/arch/arm32/loader/asm.S	(revision 34a74ab48411f1258fe12a5bce99c172084075ea)
@@ -36,5 +36,6 @@
 	bic     r3, r3, #3
 	cmp     r1, r3
-	stmdb   sp!, {r4, lr}
+	stmdb   sp!, {r4, r5, lr}
+	mov	r5, r0
 	beq     4f
 1:
@@ -49,6 +50,6 @@
 	bne     2b
 3:
-	mov     r0, r1
-	ldmia   sp!, {r4, pc}
+	mov     r0, r5
+	ldmia   sp!, {r4, r5, pc}
 4:
 	add     r3, r0, #3
Index: boot/arch/mips32/loader/asm.S
===================================================================
--- boot/arch/mips32/loader/asm.S	(revision 619e7c9b0af31177bf441bbb64d080b4ba93bd4a)
+++ boot/arch/mips32/loader/asm.S	(revision 34a74ab48411f1258fe12a5bce99c172084075ea)
@@ -49,4 +49,5 @@
 	beq	$a1,$v0,3f
 	move	$t0,$a0
+	move	$t2,$a0			# save dst
 
 0:
@@ -64,5 +65,5 @@
 2:
 	jr	$ra
-	move	$v0,$a1
+	move	$v0,$t2
 
 3:
@@ -104,5 +105,5 @@
 
 	jr	$ra
-	move	$v0,$a1
+	move	$v0,$t2
 
 jump_to_kernel:
Index: boot/arch/sparc64/loader/asm.S
===================================================================
--- boot/arch/sparc64/loader/asm.S	(revision 619e7c9b0af31177bf441bbb64d080b4ba93bd4a)
+++ boot/arch/sparc64/loader/asm.S	(revision 34a74ab48411f1258fe12a5bce99c172084075ea)
@@ -31,4 +31,7 @@
 #include <register.h>
 
+.register       %g2, #scratch
+.register       %g3, #scratch
+
 .text
 
@@ -42,6 +45,5 @@
 	
 memcpy:
-	.register       %g2, #scratch
-        .register       %g3, #scratch
+	mov	%o0, %o3		! save dst
 	add	%o1, 7, %g1
 	and	%g1, -8, %g1
@@ -62,5 +64,5 @@
 2:
 	jmp	%o7 + 8			! exit point
-	mov	%o1, %o0
+	mov	%o3, %o0
 3:
 	and	%g1, -8, %g1
@@ -96,5 +98,5 @@
 
 	jmp	%o7 + 8			! exit point
-	mov	%o1, %o0
+	mov	%o3, %o0
 
 jump_to_kernel:
