From 0bf40347abfca4bcc3f04104780f52d3817d5524 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Sun, 16 Oct 2005 11:53:12 +0200
Subject: [PATCH] * sparc/aes-encrypt-internal.asm: Fixed bugs. Now passes the
 testsuite.

Rev: src/nettle/sparc/aes-encrypt-internal.asm:1.5
---
 sparc/aes-encrypt-internal.asm | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/sparc/aes-encrypt-internal.asm b/sparc/aes-encrypt-internal.asm
index 33646708..965ea19d 100644
--- a/sparc/aes-encrypt-internal.asm
+++ b/sparc/aes-encrypt-internal.asm
@@ -84,8 +84,10 @@ PROLOGUE(_nettle_aes_encrypt)
 
 	C	Must be even, and includes the final round
 	ld	[AES_NROUNDS + CTX], ROUND
+	nop
 	srl	ROUND, 1, ROUND
-
+	C	Last two rounds handled specially
+	sub	ROUND, 1, ROUND
 .Lround_loop:
 	C	Transform W -> T
 	AES_ROUND(0, T, W0, W1, W2, W3, KEY, T0)
@@ -111,10 +113,10 @@ PROLOGUE(_nettle_aes_encrypt)
 
 	add	KEY, 16, KEY
 	C	Final round
-	AES_ROUND(0, T, T0, T1, T2, T3, KEY, DST)
-	AES_ROUND(1, T, T1, T2, T3, T0, KEY, DST)
-	AES_ROUND(2, T, T2, T3, T0, T1, KEY, DST)
-	AES_ROUND(3, T, T3, T0, T1, T2, KEY, DST)
+	AES_FINAL_ROUND(0, T, T0, T1, T2, T3, KEY, DST)
+	AES_FINAL_ROUND(1, T, T1, T2, T3, T0, KEY, DST)
+	AES_FINAL_ROUND(2, T, T2, T3, T0, T1, KEY, DST)
+	AES_FINAL_ROUND(3, T, T3, T0, T1, T2, KEY, DST)
 
 	subcc	LENGTH, 16, LENGTH
 	bne	.Lblock_loop
@@ -127,9 +129,14 @@ EPILOGUE(_nettle_aes_encrypt)
 
 C Some stats from adriana.lysator.liu.se (SS1000$, 85 MHz), for AES 128
 
-C nettle-1.13 C-code:		1.2 MB/s, 1107 cycles/block	
-C nettle-1.13 assembler:	2.3 MB/s,  572 cycles/block
-
-C New C-code:			2.1 MB/s,  615 cycles/block
+C A:	nettle-1.13 C-code
+C B:	nettle-1.13 assembler
+C C:	New C-code
+C D:	New assembler, first correct version
 
+C	MB/s	cycles/block
+C A	1.2	1107
+C B	2.3	572
+C C	2.1	627
+C D	1.8	722
 	
-- 
GitLab