[PATCH v3 01/10] kernel32/tests: Fix some NtMapViewOfSection tests expectations, and add results for w1064v1809

Huw Davies huw at codeweavers.com
Wed Jun 19 04:44:19 CDT 2019


On Tue, Jun 18, 2019 at 06:39:25PM +0200, Rémi Bernon wrote:
> Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
> ---
>  dlls/kernel32/tests/virtual.c | 72 ++++++++++++++++++-----------------
>  1 file changed, 38 insertions(+), 34 deletions(-)
> 
> diff --git a/dlls/kernel32/tests/virtual.c b/dlls/kernel32/tests/virtual.c
> index 0b718606d0e..e72192477c8 100644
> --- a/dlls/kernel32/tests/virtual.c
> +++ b/dlls/kernel32/tests/virtual.c
> @@ -73,6 +73,30 @@ static HANDLE create_target_process(const char *arg)
>      return pi.hProcess;
>  }
>  
> +static inline UINT_PTR get_zero_bits(UINT_PTR p)
> +{
> +    UINT_PTR z;
> +
> +    if (p == 0)
> +        return 32;
> +#ifdef __x86_64__
> +    if (p > 0xffffffff)
> +        return (~(UINT_PTR)0) >> get_zero_bits(p >> 32);
> +#endif
> +
> +#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
> +    z = __builtin_clz((UINT32)p);
> +#else
> +    z = 31;
> +    if (p >> 16) { z -= 16; p >>= 16; }
> +    if (p >> 8) { z -= 8; p >>= 8; }
> +    if (p >> 4) { z -= 4; p >>= 4; }
> +    if (p >> 2) { z -= 2; p >>= 2; }
> +    if (p >> 1) z -= 1;
> +#endif
> +    return z;
> +}
> +

Since this is just a test, let's go for simplicity over speed.
Just loop starting from the high bit until you get a 1.

Huw.



More information about the wine-devel mailing list