[PB5.31] GMP 6.0.0a

Share your advanced PureBasic knowledge/code with the community.
User avatar
bbanelli
Enthusiast
Enthusiast
Posts: 543
Joined: Tue May 28, 2013 10:51 pm
Location: Europe
Contact:

[PB5.31] GMP 6.0.0a

Post by bbanelli »

Greetings to all,

inspired by wilbert's DIY Multiple Precision Arithmetic Library work and necessity for some of my projects to implement such feature, I used newest GMP 6.0.0a (it has been bug-less for over 6 months now) since there were some very old examples on forum. Read instructions carefully and it should work as expected. Thanks to jack, almost all functions are imported, but generally, if you miss something, all information needed can be found in GMP's manual!

PB 5.31
Compiler: x86 and x64 ALL OS
Create Unicode executable: Compatible, but optional (thanks to luis)
Create threadsafe executable: Compatible, but optional (compiled with --enable-alloca=malloc-reentrant and GMP.pbi declared with Globals)

Download DLL/so/dylib Dynamic library settings ./configure --enable-fat --enable-alloca=malloc-reentrant --enable-shared --disable-static
Windows x86 version compiled with: gcc version 3.4.4 (msys special)
Windows x64 version comiled with: gcc version 4.9.2 (tdm64-1)
msys-1.0.dll is needed for both Windows x86 and x64 version to be present
Linux x86 & x64 version compiled with: gcc 4.6.3
Mac OS X x86 & x64 compiled with: Apple LLVM version 5.1 (clang-503.0.40) (x64 version with --enable-fat, x84 version without --enable-fat)

Image
Image
Image

GMP.pbi

Code: Select all

EnableExplicit

Define GMPLibrary.i

Structure mpz
  mp_alloc.i
  mp_size.i
  mp_limb.i
EndStructure

Structure mpq
  mp_num.mpz 
  mp_den.mpz 
EndStructure 

Structure mpf
  mp_prec.i
  mp_size.i 
  mp_expt.i 
  mp_limb.i 
EndStructure

Structure gmp_randata_lc_t
   mp_a.i
   mp_c.i
   mp_m.i
   mp_m2exp.i
EndStructure

Structure mp_algdata_t
  StructureUnion
     *_mp_lc.gmp_randata_lc_t
   EndStructureUnion
EndStructure

Structure gmp_randstate_t
   mp_seed.mpz
   mp_alg.i
   mp_algdata.mp_algdata_t
EndStructure

CompilerIf #PB_Compiler_OS = #PB_OS_Windows And #PB_Compiler_Processor = #PB_Processor_x86
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp-10.dll")
CompilerElseIf #PB_Compiler_OS = #PB_OS_Windows And #PB_Compiler_Processor = #PB_Processor_x64
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp-10x64.dll")
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux And #PB_Compiler_Processor = #PB_Processor_x86
  GMPLibrary = OpenLibrary(#PB_Any, "./libgmp.so.10.2.0")  
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux And #PB_Compiler_Processor = #PB_Processor_x64
  GMPLibrary = OpenLibrary(#PB_Any, "./libgmp.so.10.2.x64.0")
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS And #PB_Compiler_Processor = #PB_Processor_x86
  GMPLibrary = OpenLibrary(#PB_Any, "./libgmp.10.dylib")  
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS And #PB_Compiler_Processor = #PB_Processor_x64
  GMPLibrary = OpenLibrary(#PB_Any, "./libgmp.10.x64.dylib")
CompilerElse
  MessageRequester("Fatal error", "Unsupported OS/CPU.")
CompilerEndIf

PrototypeC   gmpz_init(*x.mpz)
PrototypeC   gmpz_init2(*x.mpz, n.i)
PrototypeC   gmpz_clear(*x.mpz)
PrototypeC   gmpz_realloc2(*x.mpz, n.i)
PrototypeC   gmpz_set(*rop.mpz, *op.mpz)
PrototypeC   gmpz_set_ui(*rop.mpz, op.i)
PrototypeC   gmpz_set_si(*rop.mpz, op.i)
PrototypeC   gmpz_set_d(*rop.mpz, op.d)
PrototypeC   gmpz_set_q(*rop.mpz, *op.mpq)
PrototypeC   gmpz_set_f(*rop.mpz, *op.mpf)
PrototypeC.i gmpz_set_str(*rop.mpz, string.p-ascii, base.i)
PrototypeC   gmpz_swap(*rop1.mpz, *rop2.mpz)
PrototypeC   gmpz_init_set(*rop.mpz, *op.mpz)
PrototypeC   gmpz_init_set_ui(*rop.mpz, op.i)
PrototypeC   gmpz_init_set_si(*rop.mpz, op.i)
PrototypeC   gmpz_init_set_d(*rop.mpz, op.d)
PrototypeC.i gmpz_init_set_str(*rop.mpz, string.p-ascii, base.i)
PrototypeC.i gmpz_get_ui(*op.mpz)
PrototypeC.i gmpz_get_si(*op.mpz)
PrototypeC.d gmpz_get_d(*op.mpz)
PrototypeC.d gmpz_get_d_2exp(*exp, *op.mpz)
PrototypeC.s gmpz_get_str(*string, base.i, *op.mpz)
PrototypeC   gmpz_add(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC   gmpz_add_ui(*rop.mpz, *op1.mpz, op2.i)
PrototypeC   gmpz_sub(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC   gmpz_sub_ui(*rop.mpz, *op1.mpz, op2.i)
PrototypeC   gmpz_ui_sub(*rop.mpz, op1.i, *op2.mpz)
PrototypeC   gmpz_mul(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC   gmpz_mul_si(*rop.mpz, *op1.mpz)
PrototypeC   gmpz_mul_ui(*rop.mpz, *op1.mpz, op2.i)
PrototypeC   gmpz_addmul(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC   gmpz_addmul_ui(*rop.mpz, *op1.mpz, op2.i)
PrototypeC   gmpz_submul(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC   gmpz_submul_ui(*rop.mpz, *op1.mpz, op2.i)
PrototypeC   gmpz_mul_2exp(*rop.mpz, *op1.mpz, op2.i)
PrototypeC   gmpz_neg(*rop.mpz, *op.mpz)
PrototypeC   gmpz_abs(*rop.mpz, *op.mpz)
PrototypeC   gmpz_cdiv_q(*q.mpz, *n.mpz, *d.mpz)
PrototypeC   gmpz_cdiv_r(*r.mpz, *n.mpz, *d.mpz)
PrototypeC   gmpz_cdiv_qr(*q.mpz, *r.mpz, *n.mpz, *d.mpz)
PrototypeC.i gmpz_cdiv_q_ui(*q.mpz, *n.mpz, d.i)
PrototypeC.i gmpz_cdiv_r_ui(*r.mpz, *n.mpz, d.i)
PrototypeC.i gmpz_cdiv_qr_ui(*q.mpz, *r.mpz, *n.mpz, d.i)
PrototypeC.i gmpz_cdiv_ui(*n.mpz, d.i)
PrototypeC   gmpz_cdiv_q_2exp(*q.mpz, *n.mpz, b.i)
PrototypeC   gmpz_cdiv_r_2exp(*r.mpz, *n.mpz, b.i)
PrototypeC   gmpz_fdiv_q(*q.mpz, *n.mpz, *d.mpz)
PrototypeC   gmpz_fdiv_r(*r.mpz, *n.mpz, *d.mpz)
PrototypeC   gmpz_fdiv_qr(*q.mpz, *r.mpz, *n.mpz, *d.mpz)
PrototypeC.i gmpz_fdiv_q_ui(*q.mpz, *n.mpz, d.i)
PrototypeC.i gmpz_fdiv_r_ui(*r.mpz, *n.mpz, d.i)
PrototypeC.i gmpz_fdiv_qr_ui(*q.mpz, *r.mpz, *n.mpz, d.i)
PrototypeC.i gmpz_fdiv_ui(*n.mpz, d.i)
PrototypeC   gmpz_fdiv_q_2exp(*q.mpz, *n.mpz, b.i)
PrototypeC   gmpz_fdiv_r_2exp(*r.mpz, *n.mpz, b.i)
PrototypeC   gmpz_tdiv_q(*q.mpz, *n.mpz, *d.mpz)
PrototypeC   gmpz_tdiv_r(*r.mpz, *n.mpz, *d.mpz)
PrototypeC   gmpz_tdiv_qr(*q.mpz, *r.mpz, *n.mpz, *d.mpz)
PrototypeC.i gmpz_tdiv_q_ui(*q.mpz, *n.mpz, d.i)
PrototypeC.i gmpz_tdiv_r_ui(*r.mpz, *n.mpz, d.i)
PrototypeC.i gmpz_tdiv_qr_ui(*q.mpz, *r.mpz, *n.mpz, d.i)
PrototypeC.i gmpz_tdiv_ui(*n.mpz, d.i)
PrototypeC   gmpz_tdiv_q_2exp(*q.mpz, *n.mpz, b.i)
PrototypeC   gmpz_tdiv_r_2exp(*r.mpz, *n.mpz, b.i)
PrototypeC   gmpz_mod(*r.mpz, *n.mpz, *d.mpz)
PrototypeC   gmpz_divexact(*q.mpz, *n.mpz, *d.mpz)
PrototypeC   gmpz_divexact_ui(*q.mpz, *n.mpz, d.i)
PrototypeC.i gmpz_divisible_p(*n.mpz, *d.mpz)
PrototypeC.i gmpz_divisible_ui_p(*n.mpz, d.i)
PrototypeC.i gmpz_divisible_2exp_p(*n.mpz, b.i)
PrototypeC.i gmpz_congruent_p(*n.mpz, *c.mpz, *d.mpz)
PrototypeC.i gmpz_congruent_ui_p(*n.mpz, c.i, d.i)
PrototypeC.i gmpz_congruent_2exp_p(*n.mpz, *c.mpz, b.i)
PrototypeC   gmpz_powm(*rop.mpz, *base.mpz, *exp.mpz, *mod.mpz)
PrototypeC   gmpz_powm_ui(*rop.mpz, *base.mpz, exp.i, *mod.mpz)
PrototypeC   gmpz_powm_sec(*rop.mpz, *base.mpz, *exp.mpz, *mod.mpz)
PrototypeC   gmpz_pow_ui(*rop.mpz, *base.mpz, exp.i)
PrototypeC   gmpz_ui_pow_ui(*rop.mpz, base.i, exp.i)
PrototypeC.i gmpz_root(*rop.mpz, *op.mpz, n.i)
PrototypeC   gmpz_rootrem(*root.mpz, *rem.mpz, *u.mpz, n.i)
PrototypeC   gmpz_sqrt(*rop.mpz, *op.mpz)
PrototypeC   gmpz_sqrtrem(*rop1.mpz, *rop2.mpz, *op.mpz)
PrototypeC.i gmpz_perfect_power_p(*op.mpz)
PrototypeC.i gmpz_perfect_square_p(*op.mpz)
PrototypeC.i gmpz_probab_prime_p(*n.mpz, reps.i)
PrototypeC   gmpz_nextprime(*rop.mpz, *op.mpz)
PrototypeC   gmpz_gcd(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC.i gmpz_gcd_ui(*rop.mpz, *op1.mpz, op2.i)
PrototypeC   gmpz_gcdext(*g.mpz, *s.mpz, *t.mpz, *a.mpz, *b.mpz)
PrototypeC   gmpz_lcm(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC   gmpz_lcm_ui(*rop.mpz, *op1.mpz, op2.i)
PrototypeC.i gmpz_invert(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC.i gmpz_jacobi(*a.mpz, *b.mpz)
PrototypeC.i gmpz_legendre(*a.mpz, *p.mpz)
PrototypeC.i gmpz_kronecker_si(*a.mpz, b.i)
PrototypeC.i gmpz_kronecker_ui(*a.mpz, b.i)
PrototypeC.i gmpz_si_kronecker(a.i, *b.mpz)
PrototypeC.i gmpz_ui_kronecker(a.i, *b.mpz)
PrototypeC.i gmpz_remove(*rop.mpz, *op.mpz, *f.mpz)
PrototypeC   gmpz_fac_ui(*rop.mpz, n.i)
PrototypeC   gmpz_2fac_ui(*rop.mpz, n.i)
PrototypeC   gmpz_mfac_uiui(*rop.mpz, n.i, m.i)
PrototypeC   gmpz_primorial_ui(*rop.mpz, n.i)
PrototypeC   gmpz_bin_ui(*rop.mpz, *n.mpz, k.i)
PrototypeC   gmpz_bin_uiui(*rop.mpz, n.i, k.i)
PrototypeC   gmpz_fib_ui(*fn.mpz, n.i)
PrototypeC   gmpz_fib2_ui(*fn.mpz, *fnsub1.mpz, n.i)
PrototypeC   gmpz_lucnum_ui(*ln.mpz, n.i)
PrototypeC   gmpz_lucnum2_ui(*ln.mpz, *lnsub1.mpz, n.i)
PrototypeC.i gmpz_cmp(*op1.mpz, *op2.mpz)
PrototypeC.i gmpz_cmp_d(*op1.mpz, op2.d)
PrototypeC.i gmpz_cmpabs(*op1.mpz, *op2.mpz)
PrototypeC.i gmpz_cmpabs_d(*op1.mpz, op2.d)
PrototypeC.i gmpz_cmpabs_ui(*op1.mpz, op2.i)
PrototypeC   gmpz_and(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC   gmpz_ior(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC   gmpz_xor(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC   gmpz_com(*rop.mpz, *op.mpz)
PrototypeC.i gmpz_popcount(*op.mpz)
PrototypeC.i gmpz_hamdist(*op1.mpz, *op2.mpz)
PrototypeC.i gmpz_scan0(*op.mpz, starting_bit.i)
PrototypeC.i gmpz_scan1(*op.mpz, starting_bit.i)
PrototypeC   gmpz_setbit(*rop.mpz, bit_index.i)
PrototypeC   gmpz_clrbit(*rop.mpz, bit_index.i)
PrototypeC   gmpz_combit(*rop.mpz, bit_index.i)
PrototypeC.i gmpz_tstbit(*op.mpz, bit_index.i)
PrototypeC.i gmpz_out_str(*stream, base.i, *op.mpz)
PrototypeC.i gmpz_inp_str(*rop.mpz, *stream, base.i)
PrototypeC.i gmpz_out_raw(*stream, *op.mpz)
PrototypeC.i gmpz_inp_raw(*rop.mpz, *stream)
PrototypeC   gmpz_urandomb(*rop.mpz, *state.gmp_randstate_t, n.i)
PrototypeC   gmpz_urandomm(*rop.mpz, *state.gmp_randstate_t, *n.mpz)
PrototypeC   gmpz_rrandomb(*rop.mpz, *state.gmp_randstate_t, n.i)
PrototypeC   gmpz_random(*rop.mpz, max_size.i)
PrototypeC   gmpz_random2(*rop.mpz, max_size.i)
PrototypeC   gmpz_import(*rop.mpz, count.i, order.i, size.i, endian.i, nails.i, *op)
PrototypeC.i gmpz_export(*rop, *countp, order.i, size.i, endian.i, nails.i, *op.mpz)
PrototypeC.i gmpz_fits_ulong_p(*op.mpz)
PrototypeC.i gmpz_fits_slong_p(*op.mpz)
PrototypeC.i gmpz_fits_uint_p(*op.mpz)
PrototypeC.i gmpz_fits_sint_p(*op.mpz)
PrototypeC.i gmpz_fits_ushort_p(*op.mpz)
PrototypeC.i gmpz_fits_sshort_p(*op.mpz)
PrototypeC.i gmpz_sizeinbase(*op.mpz, base.i)
PrototypeC   gmpz_array_init(*integer_array.mpz, array_size.i, fixed_num_bits.i)
PrototypeC.i gmpz_getlimbn(*op.mpz, n.i)
PrototypeC.i gmpz_size(*op.mpz)
PrototypeC.i gmpz_limbs_read(*x.mpz)
PrototypeC.i gmpz_limbs_write(*x.mpz, n.i)
PrototypeC.i gmpz_limbs_modify(*x.mpz, n.i)
PrototypeC   gmpz_limbs_finish(*x.mpz, s.i)
PrototypeC.i gmpz_roinit_n(*x.mpz, *xp, xs.i)
PrototypeC   mpq_init(*x.mpq)
PrototypeC   mpq_clear(*x.mpq)
PrototypeC   mpq_set(*rop.mpq, *op.mpq)
PrototypeC   mpq_set_z(*rop.mpq, *op.mpz)
PrototypeC   mpq_set_ui(*rop.mpq, op1.i, op2.i)
PrototypeC   mpq_set_si(*rop.mpq, op1.i, op2.i)
PrototypeC.i mpq_set_str(*rop.mpq, string.p-ascii, base.i)
PrototypeC   mpq_swap(*rop1.mpq, *rop2.mpq)
PrototypeC.d mpq_get_d(*op.mpq)
PrototypeC   mpq_set_d(*rop.mpq, op.d)
PrototypeC   mpq_set_f(*rop.mpq, *op.mpf)
PrototypeC.s mpq_get_str(*str, base.i, *op.mpq)
PrototypeC   mpq_add(*sum.mpq, *addend1.mpq, *addend2.mpq)
PrototypeC   mpq_sub(*difference.mpq, *minuend.mpq, *subtrahend.mpq)
PrototypeC   mpq_mul(*product.mpq, *multiplier.mpq, *multiplicand.mpq)
PrototypeC   mpq_mul_2exp(*rop.mpq, *op1.mpq, op2.i)
PrototypeC   mpq_div(*quotient.mpq, *dividend.mpq, *divisor.mpq)
PrototypeC   mpq_div_2exp(*rop.mpq, *op1.mpq, op2.i)
PrototypeC   mpq_neg(*negated_operand.mpq, *operand.mpq)
PrototypeC   mpq_abs(*rop.mpq, *op.mpq)
PrototypeC   mpq_inv(*inverted_number.mpq, *number.mpq)
PrototypeC.i mpq_cmp(*op1.mpq, *op2.mpq)
PrototypeC.i mpq_equal(*op1.mpq, *op2.mpq)
PrototypeC   mpq_get_num(*numerator.mpz, *rational.mpq)
PrototypeC   mpq_get_den(*denominator.mpz, *rational.mpq)
PrototypeC   mpq_set_num(*rational.mpq, *numerator.mpz)
PrototypeC   mpq_set_den(*rational.mpq, *denominator.mpz)
PrototypeC.i mpq_out_str(*stream, base.i, *op.mpq)
PrototypeC.i mpq_inp_str(*rop.mpq, *stream, base.i)
PrototypeC   mpf_set_default_prec(prec.i)
PrototypeC.i mpf_get_default_prec ()
PrototypeC   mpf_init(*x.mpf)
PrototypeC   mpf_init2(*x.mpf, prec.i)
PrototypeC   mpf_clear(*x.mpf)
PrototypeC.i mpf_get_prec(*op.mpf)
PrototypeC   mpf_set_prec(*rop.mpf, prec.i)
PrototypeC   mpf_set_prec_raw(*rop.mpf, prec.i)
PrototypeC   mpf_set(*rop.mpf, *op.mpf)
PrototypeC   mpf_set_ui(*rop.mpf, op.i)
PrototypeC   mpf_set_si(*rop.mpf, op.i)
PrototypeC   mpf_set_d(*rop.mpf, op.d)
PrototypeC   mpf_set_z(*rop.mpf, *op.mpz)
PrototypeC   mpf_set_q(*rop.mpf, *op.mpq)
PrototypeC.i mpf_set_str(*rop.mpf, string.p-ascii, base.i)
PrototypeC   mpf_swap(*rop1.mpf, *rop2.mpf)
PrototypeC   mpf_init_set(*rop.mpf, *op.mpf)
PrototypeC   mpf_init_set_ui(*rop.mpf, op.i)
PrototypeC   mpf_init_set_si(*rop.mpf, op.i)
PrototypeC   mpf_init_set_d(*rop.mpf, op.d)
PrototypeC.i mpf_init_set_str(*rop.mpf, string.p-ascii, base.i)
PrototypeC.d mpf_get_d(*op.mpf)
PrototypeC.d mpf_get_d_2exp(*exp, *op.mpf)
PrototypeC.i mpf_get_si(*op.mpf)
PrototypeC.i mpf_get_ui(*op.mpf)
PrototypeC.s mpf_get_str(*str, *expptr, base.i, n_digits.i, *op.mpf)
PrototypeC   mpf_add(*rop.mpf, *op1.mpf, *op2.mpf)
PrototypeC   mpf_add_ui(*rop.mpf, *op1.mpf, op2.i)
PrototypeC   mpf_sub(*rop.mpf, *op1.mpf, *op2.mpf)
PrototypeC   mpf_ui_sub(*rop.mpf, op1.i, *op2.mpf)
PrototypeC   mpf_sub_ui(*rop.mpf, *op1.mpf, op2.i)
PrototypeC   mpf_mul(*rop.mpf, *op1.mpf, *op2.mpf)
PrototypeC   mpf_mul_ui(*rop.mpf, *op1.mpf, op2.i)
PrototypeC   mpf_div(*rop.mpf, *op1.mpf, *op2.mpf)
PrototypeC   mpf_ui_div(*rop.mpf, op1.i, *op2.mpf)
PrototypeC   mpf_div_ui(*rop.mpf, *op1.mpf, op2.i)
PrototypeC   mpf_sqrt(*rop.mpf, *op.mpf)
PrototypeC   mpf_sqrt_ui(*rop.mpf, op.i)
PrototypeC   mpf_pow_ui(*rop.mpf, *op1.mpf, op2.i)
PrototypeC   mpf_neg(*rop.mpf, *op.mpf)
PrototypeC   mpf_abs(*rop.mpf, *op.mpf)
PrototypeC   mpf_mul_2exp(*rop.mpf, *op1.mpf, op2.i)
PrototypeC   mpf_div_2exp(*rop.mpf, *op1.mpf, op2.i)
PrototypeC.i mpf_cmp(*op1.mpf, *op2.mpf)
PrototypeC.i mpf_cmp_d(*op1.mpf, op2.d)
PrototypeC.i mpf_cmp_ui(*op1.mpf, op2.i)
PrototypeC.i mpf_cmp_si(*op1.mpf, op2.i)
PrototypeC.i mpf_eq(*op1.mpf, *op2.mpf, op3.i)
PrototypeC   mpf_reldiff(*rop.mpf, *op1.mpf, *op2.mpf)
PrototypeC.i mpf_out_str(*stream, base.i, n_digits.i, *op.mpf)
PrototypeC.i mpf_inp_str(*rop.mpf, *stream, base.i)
PrototypeC   mpf_ceil(*rop.mpf, *op.mpf)
PrototypeC   mpf_floor(*rop.mpf, *op.mpf)
PrototypeC   mpf_trunc(*rop.mpf, *op.mpf)
PrototypeC.i mpf_integer_p(*op.mpf)
PrototypeC.i mpf_fits_ulong_p(*op.mpf)
PrototypeC.i mpf_fits_slong_p(*op.mpf)
PrototypeC.i mpf_fits_uint_p(*op.mpf)
PrototypeC.i mpf_fits_sint_p(*op.mpf)
PrototypeC.i mpf_fits_ushort_p(*op.mpf)
PrototypeC.i mpf_fits_sshort_p(*op.mpf)
PrototypeC   mpf_urandomb(*rop.mpf, *state.gmp_randstate_t, nbits.i)
PrototypeC   mpf_random2(*rop.mpf, max_size.i)
PrototypeC   gmp_randinit_default(*state.gmp_randstate_t)
PrototypeC   gmp_randinit_mt(*state.gmp_randstate_t)
PrototypeC   gmp_randinit_lc_2exp(*state.gmp_randstate_t, *a.mpz, c.i, m2exp.i)
PrototypeC.i gmp_randinit_lc_2exp_size(*state.gmp_randstate_t, size.i)
PrototypeC   gmp_randinit_set(*rop.gmp_randstate_t, *op.gmp_randstate_t)
PrototypeC   gmp_randinit(*state.gmp_randstate_t)
PrototypeC   gmp_randclear(*state.gmp_randstate_t)
PrototypeC   gmp_randseed(*state.gmp_randstate_t, *seed.mpz)
PrototypeC   gmp_randseed_ui(*state.gmp_randstate_t, seed.i)
PrototypeC.i gmp_urandomb_ui(*state.gmp_randstate_t, n.i)
PrototypeC.i gmp_urandomm_ui(*state.gmp_randstate_t, n.i)
PrototypeC.i gmp_printf(*fmt)
PrototypeC.i gmp_vprintf(*fmt)
PrototypeC.i gmp_fprintf(*fp, *fmt)
PrototypeC.i gmp_vfprintf(*fp, *fmt)
PrototypeC.i gmp_sprintf(*buf, *fmt)
PrototypeC.i gmp_vsprintf(*buf, *fmt)
PrototypeC.i gmp_snprintf(*buf, size.i, fmt.p-ascii, *num)
PrototypeC.i gmp_vsnprintf(*buf, size.i, *fmt)
PrototypeC.i gmp_asprintf(*pp, *fmt)
PrototypeC.i gmp_vasprintf(*pp, *fmt)
PrototypeC.i gmp_scanf(*fmt)
PrototypeC.i gmp_vscanf(*fmt)
PrototypeC.i gmp_fscanf(*fp, *fmt)
PrototypeC.i gmp_vfscanf(*fp, *fmt)
PrototypeC.i gmp_sscanf(*s, *fmt)
PrototypeC.i gmp_vsscanf(*s, *fmt)
PrototypeC.i mpn_add_n(*rp, *s1p, *s2p, n.i)
PrototypeC.i mpn_add_1(*rp, *s1p, n.i, s2limb.i)
PrototypeC.i mpn_add(*rp, *s1p, s1n.i, *s2p, s2n.i)
PrototypeC.i mpn_sub_n(*rp, *s1p, *s2p, n.i)
PrototypeC.i mpn_sub_1(*rp, *s1p, n.i, s2limb.i)
PrototypeC.i mpn_sub(*rp, *s1p, s1n.i, *s2p, s2n.i)
PrototypeC.i mpn_neg(*rp, *sp, n.i)
PrototypeC   mpn_mul_n(*rp, *s1p, *s2p, n.i)
PrototypeC.i mpn_mul(*rp, *s1p, s1n.i, *s2p, s2n.i)
PrototypeC   mpn_sqr(*rp, *s1p, n.i)
PrototypeC.i mpn_mul_1(*rp, *s1p, n.i, s2limb.i)
PrototypeC.i mpn_addmul_1(*rp, *s1p, n.i, s2limb.i)
PrototypeC.i mpn_submul_1(*rp, *s1p, n.i, s2limb.i)
PrototypeC   mpn_tdiv_qr(*qp, *rp, qxn.i, *np, nn.i, *dp, dn.i)
PrototypeC.i mpn_divrem(*r1p, qxn.i, *rs2p, rs2n.i, *s3p, s3n.i)
PrototypeC.i mpn_divrem_1(*r1p, qxn.i, *s2p, s2n.i, s3limb.i)
PrototypeC.i mpn_divmod(*r1p, *rs2p, rs2n.i, *s3p, s3n.i)
PrototypeC.i mpn_divexact_by3c(*rp, *sp, n.i, carry.i)
PrototypeC.i mpn_mod_1(*s1p, s1n.i, s2limb.i)
PrototypeC.i mpn_lshift(*rp, *sp, n.i, count.i)
PrototypeC.i mpn_rshift(*rp, *sp, n.i, count.i)
PrototypeC.i mpn_cmp(*s1p, *s2p, n.i)
PrototypeC.i mpn_gcd(*rp, *xp, xn.i, *yp, yn.i)
PrototypeC.i mpn_gcd_1(*xp, xn.i, ylimb.i)
PrototypeC.i mpn_gcdext(*gp, *sp, *sn, *up, un.i, *vp, vn.i)
PrototypeC.i mpn_sqrtrem(*r1p, *r2p, *sp, n.i)
PrototypeC.i mpn_sizeinbase(*xp, n.i, base.i)
PrototypeC.i mpn_get_str(*str, base.i, *s1p, s1n.i)
PrototypeC.i mpn_set_str(*rp, string.p-ascii, strsize.i, base.i)
PrototypeC.i mpn_scan0(*s1p, bit.i)
PrototypeC.i mpn_scan1(*s1p, bit.i)
PrototypeC   mpn_random(*r1p, r1n.i)
PrototypeC   mpn_random2(*r1p, r1n.i)
PrototypeC.i mpn_popcount(*s1p, n.i)
PrototypeC.i mpn_hamdist(*s1p, *s2p, n.i)
PrototypeC.i mpn_perfect_square_p(*s1p, n.i)
PrototypeC   mpn_and_n(*rp, *s1p, *s2p, n.i)
PrototypeC   mpn_ior_n(*rp, *s1p, *s2p, n.i)
PrototypeC   mpn_xor_n(*rp, *s1p, *s2p, n.i)
PrototypeC   mpn_andn_n(*rp, *s1p, *s2p, n.i)
PrototypeC   mpn_iorn_n(*rp, *s1p, *s2p, n.i)
PrototypeC   mpn_nand_n(*rp, *s1p, *s2p, n.i)
PrototypeC   mpn_nior_n(*rp, *s1p, *s2p, n.i)
PrototypeC   mpn_xnor_n(*rp, *s1p, *s2p, n.i)
PrototypeC   mpn_com(*rp, *sp, n.i)
PrototypeC   mpn_copyi(*rp, *s1p, n.i)
PrototypeC   mpn_copyd(*rp, *s1p, n.i)
PrototypeC   mpn_zero(*rp, n.i)
PrototypeC.i mpn_cnd_add_n(cnd.i, *rp, *s1p, *s2p, n.i)
PrototypeC.i mpn_cnd_sub_n(cnd.i, *rp, *s1p, *s2p, n.i)
PrototypeC.i mpn_sec_add_1(*rp, *ap, n.i, b.i, *tp)
PrototypeC.i mpn_sec_sub_1(*rp, *ap, n.i, b.i, *tp)
PrototypeC   mpn_sec_mul(*rp, *ap, an.i, *bp, bn.i, *tp)
PrototypeC.i mpn_sec_mul_itch(an.i, bn.i)
PrototypeC   mpn_sec_sqr(*rp, *ap, an.i, *tp)
PrototypeC.i mpn_sec_sqr_itch(an.i)
PrototypeC   mpn_sec_powm(*rp, *bp, bn.i, *ep, enb.i, *mp, n.i, *tp)
PrototypeC.i mpn_sec_powm_itch(bn.i, enb.i, n.i)
PrototypeC   mpn_sec_tabselect(*rp, *tab, n.i, nents.i, which.i)
PrototypeC.i mpn_sec_div_qr(*qp, *np, nn.i, *dp, dn.i, *tp)
PrototypeC.i mpn_sec_div_qr_itch(nn.i, dn.i)
PrototypeC   mpn_sec_div_r(*np, nn.i, *dp, dn.i, *tp)
PrototypeC.i mpn_sec_div_r_itch(nn.i, dn.i)
PrototypeC.i mpn_sec_invert(*rp, *ap, *mp, n.i, nbcnt.i, *tp)
PrototypeC.i mpn_sec_invert_itch(n.i)
PrototypeC.i gmp_snprintff(*buf, size.i, fint.p-ascii, *x.mpf)
PrototypeC.i gmp_snprintfq(*buf, size.i, fint.p-ascii, *x.mpq)
PrototypeC.i gmp_snprintfz(*buf, size.i, fint.p-ascii, *x.mpz)

If GMPLibrary
  Global mpz_init.i : mpz_init.gmpz_init = GetFunction(GMPLibrary, "__gmpz_init" )
  Global mpz_init2.i : mpz_init2.gmpz_init2 = GetFunction(GMPLibrary, "__gmpz_init2" )
  Global mpz_clear.i : mpz_clear.gmpz_clear = GetFunction(GMPLibrary, "__gmpz_clear" )
  Global mpz_realloc2.i : mpz_realloc2.gmpz_realloc2 = GetFunction(GMPLibrary, "__gmpz_realloc2" )
  Global mpz_set.i : mpz_set.gmpz_set = GetFunction(GMPLibrary, "__gmpz_set" )
  Global mpz_set_ui.i : mpz_set_ui.gmpz_set_ui = GetFunction(GMPLibrary, "__gmpz_set_ui" )
  Global mpz_set_si.i : mpz_set_si.gmpz_set_si = GetFunction(GMPLibrary, "__gmpz_set_si" )
  Global mpz_set_d.i : mpz_set_d.gmpz_set_d = GetFunction(GMPLibrary, "__gmpz_set_d" )
  Global mpz_set_q.i : mpz_set_q.gmpz_set_q = GetFunction(GMPLibrary, "__gmpz_set_q" )
  Global mpz_set_f.i : mpz_set_f.gmpz_set_f = GetFunction(GMPLibrary, "__gmpz_set_f" )
  Global mpz_set_str.i : mpz_set_str.gmpz_set_str = GetFunction(GMPLibrary, "__gmpz_set_str" )
  Global mpz_swap.i : mpz_swap.gmpz_swap = GetFunction(GMPLibrary, "__gmpz_swap" )
  Global mpz_init_set.i : mpz_init_set.gmpz_init_set = GetFunction(GMPLibrary, "__gmpz_init_set" )
  Global mpz_init_set_ui.i : mpz_init_set_ui.gmpz_init_set_ui = GetFunction(GMPLibrary, "__gmpz_init_set_ui" )
  Global mpz_init_set_si.i : mpz_init_set_si.gmpz_init_set_si = GetFunction(GMPLibrary, "__gmpz_init_set_si" )
  Global mpz_init_set_d.i : mpz_init_set_d.gmpz_init_set_d = GetFunction(GMPLibrary, "__gmpz_init_set_d" )
  Global mpz_init_set_str.i : mpz_init_set_str.gmpz_init_set_str = GetFunction(GMPLibrary, "__gmpz_init_set_str" )
  Global mpz_get_ui.i : mpz_get_ui.gmpz_get_ui = GetFunction(GMPLibrary, "__gmpz_get_ui" )
  Global mpz_get_si.i : mpz_get_si.gmpz_get_si = GetFunction(GMPLibrary, "__gmpz_get_si" )
  Global mpz_get_d.i : mpz_get_d.gmpz_get_d = GetFunction(GMPLibrary, "__gmpz_get_d" )
  Global mpz_get_d_2exp.i : mpz_get_d_2exp.gmpz_get_d_2exp = GetFunction(GMPLibrary, "__gmpz_get_d_2exp" )
  Global mpz_get_str.i : mpz_get_str.gmpz_get_str = GetFunction(GMPLibrary, "__gmpz_get_str" )
  Global mpz_add.i : mpz_add.gmpz_add = GetFunction(GMPLibrary, "__gmpz_add" )
  Global mpz_add_ui.i : mpz_add_ui.gmpz_add_ui = GetFunction(GMPLibrary, "__gmpz_add_ui" )
  Global mpz_sub.i : mpz_sub.gmpz_sub = GetFunction(GMPLibrary, "__gmpz_sub" )
  Global mpz_sub_ui.i : mpz_sub_ui.gmpz_sub_ui = GetFunction(GMPLibrary, "__gmpz_sub_ui" )
  Global mpz_ui_sub.i : mpz_ui_sub.gmpz_ui_sub = GetFunction(GMPLibrary, "__gmpz_ui_sub" )
  Global mpz_mul.i : mpz_mul.gmpz_mul = GetFunction(GMPLibrary, "__gmpz_mul" )
  Global mpz_mul_si.i : mpz_mul_si.gmpz_mul_si = GetFunction(GMPLibrary, "__gmpz_mul_si" )
  Global mpz_mul_ui.i : mpz_mul_ui.gmpz_mul_ui = GetFunction(GMPLibrary, "__gmpz_mul_ui" )
  Global mpz_addmul.i : mpz_addmul.gmpz_addmul = GetFunction(GMPLibrary, "__gmpz_addmul" )
  Global mpz_addmul_ui.i : mpz_addmul_ui.gmpz_addmul_ui = GetFunction(GMPLibrary, "__gmpz_addmul_ui" )
  Global mpz_submul.i : mpz_submul.gmpz_submul = GetFunction(GMPLibrary, "__gmpz_submul" )
  Global mpz_submul_ui.i : mpz_submul_ui.gmpz_submul_ui = GetFunction(GMPLibrary, "__gmpz_submul_ui" )
  Global mpz_mul_2exp.i : mpz_mul_2exp.gmpz_mul_2exp = GetFunction(GMPLibrary, "__gmpz_mul_2exp" )
  Global mpz_neg.i : mpz_neg.gmpz_neg = GetFunction(GMPLibrary, "__gmpz_neg" )
  Global mpz_abs.i : mpz_abs.gmpz_abs = GetFunction(GMPLibrary, "__gmpz_abs" )
  Global mpz_cdiv_q.i : mpz_cdiv_q.gmpz_cdiv_q = GetFunction(GMPLibrary, "__gmpz_cdiv_q" )
  Global mpz_cdiv_r.i : mpz_cdiv_r.gmpz_cdiv_r = GetFunction(GMPLibrary, "__gmpz_cdiv_r" )
  Global mpz_cdiv_qr.i : mpz_cdiv_qr.gmpz_cdiv_qr = GetFunction(GMPLibrary, "__gmpz_cdiv_qr" )
  Global mpz_cdiv_q_ui.i : mpz_cdiv_q_ui.gmpz_cdiv_q_ui = GetFunction(GMPLibrary, "__gmpz_cdiv_q_ui" )
  Global mpz_cdiv_r_ui.i : mpz_cdiv_r_ui.gmpz_cdiv_r_ui = GetFunction(GMPLibrary, "__gmpz_cdiv_r_ui" )
  Global mpz_cdiv_qr_ui.i : mpz_cdiv_qr_ui.gmpz_cdiv_qr_ui = GetFunction(GMPLibrary, "__gmpz_cdiv_qr_ui" )
  Global mpz_cdiv_ui.i : mpz_cdiv_ui.gmpz_cdiv_ui = GetFunction(GMPLibrary, "__gmpz_cdiv_ui" )
  Global mpz_cdiv_q_2exp.i : mpz_cdiv_q_2exp.gmpz_cdiv_q_2exp = GetFunction(GMPLibrary, "__gmpz_cdiv_q_2exp" )
  Global mpz_cdiv_r_2exp.i : mpz_cdiv_r_2exp.gmpz_cdiv_r_2exp = GetFunction(GMPLibrary, "__gmpz_cdiv_r_2exp" )
  Global mpz_fdiv_q.i : mpz_fdiv_q.gmpz_fdiv_q = GetFunction(GMPLibrary, "__gmpz_fdiv_q" )
  Global mpz_fdiv_r.i : mpz_fdiv_r.gmpz_fdiv_r = GetFunction(GMPLibrary, "__gmpz_fdiv_r" )
  Global mpz_fdiv_qr.i : mpz_fdiv_qr.gmpz_fdiv_qr = GetFunction(GMPLibrary, "__gmpz_fdiv_qr" )
  Global mpz_fdiv_q_ui.i : mpz_fdiv_q_ui.gmpz_fdiv_q_ui = GetFunction(GMPLibrary, "__gmpz_fdiv_q_ui" )
  Global mpz_fdiv_r_ui.i : mpz_fdiv_r_ui.gmpz_fdiv_r_ui = GetFunction(GMPLibrary, "__gmpz_fdiv_r_ui" )
  Global mpz_fdiv_qr_ui.i : mpz_fdiv_qr_ui.gmpz_fdiv_qr_ui = GetFunction(GMPLibrary, "__gmpz_fdiv_qr_ui" )
  Global mpz_fdiv_ui.i : mpz_fdiv_ui.gmpz_fdiv_ui = GetFunction(GMPLibrary, "__gmpz_fdiv_ui" )
  Global mpz_fdiv_q_2exp.i : mpz_fdiv_q_2exp.gmpz_fdiv_q_2exp = GetFunction(GMPLibrary, "__gmpz_fdiv_q_2exp" )
  Global mpz_fdiv_r_2exp.i : mpz_fdiv_r_2exp.gmpz_fdiv_r_2exp = GetFunction(GMPLibrary, "__gmpz_fdiv_r_2exp" )
  Global mpz_tdiv_q.i : mpz_tdiv_q.gmpz_tdiv_q = GetFunction(GMPLibrary, "__gmpz_tdiv_q" )
  Global mpz_tdiv_r.i : mpz_tdiv_r.gmpz_tdiv_r = GetFunction(GMPLibrary, "__gmpz_tdiv_r" )
  Global mpz_tdiv_qr.i : mpz_tdiv_qr.gmpz_tdiv_qr = GetFunction(GMPLibrary, "__gmpz_tdiv_qr" )
  Global mpz_tdiv_q_ui.i : mpz_tdiv_q_ui.gmpz_tdiv_q_ui = GetFunction(GMPLibrary, "__gmpz_tdiv_q_ui" )
  Global mpz_tdiv_r_ui.i : mpz_tdiv_r_ui.gmpz_tdiv_r_ui = GetFunction(GMPLibrary, "__gmpz_tdiv_r_ui" )
  Global mpz_tdiv_qr_ui.i : mpz_tdiv_qr_ui.gmpz_tdiv_qr_ui = GetFunction(GMPLibrary, "__gmpz_tdiv_qr_ui" )
  Global mpz_tdiv_ui.i : mpz_tdiv_ui.gmpz_tdiv_ui = GetFunction(GMPLibrary, "__gmpz_tdiv_ui" )
  Global mpz_tdiv_q_2exp.i : mpz_tdiv_q_2exp.gmpz_tdiv_q_2exp = GetFunction(GMPLibrary, "__gmpz_tdiv_q_2exp" )
  Global mpz_tdiv_r_2exp.i : mpz_tdiv_r_2exp.gmpz_tdiv_r_2exp = GetFunction(GMPLibrary, "__gmpz_tdiv_r_2exp" )
  Global mpz_mod.i : mpz_mod.gmpz_mod = GetFunction(GMPLibrary, "__gmpz_mod" )
  Global mpz_divexact.i : mpz_divexact.gmpz_divexact = GetFunction(GMPLibrary, "__gmpz_divexact" )
  Global mpz_divexact_ui.i : mpz_divexact_ui.gmpz_divexact_ui = GetFunction(GMPLibrary, "__gmpz_divexact_ui" )
  Global mpz_divisible_p.i : mpz_divisible_p.gmpz_divisible_p = GetFunction(GMPLibrary, "__gmpz_divisible_p" )
  Global mpz_divisible_ui_p.i : mpz_divisible_ui_p.gmpz_divisible_ui_p = GetFunction(GMPLibrary, "__gmpz_divisible_ui_p" )
  Global mpz_divisible_2exp_p.i : mpz_divisible_2exp_p.gmpz_divisible_2exp_p = GetFunction(GMPLibrary, "__gmpz_divisible_2exp_p" )
  Global mpz_congruent_p.i : mpz_congruent_p.gmpz_congruent_p = GetFunction(GMPLibrary, "__gmpz_congruent_p" )
  Global mpz_congruent_ui_p.i : mpz_congruent_ui_p.gmpz_congruent_ui_p = GetFunction(GMPLibrary, "__gmpz_congruent_ui_p" )
  Global mpz_congruent_2exp_p.i : mpz_congruent_2exp_p.gmpz_congruent_2exp_p = GetFunction(GMPLibrary, "__gmpz_congruent_2exp_p" )
  Global mpz_powm.i : mpz_powm.gmpz_powm = GetFunction(GMPLibrary, "__gmpz_powm" )
  Global mpz_powm_ui.i : mpz_powm_ui.gmpz_powm_ui = GetFunction(GMPLibrary, "__gmpz_powm_ui" )
  Global mpz_powm_sec.i : mpz_powm_sec.gmpz_powm_sec = GetFunction(GMPLibrary, "__gmpz_powm_sec" )
  Global mpz_pow_ui.i : mpz_pow_ui.gmpz_pow_ui = GetFunction(GMPLibrary, "__gmpz_pow_ui" )
  Global mpz_ui_pow_ui.i : mpz_ui_pow_ui.gmpz_ui_pow_ui = GetFunction(GMPLibrary, "__gmpz_ui_pow_ui" )
  Global mpz_root.i : mpz_root.gmpz_root = GetFunction(GMPLibrary, "__gmpz_root" )
  Global mpz_rootrem.i : mpz_rootrem.gmpz_rootrem = GetFunction(GMPLibrary, "__gmpz_rootrem" )
  Global mpz_sqrt.i : mpz_sqrt.gmpz_sqrt = GetFunction(GMPLibrary, "__gmpz_sqrt" )
  Global mpz_sqrtrem.i : mpz_sqrtrem.gmpz_sqrtrem = GetFunction(GMPLibrary, "__gmpz_sqrtrem" )
  Global mpz_perfect_power_p.i : mpz_perfect_power_p.gmpz_perfect_power_p = GetFunction(GMPLibrary, "__gmpz_perfect_power_p" )
  Global mpz_perfect_square_p.i : mpz_perfect_square_p.gmpz_perfect_square_p = GetFunction(GMPLibrary, "__gmpz_perfect_square_p" )
  Global mpz_probab_prime_p.i : mpz_probab_prime_p.gmpz_probab_prime_p = GetFunction(GMPLibrary, "__gmpz_probab_prime_p" )
  Global mpz_nextprime.i : mpz_nextprime.gmpz_nextprime = GetFunction(GMPLibrary, "__gmpz_nextprime" )
  Global mpz_gcd.i : mpz_gcd.gmpz_gcd = GetFunction(GMPLibrary, "__gmpz_gcd" )
  Global mpz_gcd_ui.i : mpz_gcd_ui.gmpz_gcd_ui = GetFunction(GMPLibrary, "__gmpz_gcd_ui" )
  Global mpz_gcdext.i : mpz_gcdext.gmpz_gcdext = GetFunction(GMPLibrary, "__gmpz_gcdext" )
  Global mpz_lcm.i : mpz_lcm.gmpz_lcm = GetFunction(GMPLibrary, "__gmpz_lcm" )
  Global mpz_lcm_ui.i : mpz_lcm_ui.gmpz_lcm_ui = GetFunction(GMPLibrary, "__gmpz_lcm_ui" )
  Global mpz_invert.i : mpz_invert.gmpz_invert = GetFunction(GMPLibrary, "__gmpz_invert" )
  Global mpz_jacobi.i : mpz_jacobi.gmpz_jacobi = GetFunction(GMPLibrary, "__gmpz_jacobi" )
  Global mpz_legendre.i : mpz_legendre.gmpz_legendre = GetFunction(GMPLibrary, "__gmpz_legendre" )
  Global mpz_kronecker_si.i : mpz_kronecker_si.gmpz_kronecker_si = GetFunction(GMPLibrary, "__gmpz_kronecker_si" )
  Global mpz_kronecker_ui.i : mpz_kronecker_ui.gmpz_kronecker_ui = GetFunction(GMPLibrary, "__gmpz_kronecker_ui" )
  Global mpz_si_kronecker.i : mpz_si_kronecker.gmpz_si_kronecker = GetFunction(GMPLibrary, "__gmpz_si_kronecker" )
  Global mpz_ui_kronecker.i : mpz_ui_kronecker.gmpz_ui_kronecker = GetFunction(GMPLibrary, "__gmpz_ui_kronecker" )
  Global mpz_remove.i : mpz_remove.gmpz_remove = GetFunction(GMPLibrary, "__gmpz_remove" )
  Global mpz_fac_ui.i : mpz_fac_ui.gmpz_fac_ui = GetFunction(GMPLibrary, "__gmpz_fac_ui" )
  Global mpz_2fac_ui.i : mpz_2fac_ui.gmpz_2fac_ui = GetFunction(GMPLibrary, "__gmpz_2fac_ui" )
  Global mpz_mfac_uiui.i : mpz_mfac_uiui.gmpz_mfac_uiui = GetFunction(GMPLibrary, "__gmpz_mfac_uiui" )
  Global mpz_primorial_ui.i : mpz_primorial_ui.gmpz_primorial_ui = GetFunction(GMPLibrary, "__gmpz_primorial_ui" )
  Global mpz_bin_ui.i : mpz_bin_ui.gmpz_bin_ui = GetFunction(GMPLibrary, "__gmpz_bin_ui" )
  Global mpz_bin_uiui.i : mpz_bin_uiui.gmpz_bin_uiui = GetFunction(GMPLibrary, "__gmpz_bin_uiui" )
  Global mpz_fib_ui.i : mpz_fib_ui.gmpz_fib_ui = GetFunction(GMPLibrary, "__gmpz_fib_ui" )
  Global mpz_fib2_ui.i : mpz_fib2_ui.gmpz_fib2_ui = GetFunction(GMPLibrary, "__gmpz_fib2_ui" )
  Global mpz_lucnum_ui.i : mpz_lucnum_ui.gmpz_lucnum_ui = GetFunction(GMPLibrary, "__gmpz_lucnum_ui" )
  Global mpz_lucnum2_ui.i : mpz_lucnum2_ui.gmpz_lucnum2_ui = GetFunction(GMPLibrary, "__gmpz_lucnum2_ui" )
  Global mpz_cmp.i : mpz_cmp.gmpz_cmp = GetFunction(GMPLibrary, "__gmpz_cmp" )
  Global mpz_cmp_d.i : mpz_cmp_d.gmpz_cmp_d = GetFunction(GMPLibrary, "__gmpz_cmp_d" )
  Global mpz_cmp_d.i : mpz_cmp_d.gmpz_cmp_d = GetFunction(GMPLibrary, "__gmpz_cmp_d" )
  Global mpz_cmp_d.i : mpz_cmp_d.gmpz_cmp_d = GetFunction(GMPLibrary, "__gmpz_cmp_d" )
  Global mpz_cmpabs.i : mpz_cmpabs.gmpz_cmpabs = GetFunction(GMPLibrary, "__gmpz_cmpabs" )
  Global mpz_cmpabs_d.i : mpz_cmpabs_d.gmpz_cmpabs_d = GetFunction(GMPLibrary, "__gmpz_cmpabs_d" )
  Global mpz_cmpabs_ui.i : mpz_cmpabs_ui.gmpz_cmpabs_ui = GetFunction(GMPLibrary, "__gmpz_cmpabs_ui" )
  Global mpz_cmpabs_ui.i : mpz_cmpabs_ui.gmpz_cmpabs_ui = GetFunction(GMPLibrary, "__gmpz_cmpabs_ui" )
  Global mpz_and.i : mpz_and.gmpz_and = GetFunction(GMPLibrary, "__gmpz_and" )
  Global mpz_ior.i : mpz_ior.gmpz_ior = GetFunction(GMPLibrary, "__gmpz_ior" )
  Global mpz_xor.i : mpz_xor.gmpz_xor = GetFunction(GMPLibrary, "__gmpz_xor" )
  Global mpz_com.i : mpz_com.gmpz_com = GetFunction(GMPLibrary, "__gmpz_com" )
  Global mpz_popcount.i : mpz_popcount.gmpz_popcount = GetFunction(GMPLibrary, "__gmpz_popcount" )
  Global mpz_hamdist.i : mpz_hamdist.gmpz_hamdist = GetFunction(GMPLibrary, "__gmpz_hamdist" )
  Global mpz_scan0.i : mpz_scan0.gmpz_scan0 = GetFunction(GMPLibrary, "__gmpz_scan0" )
  Global mpz_scan1.i : mpz_scan1.gmpz_scan1 = GetFunction(GMPLibrary, "__gmpz_scan1" )
  Global mpz_setbit.i : mpz_setbit.gmpz_setbit = GetFunction(GMPLibrary, "__gmpz_setbit" )
  Global mpz_clrbit.i : mpz_clrbit.gmpz_clrbit = GetFunction(GMPLibrary, "__gmpz_clrbit" )
  Global mpz_combit.i : mpz_combit.gmpz_combit = GetFunction(GMPLibrary, "__gmpz_combit" )
  Global mpz_tstbit.i : mpz_tstbit.gmpz_tstbit = GetFunction(GMPLibrary, "__gmpz_tstbit" )
  Global mpz_out_str.i : mpz_out_str.gmpz_out_str = GetFunction(GMPLibrary, "__gmpz_out_str" )
  Global mpz_inp_str.i : mpz_inp_str.gmpz_inp_str = GetFunction(GMPLibrary, "__gmpz_inp_str" )
  Global mpz_out_raw.i : mpz_out_raw.gmpz_out_raw = GetFunction(GMPLibrary, "__gmpz_out_raw" )
  Global mpz_inp_raw.i : mpz_inp_raw.gmpz_inp_raw = GetFunction(GMPLibrary, "__gmpz_inp_raw" )
  Global mpz_urandomb.i : mpz_urandomb.gmpz_urandomb = GetFunction(GMPLibrary, "__gmpz_urandomb" )
  Global mpz_urandomm.i : mpz_urandomm.gmpz_urandomm = GetFunction(GMPLibrary, "__gmpz_urandomm" )
  Global mpz_rrandomb.i : mpz_rrandomb.gmpz_rrandomb = GetFunction(GMPLibrary, "__gmpz_rrandomb" )
  Global mpz_random.i : mpz_random.gmpz_random = GetFunction(GMPLibrary, "__gmpz_random" )
  Global mpz_random2.i : mpz_random2.gmpz_random2 = GetFunction(GMPLibrary, "__gmpz_random2" )
  Global mpz_import.i : mpz_import.gmpz_import = GetFunction(GMPLibrary, "__gmpz_import" )
  Global mpz_export.i : mpz_export.gmpz_export = GetFunction(GMPLibrary, "__gmpz_export" )
  Global mpz_fits_ulong_p.i : mpz_fits_ulong_p.gmpz_fits_ulong_p = GetFunction(GMPLibrary, "__gmpz_fits_ulong_p" )
  Global mpz_fits_slong_p.i : mpz_fits_slong_p.gmpz_fits_slong_p = GetFunction(GMPLibrary, "__gmpz_fits_slong_p" )
  Global mpz_fits_uint_p.i : mpz_fits_uint_p.gmpz_fits_uint_p = GetFunction(GMPLibrary, "__gmpz_fits_uint_p" )
  Global mpz_fits_sint_p.i : mpz_fits_sint_p.gmpz_fits_sint_p = GetFunction(GMPLibrary, "__gmpz_fits_sint_p" )
  Global mpz_fits_ushort_p.i : mpz_fits_ushort_p.gmpz_fits_ushort_p = GetFunction(GMPLibrary, "__gmpz_fits_ushort_p" )
  Global mpz_fits_sshort_p.i : mpz_fits_sshort_p.gmpz_fits_sshort_p = GetFunction(GMPLibrary, "__gmpz_fits_sshort_p" )
  Global mpz_fits_sshort_p.i : mpz_fits_sshort_p.gmpz_fits_sshort_p = GetFunction(GMPLibrary, "__gmpz_fits_sshort_p" )
  Global mpz_fits_sshort_p.i : mpz_fits_sshort_p.gmpz_fits_sshort_p = GetFunction(GMPLibrary, "__gmpz_fits_sshort_p" )
  Global mpz_sizeinbase.i : mpz_sizeinbase.gmpz_sizeinbase = GetFunction(GMPLibrary, "__gmpz_sizeinbase" )
  Global mpz_array_init.i : mpz_array_init.gmpz_array_init = GetFunction(GMPLibrary, "__gmpz_array_init" )
  Global mpz_getlimbn.i : mpz_getlimbn.gmpz_getlimbn = GetFunction(GMPLibrary, "__gmpz_getlimbn" )
  Global mpz_size.i : mpz_size.gmpz_size = GetFunction(GMPLibrary, "__gmpz_size" )
  Global mpz_limbs_read.i : mpz_limbs_read.gmpz_limbs_read = GetFunction(GMPLibrary, "__gmpz_limbs_read" )
  Global mpz_limbs_write.i : mpz_limbs_write.gmpz_limbs_write = GetFunction(GMPLibrary, "__gmpz_limbs_write" )
  Global mpz_limbs_modify.i : mpz_limbs_modify.gmpz_limbs_modify = GetFunction(GMPLibrary, "__gmpz_limbs_modify" )
  Global mpz_limbs_finish.i : mpz_limbs_finish.gmpz_limbs_finish = GetFunction(GMPLibrary, "__gmpz_limbs_finish" )
  Global mpz_roinit_n.i : mpz_roinit_n.gmpz_roinit_n = GetFunction(GMPLibrary, "__gmpz_roinit_n" )
  Global mpz_roinit_n.i : mpz_roinit_n.gmpz_roinit_n = GetFunction(GMPLibrary, "__gmpz_roinit_n" )
  Global mpq_init.i : mpq_init.mpq_init = GetFunction(GMPLibrary, "__gmpq_init" )
  Global mpq_clear.i : mpq_clear.mpq_clear = GetFunction(GMPLibrary, "__gmpq_clear" )
  Global mpq_set.i : mpq_set.mpq_set = GetFunction(GMPLibrary, "__gmpq_set" )
  Global mpq_set_z.i : mpq_set_z.mpq_set_z = GetFunction(GMPLibrary, "__gmpq_set_z" )
  Global mpq_set_ui.i : mpq_set_ui.mpq_set_ui = GetFunction(GMPLibrary, "__gmpq_set_ui" )
  Global mpq_set_si.i : mpq_set_si.mpq_set_si = GetFunction(GMPLibrary, "__gmpq_set_si" )
  Global mpq_set_str.i : mpq_set_str.mpq_set_str = GetFunction(GMPLibrary, "__gmpq_set_str" )
  Global mpq_swap.i : mpq_swap.mpq_swap = GetFunction(GMPLibrary, "__gmpq_swap" )
  Global mpq_get_d.i : mpq_get_d.mpq_get_d = GetFunction(GMPLibrary, "__gmpq_get_d" )
  Global mpq_set_d.i : mpq_set_d.mpq_set_d = GetFunction(GMPLibrary, "__gmpq_set_d" )
  Global mpq_set_f.i : mpq_set_f.mpq_set_f = GetFunction(GMPLibrary, "__gmpq_set_f" )
  Global mpq_get_str.i : mpq_get_str.mpq_get_str = GetFunction(GMPLibrary, "__gmpq_get_str" )
  Global mpq_add.i : mpq_add.mpq_add = GetFunction(GMPLibrary, "__gmpq_add" )
  Global mpq_sub.i : mpq_sub.mpq_sub = GetFunction(GMPLibrary, "__gmpq_sub" )
  Global mpq_mul.i : mpq_mul.mpq_mul = GetFunction(GMPLibrary, "__gmpq_mul" )
  Global mpq_mul_2exp.i : mpq_mul_2exp.mpq_mul_2exp = GetFunction(GMPLibrary, "__gmpq_mul_2exp" )
  Global mpq_div.i : mpq_div.mpq_div = GetFunction(GMPLibrary, "__gmpq_div" )
  Global mpq_div_2exp.i : mpq_div_2exp.mpq_div_2exp = GetFunction(GMPLibrary, "__gmpq_div_2exp" )
  Global mpq_neg.i : mpq_neg.mpq_neg = GetFunction(GMPLibrary, "__gmpq_neg" )
  Global mpq_abs.i : mpq_abs.mpq_abs = GetFunction(GMPLibrary, "__gmpq_abs" )
  Global mpq_inv.i : mpq_inv.mpq_inv = GetFunction(GMPLibrary, "__gmpq_inv" )
  Global mpq_cmp.i : mpq_cmp.mpq_cmp = GetFunction(GMPLibrary, "__gmpq_cmp" )
  Global mpq_cmp.i : mpq_cmp.mpq_cmp = GetFunction(GMPLibrary, "__gmpq_cmp" )
  Global mpq_cmp.i : mpq_cmp.mpq_cmp = GetFunction(GMPLibrary, "__gmpq_cmp" )
  Global mpq_cmp.i : mpq_cmp.mpq_cmp = GetFunction(GMPLibrary, "__gmpq_cmp" )
  Global mpq_equal.i : mpq_equal.mpq_equal = GetFunction(GMPLibrary, "__gmpq_equal" )
  Global mpq_equal.i : mpq_equal.mpq_equal = GetFunction(GMPLibrary, "__gmpq_equal" )
  Global mpq_equal.i : mpq_equal.mpq_equal = GetFunction(GMPLibrary, "__gmpq_equal" )
  Global mpq_get_num.i : mpq_get_num.mpq_get_num = GetFunction(GMPLibrary, "__gmpq_get_num" )
  Global mpq_get_den.i : mpq_get_den.mpq_get_den = GetFunction(GMPLibrary, "__gmpq_get_den" )
  Global mpq_set_num.i : mpq_set_num.mpq_set_num = GetFunction(GMPLibrary, "__gmpq_set_num" )
  Global mpq_set_den.i : mpq_set_den.mpq_set_den = GetFunction(GMPLibrary, "__gmpq_set_den" )
  Global mpq_out_str.i : mpq_out_str.mpq_out_str = GetFunction(GMPLibrary, "__gmpq_out_str" )
  Global mpq_inp_str.i : mpq_inp_str.mpq_inp_str = GetFunction(GMPLibrary, "__gmpq_inp_str" )
  Global mpf_set_default_prec.i : mpf_set_default_prec.mpf_set_default_prec = GetFunction(GMPLibrary, "__gmpf_set_default_prec" )
  Global mpf_get_default_prec.i : mpf_get_default_prec.mpf_get_default_prec = GetFunction(GMPLibrary, "__gmpf_get_default_prec" )
  Global mpf_init.i : mpf_init.mpf_init = GetFunction(GMPLibrary, "__gmpf_init" )
  Global mpf_init2.i : mpf_init2.mpf_init2 = GetFunction(GMPLibrary, "__gmpf_init2" )
  Global mpf_clear.i : mpf_clear.mpf_clear = GetFunction(GMPLibrary, "__gmpf_clear" )
  Global mpf_get_prec.i : mpf_get_prec.mpf_get_prec = GetFunction(GMPLibrary, "__gmpf_get_prec" )
  Global mpf_set_prec.i : mpf_set_prec.mpf_set_prec = GetFunction(GMPLibrary, "__gmpf_set_prec" )
  Global mpf_set_prec_raw.i : mpf_set_prec_raw.mpf_set_prec_raw = GetFunction(GMPLibrary, "__gmpf_set_prec_raw" )
  Global mpf_set.i : mpf_set.mpf_set = GetFunction(GMPLibrary, "__gmpf_set" )
  Global mpf_set_ui.i : mpf_set_ui.mpf_set_ui = GetFunction(GMPLibrary, "__gmpf_set_ui" )
  Global mpf_set_si.i : mpf_set_si.mpf_set_si = GetFunction(GMPLibrary, "__gmpf_set_si" )
  Global mpf_set_d.i : mpf_set_d.mpf_set_d = GetFunction(GMPLibrary, "__gmpf_set_d" )
  Global mpf_set_z.i : mpf_set_z.mpf_set_z = GetFunction(GMPLibrary, "__gmpf_set_z" )
  Global mpf_set_q.i : mpf_set_q.mpf_set_q = GetFunction(GMPLibrary, "__gmpf_set_q" )
  Global mpf_set_str.i : mpf_set_str.mpf_set_str = GetFunction(GMPLibrary, "__gmpf_set_str" )
  Global mpf_swap.i : mpf_swap.mpf_swap = GetFunction(GMPLibrary, "__gmpf_swap" )
  Global mpf_init_set.i : mpf_init_set.mpf_init_set = GetFunction(GMPLibrary, "__gmpf_init_set" )
  Global mpf_init_set_ui.i : mpf_init_set_ui.mpf_init_set_ui = GetFunction(GMPLibrary, "__gmpf_init_set_ui" )
  Global mpf_init_set_si.i : mpf_init_set_si.mpf_init_set_si = GetFunction(GMPLibrary, "__gmpf_init_set_si" )
  Global mpf_init_set_d.i : mpf_init_set_d.mpf_init_set_d = GetFunction(GMPLibrary, "__gmpf_init_set_d" )
  Global mpf_init_set_str.i : mpf_init_set_str.mpf_init_set_str = GetFunction(GMPLibrary, "__gmpf_init_set_str" )
  Global mpf_get_d.i : mpf_get_d.mpf_get_d = GetFunction(GMPLibrary, "__gmpf_get_d" )
  Global mpf_get_d_2exp.i : mpf_get_d_2exp.mpf_get_d_2exp = GetFunction(GMPLibrary, "__gmpf_get_d_2exp" )
  Global mpf_get_si.i : mpf_get_si.mpf_get_si = GetFunction(GMPLibrary, "__gmpf_get_si" )
  Global mpf_get_ui.i : mpf_get_ui.mpf_get_ui = GetFunction(GMPLibrary, "__gmpf_get_ui" )
  Global mpf_get_str.i : mpf_get_str.mpf_get_str = GetFunction(GMPLibrary, "__gmpf_get_str" )
  Global mpf_add.i : mpf_add.mpf_add = GetFunction(GMPLibrary, "__gmpf_add" )
  Global mpf_add_ui.i : mpf_add_ui.mpf_add_ui = GetFunction(GMPLibrary, "__gmpf_add_ui" )
  Global mpf_sub.i : mpf_sub.mpf_sub = GetFunction(GMPLibrary, "__gmpf_sub" )
  Global mpf_ui_sub.i : mpf_ui_sub.mpf_ui_sub = GetFunction(GMPLibrary, "__gmpf_ui_sub" )
  Global mpf_sub_ui.i : mpf_sub_ui.mpf_sub_ui = GetFunction(GMPLibrary, "__gmpf_sub_ui" )
  Global mpf_mul.i : mpf_mul.mpf_mul = GetFunction(GMPLibrary, "__gmpf_mul" )
  Global mpf_mul_ui.i : mpf_mul_ui.mpf_mul_ui = GetFunction(GMPLibrary, "__gmpf_mul_ui" )
  Global mpf_div.i : mpf_div.mpf_div = GetFunction(GMPLibrary, "__gmpf_div" )
  Global mpf_ui_div.i : mpf_ui_div.mpf_ui_div = GetFunction(GMPLibrary, "__gmpf_ui_div" )
  Global mpf_div_ui.i : mpf_div_ui.mpf_div_ui = GetFunction(GMPLibrary, "__gmpf_div_ui" )
  Global mpf_sqrt.i : mpf_sqrt.mpf_sqrt = GetFunction(GMPLibrary, "__gmpf_sqrt" )
  Global mpf_sqrt_ui.i : mpf_sqrt_ui.mpf_sqrt_ui = GetFunction(GMPLibrary, "__gmpf_sqrt_ui" )
  Global mpf_pow_ui.i : mpf_pow_ui.mpf_pow_ui = GetFunction(GMPLibrary, "__gmpf_pow_ui" )
  Global mpf_neg.i : mpf_neg.mpf_neg = GetFunction(GMPLibrary, "__gmpf_neg" )
  Global mpf_abs.i : mpf_abs.mpf_abs = GetFunction(GMPLibrary, "__gmpf_abs" )
  Global mpf_mul_2exp.i : mpf_mul_2exp.mpf_mul_2exp = GetFunction(GMPLibrary, "__gmpf_mul_2exp" )
  Global mpf_div_2exp.i : mpf_div_2exp.mpf_div_2exp = GetFunction(GMPLibrary, "__gmpf_div_2exp" )
  Global mpf_cmp.i : mpf_cmp.mpf_cmp = GetFunction(GMPLibrary, "__gmpf_cmp" )
  Global mpf_cmp_d.i : mpf_cmp_d.mpf_cmp_d = GetFunction(GMPLibrary, "__gmpf_cmp_d" )
  Global mpf_cmp_ui.i : mpf_cmp_ui.mpf_cmp_ui = GetFunction(GMPLibrary, "__gmpf_cmp_ui" )
  Global mpf_cmp_si.i : mpf_cmp_si.mpf_cmp_si = GetFunction(GMPLibrary, "__gmpf_cmp_si" )
  Global mpf_eq.i : mpf_eq.mpf_eq = GetFunction(GMPLibrary, "__gmpf_eq" )
  Global mpf_reldiff.i : mpf_reldiff.mpf_reldiff = GetFunction(GMPLibrary, "__gmpf_reldiff" )
  Global mpf_reldiff.i : mpf_reldiff.mpf_reldiff = GetFunction(GMPLibrary, "__gmpf_reldiff" )
  Global mpf_out_str.i : mpf_out_str.mpf_out_str = GetFunction(GMPLibrary, "__gmpf_out_str" )
  Global mpf_inp_str.i : mpf_inp_str.mpf_inp_str = GetFunction(GMPLibrary, "__gmpf_inp_str" )
  Global mpf_ceil.i : mpf_ceil.mpf_ceil = GetFunction(GMPLibrary, "__gmpf_ceil" )
  Global mpf_floor.i : mpf_floor.mpf_floor = GetFunction(GMPLibrary, "__gmpf_floor" )
  Global mpf_trunc.i : mpf_trunc.mpf_trunc = GetFunction(GMPLibrary, "__gmpf_trunc" )
  Global mpf_integer_p.i : mpf_integer_p.mpf_integer_p = GetFunction(GMPLibrary, "__gmpf_integer_p" )
  Global mpf_fits_ulong_p.i : mpf_fits_ulong_p.mpf_fits_ulong_p = GetFunction(GMPLibrary, "__gmpf_fits_ulong_p" )
  Global mpf_fits_slong_p.i : mpf_fits_slong_p.mpf_fits_slong_p = GetFunction(GMPLibrary, "__gmpf_fits_slong_p" )
  Global mpf_fits_uint_p.i : mpf_fits_uint_p.mpf_fits_uint_p = GetFunction(GMPLibrary, "__gmpf_fits_uint_p" )
  Global mpf_fits_sint_p.i : mpf_fits_sint_p.mpf_fits_sint_p = GetFunction(GMPLibrary, "__gmpf_fits_sint_p" )
  Global mpf_fits_ushort_p.i : mpf_fits_ushort_p.mpf_fits_ushort_p = GetFunction(GMPLibrary, "__gmpf_fits_ushort_p" )
  Global mpf_fits_sshort_p.i : mpf_fits_sshort_p.mpf_fits_sshort_p = GetFunction(GMPLibrary, "__gmpf_fits_sshort_p" )
  Global mpf_urandomb.i : mpf_urandomb.mpf_urandomb = GetFunction(GMPLibrary, "__gmpf_urandomb" )
  Global mpf_random2.i : mpf_random2.mpf_random2 = GetFunction(GMPLibrary, "__gmpf_random2" )
  Global gmp_randinit_default.i : gmp_randinit_default.gmp_randinit_default = GetFunction(GMPLibrary, "__gmp_randinit_default" )
  Global gmp_randinit_mt.i : gmp_randinit_mt.gmp_randinit_mt = GetFunction(GMPLibrary, "__gmp_randinit_mt" )
  Global gmp_randinit_lc_2exp.i : gmp_randinit_lc_2exp.gmp_randinit_lc_2exp = GetFunction(GMPLibrary, "__gmp_randinit_lc_2exp" )
  Global gmp_randinit_lc_2exp_size.i : gmp_randinit_lc_2exp_size.gmp_randinit_lc_2exp_size = GetFunction(GMPLibrary, "__gmp_randinit_lc_2exp_size" )
  Global gmp_randinit_set.i : gmp_randinit_set.gmp_randinit_set = GetFunction(GMPLibrary, "__gmp_randinit_set" )
  Global gmp_randinit.i : gmp_randinit.gmp_randinit = GetFunction(GMPLibrary, "__gmp_randinit" )
  Global gmp_randclear.i : gmp_randclear.gmp_randclear = GetFunction(GMPLibrary, "__gmp_randclear" )
  Global gmp_randseed.i : gmp_randseed.gmp_randseed = GetFunction(GMPLibrary, "__gmp_randseed" )
  Global gmp_randseed_ui.i : gmp_randseed_ui.gmp_randseed_ui = GetFunction(GMPLibrary, "__gmp_randseed_ui" )
  Global gmp_urandomb_ui.i : gmp_urandomb_ui.gmp_urandomb_ui = GetFunction(GMPLibrary, "__gmp_urandomb_ui" )
  Global gmp_urandomm_ui.i : gmp_urandomm_ui.gmp_urandomm_ui = GetFunction(GMPLibrary, "__gmp_urandomm_ui" )
  Global gmp_printf.i : gmp_printf.gmp_printf = GetFunction(GMPLibrary, "__gmp_printf" )
  Global gmp_vprintf.i : gmp_vprintf.gmp_vprintf = GetFunction(GMPLibrary, "__gmp_vprintf" )
  Global gmp_fprintf.i : gmp_fprintf.gmp_fprintf = GetFunction(GMPLibrary, "__gmp_fprintf" )
  Global gmp_vfprintf.i : gmp_vfprintf.gmp_vfprintf = GetFunction(GMPLibrary, "__gmp_vfprintf" )
  Global gmp_sprintf.i : gmp_sprintf.gmp_sprintf = GetFunction(GMPLibrary, "__gmp_sprintf" )
  Global gmp_vsprintf.i : gmp_vsprintf.gmp_vsprintf = GetFunction(GMPLibrary, "__gmp_vsprintf" )
  Global gmp_snprintf.i : gmp_snprintf.gmp_snprintf = GetFunction(GMPLibrary, "__gmp_snprintf" )
  Global gmp_vsnprintf.i : gmp_vsnprintf.gmp_vsnprintf = GetFunction(GMPLibrary, "__gmp_vsnprintf" )
  Global gmp_asprintf.i : gmp_asprintf.gmp_asprintf = GetFunction(GMPLibrary, "__gmp_asprintf" )
  Global gmp_vasprintf.i : gmp_vasprintf.gmp_vasprintf = GetFunction(GMPLibrary, "__gmp_vasprintf" )
  Global gmp_scanf.i : gmp_scanf.gmp_scanf = GetFunction(GMPLibrary, "__gmp_scanf" )
  Global gmp_vscanf.i : gmp_vscanf.gmp_vscanf = GetFunction(GMPLibrary, "__gmp_vscanf" )
  Global gmp_fscanf.i : gmp_fscanf.gmp_fscanf = GetFunction(GMPLibrary, "__gmp_fscanf" )
  Global gmp_vfscanf.i : gmp_vfscanf.gmp_vfscanf = GetFunction(GMPLibrary, "__gmp_vfscanf" )
  Global gmp_sscanf.i : gmp_sscanf.gmp_sscanf = GetFunction(GMPLibrary, "__gmp_sscanf" )
  Global gmp_vsscanf.i : gmp_vsscanf.gmp_vsscanf = GetFunction(GMPLibrary, "__gmp_vsscanf" )
  Global mpn_add_n.i : mpn_add_n.mpn_add_n = GetFunction(GMPLibrary, "__gmpn_add_n" )
  Global mpn_add_1.i : mpn_add_1.mpn_add_1 = GetFunction(GMPLibrary, "__gmpn_add_1" )
  Global mpn_add.i : mpn_add.mpn_add = GetFunction(GMPLibrary, "__gmpn_add" )
  Global mpn_sub_n.i : mpn_sub_n.mpn_sub_n = GetFunction(GMPLibrary, "__gmpn_sub_n" )
  Global mpn_sub_1.i : mpn_sub_1.mpn_sub_1 = GetFunction(GMPLibrary, "__gmpn_sub_1" )
  Global mpn_sub.i : mpn_sub.mpn_sub = GetFunction(GMPLibrary, "__gmpn_sub" )
  Global mpn_neg.i : mpn_neg.mpn_neg = GetFunction(GMPLibrary, "__gmpn_neg" )
  Global mpn_mul_n.i : mpn_mul_n.mpn_mul_n = GetFunction(GMPLibrary, "__gmpn_mul_n" )
  Global mpn_mul.i : mpn_mul.mpn_mul = GetFunction(GMPLibrary, "__gmpn_mul" )
  Global mpn_sqr.i : mpn_sqr.mpn_sqr = GetFunction(GMPLibrary, "__gmpn_sqr" )
  Global mpn_mul_1.i : mpn_mul_1.mpn_mul_1 = GetFunction(GMPLibrary, "__gmpn_mul_1" )
  Global mpn_addmul_1.i : mpn_addmul_1.mpn_addmul_1 = GetFunction(GMPLibrary, "__gmpn_addmul_1" )
  Global mpn_submul_1.i : mpn_submul_1.mpn_submul_1 = GetFunction(GMPLibrary, "__gmpn_submul_1" )
  Global mpn_tdiv_qr.i : mpn_tdiv_qr.mpn_tdiv_qr = GetFunction(GMPLibrary, "__gmpn_tdiv_qr" )
  Global mpn_divrem.i : mpn_divrem.mpn_divrem = GetFunction(GMPLibrary, "__gmpn_divrem" )
  Global mpn_divrem_1.i : mpn_divrem_1.mpn_divrem_1 = GetFunction(GMPLibrary, "__gmpn_divrem_1" )
  Global mpn_divrem_1.i : mpn_divrem_1.mpn_divrem_1 = GetFunction(GMPLibrary, "__gmpn_divrem_1" )
  Global mpn_divmod.i : mpn_divmod.mpn_divmod = GetFunction(GMPLibrary, "__gmpn_divmod_1" )
  Global mpn_divexact_by3c.i : mpn_divexact_by3c.mpn_divexact_by3c = GetFunction(GMPLibrary, "__gmpn_divexact_by3c" )
  Global mpn_mod_1.i : mpn_mod_1.mpn_mod_1 = GetFunction(GMPLibrary, "__gmpn_mod_1" )
  Global mpn_lshift.i : mpn_lshift.mpn_lshift = GetFunction(GMPLibrary, "__gmpn_lshift" )
  Global mpn_rshift.i : mpn_rshift.mpn_rshift = GetFunction(GMPLibrary, "__gmpn_rshift" )
  Global mpn_cmp.i : mpn_cmp.mpn_cmp = GetFunction(GMPLibrary, "__gmpn_cmp" )
  Global mpn_gcd.i : mpn_gcd.mpn_gcd = GetFunction(GMPLibrary, "__gmpn_gcd" )
  Global mpn_gcd_1.i : mpn_gcd_1.mpn_gcd_1 = GetFunction(GMPLibrary, "__gmpn_gcd_1" )
  Global mpn_gcdext.i : mpn_gcdext.mpn_gcdext = GetFunction(GMPLibrary, "__gmpn_gcdext" )
  Global mpn_sqrtrem.i : mpn_sqrtrem.mpn_sqrtrem = GetFunction(GMPLibrary, "__gmpn_sqrtrem" )
  Global mpn_sizeinbase.i : mpn_sizeinbase.mpn_sizeinbase = GetFunction(GMPLibrary, "__gmpn_sizeinbase" )
  Global mpn_get_str.i : mpn_get_str.mpn_get_str = GetFunction(GMPLibrary, "__gmpn_get_str" )
  Global mpn_set_str.i : mpn_set_str.mpn_set_str = GetFunction(GMPLibrary, "__gmpn_set_str" )
  Global mpn_scan0.i : mpn_scan0.mpn_scan0 = GetFunction(GMPLibrary, "__gmpn_scan0" )
  Global mpn_scan1.i : mpn_scan1.mpn_scan1 = GetFunction(GMPLibrary, "__gmpn_scan1" )
  Global mpn_random.i : mpn_random.mpn_random = GetFunction(GMPLibrary, "__gmpn_random" )
  Global mpn_random2.i : mpn_random2.mpn_random2 = GetFunction(GMPLibrary, "__gmpn_random2" )
  Global mpn_popcount.i : mpn_popcount.mpn_popcount = GetFunction(GMPLibrary, "__gmpn_popcount" )
  Global mpn_hamdist.i : mpn_hamdist.mpn_hamdist = GetFunction(GMPLibrary, "__gmpn_hamdist" )
  Global mpn_perfect_square_p.i : mpn_perfect_square_p.mpn_perfect_square_p = GetFunction(GMPLibrary, "__gmpn_perfect_square_p" )
  Global mpn_and_n.i : mpn_and_n.mpn_and_n = GetFunction(GMPLibrary, "__gmpn_and_n" )
  Global mpn_ior_n.i : mpn_ior_n.mpn_ior_n = GetFunction(GMPLibrary, "__gmpn_ior_n" )
  Global mpn_xor_n.i : mpn_xor_n.mpn_xor_n = GetFunction(GMPLibrary, "__gmpn_xor_n" )
  Global mpn_andn_n.i : mpn_andn_n.mpn_andn_n = GetFunction(GMPLibrary, "__gmpn_andn_n" )
  Global mpn_iorn_n.i : mpn_iorn_n.mpn_iorn_n = GetFunction(GMPLibrary, "__gmpn_iorn_n" )
  Global mpn_nand_n.i : mpn_nand_n.mpn_nand_n = GetFunction(GMPLibrary, "__gmpn_nand_n" )
  Global mpn_nior_n.i : mpn_nior_n.mpn_nior_n = GetFunction(GMPLibrary, "__gmpn_nior_n" )
  Global mpn_xnor_n.i : mpn_xnor_n.mpn_xnor_n = GetFunction(GMPLibrary, "__gmpn_xnor_n" )
  Global mpn_com.i : mpn_com.mpn_com = GetFunction(GMPLibrary, "__gmpn_com" )
  Global mpn_copyi.i : mpn_copyi.mpn_copyi = GetFunction(GMPLibrary, "__gmpn_copyi" )
  Global mpn_copyd.i : mpn_copyd.mpn_copyd = GetFunction(GMPLibrary, "__gmpn_copyd" )
  Global mpn_zero.i : mpn_zero.mpn_zero = GetFunction(GMPLibrary, "__gmpn_zero" )
  Global mpn_cnd_add_n.i : mpn_cnd_add_n.mpn_cnd_add_n = GetFunction(GMPLibrary, "__gmpn_cnd_add_n" )
  Global mpn_cnd_sub_n.i : mpn_cnd_sub_n.mpn_cnd_sub_n = GetFunction(GMPLibrary, "__gmpn_cnd_sub_n" )
  Global mpn_sec_add_1.i : mpn_sec_add_1.mpn_sec_add_1 = GetFunction(GMPLibrary, "__gmpn_sec_add_1" )
  Global mpn_sec_sub_1.i : mpn_sec_sub_1.mpn_sec_sub_1 = GetFunction(GMPLibrary, "__gmpn_sec_sub_1" )
  Global mpn_sec_mul.i : mpn_sec_mul.mpn_sec_mul = GetFunction(GMPLibrary, "__gmpn_sec_mul" )
  Global mpn_sec_mul_itch.i : mpn_sec_mul_itch.mpn_sec_mul_itch = GetFunction(GMPLibrary, "__gmpn_sec_mul_itch" )
  Global mpn_sec_sqr.i : mpn_sec_sqr.mpn_sec_sqr = GetFunction(GMPLibrary, "__gmpn_sec_sqr" )
  Global mpn_sec_sqr_itch.i : mpn_sec_sqr_itch.mpn_sec_sqr_itch = GetFunction(GMPLibrary, "__gmpn_sec_sqr_itch" )
  Global mpn_sec_powm.i : mpn_sec_powm.mpn_sec_powm = GetFunction(GMPLibrary, "__gmpn_sec_powm" )
  Global mpn_sec_powm_itch.i : mpn_sec_powm_itch.mpn_sec_powm_itch = GetFunction(GMPLibrary, "__gmpn_sec_powm_itch" )
  Global mpn_sec_tabselect.i : mpn_sec_tabselect.mpn_sec_tabselect = GetFunction(GMPLibrary, "__gmpn_sec_tabselect" )
  Global mpn_sec_div_qr.i : mpn_sec_div_qr.mpn_sec_div_qr = GetFunction(GMPLibrary, "__gmpn_sec_div_qr" )
  Global mpn_sec_div_qr_itch.i : mpn_sec_div_qr_itch.mpn_sec_div_qr_itch = GetFunction(GMPLibrary, "__gmpn_sec_div_qr_itch" )
  Global mpn_sec_div_r.i : mpn_sec_div_r.mpn_sec_div_r = GetFunction(GMPLibrary, "__gmpn_sec_div_r" )
  Global mpn_sec_div_r_itch.i : mpn_sec_div_r_itch.mpn_sec_div_r_itch = GetFunction(GMPLibrary, "__gmpn_sec_div_r_itch" )
  Global mpn_sec_invert.i : mpn_sec_invert.mpn_sec_invert = GetFunction(GMPLibrary, "__gmpn_sec_invert" )
  Global mpn_sec_invert_itch.i : mpn_sec_invert_itch.mpn_sec_invert_itch = GetFunction(GMPLibrary, "__gmpn_sec_invert_itch" )
  Global gmp_snprintfz.i : gmp_snprintfz.gmp_snprintfz = GetFunction(GMPLibrary, "__gmp_snprintf")
  Global gmp_snprintff.i : gmp_snprintff.gmp_snprintff = GetFunction(GMPLibrary, "__gmp_snprintf")
  Global gmp_snprintfq.i : gmp_snprintfq.gmp_snprintfq = GetFunction(GMPLibrary, "__gmp_snprintf")
Else
  If #PB_Compiler_OS = #PB_OS_Windows And #PB_Compiler_Processor = #PB_Processor_x86
    MessageRequester("Fatal error", "Error opening libgmp-10.dll")
  ElseIf #PB_Compiler_OS = #PB_OS_Windows And #PB_Compiler_Processor = #PB_Processor_x64
    MessageRequester("Fatal error", "Error opening libgmp-10x64.dll")
  ElseIf #PB_Compiler_OS = #PB_OS_Linux And #PB_Compiler_Processor = #PB_Processor_x86
    MessageRequester("Fatal error", "Error opening libgmp.so.10.2.0")
  ElseIf #PB_Compiler_OS = #PB_OS_Linux And #PB_Compiler_Processor = #PB_Processor_x64
    MessageRequester("Fatal error", "Error opening libgmp.so.10.2.x64.0")
  ElseIf #PB_Compiler_OS = #PB_OS_MacOS And #PB_Compiler_Processor = #PB_Processor_x86
    MessageRequester("Fatal error", "Error opening libgmp.10.dylib")
  ElseIf #PB_Compiler_OS = #PB_OS_MacOS And #PB_Compiler_Processor = #PB_Processor_x64
    MessageRequester("Fatal error", "Error opening libgmp.10.x64.dylib")
  EndIf
  End
EndIf
Last edited by bbanelli on Fri Jan 02, 2015 12:25 am, edited 23 times in total.
"If you lie to the compiler, it will get its revenge."
Henry Spencer
https://www.pci-z.com/
User avatar
luis
Addict
Addict
Posts: 3876
Joined: Wed Aug 31, 2005 11:09 pm
Location: Italy

Re: GMP 6.0 + PB5.31 + Windows x86/x64

Post by luis »

Thank you

I don't have time right now to check all the things you mentioned (and even less so to build the library from source), and what I'm about to say could be wrong since it's coming from making deductions by just looking at the code above and I didn't check the original documentation with original the C prototypes / structures etc.

BUT If I'm right could somewhat help you so here it is anyway:

1) Shouldn't be PrototypeC everywhere ?

2) Are you sure about the threadsafe executable requirement ? I don't see why it should be needed.

3) AFAIK pseudotypes have no effect when using pointers

4) If the library internally works with ascii, I suppose you will have to read the results as ascii with peeks

5) I've changed some prototypes to reflect all this, and the calling code

Code: Select all

EnableExplicit

Define GMPLibrary.i

Structure mpz
  mp_alloc.i
  mp_size.i
  mp_limb.i
EndStructure

Structure mpq
  mp_num.mpz 
  mp_den.mpz 
EndStructure 

Structure mpf
  mp_prec.i
  mp_size.i 
  mp_expt.i 
  mp_limb.i 
EndStructure

PrototypeC gmpz_init(*x.mpz)
PrototypeC gmpz_set_str(*rop.mpz, string.p-ascii, base.i)
PrototypeC gmpz_swap(*rop1.mpz, *rop2.mpz)
PrototypeC gmpz_get_str(*string, base.i, *op.mpz)
PrototypeC gmpz_add(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC gmpz_sub(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC gmpz_mul(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC gmpz_addmul(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC gmpz_submul(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC gmpz_mul_2exp(*rop.mpz, *op1.mpz, *op2.mpz)
PrototypeC gmpz_neg(*rop.mpz, *op.mpz)
PrototypeC gmpz_abs(*rop.mpz, *op.mpz)
PrototypeC gmpz_cdiv_q(*q.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_cdiv_r(*r.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_cdiv_qr(*q.mpz, *r.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_fdiv_q(*q.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_fdiv_r(*r.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_fdiv_qr(*q.mpz, *r.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_tdiv_q(*q.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_tdiv_r(*r.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_tdiv_qr(*q.mpz, *r.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_pow_ui(*rop.mpz, *base.mpz, exp.i)
PrototypeC gmpz_mod(*r.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_root(*rop.mpz, *op.mpz, n.i)
PrototypeC gmpz_sqrt(*rop.mpz, *op.mpz)
PrototypeC gmpz_divexact(*q.mpz, *n.mpz, *d.mpz)
PrototypeC gmpz_fac_ui(*rop.mpz, n.i)
PrototypeC.i gmpz_cmp(*op1.mpz, *op2.mpz)
PrototypeC.i gmpz_cmpabs(*op1.mpz, *op2.mpz)
PrototypeC.i gmp_snprintfz(*buf, size.i, fint.p-ascii, *x.mpz)
PrototypeC gmpz_clear(*x.mpz)
PrototypeC gmpf_init(*x.mpf)
PrototypeC gmpf_init2(*x.mpf, prec.i)
PrototypeC.i gmpf_get_prec(*op.mpf)
PrototypeC gmpf_set_str(*rop.mpf, string.p-ascii, base.i)
PrototypeC gmpf_swap(*rop1.mpf, *rop2.mpf)
PrototypeC gmpf_add(*rop.mpf, *op1.mpf, *op2.mpf)
PrototypeC gmpf_sub(*rop.mpf, *op1.mpf, *op2.mpf)
PrototypeC gmpf_mul(*rop.mpf, *op1.mpf, *op2.mpf)
PrototypeC gmpf_div(*rop.mpf, *op1.mpf, *op2.mpf)
PrototypeC gmpf_sqrt(*rop.mpf, *op.mpf)
PrototypeC gmpf_pow_ui(*rop.mpf, *op1.mpf, op2.i)
PrototypeC gmpf_neg(*rop.mpf, *op.mpf)
PrototypeC gmpf_abs(*rop.mpf, *op.mpf)
PrototypeC gmpf_clear(*x.mpf)
PrototypeC.i gmp_snprintff(*buf, size.i, fint.p-ascii, *x.mpf)
PrototypeC.i gmp_snprintfq(*buf, size.i, fint.p-ascii, *x.mpq)
PrototypeC.i gmp_version()

If #PB_Compiler_Processor = #PB_Processor_x86
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp-10.dll")
ElseIf #PB_Compiler_Processor = #PB_Processor_x64
  GMPLibrary = OpenLibrary(#PB_Any, "cyggmp-10.dll")
EndIf
  
If GMPLibrary
  Define mpz_init.i : mpz_init.gmpz_init = GetFunction(GMPLibrary, "__gmpz_init")
  Define mpz_set_str.i : mpz_set_str.gmpz_set_str = GetFunction(GMPLibrary, "__gmpz_set_str")
  Define mpz_swap.i : mpz_swap.gmpz_swap = GetFunction(GMPLibrary, "__gmpz_swap")
  Define mpz_get_str.i : mpz_get_str.gmpz_get_str = GetFunction(GMPLibrary, "__gmpz_get_str")
  Define mpz_add.i : mpz_add.gmpz_add = GetFunction(GMPLibrary, "__gmpz_add")
  Define mpz_sub.i : mpz_sub.gmpz_sub = GetFunction(GMPLibrary, "__gmpz_sub")
  Define mpz_mul.i : mpz_mul.gmpz_mul = GetFunction(GMPLibrary, "__gmpz_mul")
  Define mpz_addmul.i : mpz_addmul.gmpz_addmul = GetFunction(GMPLibrary, "__gmpz_addmul")
  Define mpz_submul.i : mpz_submul.gmpz_submul = GetFunction(GMPLibrary, "__gmpz_submul")
  Define mpz_mul_2exp.i : mpz_mul_2exp.gmpz_mul_2exp = GetFunction(GMPLibrary, "__gmpz_mul_2exp")
  Define mpz_neg.i : mpz_neg.gmpz_neg = GetFunction(GMPLibrary, "__gmpz_neg")
  Define mpz_abs.i : mpz_abs.gmpz_abs = GetFunction(GMPLibrary, "__gmpz_abs")
  Define mpz_cdiv_q.i : mpz_cdiv_q.gmpz_cdiv_q = GetFunction(GMPLibrary, "__gmpz_cdiv_q")
  Define mpz_cdiv_r.i : mpz_cdiv_r.gmpz_cdiv_r = GetFunction(GMPLibrary, "__gmpz_cdiv_r")
  Define mpz_cdiv_qr.i : mpz_cdiv_qr.gmpz_cdiv_qr = GetFunction(GMPLibrary, "__gmpz_cdiv_qr")
  Define mpz_fdiv_q.i : mpz_fdiv_q.gmpz_fdiv_q = GetFunction(GMPLibrary, "__gmpz_cdiv_q")
  Define mpz_fdiv_r.i : mpz_fdiv_r.gmpz_fdiv_r = GetFunction(GMPLibrary, "__gmpz_cdiv_r")
  Define mpz_fdiv_qr.i : mpz_fdiv_qr.gmpz_fdiv_qr = GetFunction(GMPLibrary, "__gmpz_cdiv_qr")
  Define mpz_tdiv_q.i : mpz_tdiv_q.gmpz_tdiv_q = GetFunction(GMPLibrary, "__gmpz_cdiv_q")
  Define mpz_tdiv_r.i : mpz_tdiv_r.gmpz_tdiv_r = GetFunction(GMPLibrary, "__gmpz_cdiv_r")
  Define mpz_tdiv_qr.i : mpz_tdiv_qr.gmpz_tdiv_qr = GetFunction(GMPLibrary, "__gmpz_cdiv_qr")
  Define mpz_pow_ui.i : mpz_pow_ui.gmpz_pow_ui = GetFunction(GMPLibrary, "__gmpz_pow_ui")
  Define mpz_root.i : mpz_root.gmpz_root = GetFunction(GMPLibrary, "__gmpz_root")
  Define mpz_sqrt.i : mpz_sqrt.gmpz_sqrt = GetFunction(GMPLibrary, "__gmpz_sqrt")
  Define mpz_mod.i : mpz_mod.gmpz_mod = GetFunction(GMPLibrary, "__gmpz_mod")
  Define mpz_divexact.i : mpz_divexact.gmpz_divexact = GetFunction(GMPLibrary, "__gmpz_divexact")
  Define mpz_fac_ui.i : mpz_fac_ui.gmpz_fac_ui = GetFunction(GMPLibrary, "__gmpz_fac_ui")
  Define mpz_cmp.i : mpz_cmp.gmpz_cmp = GetFunction(GMPLibrary, "__gmpz_cmp")
  Define mpz_cmpabs.i : mpz_cmpabs.gmpz_cmpabs = GetFunction(GMPLibrary, "__gmpz_cmpabs")
  Define gmp_snprintfz.i : gmp_snprintfz.gmp_snprintfz = GetFunction(GMPLibrary, "__gmp_snprintf")
  Define mpz_clear.i : mpz_clear.gmpz_clear = GetFunction(GMPLibrary, "__gmpz_clear")
  Define mpf_init.i : mpf_init.gmpf_init = GetFunction(GMPLibrary, "__gmpf_init")
  Define mpf_init2.i : mpf_init2.gmpf_init2 = GetFunction(GMPLibrary, "__gmpf_init2")
  Define mpf_get_prec.i : mpf_get_prec.gmpf_get_prec = GetFunction(GMPLibrary, "__gmpf_get_prec")
  Define mpf_set_str.i : mpf_set_str.gmpf_set_str = GetFunction(GMPLibrary, "__gmpf_set_str")
  Define mpf_swap.i : mpf_swap.gmpf_swap = GetFunction(GMPLibrary, "__gmpf_swap")
  Define mpf_add.i : mpf_add.gmpf_add = GetFunction(GMPLibrary, "__gmpf_add")
  Define mpf_sub.i : mpf_sub.gmpf_sub = GetFunction(GMPLibrary, "__gmpf_sub")
  Define mpf_mul.i : mpf_mul.gmpf_mul = GetFunction(GMPLibrary, "__gmpf_mul")  
  Define mpf_div.i : mpf_div.gmpf_div = GetFunction(GMPLibrary, "__gmpf_div")  
  Define mpf_sqrt.i : mpf_sqrt.gmpf_sqrt = GetFunction(GMPLibrary, "__gmpf_sqrt")
  Define mpf_pow_ui.i : mpf_pow_ui.gmpf_pow_ui = GetFunction(GMPLibrary, "__gmpf_pow_ui")
  Define mpf_neg.i : mpf_neg.gmpf_neg = GetFunction(GMPLibrary, "__gmpf_neg")
  Define mpf_abs.i : mpf_abs.gmpf_abs = GetFunction(GMPLibrary, "__gmpf_abs")  
  Define mpf_clear.i : mpf_clear.gmpf_clear = GetFunction(GMPLibrary, "__gmpf_clear")
  Define gmp_snprintff.i : gmp_snprintff.gmp_snprintff = GetFunction(GMPLibrary, "__gmp_snprintf")
  Define gmp_snprintfq.i : gmp_snprintfq.gmp_snprintfq = GetFunction(GMPLibrary, "__gmp_snprintf")
  Define gmp_version.i : gmp_version.gmp_version = GetFunction(GMPLibrary, "__gmp_version")
Else
  Debug "GMP library ERROR!"
  End
EndIf

Debug "Testing integers" + #CRLF$ + "------------------------------------------------------------------------------"

Define i.mpz, j.mpz, k.mpz, l.mpz, String.s

String = Space(8192)

mpz_init(@i)
mpz_init(@j)
mpz_init(@k)
mpz_init(@l)

mpz_set_str(@i, "1844674407370955161441615590737044764481", 10)
mpz_set_str(@j, "4161559073704476448118446744073709551614", 10)

mpz_get_str(@String, 16, @i)
Debug "DEC to HEX" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_get_str(@String, 2, @j)
Debug "DEC to BIN" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_add(@k, @i, @j)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "ADD" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_sub(@k, @i, @j)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "SUB" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_mul(@k, @i, @j)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "MUL" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_set_str(@k, "1", 10)
mpz_addmul(@k, @i, @j)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "ADDMUL" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_set_str(@k, "0", 10)
mpz_set_str(@i, "-2", 10)
mpz_set_str(@j, "4", 10)
mpz_submul(@k, @i, @j)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "MUL_2EXP" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_neg(@k, @k)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "NEG" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_abs(@k, @k)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "ABS" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_set_str(@k, "0", 10)
mpz_set_str(@l, "0", 10)
mpz_set_str(@i, "10", 10)
mpz_set_str(@j, "4", 10)
mpz_cdiv_qr(@k, @l, @i, @j)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "DIV - quotient" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)
gmp_snprintfz(@String, 512, "%Zd", @l)
Debug "DIV - remainder" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_set_str(@k, "0", 10)
mpz_set_str(@i, "10", 10)
mpz_set_str(@j, "7", 10)
mpz_mod(@k, @i, @j)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "MOD" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_set_str(@k, "0", 10)
mpz_set_str(@i, "1844674407370955161441615590737044764481", 10)
mpz_set_str(@j, "4161559073704476448118446744073709551614", 10)
mpz_addmul(@k, @i, @j)
mpz_divexact(@k, @k, @j)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "DIVEXACT" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_set_str(@k, "0", 10)
mpz_set_str(@i, "1844674407370955161441615590737044764481", 10)
mpz_pow_ui(@k, @i, 63)
gmp_snprintfz(@String, 4096, "%Zd", @k)
Debug "POW" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_sqrt(@k, @i)
gmp_snprintfz(@String, 512, "%Zd", @k)
Debug "SQRT" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_fac_ui(@k, 2000)
gmp_snprintfz(@String, 8192, "%Zd", @k)
Debug "2000!" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpz_clear(@k)
mpz_clear(@j)
mpz_clear(@i)

Debug "Testing floats" + #CRLF$ + "------------------------------------------------------------------------------"

Define n.mpf, m.mpf, o.mpf

mpf_init2(@n, 512)
mpf_init2(@m, 512)
mpf_init2(@o, 512)

Debug mpf_get_prec(@n)

mpf_set_str(@n, "2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274", 10)
mpf_set_str(@m, "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679", 10)

mpf_add(@o, @m, @n)
gmp_snprintff(@String, 512, "%.100Fg", @o)
Debug "ADD" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpf_sub(@o, @m, @n)
gmp_snprintff(@String, 512, "%.100Fg", @o)
Debug "SUB" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpf_neg(@o, @o)
gmp_snprintff(@String, 512, "%.100Fg", @o)
Debug "NEG" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpf_abs(@o, @o)
gmp_snprintff(@String, 512, "%.100Fg", @o)
Debug "ABS" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpf_div(@o, @m, @n)
gmp_snprintff(@String, 512, "%.100Fg", @o)
Debug "DIV" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpf_mul(@o, @m, @n)
gmp_snprintff(@String, 512, "%.100Fg", @o)
Debug "MUL" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpf_set_str(@o, "2", 10)
mpf_sqrt(@o, @o)
gmp_snprintff(@String, 512, "%.100Fg", @o)
Debug "SQR" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpf_pow_ui(@o, @m, 2)
gmp_snprintff(@String, 512, "%.100Fg", @o)
Debug "POW" + #CRLF$ + PeekS(@String,-1,#PB_Ascii)

mpf_clear(@n)
mpf_clear(@m)
mpf_clear(@o) 

End
This seems to work with ascii/unicode but I've made all this in 10 minutes so no guarantees, also tested only on x86: I see a lot of .i in your code, don't know if some of them will need to be changed to make it work on x64 or if there are alignment issues :wink:
"Have you tried turning it off and on again ?"
A little PureBasic review
davido
Addict
Addict
Posts: 1890
Joined: Fri Nov 09, 2012 11:04 pm
Location: Uttoxeter, UK

Re: GMP 6.0 + PB5.31 + Windows x86/x64

Post by davido »

@bbanelli,
Thank you for sharing :D

@luis,
Pretty impressive 10 minutes work! :D
Looks Ok on Windows7-64 and PureBasic 5.31-64 Unicode.
DE AA EB
User avatar
bbanelli
Enthusiast
Enthusiast
Posts: 543
Joined: Tue May 28, 2013 10:51 pm
Location: Europe
Contact:

Re: GMP 6.0 + PB5.31 + Windows x86/x64

Post by bbanelli »

luis wrote:Thank you

I don't have time right now to check all the things you mentioned (and even less so to build the library from source), and what I'm about to say could be wrong since it's coming from making deductions by just looking at the code above and I didn't check the original documentation with original the C prototypes / structures etc.
Well, to be frank, I was kinda hopping for some guru like you or some other guys with tons of experience to show up and take a look!

Thanks for that!
1) Shouldn't be PrototypeC everywhere ?
It seems it does, after all. Apparently, --enable-cxx flag during configure should imply C++ support in GMP can be enabled with ‘--enable-cxx’, in which case a C++ compiler will be required.

Does that mean that regardless of having C or C++ compiled DLL, PrototypeC is always required?
2) Are you sure about the threadsafe executable requirement ? I don't see why it should be needed.
No, I didn't express myself - it is not needed, but only thread safe.
3) AFAIK pseudotypes have no effect when using pointers
That made sense but I was quite desperate so I tried everything. :D
4) If the library internally works with ascii, I suppose you will have to read the results as ascii with peeks
This one obviously does, but with your fix, it works great now! :)
5) I've changed some prototypes to reflect all this, and the calling code
Thank you once again for that. I will import all functions now and will try to (re)build GMP with some other options to see if it will work better now and than post again here!
This seems to work with ascii/unicode but I've made all this in 10 minutes so no guarantees, also tested only on x86: I see a lot of .i in your code, don't know if some of them will need to be changed to make it work on x64 or if there are alignment issues :wink:
As far as I can see, not so far. There are some special considerations regarding integers/long in GMP documentation that I will refer to later, but so far, so good.

Luis, thank you once again for your kind help, I sure hope that once I add some additional functions in PB code and optimize/check GMP DLL's this will be very useful addition to PB!
davido wrote:@bbanelli,
Thank you for sharing :D

@luis,
Pretty impressive 10 minutes work! :D
Looks Ok on Windows7-64 and PureBasic 5.31-64 Unicode.
davido wrote:
davido wrote:@bbanelli,
Thank you for sharing :D
;)
@luis,
Pretty impressive 10 minutes work! :D
That was my first impression to. :D
"If you lie to the compiler, it will get its revenge."
Henry Spencer
https://www.pci-z.com/
User avatar
luis
Addict
Addict
Posts: 3876
Joined: Wed Aug 31, 2005 11:09 pm
Location: Italy

Re: GMP 6.0 + PB5.31 + Windows x86/x64

Post by luis »

bbanelli wrote: It seems it does, after all. Apparently, --enable-cxx flag during configure should imply C++ support in GMP can be enabled with ‘--enable-cxx’, in which case a C++ compiler will be required.

Does that mean that regardless of having C or C++ compiled DLL, PrototypeC is always required?
I looked on GMP website, the --enable-cxx is suggested if you want to use the library from C++.
With that flag specified an *additional* C++ library is created to be used as an interface to a C++ program, it's just an object oriented wrapper for the flat C api. So the library you need to use is still a C library (requiring ProcedureC).
I think you can remove the flag to avoid building a wrapper you don't use anyway.
No, I didn't express myself - it is not needed, but only thread safe.
Sorry, I misunderstood. You were talking about the library being built as threadsafe, but threadsafe was enabled in your PB file inside the zip, and that led me further astray :)
"Have you tried turning it off and on again ?"
A little PureBasic review
User avatar
bbanelli
Enthusiast
Enthusiast
Posts: 543
Joined: Tue May 28, 2013 10:51 pm
Location: Europe
Contact:

Re: GMP 6.0 + PB5.31 + Windows x86/x64

Post by bbanelli »

luis wrote:I looked on GMP website, the --enable-cxx is suggested if you want to use the library from C++.
With that flag specified an *additional* C++ library is created to be used as an interface to a C++ program, it's just an object oriented wrapper for the flat C api. So the library you need to use is still a C library (requiring ProcedureC).
I think you can remove the flag to avoid building a wrapper you don't use anyway.
Oh, I see.

I will have to rebuild it anyway so I'll omit the flag.
Sorry, I misunderstood. You were talking about the library being built as threadsafe, but threadsafe was enabled in your PB file inside the zip, and that led me further astray :)
Sorry about that, I didn't formulate it well, as said.

In any case, I will update first post with all your code changes and am currently trying to rebuild everything efficiently in cygwin so hopefully, one lib to rule them all in both x86 and x64 world. :)

Thanks for all your comments, suggestions and help once again! :)
"If you lie to the compiler, it will get its revenge."
Henry Spencer
https://www.pci-z.com/
jack
Addict
Addict
Posts: 1336
Joined: Fri Apr 25, 2003 11:10 pm

Re: GMP 6.0 + PB5.31 + Windows x86/x64

Post by jack »

hello bbanelli. on my system compiling GMP would not pass the tests when compiling whith the fat option, but without that option it passed OK.
User avatar
bbanelli
Enthusiast
Enthusiast
Posts: 543
Joined: Tue May 28, 2013 10:51 pm
Location: Europe
Contact:

Re: GMP 6.0 + PB5.31 + Windows x86/x64

Post by bbanelli »

jack wrote:hello bbanelli. on my system compiling GMP would not pass the tests when compiling whith the fat option, but without that option it passed OK.
Yes, I removed --enable-fat option and disabled ASM altogether.

Although it will probably provide much poorer performance in general, it can be used as viable proof of concept; if anyone is up to going through ordeal of compiling GMP for Windows, one can always make his/her own DLL and optimize it accordingly. :)
"If you lie to the compiler, it will get its revenge."
Henry Spencer
https://www.pci-z.com/
jack
Addict
Addict
Posts: 1336
Joined: Fri Apr 25, 2003 11:10 pm

Re: GMP 6.0 + PB5.31 + Windows x86/x64

Post by jack »

hello bbanelli,
I took a look at the GMP manual and started to translate the functions declarations to PB.
User avatar
bbanelli
Enthusiast
Enthusiast
Posts: 543
Joined: Tue May 28, 2013 10:51 pm
Location: Europe
Contact:

Re: GMP 6.0 + PB5.31 + Windows x86/x64

Post by bbanelli »

jack wrote:hello bbanelli,
I took a look at the GMP manual and started to translate the functions declarations to PB.
Would you like to add them to original post? It would be fantastic if you could take cover of rational and FP functions; than we could easily add up all functions to bunch. I have added almost all integer ones, just testing them so I should update first post within 24 hours.
"If you lie to the compiler, it will get its revenge."
Henry Spencer
https://www.pci-z.com/
jack
Addict
Addict
Posts: 1336
Joined: Fri Apr 25, 2003 11:10 pm

Re: GMP 6.0 + PB5.31 + Windows x86/x64

Post by jack »

hello bbanelli, right now it's a celebration weekend for me, but will do what I can.
User avatar
bbanelli
Enthusiast
Enthusiast
Posts: 543
Joined: Tue May 28, 2013 10:51 pm
Location: Europe
Contact:

Re: [PB5.31] GMP 6.0.0a

Post by bbanelli »

First of all, happy new 2015. to all!

Thanks to jack and luis, GMP 6.0.0a is (probably) fully supported on all current PureBasic 5.31 (and current LTS version) platforms. :)

Enjoy!

With my best,

Bruno
"If you lie to the compiler, it will get its revenge."
Henry Spencer
https://www.pci-z.com/
davido
Addict
Addict
Posts: 1890
Joined: Fri Nov 09, 2012 11:04 pm
Location: Uttoxeter, UK

Re: [PB5.31] GMP 6.0.0a

Post by davido »

@bbanelli,
Thank you very much for a very nice New Years present. :D
Great job, particularly making it run on all platforms. And in such a short time!

I took the liberty of adding the following lines to "GMP-Test.pb" to enable it run on Mac:

Code: Select all

CompilerIf #PB_Compiler_OS = #PB_OS_Windows And #PB_Compiler_Processor = #PB_Processor_x86
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp-10.dll")
CompilerElseIf #PB_Compiler_OS = #PB_OS_Windows And #PB_Compiler_Processor = #PB_Processor_x64
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp-10x64.dll")
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux And #PB_Compiler_Processor = #PB_Processor_x86
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp.so.10.2.0")
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux And #PB_Compiler_Processor = #PB_Processor_x64
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp.so.10.2.x64.0")
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS And #PB_Compiler_Processor = #PB_Processor_x86
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp.10.dylib")
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS And #PB_Compiler_Processor = #PB_Processor_x64
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp.10.x64.dylib")
CompilerElse
  MessageRequester("Fatal error", "Unsupported OS/CPU.")
CompilerEndIf
DE AA EB
User avatar
bbanelli
Enthusiast
Enthusiast
Posts: 543
Joined: Tue May 28, 2013 10:51 pm
Location: Europe
Contact:

Re: [PB5.31] GMP 6.0.0a

Post by bbanelli »

davido wrote:@bbanelli,
Thank you very much for a very nice New Years present. :D
Great job, particularly making it run on all platforms. And in such a short time!
It would be impossible without help of jack and luis! But I think we did a great job. :)
I took the liberty of adding the following lines to "GMP-Test.pb" to enable it run on Mac:

Code: Select all

CompilerIf #PB_Compiler_OS = #PB_OS_Windows And #PB_Compiler_Processor = #PB_Processor_x86
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp-10.dll")
CompilerElseIf #PB_Compiler_OS = #PB_OS_Windows And #PB_Compiler_Processor = #PB_Processor_x64
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp-10x64.dll")
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux And #PB_Compiler_Processor = #PB_Processor_x86
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp.so.10.2.0")
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux And #PB_Compiler_Processor = #PB_Processor_x64
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp.so.10.2.x64.0")
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS And #PB_Compiler_Processor = #PB_Processor_x86
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp.10.dylib")
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS And #PB_Compiler_Processor = #PB_Processor_x64
  GMPLibrary = OpenLibrary(#PB_Any, "libgmp.10.x64.dylib")
CompilerElse
  MessageRequester("Fatal error", "Unsupported OS/CPU.")
CompilerEndIf
Strange, it should work out of the box with "./" in GMP.pbi if all files are in same folder, that is...

Image

I've reuploaded that GMP.pbi once again, perhaps I've forgotten to refresh them yesterday, sorry. :(
"If you lie to the compiler, it will get its revenge."
Henry Spencer
https://www.pci-z.com/
davido
Addict
Addict
Posts: 1890
Joined: Fri Nov 09, 2012 11:04 pm
Location: Uttoxeter, UK

Re: [PB5.31] GMP 6.0.0a

Post by davido »

@bbanelli
Got the correct version of GMP.pbi, now. :)
Thank you.
DE AA EB
Post Reply