This is the mail archive of the cygwin-apps mailing list for the Cygwin 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: AVX on Cygwin


On Nov 27 10:37, Corinna Vinschen wrote:
> On Nov 27 10:32, Corinna Vinschen wrote:
> > Hi Achim,
> > 
> > On Nov 26 19:17, Achim Gratz wrote:
> > > 
> > > You may have noted that the recent gmp update makes problems on some
> > > machines and two of the three reports come from Broadwell CPU.  There is
> > > one thing that did indeed change with the update and that is use of the
> > > AVX ADC instruction on Broadwell/Skylake.  Is it possible that somehow
> > > the stack model or some register save/restore is different on Cygwin
> > > that would produce that problem?  I can only test on SandyBridge and
> > > IvyBridge for Intel and these have no problem.
> > 
> > Prior to the invention of the AVX stuff, a thread context structure had
> > a fixed size.  To hold AVX registers, the context structure became a
> > variable sized struct which has to be initialized with the function
> > InitializeContext().  It also requires an additional call to
> > SetXStateFeaturesMask() before being able to call GetThreadContext().
> > None of that is implemanted in Cygwin.
> > 
> > The affected scenarios are:
> > 
> > - sigdelayed, the function handling delayed signals, does not handle
> >   AVX registers,  This potentially affects almost all system calls.
> > 
> > - setjmp/longjmp
> > 
> > - Saving and restoring thread contexts during signal handling or
> >   in the setcontext/getcontext/swapcontext/makecontext calls
> >   use the CONTEXT_FULL flag which omits AVX registers.
> > 
> > - The mcontext_t structure has no provisions to hold AVX registers
> >   so they are not available in SA_SIGINFO signal handlers.
> > 
> > The problem with all of that is that the exposed structures are fixed
> > sized and have no room for extension without breaking the ABI.
> > 
> > So adding AVX register support is quite some work, especially in the
> > assembler code in the gendef script.  For that, I'd need help.
> > Fortunately there are not so many calls exposing contexts, only the
> > aforemetioned ones.
> > 
> > I hope this affects 64 bit only?
> 
> Btw., for the time being it might be prudent to disable AVX in gmp...

...and never mind setjmp/longjmp.  Only the functions utilizing
ucontext_t stuff and the internal save/restores will have to be
changed.


Corinna

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

Attachment: pgpI0xMrb9t78.pgp
Description: PGP signature


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