summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-03-18 10:12:15 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-03-18 10:12:15 +0100
commitc4464526cd8c7ef246ea4be145d798e084460d9d (patch)
tree69e270d5fcb68edd0eaa595f9ec76bceafe7ec5c
parent00cfa1a3672cc433cf1c52a3f8faa205826f76bd (diff)
downloadphp-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.h8
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