summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2013-05-09 17:32:08 +0200
committerOndřej Surý <ondrej@sury.org>2013-05-09 17:32:08 +0200
commitd674441ee1b9e7407f464b2692d9f5a0e2be3b4e (patch)
treecc4885524786f143bcc1af7d6c3f86fb571905de /Zend
parent367111123281ebfd2876d4c8cf33414b394f489a (diff)
downloadphp-d674441ee1b9e7407f464b2692d9f5a0e2be3b4e.tar.gz
Imported Upstream version 5.5.0~rc1upstream/5.5.0_rc1
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_alloc.c17
-rw-r--r--Zend/zend_builtin_functions.c2
-rw-r--r--Zend/zend_compile.c2
-rw-r--r--Zend/zend_float.h6
-rw-r--r--Zend/zend_multiply.h4
-rw-r--r--Zend/zend_operators.h6
6 files changed, 26 insertions, 11 deletions
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index 1c76bd403..c6aee57a7 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -672,7 +672,7 @@ static inline unsigned int zend_mm_high_bit(size_t _size)
#elif defined(__GNUC__) && defined(__x86_64__)
unsigned long n;
- __asm__("bsrq %1,%0\n\t" : "=r" (n) : "rm" (_size) : "cc");
+ __asm__("bsr %1,%0\n\t" : "=r" (n) : "rm" (_size) : "cc");
return (unsigned int)n;
#elif defined(_MSC_VER) && defined(_M_IX86)
__asm {
@@ -700,12 +700,12 @@ static inline unsigned int zend_mm_low_bit(size_t _size)
#elif defined(__GNUC__) && defined(__x86_64__)
unsigned long n;
- __asm__("bsfq %1,%0\n\t" : "=r" (n) : "rm" (_size) : "cc");
+ __asm__("bsf %1,%0\n\t" : "=r" (n) : "rm" (_size) : "cc");
return (unsigned int)n;
#elif defined(_MSC_VER) && defined(_M_IX86)
__asm {
bsf eax, _size
- }
+ }
#elif defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__))
return __builtin_ctzl(_size);
#else
@@ -2485,12 +2485,21 @@ static inline size_t safe_address(size_t nmemb, size_t size, size_t offset)
size_t res = nmemb;
unsigned long overflow = 0;
- __asm__ ("mulq %3\n\taddq %4,%0\n\tadcq %1,%1"
+#ifdef __ILP32__ /* x32 */
+# define LP_SUFF "l"
+#else /* amd64 */
+# define LP_SUFF "q"
+#endif
+
+ __asm__ ("mul" LP_SUFF " %3\n\t"
+ "add %4,%0\n\t"
+ "adc %1,%1"
: "=&a"(res), "=&d" (overflow)
: "%0"(res),
"rm"(size),
"rm"(offset));
+#undef LP_SUFF
if (UNEXPECTED(overflow)) {
zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset);
return 0;
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index d61aba14b..47fb4d2d9 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1014,7 +1014,7 @@ ZEND_FUNCTION(get_object_vars)
while (zend_hash_get_current_data_ex(properties, (void **) &value, &pos) == SUCCESS) {
if (zend_hash_get_current_key_ex(properties, &key, &key_len, &num_index, 0, &pos) == HASH_KEY_IS_STRING) {
if (zend_check_property_access(zobj, key, key_len-1 TSRMLS_CC) == SUCCESS) {
- zend_unmangle_property_name_ex(key, key_len - 1, &class_name, &prop_name, &prop_len);
+ zend_unmangle_property_name_ex(key, key_len - 1, &class_name, &prop_name, (int*) &prop_len);
/* Not separating references */
Z_ADDREF_PP(value);
add_assoc_zval_ex(return_value, prop_name, prop_len + 1, *value);
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 3c0d753b6..862f82da0 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -288,7 +288,7 @@ ZEND_API zend_bool zend_is_compiling(TSRMLS_D) /* {{{ */
static zend_uint get_temporary_variable(zend_op_array *op_array) /* {{{ */
{
- return (zend_uint)EX_TMP_VAR_NUM(0, (op_array->T)++);
+ return (zend_uint)(zend_uintptr_t)EX_TMP_VAR_NUM(0, (op_array->T)++);
}
/* }}} */
diff --git a/Zend/zend_float.h b/Zend/zend_float.h
index a17ad5658..56bdb151a 100644
--- a/Zend/zend_float.h
+++ b/Zend/zend_float.h
@@ -65,11 +65,13 @@ extern ZEND_API void zend_ensure_fpu_mode(TSRMLS_D);
MS Visual C:
- Since MSVC users tipically don't use autoconf or CMake, we will detect
- MSVC via compile time define.
+ MSVC via compile time define. Floating point precision change isn't
+ supported on 64 bit platforms, so it's NOP. See
+ http://msdn.microsoft.com/en-us/library/c9676k6h(v=vs.110).aspx
*/
/* MSVC detection (MSVC people usually don't use autoconf) */
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && !defined(_WIN64)
# if _MSC_VER >= 1500
/* Visual C++ 2008 or higher, supports _controlfp_s */
# define HAVE__CONTROLFP_S
diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h
index e52956f41..0d8977fde 100644
--- a/Zend/zend_multiply.h
+++ b/Zend/zend_multiply.h
@@ -35,8 +35,8 @@
#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
long __tmpvar; \
- __asm__ ("imulq %3,%0\n" \
- "adcq $0,%1" \
+ __asm__ ("imul %3,%0\n" \
+ "adc $0,%1" \
: "=r"(__tmpvar),"=r"(usedval) \
: "0"(a), "r"(b), "1"(0)); \
if (usedval) (dval) = (double) (a) * (double) (b); \
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h
index a82c14b8c..0b890ff48 100644
--- a/Zend/zend_operators.h
+++ b/Zend/zend_operators.h
@@ -26,6 +26,10 @@
#include <math.h>
#include <assert.h>
+#ifdef __GNUC__
+#include <stddef.h>
+#endif
+
#ifdef HAVE_IEEEFP_H
#include <ieeefp.h>
#endif
@@ -497,7 +501,7 @@ ZEND_API void zend_update_current_locale(void);
/* The offset in bytes between the value and type fields of a zval */
#define ZVAL_OFFSETOF_TYPE \
- (__builtin_offsetof(zval,type) - __builtin_offsetof(zval,value))
+ (offsetof(zval,type) - offsetof(zval,value))
static zend_always_inline int fast_increment_function(zval *op1)
{