diff --git a/ChangeLog b/ChangeLog
index ef0b06b3916238af5f4e9750c82798ddd45fc587..7d3a3454708698dadc37f121ec08ff57069afaf4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2013-05-21  Niels Möller  <nisse@lysator.liu.se>
 
+	* sparc32/aes-encrypt-internal.asm: Adapted to new interface.
+	* sparc32/aes-decrypt-internal.asm: Likewise.
+	* sparc64/aes-encrypt-internal.asm: Likewise.
+	* sparc64/aes-decrypt-internal.asm: Likewise.
+
 	* x86/aes-encrypt-internal.asm: Adapted to new interface.
 	* x86/aes-decrypt-internal.asm: Likewise.
 
diff --git a/sparc32/aes-decrypt-internal.asm b/sparc32/aes-decrypt-internal.asm
index cbcf43c56e4f03d5d1526a25ce20f4393f8e3e8a..eac60ed56c5b387fbfddb53bf2fe138899e0a0d6 100644
--- a/sparc32/aes-decrypt-internal.asm
+++ b/sparc32/aes-decrypt-internal.asm
@@ -1,6 +1,6 @@
 C nettle, low-level cryptographics library
 C 
-C Copyright (C) 2002, 2005 Niels Möller
+C Copyright (C) 2002, 2005, 2013 Niels Möller
 C  
 C The nettle library is free software; you can redistribute it and/or modify
 C it under the terms of the GNU Lesser General Public License as published by
@@ -20,11 +20,12 @@ C MA 02111-1301, USA.
 include_src(<sparc32/aes.m4>)
 
 C	Arguments
-define(<CTX>,	<%i0>)
-define(<T>,	<%i1>)
-define(<LENGTH>,<%i2>)
-define(<DST>,	<%i3>)
-define(<SRC>,	<%i4>)
+define(<ROUNDS>,<%i0>)
+define(<KEYS>,	<%i1>)
+define(<T>,	<%i2>)
+define(<LENGTH>,<%i3>)
+define(<DST>,	<%i4>)
+define(<SRC>,	<%i5>)
 
 C	AES state, two copies for unrolling
 
@@ -40,7 +41,7 @@ define(<X3>,	<%l7>)
 
 C	%o0-%03 are used for loop invariants T0-T3
 define(<KEY>,	<%o4>)
-define(<ROUND>, <%o5>)
+define(<COUNT>, <%o5>)
 
 C %g1, %g2, %g3 are TMP1, TMP2 and TMP3
 
@@ -53,7 +54,7 @@ define(<FRAME_SIZE>, 104)
 
 	.file "aes-decrypt-internal.asm"
 
-	C _aes_decrypt(struct aes_context *ctx, 
+	C _aes_decrypt(unsigned rounds, const uint32_t *keys,
 	C	       const struct aes_table *T,
 	C	       size_t length, uint8_t *dst,
 	C	       uint8_t *src)
@@ -74,22 +75,23 @@ PROLOGUE(_nettle_aes_decrypt)
 	add	T, AES_TABLE2, T2
 	add	T, AES_TABLE3, T3
 
+	C	Must be even, and includes the final round
+	srl	ROUNDS, 1, ROUNDS
+	C	Last two rounds handled specially
+	sub	ROUNDS, 1, ROUNDS
+
 .Lblock_loop:
 	C  Read src, and add initial subkey
-	add	CTX, AES_KEYS, KEY
+	mov	KEYS, KEY
 	AES_LOAD(0, SRC, KEY, W0)
 	AES_LOAD(1, SRC, KEY, W1)
 	AES_LOAD(2, SRC, KEY, W2)
 	AES_LOAD(3, SRC, KEY, W3)
 
-	C	Must be even, and includes the final round
-	ld	[AES_NROUNDS + CTX], ROUND
+	mov	ROUNDS, COUNT
 	add	SRC, 16, SRC
 	add	KEY, 16, KEY
 
-	srl	ROUND, 1, ROUND
-	C	Last two rounds handled specially
-	sub	ROUND, 1, ROUND
 .Lround_loop:
 	C The AES_ROUND macro uses T0,... T3
 	C	Transform W -> X
@@ -104,7 +106,7 @@ PROLOGUE(_nettle_aes_decrypt)
 	AES_ROUND(6, X2, X1, X0, X3, KEY, W2)
 	AES_ROUND(7, X3, X2, X1, X0, KEY, W3)
 
-	subcc	ROUND, 1, ROUND
+	subcc	COUNT, 1, COUNT
 	bne	.Lround_loop
 	add	KEY, 32, KEY
 
diff --git a/sparc32/aes-encrypt-internal.asm b/sparc32/aes-encrypt-internal.asm
index 490886fa029678b15f77e7686e8b87e9d624da85..fe99fa6cf3c2a19b500d5c79fc7a83127cd776e8 100644
--- a/sparc32/aes-encrypt-internal.asm
+++ b/sparc32/aes-encrypt-internal.asm
@@ -1,6 +1,6 @@
 C nettle, low-level cryptographics library
 C 
-C Copyright (C) 2002, 2005 Niels Möller
+C Copyright (C) 2002, 2005, 2013 Niels Möller
 C  
 C The nettle library is free software; you can redistribute it and/or modify
 C it under the terms of the GNU Lesser General Public License as published by
@@ -20,11 +20,12 @@ C MA 02111-1301, USA.
 include_src(<sparc32/aes.m4>)
 
 C	Arguments
-define(<CTX>,	<%i0>)
-define(<T>,	<%i1>)
-define(<LENGTH>,<%i2>)
-define(<DST>,	<%i3>)
-define(<SRC>,	<%i4>)
+define(<ROUNDS>,<%i0>)
+define(<KEYS>,	<%i1>)
+define(<T>,	<%i2>)
+define(<LENGTH>,<%i3>)
+define(<DST>,	<%i4>)
+define(<SRC>,	<%i5>)
 
 C	AES state, two copies for unrolling
 
@@ -40,7 +41,7 @@ define(<X3>,	<%l7>)
 
 C	%o0-%03 are used for loop invariants T0-T3
 define(<KEY>,	<%o4>)
-define(<ROUND>, <%o5>)
+define(<COUNT>, <%o5>)
 
 C %g1, %g2, %g3 are TMP1, TMP2 and TMP3
 
@@ -58,7 +59,7 @@ define(<FRAME_SIZE>, 104)
 
 	.file "aes-encrypt-internal.asm"
 
-	C _aes_encrypt(struct aes_context *ctx, 
+	C _aes_encrypt(unsigned rounds, const uint32_t *keys,
 	C	       const struct aes_table *T,
 	C	       size_t length, uint8_t *dst,
 	C	       uint8_t *src)
@@ -79,22 +80,23 @@ PROLOGUE(_nettle_aes_encrypt)
 	add	T, AES_TABLE2, T2
 	add	T, AES_TABLE3, T3
 
+	C	Must be even, and includes the final round
+	srl	ROUNDS, 1, ROUNDS
+	C	Last two rounds handled specially
+	sub	ROUNDS, 1, ROUNDS
+
 .Lblock_loop:
 	C  Read src, and add initial subkey
-	add	CTX, AES_KEYS, KEY
+	mov	KEYS, KEY
 	AES_LOAD(0, SRC, KEY, W0)
 	AES_LOAD(1, SRC, KEY, W1)
 	AES_LOAD(2, SRC, KEY, W2)
 	AES_LOAD(3, SRC, KEY, W3)
 
-	C	Must be even, and includes the final round
-	ld	[AES_NROUNDS + CTX], ROUND
+	mov	ROUNDS, COUNT
 	add	SRC, 16, SRC
 	add	KEY, 16, KEY
 
-	srl	ROUND, 1, ROUND
-	C	Last two rounds handled specially
-	sub	ROUND, 1, ROUND
 .Lround_loop:
 	C The AES_ROUND macro uses T0,... T3
 	C	Transform W -> X
@@ -109,7 +111,7 @@ PROLOGUE(_nettle_aes_encrypt)
 	AES_ROUND(6, X2, X3, X0, X1, KEY, W2)
 	AES_ROUND(7, X3, X0, X1, X2, KEY, W3)
 
-	subcc	ROUND, 1, ROUND
+	subcc	COUNT, 1, COUNT
 	bne	.Lround_loop
 	add	KEY, 32, KEY
 
diff --git a/sparc64/aes-decrypt-internal.asm b/sparc64/aes-decrypt-internal.asm
index 4f70c32c95fb19f39da9267464af34691094bee5..c5269c6762d8c580c4f2ea9d29c8a705155da9d1 100644
--- a/sparc64/aes-decrypt-internal.asm
+++ b/sparc64/aes-decrypt-internal.asm
@@ -1,6 +1,6 @@
 C nettle, low-level cryptographics library
 C 
-C Copyright (C) 2002, 2005 Niels Möller
+C Copyright (C) 2002, 2005, 2013 Niels Möller
 C  
 C The nettle library is free software; you can redistribute it and/or modify
 C it under the terms of the GNU Lesser General Public License as published by
@@ -23,14 +23,15 @@ C doesn't matter, since we don't access any data on the stack).
 
 
 C Use the same AES macros as on sparc32.
-include_src(sparc32/aes.m4)
+include_src(<sparc32/aes.m4>)
 
 C	Arguments
-define(<CTX>,	<%i0>)
-define(<T>,	<%i1>)
-define(<LENGTH>,<%i2>)
-define(<DST>,	<%i3>)
-define(<SRC>,	<%i4>)
+define(<ROUNDS>,<%i0>)
+define(<KEYS>,	<%i1>)
+define(<T>,	<%i2>)
+define(<LENGTH>,<%i3>)
+define(<DST>,	<%i4>)
+define(<SRC>,	<%i5>)
 
 C	AES state, two copies for unrolling
 
@@ -46,7 +47,7 @@ define(<X3>,	<%l7>)
 
 C	%o0-%03 are used for loop invariants T0-T3
 define(<KEY>,	<%o4>)
-define(<ROUND>, <%o5>)
+define(<COUNT>, <%o5>)
 
 C %g1, %g2, %g3 are TMP1, TMP2 and TMP3
 
@@ -59,7 +60,7 @@ define(<FRAME_SIZE>, 192)
 
 	.file "aes-decrypt-internal.asm"
 
-	C _aes_decrypt(struct aes_context *ctx, 
+	C _aes_decrypt(unsigned rounds, const uint32_t *keys,
 	C	       const struct aes_table *T,
 	C	       size_t length, uint8_t *dst,
 	C	       uint8_t *src)
@@ -80,22 +81,23 @@ PROLOGUE(_nettle_aes_decrypt)
 	add	T, AES_TABLE2, T2
 	add	T, AES_TABLE3, T3
 
+	C	Must be even, and includes the final round
+	srl	ROUNDS, 1, ROUNDS
+	C	Last two rounds handled specially
+	sub	ROUNDS, 1, ROUNDS
+
 .Lblock_loop:
 	C  Read src, and add initial subkey
-	add	CTX, AES_KEYS, KEY
+	mov	KEYS, KEY
 	AES_LOAD(0, SRC, KEY, W0)
 	AES_LOAD(1, SRC, KEY, W1)
 	AES_LOAD(2, SRC, KEY, W2)
 	AES_LOAD(3, SRC, KEY, W3)
 
-	C	Must be even, and includes the final round
-	ld	[AES_NROUNDS + CTX], ROUND
+	mov	ROUNDS, COUNT
 	add	SRC, 16, SRC
 	add	KEY, 16, KEY
 
-	srl	ROUND, 1, ROUND
-	C	Last two rounds handled specially
-	sub	ROUND, 1, ROUND
 .Lround_loop:
 	C The AES_ROUND macro uses T0,... T3
 	C	Transform W -> X
@@ -110,7 +112,7 @@ PROLOGUE(_nettle_aes_decrypt)
 	AES_ROUND(6, X2, X1, X0, X3, KEY, W2)
 	AES_ROUND(7, X3, X2, X1, X0, KEY, W3)
 
-	subcc	ROUND, 1, ROUND
+	subcc	COUNT, 1, COUNT
 	bne	.Lround_loop
 	add	KEY, 32, KEY
 
diff --git a/sparc64/aes-encrypt-internal.asm b/sparc64/aes-encrypt-internal.asm
index f24157555720da6c6fccec3bc8fc746e8515c74e..7d1631600867c2080aa14ca36e27a4755b5b6417 100644
--- a/sparc64/aes-encrypt-internal.asm
+++ b/sparc64/aes-encrypt-internal.asm
@@ -1,6 +1,6 @@
 C nettle, low-level cryptographics library
 C 
-C Copyright (C) 2002, 2005 Niels Möller
+C Copyright (C) 2002, 2005, 2013 Niels Möller
 C  
 C The nettle library is free software; you can redistribute it and/or modify
 C it under the terms of the GNU Lesser General Public License as published by
@@ -23,14 +23,15 @@ C doesn't matter, since we don't access any data on the stack).
 
 
 C Use the same AES macros as on sparc32.
-include_src(sparc32/aes.m4)
+include_src(<sparc32/aes.m4>)
 
 C	Arguments
-define(<CTX>,	<%i0>)
-define(<T>,	<%i1>)
-define(<LENGTH>,<%i2>)
-define(<DST>,	<%i3>)
-define(<SRC>,	<%i4>)
+define(<ROUNDS>,<%i0>)
+define(<KEYS>,	<%i1>)
+define(<T>,	<%i2>)
+define(<LENGTH>,<%i3>)
+define(<DST>,	<%i4>)
+define(<SRC>,	<%i5>)
 
 C	AES state, two copies for unrolling
 
@@ -46,10 +47,10 @@ define(<X3>,	<%l7>)
 
 C	%o0-%03 are used for loop invariants T0-T3
 define(<KEY>,	<%o4>)
-define(<ROUND>, <%o5>)
+define(<COUNT>, <%o5>)
 
 C %g1, %g2, %g3 are TMP1, TMP2 and TMP3
-		
+
 C The sparc64 stack frame looks like
 C
 C %fp -   8: OS-dependent link field
@@ -59,7 +60,7 @@ define(<FRAME_SIZE>, 192)
 
 	.file "aes-encrypt-internal.asm"
 
-	C _aes_encrypt(struct aes_context *ctx, 
+	C _aes_encrypt(unsigned rounds, const uint32_t *keys,
 	C	       const struct aes_table *T,
 	C	       size_t length, uint8_t *dst,
 	C	       uint8_t *src)
@@ -80,22 +81,23 @@ PROLOGUE(_nettle_aes_encrypt)
 	add	T, AES_TABLE2, T2
 	add	T, AES_TABLE3, T3
 
+	C	Must be even, and includes the final round
+	srl	ROUNDS, 1, ROUNDS
+	C	Last two rounds handled specially
+	sub	ROUNDS, 1, ROUNDS
+
 .Lblock_loop:
 	C  Read src, and add initial subkey
-	add	CTX, AES_KEYS, KEY
+	mov	KEYS, KEY
 	AES_LOAD(0, SRC, KEY, W0)
 	AES_LOAD(1, SRC, KEY, W1)
 	AES_LOAD(2, SRC, KEY, W2)
 	AES_LOAD(3, SRC, KEY, W3)
 
-	C	Must be even, and includes the final round
-	ld	[AES_NROUNDS + CTX], ROUND
+	mov	ROUNDS, COUNT
 	add	SRC, 16, SRC
 	add	KEY, 16, KEY
 
-	srl	ROUND, 1, ROUND
-	C	Last two rounds handled specially
-	sub	ROUND, 1, ROUND
 .Lround_loop:
 	C The AES_ROUND macro uses T0,... T3
 	C	Transform W -> X
@@ -110,7 +112,7 @@ PROLOGUE(_nettle_aes_encrypt)
 	AES_ROUND(6, X2, X3, X0, X1, KEY, W2)
 	AES_ROUND(7, X3, X0, X1, X2, KEY, W3)
 
-	subcc	ROUND, 1, ROUND
+	subcc	COUNT, 1, COUNT
 	bne	.Lround_loop
 	add	KEY, 32, KEY