2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
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 3, 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 COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 /* Since target arithmetic must be done on the host, there has to
23 be some way of evaluating arithmetic expressions as the host
24 would evaluate them. We use the GNU MP library and the MPFR
25 library to do arithmetic, and this file provides the interface. */
32 #include "target-memory.h"
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));
79 /* Given an arithmetic error code, return a pointer to a string that
80 explains the error. */
83 gfc_arith_error (arith code)
90 p = _("Arithmetic OK at %L");
93 p = _("Arithmetic overflow at %L");
96 p = _("Arithmetic underflow at %L");
99 p = _("Arithmetic NaN at %L");
102 p = _("Division by zero at %L");
104 case ARITH_INCOMMENSURATE:
105 p = _("Array operands are incommensurate at %L");
107 case ARITH_ASYMMETRIC:
109 _("Integer outside symmetric range implied by Standard Fortran at %L");
112 gfc_internal_error ("gfc_arith_error(): Bad error code");
119 /* Get things ready to do math. */
122 gfc_arith_init_1 (void)
124 gfc_integer_info *int_info;
125 gfc_real_info *real_info;
130 mpfr_set_default_prec (128);
134 /* Convert the minimum and maximum values for each kind into their
135 GNU MP representation. */
136 for (int_info = gfc_integer_kinds; int_info->kind != 0; int_info++)
139 mpz_set_ui (r, int_info->radix);
140 mpz_pow_ui (r, r, int_info->digits);
142 mpz_init (int_info->huge);
143 mpz_sub_ui (int_info->huge, r, 1);
145 /* These are the numbers that are actually representable by the
146 target. For bases other than two, this needs to be changed. */
147 if (int_info->radix != 2)
148 gfc_internal_error ("Fix min_int calculation");
150 /* See PRs 13490 and 17912, related to integer ranges.
151 The pedantic_min_int exists for range checking when a program
152 is compiled with -pedantic, and reflects the belief that
153 Standard Fortran requires integers to be symmetrical, i.e.
154 every negative integer must have a representable positive
155 absolute value, and vice versa. */
157 mpz_init (int_info->pedantic_min_int);
158 mpz_neg (int_info->pedantic_min_int, int_info->huge);
160 mpz_init (int_info->min_int);
161 mpz_sub_ui (int_info->min_int, int_info->pedantic_min_int, 1);
164 mpfr_set_z (a, int_info->huge, GFC_RND_MODE);
165 mpfr_log10 (a, a, GFC_RND_MODE);
167 gfc_mpfr_to_mpz (r, a);
168 int_info->range = mpz_get_si (r);
173 for (real_info = gfc_real_kinds; real_info->kind != 0; real_info++)
175 gfc_set_model_kind (real_info->kind);
181 /* huge(x) = (1 - b**(-p)) * b**(emax-1) * b */
182 /* a = 1 - b**(-p) */
183 mpfr_set_ui (a, 1, GFC_RND_MODE);
184 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
185 mpfr_pow_si (b, b, -real_info->digits, GFC_RND_MODE);
186 mpfr_sub (a, a, b, GFC_RND_MODE);
188 /* c = b**(emax-1) */
189 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
190 mpfr_pow_ui (c, b, real_info->max_exponent - 1, GFC_RND_MODE);
192 /* a = a * c = (1 - b**(-p)) * b**(emax-1) */
193 mpfr_mul (a, a, c, GFC_RND_MODE);
195 /* a = (1 - b**(-p)) * b**(emax-1) * b */
196 mpfr_mul_ui (a, a, real_info->radix, GFC_RND_MODE);
198 mpfr_init (real_info->huge);
199 mpfr_set (real_info->huge, a, GFC_RND_MODE);
201 /* tiny(x) = b**(emin-1) */
202 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
203 mpfr_pow_si (b, b, real_info->min_exponent - 1, GFC_RND_MODE);
205 mpfr_init (real_info->tiny);
206 mpfr_set (real_info->tiny, b, GFC_RND_MODE);
208 /* subnormal (x) = b**(emin - digit) */
209 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
210 mpfr_pow_si (b, b, real_info->min_exponent - real_info->digits,
213 mpfr_init (real_info->subnormal);
214 mpfr_set (real_info->subnormal, b, GFC_RND_MODE);
216 /* epsilon(x) = b**(1-p) */
217 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
218 mpfr_pow_si (b, b, 1 - real_info->digits, GFC_RND_MODE);
220 mpfr_init (real_info->epsilon);
221 mpfr_set (real_info->epsilon, b, GFC_RND_MODE);
223 /* range(x) = int(min(log10(huge(x)), -log10(tiny)) */
224 mpfr_log10 (a, real_info->huge, GFC_RND_MODE);
225 mpfr_log10 (b, real_info->tiny, GFC_RND_MODE);
226 mpfr_neg (b, b, GFC_RND_MODE);
229 mpfr_min (a, a, b, GFC_RND_MODE);
232 gfc_mpfr_to_mpz (r, a);
233 real_info->range = mpz_get_si (r);
235 /* precision(x) = int((p - 1) * log10(b)) + k */
236 mpfr_set_ui (a, real_info->radix, GFC_RND_MODE);
237 mpfr_log10 (a, a, GFC_RND_MODE);
239 mpfr_mul_ui (a, a, real_info->digits - 1, GFC_RND_MODE);
241 gfc_mpfr_to_mpz (r, a);
242 real_info->precision = mpz_get_si (r);
244 /* If the radix is an integral power of 10, add one to the precision. */
245 for (i = 10; i <= real_info->radix; i *= 10)
246 if (i == real_info->radix)
247 real_info->precision++;
258 /* Clean up, get rid of numeric constants. */
261 gfc_arith_done_1 (void)
263 gfc_integer_info *ip;
266 for (ip = gfc_integer_kinds; ip->kind; ip++)
268 mpz_clear (ip->min_int);
269 mpz_clear (ip->pedantic_min_int);
270 mpz_clear (ip->huge);
273 for (rp = gfc_real_kinds; rp->kind; rp++)
275 mpfr_clear (rp->epsilon);
276 mpfr_clear (rp->huge);
277 mpfr_clear (rp->tiny);
278 mpfr_clear (rp->subnormal);
283 /* Given an integer and a kind, make sure that the integer lies within
284 the range of the kind. Returns ARITH_OK, ARITH_ASYMMETRIC or
288 gfc_check_integer_range (mpz_t p, int kind)
293 i = gfc_validate_kind (BT_INTEGER, kind, false);
298 if (mpz_cmp (p, gfc_integer_kinds[i].pedantic_min_int) < 0)
299 result = ARITH_ASYMMETRIC;
303 if (gfc_option.flag_range_check == 0)
306 if (mpz_cmp (p, gfc_integer_kinds[i].min_int) < 0
307 || mpz_cmp (p, gfc_integer_kinds[i].huge) > 0)
308 result = ARITH_OVERFLOW;
314 /* Given a real and a kind, make sure that the real lies within the
315 range of the kind. Returns ARITH_OK, ARITH_OVERFLOW or
319 gfc_check_real_range (mpfr_t p, int kind)
325 i = gfc_validate_kind (BT_REAL, kind, false);
329 mpfr_abs (q, p, GFC_RND_MODE);
333 if (gfc_option.flag_range_check == 0)
336 retval = ARITH_OVERFLOW;
338 else if (mpfr_nan_p (p))
340 if (gfc_option.flag_range_check == 0)
345 else if (mpfr_sgn (q) == 0)
347 else if (mpfr_cmp (q, gfc_real_kinds[i].huge) > 0)
349 if (gfc_option.flag_range_check == 0)
351 mpfr_set_inf (p, mpfr_sgn (p));
355 retval = ARITH_OVERFLOW;
357 else if (mpfr_cmp (q, gfc_real_kinds[i].subnormal) < 0)
359 if (gfc_option.flag_range_check == 0)
361 if (mpfr_sgn (p) < 0)
363 mpfr_set_ui (p, 0, GFC_RND_MODE);
364 mpfr_set_si (q, -1, GFC_RND_MODE);
365 mpfr_copysign (p, p, q, GFC_RND_MODE);
368 mpfr_set_ui (p, 0, GFC_RND_MODE);
372 retval = ARITH_UNDERFLOW;
374 else if (mpfr_cmp (q, gfc_real_kinds[i].tiny) < 0)
379 /* Save current values of emin and emax. */
380 emin = mpfr_get_emin ();
381 emax = mpfr_get_emax ();
383 /* Set emin and emax for the current model number. */
384 en = gfc_real_kinds[i].min_exponent - gfc_real_kinds[i].digits + 1;
385 mpfr_set_emin ((mp_exp_t) en);
386 mpfr_set_emax ((mp_exp_t) gfc_real_kinds[i].max_exponent);
387 mpfr_subnormalize (q, 0, GFC_RND_MODE);
389 /* Reset emin and emax. */
390 mpfr_set_emin (emin);
391 mpfr_set_emax (emax);
393 /* Copy sign if needed. */
394 if (mpfr_sgn (p) < 0)
395 mpfr_neg (p, q, GMP_RNDN);
397 mpfr_set (p, q, GMP_RNDN);
410 /* Function to return a constant expression node of a given type and kind. */
413 gfc_constant_result (bt type, int kind, locus *where)
418 gfc_internal_error ("gfc_constant_result(): locus 'where' cannot be NULL");
420 result = gfc_get_expr ();
422 result->expr_type = EXPR_CONSTANT;
423 result->ts.type = type;
424 result->ts.kind = kind;
425 result->where = *where;
430 mpz_init (result->value.integer);
434 gfc_set_model_kind (kind);
435 mpfr_init (result->value.real);
439 gfc_set_model_kind (kind);
440 mpfr_init (result->value.complex.r);
441 mpfr_init (result->value.complex.i);
452 /* Low-level arithmetic functions. All of these subroutines assume
453 that all operands are of the same type and return an operand of the
454 same type. The other thing about these subroutines is that they
455 can fail in various ways -- overflow, underflow, division by zero,
456 zero raised to the zero, etc. */
459 gfc_arith_not (gfc_expr *op1, gfc_expr **resultp)
463 result = gfc_constant_result (BT_LOGICAL, op1->ts.kind, &op1->where);
464 result->value.logical = !op1->value.logical;
472 gfc_arith_and (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
476 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
478 result->value.logical = op1->value.logical && op2->value.logical;
486 gfc_arith_or (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
490 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
492 result->value.logical = op1->value.logical || op2->value.logical;
500 gfc_arith_eqv (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
504 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
506 result->value.logical = op1->value.logical == op2->value.logical;
514 gfc_arith_neqv (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
518 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
520 result->value.logical = op1->value.logical != op2->value.logical;
527 /* Make sure a constant numeric expression is within the range for
528 its type and kind. Note that there's also a gfc_check_range(),
529 but that one deals with the intrinsic RANGE function. */
532 gfc_range_check (gfc_expr *e)
540 rc = gfc_check_integer_range (e->value.integer, e->ts.kind);
544 rc = gfc_check_real_range (e->value.real, e->ts.kind);
545 if (rc == ARITH_UNDERFLOW)
546 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
547 if (rc == ARITH_OVERFLOW)
548 mpfr_set_inf (e->value.real, mpfr_sgn (e->value.real));
550 mpfr_set_nan (e->value.real);
554 rc = gfc_check_real_range (e->value.complex.r, e->ts.kind);
555 if (rc == ARITH_UNDERFLOW)
556 mpfr_set_ui (e->value.complex.r, 0, GFC_RND_MODE);
557 if (rc == ARITH_OVERFLOW)
558 mpfr_set_inf (e->value.complex.r, mpfr_sgn (e->value.complex.r));
560 mpfr_set_nan (e->value.complex.r);
562 rc2 = gfc_check_real_range (e->value.complex.i, e->ts.kind);
563 if (rc == ARITH_UNDERFLOW)
564 mpfr_set_ui (e->value.complex.i, 0, GFC_RND_MODE);
565 if (rc == ARITH_OVERFLOW)
566 mpfr_set_inf (e->value.complex.i, mpfr_sgn (e->value.complex.i));
568 mpfr_set_nan (e->value.complex.i);
575 gfc_internal_error ("gfc_range_check(): Bad type");
582 /* Several of the following routines use the same set of statements to
583 check the validity of the result. Encapsulate the checking here. */
586 check_result (arith rc, gfc_expr *x, gfc_expr *r, gfc_expr **rp)
590 if (val == ARITH_UNDERFLOW)
592 if (gfc_option.warn_underflow)
593 gfc_warning (gfc_arith_error (val), &x->where);
597 if (val == ARITH_ASYMMETRIC)
599 gfc_warning (gfc_arith_error (val), &x->where);
612 /* It may seem silly to have a subroutine that actually computes the
613 unary plus of a constant, but it prevents us from making exceptions
614 in the code elsewhere. Used for unary plus and parenthesized
618 gfc_arith_identity (gfc_expr *op1, gfc_expr **resultp)
620 *resultp = gfc_copy_expr (op1);
626 gfc_arith_uminus (gfc_expr *op1, gfc_expr **resultp)
631 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
633 switch (op1->ts.type)
636 mpz_neg (result->value.integer, op1->value.integer);
640 mpfr_neg (result->value.real, op1->value.real, GFC_RND_MODE);
644 mpfr_neg (result->value.complex.r, op1->value.complex.r, GFC_RND_MODE);
645 mpfr_neg (result->value.complex.i, op1->value.complex.i, GFC_RND_MODE);
649 gfc_internal_error ("gfc_arith_uminus(): Bad basic type");
652 rc = gfc_range_check (result);
654 return check_result (rc, op1, result, resultp);
659 gfc_arith_plus (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
664 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
666 switch (op1->ts.type)
669 mpz_add (result->value.integer, op1->value.integer, op2->value.integer);
673 mpfr_add (result->value.real, op1->value.real, op2->value.real,
678 mpfr_add (result->value.complex.r, op1->value.complex.r,
679 op2->value.complex.r, GFC_RND_MODE);
681 mpfr_add (result->value.complex.i, op1->value.complex.i,
682 op2->value.complex.i, GFC_RND_MODE);
686 gfc_internal_error ("gfc_arith_plus(): Bad basic type");
689 rc = gfc_range_check (result);
691 return check_result (rc, op1, result, resultp);
696 gfc_arith_minus (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
701 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
703 switch (op1->ts.type)
706 mpz_sub (result->value.integer, op1->value.integer, op2->value.integer);
710 mpfr_sub (result->value.real, op1->value.real, op2->value.real,
715 mpfr_sub (result->value.complex.r, op1->value.complex.r,
716 op2->value.complex.r, GFC_RND_MODE);
718 mpfr_sub (result->value.complex.i, op1->value.complex.i,
719 op2->value.complex.i, GFC_RND_MODE);
723 gfc_internal_error ("gfc_arith_minus(): Bad basic type");
726 rc = gfc_range_check (result);
728 return check_result (rc, op1, result, resultp);
733 gfc_arith_times (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
739 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
741 switch (op1->ts.type)
744 mpz_mul (result->value.integer, op1->value.integer, op2->value.integer);
748 mpfr_mul (result->value.real, op1->value.real, op2->value.real,
753 gfc_set_model (op1->value.complex.r);
757 mpfr_mul (x, op1->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
758 mpfr_mul (y, op1->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
759 mpfr_sub (result->value.complex.r, x, y, GFC_RND_MODE);
761 mpfr_mul (x, op1->value.complex.r, op2->value.complex.i, GFC_RND_MODE);
762 mpfr_mul (y, op1->value.complex.i, op2->value.complex.r, GFC_RND_MODE);
763 mpfr_add (result->value.complex.i, x, y, GFC_RND_MODE);
770 gfc_internal_error ("gfc_arith_times(): Bad basic type");
773 rc = gfc_range_check (result);
775 return check_result (rc, op1, result, resultp);
780 gfc_arith_divide (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
788 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
790 switch (op1->ts.type)
793 if (mpz_sgn (op2->value.integer) == 0)
799 mpz_tdiv_q (result->value.integer, op1->value.integer,
804 if (mpfr_sgn (op2->value.real) == 0 && gfc_option.flag_range_check == 1)
810 mpfr_div (result->value.real, op1->value.real, op2->value.real,
815 if (mpfr_sgn (op2->value.complex.r) == 0
816 && mpfr_sgn (op2->value.complex.i) == 0
817 && gfc_option.flag_range_check == 1)
823 gfc_set_model (op1->value.complex.r);
828 mpfr_mul (x, op2->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
829 mpfr_mul (y, op2->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
830 mpfr_add (div, x, y, GFC_RND_MODE);
832 mpfr_mul (x, op1->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
833 mpfr_mul (y, op1->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
834 mpfr_add (result->value.complex.r, x, y, GFC_RND_MODE);
835 mpfr_div (result->value.complex.r, result->value.complex.r, div,
838 mpfr_mul (x, op1->value.complex.i, op2->value.complex.r, GFC_RND_MODE);
839 mpfr_mul (y, op1->value.complex.r, op2->value.complex.i, GFC_RND_MODE);
840 mpfr_sub (result->value.complex.i, x, y, GFC_RND_MODE);
841 mpfr_div (result->value.complex.i, result->value.complex.i, div,
850 gfc_internal_error ("gfc_arith_divide(): Bad basic type");
854 rc = gfc_range_check (result);
856 return check_result (rc, op1, result, resultp);
860 /* Compute the reciprocal of a complex number (guaranteed nonzero). */
863 complex_reciprocal (gfc_expr *op)
865 mpfr_t mod, a, re, im;
867 gfc_set_model (op->value.complex.r);
873 mpfr_mul (mod, op->value.complex.r, op->value.complex.r, GFC_RND_MODE);
874 mpfr_mul (a, op->value.complex.i, op->value.complex.i, GFC_RND_MODE);
875 mpfr_add (mod, mod, a, GFC_RND_MODE);
877 mpfr_div (re, op->value.complex.r, mod, GFC_RND_MODE);
879 mpfr_neg (im, op->value.complex.i, GFC_RND_MODE);
880 mpfr_div (im, im, mod, GFC_RND_MODE);
882 mpfr_set (op->value.complex.r, re, GFC_RND_MODE);
883 mpfr_set (op->value.complex.i, im, GFC_RND_MODE);
892 /* Raise a complex number to positive power (power > 0).
893 This function will modify the content of power.
895 Use Binary Method, which is not an optimal but a simple and reasonable
896 arithmetic. See section 4.6.3, "Evaluation of Powers" of Donald E. Knuth,
897 "Seminumerical Algorithms", Vol. 2, "The Art of Computer Programming",
898 3rd Edition, 1998. */
901 complex_pow (gfc_expr *result, gfc_expr *base, mpz_t power)
903 mpfr_t x_r, x_i, tmp, re, im;
905 gfc_set_model (base->value.complex.r);
913 mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE);
914 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
917 mpfr_set (x_r, base->value.complex.r, GFC_RND_MODE);
918 mpfr_set (x_i, base->value.complex.i, GFC_RND_MODE);
920 /* Macro for complex multiplication. We have to take care that
921 res_r/res_i and a_r/a_i can (and will) be the same variable. */
922 #define CMULT(res_r,res_i,a_r,a_i,b_r,b_i) \
923 mpfr_mul (re, a_r, b_r, GFC_RND_MODE), \
924 mpfr_mul (tmp, a_i, b_i, GFC_RND_MODE), \
925 mpfr_sub (re, re, tmp, GFC_RND_MODE), \
927 mpfr_mul (im, a_r, b_i, GFC_RND_MODE), \
928 mpfr_mul (tmp, a_i, b_r, GFC_RND_MODE), \
929 mpfr_add (res_i, im, tmp, GFC_RND_MODE), \
930 mpfr_set (res_r, re, GFC_RND_MODE)
932 #define res_r result->value.complex.r
933 #define res_i result->value.complex.i
935 /* for (; power > 0; x *= x) */
936 for (; mpz_cmp_si (power, 0) > 0; CMULT(x_r,x_i,x_r,x_i,x_r,x_i))
938 /* if (power & 1) res = res * x; */
939 if (mpz_congruent_ui_p (power, 1, 2))
940 CMULT(res_r,res_i,res_r,res_i,x_r,x_i);
943 mpz_fdiv_q_ui (power, power, 2);
958 /* Raise a number to an integer power. */
961 gfc_arith_power (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
967 gcc_assert (op2->expr_type == EXPR_CONSTANT && op2->ts.type == BT_INTEGER);
970 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
971 power_sign = mpz_sgn (op2->value.integer);
975 /* Handle something to the zeroth power. Since we're dealing
976 with integral exponents, there is no ambiguity in the
977 limiting procedure used to determine the value of 0**0. */
978 switch (op1->ts.type)
981 mpz_set_ui (result->value.integer, 1);
985 mpfr_set_ui (result->value.real, 1, GFC_RND_MODE);
989 mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE);
990 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
994 gfc_internal_error ("gfc_arith_power(): Bad base");
999 switch (op1->ts.type)
1005 /* First, we simplify the cases of op1 == 1, 0 or -1. */
1006 if (mpz_cmp_si (op1->value.integer, 1) == 0)
1009 mpz_set_si (result->value.integer, 1);
1011 else if (mpz_cmp_si (op1->value.integer, 0) == 0)
1013 /* 0**op2 == 0, if op2 > 0
1014 0**op2 overflow, if op2 < 0 ; in that case, we
1015 set the result to 0 and return ARITH_DIV0. */
1016 mpz_set_si (result->value.integer, 0);
1017 if (mpz_cmp_si (op2->value.integer, 0) < 0)
1020 else if (mpz_cmp_si (op1->value.integer, -1) == 0)
1022 /* (-1)**op2 == (-1)**(mod(op2,2)) */
1023 unsigned int odd = mpz_fdiv_ui (op2->value.integer, 2);
1025 mpz_set_si (result->value.integer, -1);
1027 mpz_set_si (result->value.integer, 1);
1029 /* Then, we take care of op2 < 0. */
1030 else if (mpz_cmp_si (op2->value.integer, 0) < 0)
1032 /* if op2 < 0, op1**op2 == 0 because abs(op1) > 1. */
1033 mpz_set_si (result->value.integer, 0);
1035 else if (gfc_extract_int (op2, &power) != NULL)
1037 /* If op2 doesn't fit in an int, the exponentiation will
1038 overflow, because op2 > 0 and abs(op1) > 1. */
1040 int i = gfc_validate_kind (BT_INTEGER, result->ts.kind, false);
1042 if (gfc_option.flag_range_check)
1043 rc = ARITH_OVERFLOW;
1045 /* Still, we want to give the same value as the processor. */
1047 mpz_add_ui (max, gfc_integer_kinds[i].huge, 1);
1048 mpz_mul_ui (max, max, 2);
1049 mpz_powm (result->value.integer, op1->value.integer,
1050 op2->value.integer, max);
1054 mpz_pow_ui (result->value.integer, op1->value.integer, power);
1059 mpfr_pow_z (result->value.real, op1->value.real, op2->value.integer,
1067 /* Compute op1**abs(op2) */
1069 mpz_abs (apower, op2->value.integer);
1070 complex_pow (result, op1, apower);
1073 /* If (op2 < 0), compute the inverse. */
1075 complex_reciprocal (result);
1086 rc = gfc_range_check (result);
1088 return check_result (rc, op1, result, resultp);
1092 /* Concatenate two string constants. */
1095 gfc_arith_concat (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1100 result = gfc_constant_result (BT_CHARACTER, gfc_default_character_kind,
1103 len = op1->value.character.length + op2->value.character.length;
1105 result->value.character.string = gfc_getmem (len + 1);
1106 result->value.character.length = len;
1108 memcpy (result->value.character.string, op1->value.character.string,
1109 op1->value.character.length);
1111 memcpy (result->value.character.string + op1->value.character.length,
1112 op2->value.character.string, op2->value.character.length);
1114 result->value.character.string[len] = '\0';
1121 /* Comparison between real values; returns 0 if (op1 .op. op2) is true.
1122 This function mimics mpr_cmp but takes NaN into account. */
1125 compare_real (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op)
1131 rc = mpfr_equal_p (op1->value.real, op2->value.real) ? 0 : 1;
1134 rc = mpfr_greater_p (op1->value.real, op2->value.real) ? 1 : -1;
1137 rc = mpfr_greaterequal_p (op1->value.real, op2->value.real) ? 1 : -1;
1140 rc = mpfr_less_p (op1->value.real, op2->value.real) ? -1 : 1;
1143 rc = mpfr_lessequal_p (op1->value.real, op2->value.real) ? -1 : 1;
1146 gfc_internal_error ("compare_real(): Bad operator");
1152 /* Comparison operators. Assumes that the two expression nodes
1153 contain two constants of the same type. The op argument is
1154 needed to handle NaN correctly. */
1157 gfc_compare_expr (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op)
1161 switch (op1->ts.type)
1164 rc = mpz_cmp (op1->value.integer, op2->value.integer);
1168 rc = compare_real (op1, op2, op);
1172 rc = gfc_compare_string (op1, op2);
1176 rc = ((!op1->value.logical && op2->value.logical)
1177 || (op1->value.logical && !op2->value.logical));
1181 gfc_internal_error ("gfc_compare_expr(): Bad basic type");
1188 /* Compare a pair of complex numbers. Naturally, this is only for
1189 equality and nonequality. */
1192 compare_complex (gfc_expr *op1, gfc_expr *op2)
1194 return (mpfr_equal_p (op1->value.complex.r, op2->value.complex.r)
1195 && mpfr_equal_p (op1->value.complex.i, op2->value.complex.i));
1199 /* Given two constant strings and the inverse collating sequence, compare the
1200 strings. We return -1 for a < b, 0 for a == b and 1 for a > b.
1201 We use the processor's default collating sequence. */
1204 gfc_compare_string (gfc_expr *a, gfc_expr *b)
1206 int len, alen, blen, i, ac, bc;
1208 alen = a->value.character.length;
1209 blen = b->value.character.length;
1211 len = MAX(alen, blen);
1213 for (i = 0; i < len; i++)
1215 /* We cast to unsigned char because default char, if it is signed,
1216 would lead to ac < 0 for string[i] > 127. */
1217 ac = (unsigned char) ((i < alen) ? a->value.character.string[i] : ' ');
1218 bc = (unsigned char) ((i < blen) ? b->value.character.string[i] : ' ');
1226 /* Strings are equal */
1232 gfc_compare_with_Cstring (gfc_expr *a, const char *b, bool case_sensitive)
1234 int len, alen, blen, i, ac, bc;
1236 alen = a->value.character.length;
1239 len = MAX(alen, blen);
1241 for (i = 0; i < len; i++)
1243 /* We cast to unsigned char because default char, if it is signed,
1244 would lead to ac < 0 for string[i] > 127. */
1245 ac = (unsigned char) ((i < alen) ? a->value.character.string[i] : ' ');
1246 bc = (unsigned char) ((i < blen) ? b[i] : ' ');
1248 if (!case_sensitive)
1260 /* Strings are equal */
1265 /* Specific comparison subroutines. */
1268 gfc_arith_eq (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1272 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1274 result->value.logical = (op1->ts.type == BT_COMPLEX)
1275 ? compare_complex (op1, op2)
1276 : (gfc_compare_expr (op1, op2, INTRINSIC_EQ) == 0);
1284 gfc_arith_ne (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1288 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1290 result->value.logical = (op1->ts.type == BT_COMPLEX)
1291 ? !compare_complex (op1, op2)
1292 : (gfc_compare_expr (op1, op2, INTRINSIC_EQ) != 0);
1300 gfc_arith_gt (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1304 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1306 result->value.logical = (gfc_compare_expr (op1, op2, INTRINSIC_GT) > 0);
1314 gfc_arith_ge (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1318 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1320 result->value.logical = (gfc_compare_expr (op1, op2, INTRINSIC_GE) >= 0);
1328 gfc_arith_lt (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1332 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1334 result->value.logical = (gfc_compare_expr (op1, op2, INTRINSIC_LT) < 0);
1342 gfc_arith_le (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1346 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1348 result->value.logical = (gfc_compare_expr (op1, op2, INTRINSIC_LE) <= 0);
1356 reduce_unary (arith (*eval) (gfc_expr *, gfc_expr **), gfc_expr *op,
1359 gfc_constructor *c, *head;
1363 if (op->expr_type == EXPR_CONSTANT)
1364 return eval (op, result);
1367 head = gfc_copy_constructor (op->value.constructor);
1369 for (c = head; c; c = c->next)
1371 rc = reduce_unary (eval, c->expr, &r);
1376 gfc_replace_expr (c->expr, r);
1380 gfc_free_constructor (head);
1383 r = gfc_get_expr ();
1384 r->expr_type = EXPR_ARRAY;
1385 r->value.constructor = head;
1386 r->shape = gfc_copy_shape (op->shape, op->rank);
1388 r->ts = head->expr->ts;
1389 r->where = op->where;
1400 reduce_binary_ac (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1401 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1403 gfc_constructor *c, *head;
1407 head = gfc_copy_constructor (op1->value.constructor);
1410 for (c = head; c; c = c->next)
1412 if (c->expr->expr_type == EXPR_CONSTANT)
1413 rc = eval (c->expr, op2, &r);
1415 rc = reduce_binary_ac (eval, c->expr, op2, &r);
1420 gfc_replace_expr (c->expr, r);
1424 gfc_free_constructor (head);
1427 r = gfc_get_expr ();
1428 r->expr_type = EXPR_ARRAY;
1429 r->value.constructor = head;
1430 r->shape = gfc_copy_shape (op1->shape, op1->rank);
1432 r->ts = head->expr->ts;
1433 r->where = op1->where;
1434 r->rank = op1->rank;
1444 reduce_binary_ca (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1445 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1447 gfc_constructor *c, *head;
1451 head = gfc_copy_constructor (op2->value.constructor);
1454 for (c = head; c; c = c->next)
1456 if (c->expr->expr_type == EXPR_CONSTANT)
1457 rc = eval (op1, c->expr, &r);
1459 rc = reduce_binary_ca (eval, op1, c->expr, &r);
1464 gfc_replace_expr (c->expr, r);
1468 gfc_free_constructor (head);
1471 r = gfc_get_expr ();
1472 r->expr_type = EXPR_ARRAY;
1473 r->value.constructor = head;
1474 r->shape = gfc_copy_shape (op2->shape, op2->rank);
1476 r->ts = head->expr->ts;
1477 r->where = op2->where;
1478 r->rank = op2->rank;
1487 /* We need a forward declaration of reduce_binary. */
1488 static arith reduce_binary (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1489 gfc_expr *op1, gfc_expr *op2, gfc_expr **result);
1493 reduce_binary_aa (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1494 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1496 gfc_constructor *c, *d, *head;
1500 head = gfc_copy_constructor (op1->value.constructor);
1503 d = op2->value.constructor;
1505 if (gfc_check_conformance ("elemental binary operation", op1, op2)
1507 rc = ARITH_INCOMMENSURATE;
1510 for (c = head; c; c = c->next, d = d->next)
1514 rc = ARITH_INCOMMENSURATE;
1518 rc = reduce_binary (eval, c->expr, d->expr, &r);
1522 gfc_replace_expr (c->expr, r);
1526 rc = ARITH_INCOMMENSURATE;
1530 gfc_free_constructor (head);
1533 r = gfc_get_expr ();
1534 r->expr_type = EXPR_ARRAY;
1535 r->value.constructor = head;
1536 r->shape = gfc_copy_shape (op1->shape, op1->rank);
1538 r->ts = head->expr->ts;
1539 r->where = op1->where;
1540 r->rank = op1->rank;
1550 reduce_binary (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1551 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1553 if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_CONSTANT)
1554 return eval (op1, op2, result);
1556 if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_ARRAY)
1557 return reduce_binary_ca (eval, op1, op2, result);
1559 if (op1->expr_type == EXPR_ARRAY && op2->expr_type == EXPR_CONSTANT)
1560 return reduce_binary_ac (eval, op1, op2, result);
1562 return reduce_binary_aa (eval, op1, op2, result);
1568 arith (*f2)(gfc_expr *, gfc_expr **);
1569 arith (*f3)(gfc_expr *, gfc_expr *, gfc_expr **);
1573 /* High level arithmetic subroutines. These subroutines go into
1574 eval_intrinsic(), which can do one of several things to its
1575 operands. If the operands are incompatible with the intrinsic
1576 operation, we return a node pointing to the operands and hope that
1577 an operator interface is found during resolution.
1579 If the operands are compatible and are constants, then we try doing
1580 the arithmetic. We also handle the cases where either or both
1581 operands are array constructors. */
1584 eval_intrinsic (gfc_intrinsic_op operator,
1585 eval_f eval, gfc_expr *op1, gfc_expr *op2)
1587 gfc_expr temp, *result;
1591 gfc_clear_ts (&temp.ts);
1597 if (op1->ts.type != BT_LOGICAL)
1600 temp.ts.type = BT_LOGICAL;
1601 temp.ts.kind = gfc_default_logical_kind;
1605 /* Logical binary operators */
1608 case INTRINSIC_NEQV:
1610 if (op1->ts.type != BT_LOGICAL || op2->ts.type != BT_LOGICAL)
1613 temp.ts.type = BT_LOGICAL;
1614 temp.ts.kind = gfc_default_logical_kind;
1619 case INTRINSIC_UPLUS:
1620 case INTRINSIC_UMINUS:
1621 if (!gfc_numeric_ts (&op1->ts))
1628 case INTRINSIC_PARENTHESES:
1633 /* Additional restrictions for ordering relations. */
1635 case INTRINSIC_GE_OS:
1637 case INTRINSIC_LT_OS:
1639 case INTRINSIC_LE_OS:
1641 case INTRINSIC_GT_OS:
1642 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
1644 temp.ts.type = BT_LOGICAL;
1645 temp.ts.kind = gfc_default_logical_kind;
1651 case INTRINSIC_EQ_OS:
1653 case INTRINSIC_NE_OS:
1654 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
1657 temp.ts.type = BT_LOGICAL;
1658 temp.ts.kind = gfc_default_logical_kind;
1663 /* Numeric binary */
1664 case INTRINSIC_PLUS:
1665 case INTRINSIC_MINUS:
1666 case INTRINSIC_TIMES:
1667 case INTRINSIC_DIVIDE:
1668 case INTRINSIC_POWER:
1669 if (!gfc_numeric_ts (&op1->ts) || !gfc_numeric_ts (&op2->ts))
1672 /* Insert any necessary type conversions to make the operands
1675 temp.expr_type = EXPR_OP;
1676 gfc_clear_ts (&temp.ts);
1677 temp.value.op.operator = operator;
1679 temp.value.op.op1 = op1;
1680 temp.value.op.op2 = op2;
1682 gfc_type_convert_binary (&temp);
1684 if (operator == INTRINSIC_EQ || operator == INTRINSIC_NE
1685 || operator == INTRINSIC_GE || operator == INTRINSIC_GT
1686 || operator == INTRINSIC_LE || operator == INTRINSIC_LT
1687 || operator == INTRINSIC_EQ_OS || operator == INTRINSIC_NE_OS
1688 || operator == INTRINSIC_GE_OS || operator == INTRINSIC_GT_OS
1689 || operator == INTRINSIC_LE_OS || operator == INTRINSIC_LT_OS)
1691 temp.ts.type = BT_LOGICAL;
1692 temp.ts.kind = gfc_default_logical_kind;
1698 /* Character binary */
1699 case INTRINSIC_CONCAT:
1700 if (op1->ts.type != BT_CHARACTER || op2->ts.type != BT_CHARACTER)
1703 temp.ts.type = BT_CHARACTER;
1704 temp.ts.kind = gfc_default_character_kind;
1708 case INTRINSIC_USER:
1712 gfc_internal_error ("eval_intrinsic(): Bad operator");
1715 /* Try to combine the operators. */
1716 if (operator == INTRINSIC_POWER && op2->ts.type != BT_INTEGER)
1719 if (op1->expr_type != EXPR_CONSTANT
1720 && (op1->expr_type != EXPR_ARRAY
1721 || !gfc_is_constant_expr (op1) || !gfc_expanded_ac (op1)))
1725 && op2->expr_type != EXPR_CONSTANT
1726 && (op2->expr_type != EXPR_ARRAY
1727 || !gfc_is_constant_expr (op2) || !gfc_expanded_ac (op2)))
1731 rc = reduce_unary (eval.f2, op1, &result);
1733 rc = reduce_binary (eval.f3, op1, op2, &result);
1736 { /* Something went wrong. */
1737 gfc_error (gfc_arith_error (rc), &op1->where);
1741 gfc_free_expr (op1);
1742 gfc_free_expr (op2);
1746 /* Create a run-time expression. */
1747 result = gfc_get_expr ();
1748 result->ts = temp.ts;
1750 result->expr_type = EXPR_OP;
1751 result->value.op.operator = operator;
1753 result->value.op.op1 = op1;
1754 result->value.op.op2 = op2;
1756 result->where = op1->where;
1762 /* Modify type of expression for zero size array. */
1765 eval_type_intrinsic0 (gfc_intrinsic_op operator, gfc_expr *op)
1768 gfc_internal_error ("eval_type_intrinsic0(): op NULL");
1773 case INTRINSIC_GE_OS:
1775 case INTRINSIC_LT_OS:
1777 case INTRINSIC_LE_OS:
1779 case INTRINSIC_GT_OS:
1781 case INTRINSIC_EQ_OS:
1783 case INTRINSIC_NE_OS:
1784 op->ts.type = BT_LOGICAL;
1785 op->ts.kind = gfc_default_logical_kind;
1796 /* Return nonzero if the expression is a zero size array. */
1799 gfc_zero_size_array (gfc_expr *e)
1801 if (e->expr_type != EXPR_ARRAY)
1804 return e->value.constructor == NULL;
1808 /* Reduce a binary expression where at least one of the operands
1809 involves a zero-length array. Returns NULL if neither of the
1810 operands is a zero-length array. */
1813 reduce_binary0 (gfc_expr *op1, gfc_expr *op2)
1815 if (gfc_zero_size_array (op1))
1817 gfc_free_expr (op2);
1821 if (gfc_zero_size_array (op2))
1823 gfc_free_expr (op1);
1832 eval_intrinsic_f2 (gfc_intrinsic_op operator,
1833 arith (*eval) (gfc_expr *, gfc_expr **),
1834 gfc_expr *op1, gfc_expr *op2)
1841 if (gfc_zero_size_array (op1))
1842 return eval_type_intrinsic0 (operator, op1);
1846 result = reduce_binary0 (op1, op2);
1848 return eval_type_intrinsic0 (operator, result);
1852 return eval_intrinsic (operator, f, op1, op2);
1857 eval_intrinsic_f3 (gfc_intrinsic_op operator,
1858 arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1859 gfc_expr *op1, gfc_expr *op2)
1864 result = reduce_binary0 (op1, op2);
1866 return eval_type_intrinsic0(operator, result);
1869 return eval_intrinsic (operator, f, op1, op2);
1874 gfc_parentheses (gfc_expr *op)
1876 if (gfc_is_constant_expr (op))
1879 return eval_intrinsic_f2 (INTRINSIC_PARENTHESES, gfc_arith_identity,
1884 gfc_uplus (gfc_expr *op)
1886 return eval_intrinsic_f2 (INTRINSIC_UPLUS, gfc_arith_identity, op, NULL);
1891 gfc_uminus (gfc_expr *op)
1893 return eval_intrinsic_f2 (INTRINSIC_UMINUS, gfc_arith_uminus, op, NULL);
1898 gfc_add (gfc_expr *op1, gfc_expr *op2)
1900 return eval_intrinsic_f3 (INTRINSIC_PLUS, gfc_arith_plus, op1, op2);
1905 gfc_subtract (gfc_expr *op1, gfc_expr *op2)
1907 return eval_intrinsic_f3 (INTRINSIC_MINUS, gfc_arith_minus, op1, op2);
1912 gfc_multiply (gfc_expr *op1, gfc_expr *op2)
1914 return eval_intrinsic_f3 (INTRINSIC_TIMES, gfc_arith_times, op1, op2);
1919 gfc_divide (gfc_expr *op1, gfc_expr *op2)
1921 return eval_intrinsic_f3 (INTRINSIC_DIVIDE, gfc_arith_divide, op1, op2);
1926 gfc_power (gfc_expr *op1, gfc_expr *op2)
1928 return eval_intrinsic_f3 (INTRINSIC_POWER, gfc_arith_power, op1, op2);
1933 gfc_concat (gfc_expr *op1, gfc_expr *op2)
1935 return eval_intrinsic_f3 (INTRINSIC_CONCAT, gfc_arith_concat, op1, op2);
1940 gfc_and (gfc_expr *op1, gfc_expr *op2)
1942 return eval_intrinsic_f3 (INTRINSIC_AND, gfc_arith_and, op1, op2);
1947 gfc_or (gfc_expr *op1, gfc_expr *op2)
1949 return eval_intrinsic_f3 (INTRINSIC_OR, gfc_arith_or, op1, op2);
1954 gfc_not (gfc_expr *op1)
1956 return eval_intrinsic_f2 (INTRINSIC_NOT, gfc_arith_not, op1, NULL);
1961 gfc_eqv (gfc_expr *op1, gfc_expr *op2)
1963 return eval_intrinsic_f3 (INTRINSIC_EQV, gfc_arith_eqv, op1, op2);
1968 gfc_neqv (gfc_expr *op1, gfc_expr *op2)
1970 return eval_intrinsic_f3 (INTRINSIC_NEQV, gfc_arith_neqv, op1, op2);
1975 gfc_eq (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op)
1977 return eval_intrinsic_f3 (op, gfc_arith_eq, op1, op2);
1982 gfc_ne (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op)
1984 return eval_intrinsic_f3 (op, gfc_arith_ne, op1, op2);
1989 gfc_gt (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op)
1991 return eval_intrinsic_f3 (op, gfc_arith_gt, op1, op2);
1996 gfc_ge (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op)
1998 return eval_intrinsic_f3 (op, gfc_arith_ge, op1, op2);
2003 gfc_lt (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op)
2005 return eval_intrinsic_f3 (op, gfc_arith_lt, op1, op2);
2010 gfc_le (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op)
2012 return eval_intrinsic_f3 (op, gfc_arith_le, op1, op2);
2016 /* Convert an integer string to an expression node. */
2019 gfc_convert_integer (const char *buffer, int kind, int radix, locus *where)
2024 e = gfc_constant_result (BT_INTEGER, kind, where);
2025 /* A leading plus is allowed, but not by mpz_set_str. */
2026 if (buffer[0] == '+')
2030 mpz_set_str (e->value.integer, t, radix);
2036 /* Convert a real string to an expression node. */
2039 gfc_convert_real (const char *buffer, int kind, locus *where)
2043 e = gfc_constant_result (BT_REAL, kind, where);
2044 mpfr_set_str (e->value.real, buffer, 10, GFC_RND_MODE);
2050 /* Convert a pair of real, constant expression nodes to a single
2051 complex expression node. */
2054 gfc_convert_complex (gfc_expr *real, gfc_expr *imag, int kind)
2058 e = gfc_constant_result (BT_COMPLEX, kind, &real->where);
2059 mpfr_set (e->value.complex.r, real->value.real, GFC_RND_MODE);
2060 mpfr_set (e->value.complex.i, imag->value.real, GFC_RND_MODE);
2066 /******* Simplification of intrinsic functions with constant arguments *****/
2069 /* Deal with an arithmetic error. */
2072 arith_error (arith rc, gfc_typespec *from, gfc_typespec *to, locus *where)
2077 gfc_error ("Arithmetic OK converting %s to %s at %L",
2078 gfc_typename (from), gfc_typename (to), where);
2080 case ARITH_OVERFLOW:
2081 gfc_error ("Arithmetic overflow converting %s to %s at %L. This check "
2082 "can be disabled with the option -fno-range-check",
2083 gfc_typename (from), gfc_typename (to), where);
2085 case ARITH_UNDERFLOW:
2086 gfc_error ("Arithmetic underflow converting %s to %s at %L",
2087 gfc_typename (from), gfc_typename (to), where);
2090 gfc_error ("Arithmetic NaN converting %s to %s at %L",
2091 gfc_typename (from), gfc_typename (to), where);
2094 gfc_error ("Division by zero converting %s to %s at %L",
2095 gfc_typename (from), gfc_typename (to), where);
2097 case ARITH_INCOMMENSURATE:
2098 gfc_error ("Array operands are incommensurate converting %s to %s at %L",
2099 gfc_typename (from), gfc_typename (to), where);
2101 case ARITH_ASYMMETRIC:
2102 gfc_error ("Integer outside symmetric range implied by Standard Fortran"
2103 " converting %s to %s at %L",
2104 gfc_typename (from), gfc_typename (to), where);
2107 gfc_internal_error ("gfc_arith_error(): Bad error code");
2110 /* TODO: Do something about the error, ie, throw exception, return
2115 /* Convert integers to integers. */
2118 gfc_int2int (gfc_expr *src, int kind)
2123 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2125 mpz_set (result->value.integer, src->value.integer);
2127 if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK)
2129 if (rc == ARITH_ASYMMETRIC)
2131 gfc_warning (gfc_arith_error (rc), &src->where);
2135 arith_error (rc, &src->ts, &result->ts, &src->where);
2136 gfc_free_expr (result);
2145 /* Convert integers to reals. */
2148 gfc_int2real (gfc_expr *src, int kind)
2153 result = gfc_constant_result (BT_REAL, kind, &src->where);
2155 mpfr_set_z (result->value.real, src->value.integer, GFC_RND_MODE);
2157 if ((rc = gfc_check_real_range (result->value.real, kind)) != ARITH_OK)
2159 arith_error (rc, &src->ts, &result->ts, &src->where);
2160 gfc_free_expr (result);
2168 /* Convert default integer to default complex. */
2171 gfc_int2complex (gfc_expr *src, int kind)
2176 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2178 mpfr_set_z (result->value.complex.r, src->value.integer, GFC_RND_MODE);
2179 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2181 if ((rc = gfc_check_real_range (result->value.complex.r, kind)) != ARITH_OK)
2183 arith_error (rc, &src->ts, &result->ts, &src->where);
2184 gfc_free_expr (result);
2192 /* Convert default real to default integer. */
2195 gfc_real2int (gfc_expr *src, int kind)
2200 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2202 gfc_mpfr_to_mpz (result->value.integer, src->value.real);
2204 if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK)
2206 arith_error (rc, &src->ts, &result->ts, &src->where);
2207 gfc_free_expr (result);
2215 /* Convert real to real. */
2218 gfc_real2real (gfc_expr *src, int kind)
2223 result = gfc_constant_result (BT_REAL, kind, &src->where);
2225 mpfr_set (result->value.real, src->value.real, GFC_RND_MODE);
2227 rc = gfc_check_real_range (result->value.real, kind);
2229 if (rc == ARITH_UNDERFLOW)
2231 if (gfc_option.warn_underflow)
2232 gfc_warning (gfc_arith_error (rc), &src->where);
2233 mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
2235 else if (rc != ARITH_OK)
2237 arith_error (rc, &src->ts, &result->ts, &src->where);
2238 gfc_free_expr (result);
2246 /* Convert real to complex. */
2249 gfc_real2complex (gfc_expr *src, int kind)
2254 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2256 mpfr_set (result->value.complex.r, src->value.real, GFC_RND_MODE);
2257 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2259 rc = gfc_check_real_range (result->value.complex.r, kind);
2261 if (rc == ARITH_UNDERFLOW)
2263 if (gfc_option.warn_underflow)
2264 gfc_warning (gfc_arith_error (rc), &src->where);
2265 mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE);
2267 else if (rc != ARITH_OK)
2269 arith_error (rc, &src->ts, &result->ts, &src->where);
2270 gfc_free_expr (result);
2278 /* Convert complex to integer. */
2281 gfc_complex2int (gfc_expr *src, int kind)
2286 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2288 gfc_mpfr_to_mpz (result->value.integer, src->value.complex.r);
2290 if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK)
2292 arith_error (rc, &src->ts, &result->ts, &src->where);
2293 gfc_free_expr (result);
2301 /* Convert complex to real. */
2304 gfc_complex2real (gfc_expr *src, int kind)
2309 result = gfc_constant_result (BT_REAL, kind, &src->where);
2311 mpfr_set (result->value.real, src->value.complex.r, GFC_RND_MODE);
2313 rc = gfc_check_real_range (result->value.real, kind);
2315 if (rc == ARITH_UNDERFLOW)
2317 if (gfc_option.warn_underflow)
2318 gfc_warning (gfc_arith_error (rc), &src->where);
2319 mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
2323 arith_error (rc, &src->ts, &result->ts, &src->where);
2324 gfc_free_expr (result);
2332 /* Convert complex to complex. */
2335 gfc_complex2complex (gfc_expr *src, int kind)
2340 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2342 mpfr_set (result->value.complex.r, src->value.complex.r, GFC_RND_MODE);
2343 mpfr_set (result->value.complex.i, src->value.complex.i, GFC_RND_MODE);
2345 rc = gfc_check_real_range (result->value.complex.r, kind);
2347 if (rc == ARITH_UNDERFLOW)
2349 if (gfc_option.warn_underflow)
2350 gfc_warning (gfc_arith_error (rc), &src->where);
2351 mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE);
2353 else if (rc != ARITH_OK)
2355 arith_error (rc, &src->ts, &result->ts, &src->where);
2356 gfc_free_expr (result);
2360 rc = gfc_check_real_range (result->value.complex.i, kind);
2362 if (rc == ARITH_UNDERFLOW)
2364 if (gfc_option.warn_underflow)
2365 gfc_warning (gfc_arith_error (rc), &src->where);
2366 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2368 else if (rc != ARITH_OK)
2370 arith_error (rc, &src->ts, &result->ts, &src->where);
2371 gfc_free_expr (result);
2379 /* Logical kind conversion. */
2382 gfc_log2log (gfc_expr *src, int kind)
2386 result = gfc_constant_result (BT_LOGICAL, kind, &src->where);
2387 result->value.logical = src->value.logical;
2393 /* Convert logical to integer. */
2396 gfc_log2int (gfc_expr *src, int kind)
2400 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2401 mpz_set_si (result->value.integer, src->value.logical);
2407 /* Convert integer to logical. */
2410 gfc_int2log (gfc_expr *src, int kind)
2414 result = gfc_constant_result (BT_LOGICAL, kind, &src->where);
2415 result->value.logical = (mpz_cmp_si (src->value.integer, 0) != 0);
2421 /* Helper function to set the representation in a Hollerith conversion.
2422 This assumes that the ts.type and ts.kind of the result have already
2426 hollerith2representation (gfc_expr *result, gfc_expr *src)
2428 int src_len, result_len;
2430 src_len = src->representation.length;
2431 result_len = gfc_target_expr_size (result);
2433 if (src_len > result_len)
2435 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2436 &src->where, gfc_typename(&result->ts));
2439 result->representation.string = gfc_getmem (result_len + 1);
2440 memcpy (result->representation.string, src->representation.string,
2441 MIN (result_len, src_len));
2443 if (src_len < result_len)
2444 memset (&result->representation.string[src_len], ' ', result_len - src_len);
2446 result->representation.string[result_len] = '\0'; /* For debugger */
2447 result->representation.length = result_len;
2451 /* Convert Hollerith to integer. The constant will be padded or truncated. */
2454 gfc_hollerith2int (gfc_expr *src, int kind)
2458 result = gfc_get_expr ();
2459 result->expr_type = EXPR_CONSTANT;
2460 result->ts.type = BT_INTEGER;
2461 result->ts.kind = kind;
2462 result->where = src->where;
2464 hollerith2representation (result, src);
2465 gfc_interpret_integer(kind, (unsigned char *) result->representation.string,
2466 result->representation.length, result->value.integer);
2472 /* Convert Hollerith to real. The constant will be padded or truncated. */
2475 gfc_hollerith2real (gfc_expr *src, int kind)
2480 len = src->value.character.length;
2482 result = gfc_get_expr ();
2483 result->expr_type = EXPR_CONSTANT;
2484 result->ts.type = BT_REAL;
2485 result->ts.kind = kind;
2486 result->where = src->where;
2488 hollerith2representation (result, src);
2489 gfc_interpret_float(kind, (unsigned char *) result->representation.string,
2490 result->representation.length, result->value.real);
2496 /* Convert Hollerith to complex. The constant will be padded or truncated. */
2499 gfc_hollerith2complex (gfc_expr *src, int kind)
2504 len = src->value.character.length;
2506 result = gfc_get_expr ();
2507 result->expr_type = EXPR_CONSTANT;
2508 result->ts.type = BT_COMPLEX;
2509 result->ts.kind = kind;
2510 result->where = src->where;
2512 hollerith2representation (result, src);
2513 gfc_interpret_complex(kind, (unsigned char *) result->representation.string,
2514 result->representation.length, result->value.complex.r,
2515 result->value.complex.i);
2521 /* Convert Hollerith to character. */
2524 gfc_hollerith2character (gfc_expr *src, int kind)
2528 result = gfc_copy_expr (src);
2529 result->ts.type = BT_CHARACTER;
2530 result->ts.kind = kind;
2532 result->value.character.string = result->representation.string;
2533 result->value.character.length = result->representation.length;
2539 /* Convert Hollerith to logical. The constant will be padded or truncated. */
2542 gfc_hollerith2logical (gfc_expr *src, int kind)
2547 len = src->value.character.length;
2549 result = gfc_get_expr ();
2550 result->expr_type = EXPR_CONSTANT;
2551 result->ts.type = BT_LOGICAL;
2552 result->ts.kind = kind;
2553 result->where = src->where;
2555 hollerith2representation (result, src);
2556 gfc_interpret_logical(kind, (unsigned char *) result->representation.string,
2557 result->representation.length, &result->value.logical);
2563 /* Returns an initializer whose value is one higher than the value of the
2564 LAST_INITIALIZER argument. If the argument is NULL, the
2565 initializers value will be set to zero. The initializer's kind
2566 will be set to gfc_c_int_kind.
2568 If -fshort-enums is given, the appropriate kind will be selected
2569 later after all enumerators have been parsed. A warning is issued
2570 here if an initializer exceeds gfc_c_int_kind. */
2573 gfc_enum_initializer (gfc_expr *last_initializer, locus where)
2577 result = gfc_get_expr ();
2578 result->expr_type = EXPR_CONSTANT;
2579 result->ts.type = BT_INTEGER;
2580 result->ts.kind = gfc_c_int_kind;
2581 result->where = where;
2583 mpz_init (result->value.integer);
2585 if (last_initializer != NULL)
2587 mpz_add_ui (result->value.integer, last_initializer->value.integer, 1);
2588 result->where = last_initializer->where;
2590 if (gfc_check_integer_range (result->value.integer,
2591 gfc_c_int_kind) != ARITH_OK)
2593 gfc_error ("Enumerator exceeds the C integer type at %C");
2599 /* Control comes here, if it's the very first enumerator and no
2600 initializer has been given. It will be initialized to zero. */
2601 mpz_set_si (result->value.integer, 0);