Files
gentoo/dev-libs/libgcrypt/files/libgcrypt-1.11.0-arm.patch
Sam James d8d21afc61 dev-libs/libgcrypt: backport fix for arm asm
Noticed Alpine pull this in earlier.

Signed-off-by: Sam James <sam@gentoo.org>
2024-10-17 05:11:18 +01:00

128 lines
4.1 KiB
Diff

https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=9c93b4607adcf9b3efd53aba43e2d33bf5aef9df
From 9c93b4607adcf9b3efd53aba43e2d33bf5aef9df Mon Sep 17 00:00:00 2001
From: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Date: Sun, 4 Aug 2024 18:04:49 +0300
Subject: [PATCH] mpi/ec-inline: reduce register pressure on 32-bit ARM
* mpi/ec-inline.h [HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS] (ADD4_LIMB32)
(ADD6_LIMB32, SUB4_LIMB32, SUB6_LIMB32): Reuse input registers
as output (use just two unique operators).
--
This fixes building ec-nist.c with GCC-14 on 32-bit ARM.
GnuPG-bug-id: 7226
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
--- a/mpi/ec-inline.h
+++ b/mpi/ec-inline.h
@@ -836,18 +836,18 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
#ifdef HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS
#define ADD4_LIMB32(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) \
- __asm__ ("adds %3, %7, %11\n" \
- "adcs %2, %6, %10\n" \
- "adcs %1, %5, %9\n" \
- "adc %0, %4, %8\n" \
+ __asm__ ("adds %3, %3, %11\n" \
+ "adcs %2, %2, %10\n" \
+ "adcs %1, %1, %9\n" \
+ "adc %0, %0, %8\n" \
: "=r" (A3), \
"=&r" (A2), \
"=&r" (A1), \
"=&r" (A0) \
- : "r" ((mpi_limb_t)(B3)), \
- "r" ((mpi_limb_t)(B2)), \
- "r" ((mpi_limb_t)(B1)), \
- "r" ((mpi_limb_t)(B0)), \
+ : "0" ((mpi_limb_t)(B3)), \
+ "1" ((mpi_limb_t)(B2)), \
+ "2" ((mpi_limb_t)(B1)), \
+ "3" ((mpi_limb_t)(B0)), \
"Ir" ((mpi_limb_t)(C3)), \
"Ir" ((mpi_limb_t)(C2)), \
"Ir" ((mpi_limb_t)(C1)), \
@@ -857,18 +857,18 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
#define ADD6_LIMB32(A5, A4, A3, A2, A1, A0, B5, B4, B3, B2, B1, B0, \
C5, C4, C3, C2, C1, C0) do { \
mpi_limb_t __carry6_32; \
- __asm__ ("adds %3, %7, %10\n" \
- "adcs %2, %6, %9\n" \
- "adcs %1, %5, %8\n" \
- "adc %0, %4, %4\n" \
+ __asm__ ("adds %3, %3, %10\n" \
+ "adcs %2, %2, %9\n" \
+ "adcs %1, %1, %8\n" \
+ "adc %0, %0, %0\n" \
: "=r" (__carry6_32), \
"=&r" (A2), \
"=&r" (A1), \
"=&r" (A0) \
- : "r" ((mpi_limb_t)(0)), \
- "r" ((mpi_limb_t)(B2)), \
- "r" ((mpi_limb_t)(B1)), \
- "r" ((mpi_limb_t)(B0)), \
+ : "0" ((mpi_limb_t)(0)), \
+ "1" ((mpi_limb_t)(B2)), \
+ "2" ((mpi_limb_t)(B1)), \
+ "3" ((mpi_limb_t)(B0)), \
"Ir" ((mpi_limb_t)(C2)), \
"Ir" ((mpi_limb_t)(C1)), \
"Ir" ((mpi_limb_t)(C0)) \
@@ -878,18 +878,18 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
} while (0)
#define SUB4_LIMB32(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) \
- __asm__ ("subs %3, %7, %11\n" \
- "sbcs %2, %6, %10\n" \
- "sbcs %1, %5, %9\n" \
- "sbc %0, %4, %8\n" \
+ __asm__ ("subs %3, %3, %11\n" \
+ "sbcs %2, %2, %10\n" \
+ "sbcs %1, %1, %9\n" \
+ "sbc %0, %0, %8\n" \
: "=r" (A3), \
"=&r" (A2), \
"=&r" (A1), \
"=&r" (A0) \
- : "r" ((mpi_limb_t)(B3)), \
- "r" ((mpi_limb_t)(B2)), \
- "r" ((mpi_limb_t)(B1)), \
- "r" ((mpi_limb_t)(B0)), \
+ : "0" ((mpi_limb_t)(B3)), \
+ "1" ((mpi_limb_t)(B2)), \
+ "2" ((mpi_limb_t)(B1)), \
+ "3" ((mpi_limb_t)(B0)), \
"Ir" ((mpi_limb_t)(C3)), \
"Ir" ((mpi_limb_t)(C2)), \
"Ir" ((mpi_limb_t)(C1)), \
@@ -899,18 +899,17 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
#define SUB6_LIMB32(A5, A4, A3, A2, A1, A0, B5, B4, B3, B2, B1, B0, \
C5, C4, C3, C2, C1, C0) do { \
mpi_limb_t __borrow6_32; \
- __asm__ ("subs %3, %7, %10\n" \
- "sbcs %2, %6, %9\n" \
- "sbcs %1, %5, %8\n" \
- "sbc %0, %4, %4\n" \
+ __asm__ ("subs %3, %3, %9\n" \
+ "sbcs %2, %2, %8\n" \
+ "sbcs %1, %1, %7\n" \
+ "sbc %0, %0, %0\n" \
: "=r" (__borrow6_32), \
"=&r" (A2), \
"=&r" (A1), \
"=&r" (A0) \
- : "r" ((mpi_limb_t)(0)), \
- "r" ((mpi_limb_t)(B2)), \
- "r" ((mpi_limb_t)(B1)), \
- "r" ((mpi_limb_t)(B0)), \
+ : "1" ((mpi_limb_t)(B2)), \
+ "2" ((mpi_limb_t)(B1)), \
+ "3" ((mpi_limb_t)(B0)), \
"Ir" ((mpi_limb_t)(C2)), \
"Ir" ((mpi_limb_t)(C1)), \
"Ir" ((mpi_limb_t)(C0)) \
--
2.30.2