This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On Sat, Jul 03, 2004 at 08:19:31PM -0700, Steve Kargl wrote: > > 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 > Here is an updated patch that fixes the problem with HUGE() and I/O. gcc/real.c and MPFR have different ideas with regard to the number of decimal digits that correspond to 53-bit FP with exact rounding and round-to-nearest. See above for a ChangeLog entry. -- Steve
Attachment:
mpfr3.diff
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |