[BACK]Return to gmp.h CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp

Annotation of OpenXM_contrib/gmp/gmp.h, Revision 1.1.1.2

1.1       maekawa     1: /* gmp.h -- Definitions for GNU multiple precision functions.
                      2:
1.1.1.2 ! maekawa     3: Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1999, 2000 Free Software
        !             4: Foundation, Inc.
1.1       maekawa     5:
                      6: This file is part of the GNU MP Library.
                      7:
                      8: The GNU MP Library is free software; you can redistribute it and/or modify
1.1.1.2 ! maekawa     9: it under the terms of the GNU Lesser General Public License as published by
        !            10: the Free Software Foundation; either version 2.1 of the License, or (at your
1.1       maekawa    11: option) any later version.
                     12:
                     13: The GNU MP Library is distributed in the hope that it will be useful, but
                     14: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
1.1.1.2 ! maekawa    15: or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
1.1       maekawa    16: License for more details.
                     17:
1.1.1.2 ! maekawa    18: You should have received a copy of the GNU Lesser General Public License
1.1       maekawa    19: along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
                     20: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
                     21: MA 02111-1307, USA. */
                     22:
                     23: #ifndef __GMP_H__
                     24:
1.1.1.2 ! maekawa    25: #ifndef __GNU_MP__             /* to allow inclusion of both gmp.h and mp.h */
1.1       maekawa    26: #define __GNU_MP__ 2
                     27: #define __need_size_t
                     28: #include <stddef.h>
                     29: #undef __need_size_t
                     30:
1.1.1.2 ! maekawa    31: #if defined (__mips) && defined (_ABIN32)
        !            32: /* Force the use of 64-bit limbs for all 64-bit MIPS CPUs if ABI permits.  */
        !            33: #define _LONG_LONG_LIMB
        !            34: #endif
        !            35:
        !            36: #if (__STDC__-0) || defined (__cplusplus)
1.1       maekawa    37: #define __gmp_const const
1.1.1.2 ! maekawa    38: #define __gmp_signed signed
1.1       maekawa    39: #else
                     40: #define __gmp_const
1.1.1.2 ! maekawa    41: #define __gmp_signed
1.1       maekawa    42: #endif
                     43:
                     44: #if defined (__GNUC__)
                     45: #define __gmp_inline __inline__
                     46: #else
                     47: #define __gmp_inline
                     48: #endif
                     49:
                     50: #ifndef _EXTERN_INLINE
                     51: #ifdef __GNUC__
                     52: #define _EXTERN_INLINE extern __inline__
                     53: #else
                     54: #define _EXTERN_INLINE static
                     55: #endif
                     56: #endif
                     57:
                     58: #ifdef _SHORT_LIMB
                     59: typedef unsigned int           mp_limb_t;
                     60: typedef int                    mp_limb_signed_t;
                     61: #else
                     62: #ifdef _LONG_LONG_LIMB
                     63: typedef unsigned long long int mp_limb_t;
                     64: typedef long long int          mp_limb_signed_t;
                     65: #else
                     66: typedef unsigned long int      mp_limb_t;
                     67: typedef long int               mp_limb_signed_t;
                     68: #endif
                     69: #endif
                     70:
                     71: typedef mp_limb_t *            mp_ptr;
                     72: typedef __gmp_const mp_limb_t *        mp_srcptr;
1.1.1.2 ! maekawa    73: #if defined (_CRAY) && ! defined (_CRAYMPP)
        !            74: /* plain `int' is much faster (48 bits) */
        !            75: typedef int                    mp_size_t;
        !            76: typedef int                    mp_exp_t;
        !            77: #else
1.1       maekawa    78: typedef long int               mp_size_t;
                     79: typedef long int               mp_exp_t;
1.1.1.2 ! maekawa    80: #endif
1.1       maekawa    81:
                     82: typedef struct
                     83: {
                     84:   int _mp_alloc;               /* Number of *limbs* allocated and pointed
1.1.1.2 ! maekawa    85:                                   to by the _mp_d field.  */
        !            86:   int _mp_size;                        /* abs(_mp_size) is the number of limbs the
        !            87:                                   last field points to.  If _mp_size is
        !            88:                                   negative this is a negative number.  */
1.1       maekawa    89:   mp_limb_t *_mp_d;            /* Pointer to the limbs.  */
                     90: } __mpz_struct;
                     91: #endif /* __GNU_MP__ */
                     92:
                     93: typedef __mpz_struct MP_INT;
                     94: typedef __mpz_struct mpz_t[1];
                     95:
                     96: typedef struct
                     97: {
                     98:   __mpz_struct _mp_num;
                     99:   __mpz_struct _mp_den;
                    100: } __mpq_struct;
                    101:
                    102: typedef __mpq_struct MP_RAT;
                    103: typedef __mpq_struct mpq_t[1];
                    104:
                    105: typedef struct
                    106: {
                    107:   int _mp_prec;                        /* Max precision, in number of `mp_limb_t's.
                    108:                                   Set by mpf_init and modified by
1.1.1.2 ! maekawa   109:                                   mpf_set_prec.  The area pointed to by the
        !           110:                                   _mp_d field contains `prec' + 1 limbs.  */
        !           111:   int _mp_size;                        /* abs(_mp_size) is the number of limbs the
        !           112:                                   last field points to.  If _mp_size is
        !           113:                                   negative this is a negative number.  */
1.1       maekawa   114:   mp_exp_t _mp_exp;            /* Exponent, in the base of `mp_limb_t'.  */
                    115:   mp_limb_t *_mp_d;            /* Pointer to the limbs.  */
                    116: } __mpf_struct;
                    117:
                    118: /* typedef __mpf_struct MP_FLOAT; */
                    119: typedef __mpf_struct mpf_t[1];
                    120:
1.1.1.2 ! maekawa   121: /* Available random number generation algorithms.  */
        !           122: typedef enum
        !           123: {
        !           124:   GMP_RAND_ALG_DEFAULT = 0,
        !           125:   GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT /* Linear congruential.  */
        !           126: } gmp_randalg_t;
        !           127:
        !           128: /* Linear congruential data struct.  */
        !           129: typedef struct {
        !           130:   mpz_t a;                     /* Multiplier. */
        !           131:   unsigned long int c;         /* Adder. */
        !           132:   mpz_t m;                     /* Modulus (valid only if m2exp == 0).  */
        !           133:   unsigned long int m2exp;     /* If != 0, modulus is 2 ^ m2exp.  */
        !           134: } __gmp_randata_lc;
        !           135:
        !           136: /* Random state struct.  */
        !           137: typedef struct
        !           138: {
        !           139:   mpz_t seed;                  /* Current seed.  */
        !           140:   gmp_randalg_t alg;           /* Algorithm used.  */
        !           141:   union {                      /* Algorithm specific data.  */
        !           142:     __gmp_randata_lc *lc;      /* Linear congruential.  */
        !           143:   } algdata;
        !           144: } __gmp_randstate_struct;
        !           145: typedef __gmp_randstate_struct gmp_randstate_t[1];
        !           146:
1.1       maekawa   147: /* Types for function declarations in gmp files.  */
                    148: /* ??? Should not pollute user name space with these ??? */
                    149: typedef __gmp_const __mpz_struct *mpz_srcptr;
                    150: typedef __mpz_struct *mpz_ptr;
                    151: typedef __gmp_const __mpf_struct *mpf_srcptr;
                    152: typedef __mpf_struct *mpf_ptr;
                    153: typedef __gmp_const __mpq_struct *mpq_srcptr;
                    154: typedef __mpq_struct *mpq_ptr;
                    155:
                    156: #ifndef _PROTO
1.1.1.2 ! maekawa   157: #if (__STDC__-0) || defined (__cplusplus)
1.1       maekawa   158: #define _PROTO(x) x
                    159: #else
                    160: #define _PROTO(x) ()
                    161: #endif
                    162: #endif
                    163:
                    164: #ifndef __MPN
1.1.1.2 ! maekawa   165: /* Really use `defined (__STDC__)' here; we want it to be true for Sun C */
1.1       maekawa   166: #if defined (__STDC__) || defined (__cplusplus)
1.1.1.2 ! maekawa   167: #define __MPN(x) __gmpn_##x
1.1       maekawa   168: #else
1.1.1.2 ! maekawa   169: #define __MPN(x) __gmpn_/**/x
1.1       maekawa   170: #endif
                    171: #endif
                    172:
                    173: #if defined (FILE) || defined (H_STDIO) || defined (_H_STDIO) \
                    174:  || defined (_STDIO_H) || defined (_STDIO_H_) || defined (__STDIO_H__) \
1.1.1.2 ! maekawa   175:  || defined (_STDIO_INCLUDED) || defined (__dj_include_stdio_h_)
1.1       maekawa   176: #define _GMP_H_HAVE_FILE 1
                    177: #endif
                    178:
1.1.1.2 ! maekawa   179: #if defined (__cplusplus)
        !           180: extern "C" {
        !           181: #endif
        !           182:
        !           183: #define mp_set_memory_functions __gmp_set_memory_functions
1.1       maekawa   184: void mp_set_memory_functions _PROTO ((void *(*) (size_t),
                    185:                                      void *(*) (void *, size_t, size_t),
                    186:                                      void (*) (void *, size_t)));
1.1.1.2 ! maekawa   187:
        !           188: #define mp_bits_per_limb __gmp_bits_per_limb
1.1       maekawa   189: extern __gmp_const int mp_bits_per_limb;
                    190:
1.1.1.2 ! maekawa   191: #if defined (__cplusplus)
        !           192: }
        !           193: #endif
        !           194:
        !           195:
        !           196: /**************** Random number routines.  ****************/
        !           197:
        !           198: #define _gmp_rand __gmp_rand
        !           199: #define gmp_randinit __gmp_randinit
        !           200: #define gmp_randinit_lc __gmp_randinit_lc
        !           201: #define gmp_randinit_lc_2exp __gmp_randinit_lc_2exp
        !           202: #define gmp_randseed __gmp_randseed
        !           203: #define gmp_randseed_ui __gmp_randseed_ui
        !           204: #define gmp_randclear __gmp_randclear
        !           205:
        !           206: #if defined (__cplusplus)
        !           207: extern "C" {
        !           208: #endif
        !           209:
        !           210: void _gmp_rand _PROTO ((mp_ptr, gmp_randstate_t, unsigned long int));
        !           211: void gmp_randinit _PROTO ((gmp_randstate_t, gmp_randalg_t, ...));
        !           212: void gmp_randinit_lc _PROTO ((gmp_randstate_t, mpz_t, unsigned long int,
        !           213:                              mpz_t));
        !           214: void gmp_randinit_lc_2exp _PROTO ((gmp_randstate_t, mpz_t, unsigned long int,
        !           215:                                   unsigned long int));
        !           216: void gmp_randseed _PROTO ((gmp_randstate_t, mpz_t));
        !           217: void gmp_randseed_ui _PROTO ((gmp_randstate_t, unsigned long int));
        !           218: void gmp_randclear _PROTO ((gmp_randstate_t));
        !           219:
        !           220: #if defined (__cplusplus)
        !           221: }
        !           222: #endif
        !           223:
1.1       maekawa   224: /**************** Integer (i.e. Z) routines.  ****************/
                    225:
1.1.1.2 ! maekawa   226: #define _mpz_realloc __gmpz_realloc
        !           227: #define mpz_realloc __gmpz_realloc
        !           228: #define mpz_abs __gmpz_abs
        !           229: #define mpz_add __gmpz_add
        !           230: #define mpz_add_ui __gmpz_add_ui
        !           231: #define mpz_addmul_ui __gmpz_addmul_ui
        !           232: #define mpz_and __gmpz_and
        !           233: #define mpz_array_init __gmpz_array_init
        !           234: #define mpz_bin_ui __gmpz_bin_ui
        !           235: #define mpz_bin_uiui __gmpz_bin_uiui
        !           236: #define mpz_cdiv_q __gmpz_cdiv_q
        !           237: #define mpz_cdiv_q_ui __gmpz_cdiv_q_ui
        !           238: #define mpz_cdiv_qr __gmpz_cdiv_qr
        !           239: #define mpz_cdiv_qr_ui __gmpz_cdiv_qr_ui
        !           240: #define mpz_cdiv_r __gmpz_cdiv_r
        !           241: #define mpz_cdiv_r_ui __gmpz_cdiv_r_ui
        !           242: #define mpz_cdiv_ui __gmpz_cdiv_ui
        !           243: #define mpz_clear __gmpz_clear
        !           244: #define mpz_clrbit __gmpz_clrbit
        !           245: #define mpz_cmp __gmpz_cmp
        !           246: #define _mpz_cmp_si __gmpz_cmp_si
        !           247: #define _mpz_cmp_ui __gmpz_cmp_ui
        !           248: #define mpz_cmpabs __gmpz_cmpabs
        !           249: #define mpz_cmpabs_ui __gmpz_cmpabs_ui
        !           250: #define mpz_com __gmpz_com
        !           251: #define mpz_divexact __gmpz_divexact
        !           252: #define mpz_dump __gmpz_dump
        !           253: #define mpz_fac_ui __gmpz_fac_ui
        !           254: #define mpz_fdiv_q __gmpz_fdiv_q
        !           255: #define mpz_fdiv_q_2exp __gmpz_fdiv_q_2exp
        !           256: #define mpz_fdiv_q_ui __gmpz_fdiv_q_ui
        !           257: #define mpz_fdiv_qr __gmpz_fdiv_qr
        !           258: #define mpz_fdiv_qr_ui __gmpz_fdiv_qr_ui
        !           259: #define mpz_fdiv_r __gmpz_fdiv_r
        !           260: #define mpz_fdiv_r_2exp __gmpz_fdiv_r_2exp
        !           261: #define mpz_fdiv_r_ui __gmpz_fdiv_r_ui
        !           262: #define mpz_fdiv_ui __gmpz_fdiv_ui
        !           263: #define mpz_fib_ui __gmpz_fib_ui
        !           264: #define mpz_fits_sint_p __gmpz_fits_sint_p
        !           265: #define mpz_fits_slong_p __gmpz_fits_slong_p
        !           266: #define mpz_fits_sshort_p __gmpz_fits_sshort_p
        !           267: #define mpz_fits_uint_p __gmpz_fits_uint_p
        !           268: #define mpz_fits_ulong_p __gmpz_fits_ulong_p
        !           269: #define mpz_fits_ushort_p __gmpz_fits_ushort_p
        !           270: #define mpz_gcd __gmpz_gcd
        !           271: #define mpz_gcd_ui __gmpz_gcd_ui
        !           272: #define mpz_gcdext __gmpz_gcdext
        !           273: #define mpz_get_d __gmpz_get_d
        !           274: #define mpz_get_si __gmpz_get_si
        !           275: #define mpz_get_str __gmpz_get_str
        !           276: #define mpz_get_ui __gmpz_get_ui
        !           277: #define mpz_getlimbn __gmpz_getlimbn
        !           278: #define mpz_hamdist __gmpz_hamdist
        !           279: #define mpz_init __gmpz_init
        !           280: #define mpz_inp_binary __gmpz_inp_binary
        !           281: #define mpz_inp_raw __gmpz_inp_raw
        !           282: #define mpz_inp_str __gmpz_inp_str
        !           283: #define mpz_init_set __gmpz_init_set
        !           284: #define mpz_init_set_d __gmpz_init_set_d
        !           285: #define mpz_init_set_si __gmpz_init_set_si
        !           286: #define mpz_init_set_str __gmpz_init_set_str
        !           287: #define mpz_init_set_ui __gmpz_init_set_ui
        !           288: #define mpz_invert __gmpz_invert
        !           289: #define mpz_ior __gmpz_ior
        !           290: #define mpz_jacobi __gmpz_jacobi
        !           291: #define mpz_lcm __gmpz_lcm
        !           292: #define mpz_legendre __gmpz_legendre
        !           293: #define mpz_mod __gmpz_mod
        !           294: #define mpz_mul __gmpz_mul
        !           295: #define mpz_mul_2exp __gmpz_mul_2exp
        !           296: #define mpz_neg __gmpz_neg
        !           297: #define mpz_nextprime __gmpz_nextprime
        !           298: #define mpz_out_binary __gmpz_out_binary
        !           299: #define mpz_out_raw __gmpz_out_raw
        !           300: #define mpz_out_str __gmpz_out_str
        !           301: #define mpz_perfect_power_p __gmpz_perfect_power_p
        !           302: #define mpz_perfect_square_p __gmpz_perfect_square_p
        !           303: #define mpz_popcount __gmpz_popcount
        !           304: #define mpz_pow_ui __gmpz_pow_ui
        !           305: #define mpz_powm __gmpz_powm
        !           306: #define mpz_powm_ui __gmpz_powm_ui
        !           307: #define mpz_probab_prime_p __gmpz_probab_prime_p
        !           308: #define mpz_random __gmpz_random
        !           309: #define mpz_random2 __gmpz_random2
        !           310: #define mpz_remove __gmpz_remove
        !           311: #define mpz_root __gmpz_root
        !           312: #define mpz_rrandomb __gmpz_rrandomb
        !           313: #define mpz_scan0 __gmpz_scan0
        !           314: #define mpz_scan1 __gmpz_scan1
        !           315: #define mpz_set __gmpz_set
        !           316: #define mpz_set_d __gmpz_set_d
        !           317: #define mpz_set_f __gmpz_set_f
        !           318: #define mpz_set_q __gmpz_set_q
        !           319: #define mpz_set_si __gmpz_set_si
        !           320: #define mpz_set_str __gmpz_set_str
        !           321: #define mpz_set_ui __gmpz_set_ui
        !           322: #define mpz_setbit __gmpz_setbit
        !           323: #define mpz_size __gmpz_size
        !           324: #define mpz_sizeinbase __gmpz_sizeinbase
        !           325: #define mpz_sqrt __gmpz_sqrt
        !           326: #define mpz_sqrtrem __gmpz_sqrtrem
        !           327: #define mpz_sub __gmpz_sub
        !           328: #define mpz_sub_ui __gmpz_sub_ui
        !           329: #define mpz_swap __gmpz_swap
        !           330: #define mpz_tdiv_ui __gmpz_tdiv_ui
        !           331: #define mpz_tdiv_q __gmpz_tdiv_q
        !           332: #define mpz_tdiv_q_2exp __gmpz_tdiv_q_2exp
        !           333: #define mpz_tdiv_q_ui __gmpz_tdiv_q_ui
        !           334: #define mpz_tdiv_qr __gmpz_tdiv_qr
        !           335: #define mpz_tdiv_qr_ui __gmpz_tdiv_qr_ui
        !           336: #define mpz_tdiv_r __gmpz_tdiv_r
        !           337: #define mpz_tdiv_r_2exp __gmpz_tdiv_r_2exp
        !           338: #define mpz_tdiv_r_ui __gmpz_tdiv_r_ui
        !           339: #define mpz_tstbit __gmpz_tstbit
        !           340: #define mpz_ui_pow_ui __gmpz_ui_pow_ui
        !           341: #define mpz_urandomb __gmpz_urandomb
        !           342: #define mpz_urandomm __gmpz_urandomm
        !           343: #define mpz_xor __gmpz_xor
        !           344: #define mpz_eor __gmpz_xor
        !           345:
1.1       maekawa   346: #if defined (__cplusplus)
                    347: extern "C" {
                    348: #endif
                    349: void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t));
                    350:
                    351: void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr));
                    352: void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    353: void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
1.1.1.2 ! maekawa   354: void mpz_addmul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
1.1       maekawa   355: void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    356: void mpz_array_init _PROTO ((mpz_ptr, mp_size_t, mp_size_t));
1.1.1.2 ! maekawa   357: void mpz_bin_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
        !           358: void mpz_bin_uiui _PROTO ((mpz_ptr, unsigned long int, unsigned long int));
1.1       maekawa   359: void mpz_cdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    360: unsigned long int mpz_cdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    361: void mpz_cdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
                    362: unsigned long int mpz_cdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
                    363: void mpz_cdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    364: unsigned long int mpz_cdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    365: unsigned long int mpz_cdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
                    366: void mpz_clear _PROTO ((mpz_ptr));
                    367: void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int));
                    368: int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr));
1.1.1.2 ! maekawa   369: int _mpz_cmp_si _PROTO ((mpz_srcptr, signed long int));
        !           370: int _mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int));
        !           371: int mpz_cmpabs _PROTO ((mpz_srcptr, mpz_srcptr));
        !           372: int mpz_cmpabs_ui _PROTO ((mpz_srcptr, unsigned long int));
1.1       maekawa   373: void mpz_com _PROTO ((mpz_ptr, mpz_srcptr));
                    374: void mpz_divexact _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
1.1.1.2 ! maekawa   375: void mpz_dump _PROTO ((mpz_srcptr));
1.1       maekawa   376: void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int));
                    377: void mpz_fdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    378: void mpz_fdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    379: unsigned long int mpz_fdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    380: void mpz_fdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
                    381: unsigned long int mpz_fdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
                    382: void mpz_fdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    383: void mpz_fdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    384: unsigned long int mpz_fdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    385: unsigned long int mpz_fdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
1.1.1.2 ! maekawa   386: void mpz_fib_ui _PROTO ((mpz_ptr, unsigned long int));
        !           387: int mpz_fits_sint_p _PROTO ((mpz_srcptr));
        !           388: int mpz_fits_slong_p _PROTO ((mpz_srcptr));
        !           389: int mpz_fits_sshort_p _PROTO ((mpz_srcptr));
        !           390: int mpz_fits_uint_p _PROTO ((mpz_srcptr));
        !           391: int mpz_fits_ulong_p _PROTO ((mpz_srcptr));
        !           392: int mpz_fits_ushort_p _PROTO ((mpz_srcptr));
1.1       maekawa   393: void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    394: unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    395: void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
                    396: double mpz_get_d _PROTO ((mpz_srcptr));
                    397: /* signed */ long int mpz_get_si _PROTO ((mpz_srcptr));
                    398: char *mpz_get_str _PROTO ((char *, int, mpz_srcptr));
                    399: unsigned long int mpz_get_ui _PROTO ((mpz_srcptr));
                    400: mp_limb_t mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t));
                    401: unsigned long int mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr));
                    402: void mpz_init _PROTO ((mpz_ptr));
                    403: #ifdef _GMP_H_HAVE_FILE
                    404: size_t mpz_inp_binary _PROTO ((mpz_ptr, FILE *));
                    405: size_t mpz_inp_raw _PROTO ((mpz_ptr, FILE *));
                    406: size_t mpz_inp_str _PROTO ((mpz_ptr, FILE *, int));
                    407: #endif
                    408: void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr));
                    409: void mpz_init_set_d _PROTO ((mpz_ptr, double));
                    410: void mpz_init_set_si _PROTO ((mpz_ptr, signed long int));
1.1.1.2 ! maekawa   411: int mpz_init_set_str _PROTO ((mpz_ptr, __gmp_const char *, int));
1.1       maekawa   412: void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int));
                    413: int mpz_invert _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    414: void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    415: int mpz_jacobi _PROTO ((mpz_srcptr, mpz_srcptr));
1.1.1.2 ! maekawa   416:
        !           417: #define mpz_kronecker_si __gmpz_kronecker_si
        !           418: int mpz_kronecker_si _PROTO ((mpz_srcptr, long));
        !           419:
        !           420: #define mpz_kronecker_ui __gmpz_kronecker_ui
        !           421: int mpz_kronecker_ui _PROTO ((mpz_srcptr, unsigned long));
        !           422:
        !           423: #define mpz_si_kronecker __gmpz_si_kronecker
        !           424: int mpz_si_kronecker _PROTO ((long, mpz_srcptr));
        !           425:
        !           426: #define mpz_ui_kronecker __gmpz_ui_kronecker
        !           427: int mpz_ui_kronecker _PROTO ((unsigned long, mpz_srcptr));
        !           428:
        !           429: void mpz_lcm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
1.1       maekawa   430: int mpz_legendre _PROTO ((mpz_srcptr, mpz_srcptr));
                    431: void mpz_mod _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    432: void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    433: void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
1.1.1.2 ! maekawa   434:
        !           435: #define mpz_mul_si __gmpz_mul_si
        !           436: void mpz_mul_si _PROTO ((mpz_ptr, mpz_srcptr, long int));
        !           437:
        !           438: #define mpz_mul_ui __gmpz_mul_ui
1.1       maekawa   439: void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
1.1.1.2 ! maekawa   440:
1.1       maekawa   441: void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr));
1.1.1.2 ! maekawa   442: void mpz_nextprime _PROTO ((mpz_ptr, mpz_srcptr));
1.1       maekawa   443: #ifdef _GMP_H_HAVE_FILE
                    444: size_t mpz_out_binary _PROTO ((FILE *, mpz_srcptr));
                    445: size_t mpz_out_raw _PROTO ((FILE *, mpz_srcptr));
                    446: size_t mpz_out_str _PROTO ((FILE *, int, mpz_srcptr));
                    447: #endif
1.1.1.2 ! maekawa   448: int mpz_perfect_power_p _PROTO ((mpz_srcptr));
1.1       maekawa   449: int mpz_perfect_square_p _PROTO ((mpz_srcptr));
                    450: unsigned long int mpz_popcount _PROTO ((mpz_srcptr));
                    451: void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    452: void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr));
                    453: void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr));
                    454: int mpz_probab_prime_p _PROTO ((mpz_srcptr, int));
                    455: void mpz_random _PROTO ((mpz_ptr, mp_size_t));
                    456: void mpz_random2 _PROTO ((mpz_ptr, mp_size_t));
1.1.1.2 ! maekawa   457: unsigned long int mpz_remove _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
        !           458: int mpz_root _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
        !           459: void mpz_rrandomb _PROTO ((mpz_ptr, gmp_randstate_t, unsigned long int));
1.1       maekawa   460: unsigned long int mpz_scan0 _PROTO ((mpz_srcptr, unsigned long int));
                    461: unsigned long int mpz_scan1 _PROTO ((mpz_srcptr, unsigned long int));
                    462: void mpz_set _PROTO ((mpz_ptr, mpz_srcptr));
                    463: void mpz_set_d _PROTO ((mpz_ptr, double));
                    464: void mpz_set_f _PROTO ((mpz_ptr, mpf_srcptr));
                    465: void mpz_set_q _PROTO ((mpz_ptr, mpq_srcptr));
                    466: void mpz_set_si _PROTO ((mpz_ptr, signed long int));
1.1.1.2 ! maekawa   467: int mpz_set_str _PROTO ((mpz_ptr, __gmp_const char *, int));
1.1       maekawa   468: void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int));
                    469: void mpz_setbit _PROTO ((mpz_ptr, unsigned long int));
                    470: size_t mpz_size _PROTO ((mpz_srcptr));
                    471: size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int));
                    472: void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr));
                    473: void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr));
                    474: void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    475: void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
1.1.1.2 ! maekawa   476: void mpz_swap _PROTO ((mpz_ptr, mpz_ptr));
1.1       maekawa   477: void mpz_tdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    478: void mpz_tdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
1.1.1.2 ! maekawa   479: unsigned long int mpz_tdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
        !           480: unsigned long int mpz_tdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
1.1       maekawa   481: void mpz_tdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
1.1.1.2 ! maekawa   482: unsigned long int mpz_tdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
1.1       maekawa   483: void mpz_tdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
                    484: void mpz_tdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
1.1.1.2 ! maekawa   485: unsigned long int mpz_tdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
        !           486: int mpz_tstbit _PROTO ((mpz_srcptr, unsigned long int));
1.1       maekawa   487: void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int));
1.1.1.2 ! maekawa   488: void mpz_urandomb _PROTO ((mpz_t, gmp_randstate_t, unsigned long int));
        !           489: void mpz_urandomm _PROTO ((mpz_t, gmp_randstate_t, mpz_t));
        !           490: void mpz_xor _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
        !           491: #if defined (__cplusplus)
        !           492: }
        !           493: #endif
1.1       maekawa   494:
                    495: /**************** Rational (i.e. Q) routines.  ****************/
                    496:
1.1.1.2 ! maekawa   497: #define mpq_init __gmpq_init
        !           498: #define mpq_clear __gmpq_clear
        !           499: #define mpq_set __gmpq_set
        !           500: #define mpq_set_ui __gmpq_set_ui
        !           501: #define mpq_set_si __gmpq_set_si
        !           502: #define mpq_set_z __gmpq_set_z
        !           503: #define mpq_add __gmpq_add
        !           504: #define mpq_sub __gmpq_sub
        !           505: #define mpq_mul __gmpq_mul
        !           506: #define mpq_div __gmpq_div
        !           507: #define mpq_neg __gmpq_neg
        !           508: #define mpq_cmp __gmpq_cmp
        !           509: #define _mpq_cmp_ui __gmpq_cmp_ui
        !           510: #define mpq_equal __gmpq_equal
        !           511: #define mpq_inv __gmpq_inv
        !           512: #define mpq_set_num __gmpq_set_num
        !           513: #define mpq_set_den __gmpq_set_den
        !           514: #define mpq_get_num __gmpq_get_num
        !           515: #define mpq_get_den __gmpq_get_den
        !           516: #define mpq_get_d __gmpq_get_d
        !           517: #define mpq_set_d __gmpq_set_d
        !           518: #define mpq_canonicalize __gmpq_canonicalize
        !           519:
        !           520: #if defined (__cplusplus)
        !           521: extern "C" {
        !           522: #endif
1.1       maekawa   523: void mpq_init _PROTO ((mpq_ptr));
                    524: void mpq_clear _PROTO ((mpq_ptr));
                    525: void mpq_set _PROTO ((mpq_ptr, mpq_srcptr));
                    526: void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int));
                    527: void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int));
                    528: void mpq_set_z _PROTO ((mpq_ptr, mpz_srcptr));
                    529: void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
                    530: void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
                    531: void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
                    532: void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
                    533: void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr));
                    534: int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr));
1.1.1.2 ! maekawa   535: int _mpq_cmp_ui _PROTO ((mpq_srcptr, unsigned long int, unsigned long int));
1.1       maekawa   536: int mpq_equal _PROTO ((mpq_srcptr, mpq_srcptr));
                    537: void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr));
                    538: void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr));
                    539: void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr));
                    540: void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr));
                    541: void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr));
                    542: double mpq_get_d _PROTO ((mpq_srcptr));
1.1.1.2 ! maekawa   543: void mpq_set_d _PROTO ((mpq_ptr, double));
1.1       maekawa   544: void mpq_canonicalize _PROTO ((mpq_ptr));
                    545:
1.1.1.2 ! maekawa   546: #define mpq_swap __gmpq_swap
        !           547: void mpq_swap _PROTO ((mpq_ptr, mpq_ptr));
        !           548:
        !           549: #ifdef _GMP_H_HAVE_FILE
        !           550: #define mpq_out_str __gmpq_out_str
        !           551: size_t mpq_out_str _PROTO ((FILE *, int, mpq_srcptr));
        !           552: #endif
        !           553:
        !           554: #if defined (__cplusplus)
        !           555: }
        !           556: #endif
        !           557:
1.1       maekawa   558: /**************** Float (i.e. F) routines.  ****************/
                    559:
1.1.1.2 ! maekawa   560: #define mpf_abs __gmpf_abs
        !           561: #define mpf_add __gmpf_add
        !           562: #define mpf_add_ui __gmpf_add_ui
        !           563: #define mpf_ceil __gmpf_ceil
        !           564: #define mpf_clear __gmpf_clear
        !           565: #define mpf_cmp __gmpf_cmp
        !           566: #define mpf_cmp_si __gmpf_cmp_si
        !           567: #define mpf_cmp_ui __gmpf_cmp_ui
        !           568: #define mpf_div __gmpf_div
        !           569: #define mpf_div_2exp __gmpf_div_2exp
        !           570: #define mpf_div_ui __gmpf_div_ui
        !           571: #define mpf_dump __gmpf_dump
        !           572: #define mpf_floor __gmpf_floor
        !           573: #define mpf_eq __gmpf_eq
        !           574: #define mpf_get_d __gmpf_get_d
        !           575: #define mpf_get_prec __gmpf_get_prec
        !           576: #define mpf_get_str __gmpf_get_str
        !           577: #define mpf_init __gmpf_init
        !           578: #define mpf_init2 __gmpf_init2
        !           579: #define mpf_inp_str __gmpf_inp_str
        !           580: #define mpf_init_set __gmpf_init_set
        !           581: #define mpf_init_set_d __gmpf_init_set_d
        !           582: #define mpf_init_set_si __gmpf_init_set_si
        !           583: #define mpf_init_set_str __gmpf_init_set_str
        !           584: #define mpf_init_set_ui __gmpf_init_set_ui
        !           585: #define mpf_mul __gmpf_mul
        !           586: #define mpf_mul_2exp __gmpf_mul_2exp
        !           587: #define mpf_mul_ui __gmpf_mul_ui
        !           588: #define mpf_neg __gmpf_neg
        !           589: #define mpf_out_str __gmpf_out_str
        !           590: #define mpf_pow_ui __gmpf_pow_ui
        !           591: #define mpf_random2 __gmpf_random2
        !           592: #define mpf_reldiff __gmpf_reldiff
        !           593: #define mpf_set __gmpf_set
        !           594: #define mpf_set_d __gmpf_set_d
        !           595: #define mpf_set_default_prec __gmpf_set_default_prec
        !           596: #define mpf_set_prec __gmpf_set_prec
        !           597: #define mpf_set_prec_raw __gmpf_set_prec_raw
        !           598: #define mpf_set_q __gmpf_set_q
        !           599: #define mpf_set_si __gmpf_set_si
        !           600: #define mpf_set_str __gmpf_set_str
        !           601: #define mpf_set_ui __gmpf_set_ui
        !           602: #define mpf_set_z __gmpf_set_z
        !           603: #define mpf_size __gmpf_size
        !           604: #define mpf_sqrt __gmpf_sqrt
        !           605: #define mpf_sqrt_ui __gmpf_sqrt_ui
        !           606: #define mpf_sub __gmpf_sub
        !           607: #define mpf_sub_ui __gmpf_sub_ui
        !           608: #define mpf_trunc __gmpf_trunc
        !           609: #define mpf_ui_div __gmpf_ui_div
        !           610: #define mpf_ui_sub __gmpf_ui_sub
        !           611: #define mpf_urandomb __gmpf_urandomb
        !           612:
        !           613: #if defined (__cplusplus)
        !           614: extern "C" {
        !           615: #endif
1.1       maekawa   616: void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr));
                    617: void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
                    618: void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
1.1.1.2 ! maekawa   619: void mpf_ceil _PROTO ((mpf_ptr, mpf_srcptr));
1.1       maekawa   620: void mpf_clear _PROTO ((mpf_ptr));
                    621: int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr));
                    622: int mpf_cmp_si _PROTO ((mpf_srcptr, signed long int));
                    623: int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int));
                    624: void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
                    625: void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
                    626: void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
                    627: void mpf_dump _PROTO ((mpf_srcptr));
                    628: int mpf_eq _PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int));
1.1.1.2 ! maekawa   629: void mpf_floor _PROTO ((mpf_ptr, mpf_srcptr));
1.1       maekawa   630: double mpf_get_d _PROTO ((mpf_srcptr));
                    631: unsigned long int mpf_get_prec _PROTO ((mpf_srcptr));
                    632: char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr));
                    633: void mpf_init _PROTO ((mpf_ptr));
                    634: void mpf_init2 _PROTO ((mpf_ptr, unsigned long int));
                    635: #ifdef _GMP_H_HAVE_FILE
                    636: size_t mpf_inp_str _PROTO ((mpf_ptr, FILE *, int));
                    637: #endif
                    638: void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr));
                    639: void mpf_init_set_d _PROTO ((mpf_ptr, double));
                    640: void mpf_init_set_si _PROTO ((mpf_ptr, signed long int));
1.1.1.2 ! maekawa   641: int mpf_init_set_str _PROTO ((mpf_ptr, __gmp_const char *, int));
1.1       maekawa   642: void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int));
                    643: void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
                    644: void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
                    645: void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
                    646: void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr));
                    647: #ifdef _GMP_H_HAVE_FILE
                    648: size_t mpf_out_str _PROTO ((FILE *, int, size_t, mpf_srcptr));
                    649: #endif
1.1.1.2 ! maekawa   650: void mpf_pow_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
1.1       maekawa   651: void mpf_random2 _PROTO ((mpf_ptr, mp_size_t, mp_exp_t));
                    652: void mpf_reldiff _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
                    653: void mpf_set _PROTO ((mpf_ptr, mpf_srcptr));
                    654: void mpf_set_d _PROTO ((mpf_ptr, double));
                    655: void mpf_set_default_prec _PROTO ((unsigned long int));
                    656: void mpf_set_prec _PROTO ((mpf_ptr, unsigned long int));
                    657: void mpf_set_prec_raw _PROTO ((mpf_ptr, unsigned long int));
                    658: void mpf_set_q _PROTO ((mpf_ptr, mpq_srcptr));
                    659: void mpf_set_si _PROTO ((mpf_ptr, signed long int));
1.1.1.2 ! maekawa   660: int mpf_set_str _PROTO ((mpf_ptr, __gmp_const char *, int));
1.1       maekawa   661: void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int));
                    662: void mpf_set_z _PROTO ((mpf_ptr, mpz_srcptr));
                    663: size_t mpf_size _PROTO ((mpf_srcptr));
                    664: void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr));
                    665: void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int));
                    666: void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
                    667: void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
1.1.1.2 ! maekawa   668: void mpf_trunc _PROTO ((mpf_ptr, mpf_srcptr));
1.1       maekawa   669: void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
                    670: void mpf_ui_sub _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
1.1.1.2 ! maekawa   671: void mpf_urandomb _PROTO ((mpf_t, gmp_randstate_t, unsigned long int));
        !           672:
        !           673: #define mpf_swap __gmpf_swap
        !           674: void mpf_swap _PROTO ((mpf_ptr, mpf_ptr));
        !           675:
1.1       maekawa   676: #if defined (__cplusplus)
                    677: }
                    678: #endif
                    679: /************ Low level positive-integer (i.e. N) routines.  ************/
                    680:
1.1.1.2 ! maekawa   681: /* This is ugly, but we need to make user calls reach the prefixed function. */
1.1       maekawa   682: #define mpn_add                        __MPN(add)
                    683: #define mpn_add_1              __MPN(add_1)
                    684: #define mpn_add_n              __MPN(add_n)
1.1.1.2 ! maekawa   685: #define mpn_add_nc             __MPN(add_nc)
1.1       maekawa   686: #define mpn_addmul_1           __MPN(addmul_1)
1.1.1.2 ! maekawa   687: #define mpn_addsub_n           __MPN(addsub_n)
        !           688: #define mpn_addsub_nc          __MPN(addsub_nc)
        !           689: /* #define mpn_and_n           __MPN(and_n) */
        !           690: /* #define mpn_andn_n          __MPN(andn_n) */
1.1       maekawa   691: #define mpn_bdivmod            __MPN(bdivmod)
                    692: #define mpn_cmp                        __MPN(cmp)
1.1.1.2 ! maekawa   693: /* #define mpn_com_n           __MPN(com_n) */
        !           694: #define mpn_copyd              __MPN(copyd)
        !           695: #define mpn_copyi              __MPN(copyi)
1.1       maekawa   696: #define mpn_divrem             __MPN(divrem)
                    697: #define mpn_divrem_1           __MPN(divrem_1)
1.1.1.2 ! maekawa   698: #define mpn_divrem_2           __MPN(divrem_2)
1.1       maekawa   699: #define mpn_dump               __MPN(dump)
                    700: #define mpn_gcd                        __MPN(gcd)
                    701: #define mpn_gcd_1              __MPN(gcd_1)
                    702: #define mpn_gcdext             __MPN(gcdext)
                    703: #define mpn_get_str            __MPN(get_str)
                    704: #define mpn_hamdist            __MPN(hamdist)
1.1.1.2 ! maekawa   705: #define mpn_invert_limb        __MPN(invert_limb)
        !           706: /* #define mpn_ior_n           __MPN(ior_n) */
        !           707: /* #define mpn_iorn_n          __MPN(iorn_n) */
        !           708: /* #define mpn_kara_mul_n      __MPN(kara_mul_n)  internal */
        !           709: /* #define mpn_kara_sqr_n      __MPN(kara_sqr_n)  internal */
1.1       maekawa   710: #define mpn_lshift             __MPN(lshift)
1.1.1.2 ! maekawa   711: #define mpn_lshiftc            __MPN(lshiftc)
1.1       maekawa   712: #define mpn_mod_1              __MPN(mod_1)
                    713: #define mpn_mul                        __MPN(mul)
                    714: #define mpn_mul_1              __MPN(mul_1)
1.1.1.2 ! maekawa   715: #define mpn_mul_basecase       __MPN(mul_basecase)
1.1       maekawa   716: #define mpn_mul_n              __MPN(mul_n)
                    717: #define mpn_perfect_square_p   __MPN(perfect_square_p)
                    718: #define mpn_popcount           __MPN(popcount)
                    719: #define mpn_preinv_mod_1       __MPN(preinv_mod_1)
1.1.1.2 ! maekawa   720: /* #define mpn_nand_n          __MPN(nand_n) */
        !           721: /* #define mpn_nior_n          __MPN(nior_n) */
        !           722: #define mpn_random             __MPN(random)
1.1       maekawa   723: #define mpn_random2            __MPN(random2)
                    724: #define mpn_rshift             __MPN(rshift)
1.1.1.2 ! maekawa   725: #define mpn_rshiftc            __MPN(rshiftc)
1.1       maekawa   726: #define mpn_scan0              __MPN(scan0)
                    727: #define mpn_scan1              __MPN(scan1)
                    728: #define mpn_set_str            __MPN(set_str)
1.1.1.2 ! maekawa   729: #define mpn_sqr_basecase       __MPN(sqr_basecase)
        !           730: #define mpn_sqr_n              __MPN(sqr_n)
1.1       maekawa   731: #define mpn_sqrtrem            __MPN(sqrtrem)
                    732: #define mpn_sub                        __MPN(sub)
                    733: #define mpn_sub_1              __MPN(sub_1)
                    734: #define mpn_sub_n              __MPN(sub_n)
1.1.1.2 ! maekawa   735: #define mpn_sub_nc             __MPN(sub_nc)
1.1       maekawa   736: #define mpn_submul_1           __MPN(submul_1)
1.1.1.2 ! maekawa   737: /* #define mpn_toom3_mul_n             __MPN(toom3_mul_n)  internal */
        !           738: /* #define mpn_toom3_sqr_n             __MPN(toom3_sqr_n)  internal */
        !           739: /* #define mpn_xnor_n          __MPN(xnor_n) */
        !           740: /* #define mpn_xor_n           __MPN(xor_n) */
1.1       maekawa   741:
                    742: #if defined (__cplusplus)
                    743: extern "C" {
                    744: #endif
                    745: mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
                    746: mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
                    747: mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
1.1.1.2 ! maekawa   748: mp_limb_t mpn_add_nc _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t));
        !           749:
1.1       maekawa   750: mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
1.1.1.2 ! maekawa   751:
        !           752: #define mpn_addmul_1c  __MPN(addmul_1c)
        !           753: mp_limb_t mpn_addmul_1c _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t));
        !           754:
        !           755: mp_limb_t mpn_addsub_n _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
1.1       maekawa   756: mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int));
                    757: int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
1.1.1.2 ! maekawa   758:
        !           759: #define mpn_divexact_by3(dst, src, size)  mpn_divexact_by3c (dst, src, size, 0)
        !           760:
        !           761: #define mpn_divexact_by3c  __MPN(divexact_by3c)
        !           762: mp_limb_t mpn_divexact_by3c _PROTO ((mp_ptr dst, mp_srcptr src,
        !           763:                                      mp_size_t size, mp_limb_t carry));
        !           764:
        !           765: #define mpn_divmod_1(qp,np,nsize,dlimb) mpn_divrem_1 (qp,0,np,nsize,dlimb)
        !           766:
        !           767: mp_limb_t mpn_divrem _PROTO((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t));
        !           768:
1.1       maekawa   769: mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t));
1.1.1.2 ! maekawa   770:
        !           771: #define mpn_divrem_1c  __MPN(divrem_1c)
        !           772: mp_limb_t mpn_divrem_1c _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t,
        !           773:                                  mp_limb_t, mp_limb_t));
        !           774:
        !           775: mp_limb_t mpn_divrem_2 _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr));
1.1       maekawa   776: void mpn_dump _PROTO ((mp_srcptr, mp_size_t));
                    777: mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
                    778: mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
1.1.1.2 ! maekawa   779: mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
1.1       maekawa   780: size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t));
                    781: unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
1.1.1.2 ! maekawa   782:
        !           783: #define mpn_jacobi_base __MPN(jacobi_base)
        !           784: int mpn_jacobi_base _PROTO ((mp_limb_t a, mp_limb_t b, int result_bit1));
        !           785:
1.1       maekawa   786: mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
                    787: mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
1.1.1.2 ! maekawa   788:
        !           789: #define mpn_mod_1c  __MPN(mod_1c)
        !           790: mp_limb_t mpn_mod_1c _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t));
        !           791:
        !           792: #define mpn_mod_1_rshift __MPN(mod_1_rshift)
        !           793: mp_limb_t mpn_mod_1_rshift _PROTO ((mp_srcptr, mp_size_t, unsigned,mp_limb_t));
        !           794:
1.1       maekawa   795: mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t));
                    796: mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
1.1.1.2 ! maekawa   797:
        !           798: #define mpn_mul_1c  __MPN(mul_1c)
        !           799: mp_limb_t mpn_mul_1c _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t));
        !           800:
        !           801: void mpn_mul_basecase _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t));
1.1       maekawa   802: void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
                    803: int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t));
                    804: unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t));
                    805: mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t));
1.1.1.2 ! maekawa   806: void mpn_random _PROTO ((mp_ptr, mp_size_t));
1.1       maekawa   807: void mpn_random2 _PROTO ((mp_ptr, mp_size_t));
                    808: mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
                    809: unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int));
                    810: unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int));
1.1.1.2 ! maekawa   811: mp_size_t mpn_set_str _PROTO ((mp_ptr, __gmp_const unsigned char *, size_t, int));
        !           812: void mpn_sqr_n _PROTO ((mp_ptr, mp_srcptr, mp_size_t));
        !           813: void mpn_sqr_basecase _PROTO ((mp_ptr, mp_srcptr, mp_size_t));
1.1       maekawa   814: mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t));
                    815: mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
                    816: mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
                    817: mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
1.1.1.2 ! maekawa   818: mp_limb_t mpn_sub_nc _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t));
1.1       maekawa   819: mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
1.1.1.2 ! maekawa   820:
        !           821: #define mpn_submul_1c  __MPN(submul_1c)
        !           822: mp_limb_t mpn_submul_1c _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t));
        !           823:
1.1       maekawa   824: #if defined (__cplusplus)
                    825: }
                    826: #endif
                    827:
1.1.1.2 ! maekawa   828: #define mpn_incr_u(p,incr) \
        !           829:   do { mp_limb_t __x; mp_ptr __p = p;                  \
        !           830:     __x = *__p + incr;                                 \
        !           831:     *__p = __x;                                                \
        !           832:     if (__x < incr)                                    \
        !           833:       while (++(*(++__p)) == 0)                                \
        !           834:         ;                                              \
        !           835:   } while (0)
        !           836:
        !           837: #define mpn_decr_u(p,incr) \
        !           838:   do { mp_limb_t __x; mp_ptr __p = p;                  \
        !           839:     __x = *__p;                                                \
        !           840:     *__p = __x - incr;                                 \
        !           841:     if (__x < incr)                                    \
        !           842:       while ((*(++__p))-- == 0)                                \
        !           843:         ;                                              \
        !           844:   } while (0)
        !           845:
1.1       maekawa   846: #if defined (__GNUC__) || defined (_FORCE_INLINES)
                    847: _EXTERN_INLINE mp_limb_t
1.1.1.2 ! maekawa   848: #if (__STDC__-0) || defined (__cplusplus)
1.1       maekawa   849: mpn_add_1 (register mp_ptr res_ptr,
                    850:           register mp_srcptr s1_ptr,
                    851:           register mp_size_t s1_size,
                    852:           register mp_limb_t s2_limb)
                    853: #else
                    854: mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb)
                    855:      register mp_ptr res_ptr;
                    856:      register mp_srcptr s1_ptr;
                    857:      register mp_size_t s1_size;
                    858:      register mp_limb_t s2_limb;
                    859: #endif
                    860: {
                    861:   register mp_limb_t x;
                    862:
                    863:   x = *s1_ptr++;
                    864:   s2_limb = x + s2_limb;
                    865:   *res_ptr++ = s2_limb;
                    866:   if (s2_limb < x)
                    867:     {
                    868:       while (--s1_size != 0)
                    869:        {
                    870:          x = *s1_ptr++ + 1;
                    871:          *res_ptr++ = x;
                    872:          if (x != 0)
                    873:            goto fin;
                    874:        }
                    875:
                    876:       return 1;
                    877:     }
                    878:
                    879:  fin:
                    880:   if (res_ptr != s1_ptr)
                    881:     {
                    882:       mp_size_t i;
                    883:       for (i = 0; i < s1_size - 1; i++)
                    884:        res_ptr[i] = s1_ptr[i];
                    885:     }
                    886:   return 0;
                    887: }
                    888:
                    889: _EXTERN_INLINE mp_limb_t
1.1.1.2 ! maekawa   890: #if (__STDC__-0) || defined (__cplusplus)
1.1       maekawa   891: mpn_add (register mp_ptr res_ptr,
                    892:         register mp_srcptr s1_ptr,
                    893:         register mp_size_t s1_size,
                    894:         register mp_srcptr s2_ptr,
                    895:         register mp_size_t s2_size)
                    896: #else
                    897: mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
                    898:      register mp_ptr res_ptr;
                    899:      register mp_srcptr s1_ptr;
                    900:      register mp_size_t s1_size;
                    901:      register mp_srcptr s2_ptr;
                    902:      register mp_size_t s2_size;
                    903: #endif
                    904: {
                    905:   mp_limb_t cy_limb = 0;
                    906:
                    907:   if (s2_size != 0)
                    908:     cy_limb = mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size);
                    909:
                    910:   if (s1_size - s2_size != 0)
                    911:     cy_limb = mpn_add_1 (res_ptr + s2_size,
                    912:                         s1_ptr + s2_size,
                    913:                         s1_size - s2_size,
                    914:                         cy_limb);
                    915:   return cy_limb;
                    916: }
                    917:
                    918: _EXTERN_INLINE mp_limb_t
1.1.1.2 ! maekawa   919: #if (__STDC__-0) || defined (__cplusplus)
1.1       maekawa   920: mpn_sub_1 (register mp_ptr res_ptr,
                    921:           register mp_srcptr s1_ptr,
                    922:           register mp_size_t s1_size,
                    923:           register mp_limb_t s2_limb)
                    924: #else
                    925: mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb)
                    926:      register mp_ptr res_ptr;
                    927:      register mp_srcptr s1_ptr;
                    928:      register mp_size_t s1_size;
                    929:      register mp_limb_t s2_limb;
                    930: #endif
                    931: {
                    932:   register mp_limb_t x;
                    933:
                    934:   x = *s1_ptr++;
                    935:   s2_limb = x - s2_limb;
                    936:   *res_ptr++ = s2_limb;
                    937:   if (s2_limb > x)
                    938:     {
                    939:       while (--s1_size != 0)
                    940:        {
                    941:          x = *s1_ptr++;
                    942:          *res_ptr++ = x - 1;
                    943:          if (x != 0)
                    944:            goto fin;
                    945:        }
                    946:
                    947:       return 1;
                    948:     }
                    949:
                    950:  fin:
                    951:   if (res_ptr != s1_ptr)
                    952:     {
                    953:       mp_size_t i;
                    954:       for (i = 0; i < s1_size - 1; i++)
                    955:        res_ptr[i] = s1_ptr[i];
                    956:     }
                    957:   return 0;
                    958: }
                    959:
                    960: _EXTERN_INLINE mp_limb_t
1.1.1.2 ! maekawa   961: #if (__STDC__-0) || defined (__cplusplus)
1.1       maekawa   962: mpn_sub (register mp_ptr res_ptr,
                    963:         register mp_srcptr s1_ptr,
                    964:         register mp_size_t s1_size,
                    965:         register mp_srcptr s2_ptr,
                    966:         register mp_size_t s2_size)
                    967: #else
                    968: mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
                    969:      register mp_ptr res_ptr;
                    970:      register mp_srcptr s1_ptr;
                    971:      register mp_size_t s1_size;
                    972:      register mp_srcptr s2_ptr;
                    973:      register mp_size_t s2_size;
                    974: #endif
                    975: {
                    976:   mp_limb_t cy_limb = 0;
                    977:
                    978:   if (s2_size != 0)
                    979:     cy_limb = mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size);
                    980:
                    981:   if (s1_size - s2_size != 0)
                    982:     cy_limb = mpn_sub_1 (res_ptr + s2_size,
                    983:                         s1_ptr + s2_size,
                    984:                         s1_size - s2_size,
                    985:                         cy_limb);
                    986:   return cy_limb;
                    987: }
                    988: #endif /* __GNUC__ */
                    989:
                    990: /* Allow faster testing for negative, zero, and positive.  */
                    991: #define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0)
                    992: #define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0)
                    993: #define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0)
                    994:
                    995: /* When using GCC, optimize certain common comparisons.  */
                    996: #if defined (__GNUC__)
                    997: #define mpz_cmp_ui(Z,UI) \
                    998:   (__builtin_constant_p (UI) && (UI) == 0                              \
1.1.1.2 ! maekawa   999:    ? mpz_sgn (Z) : _mpz_cmp_ui (Z,UI))
        !          1000: #define mpz_cmp_si(Z,SI) \
        !          1001:   (__builtin_constant_p (SI) && (SI) == 0 ? mpz_sgn (Z)                        \
        !          1002:    : __builtin_constant_p (SI) && (SI) > 0                             \
        !          1003:     ? _mpz_cmp_ui (Z, (unsigned long int) SI)                          \
        !          1004:    : _mpz_cmp_si (Z,SI))
1.1       maekawa  1005: #define mpq_cmp_ui(Q,NUI,DUI) \
                   1006:   (__builtin_constant_p (NUI) && (NUI) == 0                            \
1.1.1.2 ! maekawa  1007:    ? mpq_sgn (Q) : _mpq_cmp_ui (Q,NUI,DUI))
        !          1008: #else
        !          1009: #define mpz_cmp_ui(Z,UI) _mpz_cmp_ui (Z,UI)
        !          1010: #define mpz_cmp_si(Z,UI) _mpz_cmp_si (Z,UI)
        !          1011: #define mpq_cmp_ui(Q,NUI,DUI) _mpq_cmp_ui (Q,NUI,DUI)
1.1       maekawa  1012: #endif
                   1013:
1.1.1.2 ! maekawa  1014:
        !          1015: /* Using "&" rather than "&&" means these can come out branch-free.  Every
        !          1016:    mpz_t has at least one limb allocated, so fetching the low limb is always
        !          1017:    allowed.  */
        !          1018: #define mpz_odd_p(z)   ((int) ((z)->_mp_size != 0) & (int) (z)->_mp_d[0])
        !          1019: #define mpz_even_p(z)  (! mpz_odd_p (z))
        !          1020:
        !          1021:
        !          1022: /* Allow direct user access to numerator and denominator of a mpq_t object.  */
        !          1023: #define mpq_numref(Q) (&((Q)->_mp_num))
        !          1024: #define mpq_denref(Q) (&((Q)->_mp_den))
        !          1025:
        !          1026:
        !          1027: /* Compatibility with GMP 2 and earlier. */
1.1       maekawa  1028: #define mpn_divmod(qp,np,nsize,dp,dsize) mpn_divrem (qp,0,np,nsize,dp,dsize)
                   1029:
                   1030: /* Compatibility with GMP 1.  */
                   1031: #define mpz_mdiv       mpz_fdiv_q
                   1032: #define mpz_mdivmod    mpz_fdiv_qr
                   1033: #define mpz_mmod       mpz_fdiv_r
                   1034: #define mpz_mdiv_ui    mpz_fdiv_q_ui
                   1035: #define mpz_mdivmod_ui(q,r,n,d) \
                   1036:   ((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d))
                   1037: #define mpz_mmod_ui(r,n,d) \
                   1038:   ((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d))
                   1039:
                   1040: /* Useful synonyms, but not quite compatible with GMP 1.  */
                   1041: #define mpz_div                mpz_fdiv_q
                   1042: #define mpz_divmod     mpz_fdiv_qr
                   1043: #define mpz_div_ui     mpz_fdiv_q_ui
                   1044: #define mpz_divmod_ui  mpz_fdiv_qr_ui
                   1045: #define mpz_mod_ui     mpz_fdiv_r_ui
                   1046: #define mpz_div_2exp   mpz_fdiv_q_2exp
                   1047: #define mpz_mod_2exp   mpz_fdiv_r_2exp
                   1048:
1.1.1.2 ! maekawa  1049: #define gmp_errno __gmp_errno
        !          1050: extern int gmp_errno;
        !          1051:
        !          1052: enum
        !          1053: {
        !          1054:   GMP_ERROR_NONE = 0,
        !          1055:   GMP_ERROR_UNSUPPORTED_ARGUMENT = 1,
        !          1056:   GMP_ERROR_DIVISION_BY_ZERO = 2,
        !          1057:   GMP_ERROR_SQRT_OF_NEGATIVE = 4,
        !          1058:   GMP_ERROR_INVALID_ARGUMENT = 8,
        !          1059:   GMP_ERROR_ALLOCATE = 16,
        !          1060:   GMP_ERROR_BAD_STRING = 32,
        !          1061:   GMP_ERROR_UNUSED_ERROR
        !          1062: };
        !          1063:
        !          1064: /* Note: major version number is in mp.h too */
        !          1065: #define __GNU_MP_VERSION 3
        !          1066: #define __GNU_MP_VERSION_MINOR 1
        !          1067: #define __GNU_MP_VERSION_PATCHLEVEL 0
        !          1068:
        !          1069: #define gmp_version __gmp_version
        !          1070: extern __gmp_const char *gmp_version;
        !          1071:
1.1       maekawa  1072: #define __GMP_H__
                   1073: #endif /* __GMP_H__ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>