Hi J.H.,

On Aug  3 01:45, J.H. van de Water wrote:
> fegetenv() in winsup/cygwin/fenv.cc
> 
> fnstenv MUST be followed by fldenv in fegetenv(), as the former disables all
> exceptions in the x87 FPU, which is not appropriate here (fegetenv() ).
> fldenv after fnstenv should reload the x87 FPU w/ the configuration that was
> saved by fnstenv, i.e. a configuration that might have exceptions enabled.
> 
> Note: x86_64 uses SSE for floating-point, not the x87 FPU. However, because
> feraiseexcept() attempts to provoke an exception using the x87 FPU, the bug
> in fegetenv() will make this attempt futile here (x86_64).
> 
> Note: WoW uses the x87 FPU for floating-point, not SSE. Here anything that
> would normally result in triggering an exception, not only feraiseexcept(),
> will not be able to, as result of the bug in fegetenv().
> ---
>  winsup/cygwin/fenv.cc | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/winsup/cygwin/fenv.cc b/winsup/cygwin/fenv.cc
> index bd3f904..eb5260c 100644
> --- a/winsup/cygwin/fenv.cc
> +++ b/winsup/cygwin/fenv.cc
> @@ -141,7 +141,10 @@ fegetexcept (void)
>  int
>  fegetenv (fenv_t *envp)
>  {
> -  __asm__ volatile ("fnstenv %0" : "=m" (envp->_fpu) : );
> +  /* fnstenv disables all exceptions in the x87 FPU; as this is not what is
> +     desired here, reload the cfg saved from the x87 FPU, back to the FPU */
> +  __asm__ volatile ("fnstenv %0"
> +                    "fldenv %0" : "=m" (envp->_fpu) : );
>    if (use_sse)
>      __asm__ volatile ("stmxcsr %0" : "=m" (envp->_sse_mxcsr) : );
>    return 0;
> -- 
> 2.7.5

Thank you!

Pushed with tweaks.  The string in __asm__ statements works a
bit different and I made a slight change to the commit message.

In terms of x86_64, do we have to change the fenv stuff completely
to use only SSE opcodes?  Does that make sense at all?


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

Attachment: signature.asc
Description: PGP signature

Reply via email to