diff options
| author | Ondřej Surý <ondrej@sury.org> | 2013-05-09 17:32:08 +0200 |
|---|---|---|
| committer | Ondřej Surý <ondrej@sury.org> | 2013-05-09 17:32:08 +0200 |
| commit | d674441ee1b9e7407f464b2692d9f5a0e2be3b4e (patch) | |
| tree | cc4885524786f143bcc1af7d6c3f86fb571905de /Zend | |
| parent | 367111123281ebfd2876d4c8cf33414b394f489a (diff) | |
| download | php-d674441ee1b9e7407f464b2692d9f5a0e2be3b4e.tar.gz | |
Imported Upstream version 5.5.0~rc1upstream/5.5.0_rc1
Diffstat (limited to 'Zend')
| -rw-r--r-- | Zend/zend_alloc.c | 17 | ||||
| -rw-r--r-- | Zend/zend_builtin_functions.c | 2 | ||||
| -rw-r--r-- | Zend/zend_compile.c | 2 | ||||
| -rw-r--r-- | Zend/zend_float.h | 6 | ||||
| -rw-r--r-- | Zend/zend_multiply.h | 4 | ||||
| -rw-r--r-- | Zend/zend_operators.h | 6 |
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) { |
