在 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
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
