在 2018/5/23 18:40, Martin Storsjö 写道:
> Signed-off-by: Martin Storsjö <[email protected]>
> ---
>   mingw-w64-headers/include/psdk_inc/intrin-impl.h | 79 
> ++++++++++++++++++++++++
>   mingw-w64-headers/include/winnt.h                |  2 +
>   2 files changed, 81 insertions(+)
> 
> diff --git a/mingw-w64-headers/include/psdk_inc/intrin-impl.h 
> b/mingw-w64-headers/include/psdk_inc/intrin-impl.h
> index 88af804..90c55f9 100644
> --- a/mingw-w64-headers/include/psdk_inc/intrin-impl.h
> +++ b/mingw-w64-headers/include/psdk_inc/intrin-impl.h
> @@ -1084,6 +1084,32 @@ __buildbittesti(InterlockedBitTestAndComplement, 
> __LONG32, "eor", /* unused para
>   #define __INTRINSIC_DEFINED_InterlockedBitTestAndComplement
>   #endif /* __INTRINSIC_PROLOG */
>   
> +#if __INTRINSIC_PROLOG(_BitScanForward)
> +__MINGW_EXTENSION unsigned char _BitScanForward(unsigned __LONG32 *Index, 
> unsigned __LONG32 Mask);
> +#if !__has_builtin(_BitScanForward)
> +__MINGW_EXTENSION __INTRINSICS_USEINLINE
> +unsigned char _BitScanForward(unsigned __LONG32 *Index, unsigned __LONG32 
> Mask)
> +{
> +    *Index = __builtin_ctz(Mask);
> +    return Mask != 0;
> +}
> +#endif
> +#define __INTRINSIC_DEFINED__BitScanForward
> +#endif /* __INTRINSIC_PROLOG */
> +

Is this a correct implementation? According to GCC manual [1], if the
argument to `__builtin_clz()` or `__builtin_ctz()` is zero, the result
is undefined. Basing on the 'undefined results never occur' principle it
is consequently possible that the compiler can assume `Mask` can never
be zero and optimize the return value as a constant.

[1] https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Other-Builtins.html


-- 
Best regards,
LH_Mouse

Attachment: signature.asc
Description: OpenPGP digital signature

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to