Message ID | 87bkk50y5n.fsf@oldenburg.str.redhat.com |
---|---|
State | New |
Headers | show |
Series | x86_64: Fix asm constraints in feraiseexcept (bug 30305) | expand |
On Mon, Apr 3, 2023 at 10:43 AM Florian Weimer via Libc-alpha <libc-alpha@sourceware.org> wrote: > > The divss instruction clobbers its first argument, and the constraints > need to reflect that. Fortunately, with GCC 12, generated code does > not actually change, so there is no externally visible bug. > > Tested on x86_64-linux-gnu. > > Suggested-by: Jakub Jelinek <jakub@redhat.com> > > --- > sysdeps/x86_64/fpu/fraiseexcpt.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/sysdeps/x86_64/fpu/fraiseexcpt.c b/sysdeps/x86_64/fpu/fraiseexcpt.c > index 924eed96a9..e7430a4158 100644 > --- a/sysdeps/x86_64/fpu/fraiseexcpt.c > +++ b/sysdeps/x86_64/fpu/fraiseexcpt.c > @@ -33,7 +33,7 @@ __feraiseexcept (int excepts) > /* One example of an invalid operation is 0.0 / 0.0. */ > float f = 0.0; > > - __asm__ __volatile__ ("divss %0, %0 " : : "x" (f)); > + __asm__ __volatile__ ("divss %0, %0 " : "+x" (f)); > (void) &f; > } > > @@ -43,7 +43,7 @@ __feraiseexcept (int excepts) > float f = 1.0; > float g = 0.0; > > - __asm__ __volatile__ ("divss %1, %0" : : "x" (f), "x" (g)); > + __asm__ __volatile__ ("divss %1, %0" : "+x" (f) : "x" (g)); > (void) &f; > } > > > base-commit: ac2a14343e81098c196cef5d67b52e440c05c230 > LGTM. Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com
diff --git a/sysdeps/x86_64/fpu/fraiseexcpt.c b/sysdeps/x86_64/fpu/fraiseexcpt.c index 924eed96a9..e7430a4158 100644 --- a/sysdeps/x86_64/fpu/fraiseexcpt.c +++ b/sysdeps/x86_64/fpu/fraiseexcpt.c @@ -33,7 +33,7 @@ __feraiseexcept (int excepts) /* One example of an invalid operation is 0.0 / 0.0. */ float f = 0.0; - __asm__ __volatile__ ("divss %0, %0 " : : "x" (f)); + __asm__ __volatile__ ("divss %0, %0 " : "+x" (f)); (void) &f; } @@ -43,7 +43,7 @@ __feraiseexcept (int excepts) float f = 1.0; float g = 0.0; - __asm__ __volatile__ ("divss %1, %0" : : "x" (f), "x" (g)); + __asm__ __volatile__ ("divss %1, %0" : "+x" (f) : "x" (g)); (void) &f; }