Re: [v2] oleaut32: Add ARM support to DispCallFunc().
Am 26.10.2017 um 06:39 schrieb Donna Whisnant:
Adds ARM ABI support to DispCallFunc() to allow IDispatch invoke calls to succeed on ARM platforms. This change specifically targets only 32-bit little-endian (ARMEL) platform CPUs. It's believed to likely be compatible with big-endian (ARMEB) platforms, but testing for that platform should be completed before enabling.
Tested on Raspbian Stretch 2017-09-07 RPi image using a Qemu systemd container to compile and run it on an x86-64 Host.. When running on Raspberry Pi hardware, a 3G/1G split kernel needs to be used for Wine to function.
Hi, thanks, but it seems I missed minor things last time:
+ args = heap_alloc(sizeof(VARIANT) * cActuals + sizeof(DWORD) * 4 );
Try to be consistent with the spaces for each function call.
+ case VT_R4: /* these must be 4-byte aligned, and put in 's' regs or stack, as they are single-floats */ + if (scount < 16) + regs.sd.s[scount++] = V_R4(arg); + else + args[argspos++] = V_UI4(arg); + break; ... + case VT_VARIANT: + /* 8-byte align 'r' and/or stack: */ + if (rcount < 3) + { + rcount += (rcount % 2); + } + else + { + rcount = 4; + argspos += (argspos % 2); + } ... + case VT_BOOL: /* VT_BOOL is 16-bit but BOOL is 32-bit, needs to be extended */ + if (rcount < 4) + regs.r[rcount++] = V_BOOL(arg); + else + args[argspos++] = V_BOOL(arg); + break; + default: + if (rcount < 4) + regs.r[rcount++] = V_UI4(arg); + else + args[argspos++] = V_UI4(arg); + break; + }
Maybe one of those is not really conistent wrt curly brackets
+ case VT_CY: + V_UI8(pvargResult) = call_method(func, argspos, args, (DWORD*)®s ); + break; + default: + V_UI4(pvargResult) = call_method( func, argspos, args, (DWORD*)®s ); + break;
space issue again, maybe somewhere else too? Otherwise I'm quite tempted to sign it off
participants (1)
-
André Hentschel