[PATCH] kernel32: Save xmm0 - 3 to work around a Delphi bug on x86_64.

Huw Davies huw at codeweavers.com
Tue Feb 6 05:29:46 CST 2018


On Tue, Feb 06, 2018 at 11:45:32AM +0100, Stefan Dösinger wrote:
> > Am 06.02.2018 um 11:26 schrieb Huw Davies <huw at codeweavers.com>:
> > 
> > When delay loading a symbol, Delphi saves rcx, rdx, r8 and r9 to the
> > stack.  It then calls GetProcAddress(), pops the saved registers and
> > calls the function.  This works fine if all of the parameters are
> > ints.  However, since it does not save xmm0 - 3, it relies on
> > GetProcAddress() preserving these registers if the function takes
> > floating point parameters.
> This is mostly for me trying to understand things: What would make
> changes to those registers inside GetProcAddress? Afaics this
> function shouldn’t do anything floating point related.

It doesn't need to be floating point operations.  The compiler can
used them as 128-bit registers, possibly for string-type operations.

Indeed a quick grep through ntdll shows that clang uses them in
RtlIsTextUnicode(), for example.

Huw.



More information about the wine-devel mailing list