diff options
author | Nikita Popov <nikic@php.net> | 2015-04-16 16:31:53 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2015-04-16 16:31:53 +0200 |
commit | c669aaac71f031724150a04d57d949fb585abecf (patch) | |
tree | ab5a040c6e17b23d7557d012f80e89faca4a2ac7 /ext/gmp/gmp.c | |
parent | feaabd09d092e606b56bf745c6d6d032a7c7c1d7 (diff) | |
parent | 25e45a935036d1bc69ed5dda323c09ab1f160d6e (diff) | |
download | php-git-c669aaac71f031724150a04d57d949fb585abecf.tar.gz |
Merge branch 'PHP-5.6'
Conflicts:
ext/gmp/gmp.c
Diffstat (limited to 'ext/gmp/gmp.c')
-rw-r--r-- | ext/gmp/gmp.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c index f2959a03bc..1994052686 100644 --- a/ext/gmp/gmp.c +++ b/ext/gmp/gmp.c @@ -245,6 +245,9 @@ typedef struct _gmp_temp { #define GMP_MAX_BASE 62 +#define GMP_51_OR_NEWER \ + ((__GNU_MP_VERSION >= 6) || (__GNU_MP_VERSION >= 5 && __GNU_MP_VERSION_MINOR >= 1)) + #define IS_GMP(zval) \ (Z_TYPE_P(zval) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zval), gmp_ce)) @@ -1575,7 +1578,15 @@ ZEND_FUNCTION(gmp_rootrem) add_next_index_zval(return_value, &result1); add_next_index_zval(return_value, &result2); +#if GMP_51_OR_NEWER + /* mpz_rootrem() is supported since GMP 4.2, but buggy wrt odd roots + * of negative numbers */ mpz_rootrem(gmpnum_result1, gmpnum_result2, gmpnum_a, (gmp_ulong) nth); +#else + mpz_root(gmpnum_result1, gmpnum_a, (gmp_ulong) nth); + mpz_pow_ui(gmpnum_result2, gmpnum_result1, (gmp_ulong) nth); + mpz_sub(gmpnum_result2, gmpnum_a, gmpnum_result2); +#endif FREE_GMP_TEMP(temp_a); } |