mirror of
https://github.com/reactos/reactos.git
synced 2024-12-29 02:25:17 +00:00
[RPCRT4] Fix x64 assembly code
movaps is a 128 bit aligned move, we need a 64 bit unaligned move, so use movsd. Fixes a crash in oleaut32_winetest tmarshal. Also add a comment about the use of movd instead of movq.
This commit is contained in:
parent
ed9973f876
commit
88808bad8a
1 changed files with 11 additions and 3 deletions
|
@ -62,9 +62,9 @@ FUNC call_stubless_func
|
||||||
add rdx, [rcx + 8] /* info->ProcFormatString + offset */
|
add rdx, [rcx + 8] /* info->ProcFormatString + offset */
|
||||||
mov rcx, [rcx] /* info->pStubDesc */
|
mov rcx, [rcx] /* info->pStubDesc */
|
||||||
|
|
||||||
movaps [rsp + 20h], xmm1
|
movsd qword ptr [rsp + 20h], xmm1
|
||||||
movaps [rsp + 28h], xmm2
|
movsd qword ptr [rsp + 28h], xmm2
|
||||||
movaps [rsp + 30h], xmm3
|
movsd qword ptr [rsp + 30h], xmm3
|
||||||
lea r9, [rsp + 18h] /* fpu_args */
|
lea r9, [rsp + 18h] /* fpu_args */
|
||||||
call ndr_client_call
|
call ndr_client_call
|
||||||
add rsp, 38h
|
add rsp, 38h
|
||||||
|
@ -97,6 +97,14 @@ FUNC call_server_func
|
||||||
mov rdx, [rsp + 8]
|
mov rdx, [rsp + 8]
|
||||||
mov r8, [rsp + 16]
|
mov r8, [rsp + 16]
|
||||||
mov r9, [rsp + 24]
|
mov r9, [rsp + 24]
|
||||||
|
|
||||||
|
/* Usually the 64 bit SSE2 version of movd is called movq, as in GCC code
|
||||||
|
(see https://www.felixcloutier.com/x86/movd:movq). But there is another
|
||||||
|
movq with different encoding, which does not accept an integer register
|
||||||
|
as source (see https://www.felixcloutier.com/x86/movq). Older versions
|
||||||
|
of ML64 get confused and do not accept movq with integer registers,
|
||||||
|
but they translate movd to 64 bit, when 64 bit registers are used as
|
||||||
|
source, so we use that here. */
|
||||||
movd xmm0, rcx
|
movd xmm0, rcx
|
||||||
movd xmm1, rdx
|
movd xmm1, rdx
|
||||||
movd xmm2, r8
|
movd xmm2, r8
|
||||||
|
|
Loading…
Reference in a new issue