36# define mpz_fits_si_p mpz_fits_slong_p
39#define GMP_ROUND_ZERO 0
40#define GMP_ROUND_PLUSINF 1
41#define GMP_ROUND_MINUSINF 2
44#define GMP_MPIR_VERSION_STRING ((char *) mpir_version)
46#define GMP_VERSION_STRING ((char *) gmp_version)
48#define GMP_MSW_FIRST (1 << 0)
49#define GMP_LSW_FIRST (1 << 1)
50#define GMP_LITTLE_ENDIAN (1 << 2)
51#define GMP_BIG_ENDIAN (1 << 3)
52#define GMP_NATIVE_ENDIAN (1 << 4)
97#define GMP_MAX_BASE 62
99#define GMP_51_OR_NEWER \
100 ((__GNU_MP_VERSION >= 6) || (__GNU_MP_VERSION >= 5 && __GNU_MP_VERSION_MINOR >= 1))
102#define IS_GMP(zval) \
103 (Z_TYPE_P(zval) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zval), gmp_ce))
105#define GET_GMP_OBJECT_FROM_OBJ(obj) \
106 php_gmp_object_from_zend_object(obj)
107#define GET_GMP_OBJECT_FROM_ZVAL(zv) \
108 GET_GMP_OBJECT_FROM_OBJ(Z_OBJ_P(zv))
110#define GET_GMP_FROM_ZVAL(zval) \
111 GET_GMP_OBJECT_FROM_OBJ(Z_OBJ_P(zval))->num
132#define FREE_GMP_TEMP(temp) \
133 if (temp.is_used) { \
134 mpz_clear(temp.num); \
137#define FETCH_GMP_ZVAL_DEP_DEP(gmpnumber, zval, temp, dep1, dep2, arg_pos) \
139 gmpnumber = GET_GMP_FROM_ZVAL(zval); \
142 mpz_init(temp.num); \
143 if (convert_to_gmp(temp.num, zval, 0, arg_pos) == FAILURE) { \
144 mpz_clear(temp.num); \
145 FREE_GMP_TEMP(dep1); \
146 FREE_GMP_TEMP(dep2); \
150 gmpnumber = temp.num; \
153#define FETCH_GMP_ZVAL_DEP(gmpnumber, zval, temp, dep, arg_pos) \
155 gmpnumber = GET_GMP_FROM_ZVAL(zval); \
158 mpz_init(temp.num); \
159 if (convert_to_gmp(temp.num, zval, 0, arg_pos) == FAILURE) { \
160 mpz_clear(temp.num); \
161 FREE_GMP_TEMP(dep); \
165 gmpnumber = temp.num; \
168#define FETCH_GMP_ZVAL(gmpnumber, zval, temp, arg_pos) \
170 gmpnumber = GET_GMP_FROM_ZVAL(zval); \
173 mpz_init(temp.num); \
174 if (convert_to_gmp(temp.num, zval, 0, arg_pos) == FAILURE) { \
175 mpz_clear(temp.num); \
179 gmpnumber = temp.num; \
182#define INIT_GMP_RETVAL(gmpnumber) \
183 gmp_create(return_value, &gmpnumber)
185static void gmp_strval(
zval *
result, mpz_t gmpnum,
int base);
211static void gmp_mpz_tdiv_q_ui(mpz_ptr
a, mpz_srcptr b,
gmp_ulong c) {
212 mpz_tdiv_q_ui(
a, b, c);
214static void gmp_mpz_tdiv_r_ui(mpz_ptr
a, mpz_srcptr b,
gmp_ulong c) {
215 mpz_tdiv_r_ui(
a, b, c);
217static void gmp_mpz_fdiv_q_ui(mpz_ptr
a, mpz_srcptr b,
gmp_ulong c) {
218 mpz_fdiv_q_ui(
a, b, c);
220static void gmp_mpz_fdiv_r_ui(mpz_ptr
a, mpz_srcptr b,
gmp_ulong c) {
221 mpz_fdiv_r_ui(
a, b, c);
223static void gmp_mpz_cdiv_r_ui(mpz_ptr
a, mpz_srcptr b,
gmp_ulong c) {
224 mpz_cdiv_r_ui(
a, b, c);
226static void gmp_mpz_cdiv_q_ui(mpz_ptr
a, mpz_srcptr b,
gmp_ulong c) {
227 mpz_cdiv_q_ui(
a, b, c);
229static void gmp_mpz_mod_ui(mpz_ptr
a, mpz_srcptr b,
gmp_ulong c) {
232static void gmp_mpz_gcd_ui(mpz_ptr
a, mpz_srcptr b,
gmp_ulong c) {
237#define gmp_binary_ui_op(op, uop) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, uop, 0)
238#define gmp_binary_op(op) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, NULL, 0)
239#define gmp_binary_ui_op_no_zero(op, uop) \
240 _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, uop, 1)
243#define gmp_unary_op(op) _gmp_unary_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
244#define gmp_unary_opl(op) _gmp_unary_opl(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
246static void gmp_free_object_storage(
zend_object *obj)
250 mpz_clear(intern->
num);
262 mpz_init(intern->
num);
263 *gmpnum_target = intern->
num;
271 mpz_ptr gmpnum_dummy;
272 return gmp_create_object_ex(ce, &gmpnum_dummy);
276static inline void gmp_create(
zval *target, mpz_ptr *gmpnum_target)
278 ZVAL_OBJ(target, gmp_create_object_ex(gmp_ce, gmpnum_target));
288 gmp_strval(writeobj, gmpnum, 10);
308 ZVAL_BOOL(writeobj, mpz_sgn(gmpnum) != 0);
325 gmp_strval(&
zv, gmpnum, 10);
339 mpz_set(new_object->
num, old_object->
num);
341 return &new_object->
std;
353 shift = zval_get_long(
op2);
360 goto valueof_op_failure;
364 goto typeof_op_failure;
368 shift = zval_get_long(
op2);
377 opcode ==
ZEND_POW ?
"Exponent" :
"Shift"
382 mpz_ptr gmpnum_op, gmpnum_result;
389 goto typeof_op_failure;
394 gmpnum_op = temp.
num;
400 op(gmpnum_result, gmpnum_op, (
gmp_ulong) shift);
410 const char *op_sigil;
430#define DO_BINARY_UI_OP_EX(op, uop, check_b_zero) \
431 gmp_zval_binary_ui_op( \
432 result, op1, op2, op, uop, check_b_zero, true); \
433 if (UNEXPECTED(EG(exception))) { return FAILURE; } \
436#define DO_BINARY_UI_OP(op) DO_BINARY_UI_OP_EX(op, op ## _ui, 0)
437#define DO_BINARY_OP(op) DO_BINARY_UI_OP_EX(op, NULL, 0)
439#define DO_UNARY_OP(op) \
440 gmp_zval_unary_op(result, op1, op); \
441 if (UNEXPECTED(EG(exception))) { \
456 return shift_operator_helper(mpz_pow_ui,
result,
op1,
op2, opcode);
462 return shift_operator_helper(mpz_mul_2exp,
result,
op1,
op2, opcode);
464 return shift_operator_helper(mpz_fdiv_q_2exp,
result,
op1,
op2, opcode);
525 gmp_strval(&
zv, gmpnum, 10);
527 zval_ptr_dtor_str(&
zv);
544 const unsigned char *
p, *
max;
551 gmp_create(
object, &gmpnum);
592#if defined(COMPILE_DL_GMP) && defined(ZTS)
595 gmp_globals->rand_initialized = 0;
602 gmp_ce = register_class_GMP();
603 gmp_ce->create_object = gmp_create_object;
604 gmp_ce->default_object_handlers = &gmp_object_handlers;
605 gmp_ce->serialize = gmp_serialize;
606 gmp_ce->unserialize = gmp_unserialize;
610 gmp_object_handlers.free_obj = gmp_free_object_storage;
611 gmp_object_handlers.cast_object = gmp_cast_object;
612 gmp_object_handlers.get_debug_info = gmp_get_debug_info;
613 gmp_object_handlers.clone_obj = gmp_clone_obj;
614 gmp_object_handlers.do_operation = gmp_do_operation;
615 gmp_object_handlers.compare = gmp_compare;
617 register_gmp_symbols(module_number);
652 bool skip_lead =
false;
655 while (isspace(*num_str)) {
660 if (num_len >= 2 && num_str[0] ==
'0') {
661 if ((base == 0 || base == 16) && (num_str[1] ==
'x' || num_str[1] ==
'X')) {
664 }
else if ((base == 0 || base == 8) && (num_str[1] ==
'o' || num_str[1] ==
'O')) {
667 }
else if ((base == 0 || base == 2) && (num_str[1] ==
'b' || num_str[1] ==
'B')) {
673 int gmp_ret = mpz_set_str(gmp_number, (skip_lead ? &num_str[2] : num_str), (
int) base);
695 return convert_zstr_to_gmp(gmpnumber,
Z_STR_P(
val), base, arg_pos);
717 mpz_set_si(gmpnumber, lval);
724static void gmp_strval(
zval *
result, mpz_t gmpnum,
int base)
729 num_len = mpz_sizeinbase(gmpnum,
abs(base));
730 if (mpz_sgn(gmpnum) < 0) {
734 str = zend_string_alloc(num_len, 0);
735 mpz_get_str(
ZSTR_VAL(str), base, gmpnum);
757 mpz_ptr gmpnum_a, gmpnum_b;
774 res = mpz_cmp(gmpnum_a, gmpnum_b);
789 mpz_ptr gmpnum_a, gmpnum_b, gmpnum_result;
806 b_is_zero = !mpz_cmp_ui(gmpnum_b, 0);
826 gmp_op(gmpnum_result, gmpnum_a, gmpnum_b);
839 mpz_ptr gmpnum_a, gmpnum_b, gmpnum_result1, gmpnum_result2;
841 zval result1, result2;
857 b_is_zero = !mpz_cmp_ui(gmpnum_b, 0);
868 gmp_create(&result1, &gmpnum_result1);
869 gmp_create(&result2, &gmpnum_result2);
876 gmp_ui_op(gmpnum_result1, gmpnum_result2, gmpnum_a, (
gmp_ulong)
Z_LVAL_P(b_arg));
878 gmp_op(gmpnum_result1, gmpnum_result2, gmpnum_a, gmpnum_b);
895 gmp_zval_binary_ui_op(
896 return_value, a_arg, b_arg, gmp_op, gmp_ui_op, check_b_zero,
false);
905 mpz_ptr gmpnum_a, gmpnum_result;
911 gmp_op(gmpnum_result, gmpnum_a);
960 return convert_zstr_to_gmp(gmp_number, arg_str, base, 1);
963 mpz_set_si(gmp_number, arg_l);
981 if (!gmp_verify_base(base, 2)) {
987 if (gmp_initialize_number(gmp_number, arg_str, arg_l, base) ==
FAILURE) {
1049 if (!gmp_import_export_validate(
size,
options, &order, &endian)) {
1053 if ((data_len %
size) != 0) {
1060 mpz_import(gmpnumber, data_len /
size, order,
size, endian, 0,
data);
1067 zval *gmpnumber_arg;
1078 if (!gmp_import_export_validate(
size,
options, &order, &endian)) {
1084 if (mpz_sgn(gmpnumber) == 0) {
1088 size_t size_in_base_2 = mpz_sizeinbase(gmpnumber, 2);
1093 size_t bits_per_word = (size_t)
size * 8;
1094 size_t count = (size_in_base_2 + bits_per_word - 1) / bits_per_word;
1110 zval *gmpnumber_arg;
1127 zval *gmpnumber_arg;
1138 if ((base < 2 && base > -2) || base >
GMP_MAX_BASE || base < -36) {
1175 zval *a_arg, *b_arg;
1184 gmp_zval_binary_ui_op2(
return_value, a_arg, b_arg, mpz_tdiv_qr, mpz_tdiv_qr_ui, 1);
1187 gmp_zval_binary_ui_op2(
return_value, a_arg, b_arg, mpz_cdiv_qr, mpz_cdiv_qr_ui, 1);
1190 gmp_zval_binary_ui_op2(
return_value, a_arg, b_arg, mpz_fdiv_qr, mpz_fdiv_qr_ui, 1);
1202 zval *a_arg, *b_arg;
1211 gmp_zval_binary_ui_op(
1212 return_value, a_arg, b_arg, mpz_tdiv_r, gmp_mpz_tdiv_r_ui, 1,
false);
1215 gmp_zval_binary_ui_op(
1216 return_value, a_arg, b_arg, mpz_cdiv_r, gmp_mpz_cdiv_r_ui, 1,
false);
1219 gmp_zval_binary_ui_op(
1220 return_value, a_arg, b_arg, mpz_fdiv_r, gmp_mpz_fdiv_r_ui, 1,
false);
1232 zval *a_arg, *b_arg;
1241 gmp_zval_binary_ui_op(
1242 return_value, a_arg, b_arg, mpz_tdiv_q, gmp_mpz_tdiv_q_ui, 1,
false);
1245 gmp_zval_binary_ui_op(
1246 return_value, a_arg, b_arg, mpz_cdiv_q, gmp_mpz_cdiv_q_ui, 1,
false);
1249 gmp_zval_binary_ui_op(
1250 return_value, a_arg, b_arg, mpz_fdiv_q, gmp_mpz_fdiv_q_ui, 1,
false);
1292 mpz_ptr gmpnum_result;
1310 if (mpz_sgn(gmpnum) < 0) {
1317 mpz_fac_ui(gmpnum_result, zval_get_long(a_arg));
1326 mpz_ptr gmpnum_result;
1344 mpz_bin_ui(gmpnum_result, gmpnum_n, (
gmp_ulong) k);
1354 mpz_ptr gmpnum_result;
1369 mpz_ui_pow_ui(gmpnum_result,
Z_LVAL_P(base_arg),
exp);
1371 mpz_ptr gmpnum_base;
1374 mpz_pow_ui(gmpnum_result, gmpnum_base,
exp);
1383 zval *base_arg, *exp_arg, *mod_arg;
1384 mpz_ptr gmpnum_base, gmpnum_exp, gmpnum_mod, gmpnum_result;
1399 if (mpz_sgn(gmpnum_exp) < 0) {
1408 if (!mpz_cmp_ui(gmpnum_mod, 0)) {
1420 mpz_powm(gmpnum_result, gmpnum_base, gmpnum_exp, gmpnum_mod);
1433 mpz_ptr gmpnum_a, gmpnum_result;
1442 if (mpz_sgn(gmpnum_a) < 0) {
1449 mpz_sqrt(gmpnum_result, gmpnum_a);
1458 mpz_ptr gmpnum_a, gmpnum_result1, gmpnum_result2;
1460 zval result1, result2;
1468 if (mpz_sgn(gmpnum_a) < 0) {
1474 gmp_create(&result1, &gmpnum_result1);
1475 gmp_create(&result2, &gmpnum_result2);
1481 mpz_sqrtrem(gmpnum_result1, gmpnum_result2, gmpnum_a);
1491 mpz_ptr gmpnum_a, gmpnum_result;
1505 if (nth % 2 == 0 && mpz_sgn(gmpnum_a) < 0) {
1512 mpz_root(gmpnum_result, gmpnum_a, (
gmp_ulong) nth);
1522 mpz_ptr gmpnum_a, gmpnum_result1, gmpnum_result2;
1524 zval result1, result2;
1537 if (nth % 2 == 0 && mpz_sgn(gmpnum_a) < 0) {
1543 gmp_create(&result1, &gmpnum_result1);
1544 gmp_create(&result2, &gmpnum_result2);
1553 mpz_rootrem(gmpnum_result1, gmpnum_result2, gmpnum_a, (
gmp_ulong) nth);
1555 mpz_root(gmpnum_result1, gmpnum_a, (
gmp_ulong) nth);
1556 mpz_pow_ui(gmpnum_result2, gmpnum_result1, (
gmp_ulong) nth);
1557 mpz_sub(gmpnum_result2, gmpnum_a, gmpnum_result2);
1577 RETVAL_BOOL((mpz_perfect_square_p(gmpnum_a) != 0));
1595 RETVAL_BOOL((mpz_perfect_power_p(gmpnum_a) != 0));
1603 zval *gmpnumber_arg;
1614 RETVAL_LONG(mpz_probab_prime_p(gmpnum_a, (
int)reps));
1636 zval *a_arg, *b_arg;
1637 mpz_ptr gmpnum_a, gmpnum_b, gmpnum_t, gmpnum_s, gmpnum_g;
1639 zval result_g, result_s, result_t;
1648 gmp_create(&result_g, &gmpnum_g);
1649 gmp_create(&result_s, &gmpnum_s);
1650 gmp_create(&result_t, &gmpnum_t);
1657 mpz_gcdext(gmpnum_g, gmpnum_s, gmpnum_t, gmpnum_a, gmpnum_b);
1666 zval *a_arg, *b_arg;
1667 mpz_ptr gmpnum_a, gmpnum_b, gmpnum_result;
1683 if (!mpz_cmp_ui(gmpnum_b, 0)) {
1691 res = mpz_invert(gmpnum_result, gmpnum_a, gmpnum_b);
1704 zval *a_arg, *b_arg;
1705 mpz_ptr gmpnum_a, gmpnum_b;
1725 zval *a_arg, *b_arg;
1726 mpz_ptr gmpnum_a, gmpnum_b;
1746 zval *a_arg, *b_arg;
1747 mpz_ptr gmpnum_a, gmpnum_b;
1749 bool use_a_si = 0, use_b_si = 0;
1773 }
else if (use_b_si) {
1776 result = mpz_kronecker(gmpnum_a, gmpnum_b);
1789 zval *a_arg, *b_arg;
1818static void gmp_init_random(
void)
1824 unsigned long int seed = 0;
1825 if (php_random_bytes_silent(&seed,
sizeof(seed)) ==
FAILURE) {
1850 mpz_ptr gmpnum_seed;
1865 mpz_ptr gmpnum_result;
1871#if SIZEOF_SIZE_T == 4
1877 if (bits <= 0 || bits >
maxbits) {
1885 mpz_urandomb(gmpnum_result,
GMPG(
rand_state), (mp_bitcnt_t)bits);
1892 zval *min_arg, *max_arg;
1893 mpz_ptr gmpnum_max, gmpnum_result;
1906 if (mpz_cmp_ui(gmpnum_max,
Z_LVAL_P(min_arg)) <= 0) {
1913 mpz_init(gmpnum_range);
1916 mpz_sub_ui(gmpnum_range, gmpnum_max,
Z_LVAL_P(min_arg) - 1);
1918 mpz_add_ui(gmpnum_range, gmpnum_max, 1);
1924 mpz_add_ui(gmpnum_result, gmpnum_result,
Z_LVAL_P(min_arg));
1927 mpz_clear(gmpnum_range);
1934 if (mpz_cmp(gmpnum_max, gmpnum_min) <= 0) {
1942 mpz_init(gmpnum_range);
1944 mpz_sub(gmpnum_range, gmpnum_max, gmpnum_min);
1945 mpz_add_ui(gmpnum_range, gmpnum_range, 1);
1947 mpz_add(gmpnum_result, gmpnum_result, gmpnum_min);
1949 mpz_clear(gmpnum_range);
2007 if (index / GMP_NUMB_BITS >=
INT_MAX) {
2015 mpz_setbit(gmpnum_a, index);
2017 mpz_clrbit(gmpnum_a, index);
2039 mpz_clrbit(gmpnum_a, index);
2076 zval *a_arg, *b_arg;
2077 mpz_ptr gmpnum_a, gmpnum_b;
2154 if (!gmp_verify_base(base, 2)) {
2161 if (gmp_initialize_number(gmp_number, arg_str, arg_l, base) ==
FAILURE) {
2174 gmp_strval(&
zv, gmpnum, 16);
2178 if (props && zend_hash_num_elements(props) != 0) {
count(Countable|array $value, int $mode=COUNT_NORMAL)
zend_ffi_ctype_name_buf buf
#define FETCH_GMP_ZVAL_DEP_DEP(gmpnumber, zval, temp, dep1, dep2, arg_pos)
void(* gmp_binary_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)
void(* gmp_unary_ui_op_t)(mpz_ptr, gmp_ulong)
#define gmp_binary_ui_op_no_zero(op, uop)
gmp_ulong(* gmp_binary_ui_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, gmp_ulong)
#define GET_GMP_OBJECT_FROM_OBJ(obj)
void(* gmp_binary_ui_op_t)(mpz_ptr, mpz_srcptr, gmp_ulong)
#define GMP_LITTLE_ENDIAN
#define gmp_binary_op(op)
#define GMP_NATIVE_ENDIAN
#define GMP_ROUND_PLUSINF
mp_bitcnt_t(* gmp_unary_opl_t)(mpz_srcptr)
#define gmp_unary_opl(op)
#define FETCH_GMP_ZVAL_DEP(gmpnumber, zval, temp, dep, arg_pos)
void(* gmp_binary_op_t)(mpz_ptr, mpz_srcptr, mpz_srcptr)
#define GMP_ROUND_MINUSINF
#define FETCH_GMP_ZVAL(gmpnumber, zval, temp, arg_pos)
void(* gmp_unary_op_t)(mpz_ptr, mpz_srcptr)
PHP_GMP_API zend_class_entry * php_gmp_class_entry(void)
#define DO_BINARY_UI_OP_EX(op, uop, check_b_zero)
struct _gmp_temp gmp_temp_t
#define INIT_GMP_RETVAL(gmpnumber)
#define gmp_binary_ui_op(op, uop)
zend_module_entry gmp_module_entry
#define DO_BINARY_UI_OP(op)
#define GET_GMP_FROM_ZVAL(zval)
#define FREE_GMP_TEMP(temp)
gmp_divexact(GMP|int|string $num1, GMP|int|string $num2)
gmp_sqrtrem(GMP|int|string $num)
gmp_init(int|string $num, int $base=0)
gmp_random_bits(int $bits)
gmp_com(GMP|int|string $num)
gmp_legendre(GMP|int|string $num1, GMP|int|string $num2)
gmp_popcount(GMP|int|string $num)
gmp_scan1(GMP|int|string $num1, int $start)
gmp_hamdist(GMP|int|string $num1, GMP|int|string $num2)
gmp_nextprime(GMP|int|string $num)
gmp_div_q(GMP|int|string $num1, GMP|int|string $num2, int $rounding_mode=GMP_ROUND_ZERO)
gmp_prob_prime(GMP|int|string $num, int $repetitions=10)
gmp_div_qr(GMP|int|string $num1, GMP|int|string $num2, int $rounding_mode=GMP_ROUND_ZERO)
gmp_gcd(GMP|int|string $num1, GMP|int|string $num2)
gmp_export(GMP|int|string $num, int $word_size=1, int $flags=GMP_MSW_FIRST|GMP_NATIVE_ENDIAN)
gmp_mul(GMP|int|string $num1, GMP|int|string $num2)
gmp_sign(GMP|int|string $num)
gmp_scan0(GMP|int|string $num1, int $start)
gmp_mod(GMP|int|string $num1, GMP|int|string $num2)
gmp_setbit(GMP $num, int $index, bool $value=true)
gmp_sub(GMP|int|string $num1, GMP|int|string $num2)
gmp_powm(GMP|int|string $num, GMP|int|string $exponent, GMP|int|string $modulus)
gmp_jacobi(GMP|int|string $num1, GMP|int|string $num2)
gmp_kronecker(GMP|int|string $num1, GMP|int|string $num2)
gmp_binomial(GMP|int|string $n, int $k)
gmp_clrbit(GMP $num, int $index)
gmp_lcm(GMP|int|string $num1, GMP|int|string $num2)
gmp_abs(GMP|int|string $num)
gmp_add(GMP|int|string $num1, GMP|int|string $num2)
gmp_and(GMP|int|string $num1, GMP|int|string $num2)
gmp_sqrt(GMP|int|string $num)
gmp_intval(GMP|int|string $num)
gmp_invert(GMP|int|string $num1, GMP|int|string $num2)
gmp_xor(GMP|int|string $num1, GMP|int|string $num2)
gmp_root(GMP|int|string $num, int $nth)
gmp_import(string $data, int $word_size=1, int $flags=GMP_MSW_FIRST|GMP_NATIVE_ENDIAN)
gmp_fact(GMP|int|string $num)
gmp_or(GMP|int|string $num1, GMP|int|string $num2)
gmp_perfect_square(GMP|int|string $num)
gmp_div_r(GMP|int|string $num1, GMP|int|string $num2, int $rounding_mode=GMP_ROUND_ZERO)
gmp_testbit(GMP|int|string $num, int $index)
gmp_random_range(GMP|int|string $min, GMP|int|string $max)
gmp_random_seed(GMP|int|string $seed)
gmp_pow(GMP|int|string $num, int $exponent)
gmp_rootrem(GMP|int|string $num, int $nth)
gmp_perfect_power(GMP|int|string $num)
gmp_neg(GMP|int|string $num)
gmp_gcdext(GMP|int|string $num1, GMP|int|string $num2)
#define round(tables, k1, k2)
php_info_print_table_start()
php_info_print_table_row(2, "PDO Driver for Firebird", "enabled")
php_info_print_table_end()
gmp_randstate_t rand_state
struct _gmp_object gmp_object
PHP_JSON_API size_t int options
PHPAPI uint64_t php_random_generate_fallback_seed(void)
#define PHP_VAR_UNSERIALIZE_DESTROY(d)
struct php_unserialize_data * php_unserialize_data_t
struct php_serialize_data * php_serialize_data_t
#define PHP_VAR_UNSERIALIZE_INIT(d)
PHPAPI zval * var_tmp_var(php_unserialize_data_t *var_hashx)
PHPAPI int php_var_unserialize(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash)
#define PHP_VAR_SERIALIZE_INIT(d)
PHPAPI void php_var_serialize(smart_str *buf, zval *struc, php_serialize_data_t *data)
#define PHP_VAR_SERIALIZE_DESTROY(d)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_type_error(const char *format,...)
ZEND_API ZEND_COLD void zend_value_error(const char *format,...)
#define ZEND_TSRMLS_CACHE_UPDATE()
struct _zend_unserialize_data zend_unserialize_data
#define INTERNAL_FUNCTION_PARAMETERS
#define ZEND_TSRMLS_CACHE_DEFINE()
struct _zend_serialize_data zend_serialize_data
ZEND_API const char * zend_zval_value_name(const zval *arg)
ZEND_API const char * zend_zval_type_name(const zval *arg)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_long_slow(const zval *arg, zend_long *dest, uint32_t arg_num)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API ZEND_COLD void zend_argument_type_error(uint32_t arg_num, const char *format,...)
ZEND_API void object_properties_load(zend_object *object, HashTable *properties)
#define ZEND_PARSE_PARAMETERS_END()
#define ZEND_PARSE_PARAMETERS_NONE()
#define ZEND_MINIT_FUNCTION
#define ZEND_DECLARE_MODULE_GLOBALS(module_name)
#define RETVAL_NEW_STR(s)
#define ZEND_MODULE_INFO_D(module)
#define ZEND_GET_MODULE(name)
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define ZEND_MODULE_INFO_N(module)
#define RETVAL_EMPTY_STRING()
#define Z_PARAM_LONG(dest)
#define ZEND_MODULE_DEACTIVATE_N(module)
#define ZEND_METHOD(classname, name)
#define Z_PARAM_ARRAY_HT(dest)
#define ZEND_GINIT(module)
#define ZEND_MODULE_DEACTIVATE_D(module)
#define Z_PARAM_STR_OR_LONG(dest_str, dest_long)
#define ZEND_GINIT_FUNCTION
#define ZEND_FUNCTION(name)
#define ZEND_MODULE_STARTUP_N(module)
#define estrndup(s, length)
exit(string|int $status=0)
zend_string_release_ex(func->internal_function.function_name, 0)
ZEND_API zend_class_entry * zend_ce_value_error
ZEND_API ZEND_COLD zend_object * zend_throw_exception(zend_class_entry *exception_ce, const char *message, zend_long code)
ZEND_API zend_class_entry * zend_ce_division_by_zero_error
ZEND_API ZEND_COLD zend_object * zend_throw_exception_ex(zend_class_entry *exception_ce, zend_long code, const char *format,...)
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
ZEND_API HashTable *ZEND_FASTCALL zend_proptable_to_symtable(HashTable *ht, bool always_duplicate)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_str_update(HashTable *ht, const char *str, size_t len, zval *pData)
ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor)
ZEND_API HashTable *ZEND_FASTCALL zend_array_dup(HashTable *source)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)
struct _zend_string zend_string
#define STANDARD_MODULE_HEADER
#define ZEND_MODULE_GLOBALS(module_name)
struct _zend_module_entry zend_module_entry
#define STANDARD_MODULE_PROPERTIES_EX
ZEND_API HashTable * zend_std_get_properties(zend_object *zobj)
ZEND_API const zend_object_handlers std_object_handlers
ZEND_API void ZEND_FASTCALL zend_objects_clone_members(zend_object *new_object, zend_object *old_object)
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
ZEND_API uint8_t ZEND_FASTCALL is_numeric_str_function(const zend_string *str, zend_long *lval, double *dval)
#define XtOffsetOf(s_type, field)
#define EMPTY_SWITCH_DEFAULT_CASE()
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
void(* copy_ctor_func_t)(zval *pElement)
#define ZVAL_NEW_STR(z, s)
#define ZVAL_DOUBLE(z, d)
ZEND_RESULT_CODE zend_result
struct _zend_object_handlers zend_object_handlers
#define ZVAL_COPY_VALUE(z, v)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
ZEND_API void zval_add_ref(zval *p)