On Sat, Oct 20, 2012 at 7:06 PM, Chris Robinson <[email protected]> wrote: > On 10/20/2012 05:40 PM, James Eder wrote: >> >> + /* Intel says we need a zeroed 16-byte aligned buffer */ >> + char buffer[512 + 16]; >> + XMM_SAVE_AREA32 *state = (XMM_SAVE_AREA32 *)(((ULONG_PTR)buffer + 15) >> & ~15); >> + memset(buffer, 0, sizeof(buffer)); >> + >> + __asm__ __volatile__( "fxsave %0" : "=m" (*state) : "m" (*state) ); > > > Wouldn't this be simpler? > > DECLSPEC_ALIGN(16) XMM_SAVE_AREA32 state; > memset(state, 0, sizeof(state)); > __asm__ __volatile__("fxsave %0" : "=m" (*&state) : "m" (*&state)); > > May also want to make sure the two structs are packed. > > I used that alignment method because I saw it done that way other places in Wine. I figured there must have been a good reason for doing it that way (issue with some build environments?) but perhaps I'm being paranoid.
-- Jim
