From c44af98f3a0ec2fd14dd64703c6a14fb999dc54d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Wed, 24 Jan 2024 10:51:10 +0100
Subject: [PATCH] Delete sparc32 assembly files.

---
 ChangeLog                        |  12 +++
 Makefile.in                      |   2 +-
 configure.ac                     |   2 -
 sparc32/aes-decrypt-internal.asm | 146 --------------------------
 sparc32/aes-encrypt-internal.asm | 170 -------------------------------
 sparc32/machine.m4               |   0
 sparc64/aes-decrypt-internal.asm |   8 +-
 sparc64/aes-encrypt-internal.asm |   8 +-
 {sparc32 => sparc64}/aes.m4      |   4 +-
 9 files changed, 17 insertions(+), 335 deletions(-)
 delete mode 100644 sparc32/aes-decrypt-internal.asm
 delete mode 100644 sparc32/aes-encrypt-internal.asm
 delete mode 100644 sparc32/machine.m4
 rename {sparc32 => sparc64}/aes.m4 (99%)

diff --git a/ChangeLog b/ChangeLog
index 0062ee3d..1a891e48 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2024-01-26  Niels Möller  <nisse@lysator.liu.se>
+
+	Delete all sparc32 assembly.
+	* sparc32/aes-decrypt-internal.asm: Deleted file.
+	* sparc32/aes-encrypt-internal.asm: Deleted file.
+	* configure.ac: Don't enable any assembly for 32-bit sparc.
+	* Makefile.in (distdir): Don't distribute sparc32 files.
+	* sparc64/aes.m4: Moved file, from...
+	* sparc32/aes.m4: ... old location.
+	* sparc64/aes-encrypt-internal.asm: Update for location of aes.m4.
+	* sparc64/aes-decrypt-internal.asm: Likewise.
+
 2024-01-23  Niels Möller  <nisse@lysator.liu.se>
 
 	* powerpc64/machine.m4 (GHASH_REDUCE): New macro. Improve
diff --git a/Makefile.in b/Makefile.in
index bde6cf2a..d4147412 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -614,7 +614,7 @@ distdir: $(DISTFILES)
 	  else cp "$(srcdir)/$$f" "$(distdir)" ; \
 	  fi ; \
 	done
-	set -e; for d in sparc32 sparc64 x86 \
+	set -e; for d in sparc64 x86 \
 		x86_64 x86_64/aesni x86_64/sha_ni x86_64/pclmul x86_64/fat \
 		arm arm/neon arm/v6 arm/fat \
 		arm64 arm64/crypto arm64/fat \
diff --git a/configure.ac b/configure.ac
index fd533664..d3145da9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -486,8 +486,6 @@ if test "x$enable_assembler" = xyes ; then
     *sparc*)
       if test "$ABI" = 64 ; then
 	asm_path=sparc64
-      else
-	asm_path=sparc32
       fi
       ;;
     arm*)
diff --git a/sparc32/aes-decrypt-internal.asm b/sparc32/aes-decrypt-internal.asm
deleted file mode 100644
index 80942e44..00000000
--- a/sparc32/aes-decrypt-internal.asm
+++ /dev/null
@@ -1,146 +0,0 @@
-C sparc32/aes-decrypt-internal.asm
-
-ifelse(`
-   Copyright (C) 2002, 2005, 2013 Niels Möller
-
-   This file is part of GNU Nettle.
-
-   GNU Nettle is free software: you can redistribute it and/or
-   modify it under the terms of either:
-
-     * the GNU Lesser General Public License as published by the Free
-       Software Foundation; either version 3 of the License, or (at your
-       option) any later version.
-
-   or
-
-     * the GNU General Public License as published by the Free
-       Software Foundation; either version 2 of the License, or (at your
-       option) any later version.
-
-   or both in parallel, as here.
-
-   GNU Nettle is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-
-   You should have received copies of the GNU General Public License and
-   the GNU Lesser General Public License along with this program.  If
-   not, see http://www.gnu.org/licenses/.
-')
-
-include_src(`sparc32/aes.m4')
-
-C	Arguments
-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
-
-define(`W0',	`%l0')
-define(`W1',	`%l1')
-define(`W2',	`%l2')
-define(`W3',	`%l3')
-
-define(`X0',	`%l4')
-define(`X1',	`%l5')
-define(`X2',	`%l6')
-define(`X3',	`%l7')
-
-C	%o0-%03 are used for loop invariants T0-T3
-define(`KEY',	`%o4')
-define(`COUNT', `%o5')
-
-C %g1, %g2, %g3 are TMP1, TMP2 and TMP3
-
-C The sparc32 stack frame looks like
-C
-C %fp -   4: OS-dependent link field
-C %fp -   8: OS-dependent link field
-C %fp - 104: OS register save area. 
-define(`FRAME_SIZE', 104)
-
-	.file "aes-decrypt-internal.asm"
-
-	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)
-
-	.section	".text"
-	.align 16
-	.proc	020
-	
-PROLOGUE(_nettle_aes_decrypt)
-
-	save	%sp, -FRAME_SIZE, %sp
-	cmp	LENGTH, 0
-	be	.Lend
-
-	C	Loop invariants
-	add	T, AES_TABLE0, T0
-	add	T, AES_TABLE1, T1
-	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
-	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)
-
-	mov	ROUNDS, COUNT
-	add	SRC, 16, SRC
-	add	KEY, 16, KEY
-
-.Lround_loop:
-	C The AES_ROUND macro uses T0,... T3
-	C	Transform W -> X
-	AES_ROUND(0, W0, W3, W2, W1, KEY, X0)
-	AES_ROUND(1, W1, W0, W3, W2, KEY, X1)
-	AES_ROUND(2, W2, W1, W0, W3, KEY, X2)
-	AES_ROUND(3, W3, W2, W1, W0, KEY, X3)
-
-	C	Transform X -> W
-	AES_ROUND(4, X0, X3, X2, X1, KEY, W0)
-	AES_ROUND(5, X1, X0, X3, X2, KEY, W1)
-	AES_ROUND(6, X2, X1, X0, X3, KEY, W2)
-	AES_ROUND(7, X3, X2, X1, X0, KEY, W3)
-
-	subcc	COUNT, 1, COUNT
-	bne	.Lround_loop
-	add	KEY, 32, KEY
-
-	C	Penultimate round
-	AES_ROUND(0, W0, W3, W2, W1, KEY, X0)
-	AES_ROUND(1, W1, W0, W3, W2, KEY, X1)
-	AES_ROUND(2, W2, W1, W0, W3, KEY, X2)
-	AES_ROUND(3, W3, W2, W1, W0, KEY, X3)
-
-	add	KEY, 16, KEY
-	C	Final round
-	AES_FINAL_ROUND(0, T, X0, X3, X2, X1, KEY, DST)
-	AES_FINAL_ROUND(1, T, X1, X0, X3, X2, KEY, DST)
-	AES_FINAL_ROUND(2, T, X2, X1, X0, X3, KEY, DST)
-	AES_FINAL_ROUND(3, T, X3, X2, X1, X0, KEY, DST)
-
-	subcc	LENGTH, 16, LENGTH
-	bne	.Lblock_loop
-	add	DST, 16, DST
-
-.Lend:
-	ret
-	restore
-EPILOGUE(_nettle_aes_decrypt)
diff --git a/sparc32/aes-encrypt-internal.asm b/sparc32/aes-encrypt-internal.asm
deleted file mode 100644
index da88fe00..00000000
--- a/sparc32/aes-encrypt-internal.asm
+++ /dev/null
@@ -1,170 +0,0 @@
-C sparc32/aes-encrypt-internal.asm
-
-ifelse(`
-   Copyright (C) 2002, 2005, 2013 Niels Möller
-
-   This file is part of GNU Nettle.
-
-   GNU Nettle is free software: you can redistribute it and/or
-   modify it under the terms of either:
-
-     * the GNU Lesser General Public License as published by the Free
-       Software Foundation; either version 3 of the License, or (at your
-       option) any later version.
-
-   or
-
-     * the GNU General Public License as published by the Free
-       Software Foundation; either version 2 of the License, or (at your
-       option) any later version.
-
-   or both in parallel, as here.
-
-   GNU Nettle is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-
-   You should have received copies of the GNU General Public License and
-   the GNU Lesser General Public License along with this program.  If
-   not, see http://www.gnu.org/licenses/.
-')
-
-include_src(`sparc32/aes.m4')
-
-C	Arguments
-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
-
-define(`W0',	`%l0')
-define(`W1',	`%l1')
-define(`W2',	`%l2')
-define(`W3',	`%l3')
-
-define(`X0',	`%l4')
-define(`X1',	`%l5')
-define(`X2',	`%l6')
-define(`X3',	`%l7')
-
-C	%o0-%03 are used for loop invariants T0-T3
-define(`KEY',	`%o4')
-define(`COUNT', `%o5')
-
-C %g1, %g2, %g3 are TMP1, TMP2 and TMP3
-
-C I'm still slightly confused by the frame layout, specified in
-C "SYSTEM V APPLICATION BINARY INTERFACE SPARC Processor Supplement".
-C However, Sun's cc generates a 104 byte stack frame for a function
-C with no local variables, so that should be good enough for us too.
-
-C The sparc32 stack frame looks like
-C
-C %fp -   4: OS-dependent link field
-C %fp -   8: OS-dependent link field
-C %fp - 104: OS register save area 
-define(`FRAME_SIZE', 104)
-
-	.file "aes-encrypt-internal.asm"
-
-	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)
-
-	.section	".text"
-	.align 16
-	.proc	020
-	
-PROLOGUE(_nettle_aes_encrypt)
-
-	save	%sp, -FRAME_SIZE, %sp
-	cmp	LENGTH, 0
-	be	.Lend
-
-	C	Loop invariants
-	add	T, AES_TABLE0, T0
-	add	T, AES_TABLE1, T1
-	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
-	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)
-
-	mov	ROUNDS, COUNT
-	add	SRC, 16, SRC
-	add	KEY, 16, KEY
-
-.Lround_loop:
-	C The AES_ROUND macro uses T0,... T3
-	C	Transform W -> X
-	AES_ROUND(0, W0, W1, W2, W3, KEY, X0)
-	AES_ROUND(1, W1, W2, W3, W0, KEY, X1)
-	AES_ROUND(2, W2, W3, W0, W1, KEY, X2)
-	AES_ROUND(3, W3, W0, W1, W2, KEY, X3)
-
-	C	Transform X -> W
-	AES_ROUND(4, X0, X1, X2, X3, KEY, W0)
-	AES_ROUND(5, X1, X2, X3, X0, KEY, W1)
-	AES_ROUND(6, X2, X3, X0, X1, KEY, W2)
-	AES_ROUND(7, X3, X0, X1, X2, KEY, W3)
-
-	subcc	COUNT, 1, COUNT
-	bne	.Lround_loop
-	add	KEY, 32, KEY
-
-	C	Penultimate round
-	AES_ROUND(0, W0, W1, W2, W3, KEY, X0)
-	AES_ROUND(1, W1, W2, W3, W0, KEY, X1)
-	AES_ROUND(2, W2, W3, W0, W1, KEY, X2)
-	AES_ROUND(3, W3, W0, W1, W2, KEY, X3)
-
-	add	KEY, 16, KEY
-	C	Final round
-	AES_FINAL_ROUND(0, T, X0, X1, X2, X3, KEY, DST)
-	AES_FINAL_ROUND(1, T, X1, X2, X3, X0, KEY, DST)
-	AES_FINAL_ROUND(2, T, X2, X3, X0, X1, KEY, DST)
-	AES_FINAL_ROUND(3, T, X3, X0, X1, X2, KEY, DST)
-
-	subcc	LENGTH, 16, LENGTH
-	bne	.Lblock_loop
-	add	DST, 16, DST
-
-.Lend:
-	ret
-	restore
-EPILOGUE(_nettle_aes_encrypt)
-
-C Some stats from adriana.lysator.liu.se (SS1000$, 85 MHz), for AES 128
-
-C 1:	nettle-1.13 C-code
-C 2:	nettle-1.13 assembler
-C 3:	New C-code
-C 4:	New assembler, first correct version
-C 5:	New assembler, with basic scheduling of AES_ROUND.
-C 6:	New assembpler, with loop invariants T0-T3.
-C 7:	New assembler, with basic scheduling also of AES_FINAL_ROUND.
-	
-C	MB/s	cycles/block	Code size (bytes)
-C 1	1.2	1107		592
-C 2	2.3	572		1032
-C 3	2.1	627
-C 4	1.8	722
-C 5	2.6	496
-C 6	3.0	437
-C 7	3.1	415		1448
diff --git a/sparc32/machine.m4 b/sparc32/machine.m4
deleted file mode 100644
index e69de29b..00000000
diff --git a/sparc64/aes-decrypt-internal.asm b/sparc64/aes-decrypt-internal.asm
index d4d61eed..a43ced36 100644
--- a/sparc64/aes-decrypt-internal.asm
+++ b/sparc64/aes-decrypt-internal.asm
@@ -30,13 +30,7 @@ ifelse(`
    not, see http://www.gnu.org/licenses/.
 ')
 
-C The only difference between this code and the sparc32 code is the
-C frame offsets, and the magic BIAS when accessing the stack (which
-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(`sparc64/aes.m4')
 
 C	Arguments
 define(`ROUNDS',`%i0')
diff --git a/sparc64/aes-encrypt-internal.asm b/sparc64/aes-encrypt-internal.asm
index 24a9d6b0..4340bfb0 100644
--- a/sparc64/aes-encrypt-internal.asm
+++ b/sparc64/aes-encrypt-internal.asm
@@ -30,13 +30,7 @@ ifelse(`
    not, see http://www.gnu.org/licenses/.
 ')
 
-C The only difference between this code and the sparc32 code is the
-C frame offsets, and the magic BIAS when accessing the stack (which
-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(`sparc64/aes.m4')
 
 C	Arguments
 define(`ROUNDS',`%i0')
diff --git a/sparc32/aes.m4 b/sparc64/aes.m4
similarity index 99%
rename from sparc32/aes.m4
rename to sparc64/aes.m4
index 5ce3b60d..47ddccbd 100644
--- a/sparc32/aes.m4
+++ b/sparc64/aes.m4
@@ -15,12 +15,12 @@ define(`AES_LOAD', `
 	ldub	[$2 + 4*$1 + 1], TMP1
 	ldub	[$2 + 4*$1 + 2], TMP2
 	sll	TMP1, 8, TMP1
-	
+
 	or	$4, TMP1, $4
 	ldub	[$2 + 4*$1+3], TMP1
 	sll	TMP2, 16, TMP2
 	or	$4, TMP2, $4
-	
+
 	sll	TMP1, 24, TMP1
 	C	Get subkey
 	ld	[$3 + 4*$1], TMP2
-- 
GitLab