[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