From 0d3f61c8280b329f573ded891fad573f666379db Mon Sep 17 00:00:00 2001 From: Graham Gower Date: Mon, 3 Aug 2009 16:19:00 +0000 Subject: libgcrypt.inc: Fix libgcrypt compilation with GCC-4.4 on mips Patch taken from https://forum.openwrt.org/viewtopic.php?id=20520 Makes sense and seems to work ok. libgcrypt.inc has --disable-asm in EXTRA_OECONF, yet strangely the configure script does nothing with this information beyond parsing it. Assembler is certainly still being used. http://patchwork.openembedded.org/patch/919/ Signed-Off-By: Holger Hans Peter Freyther --- recipes/libgcrypt/files/mips-h-constraint.patch | 70 +++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 recipes/libgcrypt/files/mips-h-constraint.patch (limited to 'recipes/libgcrypt/files') diff --git a/recipes/libgcrypt/files/mips-h-constraint.patch b/recipes/libgcrypt/files/mips-h-constraint.patch new file mode 100644 index 0000000000..20566bc259 --- /dev/null +++ b/recipes/libgcrypt/files/mips-h-constraint.patch @@ -0,0 +1,70 @@ +The MIPS port for GCC-4.4 no longer recognizes the h asm constraint. +Patch from: https://forum.openwrt.org/viewtopic.php?id=20520 + +--- libgcrypt/mpi/longlong.h-asdf 2009-08-04 09:58:51.000000000 +0930 ++++ libgcrypt/mpi/longlong.h 2009-08-04 10:10:27.000000000 +0930 +@@ -710,18 +710,35 @@ + #endif /* __m88110__ */ + #endif /* __m88000__ */ + ++/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */ ++#if defined (__GNUC__) && defined (__GNUC_MINOR__) ++#define __GNUC_PREREQ(maj, min) \ ++ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) ++#else ++#define __GNUC_PREREQ(maj, min) 0 ++#endif ++ + /*************************************** + ************** MIPS ***************** + ***************************************/ + #if defined (__mips__) && W_TYPE_SIZE == 32 +-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 ++#if __GNUC_PREREQ (4,4) ++#define umul_ppmm(w1, w0, u, v) \ ++ do { \ ++ UDItype __ll = (UDItype)(u) * (v); \ ++ w1 = __ll >> 32; \ ++ w0 = __ll; \ ++ } while (0) ++#endif ++#if !defined (umul_ppmm) && __GNUC_PREREQ (2,7) + #define umul_ppmm(w1, w0, u, v) \ + __asm__ ("multu %2,%3" \ + : "=l" ((USItype)(w0)), \ + "=h" ((USItype)(w1)) \ + : "d" ((USItype)(u)), \ + "d" ((USItype)(v))) +-#else ++#endif ++#if !defined (umul_ppmm) + #define umul_ppmm(w1, w0, u, v) \ + __asm__ ("multu %2,%3 \n" \ + "mflo %0 \n" \ +@@ -739,14 +756,24 @@ + ************** MIPS/64 ************** + ***************************************/ + #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64 +-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 ++#if __GNUC_PREREQ (4,4) ++#define umul_ppmm(w1, w0, u, v) \ ++ do { \ ++ typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \ ++ __ll_UTItype __ll = (__ll_UTItype)(u) * (v); \ ++ w1 = __ll >> 64; \ ++ w0 = __ll; \ ++ } while (0) ++#endif ++#if !defined (umul_ppmm) && __GNUC_PREREQ (2,7) + #define umul_ppmm(w1, w0, u, v) \ + __asm__ ("dmultu %2,%3" \ + : "=l" ((UDItype)(w0)), \ + "=h" ((UDItype)(w1)) \ + : "d" ((UDItype)(u)), \ + "d" ((UDItype)(v))) +-#else ++#endif ++#if !defined (umul_ppmm) + #define umul_ppmm(w1, w0, u, v) \ + __asm__ ("dmultu %2,%3 \n" \ + "mflo %0 \n" \ -- cgit v1.2.3