2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
23 /* Since target arithmetic must be done on the host, there has to
24 be some way of evaluating arithmetic expressions as the host
25 would evaluate them. We use the GNU MP library and the MPFR
26 library to do arithmetic, and this file provides the interface. */
34 /* MPFR does not have a direct replacement for mpz_set_f() from GMP.
35 It's easily implemented with a few calls though. */
38 gfc_mpfr_to_mpz (mpz_t z, mpfr_t x)
42 e = mpfr_get_z_exp (z, x);
43 /* MPFR 2.0.1 (included with GMP 4.1) has a bug whereby mpfr_get_z_exp
44 may set the sign of z incorrectly. Work around that here. */
45 if (mpfr_sgn (x) != mpz_sgn (z))
49 mpz_mul_2exp (z, z, e);
51 mpz_tdiv_q_2exp (z, z, -e);
55 /* Set the model number precision by the requested KIND. */
58 gfc_set_model_kind (int kind)
60 int index = gfc_validate_kind (BT_REAL, kind, false);
63 base2prec = gfc_real_kinds[index].digits;
64 if (gfc_real_kinds[index].radix != 2)
65 base2prec *= gfc_real_kinds[index].radix / 2;
66 mpfr_set_default_prec (base2prec);
70 /* Set the model number precision from mpfr_t x. */
73 gfc_set_model (mpfr_t x)
75 mpfr_set_default_prec (mpfr_get_prec (x));
78 #if MPFR_VERSION_MAJOR < 2 || (MPFR_VERSION_MAJOR == 2 && MPFR_VERSION_MINOR < 2)
79 /* Calculate atan2 (y, x)
81 atan2(y, x) = atan(y/x) if x > 0,
82 sign(y)*(pi - atan(|y/x|)) if x < 0,
84 sign(y)*pi/2 if x = 0 && y != 0.
88 arctangent2 (mpfr_t y, mpfr_t x, mpfr_t result)
100 mpfr_div (t, y, x, GFC_RND_MODE);
101 mpfr_atan (result, t, GFC_RND_MODE);
105 mpfr_const_pi (result, GFC_RND_MODE);
106 mpfr_div (t, y, x, GFC_RND_MODE);
107 mpfr_abs (t, t, GFC_RND_MODE);
108 mpfr_atan (t, t, GFC_RND_MODE);
109 mpfr_sub (result, result, t, GFC_RND_MODE);
110 if (mpfr_sgn (y) < 0)
111 mpfr_neg (result, result, GFC_RND_MODE);
115 if (mpfr_sgn (y) == 0)
116 mpfr_set_ui (result, 0, GFC_RND_MODE);
119 mpfr_const_pi (result, GFC_RND_MODE);
120 mpfr_div_ui (result, result, 2, GFC_RND_MODE);
121 if (mpfr_sgn (y) < 0)
122 mpfr_neg (result, result, GFC_RND_MODE);
130 /* Given an arithmetic error code, return a pointer to a string that
131 explains the error. */
134 gfc_arith_error (arith code)
141 p = _("Arithmetic OK at %L");
144 p = _("Arithmetic overflow at %L");
146 case ARITH_UNDERFLOW:
147 p = _("Arithmetic underflow at %L");
150 p = _("Arithmetic NaN at %L");
153 p = _("Division by zero at %L");
155 case ARITH_INCOMMENSURATE:
156 p = _("Array operands are incommensurate at %L");
158 case ARITH_ASYMMETRIC:
160 _("Integer outside symmetric range implied by Standard Fortran at %L");
163 gfc_internal_error ("gfc_arith_error(): Bad error code");
170 /* Get things ready to do math. */
173 gfc_arith_init_1 (void)
175 gfc_integer_info *int_info;
176 gfc_real_info *real_info;
181 mpfr_set_default_prec (128);
185 /* Convert the minimum and maximum values for each kind into their
186 GNU MP representation. */
187 for (int_info = gfc_integer_kinds; int_info->kind != 0; int_info++)
190 mpz_set_ui (r, int_info->radix);
191 mpz_pow_ui (r, r, int_info->digits);
193 mpz_init (int_info->huge);
194 mpz_sub_ui (int_info->huge, r, 1);
196 /* These are the numbers that are actually representable by the
197 target. For bases other than two, this needs to be changed. */
198 if (int_info->radix != 2)
199 gfc_internal_error ("Fix min_int calculation");
201 /* See PRs 13490 and 17912, related to integer ranges.
202 The pedantic_min_int exists for range checking when a program
203 is compiled with -pedantic, and reflects the belief that
204 Standard Fortran requires integers to be symmetrical, i.e.
205 every negative integer must have a representable positive
206 absolute value, and vice versa. */
208 mpz_init (int_info->pedantic_min_int);
209 mpz_neg (int_info->pedantic_min_int, int_info->huge);
211 mpz_init (int_info->min_int);
212 mpz_sub_ui (int_info->min_int, int_info->pedantic_min_int, 1);
215 mpfr_set_z (a, int_info->huge, GFC_RND_MODE);
216 mpfr_log10 (a, a, GFC_RND_MODE);
218 gfc_mpfr_to_mpz (r, a);
219 int_info->range = mpz_get_si (r);
224 for (real_info = gfc_real_kinds; real_info->kind != 0; real_info++)
226 gfc_set_model_kind (real_info->kind);
232 /* huge(x) = (1 - b**(-p)) * b**(emax-1) * b */
233 /* a = 1 - b**(-p) */
234 mpfr_set_ui (a, 1, GFC_RND_MODE);
235 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
236 mpfr_pow_si (b, b, -real_info->digits, GFC_RND_MODE);
237 mpfr_sub (a, a, b, GFC_RND_MODE);
239 /* c = b**(emax-1) */
240 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
241 mpfr_pow_ui (c, b, real_info->max_exponent - 1, GFC_RND_MODE);
243 /* a = a * c = (1 - b**(-p)) * b**(emax-1) */
244 mpfr_mul (a, a, c, GFC_RND_MODE);
246 /* a = (1 - b**(-p)) * b**(emax-1) * b */
247 mpfr_mul_ui (a, a, real_info->radix, GFC_RND_MODE);
249 mpfr_init (real_info->huge);
250 mpfr_set (real_info->huge, a, GFC_RND_MODE);
252 /* tiny(x) = b**(emin-1) */
253 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
254 mpfr_pow_si (b, b, real_info->min_exponent - 1, GFC_RND_MODE);
256 mpfr_init (real_info->tiny);
257 mpfr_set (real_info->tiny, b, GFC_RND_MODE);
259 /* subnormal (x) = b**(emin - digit) */
260 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
261 mpfr_pow_si (b, b, real_info->min_exponent - real_info->digits,
264 mpfr_init (real_info->subnormal);
265 mpfr_set (real_info->subnormal, b, GFC_RND_MODE);
267 /* epsilon(x) = b**(1-p) */
268 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
269 mpfr_pow_si (b, b, 1 - real_info->digits, GFC_RND_MODE);
271 mpfr_init (real_info->epsilon);
272 mpfr_set (real_info->epsilon, b, GFC_RND_MODE);
274 /* range(x) = int(min(log10(huge(x)), -log10(tiny)) */
275 mpfr_log10 (a, real_info->huge, GFC_RND_MODE);
276 mpfr_log10 (b, real_info->tiny, GFC_RND_MODE);
277 mpfr_neg (b, b, GFC_RND_MODE);
280 if (mpfr_cmp (a, b) > 0)
281 mpfr_set (a, b, GFC_RND_MODE);
284 gfc_mpfr_to_mpz (r, a);
285 real_info->range = mpz_get_si (r);
287 /* precision(x) = int((p - 1) * log10(b)) + k */
288 mpfr_set_ui (a, real_info->radix, GFC_RND_MODE);
289 mpfr_log10 (a, a, GFC_RND_MODE);
291 mpfr_mul_ui (a, a, real_info->digits - 1, GFC_RND_MODE);
293 gfc_mpfr_to_mpz (r, a);
294 real_info->precision = mpz_get_si (r);
296 /* If the radix is an integral power of 10, add one to the precision. */
297 for (i = 10; i <= real_info->radix; i *= 10)
298 if (i == real_info->radix)
299 real_info->precision++;
310 /* Clean up, get rid of numeric constants. */
313 gfc_arith_done_1 (void)
315 gfc_integer_info *ip;
318 for (ip = gfc_integer_kinds; ip->kind; ip++)
320 mpz_clear (ip->min_int);
321 mpz_clear (ip->pedantic_min_int);
322 mpz_clear (ip->huge);
325 for (rp = gfc_real_kinds; rp->kind; rp++)
327 mpfr_clear (rp->epsilon);
328 mpfr_clear (rp->huge);
329 mpfr_clear (rp->tiny);
330 mpfr_clear (rp->subnormal);
335 /* Given an integer and a kind, make sure that the integer lies within
336 the range of the kind. Returns ARITH_OK, ARITH_ASYMMETRIC or
340 gfc_check_integer_range (mpz_t p, int kind)
345 i = gfc_validate_kind (BT_INTEGER, kind, false);
350 if (mpz_cmp (p, gfc_integer_kinds[i].pedantic_min_int) < 0)
351 result = ARITH_ASYMMETRIC;
354 if (mpz_cmp (p, gfc_integer_kinds[i].min_int) < 0
355 || mpz_cmp (p, gfc_integer_kinds[i].huge) > 0)
356 result = ARITH_OVERFLOW;
362 /* Given a real and a kind, make sure that the real lies within the
363 range of the kind. Returns ARITH_OK, ARITH_OVERFLOW or
367 gfc_check_real_range (mpfr_t p, int kind)
373 i = gfc_validate_kind (BT_REAL, kind, false);
377 mpfr_abs (q, p, GFC_RND_MODE);
381 if (gfc_option.flag_range_check == 0)
384 retval = ARITH_OVERFLOW;
386 else if (mpfr_nan_p (p))
388 if (gfc_option.flag_range_check == 0)
393 else if (mpfr_sgn (q) == 0)
395 else if (mpfr_cmp (q, gfc_real_kinds[i].huge) > 0)
397 if (gfc_option.flag_range_check == 0)
400 retval = ARITH_OVERFLOW;
402 else if (mpfr_cmp (q, gfc_real_kinds[i].subnormal) < 0)
404 if (gfc_option.flag_range_check == 0)
407 retval = ARITH_UNDERFLOW;
409 else if (mpfr_cmp (q, gfc_real_kinds[i].tiny) < 0)
411 #if MPFR_VERSION_MAJOR < 2 || (MPFR_VERSION_MAJOR == 2 && MPFR_VERSION_MINOR < 2)
412 /* MPFR operates on a number with a given precision and enormous
413 exponential range. To represent subnormal numbers, the exponent is
414 allowed to become smaller than emin, but always retains the full
415 precision. This code resets unused bits to 0 to alleviate
416 rounding problems. Note, a future version of MPFR will have a
417 mpfr_subnormalize() function, which handles this truncation in a
418 more efficient and robust way. */
424 bin = mpfr_get_str (NULL, &e, gfc_real_kinds[i].radix, 0, q, GMP_RNDN);
425 k = gfc_real_kinds[i].digits - (gfc_real_kinds[i].min_exponent - e);
426 for (j = k; j < gfc_real_kinds[i].digits; j++)
428 /* Need space for '0.', bin, 'E', and e */
429 s = (char *) gfc_getmem (strlen(bin) + 10);
430 sprintf (s, "0.%sE%d", bin, (int) e);
431 mpfr_set_str (q, s, gfc_real_kinds[i].radix, GMP_RNDN);
438 /* Save current values of emin and emax. */
439 emin = mpfr_get_emin ();
440 emax = mpfr_get_emax ();
442 /* Set emin and emax for the current model number. */
443 mpfr_set_emin ((mp_exp_t) gfc_real_kinds[i].min_exponent - 1);
444 mpfr_set_emax ((mp_exp_t) gfc_real_kinds[i].max_exponent - 1);
445 mpfr_subnormalize (q, 0, GFC_RND_MODE);
447 /* Reset emin and emax. */
448 mpfr_set_emin (emin);
449 mpfr_set_emax (emax);
452 /* Copy sign if needed. */
453 if (mpfr_sgn (p) < 0)
454 mpfr_neg (p, q, GMP_RNDN);
456 mpfr_set (p, q, GMP_RNDN);
469 /* Function to return a constant expression node of a given type and kind. */
472 gfc_constant_result (bt type, int kind, locus * where)
478 ("gfc_constant_result(): locus 'where' cannot be NULL");
480 result = gfc_get_expr ();
482 result->expr_type = EXPR_CONSTANT;
483 result->ts.type = type;
484 result->ts.kind = kind;
485 result->where = *where;
490 mpz_init (result->value.integer);
494 gfc_set_model_kind (kind);
495 mpfr_init (result->value.real);
499 gfc_set_model_kind (kind);
500 mpfr_init (result->value.complex.r);
501 mpfr_init (result->value.complex.i);
512 /* Low-level arithmetic functions. All of these subroutines assume
513 that all operands are of the same type and return an operand of the
514 same type. The other thing about these subroutines is that they
515 can fail in various ways -- overflow, underflow, division by zero,
516 zero raised to the zero, etc. */
519 gfc_arith_not (gfc_expr * op1, gfc_expr ** resultp)
523 result = gfc_constant_result (BT_LOGICAL, op1->ts.kind, &op1->where);
524 result->value.logical = !op1->value.logical;
532 gfc_arith_and (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
536 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
538 result->value.logical = op1->value.logical && op2->value.logical;
546 gfc_arith_or (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
550 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
552 result->value.logical = op1->value.logical || op2->value.logical;
560 gfc_arith_eqv (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
564 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
566 result->value.logical = op1->value.logical == op2->value.logical;
574 gfc_arith_neqv (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
578 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
580 result->value.logical = op1->value.logical != op2->value.logical;
587 /* Make sure a constant numeric expression is within the range for
588 its type and kind. Note that there's also a gfc_check_range(),
589 but that one deals with the intrinsic RANGE function. */
592 gfc_range_check (gfc_expr * e)
599 rc = gfc_check_integer_range (e->value.integer, e->ts.kind);
603 rc = gfc_check_real_range (e->value.real, e->ts.kind);
604 if (rc == ARITH_UNDERFLOW)
605 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
606 if (rc == ARITH_OVERFLOW)
607 mpfr_set_inf (e->value.real, mpfr_sgn (e->value.real));
609 mpfr_set_nan (e->value.real);
613 rc = gfc_check_real_range (e->value.complex.r, e->ts.kind);
614 if (rc == ARITH_UNDERFLOW)
615 mpfr_set_ui (e->value.complex.r, 0, GFC_RND_MODE);
616 if (rc == ARITH_OVERFLOW)
617 mpfr_set_inf (e->value.complex.r, mpfr_sgn (e->value.complex.r));
619 mpfr_set_nan (e->value.complex.r);
621 rc = gfc_check_real_range (e->value.complex.i, e->ts.kind);
622 if (rc == ARITH_UNDERFLOW)
623 mpfr_set_ui (e->value.complex.i, 0, GFC_RND_MODE);
624 if (rc == ARITH_OVERFLOW)
625 mpfr_set_inf (e->value.complex.i, mpfr_sgn (e->value.complex.i));
627 mpfr_set_nan (e->value.complex.i);
631 gfc_internal_error ("gfc_range_check(): Bad type");
638 /* Several of the following routines use the same set of statements to
639 check the validity of the result. Encapsulate the checking here. */
642 check_result (arith rc, gfc_expr * x, gfc_expr * r, gfc_expr ** rp)
646 if (val == ARITH_UNDERFLOW)
648 if (gfc_option.warn_underflow)
649 gfc_warning (gfc_arith_error (val), &x->where);
653 if (val == ARITH_ASYMMETRIC)
655 gfc_warning (gfc_arith_error (val), &x->where);
668 /* It may seem silly to have a subroutine that actually computes the
669 unary plus of a constant, but it prevents us from making exceptions
670 in the code elsewhere. */
673 gfc_arith_uplus (gfc_expr * op1, gfc_expr ** resultp)
675 *resultp = gfc_copy_expr (op1);
681 gfc_arith_uminus (gfc_expr * op1, gfc_expr ** resultp)
686 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
688 switch (op1->ts.type)
691 mpz_neg (result->value.integer, op1->value.integer);
695 mpfr_neg (result->value.real, op1->value.real, GFC_RND_MODE);
699 mpfr_neg (result->value.complex.r, op1->value.complex.r, GFC_RND_MODE);
700 mpfr_neg (result->value.complex.i, op1->value.complex.i, GFC_RND_MODE);
704 gfc_internal_error ("gfc_arith_uminus(): Bad basic type");
707 rc = gfc_range_check (result);
709 return check_result (rc, op1, result, resultp);
714 gfc_arith_plus (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
719 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
721 switch (op1->ts.type)
724 mpz_add (result->value.integer, op1->value.integer, op2->value.integer);
728 mpfr_add (result->value.real, op1->value.real, op2->value.real,
733 mpfr_add (result->value.complex.r, op1->value.complex.r,
734 op2->value.complex.r, GFC_RND_MODE);
736 mpfr_add (result->value.complex.i, op1->value.complex.i,
737 op2->value.complex.i, GFC_RND_MODE);
741 gfc_internal_error ("gfc_arith_plus(): Bad basic type");
744 rc = gfc_range_check (result);
746 return check_result (rc, op1, result, resultp);
751 gfc_arith_minus (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
756 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
758 switch (op1->ts.type)
761 mpz_sub (result->value.integer, op1->value.integer, op2->value.integer);
765 mpfr_sub (result->value.real, op1->value.real, op2->value.real,
770 mpfr_sub (result->value.complex.r, op1->value.complex.r,
771 op2->value.complex.r, GFC_RND_MODE);
773 mpfr_sub (result->value.complex.i, op1->value.complex.i,
774 op2->value.complex.i, GFC_RND_MODE);
778 gfc_internal_error ("gfc_arith_minus(): Bad basic type");
781 rc = gfc_range_check (result);
783 return check_result (rc, op1, result, resultp);
788 gfc_arith_times (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
794 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
796 switch (op1->ts.type)
799 mpz_mul (result->value.integer, op1->value.integer, op2->value.integer);
803 mpfr_mul (result->value.real, op1->value.real, op2->value.real,
808 gfc_set_model (op1->value.complex.r);
812 mpfr_mul (x, op1->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
813 mpfr_mul (y, op1->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
814 mpfr_sub (result->value.complex.r, x, y, GFC_RND_MODE);
816 mpfr_mul (x, op1->value.complex.r, op2->value.complex.i, GFC_RND_MODE);
817 mpfr_mul (y, op1->value.complex.i, op2->value.complex.r, GFC_RND_MODE);
818 mpfr_add (result->value.complex.i, x, y, GFC_RND_MODE);
825 gfc_internal_error ("gfc_arith_times(): Bad basic type");
828 rc = gfc_range_check (result);
830 return check_result (rc, op1, result, resultp);
835 gfc_arith_divide (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
843 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
845 switch (op1->ts.type)
848 if (mpz_sgn (op2->value.integer) == 0)
854 mpz_tdiv_q (result->value.integer, op1->value.integer,
859 if (mpfr_sgn (op2->value.real) == 0
860 && gfc_option.flag_range_check == 1)
866 mpfr_div (result->value.real, op1->value.real, op2->value.real,
871 if (mpfr_sgn (op2->value.complex.r) == 0
872 && mpfr_sgn (op2->value.complex.i) == 0
873 && gfc_option.flag_range_check == 1)
879 gfc_set_model (op1->value.complex.r);
884 mpfr_mul (x, op2->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
885 mpfr_mul (y, op2->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
886 mpfr_add (div, x, y, GFC_RND_MODE);
888 mpfr_mul (x, op1->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
889 mpfr_mul (y, op1->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
890 mpfr_add (result->value.complex.r, x, y, GFC_RND_MODE);
891 mpfr_div (result->value.complex.r, result->value.complex.r, div,
894 mpfr_mul (x, op1->value.complex.i, op2->value.complex.r, GFC_RND_MODE);
895 mpfr_mul (y, op1->value.complex.r, op2->value.complex.i, GFC_RND_MODE);
896 mpfr_sub (result->value.complex.i, x, y, GFC_RND_MODE);
897 mpfr_div (result->value.complex.i, result->value.complex.i, div,
906 gfc_internal_error ("gfc_arith_divide(): Bad basic type");
910 rc = gfc_range_check (result);
912 return check_result (rc, op1, result, resultp);
916 /* Compute the reciprocal of a complex number (guaranteed nonzero). */
919 complex_reciprocal (gfc_expr * op)
921 mpfr_t mod, a, re, im;
923 gfc_set_model (op->value.complex.r);
929 mpfr_mul (mod, op->value.complex.r, op->value.complex.r, GFC_RND_MODE);
930 mpfr_mul (a, op->value.complex.i, op->value.complex.i, GFC_RND_MODE);
931 mpfr_add (mod, mod, a, GFC_RND_MODE);
933 mpfr_div (re, op->value.complex.r, mod, GFC_RND_MODE);
935 mpfr_neg (im, op->value.complex.i, GFC_RND_MODE);
936 mpfr_div (im, im, mod, GFC_RND_MODE);
938 mpfr_set (op->value.complex.r, re, GFC_RND_MODE);
939 mpfr_set (op->value.complex.i, im, GFC_RND_MODE);
948 /* Raise a complex number to positive power. */
951 complex_pow_ui (gfc_expr * base, int power, gfc_expr * result)
955 gfc_set_model (base->value.complex.r);
960 mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE);
961 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
963 for (; power > 0; power--)
965 mpfr_mul (re, base->value.complex.r, result->value.complex.r,
967 mpfr_mul (a, base->value.complex.i, result->value.complex.i,
969 mpfr_sub (re, re, a, GFC_RND_MODE);
971 mpfr_mul (im, base->value.complex.r, result->value.complex.i,
973 mpfr_mul (a, base->value.complex.i, result->value.complex.r,
975 mpfr_add (im, im, a, GFC_RND_MODE);
977 mpfr_set (result->value.complex.r, re, GFC_RND_MODE);
978 mpfr_set (result->value.complex.i, im, GFC_RND_MODE);
987 /* Raise a number to an integer power. */
990 gfc_arith_power (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1000 if (gfc_extract_int (op2, &power) != NULL)
1001 gfc_internal_error ("gfc_arith_power(): Bad exponent");
1003 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
1007 /* Handle something to the zeroth power. Since we're dealing
1008 with integral exponents, there is no ambiguity in the
1009 limiting procedure used to determine the value of 0**0. */
1010 switch (op1->ts.type)
1013 mpz_set_ui (result->value.integer, 1);
1017 mpfr_set_ui (result->value.real, 1, GFC_RND_MODE);
1021 mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE);
1022 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
1026 gfc_internal_error ("gfc_arith_power(): Bad base");
1035 switch (op1->ts.type)
1038 mpz_pow_ui (result->value.integer, op1->value.integer, apower);
1042 mpz_init_set_ui (unity_z, 1);
1043 mpz_tdiv_q (result->value.integer, unity_z,
1044 result->value.integer);
1045 mpz_clear (unity_z);
1050 mpfr_pow_ui (result->value.real, op1->value.real, apower,
1055 gfc_set_model (op1->value.real);
1056 mpfr_init (unity_f);
1057 mpfr_set_ui (unity_f, 1, GFC_RND_MODE);
1058 mpfr_div (result->value.real, unity_f, result->value.real,
1060 mpfr_clear (unity_f);
1065 complex_pow_ui (op1, apower, result);
1067 complex_reciprocal (result);
1076 rc = gfc_range_check (result);
1078 return check_result (rc, op1, result, resultp);
1082 /* Concatenate two string constants. */
1085 gfc_arith_concat (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1090 result = gfc_constant_result (BT_CHARACTER, gfc_default_character_kind,
1093 len = op1->value.character.length + op2->value.character.length;
1095 result->value.character.string = gfc_getmem (len + 1);
1096 result->value.character.length = len;
1098 memcpy (result->value.character.string, op1->value.character.string,
1099 op1->value.character.length);
1101 memcpy (result->value.character.string + op1->value.character.length,
1102 op2->value.character.string, op2->value.character.length);
1104 result->value.character.string[len] = '\0';
1112 /* Comparison operators. Assumes that the two expression nodes
1113 contain two constants of the same type. */
1116 gfc_compare_expr (gfc_expr * op1, gfc_expr * op2)
1120 switch (op1->ts.type)
1123 rc = mpz_cmp (op1->value.integer, op2->value.integer);
1127 rc = mpfr_cmp (op1->value.real, op2->value.real);
1131 rc = gfc_compare_string (op1, op2, NULL);
1135 rc = ((!op1->value.logical && op2->value.logical)
1136 || (op1->value.logical && !op2->value.logical));
1140 gfc_internal_error ("gfc_compare_expr(): Bad basic type");
1147 /* Compare a pair of complex numbers. Naturally, this is only for
1148 equality and nonequality. */
1151 compare_complex (gfc_expr * op1, gfc_expr * op2)
1153 return (mpfr_cmp (op1->value.complex.r, op2->value.complex.r) == 0
1154 && mpfr_cmp (op1->value.complex.i, op2->value.complex.i) == 0);
1158 /* Given two constant strings and the inverse collating sequence, compare the
1159 strings. We return -1 for a < b, 0 for a == b and 1 for a > b. If the
1160 xcoll_table is NULL, we use the processor's default collating sequence. */
1163 gfc_compare_string (gfc_expr * a, gfc_expr * b, const int * xcoll_table)
1165 int len, alen, blen, i, ac, bc;
1167 alen = a->value.character.length;
1168 blen = b->value.character.length;
1170 len = (alen > blen) ? alen : blen;
1172 for (i = 0; i < len; i++)
1174 /* We cast to unsigned char because default char, if it is signed,
1175 would lead to ac < 0 for string[i] > 127. */
1176 ac = (unsigned char) ((i < alen) ? a->value.character.string[i] : ' ');
1177 bc = (unsigned char) ((i < blen) ? b->value.character.string[i] : ' ');
1179 if (xcoll_table != NULL)
1181 ac = xcoll_table[ac];
1182 bc = xcoll_table[bc];
1191 /* Strings are equal */
1197 /* Specific comparison subroutines. */
1200 gfc_arith_eq (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1204 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1206 result->value.logical = (op1->ts.type == BT_COMPLEX) ?
1207 compare_complex (op1, op2) : (gfc_compare_expr (op1, op2) == 0);
1215 gfc_arith_ne (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1219 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1221 result->value.logical = (op1->ts.type == BT_COMPLEX) ?
1222 !compare_complex (op1, op2) : (gfc_compare_expr (op1, op2) != 0);
1230 gfc_arith_gt (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1234 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1236 result->value.logical = (gfc_compare_expr (op1, op2) > 0);
1244 gfc_arith_ge (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1248 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1250 result->value.logical = (gfc_compare_expr (op1, op2) >= 0);
1258 gfc_arith_lt (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1262 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1264 result->value.logical = (gfc_compare_expr (op1, op2) < 0);
1272 gfc_arith_le (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1276 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1278 result->value.logical = (gfc_compare_expr (op1, op2) <= 0);
1286 reduce_unary (arith (*eval) (gfc_expr *, gfc_expr **), gfc_expr * op,
1289 gfc_constructor *c, *head;
1293 if (op->expr_type == EXPR_CONSTANT)
1294 return eval (op, result);
1297 head = gfc_copy_constructor (op->value.constructor);
1299 for (c = head; c; c = c->next)
1301 rc = eval (c->expr, &r);
1305 gfc_replace_expr (c->expr, r);
1309 gfc_free_constructor (head);
1312 r = gfc_get_expr ();
1313 r->expr_type = EXPR_ARRAY;
1314 r->value.constructor = head;
1315 r->shape = gfc_copy_shape (op->shape, op->rank);
1317 r->ts = head->expr->ts;
1318 r->where = op->where;
1329 reduce_binary_ac (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1330 gfc_expr * op1, gfc_expr * op2,
1333 gfc_constructor *c, *head;
1337 head = gfc_copy_constructor (op1->value.constructor);
1340 for (c = head; c; c = c->next)
1342 rc = eval (c->expr, op2, &r);
1346 gfc_replace_expr (c->expr, r);
1350 gfc_free_constructor (head);
1353 r = gfc_get_expr ();
1354 r->expr_type = EXPR_ARRAY;
1355 r->value.constructor = head;
1356 r->shape = gfc_copy_shape (op1->shape, op1->rank);
1358 r->ts = head->expr->ts;
1359 r->where = op1->where;
1360 r->rank = op1->rank;
1370 reduce_binary_ca (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1371 gfc_expr * op1, gfc_expr * op2,
1374 gfc_constructor *c, *head;
1378 head = gfc_copy_constructor (op2->value.constructor);
1381 for (c = head; c; c = c->next)
1383 rc = eval (op1, c->expr, &r);
1387 gfc_replace_expr (c->expr, r);
1391 gfc_free_constructor (head);
1394 r = gfc_get_expr ();
1395 r->expr_type = EXPR_ARRAY;
1396 r->value.constructor = head;
1397 r->shape = gfc_copy_shape (op2->shape, op2->rank);
1399 r->ts = head->expr->ts;
1400 r->where = op2->where;
1401 r->rank = op2->rank;
1411 reduce_binary_aa (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1412 gfc_expr * op1, gfc_expr * op2,
1415 gfc_constructor *c, *d, *head;
1419 head = gfc_copy_constructor (op1->value.constructor);
1422 d = op2->value.constructor;
1424 if (gfc_check_conformance ("Elemental binary operation", op1, op2)
1426 rc = ARITH_INCOMMENSURATE;
1430 for (c = head; c; c = c->next, d = d->next)
1434 rc = ARITH_INCOMMENSURATE;
1438 rc = eval (c->expr, d->expr, &r);
1442 gfc_replace_expr (c->expr, r);
1446 rc = ARITH_INCOMMENSURATE;
1450 gfc_free_constructor (head);
1453 r = gfc_get_expr ();
1454 r->expr_type = EXPR_ARRAY;
1455 r->value.constructor = head;
1456 r->shape = gfc_copy_shape (op1->shape, op1->rank);
1458 r->ts = head->expr->ts;
1459 r->where = op1->where;
1460 r->rank = op1->rank;
1470 reduce_binary (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1471 gfc_expr * op1, gfc_expr * op2,
1474 if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_CONSTANT)
1475 return eval (op1, op2, result);
1477 if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_ARRAY)
1478 return reduce_binary_ca (eval, op1, op2, result);
1480 if (op1->expr_type == EXPR_ARRAY && op2->expr_type == EXPR_CONSTANT)
1481 return reduce_binary_ac (eval, op1, op2, result);
1483 return reduce_binary_aa (eval, op1, op2, result);
1489 arith (*f2)(gfc_expr *, gfc_expr **);
1490 arith (*f3)(gfc_expr *, gfc_expr *, gfc_expr **);
1494 /* High level arithmetic subroutines. These subroutines go into
1495 eval_intrinsic(), which can do one of several things to its
1496 operands. If the operands are incompatible with the intrinsic
1497 operation, we return a node pointing to the operands and hope that
1498 an operator interface is found during resolution.
1500 If the operands are compatible and are constants, then we try doing
1501 the arithmetic. We also handle the cases where either or both
1502 operands are array constructors. */
1505 eval_intrinsic (gfc_intrinsic_op operator,
1506 eval_f eval, gfc_expr * op1, gfc_expr * op2)
1508 gfc_expr temp, *result;
1512 gfc_clear_ts (&temp.ts);
1518 if (op1->ts.type != BT_LOGICAL)
1521 temp.ts.type = BT_LOGICAL;
1522 temp.ts.kind = gfc_default_logical_kind;
1527 /* Logical binary operators */
1530 case INTRINSIC_NEQV:
1532 if (op1->ts.type != BT_LOGICAL || op2->ts.type != BT_LOGICAL)
1535 temp.ts.type = BT_LOGICAL;
1536 temp.ts.kind = gfc_default_logical_kind;
1542 case INTRINSIC_UPLUS:
1543 case INTRINSIC_UMINUS:
1544 if (!gfc_numeric_ts (&op1->ts))
1552 case INTRINSIC_PARENTHESES:
1558 /* Additional restrictions for ordering relations. */
1563 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
1565 temp.ts.type = BT_LOGICAL;
1566 temp.ts.kind = gfc_default_logical_kind;
1573 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
1576 temp.ts.type = BT_LOGICAL;
1577 temp.ts.kind = gfc_default_logical_kind;
1582 /* Numeric binary */
1583 case INTRINSIC_PLUS:
1584 case INTRINSIC_MINUS:
1585 case INTRINSIC_TIMES:
1586 case INTRINSIC_DIVIDE:
1587 case INTRINSIC_POWER:
1588 if (!gfc_numeric_ts (&op1->ts) || !gfc_numeric_ts (&op2->ts))
1591 /* Insert any necessary type conversions to make the operands
1594 temp.expr_type = EXPR_OP;
1595 gfc_clear_ts (&temp.ts);
1596 temp.value.op.operator = operator;
1598 temp.value.op.op1 = op1;
1599 temp.value.op.op2 = op2;
1601 gfc_type_convert_binary (&temp);
1603 if (operator == INTRINSIC_EQ || operator == INTRINSIC_NE
1604 || operator == INTRINSIC_GE || operator == INTRINSIC_GT
1605 || operator == INTRINSIC_LE || operator == INTRINSIC_LT)
1607 temp.ts.type = BT_LOGICAL;
1608 temp.ts.kind = gfc_default_logical_kind;
1614 /* Character binary */
1615 case INTRINSIC_CONCAT:
1616 if (op1->ts.type != BT_CHARACTER || op2->ts.type != BT_CHARACTER)
1619 temp.ts.type = BT_CHARACTER;
1620 temp.ts.kind = gfc_default_character_kind;
1625 case INTRINSIC_USER:
1629 gfc_internal_error ("eval_intrinsic(): Bad operator");
1632 /* Try to combine the operators. */
1633 if (operator == INTRINSIC_POWER && op2->ts.type != BT_INTEGER)
1637 || (op1->expr_type != EXPR_CONSTANT
1638 && (op1->expr_type != EXPR_ARRAY
1639 || !gfc_is_constant_expr (op1)
1640 || !gfc_expanded_ac (op1))))
1645 || (op2->expr_type != EXPR_CONSTANT
1646 && (op2->expr_type != EXPR_ARRAY
1647 || !gfc_is_constant_expr (op2)
1648 || !gfc_expanded_ac (op2)))))
1652 rc = reduce_unary (eval.f2, op1, &result);
1654 rc = reduce_binary (eval.f3, op1, op2, &result);
1657 { /* Something went wrong. */
1658 gfc_error (gfc_arith_error (rc), &op1->where);
1662 gfc_free_expr (op1);
1663 gfc_free_expr (op2);
1667 /* Create a run-time expression. */
1668 result = gfc_get_expr ();
1669 result->ts = temp.ts;
1671 result->expr_type = EXPR_OP;
1672 result->value.op.operator = operator;
1674 result->value.op.op1 = op1;
1675 result->value.op.op2 = op2;
1677 result->where = op1->where;
1683 /* Modify type of expression for zero size array. */
1686 eval_type_intrinsic0 (gfc_intrinsic_op operator, gfc_expr * op)
1689 gfc_internal_error ("eval_type_intrinsic0(): op NULL");
1699 op->ts.type = BT_LOGICAL;
1700 op->ts.kind = gfc_default_logical_kind;
1711 /* Return nonzero if the expression is a zero size array. */
1714 gfc_zero_size_array (gfc_expr * e)
1716 if (e->expr_type != EXPR_ARRAY)
1719 return e->value.constructor == NULL;
1723 /* Reduce a binary expression where at least one of the operands
1724 involves a zero-length array. Returns NULL if neither of the
1725 operands is a zero-length array. */
1728 reduce_binary0 (gfc_expr * op1, gfc_expr * op2)
1730 if (gfc_zero_size_array (op1))
1732 gfc_free_expr (op2);
1736 if (gfc_zero_size_array (op2))
1738 gfc_free_expr (op1);
1747 eval_intrinsic_f2 (gfc_intrinsic_op operator,
1748 arith (*eval) (gfc_expr *, gfc_expr **),
1749 gfc_expr * op1, gfc_expr * op2)
1756 if (gfc_zero_size_array (op1))
1757 return eval_type_intrinsic0 (operator, op1);
1761 result = reduce_binary0 (op1, op2);
1763 return eval_type_intrinsic0 (operator, result);
1767 return eval_intrinsic (operator, f, op1, op2);
1772 eval_intrinsic_f3 (gfc_intrinsic_op operator,
1773 arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1774 gfc_expr * op1, gfc_expr * op2)
1779 result = reduce_binary0 (op1, op2);
1781 return eval_type_intrinsic0(operator, result);
1784 return eval_intrinsic (operator, f, op1, op2);
1789 gfc_uplus (gfc_expr * op)
1791 return eval_intrinsic_f2 (INTRINSIC_UPLUS, gfc_arith_uplus, op, NULL);
1796 gfc_uminus (gfc_expr * op)
1798 return eval_intrinsic_f2 (INTRINSIC_UMINUS, gfc_arith_uminus, op, NULL);
1803 gfc_add (gfc_expr * op1, gfc_expr * op2)
1805 return eval_intrinsic_f3 (INTRINSIC_PLUS, gfc_arith_plus, op1, op2);
1810 gfc_subtract (gfc_expr * op1, gfc_expr * op2)
1812 return eval_intrinsic_f3 (INTRINSIC_MINUS, gfc_arith_minus, op1, op2);
1817 gfc_multiply (gfc_expr * op1, gfc_expr * op2)
1819 return eval_intrinsic_f3 (INTRINSIC_TIMES, gfc_arith_times, op1, op2);
1824 gfc_divide (gfc_expr * op1, gfc_expr * op2)
1826 return eval_intrinsic_f3 (INTRINSIC_DIVIDE, gfc_arith_divide, op1, op2);
1831 gfc_power (gfc_expr * op1, gfc_expr * op2)
1833 return eval_intrinsic_f3 (INTRINSIC_POWER, gfc_arith_power, op1, op2);
1838 gfc_concat (gfc_expr * op1, gfc_expr * op2)
1840 return eval_intrinsic_f3 (INTRINSIC_CONCAT, gfc_arith_concat, op1, op2);
1845 gfc_and (gfc_expr * op1, gfc_expr * op2)
1847 return eval_intrinsic_f3 (INTRINSIC_AND, gfc_arith_and, op1, op2);
1852 gfc_or (gfc_expr * op1, gfc_expr * op2)
1854 return eval_intrinsic_f3 (INTRINSIC_OR, gfc_arith_or, op1, op2);
1859 gfc_not (gfc_expr * op1)
1861 return eval_intrinsic_f2 (INTRINSIC_NOT, gfc_arith_not, op1, NULL);
1866 gfc_eqv (gfc_expr * op1, gfc_expr * op2)
1868 return eval_intrinsic_f3 (INTRINSIC_EQV, gfc_arith_eqv, op1, op2);
1873 gfc_neqv (gfc_expr * op1, gfc_expr * op2)
1875 return eval_intrinsic_f3 (INTRINSIC_NEQV, gfc_arith_neqv, op1, op2);
1880 gfc_eq (gfc_expr * op1, gfc_expr * op2)
1882 return eval_intrinsic_f3 (INTRINSIC_EQ, gfc_arith_eq, op1, op2);
1887 gfc_ne (gfc_expr * op1, gfc_expr * op2)
1889 return eval_intrinsic_f3 (INTRINSIC_NE, gfc_arith_ne, op1, op2);
1894 gfc_gt (gfc_expr * op1, gfc_expr * op2)
1896 return eval_intrinsic_f3 (INTRINSIC_GT, gfc_arith_gt, op1, op2);
1901 gfc_ge (gfc_expr * op1, gfc_expr * op2)
1903 return eval_intrinsic_f3 (INTRINSIC_GE, gfc_arith_ge, op1, op2);
1908 gfc_lt (gfc_expr * op1, gfc_expr * op2)
1910 return eval_intrinsic_f3 (INTRINSIC_LT, gfc_arith_lt, op1, op2);
1915 gfc_le (gfc_expr * op1, gfc_expr * op2)
1917 return eval_intrinsic_f3 (INTRINSIC_LE, gfc_arith_le, op1, op2);
1921 /* Convert an integer string to an expression node. */
1924 gfc_convert_integer (const char * buffer, int kind, int radix, locus * where)
1929 e = gfc_constant_result (BT_INTEGER, kind, where);
1930 /* A leading plus is allowed, but not by mpz_set_str. */
1931 if (buffer[0] == '+')
1935 mpz_set_str (e->value.integer, t, radix);
1941 /* Convert a real string to an expression node. */
1944 gfc_convert_real (const char * buffer, int kind, locus * where)
1948 e = gfc_constant_result (BT_REAL, kind, where);
1949 mpfr_set_str (e->value.real, buffer, 10, GFC_RND_MODE);
1955 /* Convert a pair of real, constant expression nodes to a single
1956 complex expression node. */
1959 gfc_convert_complex (gfc_expr * real, gfc_expr * imag, int kind)
1963 e = gfc_constant_result (BT_COMPLEX, kind, &real->where);
1964 mpfr_set (e->value.complex.r, real->value.real, GFC_RND_MODE);
1965 mpfr_set (e->value.complex.i, imag->value.real, GFC_RND_MODE);
1971 /******* Simplification of intrinsic functions with constant arguments *****/
1974 /* Deal with an arithmetic error. */
1977 arith_error (arith rc, gfc_typespec * from, gfc_typespec * to, locus * where)
1982 gfc_error ("Arithmetic OK converting %s to %s at %L",
1983 gfc_typename (from), gfc_typename (to), where);
1985 case ARITH_OVERFLOW:
1986 gfc_error ("Arithmetic overflow converting %s to %s at %L",
1987 gfc_typename (from), gfc_typename (to), where);
1989 case ARITH_UNDERFLOW:
1990 gfc_error ("Arithmetic underflow converting %s to %s at %L",
1991 gfc_typename (from), gfc_typename (to), where);
1994 gfc_error ("Arithmetic NaN converting %s to %s at %L",
1995 gfc_typename (from), gfc_typename (to), where);
1998 gfc_error ("Division by zero converting %s to %s at %L",
1999 gfc_typename (from), gfc_typename (to), where);
2001 case ARITH_INCOMMENSURATE:
2002 gfc_error ("Array operands are incommensurate converting %s to %s at %L",
2003 gfc_typename (from), gfc_typename (to), where);
2005 case ARITH_ASYMMETRIC:
2006 gfc_error ("Integer outside symmetric range implied by Standard Fortran"
2007 " converting %s to %s at %L",
2008 gfc_typename (from), gfc_typename (to), where);
2011 gfc_internal_error ("gfc_arith_error(): Bad error code");
2014 /* TODO: Do something about the error, ie, throw exception, return
2019 /* Convert integers to integers. */
2022 gfc_int2int (gfc_expr * src, int kind)
2027 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2029 mpz_set (result->value.integer, src->value.integer);
2031 if ((rc = gfc_check_integer_range (result->value.integer, kind))
2034 if (rc == ARITH_ASYMMETRIC)
2036 gfc_warning (gfc_arith_error (rc), &src->where);
2040 arith_error (rc, &src->ts, &result->ts, &src->where);
2041 gfc_free_expr (result);
2050 /* Convert integers to reals. */
2053 gfc_int2real (gfc_expr * src, int kind)
2058 result = gfc_constant_result (BT_REAL, kind, &src->where);
2060 mpfr_set_z (result->value.real, src->value.integer, GFC_RND_MODE);
2062 if ((rc = gfc_check_real_range (result->value.real, kind)) != ARITH_OK)
2064 arith_error (rc, &src->ts, &result->ts, &src->where);
2065 gfc_free_expr (result);
2073 /* Convert default integer to default complex. */
2076 gfc_int2complex (gfc_expr * src, int kind)
2081 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2083 mpfr_set_z (result->value.complex.r, src->value.integer, GFC_RND_MODE);
2084 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2086 if ((rc = gfc_check_real_range (result->value.complex.r, kind)) != ARITH_OK)
2088 arith_error (rc, &src->ts, &result->ts, &src->where);
2089 gfc_free_expr (result);
2097 /* Convert default real to default integer. */
2100 gfc_real2int (gfc_expr * src, int kind)
2105 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2107 gfc_mpfr_to_mpz (result->value.integer, src->value.real);
2109 if ((rc = gfc_check_integer_range (result->value.integer, kind))
2112 arith_error (rc, &src->ts, &result->ts, &src->where);
2113 gfc_free_expr (result);
2121 /* Convert real to real. */
2124 gfc_real2real (gfc_expr * src, int kind)
2129 result = gfc_constant_result (BT_REAL, kind, &src->where);
2131 mpfr_set (result->value.real, src->value.real, GFC_RND_MODE);
2133 rc = gfc_check_real_range (result->value.real, kind);
2135 if (rc == ARITH_UNDERFLOW)
2137 if (gfc_option.warn_underflow)
2138 gfc_warning (gfc_arith_error (rc), &src->where);
2139 mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
2141 else if (rc != ARITH_OK)
2143 arith_error (rc, &src->ts, &result->ts, &src->where);
2144 gfc_free_expr (result);
2152 /* Convert real to complex. */
2155 gfc_real2complex (gfc_expr * src, int kind)
2160 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2162 mpfr_set (result->value.complex.r, src->value.real, GFC_RND_MODE);
2163 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2165 rc = gfc_check_real_range (result->value.complex.r, kind);
2167 if (rc == ARITH_UNDERFLOW)
2169 if (gfc_option.warn_underflow)
2170 gfc_warning (gfc_arith_error (rc), &src->where);
2171 mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE);
2173 else if (rc != ARITH_OK)
2175 arith_error (rc, &src->ts, &result->ts, &src->where);
2176 gfc_free_expr (result);
2184 /* Convert complex to integer. */
2187 gfc_complex2int (gfc_expr * src, int kind)
2192 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2194 gfc_mpfr_to_mpz (result->value.integer, src->value.complex.r);
2196 if ((rc = gfc_check_integer_range (result->value.integer, kind))
2199 arith_error (rc, &src->ts, &result->ts, &src->where);
2200 gfc_free_expr (result);
2208 /* Convert complex to real. */
2211 gfc_complex2real (gfc_expr * src, int kind)
2216 result = gfc_constant_result (BT_REAL, kind, &src->where);
2218 mpfr_set (result->value.real, src->value.complex.r, GFC_RND_MODE);
2220 rc = gfc_check_real_range (result->value.real, kind);
2222 if (rc == ARITH_UNDERFLOW)
2224 if (gfc_option.warn_underflow)
2225 gfc_warning (gfc_arith_error (rc), &src->where);
2226 mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
2230 arith_error (rc, &src->ts, &result->ts, &src->where);
2231 gfc_free_expr (result);
2239 /* Convert complex to complex. */
2242 gfc_complex2complex (gfc_expr * src, int kind)
2247 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2249 mpfr_set (result->value.complex.r, src->value.complex.r, GFC_RND_MODE);
2250 mpfr_set (result->value.complex.i, src->value.complex.i, GFC_RND_MODE);
2252 rc = gfc_check_real_range (result->value.complex.r, kind);
2254 if (rc == ARITH_UNDERFLOW)
2256 if (gfc_option.warn_underflow)
2257 gfc_warning (gfc_arith_error (rc), &src->where);
2258 mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE);
2260 else if (rc != ARITH_OK)
2262 arith_error (rc, &src->ts, &result->ts, &src->where);
2263 gfc_free_expr (result);
2267 rc = gfc_check_real_range (result->value.complex.i, kind);
2269 if (rc == ARITH_UNDERFLOW)
2271 if (gfc_option.warn_underflow)
2272 gfc_warning (gfc_arith_error (rc), &src->where);
2273 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2275 else if (rc != ARITH_OK)
2277 arith_error (rc, &src->ts, &result->ts, &src->where);
2278 gfc_free_expr (result);
2286 /* Logical kind conversion. */
2289 gfc_log2log (gfc_expr * src, int kind)
2293 result = gfc_constant_result (BT_LOGICAL, kind, &src->where);
2294 result->value.logical = src->value.logical;
2300 /* Convert logical to integer. */
2303 gfc_log2int (gfc_expr *src, int kind)
2307 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2308 mpz_set_si (result->value.integer, src->value.logical);
2314 /* Convert integer to logical. */
2317 gfc_int2log (gfc_expr *src, int kind)
2321 result = gfc_constant_result (BT_LOGICAL, kind, &src->where);
2322 result->value.logical = (mpz_cmp_si (src->value.integer, 0) != 0);
2328 /* Convert Hollerith to integer. The constant will be padded or truncated. */
2331 gfc_hollerith2int (gfc_expr * src, int kind)
2336 len = src->value.character.length;
2338 result = gfc_get_expr ();
2339 result->expr_type = EXPR_CONSTANT;
2340 result->ts.type = BT_INTEGER;
2341 result->ts.kind = kind;
2342 result->where = src->where;
2347 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2348 &src->where, gfc_typename(&result->ts));
2350 result->value.character.string = gfc_getmem (kind + 1);
2351 memcpy (result->value.character.string, src->value.character.string,
2355 memset (&result->value.character.string[len], ' ', kind - len);
2357 result->value.character.string[kind] = '\0'; /* For debugger */
2358 result->value.character.length = kind;
2364 /* Convert Hollerith to real. The constant will be padded or truncated. */
2367 gfc_hollerith2real (gfc_expr * src, int kind)
2372 len = src->value.character.length;
2374 result = gfc_get_expr ();
2375 result->expr_type = EXPR_CONSTANT;
2376 result->ts.type = BT_REAL;
2377 result->ts.kind = kind;
2378 result->where = src->where;
2383 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2384 &src->where, gfc_typename(&result->ts));
2386 result->value.character.string = gfc_getmem (kind + 1);
2387 memcpy (result->value.character.string, src->value.character.string,
2391 memset (&result->value.character.string[len], ' ', kind - len);
2393 result->value.character.string[kind] = '\0'; /* For debugger. */
2394 result->value.character.length = kind;
2400 /* Convert Hollerith to complex. The constant will be padded or truncated. */
2403 gfc_hollerith2complex (gfc_expr * src, int kind)
2408 len = src->value.character.length;
2410 result = gfc_get_expr ();
2411 result->expr_type = EXPR_CONSTANT;
2412 result->ts.type = BT_COMPLEX;
2413 result->ts.kind = kind;
2414 result->where = src->where;
2421 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2422 &src->where, gfc_typename(&result->ts));
2424 result->value.character.string = gfc_getmem (kind + 1);
2425 memcpy (result->value.character.string, src->value.character.string,
2429 memset (&result->value.character.string[len], ' ', kind - len);
2431 result->value.character.string[kind] = '\0'; /* For debugger */
2432 result->value.character.length = kind;
2438 /* Convert Hollerith to character. */
2441 gfc_hollerith2character (gfc_expr * src, int kind)
2445 result = gfc_copy_expr (src);
2446 result->ts.type = BT_CHARACTER;
2447 result->ts.kind = kind;
2454 /* Convert Hollerith to logical. The constant will be padded or truncated. */
2457 gfc_hollerith2logical (gfc_expr * src, int kind)
2462 len = src->value.character.length;
2464 result = gfc_get_expr ();
2465 result->expr_type = EXPR_CONSTANT;
2466 result->ts.type = BT_LOGICAL;
2467 result->ts.kind = kind;
2468 result->where = src->where;
2473 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2474 &src->where, gfc_typename(&result->ts));
2476 result->value.character.string = gfc_getmem (kind + 1);
2477 memcpy (result->value.character.string, src->value.character.string,
2481 memset (&result->value.character.string[len], ' ', kind - len);
2483 result->value.character.string[kind] = '\0'; /* For debugger */
2484 result->value.character.length = kind;
2490 /* Returns an initializer whose value is one higher than the value of the
2491 LAST_INITIALIZER argument. If the argument is NULL, the
2492 initializers value will be set to zero. The initializer's kind
2493 will be set to gfc_c_int_kind.
2495 If -fshort-enums is given, the appropriate kind will be selected
2496 later after all enumerators have been parsed. A warning is issued
2497 here if an initializer exceeds gfc_c_int_kind. */
2500 gfc_enum_initializer (gfc_expr * last_initializer, locus where)
2504 result = gfc_get_expr ();
2505 result->expr_type = EXPR_CONSTANT;
2506 result->ts.type = BT_INTEGER;
2507 result->ts.kind = gfc_c_int_kind;
2508 result->where = where;
2510 mpz_init (result->value.integer);
2512 if (last_initializer != NULL)
2514 mpz_add_ui (result->value.integer, last_initializer->value.integer, 1);
2515 result->where = last_initializer->where;
2517 if (gfc_check_integer_range (result->value.integer,
2518 gfc_c_int_kind) != ARITH_OK)
2520 gfc_error ("Enumerator exceeds the C integer type at %C");
2526 /* Control comes here, if it's the very first enumerator and no
2527 initializer has been given. It will be initialized to zero. */
2528 mpz_set_si (result->value.integer, 0);