This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Include SSE state in i386 fenv_t (bug 16064)


On Thu, 8 May 2014, H.J. Lu wrote:

> > @@ -63,7 +66,7 @@ __fesetenv (const fenv_t *envp)
> >                               & (FE_ALL_EXCEPT | FE_TOWARDZERO));
> >        temp.__status_word &= ~FE_ALL_EXCEPT;
> >        temp.__status_word |= envp->__status_word & FE_ALL_EXCEPT;
> > -      temp.__eip = envp->__eip;
> > +      temp.__eip = 0;
> >        temp.__cs_selector = envp->__cs_selector;
> >        temp.__opcode = envp->__opcode;
> 
> Should we also set __cs_selector/__opcode/__data_offset/__data_selector
> to 0?

Not as part of this patch (the change there was simply to avoid setting 
__eip to a value that now represents MXCSR and so is completely logically 
unrelated to __eip).

I don't think any of those fields you list are particularly meaningfully 
part of the C floating-point environment, so they could reasonably all be 
set to 0 - but any such change should be done in sync for the i386 and 
x86_64 implementations.  The point of this patch is to fix an actual bug, 
visible to ordinary C code, arising from a case where the i386 
implementation misses functionality present in the x86_64 version.

If in future we need space in fenv_t for something else (e.g. if libdfp is 
merged into glibc and gains BID support, so that the software rounding 
mode for decimal floating point needs including in fenv_t) I don't think 
there will be difficulty finding space for it.

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]