MPI: Fix compilation on MIPS with GCC 4.4 and newer
Since 4.4 GCC on MIPS no longer recognizes the "h" constraint, leading to this build failure: CC lib/mpi/generic_mpih-mul1.o lib/mpi/generic_mpih-mul1.c: In function 'mpihelp_mul_1': lib/mpi/generic_mpih-mul1.c:50:3: error: impossible constraint in 'asm' This patch updates MPI with the latest umul_ppm implementations for MIPS. Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com> Cc: Linux-MIPS <linux-mips@linux-mips.org> Cc: Dmitry Kasatkin <dmitry.kasatkin@intel.com> Cc: James Morris <jmorris@namei.org> Patchwork: https://patchwork.linux-mips.org/patch/4612/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
f93a1a00f2
commit
a3cea98941
|
@ -641,7 +641,14 @@ do { \
|
||||||
************** MIPS *****************
|
************** MIPS *****************
|
||||||
***************************************/
|
***************************************/
|
||||||
#if defined(__mips__) && W_TYPE_SIZE == 32
|
#if defined(__mips__) && W_TYPE_SIZE == 32
|
||||||
#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
|
#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4
|
||||||
|
#define umul_ppmm(w1, w0, u, v) \
|
||||||
|
do { \
|
||||||
|
UDItype __ll = (UDItype)(u) * (v); \
|
||||||
|
w1 = __ll >> 32; \
|
||||||
|
w0 = __ll; \
|
||||||
|
} while (0)
|
||||||
|
#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7
|
||||||
#define umul_ppmm(w1, w0, u, v) \
|
#define umul_ppmm(w1, w0, u, v) \
|
||||||
__asm__ ("multu %2,%3" \
|
__asm__ ("multu %2,%3" \
|
||||||
: "=l" ((USItype)(w0)), \
|
: "=l" ((USItype)(w0)), \
|
||||||
|
@ -666,7 +673,15 @@ do { \
|
||||||
************** MIPS/64 **************
|
************** MIPS/64 **************
|
||||||
***************************************/
|
***************************************/
|
||||||
#if (defined(__mips) && __mips >= 3) && W_TYPE_SIZE == 64
|
#if (defined(__mips) && __mips >= 3) && W_TYPE_SIZE == 64
|
||||||
#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
|
#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 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)
|
||||||
|
#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7
|
||||||
#define umul_ppmm(w1, w0, u, v) \
|
#define umul_ppmm(w1, w0, u, v) \
|
||||||
__asm__ ("dmultu %2,%3" \
|
__asm__ ("dmultu %2,%3" \
|
||||||
: "=l" ((UDItype)(w0)), \
|
: "=l" ((UDItype)(w0)), \
|
||||||
|
|
Reference in New Issue