MPILIB: disable usage of floating point registers on parisc
PATCH 1/1 MPILIB: disable usage of floating point registers on parisc
The umul_ppmm() macro for parisc uses the xmpyu assembler statement which does calculation via a floating point register.
But usage of floating point registers inside the Linux kernel are not allowed and gcc will stop compilation due to the -mdisable-fpregs compiler option.
Fix this by disabling the umul_ppmm() and udiv_qrnnd() macros. The mpilib will then use the generic built-in implementations instead.
lib/mpi/longlong.h +3 -2
@@ -318,7 +318,8 @@ extern UDItype __udiv_qrnnd(); "rM" ((USItype)(bh)), \ "rM" ((USItype)(al)), \ "rM" ((USItype)(bl))) -#if defined(_PA_RISC1_1) +#if 0 && defined(_PA_RISC1_1) +/* xmpyu uses floating point register which is not allowed in Linux kernel. */ #define umul_ppmm (wh, wl, u, v) \ do { \ union {UDItype __ll; \
@@ -337,7 +338,7 @@ do { \#define UMUL_TIME 40#define UDIV_TIME 80#endif -#ifndef LONGLONG_STANDALONE +#if 0 /* #ifndef LONGLONG_STANDALONE */ #define udiv_qrnnd (q, r, n1, n0, d) \ do { USItype __r; \ (q) = __udiv_qrnnd(&__r, (n1), (n0), (d)); \
Sorry. I am not at @intel.com any more. Did not see it. Will handle.
- Dmitry
Quoted 40 lines · Helge Deller
The
umul_ppmm()macro for parisc uses the xmpyu assembler statement which does calculation via a floating point register.But usage of floating point registers inside the Linux kernel are not allowed and gcc will stop compilation due to the -mdisable-fpregs compiler option.
Fix this by disabling the
umul_ppmm()andudiv_qrnnd()macros. The mpilib will then use the generic built-in implementations instead.Signed-off-by Helge Deller <[email protected]>lib/mpi/longlong.h +3
-3@@ -318,7 +318,8 @@ extern UDItype __udiv_qrnnd(); "rM" ((USItype)(bh)), \ "rM" ((USItype)(al)), \ "rM" ((USItype)(bl))) -#if defined(_PA_RISC1_1) +#if 0 && defined(_PA_RISC1_1) +/* xmpyu uses floating point register which is not allowed in Linux kernel. */ #define umul_ppmm (wh, wl, u, v) \ do { \ union {UDItype __ll; \@@ -337,7 +338,7 @@ do { \#define UMUL_TIME 40#define UDIV_TIME 80#endif -#ifndef LONGLONG_STANDALONE +#if 0 /* #ifndef LONGLONG_STANDALONE */ #define udiv_qrnnd (q, r, n1, n0, d) \ do { USItype __r; \ (q) = __udiv_qrnnd(&__r, (n1), (n0), (d)); \ --To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/