commit:     421499853acb201ed5615ec332081d377a77a71b
Author:     Ben Kohler <bkohler <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 30 13:56:00 2024 +0000
Commit:     Ben Kohler <bkohler <AT> gentoo <DOT> org>
CommitDate: Tue Apr 30 13:56:00 2024 +0000
URL:        https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=42149985

patches/libgcrypt: update for 1.10.3

Signed-off-by: Ben Kohler <bkohler <AT> gentoo.org>

 .../libgcrypt/1.10.3/libgcrypt-1.10.3-hppa.patch   | 110 ++++++
 .../1.10.3/libgcrypt-1.10.3-x86-refactor.patch     | 428 +++++++++++++++++++++
 .../libgcrypt/1.10.3/libgcrypt-1.10.3-x86.patch    |  94 +++++
 ...libgcrypt-1.9.4-no-fgrep-libgcrypt-config.patch |  21 +
 .../1.10.3/libgcrypt-multilib-syspath.patch        |  23 ++
 .../1.10.3/libgcrypt-powerpc-darwin.patch          |  16 +
 6 files changed, 692 insertions(+)

diff --git a/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-hppa.patch 
b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-hppa.patch
new file mode 100644
index 0000000..daa1bba
--- /dev/null
+++ b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-hppa.patch
@@ -0,0 +1,110 @@
+https://bugs.gentoo.org/925284
+https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=75e9bcccb69a9dea67d90840bd295bbd1749cea3
+
+From 75e9bcccb69a9dea67d90840bd295bbd1749cea3 Mon Sep 17 00:00:00 2001
+From: NIIBE Yutaka <gni...@fsij.org>
+Date: Mon, 4 Mar 2024 09:00:59 +0900
+Subject: [PATCH] mpi: Fix ECC computation on hppa.
+
+* mpi/ec-inline.h [__hppa] (ADD4_LIMB32, SUB4_LIMB32): New.
+* mpi/longlong.h [__hppa] (add_ssaaaa, sub_ddmmss): Add __CLOBBER_CC.
+
+--
+
+Cherry-pick master commit of:
+       b757f4130af987bdfc769b754b6e9e27882c349c
+
+GnuPG-bug-id: 7022
+Signed-off-by: NIIBE Yutaka <gni...@fsij.org>
+---
+ mpi/ec-inline.h | 40 ++++++++++++++++++++++++++++++++++++++++
+ mpi/longlong.h  | 12 ++++++------
+ 2 files changed, 46 insertions(+), 6 deletions(-)
+
+diff --git a/mpi/ec-inline.h b/mpi/ec-inline.h
+index 0ffdf8eb..c24d5352 100644
+--- a/mpi/ec-inline.h
++++ b/mpi/ec-inline.h
+@@ -921,6 +921,46 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
+ 
+ #endif /* HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS */
+ 
++#if defined (__hppa) && __GNUC__ >= 4
++#define ADD4_LIMB32(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) \
++  __asm__ ("add %7,%11,%3\n\t" \
++         "addc %6,%10,%2\n\t" \
++         "addc %5,%9,%1\n\t" \
++         "addc %4,%8,%0" \
++         : "=r" (A3), \
++           "=&r" (A2), \
++           "=&r" (A1), \
++           "=&r" (A0) \
++         : "rM" ((mpi_limb_t)(B3)), \
++           "rM" ((mpi_limb_t)(B2)), \
++           "rM" ((mpi_limb_t)(B1)), \
++           "rM" ((mpi_limb_t)(B0)), \
++           "rM" ((mpi_limb_t)(C3)), \
++           "rM" ((mpi_limb_t)(C2)), \
++           "rM" ((mpi_limb_t)(C1)), \
++           "rM" ((mpi_limb_t)(C0)) \
++         : "cc")
++
++#define SUB4_LIMB32(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) \
++  __asm__ ("sub %7,%11,%3\n\t" \
++         "subb %6,%10,%2\n\t" \
++         "subb %5,%9,%1\n\t" \
++         "subb %4,%8,%0\n\t" \
++         : "=r" (A3), \
++           "=&r" (A2), \
++           "=&r" (A1), \
++           "=&r" (A0) \
++         : "rM" ((mpi_limb_t)(B3)), \
++           "rM" ((mpi_limb_t)(B2)), \
++           "rM" ((mpi_limb_t)(B1)), \
++           "rM" ((mpi_limb_t)(B0)), \
++           "rM" ((mpi_limb_t)(C3)), \
++           "rM" ((mpi_limb_t)(C2)), \
++           "rM" ((mpi_limb_t)(C1)), \
++           "rM" ((mpi_limb_t)(C0)) \
++         : "cc")
++
++#endif /* __hppa */
+ 
+ /* Common 32-bit arch addition/subtraction macros.  */
+ 
+diff --git a/mpi/longlong.h b/mpi/longlong.h
+index c299534c..1ab70e7e 100644
+--- a/mpi/longlong.h
++++ b/mpi/longlong.h
+@@ -394,23 +394,23 @@ extern UDItype __udiv_qrnnd ();
+  ***************************************/
+ #if defined (__hppa) && W_TYPE_SIZE == 32
+ # define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+-  __asm__ ("  add %4,%5,%1\n"                                             \
+-         "    addc %2,%3,%0"                                              \
++  __asm__ ("add %4,%5,%1\n\t"                                           \
++         "addc %2,%3,%0"                                              \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "%rM" ((USItype)(ah)),                                     \
+            "rM" ((USItype)(bh)),                                      \
+            "%rM" ((USItype)(al)),                                     \
+-           "rM" ((USItype)(bl)))
++           "rM" ((USItype)(bl)) __CLOBBER_CC)
+ # define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+-  __asm__ ("  sub %4,%5,%1\n"                                             \
+-         "    subb %2,%3,%0"                                              \
++  __asm__ ("sub %4,%5,%1\n\t"                                           \
++         "subb %2,%3,%0"                                              \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "rM" ((USItype)(ah)),                                      \
+            "rM" ((USItype)(bh)),                                      \
+            "rM" ((USItype)(al)),                                      \
+-           "rM" ((USItype)(bl)))
++           "rM" ((USItype)(bl)) __CLOBBER_CC)
+ # if defined (_PA_RISC1_1)
+ #  define umul_ppmm(wh, wl, u, v) \
+   do {                                                                        
\
+-- 
+2.30.2

diff --git a/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86-refactor.patch 
b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86-refactor.patch
new file mode 100644
index 0000000..5271506
--- /dev/null
+++ b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86-refactor.patch
@@ -0,0 +1,428 @@
+https://bugs.gentoo.org/915060
+https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=07f0563d325c6589ca1560525d3b22291feec227
+
+From 07f0563d325c6589ca1560525d3b22291feec227 Mon Sep 17 00:00:00 2001
+From: Jussi Kivilinna <jussi.kivili...@iki.fi>
+Date: Tue, 19 Dec 2023 20:23:47 +0200
+Subject: [PATCH] mpi/ec-inline: refactor i386 assembly to reduce register
+ usage
+
+* mpi/ec-inline.h [__i386__] (ADD2_LIMB32_CARRY_OUT)
+(ADD2_LIMB32_CARRY_IN_OUT, ADD2_LIB32_CARRY_IN, SUB2_LIMB32_CARRY_OUT)
+(SUB2_LIMB32_CARRY_IN_OUT, SUB2_LIB32_CARRY_IN, ADD8_LIMB32)
+(ADD10_LIMB32, ADD14_LIMB32, SUB8_LIMB32, SUB10_LIMB32)
+(SUB14_LIMB32): New.
+[__i386__] (ADD4_LIMB32, ADD6_LIMB32, SUB4_LIMB32, SUB6_LIMB32): Rewrite
+to use new *_CARRY_* macros.
+[BYTES_PER_MPI_LIMB == 4] (ADD4_LIMB64): Use ADD8_LIMB32 if available.
+[BYTES_PER_MPI_LIMB == 4] (ADD5_LIMB64): Use ADD10_LIMB32 if available.
+[BYTES_PER_MPI_LIMB == 4] (ADD7_LIMB64): Use ADD14_LIMB32 if available.
+[BYTES_PER_MPI_LIMB == 4] (SUB4_LIMB64): Use SUB8_LIMB32 if available.
+[BYTES_PER_MPI_LIMB == 4] (SUB5_LIMB64): Use SUB10_LIMB32 if available.
+[BYTES_PER_MPI_LIMB == 4] (SUB7_LIMB64): Use SUB14_LIMB32 if available.
+--
+
+Cherry pick of master commit:
+     956f1ed4ec6ead59dc56f574f943f1fe25dac723
+
+This commit reduces number register operands and register pressure
+at i386 assembly used in `ec-nist.c` NIST-P192, P224, P256, and P384.
+Performance stays relatively same, with P192 being ~2% slower
+than before and P384 being ~5% faster.
+
+GnuPG-bug-id: T6892
+Signed-off-by: Jussi Kivilinna <jussi.kivili...@iki.fi>
+---
+ mpi/ec-inline.h | 327 +++++++++++++++++++++++++++++++++---------------
+ 1 file changed, 229 insertions(+), 98 deletions(-)
+
+diff --git a/mpi/ec-inline.h b/mpi/ec-inline.h
+index a07826e3..0ffdf8eb 100644
+--- a/mpi/ec-inline.h
++++ b/mpi/ec-inline.h
+@@ -641,116 +641,192 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
+ /* i386 addition/subtraction helpers.  */
+ #if defined (__i386__) && defined(HAVE_CPU_ARCH_X86) && __GNUC__ >= 4
+ 
+-#define ADD4_LIMB32(a3, a2, a1, a0, b3, b2, b1, b0, c3, c2, c1, c0) \
+-  __asm__ ("addl %11, %3\n" \
+-         "adcl %10, %2\n" \
+-         "adcl %9, %1\n" \
+-         "adcl %8, %0\n" \
+-         : "=r" (a3), \
+-           "=&r" (a2), \
++#define ADD2_LIMB32_CARRY_OUT(carry, a1, a0, b1, b0, c1, c0) \
++  __asm__ ("addl %7, %2\n" \
++         "adcl %6, %1\n" \
++         "sbbl %0, %0\n" \
++         : "=r" (carry), \
+            "=&r" (a1), \
+            "=&r" (a0) \
+-         : "0" ((mpi_limb_t)(b3)), \
+-           "1" ((mpi_limb_t)(b2)), \
+-           "2" ((mpi_limb_t)(b1)), \
+-           "3" ((mpi_limb_t)(b0)), \
+-           "g" ((mpi_limb_t)(c3)), \
+-           "g" ((mpi_limb_t)(c2)), \
+-           "g" ((mpi_limb_t)(c1)), \
+-           "g" ((mpi_limb_t)(c0)) \
++         : "0" ((mpi_limb_t)(0)), \
++           "1" ((mpi_limb_t)(b1)), \
++           "2" ((mpi_limb_t)(b0)), \
++           "re" ((mpi_limb_t)(c1)), \
++           "re" ((mpi_limb_t)(c0)) \
+          : "cc")
+ 
++#define ADD2_LIMB32_CARRY_IN_OUT(a1, a0, b1, b0, c1, c0, carry) \
++  __asm__ ("addl $1, %0\n" \
++         "adcl %7, %2\n" \
++         "adcl %6, %1\n" \
++         "sbbl %0, %0\n" \
++         : "=r" (carry), \
++           "=&r" (a1), \
++           "=&r" (a0) \
++         : "0" ((mpi_limb_t)(carry)), \
++           "1" ((mpi_limb_t)(b1)), \
++           "2" ((mpi_limb_t)(b0)), \
++           "re" ((mpi_limb_t)(c1)), \
++           "re" ((mpi_limb_t)(c0)) \
++         : "cc")
++
++#define ADD2_LIMB32_CARRY_IN(a1, a0, b1, b0, c1, c0, carry) \
++    __asm__ ("addl $1, %2\n" \
++           "adcl %7, %1\n" \
++           "adcl %6, %0\n" \
++           : "=r" (a1), \
++             "=&r" (a0), \
++             "=&g" (carry) \
++           : "0" ((mpi_limb_t)(b1)), \
++             "1" ((mpi_limb_t)(b0)), \
++             "2" ((mpi_limb_t)(carry)), \
++             "re" ((mpi_limb_t)(c1)), \
++             "re" ((mpi_limb_t)(c0)) \
++         : "cc")
++
++#define ADD4_LIMB32(a3, a2, a1, a0, b3, b2, b1, b0, c3, c2, c1, c0) do { \
++    mpi_limb_t __carry4_32; \
++    ADD2_LIMB32_CARRY_OUT(__carry4_32, a1, a0, b1, b0, c1, c0); \
++    ADD2_LIMB32_CARRY_IN(a3, a2, b3, b2, c3, c2, __carry4_32); \
++  } while (0)
++
+ #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__ ("addl %10, %3\n" \
+-           "adcl %9, %2\n" \
+-           "adcl %8, %1\n" \
+-           "sbbl %0, %0\n" \
+-           : "=r" (__carry6_32), \
+-             "=&r" (a2), \
+-             "=&r" (a1), \
+-             "=&r" (a0) \
+-           : "0" ((mpi_limb_t)(0)), \
+-             "1" ((mpi_limb_t)(b2)), \
+-             "2" ((mpi_limb_t)(b1)), \
+-             "3" ((mpi_limb_t)(b0)), \
+-             "g" ((mpi_limb_t)(c2)), \
+-             "g" ((mpi_limb_t)(c1)), \
+-             "g" ((mpi_limb_t)(c0)) \
+-           : "cc"); \
+-    __asm__ ("addl $1, %3\n" \
+-           "adcl %10, %2\n" \
+-           "adcl %9, %1\n" \
+-           "adcl %8, %0\n" \
+-           : "=r" (a5), \
+-             "=&r" (a4), \
+-             "=&r" (a3), \
+-             "=&r" (__carry6_32) \
+-           : "0" ((mpi_limb_t)(b5)), \
+-             "1" ((mpi_limb_t)(b4)), \
+-             "2" ((mpi_limb_t)(b3)), \
+-             "3" ((mpi_limb_t)(__carry6_32)), \
+-             "g" ((mpi_limb_t)(c5)), \
+-             "g" ((mpi_limb_t)(c4)), \
+-             "g" ((mpi_limb_t)(c3)) \
+-         : "cc"); \
++    ADD2_LIMB32_CARRY_OUT(__carry6_32, a1, a0, b1, b0, c1, c0); \
++    ADD2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry6_32); \
++    ADD2_LIMB32_CARRY_IN(a5, a4, b5, b4, c5, c4, __carry6_32); \
++  } while (0)
++
++#define ADD8_LIMB32(a7, a6, a5, a4, a3, a2, a1, a0, \
++                  b7, b6, b5, b4, b3, b2, b1, b0, \
++                  c7, c6, c5, c4, c3, c2, c1, c0) do { \
++    mpi_limb_t __carry8_32; \
++    ADD2_LIMB32_CARRY_OUT(__carry8_32, a1, a0, b1, b0, c1, c0); \
++    ADD2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry8_32); \
++    ADD2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry8_32); \
++    ADD2_LIMB32_CARRY_IN(a7, a6, b7, b6, c7, c6, __carry8_32); \
+   } while (0)
+ 
+-#define SUB4_LIMB32(a3, a2, a1, a0, b3, b2, b1, b0, c3, c2, c1, c0) \
+-  __asm__ ("subl %11, %3\n" \
+-         "sbbl %10, %2\n" \
+-         "sbbl %9, %1\n" \
+-         "sbbl %8, %0\n" \
+-         : "=r" (a3), \
+-           "=&r" (a2), \
++#define ADD10_LIMB32(a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, \
++                   b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, \
++                   c9, c8, c7, c6, c5, c4, c3, c2, c1, c0) do { \
++    mpi_limb_t __carry10_32; \
++    ADD2_LIMB32_CARRY_OUT(__carry10_32, a1, a0, b1, b0, c1, c0); \
++    ADD2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry10_32); \
++    ADD2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry10_32); \
++    ADD2_LIMB32_CARRY_IN_OUT(a7, a6, b7, b6, c7, c6, __carry10_32); \
++    ADD2_LIMB32_CARRY_IN(a9, a8, b9, b8, c9, c8, __carry10_32); \
++  } while (0)
++
++#define ADD14_LIMB32(a13, a12, a11, a10, a9, a8, a7, \
++                   a6, a5, a4, a3, a2, a1, a0, \
++                   b13, b12, b11, b10, b9, b8, b7, \
++                   b6, b5, b4, b3, b2, b1, b0, \
++                   c13, c12, c11, c10, c9, c8, c7, \
++                   c6, c5, c4, c3, c2, c1, c0) do { \
++    mpi_limb_t __carry14_32; \
++    ADD2_LIMB32_CARRY_OUT(__carry14_32, a1, a0, b1, b0, c1, c0); \
++    ADD2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry14_32); \
++    ADD2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry14_32); \
++    ADD2_LIMB32_CARRY_IN_OUT(a7, a6, b7, b6, c7, c6, __carry14_32); \
++    ADD2_LIMB32_CARRY_IN_OUT(a9, a8, b9, b8, c9, c8, __carry14_32); \
++    ADD2_LIMB32_CARRY_IN_OUT(a11, a10, b11, b10, c11, c10, __carry14_32); \
++    ADD2_LIMB32_CARRY_IN(a13, a12, b13, b12, c13, c12, __carry14_32); \
++  } while (0)
++
++#define SUB2_LIMB32_CARRY_OUT(carry, a1, a0, b1, b0, c1, c0) \
++  __asm__ ("subl %7, %2\n" \
++         "sbbl %6, %1\n" \
++         "sbbl %0, %0\n" \
++         : "=r" (carry), \
+            "=&r" (a1), \
+            "=&r" (a0) \
+-         : "0" ((mpi_limb_t)(b3)), \
+-           "1" ((mpi_limb_t)(b2)), \
+-           "2" ((mpi_limb_t)(b1)), \
+-           "3" ((mpi_limb_t)(b0)), \
+-           "g" ((mpi_limb_t)(c3)), \
+-           "g" ((mpi_limb_t)(c2)), \
+-           "g" ((mpi_limb_t)(c1)), \
+-           "g" ((mpi_limb_t)(c0)) \
++         : "0" ((mpi_limb_t)(0)), \
++           "1" ((mpi_limb_t)(b1)), \
++           "2" ((mpi_limb_t)(b0)), \
++           "re" ((mpi_limb_t)(c1)), \
++           "re" ((mpi_limb_t)(c0)) \
++         : "cc")
++
++#define SUB2_LIMB32_CARRY_IN_OUT(a1, a0, b1, b0, c1, c0, carry) \
++  __asm__ ("addl $1, %0\n" \
++         "sbbl %7, %2\n" \
++         "sbbl %6, %1\n" \
++         "sbbl %0, %0\n" \
++         : "=r" (carry), \
++           "=&r" (a1), \
++           "=&r" (a0) \
++         : "0" ((mpi_limb_t)(carry)), \
++           "1" ((mpi_limb_t)(b1)), \
++           "2" ((mpi_limb_t)(b0)), \
++           "re" ((mpi_limb_t)(c1)), \
++           "re" ((mpi_limb_t)(c0)) \
++         : "cc")
++
++#define SUB2_LIMB32_CARRY_IN(a1, a0, b1, b0, c1, c0, carry) \
++    __asm__ ("addl $1, %2\n" \
++           "sbbl %7, %1\n" \
++           "sbbl %6, %0\n" \
++           : "=r" (a1), \
++             "=&r" (a0), \
++             "=&g" (carry) \
++           : "0" ((mpi_limb_t)(b1)), \
++             "1" ((mpi_limb_t)(b0)), \
++             "2" ((mpi_limb_t)(carry)), \
++             "re" ((mpi_limb_t)(c1)), \
++             "re" ((mpi_limb_t)(c0)) \
+          : "cc")
+ 
++#define SUB4_LIMB32(a3, a2, a1, a0, b3, b2, b1, b0, c3, c2, c1, c0) do { \
++    mpi_limb_t __carry4_32; \
++    SUB2_LIMB32_CARRY_OUT(__carry4_32, a1, a0, b1, b0, c1, c0); \
++    SUB2_LIMB32_CARRY_IN(a3, a2, b3, b2, c3, c2, __carry4_32); \
++  } while (0)
++
+ #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__ ("subl %10, %3\n" \
+-           "sbbl %9, %2\n" \
+-           "sbbl %8, %1\n" \
+-           "sbbl %0, %0\n" \
+-           : "=r" (__borrow6_32), \
+-             "=&r" (a2), \
+-             "=&r" (a1), \
+-             "=&r" (a0) \
+-           : "0" ((mpi_limb_t)(0)), \
+-             "1" ((mpi_limb_t)(b2)), \
+-             "2" ((mpi_limb_t)(b1)), \
+-             "3" ((mpi_limb_t)(b0)), \
+-             "g" ((mpi_limb_t)(c2)), \
+-             "g" ((mpi_limb_t)(c1)), \
+-             "g" ((mpi_limb_t)(c0)) \
+-           : "cc"); \
+-    __asm__ ("addl $1, %3\n" \
+-           "sbbl %10, %2\n" \
+-           "sbbl %9, %1\n" \
+-           "sbbl %8, %0\n" \
+-           : "=r" (a5), \
+-             "=&r" (a4), \
+-             "=&r" (a3), \
+-             "=&r" (__borrow6_32) \
+-           : "0" ((mpi_limb_t)(b5)), \
+-             "1" ((mpi_limb_t)(b4)), \
+-             "2" ((mpi_limb_t)(b3)), \
+-             "3" ((mpi_limb_t)(__borrow6_32)), \
+-             "g" ((mpi_limb_t)(c5)), \
+-             "g" ((mpi_limb_t)(c4)), \
+-             "g" ((mpi_limb_t)(c3)) \
+-         : "cc"); \
++    mpi_limb_t __carry6_32; \
++    SUB2_LIMB32_CARRY_OUT(__carry6_32, a1, a0, b1, b0, c1, c0); \
++    SUB2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry6_32); \
++    SUB2_LIMB32_CARRY_IN(a5, a4, b5, b4, c5, c4, __carry6_32); \
++  } while (0)
++
++#define SUB8_LIMB32(a7, a6, a5, a4, a3, a2, a1, a0, \
++                  b7, b6, b5, b4, b3, b2, b1, b0, \
++                  c7, c6, c5, c4, c3, c2, c1, c0) do { \
++    mpi_limb_t __carry8_32; \
++    SUB2_LIMB32_CARRY_OUT(__carry8_32, a1, a0, b1, b0, c1, c0); \
++    SUB2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry8_32); \
++    SUB2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry8_32); \
++    SUB2_LIMB32_CARRY_IN(a7, a6, b7, b6, c7, c6, __carry8_32); \
++  } while (0)
++
++#define SUB10_LIMB32(a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, \
++                   b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, \
++                   c9, c8, c7, c6, c5, c4, c3, c2, c1, c0) do { \
++    mpi_limb_t __carry10_32; \
++    SUB2_LIMB32_CARRY_OUT(__carry10_32, a1, a0, b1, b0, c1, c0); \
++    SUB2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry10_32); \
++    SUB2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry10_32); \
++    SUB2_LIMB32_CARRY_IN_OUT(a7, a6, b7, b6, c7, c6, __carry10_32); \
++    SUB2_LIMB32_CARRY_IN(a9, a8, b9, b8, c9, c8, __carry10_32); \
++  } while (0)
++
++#define SUB14_LIMB32(a13, a12, a11, a10, a9, a8, a7, \
++                   a6, a5, a4, a3, a2, a1, a0, \
++                   b13, b12, b11, b10, b9, b8, b7, \
++                   b6, b5, b4, b3, b2, b1, b0, \
++                   c13, c12, c11, c10, c9, c8, c7, \
++                   c6, c5, c4, c3, c2, c1, c0) do { \
++    mpi_limb_t __carry14_32; \
++    SUB2_LIMB32_CARRY_OUT(__carry14_32, a1, a0, b1, b0, c1, c0); \
++    SUB2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry14_32); \
++    SUB2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry14_32); \
++    SUB2_LIMB32_CARRY_IN_OUT(a7, a6, b7, b6, c7, c6, __carry14_32); \
++    SUB2_LIMB32_CARRY_IN_OUT(a9, a8, b9, b8, c9, c8, __carry14_32); \
++    SUB2_LIMB32_CARRY_IN_OUT(a11, a10, b11, b10, c11, c10, __carry14_32); \
++    SUB2_LIMB32_CARRY_IN(a13, a12, b13, b12, c13, c12, __carry14_32); \
+   } while (0)
+ 
+ #endif /* __i386__ */
+@@ -820,7 +896,6 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
+            "Ir" ((mpi_limb_t)(C0)) \
+          : "cc")
+ 
+-
+ #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; \
+@@ -875,7 +950,13 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
+                   C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo)
+ #endif
+ 
+-#if defined(ADD6_LIMB32)
++#if defined(ADD8_LIMB32)
++/* A[0..3] = B[0..3] + C[0..3] */
++#define ADD4_LIMB64(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) \
++    ADD8_LIMB32(A3.hi, A3.lo, A2.hi, A2.lo, A1.hi, A1.lo, A0.hi, A0.lo, \
++              B3.hi, B3.lo, B2.hi, B2.lo, B1.hi, B1.lo, B0.hi, B0.lo, \
++              C3.hi, C3.lo, C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo)
++#elif defined(ADD6_LIMB32)
+ /* A[0..3] = B[0..3] + C[0..3] */
+ #define ADD4_LIMB64(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) do { \
+     mpi_limb_t __carry4; \
+@@ -888,6 +969,28 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
+   } while (0)
+ #endif
+ 
++#if defined(ADD10_LIMB32)
++/* A[0..4] = B[0..4] + C[0..4] */
++#define ADD5_LIMB64(A4, A3, A2, A1, A0, B4, B3, B2, B1, B0, \
++                  C4, C3, C2, C1, C0) \
++    ADD10_LIMB32(A4.hi, A4.lo, A3.hi, A3.lo, A2.hi, A2.lo, A1.hi, A1.lo, \
++               A0.hi, A0.lo, B4.hi, B4.lo, B3.hi, B3.lo, B2.hi, B2.lo, \
++               B1.hi, B1.lo, B0.hi, B0.lo, C4.hi, C4.lo, C3.hi, C3.lo, \
++               C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo)
++#endif
++
++#if defined(ADD14_LIMB32)
++/* A[0..6] = B[0..6] + C[0..6] */
++#define ADD7_LIMB64(A6, A5, A4, A3, A2, A1, A0, B6, B5, B4, B3, B2, B1, B0, \
++                  C6, C5, C4, C3, C2, C1, C0) \
++    ADD14_LIMB32(A6.hi, A6.lo, A5.hi, A5.lo, A4.hi, A4.lo, A3.hi, A3.lo, \
++               A2.hi, A2.lo, A1.hi, A1.lo, A0.hi, A0.lo, B6.hi, B6.lo, \
++               B5.hi, B5.lo, B4.hi, B4.lo, B3.hi, B3.lo, B2.hi, B2.lo, \
++               B1.hi, B1.lo, B0.hi, B0.lo, C6.hi, C6.lo, C5.hi, C5.lo, \
++               C4.hi, C4.lo, C3.hi, C3.lo, C2.hi, C2.lo, C1.hi, C1.lo, \
++               C0.hi, C0.lo)
++#endif
++
+ #if defined(SUB4_LIMB32)
+ /* A[0..1] = B[0..1] - C[0..1] */
+ #define SUB2_LIMB64(A1, A0, B1, B0, C1, C0) \
+@@ -914,7 +1017,13 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
+                   C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo)
+ #endif
+ 
+-#if defined(SUB6_LIMB32)
++#if defined(SUB8_LIMB32)
++/* A[0..3] = B[0..3] - C[0..3] */
++#define SUB4_LIMB64(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) \
++    SUB8_LIMB32(A3.hi, A3.lo, A2.hi, A2.lo, A1.hi, A1.lo, A0.hi, A0.lo, \
++              B3.hi, B3.lo, B2.hi, B2.lo, B1.hi, B1.lo, B0.hi, B0.lo, \
++              C3.hi, C3.lo, C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo)
++#elif defined(SUB6_LIMB32)
+ /* A[0..3] = B[0..3] - C[0..3] */
+ #define SUB4_LIMB64(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) do { \
+     mpi_limb_t __borrow4; \
+@@ -927,6 +1036,28 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo)
+   } while (0)
+ #endif
+ 
++#if defined(SUB10_LIMB32)
++/* A[0..4] = B[0..4] - C[0..4] */
++#define SUB5_LIMB64(A4, A3, A2, A1, A0, B4, B3, B2, B1, B0, \
++                  C4, C3, C2, C1, C0) \
++    SUB10_LIMB32(A4.hi, A4.lo, A3.hi, A3.lo, A2.hi, A2.lo, A1.hi, A1.lo, \
++               A0.hi, A0.lo, B4.hi, B4.lo, B3.hi, B3.lo, B2.hi, B2.lo, \
++               B1.hi, B1.lo, B0.hi, B0.lo, C4.hi, C4.lo, C3.hi, C3.lo, \
++               C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo)
++#endif
++
++#if defined(SUB14_LIMB32)
++/* A[0..6] = B[0..6] - C[0..6] */
++#define SUB7_LIMB64(A6, A5, A4, A3, A2, A1, A0, B6, B5, B4, B3, B2, B1, B0, \
++                  C6, C5, C4, C3, C2, C1, C0) \
++    SUB14_LIMB32(A6.hi, A6.lo, A5.hi, A5.lo, A4.hi, A4.lo, A3.hi, A3.lo, \
++               A2.hi, A2.lo, A1.hi, A1.lo, A0.hi, A0.lo, B6.hi, B6.lo, \
++               B5.hi, B5.lo, B4.hi, B4.lo, B3.hi, B3.lo, B2.hi, B2.lo, \
++               B1.hi, B1.lo, B0.hi, B0.lo, C6.hi, C6.lo, C5.hi, C5.lo, \
++               C4.hi, C4.lo, C3.hi, C3.lo, C2.hi, C2.lo, C1.hi, C1.lo, \
++               C0.hi, C0.lo)
++#endif
++
+ #endif /* BYTES_PER_MPI_LIMB == 4 */
+ 
+ 
+-- 
+2.30.2

diff --git a/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86.patch 
b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86.patch
new file mode 100644
index 0000000..51ea004
--- /dev/null
+++ b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86.patch
@@ -0,0 +1,94 @@
+https://bugs.gentoo.org/915060
+https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=08b88b4012f7837736b8d29a3689ce3fff2a10c8
+
+From 08b88b4012f7837736b8d29a3689ce3fff2a10c8 Mon Sep 17 00:00:00 2001
+From: Jussi Kivilinna <jussi.kivili...@iki.fi>
+Date: Sat, 16 Dec 2023 19:50:23 +0200
+Subject: [PATCH] mpi/ec-nist: fix for -Og build failure on i386
+
+* mpi/ec-nist.c (_gcry_mpi_ec_nist256_mod)
+(_gcry_mpi_ec_nist384_mod): Load p_mult constant with carry offset
+to stack.
+--
+
+Cherry pick master commit of:
+     90097bd2f41c217dc5c666570e5680f432cf92d3
+
+Patch fixes compilation error on i386 with -Og optimization level.
+
+In file included from ../../mpi/ec-nist.c:34:
+../../mpi/ec-nist.c: In function '_gcry_mpi_ec_nist256_mod':
+../../mpi/ec-inline.h:701:3: error: 'asm' operand has impossible constraints
+  701 |   __asm__ ("subl %11, %3\n" \
+      |   ^~~~~~~
+../../mpi/ec-inline.h:894:9: note: in expansion of macro 'SUB4_LIMB32'
+  894 |         SUB4_LIMB32(A1.hi, A1.lo, A0.hi, A0.lo, \
+      |         ^~~~~~~~~~~
+../../mpi/ec-inline.h:1009:5: note: in expansion of macro 'SUB2_LIMB64'
+ 1009 |     SUB2_LIMB64(A4, A3, B4, B3, C4, C3); \
+      |     ^~~~~~~~~~~
+../../mpi/ec-nist.c:474:3: note: in expansion of macro 'SUB5_LIMB64'
+  474 |   SUB5_LIMB64 (s[4], s[3], s[2], s[1], s[0],
+      |   ^~~~~~~~~~~
+
+Appears that in problematic function, too many registers end up being
+allocated for addressing and there is not enough register left for
+asm input/output (4 registers needed for this block). Problem can be
+workaround by reducing needed addressing registers by pushing
+`p_mult[carry + ...]` values to stack.  On other compiler flag levels
+and architectures, compiler should be able to optimize away this
+extra copying and have not effect on performance.
+
+GnuPG-bug-id: T6892
+Signed-off-by: Jussi Kivilinna <jussi.kivili...@iki.fi>
+---
+ mpi/ec-nist.c | 23 ++++++++++++++++-------
+ 1 file changed, 16 insertions(+), 7 deletions(-)
+
+diff --git a/mpi/ec-nist.c b/mpi/ec-nist.c
+index f792405c..559d02d9 100644
+--- a/mpi/ec-nist.c
++++ b/mpi/ec-nist.c
+@@ -471,11 +471,15 @@ _gcry_mpi_ec_nist256_mod (gcry_mpi_t w, mpi_ec_t ctx)
+ 
+   carry = LO32_LIMB64(s[4]);
+ 
++  /* Load values to stack to ease register pressure on i386. */
++  e[0] = p_mult[carry + 4][0];
++  e[1] = p_mult[carry + 4][1];
++  e[2] = p_mult[carry + 4][2];
++  e[3] = p_mult[carry + 4][3];
++  e[4] = p_mult[carry + 4][4];
+   SUB5_LIMB64 (s[4], s[3], s[2], s[1], s[0],
+              s[4], s[3], s[2], s[1], s[0],
+-             p_mult[carry + 4][4], p_mult[carry + 4][3],
+-             p_mult[carry + 4][2], p_mult[carry + 4][1],
+-             p_mult[carry + 4][0]);
++             e[4], e[3], e[2], e[1], e[0]);
+ 
+   /* Add 1*P */
+   ADD5_LIMB64 (d[4], d[3], d[2], d[1], d[0],
+@@ -749,12 +753,17 @@ _gcry_mpi_ec_nist384_mod (gcry_mpi_t w, mpi_ec_t ctx)
+ 
+   carry = LO32_LIMB64(s[6]);
+ 
++  /* Load values to stack to ease register pressure on i386. */
++  x[0] = p_mult[carry + 3][0];
++  x[1] = p_mult[carry + 3][1];
++  x[2] = p_mult[carry + 3][2];
++  x[3] = p_mult[carry + 3][3];
++  x[4] = p_mult[carry + 3][4];
++  x[5] = p_mult[carry + 3][5];
++  x[6] = p_mult[carry + 3][6];
+   SUB7_LIMB64 (s[6], s[5], s[4], s[3], s[2], s[1], s[0],
+              s[6], s[5], s[4], s[3], s[2], s[1], s[0],
+-             p_mult[carry + 3][6], p_mult[carry + 3][5],
+-             p_mult[carry + 3][4], p_mult[carry + 3][3],
+-             p_mult[carry + 3][2], p_mult[carry + 3][1],
+-             p_mult[carry + 3][0]);
++             x[6], x[5], x[4], x[3], x[2], x[1], x[0]);
+ 
+   ADD7_LIMB64 (d[6], d[5], d[4], d[3], d[2], d[1], d[0],
+              s[6], s[5], s[4], s[3], s[2], s[1], s[0],
+-- 
+2.30.2

diff --git 
a/patches/libgcrypt/1.10.3/libgcrypt-1.9.4-no-fgrep-libgcrypt-config.patch 
b/patches/libgcrypt/1.10.3/libgcrypt-1.9.4-no-fgrep-libgcrypt-config.patch
new file mode 100644
index 0000000..738eac1
--- /dev/null
+++ b/patches/libgcrypt/1.10.3/libgcrypt-1.9.4-no-fgrep-libgcrypt-config.patch
@@ -0,0 +1,21 @@
+https://bugs.gentoo.org/868384
+--- a/src/libgcrypt-config.in
++++ b/src/libgcrypt-config.in
+@@ -154,7 +154,7 @@ if test "$echo_cflags" = "yes"; then
+ 
+     tmp=""
+     for i in $includes $cflags_final; do
+-       if echo "$tmp" | fgrep -v -- "$i" >/dev/null; then
++       if echo "$tmp" | grep -F -v -- "$i" >/dev/null; then
+            tmp="$tmp $i"
+        fi
+     done
+@@ -178,7 +178,7 @@ if test "$echo_libs" = "yes"; then
+ 
+     tmp=""
+     for i in $libdirs $libs_final; do
+-       if echo "$tmp" | fgrep -v -- "$i" >/dev/null; then
++       if echo "$tmp" | grep -F -v -- "$i" >/dev/null; then
+            tmp="$tmp $i"
+        fi
+     done

diff --git a/patches/libgcrypt/1.10.3/libgcrypt-multilib-syspath.patch 
b/patches/libgcrypt/1.10.3/libgcrypt-multilib-syspath.patch
new file mode 100644
index 0000000..7859851
--- /dev/null
+++ b/patches/libgcrypt/1.10.3/libgcrypt-multilib-syspath.patch
@@ -0,0 +1,23 @@
+diff --git a/src/libgcrypt-config.in b/src/libgcrypt-config.in
+index c052638..4c8ddc3 100644
+--- a/src/libgcrypt-config.in
++++ b/src/libgcrypt-config.in
+@@ -154,9 +154,12 @@ if test "$echo_libs" = "yes"; then
+     libs_final="$libs"
+ 
+     # Set up `libdirs'.
+-    if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/lib"; then
+-      libdirs="-L$libdir"
+-    fi
++    case "$libdir" in
++        /usr/lib|/usr/lib64|/lib|/lib64) ;;
++        *)
++            libdirs="-L$libdir"
++            ;;
++    esac
+ 
+     # Set up `libs_final'.
+     libs_final="$libs_final $gpg_error_libs"
+-- 
+1.7.6.1
+

diff --git a/patches/libgcrypt/1.10.3/libgcrypt-powerpc-darwin.patch 
b/patches/libgcrypt/1.10.3/libgcrypt-powerpc-darwin.patch
new file mode 100644
index 0000000..f1c7cf9
--- /dev/null
+++ b/patches/libgcrypt/1.10.3/libgcrypt-powerpc-darwin.patch
@@ -0,0 +1,16 @@
+Drop guard for CPU detection, configure won't get this wrong, and this
+check fails on some PPC platforms where these guards aren't set (due to
+different kernel/libc).
+
+--- a/src/hwf-ppc.c
++++ b/src/hwf-ppc.c
+@@ -33,9 +33,6 @@
+ #include "g10lib.h"
+ #include "hwf-common.h"
+ 
+-#if !defined (__powerpc__) && !defined (__powerpc64__)
+-# error Module build for wrong CPU.
+-#endif
+ 
+ 
+ #if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ELF_AUX_INFO) && \

Reply via email to