[v2] oleaut32: Add ARM support to DispCallFunc().

André Hentschel nerv at dawncrow.de
Sat Oct 28 06:48:27 CDT 2017


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*)&regs );
> +        break;
> +    default:
> +        V_UI4(pvargResult) = call_method( func, argspos, args, (DWORD*)&regs );
> +        break;

space issue again, maybe somewhere else too?


Otherwise I'm quite tempted to sign it off



More information about the wine-devel mailing list