diff --git a/sparc/aes.asm b/sparc/aes.asm
index 4be8f923fd64e6f2f12896540706cafa3e5f5315..54eff9bdd374e1713e2a882322978abed36162ac 100644
--- a/sparc/aes.asm
+++ b/sparc/aes.asm
@@ -16,7 +16,7 @@ define(ctx, %i0)
 define(T, %i1)
 define(length, %i2)
 define(dst, %i3)
-define(src, %o2)
+define(src, %i4)
 
 define(wtxt, %l2)
 define(tmp, %o1)
@@ -25,10 +25,9 @@ _aes_crypt:
 	save	%sp, -136, %sp
 
 ! Why this moving around of the input parameters?
-	!mov	%i3, dst
 	cmp	length, 0
 	be	.Lend
-	mov	%i4, src
+
 	! wtxt
 	add	%fp, -24, %l1
 	mov	%l1, wtxt
@@ -96,19 +95,19 @@ _aes_crypt:
 	! 4*i:	%o3
 	mov	0, %o3
 .Lround_loop:
-	add	T, AES_SIDX3, %i4
+	add	T, AES_SIDX3, %o2
 .Linner_loop:
 	! AES_SIDX1
-	ld	[%i4-32], %g3
+	ld	[%o2-32], %g3
 
 	! AES_SIDX2
-	ld	[%i4-16], %o4
+	ld	[%o2-16], %o4
 	! wtxt[IDX1...]
 	add	%g4, %g3, %g3
 	ldub	[%g3+2], %o0
 
 	! AES_SIDX3
-	ld	[%i4], %g2
+	ld	[%o2], %g2
 	sll	%o0, 2, %o0
 	
 	! wtxt[j]
@@ -138,7 +137,7 @@ _aes_crypt:
 	xor	%g2, %o5, %g2
 	xor	%g2, %o0, %g2
 
-	add	%i4, 4, %i4
+	add	%o2, 4, %o2
 	
 	xor	%g2, %g3, %g2
 	st	%g2, [%l0+%o3]
@@ -181,7 +180,7 @@ _aes_crypt:
 	sll	%g2, 2, %g2
 	add	%g1, %g2, %g2
 	ldub	[%g2+2], %o3
-	add	%i5, dst, %i4
+	add	%i5, dst, %o2
 	ld	[%g4-16], %g3
 	add	%o1, 1, %o1
 	ld	[%g1+%i5], %g2
@@ -208,9 +207,9 @@ _aes_crypt:
 	srl	%g3, 24, %o5
 	srl	%g3, 16, %o0
 	srl	%g3, 8, %g2
-	stb	%g2, [%i4+1]
-	stb	%o5, [%i4+3]
-	stb	%o0, [%i4+2]
+	stb	%g2, [%o2+1]
+	stb	%o5, [%o2+3]
+	stb	%o0, [%o2+2]
 	stb	%g3, [dst+%i5]
 	add	%o7, 4, %o7
 	bleu	.Lfinal_loop