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