diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-03-18 10:12:15 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-03-18 10:12:15 +0100 |
commit | c4464526cd8c7ef246ea4be145d798e084460d9d (patch) | |
tree | 69e270d5fcb68edd0eaa595f9ec76bceafe7ec5c | |
parent | 00cfa1a3672cc433cf1c52a3f8faa205826f76bd (diff) | |
download | php-git-c4464526cd8c7ef246ea4be145d798e084460d9d.tar.gz |
Remove x86 bit test optimization
This is undefined behavior and we cannot rely on it. Additionally it
breaks builds using undefined behavior sanitizers.
-rw-r--r-- | Zend/zend_portability.h | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index 12e99b74d8..301032d8c3 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -440,12 +440,8 @@ char *alloca(); #define MAX(a, b) (((a)>(b))?(a):(b)) #define MIN(a, b) (((a)<(b))?(a):(b)) -/* x86 instructions BT, SHL, SHR don't require masking */ -#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) || defined(ZEND_WIN32) -# define ZEND_BIT_TEST(bits, bit) (((bits)[(bit) / (sizeof((bits)[0])*8)] >> (bit)) & 1) -#else -# define ZEND_BIT_TEST(bits, bit) (((bits)[(bit) / (sizeof((bits)[0])*8)] >> ((bit) & (sizeof((bits)[0])*8-1))) & 1) -#endif +#define ZEND_BIT_TEST(bits, bit) \ + (((bits)[(bit) / (sizeof((bits)[0])*8)] >> ((bit) & (sizeof((bits)[0])*8-1))) & 1) /* We always define a function, even if there's a macro or expression we could * alias, so that using it in contexts where we can't make function calls |