diff mbox series

lib/mpi: fix building with 32-bit x86

Message ID 20190712090740.340186-1-arnd@arndb.de
State Accepted
Commit 7b7c1df2883dd4393592859758c3e76207da8b1d
Headers show
Series lib/mpi: fix building with 32-bit x86 | expand

Commit Message

Arnd Bergmann July 12, 2019, 9:07 a.m. UTC
The mpi library contains some rather old inline assembly statements
that produce a lot of warnings for 32-bit x86, such as:

lib/mpi/mpih-div.c:76:16: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions
                                udiv_qrnnd(qp[i], n1, n1, np[i], d);
                                ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
lib/mpi/longlong.h:423:20: note: expanded from macro 'udiv_qrnnd'
        : "=a" ((USItype)(q)), \
                ~~~~~~~~~~^~

There is no point in doing a type cast for the output of an inline assembler
statement, so just remove the cast here, as we have done for other architectures
in the past.

See-also: dea632cadd12 ("lib/mpi: fix build with clang")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 lib/mpi/longlong.h | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

-- 
2.20.0

Comments

Nick Desaulniers July 12, 2019, 9:20 p.m. UTC | #1
On Fri, Jul 12, 2019 at 2:07 AM Arnd Bergmann <arnd@arndb.de> wrote:
>

> The mpi library contains some rather old inline assembly statements

> that produce a lot of warnings for 32-bit x86, such as:

>

> lib/mpi/mpih-div.c:76:16: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions


I feel like I'm having flashbacks here:
https://lore.kernel.org/linuxppc-dev/CAKwvOd=f9OOR=i10q_auQuQCVH657neQtjt51UA176p_PMOHVw@mail.gmail.com/
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>

(Thanks for the patch!)

>                                 udiv_qrnnd(qp[i], n1, n1, np[i], d);

>                                 ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~

> lib/mpi/longlong.h:423:20: note: expanded from macro 'udiv_qrnnd'

>         : "=a" ((USItype)(q)), \

>                 ~~~~~~~~~~^~

>

> There is no point in doing a type cast for the output of an inline assembler

> statement, so just remove the cast here, as we have done for other architectures

> in the past.

>

> See-also: dea632cadd12 ("lib/mpi: fix build with clang")

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> ---

>  lib/mpi/longlong.h | 16 ++++++++--------

>  1 file changed, 8 insertions(+), 8 deletions(-)

>

> diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h

> index 08c60d10747f..3bb6260d8f42 100644

> --- a/lib/mpi/longlong.h

> +++ b/lib/mpi/longlong.h

> @@ -397,8 +397,8 @@ do { \

>  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \

>         __asm__ ("addl %5,%1\n" \

>            "adcl %3,%0" \

> -       : "=r" ((USItype)(sh)), \

> -            "=&r" ((USItype)(sl)) \

> +       : "=r" (sh), \

> +            "=&r" (sl) \

>         : "%0" ((USItype)(ah)), \

>              "g" ((USItype)(bh)), \

>              "%1" ((USItype)(al)), \

> @@ -406,22 +406,22 @@ do { \

>  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \

>         __asm__ ("subl %5,%1\n" \

>            "sbbl %3,%0" \

> -       : "=r" ((USItype)(sh)), \

> -            "=&r" ((USItype)(sl)) \

> +       : "=r" (sh), \

> +            "=&r" (sl) \

>         : "0" ((USItype)(ah)), \

>              "g" ((USItype)(bh)), \

>              "1" ((USItype)(al)), \

>              "g" ((USItype)(bl)))

>  #define umul_ppmm(w1, w0, u, v) \

>         __asm__ ("mull %3" \

> -       : "=a" ((USItype)(w0)), \

> -            "=d" ((USItype)(w1)) \

> +       : "=a" (w0), \

> +            "=d" (w1) \

>         : "%0" ((USItype)(u)), \

>              "rm" ((USItype)(v)))

>  #define udiv_qrnnd(q, r, n1, n0, d) \

>         __asm__ ("divl %4" \

> -       : "=a" ((USItype)(q)), \

> -            "=d" ((USItype)(r)) \

> +       : "=a" (q), \

> +            "=d" (r) \


-- 
Thanks,
~Nick Desaulniers
diff mbox series

Patch

diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h
index 08c60d10747f..3bb6260d8f42 100644
--- a/lib/mpi/longlong.h
+++ b/lib/mpi/longlong.h
@@ -397,8 +397,8 @@  do { \
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 	__asm__ ("addl %5,%1\n" \
 	   "adcl %3,%0" \
-	: "=r" ((USItype)(sh)), \
-	     "=&r" ((USItype)(sl)) \
+	: "=r" (sh), \
+	     "=&r" (sl) \
 	: "%0" ((USItype)(ah)), \
 	     "g" ((USItype)(bh)), \
 	     "%1" ((USItype)(al)), \
@@ -406,22 +406,22 @@  do { \
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 	__asm__ ("subl %5,%1\n" \
 	   "sbbl %3,%0" \
-	: "=r" ((USItype)(sh)), \
-	     "=&r" ((USItype)(sl)) \
+	: "=r" (sh), \
+	     "=&r" (sl) \
 	: "0" ((USItype)(ah)), \
 	     "g" ((USItype)(bh)), \
 	     "1" ((USItype)(al)), \
 	     "g" ((USItype)(bl)))
 #define umul_ppmm(w1, w0, u, v) \
 	__asm__ ("mull %3" \
-	: "=a" ((USItype)(w0)), \
-	     "=d" ((USItype)(w1)) \
+	: "=a" (w0), \
+	     "=d" (w1) \
 	: "%0" ((USItype)(u)), \
 	     "rm" ((USItype)(v)))
 #define udiv_qrnnd(q, r, n1, n0, d) \
 	__asm__ ("divl %4" \
-	: "=a" ((USItype)(q)), \
-	     "=d" ((USItype)(r)) \
+	: "=a" (q), \
+	     "=d" (r) \
 	: "0" ((USItype)(n0)), \
 	     "1" ((USItype)(n1)), \
 	     "rm" ((USItype)(d)))