[PATCH v2 0/4] MR375: ntdll: Fixes for runtime 64-bit shift functions.

Jinoh Kang (@iamahuman) wine at gitlab.winehq.org
Wed Jul 6 10:50:53 CDT 2022


Jinoh Kang (@iamahuman) commented about dlls/ntdll/large_int.c:
> +__ASM_GLOBAL_FUNC( _allshl,
> +                   "xchgl (%esp),%ecx\n\t"
> +                   "pushl %edx\n\t"
> +                   "pushl %eax\n\t"
> +                   "pushl %ecx\n\t"
> +                   "jmp " __ASM_NAME("__regs__allshl") )
> +
> +
> +LONGLONG __regs__allshr( LONGLONG a, unsigned char b )
>  {
> -    return a << b;
> +    const LARGE_INTEGER x = { .QuadPart = a };
> +    LARGE_INTEGER ret;
> +
> +    if (b >= 64)
> +        return (LONGLONG)(x.HighPart >> 31);
Suggest using `x.HighPart >> (b >= 64 ? 31 : b & 31)` or its equivalent, as per the same reason for `_allshl`.

Compare:

- https://godbolt.org/z/sEd8Th56M (original)

With:

- https://godbolt.org/z/9WxTnbfax (64-bit return ellided).

-- 
https://gitlab.winehq.org/wine/wine/-/merge_requests/375#note_3461



More information about the wine-devel mailing list