]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
lib/crypto: arm64/sha512-ce: Drop compatibility macros for older binutils
authorEric Biggers <ebiggers@kernel.org>
Fri, 18 Jul 2025 22:07:06 +0000 (15:07 -0700)
committerEric Biggers <ebiggers@kernel.org>
Mon, 21 Jul 2025 04:43:27 +0000 (21:43 -0700)
Now that the oldest supported binutils version is 2.30, the macros that
emit the SHA-512 instructions as '.inst' words are no longer needed.  So
drop them.  No change in the generated machine code.

Changed from the original patch by Ard Biesheuvel:
(https://lore.kernel.org/r/20250515142702.2592942-2-ardb+git@google.com):
 - Reduced scope to just SHA-512
 - Added comment that explains why "sha3" is used instead of "sha2"

Acked-by: Ard Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20250718220706.475240-1-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
lib/crypto/arm64/sha512-ce-core.S

index 7d870a435ea387e55f19b501cba5d9069a01c2b3..22f1ded89bc888df8f083893f0615a59c52e97a8 100644 (file)
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 
-       .irp            b,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
-       .set            .Lq\b, \b
-       .set            .Lv\b\().2d, \b
-       .endr
-
-       .macro          sha512h, rd, rn, rm
-       .inst           0xce608000 | .L\rd | (.L\rn << 5) | (.L\rm << 16)
-       .endm
-
-       .macro          sha512h2, rd, rn, rm
-       .inst           0xce608400 | .L\rd | (.L\rn << 5) | (.L\rm << 16)
-       .endm
-
-       .macro          sha512su0, rd, rn
-       .inst           0xcec08000 | .L\rd | (.L\rn << 5)
-       .endm
-
-       .macro          sha512su1, rd, rn, rm
-       .inst           0xce608800 | .L\rd | (.L\rn << 5) | (.L\rm << 16)
-       .endm
+       /*
+        * We have to specify the "sha3" feature here, since the GNU and clang
+        * assemblers both consider the SHA-512 instructions to be part of the
+        * "sha3" feature.  (Except binutils 2.30 through 2.42, which used
+        * "sha2".  But "sha3" implies "sha2", so "sha3" still works in those
+        * versions.)  "sha3" doesn't make a lot of sense, since SHA-512 is part
+        * of the SHA-2 family of algorithms, and also the Arm Architecture
+        * Reference Manual defines FEAT_SHA512 and FEAT_SHA3 separately.
+        * Regardless, we must use "sha3" to be compatible with the assemblers.
+        */
+       .arch           armv8-a+sha3
 
        /*
         * The SHA-512 round constants