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