[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / runtime / gmp / gmp.h
diff --git a/ghc/runtime/gmp/gmp.h b/ghc/runtime/gmp/gmp.h
new file mode 100644 (file)
index 0000000..91ee7af
--- /dev/null
@@ -0,0 +1,302 @@
+/* gmp.h -- Definitions for GNU multiple precision functions.
+
+Copyright (C) 1991, 1993 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU MP Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#ifndef __GMP_H__
+#define __GMP_H__
+
+#define __GNU_MP__
+
+#ifndef __MP_H__
+#define __need_size_t
+#include <stddef.h>
+#endif
+
+#ifndef MINT
+#ifndef __MP_SMALL__
+typedef struct
+{
+  long int alloc;              /* Number of *limbs* allocated and pointed
+                                  to by the D field.  */
+  long int size;               /* abs(SIZE) is the number of limbs
+                                  the last field points to.  If SIZE
+                                  is negative this is a negative
+                                  number.  */
+  unsigned long int *d;                /* Pointer to the limbs.  */
+} __MP_INT;
+#else
+typedef struct
+{
+  short int alloc;             /* Number of *limbs* allocated and pointed
+                                  to by the D field.  */
+  short int size;              /* abs(SIZE) is the number of limbs
+                                  the last field points to.  If SIZE
+                                  is negative this is a negative
+                                  number.  */
+  unsigned long int *d;                /* Pointer to the limbs.  */
+} __MP_INT;
+#endif
+#endif
+
+#define MP_INT __MP_INT
+
+typedef unsigned long int      mp_limb;
+typedef long int               mp_limb_signed;
+typedef mp_limb *              mp_ptr;
+#ifdef __STDC__
+typedef const mp_limb *                mp_srcptr;
+#else
+typedef mp_limb *              mp_srcptr;
+#endif
+typedef long int               mp_size;
+
+/* Structure for rational numbers.  Zero is represented as 0/any, i.e.
+   the denominator is ignored.  Negative numbers have the sign in
+   the numerator.  */
+typedef struct
+{
+  MP_INT num;
+  MP_INT den;
+#if 0
+  long int num_alloc;          /* Number of limbs allocated
+                                  for the numerator.  */
+  long int num_size;           /* The absolute value of this field is the
+                                  length of the numerator; the sign is the
+                                  sign of the entire rational number.  */
+  mp_ptr num;                  /* Pointer to the numerator limbs.  */
+  long int den_alloc;          /* Number of limbs allocated
+                                  for the denominator.  */
+  long int den_size;           /* Length of the denominator.  (This field
+                                  should always be positive.) */
+  mp_ptr den;                  /* Pointer to the denominator limbs.  */
+#endif
+} MP_RAT;
+
+#ifdef __STDC__
+void mp_set_memory_functions (void *(*) (size_t),
+                             void *(*) (void *, size_t, size_t),
+                             void (*) (void *, size_t));
+
+/**************** Integer (i.e. Z) routines.  ****************/
+
+void mpz_init (MP_INT *);
+void mpz_set (MP_INT *, const MP_INT *);
+void mpz_set_ui (MP_INT *, unsigned long int);
+void mpz_set_si (MP_INT *, signed long int);
+int mpz_set_str (MP_INT *, const char *, int);
+void mpz_init_set (MP_INT *, const MP_INT *);
+void mpz_init_set_ui (MP_INT *, unsigned long int);
+void mpz_init_set_si (MP_INT *, signed long int);
+int mpz_init_set_str (MP_INT *, const char *, int);
+unsigned long int mpz_get_ui (const MP_INT *);
+signed long int mpz_get_si (const MP_INT *);
+char * mpz_get_str (char *, int, const MP_INT *);
+void mpz_clear (MP_INT *);
+void * _mpz_realloc (MP_INT *, mp_size);
+void mpz_add (MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_add_ui (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_sub (MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_sub_ui (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_mul (MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_mul_ui (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_div (MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_div_ui (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_mod (MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_mod_ui (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_divmod (MP_INT *, MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_divmod_ui (MP_INT *, MP_INT *, const MP_INT *, unsigned long int);
+void mpz_mdiv (MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_mdiv_ui (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_mmod (MP_INT *, const MP_INT *, const MP_INT *);
+unsigned long int mpz_mmod_ui (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_mdivmod (MP_INT *, MP_INT *, const MP_INT *, const MP_INT *);
+unsigned long int mpz_mdivmod_ui (MP_INT *, MP_INT *, const MP_INT *,
+                                 unsigned long int);
+void mpz_sqrt (MP_INT *, const MP_INT *);
+void mpz_sqrtrem (MP_INT *, MP_INT *, const MP_INT *);
+int mpz_perfect_square_p (const MP_INT *);
+int mpz_probab_prime_p (const MP_INT *, int);
+void mpz_powm (MP_INT *, const MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_powm_ui (MP_INT *, const MP_INT *, unsigned long int, const MP_INT *);
+void mpz_pow_ui (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_fac_ui (MP_INT *, unsigned long int);
+void mpz_gcd (MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_gcdext (MP_INT *, MP_INT *, MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_neg (MP_INT *, const MP_INT *);
+void mpz_com (MP_INT *, const MP_INT *);
+void mpz_abs (MP_INT *, const MP_INT *);
+int mpz_cmp (const MP_INT *, const MP_INT *);
+int mpz_cmp_ui (const MP_INT *, unsigned long int);
+int mpz_cmp_si (const MP_INT *, signed long int);
+void mpz_mul_2exp (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_div_2exp (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_mod_2exp (MP_INT *, const MP_INT *, unsigned long int);
+void mpz_and (MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_ior (MP_INT *, const MP_INT *, const MP_INT *);
+void mpz_xor (MP_INT *, const MP_INT *, const MP_INT *);
+
+#if defined (FILE) || defined (_STDIO_H) || defined (__STDIO_H__)
+void mpz_inp_raw (MP_INT *, FILE *);
+void mpz_inp_str (MP_INT *, FILE *, int);
+void mpz_out_raw (FILE *, const MP_INT *);
+void mpz_out_str (FILE *, int, const MP_INT *);
+#endif
+
+void mpz_array_init (MP_INT [], size_t, mp_size);
+void mpz_random (MP_INT *, mp_size);
+void mpz_random2 (MP_INT *, mp_size);
+size_t mpz_size (const MP_INT *);
+size_t mpz_sizeinbase (const MP_INT *, int);
+
+/**************** Rational (i.e. Q) routines.  ****************/
+
+void mpq_init (MP_RAT *);
+void mpq_clear (MP_RAT *);
+void mpq_set (MP_RAT *, const MP_RAT *);
+void mpq_set_ui (MP_RAT *, unsigned long int, unsigned long int);
+void mpq_set_si (MP_RAT *, signed long int, unsigned long int);
+void mpq_add (MP_RAT *, const MP_RAT *, const MP_RAT *);
+void mpq_sub (MP_RAT *, const MP_RAT *, const MP_RAT *);
+void mpq_mul (MP_RAT *, const MP_RAT *, const MP_RAT *);
+void mpq_div (MP_RAT *, const MP_RAT *, const MP_RAT *);
+void mpq_neg (MP_RAT *, const MP_RAT *);
+int mpq_cmp (const MP_RAT *, const MP_RAT *);
+void mpq_inv (MP_RAT *, const MP_RAT *);
+void mpq_set_num (MP_RAT *, const MP_INT *);
+void mpq_set_den (MP_RAT *, const MP_INT *);
+void mpq_get_num (MP_INT *, const MP_RAT *);
+void mpq_get_den (MP_INT *, const MP_RAT *);
+
+/************ Low level positive-integer (i.e. N) routines.  ************/
+
+mp_limb mpn_add (mp_ptr, mp_srcptr, mp_size, mp_srcptr, mp_size);
+mp_size mpn_sub (mp_ptr, mp_srcptr, mp_size, mp_srcptr, mp_size);
+mp_size mpn_mul (mp_ptr, mp_srcptr, mp_size, mp_srcptr, mp_size);
+mp_size mpn_div (mp_ptr, mp_ptr, mp_size, mp_srcptr, mp_size);
+mp_limb mpn_divmod_1 (mp_ptr, mp_srcptr, mp_size, mp_limb);
+mp_limb mpn_mod_1 (mp_srcptr, mp_size, mp_limb);
+mp_limb mpn_lshift (mp_ptr, mp_srcptr, mp_size, unsigned int);
+mp_size mpn_rshift (mp_ptr, mp_srcptr, mp_size, unsigned int);
+mp_size mpn_rshiftci (mp_ptr, mp_srcptr, mp_size, unsigned int, mp_limb);
+mp_size mpn_sqrt (mp_ptr, mp_ptr, mp_srcptr, mp_size);
+int mpn_cmp (mp_srcptr, mp_srcptr, mp_size);
+
+#else /* ! __STDC__ */
+void mp_set_memory_functions ();
+
+/**************** Integer (i.e. Z) routines.  ****************/
+
+void mpz_init ();
+void mpz_set ();
+void mpz_set_ui ();
+void mpz_set_si ();
+int mpz_set_str ();
+void mpz_init_set ();
+void mpz_init_set_ui ();
+void mpz_init_set_si ();
+int mpz_init_set_str ();
+unsigned long int mpz_get_ui ();
+long int mpz_get_si ();
+char * mpz_get_str ();
+void mpz_clear ();
+void * _mpz_realloc ();
+void mpz_add ();
+void mpz_add_ui ();
+void mpz_sub ();
+void mpz_sub_ui ();
+void mpz_mul ();
+void mpz_mul_ui ();
+void mpz_div ();
+void mpz_div_ui ();
+void mpz_mod ();
+void mpz_mod_ui ();
+void mpz_divmod ();
+void mpz_divmod_ui ();
+void mpz_mdiv ();
+void mpz_mdiv_ui ();
+void mpz_mmod ();
+unsigned long int mpz_mmod_ui ();
+void mpz_mdivmod ();
+unsigned long int mpz_mdivmod_ui ();
+void mpz_sqrt ();
+void mpz_sqrtrem ();
+int mpz_perfect_square_p ();
+int mpz_probab_prime_p ();
+void mpz_powm ();
+void mpz_powm_ui ();
+void mpz_pow_ui ();
+void mpz_fac_ui ();
+void mpz_gcd ();
+void mpz_gcdext ();
+void mpz_neg ();
+void mpz_com ();
+void mpz_abs ();
+int mpz_cmp ();
+int mpz_cmp_ui ();
+int mpz_cmp_si ();
+void mpz_mul_2exp ();
+void mpz_div_2exp ();
+void mpz_mod_2exp ();
+void mpz_and ();
+void mpz_ior ();
+void mpz_xor ();
+
+void mpz_inp_raw ();
+void mpz_inp_str ();
+void mpz_out_raw ();
+void mpz_out_str ();
+
+void mpz_array_init ();
+void mpz_random ();
+void mpz_random2 ();
+size_t mpz_size ();
+size_t mpz_sizeinbase ();
+
+/**************** Rational (i.e. Q) routines.  ****************/
+
+void mpq_init ();
+void mpq_clear ();
+void mpq_set ();
+void mpq_set_ui ();
+void mpq_set_si ();
+void mpq_add ();
+void mpq_sub ();
+void mpq_mul ();
+void mpq_div ();
+void mpq_neg ();
+int mpq_cmp ();
+void mpq_inv ();
+void mpq_set_num ();
+void mpq_set_den ();
+void mpq_get_num ();
+void mpq_get_den ();
+
+/************ Low level positive-integer (i.e. N) routines.  ************/
+
+mp_limb mpn_add ();
+mp_size mpn_sub ();
+mp_size mpn_mul ();
+mp_size mpn_div ();
+mp_limb mpn_lshift ();
+mp_size mpn_rshift ();
+mp_size mpn_rshiftci ();
+int mpn_cmp ();
+#endif /* __STDC__ */
+
+#endif /* __GMP_H__ */