Alexandre Julliard : oleaut32: Return value pointer needs to be in x8 on ARM64.

Alexandre Julliard julliard at winehq.org
Fri Sep 27 15:56:29 CDT 2019


Module: wine
Branch: master
Commit: d01470ad451b5aff7b1586f35ef90ff039458d02
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=d01470ad451b5aff7b1586f35ef90ff039458d02

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Sep 27 12:00:09 2019 +0200

oleaut32: Return value pointer needs to be in x8 on ARM64.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/oleaut32/typelib.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index d40c0efb0f..7ad92837da 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -6823,7 +6823,7 @@ __ASM_GLOBAL_FUNC( call_method,
                    "ldr x4, [x2, x1, lsl #3]\n\t"
                    "str x4, [sp, x1, lsl #3]\n\t"
                    "cbnz x1, 1b\n"
-                   "2:\tmov x8, x0\n\t"
+                   "2:\tmov x16, x0\n\t"
                    "mov x9, x3\n\t"
                    "ldp d0, d1, [x9]\n\t"
                    "ldp d2, d3, [x9, #0x10]\n\t"
@@ -6833,7 +6833,8 @@ __ASM_GLOBAL_FUNC( call_method,
                    "ldp x2, x3, [x9, #0x50]\n\t"
                    "ldp x4, x5, [x9, #0x60]\n\t"
                    "ldp x6, x7, [x9, #0x70]\n\t"
-                   "blr x8\n\t"
+                   "ldr x8, [x9, #0x80]\n\t"
+                   "blr x16\n\t"
                    "mov sp, x29\n\t"
                    "ldp x29, x30, [sp], #16\n\t"
                    "ret" )
@@ -6856,7 +6857,7 @@ HRESULT WINAPI DispCallFunc( void *instance, ULONG_PTR offset, CALLCONV cc, VART
             float f;
             double d;
         } fp[8];
-        DWORD_PTR x[8];
+        DWORD_PTR x[9];
     } regs;
     int rcount;      /* 64-bit register index count */
     int fpcount = 0; /* float register index count */
@@ -6887,7 +6888,7 @@ HRESULT WINAPI DispCallFunc( void *instance, ULONG_PTR offset, CALLCONV cc, VART
     {
     case VT_DECIMAL:
     case VT_VARIANT:
-        regs.x[rcount++] = (DWORD_PTR)result;  /* arg 0 is a pointer to the result */
+        regs.x[8] = (DWORD_PTR)result;  /* x8 is a pointer to the result */
         break;
     case VT_HRESULT:
         WARN("invalid return type %u\n", ret_type);




More information about the wine-cvs mailing list