[PATCH 5/8] ntdll: Add detection for PF_SSE_DAZ_MODE_AVAILABLE
joris_huizer at yahoo.com
Sun Oct 21 11:06:56 CDT 2012
On 10/21/2012 05:49 PM, James Eder wrote:
> On Sat, Oct 20, 2012 at 7:06 PM, Chris Robinson <chris.kcat at gmail.com> 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.
I would think the construct is necessary when allocating memory (the
allocation functions don't allow to require a certain alignment as far
as I know)
That might be where you saw this being done?
More information about the wine-devel