[PATCH] Remove GMP in favor of MPFR
Steve Kargl
sgk@troutmask.apl.washington.edu
Sun Jul 4 03:19:00 GMT 2004
Gang,
Here is a reworking of gfortran to use MPFR in preference to
GMP. The diff (when uncompressed) is nearly 3800 lines and
on the order of 100 kB. The patch has been bootstrapped on
FreeBSD. The gfortran testsuite was run with no new regression.
My private test suite also compiled and ran without a problem.
There are a few FIXME comments where I simply converted the
GMP code to MPFR code. The reduced number of bits in the
MPFR significand may lead to some potential overflows (see
for example complex division in arith.c). I clean the FIXME
comments up with a followup patch.
I need someone who understands configure to write the
tests for libmpfr. For my testing, I hacked configure
by replacing "-lgmp" everywhere with "-lmpfr -lgmp".
Finally, here's a mutant ChangeLog entry. The complexity
of patch has me somewhat stymied with submitting anything
shorter.
Steven G. Kargl 2004-07-02 <kargls@comcast.net>
arith.c: Add #define for model numbers. Remove global GMP variables.
(natural_logarithm,common_logarithm,exponential,sine,
cosine,arctangent,hypercos,hypersine ): Removed functions
(gfc_mpfr_to_mpz,gfc_set_model_kind,gfc_set_model): New functions
(arctangent2,gfc_arith_init_1,gfc_arith_done_1
gfc_check_real_range, gfc_constant_result, gfc_range_check,
gfc_arith_uminus,gfc_arith_plus, gfc_arith_minus, gfc_arith_times,
gfc_arith_divide,complex_reciprocal,complex_pow_ui,
gfc_arith_power,gfc_compare_expr,compare_complex,gfc_convert_real,
gfc_convert_complex,gfc_int2real,gfc_int2complex,
gfc_real2int,gfc_real2real,gfc_real2complex,
gfc_complex2int,gfc_complex2real,gfc_complex2complex
): Convert GMP to MPFR, use new functions.
arith.h: Remove extern global variables.
(natural_logarithm,common_logarithm,exponential, sine, cosine,
arctangent,hypercos,hypersine): Remove prototypes.
(arctangent2): Update prototype from GMP to MPFR.
(gfc_mpfr_to_mpz, gfc_set_model_kind,gfc_set_model): Prototypes
of new functions.
dump-parse-tree.c: (gfc_show_expr): Convert GMP to MPFR
expr.c: (free_expr0,gfc_copy_expr): Convert GMP to MPFR
gfortran.h: (GFC_REAL_BITS): Remove; (arith): Add ARITH_NAN;
Add mpfr.h, define GFC_RND_MODE;
(gfc_expr): Convert GMP to MPFR
GFC_GFC_H changed to GCC_GFORTRAN_H
module.c: Add arith.h, correct type in comment
(mio_gmp_real): Convert GMP to MPFR
(mio_expr): Use gfc_set_model_kind().
primary.c: Update copyright date with 2004
(match_real_constant,match_const_complex_part): Convert GMP to MPFR
simplify.c: Remove global GMP variables
(gfc_simplify_abs,gfc_simplify_acos,gfc_simplify_aimag,
gfc_simplify_aint,gfc_simplify_dint,gfc_simplify_anint,
gfc_simplify_dnint,gfc_simplify_asin,gfc_simplify_atan,
gfc_simplify_atan2,gfc_simplify_ceiling,simplify_cmplx,
gfc_simplify_conjg,gfc_simplify_cos,gfc_simplify_cosh,
gfc_simplify_dim,gfc_simplify_dprod,gfc_simplify_epsilon,
gfc_simplify_exp,gfc_simplify_exponent,gfc_simplify_floor,
gfc_simplify_fraction,gfc_simplify_huge,gfc_simplify_int,
gfc_simplify_ifix,gfc_simplify_idint,gfc_simplify_log,
gfc_simplify_log10,simplify_min_max,gfc_simplify_mod,
gfc_simplify_modulo,gfc_simplify_nearest,simplify_nint,
gfc_simplify_rrspacing,gfc_simplify_scale,
gfc_simplify_set_exponent,gfc_simplify_sign,gfc_simplify_sin,
gfc_simplify_sinh,gfc_simplify_spacing,gfc_simplify_sqrt,
gfc_simplify_tan,gfc_simplify_tanh,gfc_simplify_tiny,
gfc_simplify_init_1,gfc_simplify_done_1
): Convert GMP to MPFR, use new functions.
trans-const.c: Rename gfc_conv_mpf_to_tree() to gfc_conv_mpfr_to_tree();
Convert it to use MPFR
(gfc_conv_constant_to_tree): Use it.
trans-const.h: Update prototype for gfc_conv_mpfr_to_tree().
trans-intrinsic.c: Add arith.h, remove gmp.h
(gfc_conv_intrinsic_aint,gfc_conv_intrinsic_mod): Convert GMP to MPFR.
(gfc_conv_intrinsic_minmaxloc): Use gfc_conv_mpfr_to_tree
--
Steve
-------------- next part --------------
A non-text attachment was scrubbed...
Name: mpfr1.diff.gz
Type: application/x-gunzip
Size: 18506 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20040704/bfc9efc6/attachment.bin>
More information about the Fortran
mailing list