[PATCH] Add volatiles for x86-64 bits/mathinline.h

Carlos O'Donell carlos@systemhalted.org
Wed May 9 15:52:00 GMT 2012


On Thu, May 3, 2012 at 8:15 AM, Andreas Jaeger <aj@suse.de> wrote:
>> AIUI the issue is that these asms depend on the state of the fpsr, but
>> the compiler doesn't know that and so eliminates a second instance
>> after an fpsr change as redundant with the first.  So what would be
>> really right is to tell the compiler that the fpsr is an input to these
>> asms and an output of the mode-changing code.
>
> Yes, indeed - but that's not possible with GCC.
>
> Here's a patch with comments. Ok to commit ?

I reviewed the gcc bug, the original patch, Roland's comments, and the
new patch.

One minor bike-shed below...

> Andreas
>
> 2012-05-02  Andreas Jaeger  <aj@suse.de>
>
>        [BZ #14053]
>        * sysdeps/x86_64/fpu/bits/mathinline.h (lrintf): Add __volatile to asm.
>        (lrint): Likewise.
>        (llrintf): Likewise.
>        (llrint): Likewise.
>        (rint): Likewise.
>        (rintf): Likewise.
>        (nearbyint): Likewise.
>        (nearbyintf): Likewise.
>
> diff --git a/sysdeps/x86_64/fpu/bits/mathinline.h b/sysdeps/x86_64/fpu/bits/mathinline.h
> index c072f16..a0c2bc1 100644
> --- a/sysdeps/x86_64/fpu/bits/mathinline.h
> +++ b/sysdeps/x86_64/fpu/bits/mathinline.h
> @@ -79,7 +79,11 @@ __MATH_INLINE long int
>  __NTH (lrintf (float __x))
>  {
>   long int __res;
> -  __asm ("cvtss2si %1, %0" : "=r" (__res) : "xm" (__x));
> +  /* Mark as volatile since the result is dependend on the state of
> +     the SSE control register (the rounding mode). Otherwise GCC might
> +     remove these assembler instructions since it does not know about
> +     the rounding mode change.  */

"the rounding mode change and can't currently be told.  */"

It's not our fault. If this ever changes then a future maintainer will
know why we did this and adjust the code. I know you plan to fix this
tomorrow but tomorrow may never come. It's not morbid, it's just the
reality of life :-)

OK with that change.

Cheers,
Carlos.



More information about the Libc-alpha mailing list