From 0cd0559e8ceb1764a41c8964f30a7de025956e8a Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Fri, 27 Aug 2010 21:17:45 +0200 Subject: [PATCH] re PR fortran/33197 (Fortran 2008: math functions) gcc/fortran/ 2010-08-27 Tobias Burnus PR fortran/33197 * gcc/fortran/intrinsic.c (add_functions): Add norm2 and parity. * gcc/fortran/intrinsic.h (gfc_check_norm2, gfc_check_parity): gfc_simplify_norm2, gfc_simplify_parity, gfc_resolve_norm2, gfc_resolve_parity): New prototypes. * gcc/fortran/gfortran.h (gfc_isym_id): New enum items GFC_ISYM_NORM2 and GFC_ISYM_PARITY. * gcc/fortran/iresolve.c (gfc_resolve_norm2, gfc_resolve_parity): New functions. * gcc/fortran/check.c (gfc_check_norm2, gfc_check_parity): New functions. * gcc/fortran/trans-intrinsic.c (gfc_conv_intrinsic_arith, gfc_conv_intrinsic_function): Handle NORM2 and PARITY. * gcc/fortran/intrinsic.texi (NORM2, PARITY): Add. * gcc/fortran/simplify.c (simplify_transformation_to_array): Add post-processing opterator. (gfc_simplify_all, gfc_simplify_any, gfc_simplify_count, gfc_simplify_product, gfc_simplify_sum): Update call. (add_squared, do_sqrt, gfc_simplify_norm2, do_xor, gfc_simplify_parity): New functions. gcc/testsuite/ 2010-08-27 Tobias Burnus PR fortran/33197 * gcc/testsuite/gfortran.dg/norm2_1.f90: New. * gcc/testsuite/gfortran.dg/norm2_2.f90: New. * gcc/testsuite/gfortran.dg/norm2_3.f90: New. * gcc/testsuite/gfortran.dg/norm2_4.f90: New. * gcc/testsuite/gfortran.dg/parity_1.f90: New. * gcc/testsuite/gfortran.dg/parity_2.f90: New. * gcc/testsuite/gfortran.dg/parity_3.f90: New. libgfortran/ 2010-08-27 Tobias Burnus PR fortran/33197 * libgfortran/m4/ifunction.m4 (FINISH_ARRAY_FUNCTION, ARRAY_FUNCTION): Allow expression after loop. * libgfortran/m4/norm2.m4: New for _gfortran_norm2_r{4,8,10,16}. * libgfortran/m4/parity.m4: New for * _gfortran_parity_l{1,2,4,8,16}. * libgfortran/gfortran.map: Add new functions. * libgfortran/Makefile.am: Ditto. * libgfortran/m4/minloc1.m4: Add empty argument for * ARRAY_FUNCTION. * libgfortran/m4/maxloc1.m4: Ditto. * libgfortran/m4/all.m4: Ditto. * libgfortran/m4/minval.m4: Ditto. * libgfortran/m4/maxval.m4: Ditto. * libgfortran/m4/count.m4: Ditto. * libgfortran/m4/product.m4: Ditto. * libgfortran/m4/any.m4: Ditto. * Makefile.in: Regenerated. * generated/minval_r8.c: Regenerated. * generated/maxloc1_4_r8.c: Regenerated. * generated/minloc1_16_r16.c: Regenerated. * generated/norm2_r4.c: Regenerated. * generated/sum_i8.c: Regenerated. * generated/parity_l2.c: Regenerated. * generated/any_l16.c: Regenerated. * generated/maxval_i2.c: Regenerated. * generated/any_l2.c: Regenerated. * generated/product_r4.c: Regenerated. * generated/maxloc1_8_i4.c: Regenerated. * generated/parity_l16.c: Regenerated. * generated/all_l1.c: Regenerated. * generated/product_i2.c: Regenerated. * generated/minloc1_8_r16.c: Regenerated. * generated/maxloc1_8_r16.c: Regenerated. * generated/sum_r16.c: Regenerated. * generated/sum_i1.c: Regenerated. * generated/minloc1_4_r8.c: Regenerated. * generated/maxloc1_16_r16.c: Regenerated. * generated/minloc1_16_i4.c: Regenerated. * generated/maxloc1_16_i4.c: Regenerated. * generated/maxval_r16.c: Regenerated. * generated/product_c10.c: Regenerated. * generated/minloc1_8_i4.c: Regenerated. * generated/all_l2.c: Regenerated. * generated/product_c4.c: Regenerated. * generated/sum_r4.c: Regenerated. * generated/all_l16.c: Regenerated. * generated/minloc1_16_r10.c: Regenerated. * generated/sum_i2.c: Regenerated. * generated/maxloc1_8_r8.c: Regenerated. * generated/minval_i16.c: Regenerated. * generated/parity_l4.c: Regenerated. * generated/maxval_i4.c: Regenerated. * generated/any_l4.c: Regenerated. * generated/minval_i8.c: Regenerated. * generated/maxloc1_4_i8.c: Regenerated. * generated/minloc1_4_i16.c: Regenerated. * generated/maxloc1_4_i16.c: Regenerated. * generated/minloc1_8_r10.c: Regenerated. * generated/product_i4.c: Regenerated. * generated/maxloc1_8_r10.c: Regenerated. * generated/sum_c16.c: Regenerated. * generated/minloc1_16_r8.c: Regenerated. * generated/maxloc1_16_r8.c: Regenerated. * generated/count_4_l.c: Regenerated. * generated/sum_r10.c: Regenerated. * generated/count_8_l.c: Regenerated. * generated/sum_c4.c: Regenerated. * generated/maxloc1_16_r10.c: Regenerated. * generated/minloc1_8_r8.c: Regenerated. * generated/maxval_r10.c: Regenerated. * generated/minval_i1.c: Regenerated. * generated/maxloc1_4_i1.c: Regenerated. * generated/minloc1_4_i8.c: Regenerated. * generated/product_i16.c: Regenerated. * generated/all_l4.c: Regenerated. * generated/norm2_r16.c: Regenerated. * generated/minval_r4.c: Regenerated. * generated/maxloc1_4_r4.c: Regenerated. * generated/sum_i4.c: Regenerated. * generated/maxval_r8.c: Regenerated. * generated/norm2_r8.c: Regenerated. * generated/minloc1_4_i1.c: Regenerated. * generated/minval_r16.c: Regenerated. * generated/minval_i2.c: Regenerated. * generated/maxloc1_4_i2.c: Regenerated. * generated/product_r8.c: Regenerated. * generated/maxloc1_8_i8.c: Regenerated. * generated/sum_c10.c: Regenerated. * generated/minloc1_4_r16.c: Regenerated. * generated/maxloc1_4_r16.c: Regenerated. * generated/count_1_l.c: Regenerated. * generated/minloc1_4_r4.c: Regenerated. * generated/minloc1_16_i8.c: Regenerated. * generated/maxloc1_16_i8.c: Regenerated. * generated/minloc1_4_i2.c: Regenerated. * generated/maxloc1_8_i1.c: Regenerated. * generated/minloc1_8_i8.c: Regenerated. * generated/product_r16.c: Regenerated. * generated/product_c8.c: Regenerated. * generated/sum_r8.c: Regenerated. * generated/norm2_r10.c: Regenerated. * generated/minloc1_16_i16.c: Regenerated. * generated/maxloc1_8_r4.c: Regenerated. * generated/minloc1_16_i1.c: Regenerated. * generated/maxloc1_16_i1.c: Regenerated. * generated/minval_r10.c: Regenerated. * generated/count_16_l.c: Regenerated. * generated/parity_l8.c: Regenerated. * generated/minloc1_8_i1.c: Regenerated. * generated/minval_i4.c: Regenerated. * generated/maxloc1_4_i4.c: Regenerated. * generated/maxloc1_8_i2.c: Regenerated. * generated/maxval_i8.c: Regenerated. * generated/any_l8.c: Regenerated. * generated/minloc1_4_r10.c: Regenerated. * generated/minloc1_8_i16.c: Regenerated. * generated/maxloc1_4_r10.c: Regenerated. * generated/maxloc1_8_i16.c: Regenerated. * generated/minloc1_16_r4.c: Regenerated. * generated/maxloc1_16_r4.c: Regenerated. * generated/product_i8.c: Regenerated. * generated/sum_i16.c: Regenerated. * generated/count_2_l.c: Regenerated. * generated/maxloc1_16_i16.c: Regenerated. * generated/minloc1_8_r4.c: Regenerated. * generated/sum_c8.c: Regenerated. * generated/minloc1_16_i2.c: Regenerated. * generated/maxloc1_16_i2.c: Regenerated. * generated/parity_l1.c: Regenerated. * generated/maxval_i16.c: Regenerated. * generated/maxval_i1.c: Regenerated. * generated/minloc1_4_i4.c: Regenerated. * generated/any_l1.c: Regenerated. * generated/minloc1_8_i2.c: Regenerated. * generated/product_c16.c: Regenerated. * generated/product_r10.c: Regenerated. * generated/product_i1.c: Regenerated. * generated/all_l8.c: Regenerated. * generated/maxval_r4.c: Regenerated. From-SVN: r163595 --- gcc/fortran/ChangeLog | 23 +++ gcc/fortran/check.c | 31 ++++ gcc/fortran/gfortran.h | 2 + gcc/fortran/intrinsic.c | 15 ++ gcc/fortran/intrinsic.h | 6 + gcc/fortran/intrinsic.texi | 105 +++++++++++++ gcc/fortran/iresolve.c | 36 +++++ gcc/fortran/simplify.c | 110 ++++++++++++- gcc/fortran/trans-intrinsic.c | 123 +++++++++++++-- gcc/testsuite/ChangeLog | 11 ++ gcc/testsuite/gfortran.dg/norm2_1.f90 | 91 +++++++++++ gcc/testsuite/gfortran.dg/norm2_2.f90 | 14 ++ gcc/testsuite/gfortran.dg/norm2_3.f90 | 95 +++++++++++ gcc/testsuite/gfortran.dg/norm_4.f90 | 11 ++ gcc/testsuite/gfortran.dg/parity_1.f90 | 40 +++++ gcc/testsuite/gfortran.dg/parity_2.f90 | 13 ++ gcc/testsuite/gfortran.dg/parity_3.f90 | 10 ++ libgfortran/ChangeLog | 141 +++++++++++++++++ libgfortran/Makefile.am | 23 ++- libgfortran/Makefile.in | 165 +++++++++++++++----- libgfortran/generated/all_l1.c | 4 +- libgfortran/generated/all_l16.c | 4 +- libgfortran/generated/all_l2.c | 4 +- libgfortran/generated/all_l4.c | 4 +- libgfortran/generated/all_l8.c | 4 +- libgfortran/generated/any_l1.c | 4 +- libgfortran/generated/any_l16.c | 4 +- libgfortran/generated/any_l2.c | 4 +- libgfortran/generated/any_l4.c | 4 +- libgfortran/generated/any_l8.c | 4 +- libgfortran/generated/count_16_l.c | 4 +- libgfortran/generated/count_1_l.c | 4 +- libgfortran/generated/count_2_l.c | 4 +- libgfortran/generated/count_4_l.c | 4 +- libgfortran/generated/count_8_l.c | 4 +- libgfortran/generated/maxloc1_16_i1.c | 5 +- libgfortran/generated/maxloc1_16_i16.c | 5 +- libgfortran/generated/maxloc1_16_i2.c | 5 +- libgfortran/generated/maxloc1_16_i4.c | 5 +- libgfortran/generated/maxloc1_16_i8.c | 5 +- libgfortran/generated/maxloc1_16_r10.c | 5 +- libgfortran/generated/maxloc1_16_r16.c | 5 +- libgfortran/generated/maxloc1_16_r4.c | 5 +- libgfortran/generated/maxloc1_16_r8.c | 5 +- libgfortran/generated/maxloc1_4_i1.c | 5 +- libgfortran/generated/maxloc1_4_i16.c | 5 +- libgfortran/generated/maxloc1_4_i2.c | 5 +- libgfortran/generated/maxloc1_4_i4.c | 5 +- libgfortran/generated/maxloc1_4_i8.c | 5 +- libgfortran/generated/maxloc1_4_r10.c | 5 +- libgfortran/generated/maxloc1_4_r16.c | 5 +- libgfortran/generated/maxloc1_4_r4.c | 5 +- libgfortran/generated/maxloc1_4_r8.c | 5 +- libgfortran/generated/maxloc1_8_i1.c | 5 +- libgfortran/generated/maxloc1_8_i16.c | 5 +- libgfortran/generated/maxloc1_8_i2.c | 5 +- libgfortran/generated/maxloc1_8_i4.c | 5 +- libgfortran/generated/maxloc1_8_i8.c | 5 +- libgfortran/generated/maxloc1_8_r10.c | 5 +- libgfortran/generated/maxloc1_8_r16.c | 5 +- libgfortran/generated/maxloc1_8_r4.c | 5 +- libgfortran/generated/maxloc1_8_r8.c | 5 +- libgfortran/generated/maxval_i1.c | 5 +- libgfortran/generated/maxval_i16.c | 5 +- libgfortran/generated/maxval_i2.c | 5 +- libgfortran/generated/maxval_i4.c | 5 +- libgfortran/generated/maxval_i8.c | 5 +- libgfortran/generated/maxval_r10.c | 5 +- libgfortran/generated/maxval_r16.c | 5 +- libgfortran/generated/maxval_r4.c | 5 +- libgfortran/generated/maxval_r8.c | 5 +- libgfortran/generated/minloc1_16_i1.c | 5 +- libgfortran/generated/minloc1_16_i16.c | 5 +- libgfortran/generated/minloc1_16_i2.c | 5 +- libgfortran/generated/minloc1_16_i4.c | 5 +- libgfortran/generated/minloc1_16_i8.c | 5 +- libgfortran/generated/minloc1_16_r10.c | 5 +- libgfortran/generated/minloc1_16_r16.c | 5 +- libgfortran/generated/minloc1_16_r4.c | 5 +- libgfortran/generated/minloc1_16_r8.c | 5 +- libgfortran/generated/minloc1_4_i1.c | 5 +- libgfortran/generated/minloc1_4_i16.c | 5 +- libgfortran/generated/minloc1_4_i2.c | 5 +- libgfortran/generated/minloc1_4_i4.c | 5 +- libgfortran/generated/minloc1_4_i8.c | 5 +- libgfortran/generated/minloc1_4_r10.c | 5 +- libgfortran/generated/minloc1_4_r16.c | 5 +- libgfortran/generated/minloc1_4_r4.c | 5 +- libgfortran/generated/minloc1_4_r8.c | 5 +- libgfortran/generated/minloc1_8_i1.c | 5 +- libgfortran/generated/minloc1_8_i16.c | 5 +- libgfortran/generated/minloc1_8_i2.c | 5 +- libgfortran/generated/minloc1_8_i4.c | 5 +- libgfortran/generated/minloc1_8_i8.c | 5 +- libgfortran/generated/minloc1_8_r10.c | 5 +- libgfortran/generated/minloc1_8_r16.c | 5 +- libgfortran/generated/minloc1_8_r4.c | 5 +- libgfortran/generated/minloc1_8_r8.c | 5 +- libgfortran/generated/minval_i1.c | 5 +- libgfortran/generated/minval_i16.c | 5 +- libgfortran/generated/minval_i2.c | 5 +- libgfortran/generated/minval_i4.c | 5 +- libgfortran/generated/minval_i8.c | 5 +- libgfortran/generated/minval_r10.c | 5 +- libgfortran/generated/minval_r16.c | 5 +- libgfortran/generated/minval_r4.c | 5 +- libgfortran/generated/minval_r8.c | 5 +- libgfortran/generated/norm2_r10.c | 208 +++++++++++++++++++++++++ libgfortran/generated/norm2_r16.c | 208 +++++++++++++++++++++++++ libgfortran/generated/norm2_r4.c | 208 +++++++++++++++++++++++++ libgfortran/generated/norm2_r8.c | 208 +++++++++++++++++++++++++ libgfortran/generated/parity_l1.c | 191 +++++++++++++++++++++++ libgfortran/generated/parity_l16.c | 191 +++++++++++++++++++++++ libgfortran/generated/parity_l2.c | 191 +++++++++++++++++++++++ libgfortran/generated/parity_l4.c | 191 +++++++++++++++++++++++ libgfortran/generated/parity_l8.c | 191 +++++++++++++++++++++++ libgfortran/generated/product_c10.c | 5 +- libgfortran/generated/product_c16.c | 5 +- libgfortran/generated/product_c4.c | 5 +- libgfortran/generated/product_c8.c | 5 +- libgfortran/generated/product_i1.c | 5 +- libgfortran/generated/product_i16.c | 5 +- libgfortran/generated/product_i2.c | 5 +- libgfortran/generated/product_i4.c | 5 +- libgfortran/generated/product_i8.c | 5 +- libgfortran/generated/product_r10.c | 5 +- libgfortran/generated/product_r16.c | 5 +- libgfortran/generated/product_r4.c | 5 +- libgfortran/generated/product_r8.c | 5 +- libgfortran/generated/sum_c10.c | 1 + libgfortran/generated/sum_c16.c | 1 + libgfortran/generated/sum_c4.c | 1 + libgfortran/generated/sum_c8.c | 1 + libgfortran/generated/sum_i1.c | 1 + libgfortran/generated/sum_i16.c | 1 + libgfortran/generated/sum_i2.c | 1 + libgfortran/generated/sum_i4.c | 1 + libgfortran/generated/sum_i8.c | 1 + libgfortran/generated/sum_r10.c | 1 + libgfortran/generated/sum_r16.c | 1 + libgfortran/generated/sum_r4.c | 1 + libgfortran/generated/sum_r8.c | 1 + libgfortran/gfortran.map | 9 ++ libgfortran/m4/all.m4 | 6 +- libgfortran/m4/any.m4 | 6 +- libgfortran/m4/count.m4 | 6 +- libgfortran/m4/ifunction.m4 | 5 +- libgfortran/m4/maxloc1.m4 | 6 +- libgfortran/m4/maxval.m4 | 6 +- libgfortran/m4/minloc1.m4 | 6 +- libgfortran/m4/minval.m4 | 6 +- libgfortran/m4/norm2.m4 | 59 +++++++ libgfortran/m4/parity.m4 | 40 +++++ libgfortran/m4/product.m4 | 6 +- 154 files changed, 3230 insertions(+), 281 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/norm2_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/norm2_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/norm2_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/norm_4.f90 create mode 100644 gcc/testsuite/gfortran.dg/parity_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/parity_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/parity_3.f90 create mode 100644 libgfortran/generated/norm2_r10.c create mode 100644 libgfortran/generated/norm2_r16.c create mode 100644 libgfortran/generated/norm2_r4.c create mode 100644 libgfortran/generated/norm2_r8.c create mode 100644 libgfortran/generated/parity_l1.c create mode 100644 libgfortran/generated/parity_l16.c create mode 100644 libgfortran/generated/parity_l2.c create mode 100644 libgfortran/generated/parity_l4.c create mode 100644 libgfortran/generated/parity_l8.c create mode 100644 libgfortran/m4/norm2.m4 create mode 100644 libgfortran/m4/parity.m4 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a15c13663ef..ba1ee59c917 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,26 @@ +2010-08-27 Tobias Burnus + + PR fortran/33197 + * gcc/fortran/intrinsic.c (add_functions): Add norm2 and parity. + * gcc/fortran/intrinsic.h (gfc_check_norm2, gfc_check_parity): + gfc_simplify_norm2, gfc_simplify_parity, gfc_resolve_norm2, + gfc_resolve_parity): New prototypes. + * gcc/fortran/gfortran.h (gfc_isym_id): New enum items + GFC_ISYM_NORM2 and GFC_ISYM_PARITY. + * gcc/fortran/iresolve.c (gfc_resolve_norm2, + gfc_resolve_parity): New functions. + * gcc/fortran/check.c (gfc_check_norm2, gfc_check_parity): + New functions. + * gcc/fortran/trans-intrinsic.c (gfc_conv_intrinsic_arith, + gfc_conv_intrinsic_function): Handle NORM2 and PARITY. + * gcc/fortran/intrinsic.texi (NORM2, PARITY): Add. + * gcc/fortran/simplify.c (simplify_transformation_to_array): + Add post-processing opterator. + (gfc_simplify_all, gfc_simplify_any, gfc_simplify_count, + gfc_simplify_product, gfc_simplify_sum): Update call. + (add_squared, do_sqrt, gfc_simplify_norm2, do_xor, + gfc_simplify_parity): New functions. + 2010-08-27 Janus Weil PR fortran/45420 diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 36efffa6dfa..0ff6b6e4cee 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -2431,6 +2431,21 @@ gfc_check_new_line (gfc_expr *a) } +gfc_try +gfc_check_norm2 (gfc_expr *array, gfc_expr *dim) +{ + if (type_check (array, 0, BT_REAL) == FAILURE) + return FAILURE; + + if (array_check (array, 0) == FAILURE) + return FAILURE; + + if (dim_rank_check (dim, array, false) == FAILURE) + return FAILURE; + + return SUCCESS; +} + gfc_try gfc_check_null (gfc_expr *mold) { @@ -2539,6 +2554,22 @@ gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector) } +gfc_try +gfc_check_parity (gfc_expr *mask, gfc_expr *dim) +{ + if (type_check (mask, 0, BT_LOGICAL) == FAILURE) + return FAILURE; + + if (array_check (mask, 0) == FAILURE) + return FAILURE; + + if (dim_rank_check (dim, mask, false) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + gfc_try gfc_check_precision (gfc_expr *x) { diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index c84c63387a2..0a2f52f9e9a 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -464,11 +464,13 @@ enum gfc_isym_id GFC_ISYM_NEAREST, GFC_ISYM_NEW_LINE, GFC_ISYM_NINT, + GFC_ISYM_NORM2, GFC_ISYM_NOT, GFC_ISYM_NULL, GFC_ISYM_NUMIMAGES, GFC_ISYM_OR, GFC_ISYM_PACK, + GFC_ISYM_PARITY, GFC_ISYM_PERROR, GFC_ISYM_PRECISION, GFC_ISYM_PRESENT, diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index 9087106d958..2ce3482e3a1 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -2268,6 +2268,13 @@ add_functions (void) make_generic ("not", GFC_ISYM_NOT, GFC_STD_F95); + add_sym_2 ("norm2", GFC_ISYM_NORM2, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, + GFC_STD_F2008, gfc_check_norm2, gfc_simplify_norm2, gfc_resolve_norm2, + x, BT_REAL, dr, REQUIRED, + dm, BT_INTEGER, ii, OPTIONAL); + + make_generic ("norm2", GFC_ISYM_NORM2, GFC_STD_F2008); + add_sym_1 ("null", GFC_ISYM_NULL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, gfc_check_null, gfc_simplify_null, NULL, mo, BT_INTEGER, di, OPTIONAL); @@ -2284,6 +2291,14 @@ add_functions (void) make_generic ("pack", GFC_ISYM_PACK, GFC_STD_F95); + + add_sym_2 ("parity", GFC_ISYM_PARITY, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_LOGICAL, dl, + GFC_STD_F2008, gfc_check_parity, gfc_simplify_parity, gfc_resolve_parity, + msk, BT_LOGICAL, dl, REQUIRED, + dm, BT_INTEGER, ii, OPTIONAL); + + make_generic ("parity", GFC_ISYM_PARITY, GFC_STD_F2008); + add_sym_1 ("precision", GFC_ISYM_PRECISION, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, gfc_check_precision, gfc_simplify_precision, NULL, x, BT_UNKNOWN, 0, REQUIRED); diff --git a/gcc/fortran/intrinsic.h b/gcc/fortran/intrinsic.h index 5de0116ecdb..2c101d391be 100644 --- a/gcc/fortran/intrinsic.h +++ b/gcc/fortran/intrinsic.h @@ -108,8 +108,10 @@ gfc_try gfc_check_minloc_maxloc (gfc_actual_arglist *); gfc_try gfc_check_minval_maxval (gfc_actual_arglist *); gfc_try gfc_check_nearest (gfc_expr *, gfc_expr *); gfc_try gfc_check_new_line (gfc_expr *); +gfc_try gfc_check_norm2 (gfc_expr *, gfc_expr *); gfc_try gfc_check_null (gfc_expr *); gfc_try gfc_check_pack (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_parity (gfc_expr *, gfc_expr *); gfc_try gfc_check_precision (gfc_expr *); gfc_try gfc_check_present (gfc_expr *); gfc_try gfc_check_product_sum (gfc_actual_arglist *); @@ -307,12 +309,14 @@ gfc_expr *gfc_simplify_mvbits (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *gfc_simplify_nearest (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_new_line (gfc_expr *); gfc_expr *gfc_simplify_nint (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_norm2 (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_null (gfc_expr *); gfc_expr *gfc_simplify_num_images (void); gfc_expr *gfc_simplify_idnint (gfc_expr *); gfc_expr *gfc_simplify_not (gfc_expr *); gfc_expr *gfc_simplify_or (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_pack (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_parity (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_precision (gfc_expr *); gfc_expr *gfc_simplify_product (gfc_expr *, gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_radix (gfc_expr *); @@ -473,9 +477,11 @@ void gfc_resolve_mod (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_modulo (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_nearest (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_nint (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_norm2 (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_not (gfc_expr *, gfc_expr *); void gfc_resolve_or (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_pack (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_parity (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_product (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_real (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_realpart (gfc_expr *, gfc_expr *); diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index f258e517674..c4767f5a6eb 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -203,11 +203,13 @@ Some basic guidelines for editing this document: * @code{NEAREST}: NEAREST, Nearest representable number * @code{NEW_LINE}: NEW_LINE, New line character * @code{NINT}: NINT, Nearest whole number +* @code{NORM2}: NORM2, Euclidean vector norm * @code{NOT}: NOT, Logical negation * @code{NULL}: NULL, Function that returns an disassociated pointer * @code{NUM_IMAGES}: NUM_IMAGES, Number of images * @code{OR}: OR, Bitwise logical OR * @code{PACK}: PACK, Pack an array into an array of rank one +* @code{PARITY}: PARITY, Reduction with exclusive OR * @code{PERROR}: PERROR, Print system error message * @code{PRECISION}: PRECISION, Decimal precision of a real kind * @code{PRESENT}: PRESENT, Determine whether an optional dummy argument is specified @@ -8471,6 +8473,57 @@ end program test_nint +@node NORM2 +@section @code{NORM2} --- Euclidean vector norms +@fnindex NORM2 +@cindex Euclidean vector norm +@cindex L2 vector norm +@cindex norm, Euclidean + +@table @asis +@item @emph{Description}: +Calculates the Euclidean vector norm (@math{L_2}) norm of +of @var{ARRAY} along dimension @var{DIM}. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{RESULT = NORM2(ARRAY[, DIM])} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array of type @code{REAL} +@item @var{DIM} @tab (Optional) shall be a scalar of type +@code{INTEGER} with a value in the range from 1 to n, where n +equals the rank of @var{ARRAY}. +@end multitable + +@item @emph{Return value}: +The result is of the same type as @var{ARRAY}. + +If @var{DIM} is absent, a scalar with the square root of the sum of all +elements in @var{ARRAY} squared is returned. Otherwise, an array of +rank @math{n-1}, where @math{n} equals the rank of @var{ARRAY}, and a +shape similar to that of @var{ARRAY} with dimension @var{DIM} dropped +is returned. + +@item @emph{Example}: +@smallexample +PROGRAM test_sum + REAL :: x(5) = [ real :: 1, 2, 3, 4, 5 ] + print *, NORM2(x) ! = sqrt(55.) ~ 7.416 +END PROGRAM +@end smallexample +@end table + + + @node NOT @section @code{NOT} --- Logical negation @fnindex NOT @@ -8717,6 +8770,58 @@ END PROGRAM +@node PARITY +@section @code{PARITY} --- Reduction with exclusive OR +@fnindex PARITY +@cindex Parity +@cindex Reduction, XOR +@cindex XOR reduction + +@table @asis +@item @emph{Description}: +Calculates the partity, i.e. the reduction using @code{.XOR.}, +of @var{MASK} along dimension @var{DIM}. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{RESULT = PARITY(MASK[, DIM])} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{LOGICAL} @tab Shall be an array of type @code{LOGICAL} +@item @var{DIM} @tab (Optional) shall be a scalar of type +@code{INTEGER} with a value in the range from 1 to n, where n +equals the rank of @var{MASK}. +@end multitable + +@item @emph{Return value}: +The result is of the same type as @var{MASK}. + +If @var{DIM} is absent, a scalar with the parity of all elements in +@var{MASK} is returned, i.e. true if an odd number of elements is +@code{.true.} and false otherwise. If @var{DIM} is present, an array +of rank @math{n-1}, where @math{n} equals the rank of @var{ARRAY}, +and a shape similar to that of @var{MASK} with dimension @var{DIM} +dropped is returned. + +@item @emph{Example}: +@smallexample +PROGRAM test_sum + LOGICAL :: x(2) = [ .true., .false. ] + print *, PARITY(x) ! prints "T" (true). +END PROGRAM +@end smallexample +@end table + + + @node PERROR @section @code{PERROR} --- Print system error message @fnindex PERROR diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index 6565187423e..5a187ee455e 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -1824,6 +1824,23 @@ gfc_resolve_nint (gfc_expr *f, gfc_expr *a, gfc_expr *kind) } +void +gfc_resolve_norm2 (gfc_expr *f, gfc_expr *array, gfc_expr *dim) +{ + f->ts = array->ts; + + if (dim != NULL) + { + f->rank = array->rank - 1; + f->shape = gfc_copy_shape_excluding (array->shape, array->rank, dim); + gfc_resolve_dim_arg (dim); + } + + f->value.function.name + = gfc_get_string (PREFIX ("norm2_r%d"), array->ts.kind); +} + + void gfc_resolve_not (gfc_expr *f, gfc_expr *i) { @@ -1888,6 +1905,25 @@ gfc_resolve_pack (gfc_expr *f, gfc_expr *array, gfc_expr *mask, } +void +gfc_resolve_parity (gfc_expr *f, gfc_expr *array, gfc_expr *dim) +{ + f->ts = array->ts; + + if (dim != NULL) + { + f->rank = array->rank - 1; + f->shape = gfc_copy_shape_excluding (array->shape, array->rank, dim); + gfc_resolve_dim_arg (dim); + } + + resolve_mask_arg (array); + + f->value.function.name + = gfc_get_string (PREFIX ("parity_l%d"), array->ts.kind); +} + + void gfc_resolve_product (gfc_expr *f, gfc_expr *array, gfc_expr *dim, gfc_expr *mask) diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 4cb29fbfc67..98955bb0a3e 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -488,11 +488,12 @@ simplify_transformation_to_scalar (gfc_expr *result, gfc_expr *array, gfc_expr * REAL, PARAMETER :: array(n, m) = ... REAL, PARAMETER :: s(n) = PROD(array, DIM=1) - where OP == gfc_multiply(). */ + where OP == gfc_multiply(). The result might be post processed using post_op. */ static gfc_expr * simplify_transformation_to_array (gfc_expr *result, gfc_expr *array, gfc_expr *dim, - gfc_expr *mask, transformational_op op) + gfc_expr *mask, transformational_op op, + transformational_op post_op) { mpz_t size; int done, i, n, arraysize, resultsize, dim_index, dim_extent, dim_stride; @@ -606,7 +607,10 @@ simplify_transformation_to_array (gfc_expr *result, gfc_expr *array, gfc_expr *d result_ctor = gfc_constructor_first (result->value.constructor); for (i = 0; i < resultsize; ++i) { - result_ctor->expr = resultvec[i]; + if (post_op) + result_ctor->expr = post_op (result_ctor->expr, resultvec[i]); + else + result_ctor->expr = resultvec[i]; result_ctor = gfc_constructor_next (result_ctor); } @@ -896,7 +900,7 @@ gfc_simplify_all (gfc_expr *mask, gfc_expr *dim) return !dim || mask->rank == 1 ? simplify_transformation_to_scalar (result, mask, NULL, gfc_and) : - simplify_transformation_to_array (result, mask, dim, NULL, gfc_and); + simplify_transformation_to_array (result, mask, dim, NULL, gfc_and, NULL); } @@ -982,7 +986,7 @@ gfc_simplify_any (gfc_expr *mask, gfc_expr *dim) return !dim || mask->rank == 1 ? simplify_transformation_to_scalar (result, mask, NULL, gfc_or) : - simplify_transformation_to_array (result, mask, dim, NULL, gfc_or); + simplify_transformation_to_array (result, mask, dim, NULL, gfc_or, NULL); } @@ -1679,7 +1683,7 @@ gfc_simplify_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind) Whenever gfc_count is called, '1' is added to the result. */ return !dim || mask->rank == 1 ? simplify_transformation_to_scalar (result, mask, mask, gfc_count) : - simplify_transformation_to_array (result, mask, dim, mask, gfc_count); + simplify_transformation_to_array (result, mask, dim, mask, gfc_count, NULL); } @@ -4048,6 +4052,65 @@ gfc_simplify_idnint (gfc_expr *e) } +static gfc_expr * +add_squared (gfc_expr *result, gfc_expr *e) +{ + mpfr_t tmp; + + gcc_assert (e->ts.type == BT_REAL && e->expr_type == EXPR_CONSTANT); + gcc_assert (result->ts.type == BT_REAL + && result->expr_type == EXPR_CONSTANT); + + gfc_set_model_kind (result->ts.kind); + mpfr_init (tmp); + mpfr_pow_ui (tmp, e->value.real, 2, GFC_RND_MODE); + mpfr_add (result->value.real, result->value.real, tmp, + GFC_RND_MODE); + mpfr_clear (tmp); + + return result; +} + + +static gfc_expr * +do_sqrt (gfc_expr *result, gfc_expr *e) +{ + gcc_assert (e->ts.type == BT_REAL && e->expr_type == EXPR_CONSTANT); + gcc_assert (result->ts.type == BT_REAL + && result->expr_type == EXPR_CONSTANT); + + mpfr_set (result->value.real, e->value.real, GFC_RND_MODE); + mpfr_sqrt (result->value.real, result->value.real, GFC_RND_MODE); + return result; +} + + +gfc_expr * +gfc_simplify_norm2 (gfc_expr *e, gfc_expr *dim) +{ + gfc_expr *result; + + if (!is_constant_array_expr (e) + || (dim != NULL && !gfc_is_constant_expr (dim))) + return NULL; + + result = transformational_result (e, dim, e->ts.type, e->ts.kind, &e->where); + init_result_expr (result, 0, NULL); + + if (!dim || e->rank == 1) + { + result = simplify_transformation_to_scalar (result, e, NULL, + add_squared); + mpfr_sqrt (result->value.real, result->value.real, GFC_RND_MODE); + } + else + result = simplify_transformation_to_array (result, e, dim, NULL, + add_squared, &do_sqrt); + + return result; +} + + gfc_expr * gfc_simplify_not (gfc_expr *e) { @@ -4198,6 +4261,37 @@ gfc_simplify_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector) } +static gfc_expr * +do_xor (gfc_expr *result, gfc_expr *e) +{ + gcc_assert (e->ts.type == BT_LOGICAL && e->expr_type == EXPR_CONSTANT); + gcc_assert (result->ts.type == BT_LOGICAL + && result->expr_type == EXPR_CONSTANT); + + result->value.logical = result->value.logical != e->value.logical; + return result; +} + + + +gfc_expr * +gfc_simplify_parity (gfc_expr *e, gfc_expr *dim) +{ + gfc_expr *result; + + if (!is_constant_array_expr (e) + || (dim != NULL && !gfc_is_constant_expr (dim))) + return NULL; + + result = transformational_result (e, dim, e->ts.type, e->ts.kind, &e->where); + init_result_expr (result, 0, NULL); + + return (!dim || e->rank == 1) + ? simplify_transformation_to_scalar (result, e, NULL, do_xor) + : simplify_transformation_to_array (result, e, dim, NULL, do_xor, NULL); +} + + gfc_expr * gfc_simplify_precision (gfc_expr *e) { @@ -4227,7 +4321,7 @@ gfc_simplify_product (gfc_expr *array, gfc_expr *dim, gfc_expr *mask) return !dim || array->rank == 1 ? simplify_transformation_to_scalar (result, array, mask, gfc_multiply) : - simplify_transformation_to_array (result, array, dim, mask, gfc_multiply); + simplify_transformation_to_array (result, array, dim, mask, gfc_multiply, NULL); } @@ -5390,7 +5484,7 @@ gfc_simplify_sum (gfc_expr *array, gfc_expr *dim, gfc_expr *mask) return !dim || array->rank == 1 ? simplify_transformation_to_scalar (result, array, mask, gfc_add) : - simplify_transformation_to_array (result, array, dim, mask, gfc_add); + simplify_transformation_to_array (result, array, dim, mask, gfc_add, NULL); } diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 373770fef7d..e0805d09571 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -1810,9 +1810,11 @@ gfc_conv_intrinsic_count (gfc_se * se, gfc_expr * expr) /* Inline implementation of the sum and product intrinsics. */ static void -gfc_conv_intrinsic_arith (gfc_se * se, gfc_expr * expr, enum tree_code op) +gfc_conv_intrinsic_arith (gfc_se * se, gfc_expr * expr, enum tree_code op, + bool norm2) { tree resvar; + tree scale = NULL_TREE; tree type; stmtblock_t body; stmtblock_t block; @@ -1835,8 +1837,20 @@ gfc_conv_intrinsic_arith (gfc_se * se, gfc_expr * expr, enum tree_code op) type = gfc_typenode_for_spec (&expr->ts); /* Initialize the result. */ resvar = gfc_create_var (type, "val"); - if (op == PLUS_EXPR) + if (norm2) + { + /* result = 0.0; + scale = 1.0. */ + scale = gfc_create_var (type, "scale"); + gfc_add_modify (&se->pre, scale, + gfc_build_const (type, integer_one_node)); + tmp = gfc_build_const (type, integer_zero_node); + } + else if (op == PLUS_EXPR) tmp = gfc_build_const (type, integer_zero_node); + else if (op == NE_EXPR) + /* PARITY. */ + tmp = convert (type, boolean_false_node); else tmp = gfc_build_const (type, integer_one_node); @@ -1848,9 +1862,16 @@ gfc_conv_intrinsic_arith (gfc_se * se, gfc_expr * expr, enum tree_code op) arrayss = gfc_walk_expr (arrayexpr); gcc_assert (arrayss != gfc_ss_terminator); - actual = actual->next->next; - gcc_assert (actual); - maskexpr = actual->expr; + if (op == NE_EXPR || norm2) + /* PARITY and NORM2. */ + maskexpr = NULL; + else + { + actual = actual->next->next; + gcc_assert (actual); + maskexpr = actual->expr; + } + if (maskexpr && maskexpr->rank != 0) { maskss = gfc_walk_expr (maskexpr); @@ -1896,15 +1917,77 @@ gfc_conv_intrinsic_arith (gfc_se * se, gfc_expr * expr, enum tree_code op) gfc_conv_expr_val (&arrayse, arrayexpr); gfc_add_block_to_block (&block, &arrayse.pre); - tmp = fold_build2 (op, type, resvar, arrayse.expr); - gfc_add_modify (&block, resvar, tmp); + if (norm2) + { + /* if (x(i) != 0.0) + { + absX = abs(x(i)) + if (absX > scale) + { + val = scale/absX; + result = 1.0 + result * val * val; + scale = absX; + } + else + { + val = absX/scale; + result += val * val; + } + } */ + tree res1, res2, cond, absX, val; + stmtblock_t ifblock1, ifblock2, ifblock3; + + gfc_init_block (&ifblock1); + + absX = gfc_create_var (type, "absX"); + gfc_add_modify (&ifblock1, absX, + fold_build1 (ABS_EXPR, type, arrayse.expr)); + val = gfc_create_var (type, "val"); + gfc_add_expr_to_block (&ifblock1, val); + + gfc_init_block (&ifblock2); + gfc_add_modify (&ifblock2, val, + fold_build2 (RDIV_EXPR, type, scale, absX)); + res1 = fold_build2 (MULT_EXPR, type, val, val); + res1 = fold_build2 (MULT_EXPR, type, resvar, res1); + res1 = fold_build2 (PLUS_EXPR, type, res1, + gfc_build_const (type, integer_one_node)); + gfc_add_modify (&ifblock2, resvar, res1); + gfc_add_modify (&ifblock2, scale, absX); + res1 = gfc_finish_block (&ifblock2); + + gfc_init_block (&ifblock3); + gfc_add_modify (&ifblock3, val, + fold_build2 (RDIV_EXPR, type, absX, scale)); + res2 = fold_build2 (MULT_EXPR, type, val, val); + res2 = fold_build2 (PLUS_EXPR, type, resvar, res2); + gfc_add_modify (&ifblock3, resvar, res2); + res2 = gfc_finish_block (&ifblock3); + + cond = fold_build2 (GT_EXPR, boolean_type_node, absX, scale); + tmp = build3_v (COND_EXPR, cond, res1, res2); + gfc_add_expr_to_block (&ifblock1, tmp); + tmp = gfc_finish_block (&ifblock1); + + cond = fold_build2 (NE_EXPR, boolean_type_node, arrayse.expr, + gfc_build_const (type, integer_zero_node)); + + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt (input_location)); + gfc_add_expr_to_block (&block, tmp); + } + else + { + tmp = fold_build2 (op, type, resvar, arrayse.expr); + gfc_add_modify (&block, resvar, tmp); + } + gfc_add_block_to_block (&block, &arrayse.post); if (maskss) { /* We enclose the above in if (mask) {...} . */ - tmp = gfc_finish_block (&block); + tmp = gfc_finish_block (&block); tmp = build3_v (COND_EXPR, maskse.expr, tmp, build_empty_stmt (input_location)); } @@ -1937,6 +2020,16 @@ gfc_conv_intrinsic_arith (gfc_se * se, gfc_expr * expr, enum tree_code op) gfc_cleanup_loop (&loop); + if (norm2) + { + /* result = scale * sqrt(result). */ + tree sqrt; + sqrt = builtin_decl_for_float_kind (BUILT_IN_SQRT, expr->ts.kind); + resvar = build_call_expr_loc (input_location, + sqrt, 1, resvar); + resvar = fold_build2 (MULT_EXPR, type, scale, resvar); + } + se->expr = resvar; } @@ -5288,6 +5381,10 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) gfc_conv_intrinsic_nearest (se, expr); break; + case GFC_ISYM_NORM2: + gfc_conv_intrinsic_arith (se, expr, PLUS_EXPR, true); + break; + case GFC_ISYM_NOT: gfc_conv_intrinsic_not (se, expr); break; @@ -5296,12 +5393,16 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) gfc_conv_intrinsic_bitop (se, expr, BIT_IOR_EXPR); break; + case GFC_ISYM_PARITY: + gfc_conv_intrinsic_arith (se, expr, NE_EXPR, false); + break; + case GFC_ISYM_PRESENT: gfc_conv_intrinsic_present (se, expr); break; case GFC_ISYM_PRODUCT: - gfc_conv_intrinsic_arith (se, expr, MULT_EXPR); + gfc_conv_intrinsic_arith (se, expr, MULT_EXPR, false); break; case GFC_ISYM_RRSPACING: @@ -5338,7 +5439,7 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) break; case GFC_ISYM_SUM: - gfc_conv_intrinsic_arith (se, expr, PLUS_EXPR); + gfc_conv_intrinsic_arith (se, expr, PLUS_EXPR, false); break; case GFC_ISYM_TRANSFER: @@ -5508,6 +5609,8 @@ gfc_is_intrinsic_libcall (gfc_expr * expr) case GFC_ISYM_MAXVAL: case GFC_ISYM_MINLOC: case GFC_ISYM_MINVAL: + case GFC_ISYM_NORM2: + case GFC_ISYM_PARITY: case GFC_ISYM_PRODUCT: case GFC_ISYM_SUM: case GFC_ISYM_SHAPE: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bf917998c93..d1f0a8cc38d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2010-08-27 Tobias Burnus + + PR fortran/33197 + * gcc/testsuite/gfortran.dg/norm2_1.f90: New. + * gcc/testsuite/gfortran.dg/norm2_2.f90: New. + * gcc/testsuite/gfortran.dg/norm2_3.f90: New. + * gcc/testsuite/gfortran.dg/norm2_4.f90: New. + * gcc/testsuite/gfortran.dg/parity_1.f90: New. + * gcc/testsuite/gfortran.dg/parity_2.f90: New. + * gcc/testsuite/gfortran.dg/parity_3.f90: New. + 2010-08-27 Janus Weil PR fortran/45420 diff --git a/gcc/testsuite/gfortran.dg/norm2_1.f90 b/gcc/testsuite/gfortran.dg/norm2_1.f90 new file mode 100644 index 00000000000..6d69e6bb454 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/norm2_1.f90 @@ -0,0 +1,91 @@ +! { dg-do run } +! +! PR fortran/33197 +! +! Check implementation of L2 norm (Euclidean vector norm) +! +implicit none + +real :: a(3) = [real :: 1, 2, huge(3.0)] +real :: b(3) = [real :: 1, 2, 3] +real :: c(4) = [real :: 1, 2, 3, -1] +real :: e(0) = [real :: ] +real :: f(4) = [real :: 0, 0, 3, 0 ] + +real :: d(4,1) = RESHAPE ([real :: 1, 2, 3, -1], [4,1]) +real :: g(4,1) = RESHAPE ([real :: 0, 0, 4, -1], [4,1]) + +! Check compile-time version + +if (abs (NORM2 ([real :: 1, 2, huge(3.0)]) - huge(3.0)) & + > epsilon(0.0)*huge(3.0)) call abort() + +if (abs (SNORM2([real :: 1, 2, huge(3.0)],3) - huge(3.0)) & + > epsilon(0.0)*huge(3.0)) call abort() + +if (abs (SNORM2([real :: 1, 2, 3],3) - NORM2([real :: 1, 2, 3])) & + > epsilon(0.0)*SNORM2([real :: 1, 2, 3],3)) call abort() + +if (NORM2([real :: ]) /= 0.0) call abort() +if (abs (NORM2([real :: 0, 0, 3, 0]) - 3.0) > epsilon(0.0)) call abort() + +! Check TREE version + +if (abs (NORM2 (a) - huge(3.0)) & + > epsilon(0.0)*huge(3.0)) call abort() + +if (abs (SNORM2(b,3) - NORM2(b)) & + > epsilon(0.0)*SNORM2(b,3)) call abort() + +if (abs (SNORM2(c,4) - NORM2(c)) & + > epsilon(0.0)*SNORM2(c,4)) call abort() + +if (ANY (abs (abs(d(:,1)) - NORM2(d, 2)) & + > epsilon(0.0))) call abort() + +! Check libgfortran version + +if (ANY (abs (SNORM2(d,4) - NORM2(d, 1)) & + > epsilon(0.0)*SNORM2(d,4))) call abort() + +if (abs (SNORM2(f,4) - NORM2(f, 1)) & + > epsilon(0.0)*SNORM2(d,4)) call abort() + +if (ANY (abs (abs(g(:,1)) - NORM2(g, 2)) & + > epsilon(0.0))) call abort() + +contains + ! NORM2 algorithm based on BLAS, cf. + ! http://www.netlib.org/blas/snrm2.f + REAL FUNCTION SNORM2 (X,n) + INTEGER, INTENT(IN) :: n + REAL, INTENT(IN) :: X(n) + + REAL :: absXi, scale, SSQ + INTEGER :: i + + INTRINSIC :: ABS, SQRT + + IF (N < 1) THEN + snorm2 = 0.0 + ELSE IF (N == 1) THEN + snorm2 = ABS(X(1)) + ELSE + scale = 0.0 + SSQ = 1.0 + + DO i = 1, N + IF (X(i) /= 0.0) THEN + absXi = ABS(X(i)) + IF (scale < absXi) THEN + SSQ = 1.0 + SSQ * (scale/absXi)**2 + scale = absXi + ELSE + SSQ = SSQ + (absXi/scale)**2 + END IF + END IF + END DO + snorm2 = scale * SQRT(SSQ) + END IF + END FUNCTION SNORM2 +end diff --git a/gcc/testsuite/gfortran.dg/norm2_2.f90 b/gcc/testsuite/gfortran.dg/norm2_2.f90 new file mode 100644 index 00000000000..d6ad7aa545a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/norm2_2.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } +! +! PR fortran/33197 +! +! Check implementation of L2 norm (Euclidean vector norm) +! +implicit none + +print *, norm2([1, 2]) ! { dg-error "must be REAL" } +print *, norm2([cmplx(1.0,2.0)]) ! { dg-error "must be REAL" } +print *, norm2(1.0) ! { dg-error "must be an array" } +print *, norm2([1.0, 2.0], dim=2) ! { dg-error "not a valid dimension index" } +end diff --git a/gcc/testsuite/gfortran.dg/norm2_3.f90 b/gcc/testsuite/gfortran.dg/norm2_3.f90 new file mode 100644 index 00000000000..a1a3b3f45bd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/norm2_3.f90 @@ -0,0 +1,95 @@ +! { dg-do run } +! { dg-require-effective-target fortran_large_real } +! +! +! PR fortran/33197 +! +! Check implementation of L2 norm (Euclidean vector norm) +! +implicit none + +integer,parameter :: qp = selected_real_kind (precision (0.0d0)+1) + +real(qp) :: a(3) = [real(qp) :: 1, 2, huge(3.0_qp)] +real(qp) :: b(3) = [real(qp) :: 1, 2, 3] +real(qp) :: c(4) = [real(qp) :: 1, 2, 3, -1] +real(qp) :: e(0) = [real(qp) :: ] +real(qp) :: f(4) = [real(qp) :: 0, 0, 3, 0 ] + +real(qp) :: d(4,1) = RESHAPE ([real(qp) :: 1, 2, 3, -1], [4,1]) +real(qp) :: g(4,1) = RESHAPE ([real(qp) :: 0, 0, 4, -1], [4,1]) + +! Check compile-time version + +if (abs (NORM2 ([real(qp) :: 1, 2, huge(3.0_qp)]) - huge(3.0_qp)) & + > epsilon(0.0_qp)*huge(3.0_qp)) call abort() + +if (abs (SNORM2([real(qp) :: 1, 2, huge(3.0_qp)],3) - huge(3.0_qp)) & + > epsilon(0.0_qp)*huge(3.0_qp)) call abort() + +if (abs (SNORM2([real(qp) :: 1, 2, 3],3) - NORM2([real(qp) :: 1, 2, 3])) & + > epsilon(0.0_qp)*SNORM2([real(qp) :: 1, 2, 3],3)) call abort() + +if (NORM2([real(qp) :: ]) /= 0.0_qp) call abort() +if (abs (NORM2([real(qp) :: 0, 0, 3, 0]) - 3.0_qp) > epsilon(0.0_qp)) call abort() + +! Check TREE version + +if (abs (NORM2 (a) - huge(3.0_qp)) & + > epsilon(0.0_qp)*huge(3.0_qp)) call abort() + +if (abs (SNORM2(b,3) - NORM2(b)) & + > epsilon(0.0_qp)*SNORM2(b,3)) call abort() + +if (abs (SNORM2(c,4) - NORM2(c)) & + > epsilon(0.0_qp)*SNORM2(c,4)) call abort() + +if (ANY (abs (abs(d(:,1)) - NORM2(d, 2)) & + > epsilon(0.0_qp))) call abort() + +! Check libgfortran version + +if (ANY (abs (SNORM2(d,4) - NORM2(d, 1)) & + > epsilon(0.0_qp)*SNORM2(d,4))) call abort() + +if (abs (SNORM2(f,4) - NORM2(f, 1)) & + > epsilon(0.0_qp)*SNORM2(d,4)) call abort() + +if (ANY (abs (abs(g(:,1)) - NORM2(g, 2)) & + > epsilon(0.0_qp))) call abort() + +contains + ! NORM2 algorithm based on BLAS, cf. + ! http://www.netlib.org/blas/snrm2.f + REAL(qp) FUNCTION SNORM2 (X,n) + INTEGER, INTENT(IN) :: n + REAL(qp), INTENT(IN) :: X(n) + + REAL(qp) :: absXi, scale, SSQ + INTEGER :: i + + INTRINSIC :: ABS, SQRT + + IF (N < 1) THEN + snorm2 = 0.0_qp + ELSE IF (N == 1) THEN + snorm2 = ABS(X(1)) + ELSE + scale = 0.0_qp + SSQ = 1.0_qp + + DO i = 1, N + IF (X(i) /= 0.0_qp) THEN + absXi = ABS(X(i)) + IF (scale < absXi) THEN + SSQ = 1.0_qp + SSQ * (scale/absXi)**2 + scale = absXi + ELSE + SSQ = SSQ + (absXi/scale)**2 + END IF + END IF + END DO + snorm2 = scale * SQRT(SSQ) + END IF + END FUNCTION SNORM2 +end diff --git a/gcc/testsuite/gfortran.dg/norm_4.f90 b/gcc/testsuite/gfortran.dg/norm_4.f90 new file mode 100644 index 00000000000..276b1743f00 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/norm_4.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } +! +! PR fortran/33197 +! +! Check implementation of L2 norm (Euclidean vector norm) +! +implicit none + +print *, norm2([1.0, 2.0]) ! { dg-error "has no IMPLICIT type" } +end diff --git a/gcc/testsuite/gfortran.dg/parity_1.f90 b/gcc/testsuite/gfortran.dg/parity_1.f90 new file mode 100644 index 00000000000..05f9537fa96 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/parity_1.f90 @@ -0,0 +1,40 @@ +! { dg-do run } +! +! PR fortran/33197 +! +! Check implementation of PARITY +! +implicit none + +integer :: i +logical :: Lt(1) = [ .true. ] +logical :: Lf(1) = [ .false.] +logical :: Ltf(2) = [ .true., .false. ] +logical :: Ltftf(4) = [.true., .false., .true.,.false.] + +if (parity([logical ::]) .neqv. .false.) call abort() +if (parity([.true., .false.]) .neqv. .true.) call abort() +if (parity([.true.]) .neqv. .true.) call abort() +if (parity([.false.]) .neqv. .false.) call abort() +if (parity([.true., .false., .true.,.false.]) .neqv. .false.) call abort() +if (parity(reshape([.true., .false., .true.,.false.],[2,2])) & + .neqv. .false.) call abort() +if (any (parity(reshape([.true., .false., .true.,.false.],[2,2]),dim=1) & + .neqv. [.true., .true.])) call abort() +if (any (parity(reshape([.true., .false., .true.,.false.],[2,2]),dim=2) & + .neqv. [.false., .false.])) call abort() + +i = 0 +if (parity(Lt(1:i)) .neqv. .false.) call abort() +if (parity(Ltf) .neqv. .true.) call abort() +if (parity(Lt) .neqv. .true.) call abort() +if (parity(Lf) .neqv. .false.) call abort() +if (parity(Ltftf) .neqv. .false.) call abort() +if (parity(reshape(Ltftf,[2,2])) & + .neqv. .false.) call abort() +if (any (parity(reshape(Ltftf,[2,2]),dim=1) & + .neqv. [.true., .true.])) call abort() +if (any (parity(reshape(Ltftf,[2,2]),dim=2) & + .neqv. [.false., .false.])) call abort() + +end diff --git a/gcc/testsuite/gfortran.dg/parity_2.f90 b/gcc/testsuite/gfortran.dg/parity_2.f90 new file mode 100644 index 00000000000..5ff11dab9d9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/parity_2.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } +! +! PR fortran/33197 +! +! Check implementation of PARITY +! +implicit none +print *, parity([real ::]) ! { dg-error "must be LOGICAL" }) +print *, parity([integer ::]) ! { dg-error "must be LOGICAL" } +print *, parity([logical ::]) +print *, parity(.true.) ! { dg-error "must be an array" } +end diff --git a/gcc/testsuite/gfortran.dg/parity_3.f90 b/gcc/testsuite/gfortran.dg/parity_3.f90 new file mode 100644 index 00000000000..88d674d41f9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/parity_3.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } +! +! PR fortran/33197 +! +! Check implementation of PARITY +! +implicit none +print *, parity([.true.]) ! { dg-error "has no IMPLICIT type" } +end diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 0e5da98f17d..121d471c3dc 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,144 @@ +2010-08-27 Tobias Burnus + + PR fortran/33197 + * libgfortran/m4/ifunction.m4 (FINISH_ARRAY_FUNCTION, + ARRAY_FUNCTION): Allow expression after loop. + * libgfortran/m4/norm2.m4: New for _gfortran_norm2_r{4,8,10,16}. + * libgfortran/m4/parity.m4: New for _gfortran_parity_l{1,2,4,8,16}. + * libgfortran/gfortran.map: Add new functions. + * libgfortran/Makefile.am: Ditto. + * libgfortran/m4/minloc1.m4: Add empty argument for ARRAY_FUNCTION. + * libgfortran/m4/maxloc1.m4: Ditto. + * libgfortran/m4/all.m4: Ditto. + * libgfortran/m4/minval.m4: Ditto. + * libgfortran/m4/maxval.m4: Ditto. + * libgfortran/m4/count.m4: Ditto. + * libgfortran/m4/product.m4: Ditto. + * libgfortran/m4/any.m4: Ditto. + * Makefile.in: Regenerated. + * generated/minval_r8.c: Regenerated. + * generated/maxloc1_4_r8.c: Regenerated. + * generated/minloc1_16_r16.c: Regenerated. + * generated/norm2_r4.c: Regenerated. + * generated/sum_i8.c: Regenerated. + * generated/parity_l2.c: Regenerated. + * generated/any_l16.c: Regenerated. + * generated/maxval_i2.c: Regenerated. + * generated/any_l2.c: Regenerated. + * generated/product_r4.c: Regenerated. + * generated/maxloc1_8_i4.c: Regenerated. + * generated/parity_l16.c: Regenerated. + * generated/all_l1.c: Regenerated. + * generated/product_i2.c: Regenerated. + * generated/minloc1_8_r16.c: Regenerated. + * generated/maxloc1_8_r16.c: Regenerated. + * generated/sum_r16.c: Regenerated. + * generated/sum_i1.c: Regenerated. + * generated/minloc1_4_r8.c: Regenerated. + * generated/maxloc1_16_r16.c: Regenerated. + * generated/minloc1_16_i4.c: Regenerated. + * generated/maxloc1_16_i4.c: Regenerated. + * generated/maxval_r16.c: Regenerated. + * generated/product_c10.c: Regenerated. + * generated/minloc1_8_i4.c: Regenerated. + * generated/all_l2.c: Regenerated. + * generated/product_c4.c: Regenerated. + * generated/sum_r4.c: Regenerated. + * generated/all_l16.c: Regenerated. + * generated/minloc1_16_r10.c: Regenerated. + * generated/sum_i2.c: Regenerated. + * generated/maxloc1_8_r8.c: Regenerated. + * generated/minval_i16.c: Regenerated. + * generated/parity_l4.c: Regenerated. + * generated/maxval_i4.c: Regenerated. + * generated/any_l4.c: Regenerated. + * generated/minval_i8.c: Regenerated. + * generated/maxloc1_4_i8.c: Regenerated. + * generated/minloc1_4_i16.c: Regenerated. + * generated/maxloc1_4_i16.c: Regenerated. + * generated/minloc1_8_r10.c: Regenerated. + * generated/product_i4.c: Regenerated. + * generated/maxloc1_8_r10.c: Regenerated. + * generated/sum_c16.c: Regenerated. + * generated/minloc1_16_r8.c: Regenerated. + * generated/maxloc1_16_r8.c: Regenerated. + * generated/count_4_l.c: Regenerated. + * generated/sum_r10.c: Regenerated. + * generated/count_8_l.c: Regenerated. + * generated/sum_c4.c: Regenerated. + * generated/maxloc1_16_r10.c: Regenerated. + * generated/minloc1_8_r8.c: Regenerated. + * generated/maxval_r10.c: Regenerated. + * generated/minval_i1.c: Regenerated. + * generated/maxloc1_4_i1.c: Regenerated. + * generated/minloc1_4_i8.c: Regenerated. + * generated/product_i16.c: Regenerated. + * generated/all_l4.c: Regenerated. + * generated/norm2_r16.c: Regenerated. + * generated/minval_r4.c: Regenerated. + * generated/maxloc1_4_r4.c: Regenerated. + * generated/sum_i4.c: Regenerated. + * generated/maxval_r8.c: Regenerated. + * generated/norm2_r8.c: Regenerated. + * generated/minloc1_4_i1.c: Regenerated. + * generated/minval_r16.c: Regenerated. + * generated/minval_i2.c: Regenerated. + * generated/maxloc1_4_i2.c: Regenerated. + * generated/product_r8.c: Regenerated. + * generated/maxloc1_8_i8.c: Regenerated. + * generated/sum_c10.c: Regenerated. + * generated/minloc1_4_r16.c: Regenerated. + * generated/maxloc1_4_r16.c: Regenerated. + * generated/count_1_l.c: Regenerated. + * generated/minloc1_4_r4.c: Regenerated. + * generated/minloc1_16_i8.c: Regenerated. + * generated/maxloc1_16_i8.c: Regenerated. + * generated/minloc1_4_i2.c: Regenerated. + * generated/maxloc1_8_i1.c: Regenerated. + * generated/minloc1_8_i8.c: Regenerated. + * generated/product_r16.c: Regenerated. + * generated/product_c8.c: Regenerated. + * generated/sum_r8.c: Regenerated. + * generated/norm2_r10.c: Regenerated. + * generated/minloc1_16_i16.c: Regenerated. + * generated/maxloc1_8_r4.c: Regenerated. + * generated/minloc1_16_i1.c: Regenerated. + * generated/maxloc1_16_i1.c: Regenerated. + * generated/minval_r10.c: Regenerated. + * generated/count_16_l.c: Regenerated. + * generated/parity_l8.c: Regenerated. + * generated/minloc1_8_i1.c: Regenerated. + * generated/minval_i4.c: Regenerated. + * generated/maxloc1_4_i4.c: Regenerated. + * generated/maxloc1_8_i2.c: Regenerated. + * generated/maxval_i8.c: Regenerated. + * generated/any_l8.c: Regenerated. + * generated/minloc1_4_r10.c: Regenerated. + * generated/minloc1_8_i16.c: Regenerated. + * generated/maxloc1_4_r10.c: Regenerated. + * generated/maxloc1_8_i16.c: Regenerated. + * generated/minloc1_16_r4.c: Regenerated. + * generated/maxloc1_16_r4.c: Regenerated. + * generated/product_i8.c: Regenerated. + * generated/sum_i16.c: Regenerated. + * generated/count_2_l.c: Regenerated. + * generated/maxloc1_16_i16.c: Regenerated. + * generated/minloc1_8_r4.c: Regenerated. + * generated/sum_c8.c: Regenerated. + * generated/minloc1_16_i2.c: Regenerated. + * generated/maxloc1_16_i2.c: Regenerated. + * generated/parity_l1.c: Regenerated. + * generated/maxval_i16.c: Regenerated. + * generated/maxval_i1.c: Regenerated. + * generated/minloc1_4_i4.c: Regenerated. + * generated/any_l1.c: Regenerated. + * generated/minloc1_8_i2.c: Regenerated. + * generated/product_c16.c: Regenerated. + * generated/product_r10.c: Regenerated. + * generated/product_i1.c: Regenerated. + * generated/all_l8.c: Regenerated. + * generated/maxval_r4.c: Regenerated. + 2010-08-26 Rainer Orth * config/fpu-387.h (has_sse): Remove cw_sse, unused. diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am index 8d470b79c40..d59c6887d7f 100644 --- a/libgfortran/Makefile.am +++ b/libgfortran/Makefile.am @@ -326,6 +326,19 @@ $(srcdir)/generated/minval_r8.c \ $(srcdir)/generated/minval_r10.c \ $(srcdir)/generated/minval_r16.c +i_norm2_c= \ +$(srcdir)/generated/norm2_r4.c \ +$(srcdir)/generated/norm2_r8.c \ +$(srcdir)/generated/norm2_r10.c \ +$(srcdir)/generated/norm2_r16.c + +i_parity_c = \ +$(srcdir)/generated/parity_l1.c \ +$(srcdir)/generated/parity_l2.c \ +$(srcdir)/generated/parity_l4.c \ +$(srcdir)/generated/parity_l8.c \ +$(srcdir)/generated/parity_l16.c + i_sum_c= \ $(srcdir)/generated/sum_i1.c \ $(srcdir)/generated/sum_i2.c \ @@ -589,11 +602,11 @@ m4_files= m4/iparm.m4 m4/ifunction.m4 m4/iforeach.m4 m4/all.m4 \ m4/transpose.m4 m4/eoshift1.m4 m4/eoshift3.m4 m4/exponent.m4 \ m4/fraction.m4 m4/nearest.m4 m4/set_exponent.m4 m4/pow.m4 \ m4/misc_specifics.m4 m4/rrspacing.m4 m4/spacing.m4 m4/pack.m4 \ - m4/unpack.m4 m4/spread.m4 m4/bessel.m4 + m4/unpack.m4 m4/spread.m4 m4/bessel.m4 m4/norm2.m4 m4/parity.m4 gfor_built_src= $(i_all_c) $(i_any_c) $(i_count_c) $(i_maxloc0_c) \ $(i_maxloc1_c) $(i_maxval_c) $(i_minloc0_c) $(i_minloc1_c) $(i_minval_c) \ - $(i_product_c) $(i_sum_c) $(i_bessel_c) \ + $(i_product_c) $(i_sum_c) $(i_bessel_c) $(i_norm2_c) $(i_parity_c) \ $(i_matmul_c) $(i_matmull_c) $(i_transpose_c) $(i_shape_c) $(i_eoshift1_c) \ $(i_eoshift3_c) $(i_cshift1_c) $(i_reshape_c) $(in_pack_c) $(in_unpack_c) \ $(i_exponent_c) $(i_fraction_c) $(i_nearest_c) $(i_set_exponent_c) \ @@ -866,6 +879,12 @@ $(i_matmul_c): m4/matmul.m4 $(I_M4_DEPS) $(i_matmull_c): m4/matmull.m4 $(I_M4_DEPS) $(M4) -Dfile=$@ -I$(srcdir)/m4 matmull.m4 > $@ +$(i_norm2_c): m4/norm2.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 norm2.m4 > $@ + +$(i_parity_c): m4/parity.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 parity.m4 > $@ + $(i_transpose_c): m4/transpose.m4 $(I_M4_DEPS) $(M4) -Dfile=$@ -I$(srcdir)/m4 transpose.m4 > $@ diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in index d4b5146f168..c6f92260d2c 100644 --- a/libgfortran/Makefile.in +++ b/libgfortran/Makefile.in @@ -144,40 +144,43 @@ am__objects_12 = sum_i1.lo sum_i2.lo sum_i4.lo sum_i8.lo sum_i16.lo \ sum_r4.lo sum_r8.lo sum_r10.lo sum_r16.lo sum_c4.lo sum_c8.lo \ sum_c10.lo sum_c16.lo am__objects_13 = bessel_r4.lo bessel_r8.lo bessel_r10.lo bessel_r16.lo -am__objects_14 = matmul_i1.lo matmul_i2.lo matmul_i4.lo matmul_i8.lo \ +am__objects_14 = norm2_r4.lo norm2_r8.lo norm2_r10.lo norm2_r16.lo +am__objects_15 = parity_l1.lo parity_l2.lo parity_l4.lo parity_l8.lo \ + parity_l16.lo +am__objects_16 = matmul_i1.lo matmul_i2.lo matmul_i4.lo matmul_i8.lo \ matmul_i16.lo matmul_r4.lo matmul_r8.lo matmul_r10.lo \ matmul_r16.lo matmul_c4.lo matmul_c8.lo matmul_c10.lo \ matmul_c16.lo -am__objects_15 = matmul_l4.lo matmul_l8.lo matmul_l16.lo -am__objects_16 = transpose_i4.lo transpose_i8.lo transpose_i16.lo \ +am__objects_17 = matmul_l4.lo matmul_l8.lo matmul_l16.lo +am__objects_18 = transpose_i4.lo transpose_i8.lo transpose_i16.lo \ transpose_r4.lo transpose_r8.lo transpose_r10.lo \ transpose_r16.lo transpose_c4.lo transpose_c8.lo \ transpose_c10.lo transpose_c16.lo -am__objects_17 = shape_i4.lo shape_i8.lo shape_i16.lo -am__objects_18 = eoshift1_4.lo eoshift1_8.lo eoshift1_16.lo -am__objects_19 = eoshift3_4.lo eoshift3_8.lo eoshift3_16.lo -am__objects_20 = cshift1_4.lo cshift1_8.lo cshift1_16.lo -am__objects_21 = reshape_i4.lo reshape_i8.lo reshape_i16.lo \ +am__objects_19 = shape_i4.lo shape_i8.lo shape_i16.lo +am__objects_20 = eoshift1_4.lo eoshift1_8.lo eoshift1_16.lo +am__objects_21 = eoshift3_4.lo eoshift3_8.lo eoshift3_16.lo +am__objects_22 = cshift1_4.lo cshift1_8.lo cshift1_16.lo +am__objects_23 = reshape_i4.lo reshape_i8.lo reshape_i16.lo \ reshape_r4.lo reshape_r8.lo reshape_r10.lo reshape_r16.lo \ reshape_c4.lo reshape_c8.lo reshape_c10.lo reshape_c16.lo -am__objects_22 = in_pack_i1.lo in_pack_i2.lo in_pack_i4.lo \ +am__objects_24 = in_pack_i1.lo in_pack_i2.lo in_pack_i4.lo \ in_pack_i8.lo in_pack_i16.lo in_pack_r4.lo in_pack_r8.lo \ in_pack_r10.lo in_pack_r16.lo in_pack_c4.lo in_pack_c8.lo \ in_pack_c10.lo in_pack_c16.lo -am__objects_23 = in_unpack_i1.lo in_unpack_i2.lo in_unpack_i4.lo \ +am__objects_25 = in_unpack_i1.lo in_unpack_i2.lo in_unpack_i4.lo \ in_unpack_i8.lo in_unpack_i16.lo in_unpack_r4.lo \ in_unpack_r8.lo in_unpack_r10.lo in_unpack_r16.lo \ in_unpack_c4.lo in_unpack_c8.lo in_unpack_c10.lo \ in_unpack_c16.lo -am__objects_24 = exponent_r4.lo exponent_r8.lo exponent_r10.lo \ +am__objects_26 = exponent_r4.lo exponent_r8.lo exponent_r10.lo \ exponent_r16.lo -am__objects_25 = fraction_r4.lo fraction_r8.lo fraction_r10.lo \ +am__objects_27 = fraction_r4.lo fraction_r8.lo fraction_r10.lo \ fraction_r16.lo -am__objects_26 = nearest_r4.lo nearest_r8.lo nearest_r10.lo \ +am__objects_28 = nearest_r4.lo nearest_r8.lo nearest_r10.lo \ nearest_r16.lo -am__objects_27 = set_exponent_r4.lo set_exponent_r8.lo \ +am__objects_29 = set_exponent_r4.lo set_exponent_r8.lo \ set_exponent_r10.lo set_exponent_r16.lo -am__objects_28 = pow_i4_i4.lo pow_i8_i4.lo pow_i16_i4.lo pow_c4_i4.lo \ +am__objects_30 = pow_i4_i4.lo pow_i8_i4.lo pow_i16_i4.lo pow_c4_i4.lo \ pow_c8_i4.lo pow_c10_i4.lo pow_c16_i4.lo pow_i4_i8.lo \ pow_i8_i8.lo pow_i16_i8.lo pow_r4_i8.lo pow_r8_i8.lo \ pow_r10_i8.lo pow_r16_i8.lo pow_c4_i8.lo pow_c8_i8.lo \ @@ -185,26 +188,26 @@ am__objects_28 = pow_i4_i4.lo pow_i8_i4.lo pow_i16_i4.lo pow_c4_i4.lo \ pow_i16_i16.lo pow_r4_i16.lo pow_r8_i16.lo pow_r10_i16.lo \ pow_r16_i16.lo pow_c4_i16.lo pow_c8_i16.lo pow_c10_i16.lo \ pow_c16_i16.lo -am__objects_29 = rrspacing_r4.lo rrspacing_r8.lo rrspacing_r10.lo \ +am__objects_31 = rrspacing_r4.lo rrspacing_r8.lo rrspacing_r10.lo \ rrspacing_r16.lo -am__objects_30 = spacing_r4.lo spacing_r8.lo spacing_r10.lo \ +am__objects_32 = spacing_r4.lo spacing_r8.lo spacing_r10.lo \ spacing_r16.lo -am__objects_31 = pack_i1.lo pack_i2.lo pack_i4.lo pack_i8.lo \ +am__objects_33 = pack_i1.lo pack_i2.lo pack_i4.lo pack_i8.lo \ pack_i16.lo pack_r4.lo pack_r8.lo pack_r10.lo pack_r16.lo \ pack_c4.lo pack_c8.lo pack_c10.lo pack_c16.lo -am__objects_32 = unpack_i1.lo unpack_i2.lo unpack_i4.lo unpack_i8.lo \ +am__objects_34 = unpack_i1.lo unpack_i2.lo unpack_i4.lo unpack_i8.lo \ unpack_i16.lo unpack_r4.lo unpack_r8.lo unpack_r10.lo \ unpack_r16.lo unpack_c4.lo unpack_c8.lo unpack_c10.lo \ unpack_c16.lo -am__objects_33 = spread_i1.lo spread_i2.lo spread_i4.lo spread_i8.lo \ +am__objects_35 = spread_i1.lo spread_i2.lo spread_i4.lo spread_i8.lo \ spread_i16.lo spread_r4.lo spread_r8.lo spread_r10.lo \ spread_r16.lo spread_c4.lo spread_c8.lo spread_c10.lo \ spread_c16.lo -am__objects_34 = cshift0_i1.lo cshift0_i2.lo cshift0_i4.lo \ +am__objects_36 = cshift0_i1.lo cshift0_i2.lo cshift0_i4.lo \ cshift0_i8.lo cshift0_i16.lo cshift0_r4.lo cshift0_r8.lo \ cshift0_r10.lo cshift0_r16.lo cshift0_c4.lo cshift0_c8.lo \ cshift0_c10.lo cshift0_c16.lo -am__objects_35 = $(am__objects_2) $(am__objects_3) $(am__objects_4) \ +am__objects_37 = $(am__objects_2) $(am__objects_3) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) $(am__objects_7) \ $(am__objects_8) $(am__objects_9) $(am__objects_10) \ $(am__objects_11) $(am__objects_12) $(am__objects_13) \ @@ -214,11 +217,12 @@ am__objects_35 = $(am__objects_2) $(am__objects_3) $(am__objects_4) \ $(am__objects_23) $(am__objects_24) $(am__objects_25) \ $(am__objects_26) $(am__objects_27) $(am__objects_28) \ $(am__objects_29) $(am__objects_30) $(am__objects_31) \ - $(am__objects_32) $(am__objects_33) $(am__objects_34) -am__objects_36 = close.lo file_pos.lo format.lo inquire.lo \ + $(am__objects_32) $(am__objects_33) $(am__objects_34) \ + $(am__objects_35) $(am__objects_36) +am__objects_38 = close.lo file_pos.lo format.lo inquire.lo \ intrinsics.lo list_read.lo lock.lo open.lo read.lo \ size_from_kind.lo transfer.lo unit.lo unix.lo write.lo fbuf.lo -am__objects_37 = associated.lo abort.lo access.lo args.lo \ +am__objects_39 = associated.lo abort.lo access.lo args.lo \ bit_intrinsics.lo c99_functions.lo chdir.lo chmod.lo clock.lo \ cpu_time.lo cshift0.lo ctime.lo date_and_time.lo dtime.lo \ env.lo eoshift0.lo eoshift2.lo erfc_scaled.lo etime.lo exit.lo \ @@ -233,8 +237,8 @@ am__objects_37 = associated.lo abort.lo access.lo args.lo \ system_clock.lo time.lo transpose_generic.lo umask.lo \ unlink.lo unpack_generic.lo in_pack_generic.lo \ in_unpack_generic.lo -am__objects_38 = -am__objects_39 = _abs_c4.lo _abs_c8.lo _abs_c10.lo _abs_c16.lo \ +am__objects_40 = +am__objects_41 = _abs_c4.lo _abs_c8.lo _abs_c10.lo _abs_c16.lo \ _abs_i4.lo _abs_i8.lo _abs_i16.lo _abs_r4.lo _abs_r8.lo \ _abs_r10.lo _abs_r16.lo _aimag_c4.lo _aimag_c8.lo \ _aimag_c10.lo _aimag_c16.lo _exp_r4.lo _exp_r8.lo _exp_r10.lo \ @@ -258,18 +262,18 @@ am__objects_39 = _abs_c4.lo _abs_c8.lo _abs_c10.lo _abs_c16.lo \ _conjg_c4.lo _conjg_c8.lo _conjg_c10.lo _conjg_c16.lo \ _aint_r4.lo _aint_r8.lo _aint_r10.lo _aint_r16.lo _anint_r4.lo \ _anint_r8.lo _anint_r10.lo _anint_r16.lo -am__objects_40 = _sign_i4.lo _sign_i8.lo _sign_i16.lo _sign_r4.lo \ +am__objects_42 = _sign_i4.lo _sign_i8.lo _sign_i16.lo _sign_r4.lo \ _sign_r8.lo _sign_r10.lo _sign_r16.lo _dim_i4.lo _dim_i8.lo \ _dim_i16.lo _dim_r4.lo _dim_r8.lo _dim_r10.lo _dim_r16.lo \ _atan2_r4.lo _atan2_r8.lo _atan2_r10.lo _atan2_r16.lo \ _mod_i4.lo _mod_i8.lo _mod_i16.lo _mod_r4.lo _mod_r8.lo \ _mod_r10.lo _mod_r16.lo -am__objects_41 = misc_specifics.lo -am__objects_42 = $(am__objects_39) $(am__objects_40) $(am__objects_41) \ +am__objects_43 = misc_specifics.lo +am__objects_44 = $(am__objects_41) $(am__objects_42) $(am__objects_43) \ dprod_r8.lo f2c_specifics.lo -am__objects_43 = $(am__objects_1) $(am__objects_35) $(am__objects_36) \ - $(am__objects_37) $(am__objects_38) $(am__objects_42) -@onestep_FALSE@am_libgfortran_la_OBJECTS = $(am__objects_43) +am__objects_45 = $(am__objects_1) $(am__objects_37) $(am__objects_38) \ + $(am__objects_39) $(am__objects_40) $(am__objects_44) +@onestep_FALSE@am_libgfortran_la_OBJECTS = $(am__objects_45) @onestep_TRUE@am_libgfortran_la_OBJECTS = libgfortran_c.lo libgfortran_la_OBJECTS = $(am_libgfortran_la_OBJECTS) libgfortranbegin_la_LIBADD = @@ -742,6 +746,19 @@ $(srcdir)/generated/minval_r8.c \ $(srcdir)/generated/minval_r10.c \ $(srcdir)/generated/minval_r16.c +i_norm2_c = \ +$(srcdir)/generated/norm2_r4.c \ +$(srcdir)/generated/norm2_r8.c \ +$(srcdir)/generated/norm2_r10.c \ +$(srcdir)/generated/norm2_r16.c + +i_parity_c = \ +$(srcdir)/generated/parity_l1.c \ +$(srcdir)/generated/parity_l2.c \ +$(srcdir)/generated/parity_l4.c \ +$(srcdir)/generated/parity_l8.c \ +$(srcdir)/generated/parity_l16.c + i_sum_c = \ $(srcdir)/generated/sum_i1.c \ $(srcdir)/generated/sum_i2.c \ @@ -1004,11 +1021,11 @@ m4_files = m4/iparm.m4 m4/ifunction.m4 m4/iforeach.m4 m4/all.m4 \ m4/transpose.m4 m4/eoshift1.m4 m4/eoshift3.m4 m4/exponent.m4 \ m4/fraction.m4 m4/nearest.m4 m4/set_exponent.m4 m4/pow.m4 \ m4/misc_specifics.m4 m4/rrspacing.m4 m4/spacing.m4 m4/pack.m4 \ - m4/unpack.m4 m4/spread.m4 m4/bessel.m4 + m4/unpack.m4 m4/spread.m4 m4/bessel.m4 m4/norm2.m4 m4/parity.m4 gfor_built_src = $(i_all_c) $(i_any_c) $(i_count_c) $(i_maxloc0_c) \ $(i_maxloc1_c) $(i_maxval_c) $(i_minloc0_c) $(i_minloc1_c) $(i_minval_c) \ - $(i_product_c) $(i_sum_c) $(i_bessel_c) \ + $(i_product_c) $(i_sum_c) $(i_bessel_c) $(i_norm2_c) $(i_parity_c) \ $(i_matmul_c) $(i_matmull_c) $(i_transpose_c) $(i_shape_c) $(i_eoshift1_c) \ $(i_eoshift3_c) $(i_cshift1_c) $(i_reshape_c) $(in_pack_c) $(in_unpack_c) \ $(i_exponent_c) $(i_fraction_c) $(i_nearest_c) $(i_set_exponent_c) \ @@ -1598,6 +1615,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nearest_r16.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nearest_r4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nearest_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/norm2_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/norm2_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/norm2_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/norm2_r8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_c10.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_c16.Plo@am__quote@ @@ -1613,6 +1634,11 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_r16.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_r4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parity_l1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parity_l16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parity_l2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parity_l4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parity_l8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pause.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perror.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c10_i16.Plo@am__quote@ @@ -3495,6 +3521,69 @@ bessel_r16.lo: $(srcdir)/generated/bessel_r16.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bessel_r16.lo `test -f '$(srcdir)/generated/bessel_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/bessel_r16.c +norm2_r4.lo: $(srcdir)/generated/norm2_r4.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT norm2_r4.lo -MD -MP -MF $(DEPDIR)/norm2_r4.Tpo -c -o norm2_r4.lo `test -f '$(srcdir)/generated/norm2_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/norm2_r4.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/norm2_r4.Tpo $(DEPDIR)/norm2_r4.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/norm2_r4.c' object='norm2_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o norm2_r4.lo `test -f '$(srcdir)/generated/norm2_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/norm2_r4.c + +norm2_r8.lo: $(srcdir)/generated/norm2_r8.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT norm2_r8.lo -MD -MP -MF $(DEPDIR)/norm2_r8.Tpo -c -o norm2_r8.lo `test -f '$(srcdir)/generated/norm2_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/norm2_r8.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/norm2_r8.Tpo $(DEPDIR)/norm2_r8.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/norm2_r8.c' object='norm2_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o norm2_r8.lo `test -f '$(srcdir)/generated/norm2_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/norm2_r8.c + +norm2_r10.lo: $(srcdir)/generated/norm2_r10.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT norm2_r10.lo -MD -MP -MF $(DEPDIR)/norm2_r10.Tpo -c -o norm2_r10.lo `test -f '$(srcdir)/generated/norm2_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/norm2_r10.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/norm2_r10.Tpo $(DEPDIR)/norm2_r10.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/norm2_r10.c' object='norm2_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o norm2_r10.lo `test -f '$(srcdir)/generated/norm2_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/norm2_r10.c + +norm2_r16.lo: $(srcdir)/generated/norm2_r16.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT norm2_r16.lo -MD -MP -MF $(DEPDIR)/norm2_r16.Tpo -c -o norm2_r16.lo `test -f '$(srcdir)/generated/norm2_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/norm2_r16.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/norm2_r16.Tpo $(DEPDIR)/norm2_r16.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/norm2_r16.c' object='norm2_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o norm2_r16.lo `test -f '$(srcdir)/generated/norm2_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/norm2_r16.c + +parity_l1.lo: $(srcdir)/generated/parity_l1.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parity_l1.lo -MD -MP -MF $(DEPDIR)/parity_l1.Tpo -c -o parity_l1.lo `test -f '$(srcdir)/generated/parity_l1.c' || echo '$(srcdir)/'`$(srcdir)/generated/parity_l1.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/parity_l1.Tpo $(DEPDIR)/parity_l1.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/parity_l1.c' object='parity_l1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parity_l1.lo `test -f '$(srcdir)/generated/parity_l1.c' || echo '$(srcdir)/'`$(srcdir)/generated/parity_l1.c + +parity_l2.lo: $(srcdir)/generated/parity_l2.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parity_l2.lo -MD -MP -MF $(DEPDIR)/parity_l2.Tpo -c -o parity_l2.lo `test -f '$(srcdir)/generated/parity_l2.c' || echo '$(srcdir)/'`$(srcdir)/generated/parity_l2.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/parity_l2.Tpo $(DEPDIR)/parity_l2.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/parity_l2.c' object='parity_l2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parity_l2.lo `test -f '$(srcdir)/generated/parity_l2.c' || echo '$(srcdir)/'`$(srcdir)/generated/parity_l2.c + +parity_l4.lo: $(srcdir)/generated/parity_l4.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parity_l4.lo -MD -MP -MF $(DEPDIR)/parity_l4.Tpo -c -o parity_l4.lo `test -f '$(srcdir)/generated/parity_l4.c' || echo '$(srcdir)/'`$(srcdir)/generated/parity_l4.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/parity_l4.Tpo $(DEPDIR)/parity_l4.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/parity_l4.c' object='parity_l4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parity_l4.lo `test -f '$(srcdir)/generated/parity_l4.c' || echo '$(srcdir)/'`$(srcdir)/generated/parity_l4.c + +parity_l8.lo: $(srcdir)/generated/parity_l8.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parity_l8.lo -MD -MP -MF $(DEPDIR)/parity_l8.Tpo -c -o parity_l8.lo `test -f '$(srcdir)/generated/parity_l8.c' || echo '$(srcdir)/'`$(srcdir)/generated/parity_l8.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/parity_l8.Tpo $(DEPDIR)/parity_l8.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/parity_l8.c' object='parity_l8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parity_l8.lo `test -f '$(srcdir)/generated/parity_l8.c' || echo '$(srcdir)/'`$(srcdir)/generated/parity_l8.c + +parity_l16.lo: $(srcdir)/generated/parity_l16.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parity_l16.lo -MD -MP -MF $(DEPDIR)/parity_l16.Tpo -c -o parity_l16.lo `test -f '$(srcdir)/generated/parity_l16.c' || echo '$(srcdir)/'`$(srcdir)/generated/parity_l16.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/parity_l16.Tpo $(DEPDIR)/parity_l16.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/parity_l16.c' object='parity_l16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parity_l16.lo `test -f '$(srcdir)/generated/parity_l16.c' || echo '$(srcdir)/'`$(srcdir)/generated/parity_l16.c + matmul_i1.lo: $(srcdir)/generated/matmul_i1.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_i1.lo -MD -MP -MF $(DEPDIR)/matmul_i1.Tpo -c -o matmul_i1.lo `test -f '$(srcdir)/generated/matmul_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i1.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/matmul_i1.Tpo $(DEPDIR)/matmul_i1.Plo @@ -5603,6 +5692,12 @@ fpu-target.h: $(srcdir)/$(FPU_HOST_HEADER) @MAINTAINER_MODE_TRUE@$(i_matmull_c): m4/matmull.m4 $(I_M4_DEPS) @MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 matmull.m4 > $@ +@MAINTAINER_MODE_TRUE@$(i_norm2_c): m4/norm2.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 norm2.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_parity_c): m4/parity.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 parity.m4 > $@ + @MAINTAINER_MODE_TRUE@$(i_transpose_c): m4/transpose.m4 $(I_M4_DEPS) @MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 transpose.m4 > $@ diff --git a/libgfortran/generated/all_l1.c b/libgfortran/generated/all_l1.c index 486bab2e436..400cfd90115 100644 --- a/libgfortran/generated/all_l1.c +++ b/libgfortran/generated/all_l1.c @@ -1,8 +1,8 @@ /* Implementation of the ALL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/all_l16.c b/libgfortran/generated/all_l16.c index 35f8a9621b4..abe10d7b388 100644 --- a/libgfortran/generated/all_l16.c +++ b/libgfortran/generated/all_l16.c @@ -1,8 +1,8 @@ /* Implementation of the ALL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/all_l2.c b/libgfortran/generated/all_l2.c index 81532ea431b..2cbd1266b74 100644 --- a/libgfortran/generated/all_l2.c +++ b/libgfortran/generated/all_l2.c @@ -1,8 +1,8 @@ /* Implementation of the ALL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/all_l4.c b/libgfortran/generated/all_l4.c index 6657e15cd89..14b63034949 100644 --- a/libgfortran/generated/all_l4.c +++ b/libgfortran/generated/all_l4.c @@ -1,8 +1,8 @@ /* Implementation of the ALL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/all_l8.c b/libgfortran/generated/all_l8.c index 4c3d5563f83..ae5e6faf3c3 100644 --- a/libgfortran/generated/all_l8.c +++ b/libgfortran/generated/all_l8.c @@ -1,8 +1,8 @@ /* Implementation of the ALL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/any_l1.c b/libgfortran/generated/any_l1.c index a69f22e6f82..f8af5447a40 100644 --- a/libgfortran/generated/any_l1.c +++ b/libgfortran/generated/any_l1.c @@ -1,8 +1,8 @@ /* Implementation of the ANY intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/any_l16.c b/libgfortran/generated/any_l16.c index b5ab5b214ac..f92d7152b12 100644 --- a/libgfortran/generated/any_l16.c +++ b/libgfortran/generated/any_l16.c @@ -1,8 +1,8 @@ /* Implementation of the ANY intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/any_l2.c b/libgfortran/generated/any_l2.c index 05673e8daba..9c5e90a03b8 100644 --- a/libgfortran/generated/any_l2.c +++ b/libgfortran/generated/any_l2.c @@ -1,8 +1,8 @@ /* Implementation of the ANY intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/any_l4.c b/libgfortran/generated/any_l4.c index 8f82741701f..44d5ed97e6b 100644 --- a/libgfortran/generated/any_l4.c +++ b/libgfortran/generated/any_l4.c @@ -1,8 +1,8 @@ /* Implementation of the ANY intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/any_l8.c b/libgfortran/generated/any_l8.c index 2a094f0a5fe..eabf8300dcb 100644 --- a/libgfortran/generated/any_l8.c +++ b/libgfortran/generated/any_l8.c @@ -1,8 +1,8 @@ /* Implementation of the ANY intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/count_16_l.c b/libgfortran/generated/count_16_l.c index 8c3fc7d9a16..d65999aff5a 100644 --- a/libgfortran/generated/count_16_l.c +++ b/libgfortran/generated/count_16_l.c @@ -1,8 +1,8 @@ /* Implementation of the COUNT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/count_1_l.c b/libgfortran/generated/count_1_l.c index faf9176943c..b2d89f4af37 100644 --- a/libgfortran/generated/count_1_l.c +++ b/libgfortran/generated/count_1_l.c @@ -1,8 +1,8 @@ /* Implementation of the COUNT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/count_2_l.c b/libgfortran/generated/count_2_l.c index 0d1a22339e9..8369a94feb8 100644 --- a/libgfortran/generated/count_2_l.c +++ b/libgfortran/generated/count_2_l.c @@ -1,8 +1,8 @@ /* Implementation of the COUNT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/count_4_l.c b/libgfortran/generated/count_4_l.c index d4bfbd47ef3..8b5cbb0faa3 100644 --- a/libgfortran/generated/count_4_l.c +++ b/libgfortran/generated/count_4_l.c @@ -1,8 +1,8 @@ /* Implementation of the COUNT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/count_8_l.c b/libgfortran/generated/count_8_l.c index 2a62ea87bd4..9cb6a26f2f1 100644 --- a/libgfortran/generated/count_8_l.c +++ b/libgfortran/generated/count_8_l.c @@ -1,8 +1,8 @@ /* Implementation of the COUNT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff --git a/libgfortran/generated/maxloc1_16_i1.c b/libgfortran/generated/maxloc1_16_i1.c index 7319f57beb4..a3aafcf6f80 100644 --- a/libgfortran/generated/maxloc1_16_i1.c +++ b/libgfortran/generated/maxloc1_16_i1.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_16_i1 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_16_i16.c b/libgfortran/generated/maxloc1_16_i16.c index 4d9b57be989..8dc8ef79d23 100644 --- a/libgfortran/generated/maxloc1_16_i16.c +++ b/libgfortran/generated/maxloc1_16_i16.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_16_i16 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_16_i2.c b/libgfortran/generated/maxloc1_16_i2.c index fcca4b791d9..d1325729996 100644 --- a/libgfortran/generated/maxloc1_16_i2.c +++ b/libgfortran/generated/maxloc1_16_i2.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_16_i2 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_16_i4.c b/libgfortran/generated/maxloc1_16_i4.c index 714869760a2..995b1e44f03 100644 --- a/libgfortran/generated/maxloc1_16_i4.c +++ b/libgfortran/generated/maxloc1_16_i4.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_16_i4 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_16_i8.c b/libgfortran/generated/maxloc1_16_i8.c index 48c0bd040ad..5376bcb3213 100644 --- a/libgfortran/generated/maxloc1_16_i8.c +++ b/libgfortran/generated/maxloc1_16_i8.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_16_i8 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_16_r10.c b/libgfortran/generated/maxloc1_16_r10.c index 991830bebd8..a23655da947 100644 --- a/libgfortran/generated/maxloc1_16_r10.c +++ b/libgfortran/generated/maxloc1_16_r10.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_16_r10 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_16_r16.c b/libgfortran/generated/maxloc1_16_r16.c index eb9dd4d4566..9e47498169f 100644 --- a/libgfortran/generated/maxloc1_16_r16.c +++ b/libgfortran/generated/maxloc1_16_r16.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_16_r16 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_16_r4.c b/libgfortran/generated/maxloc1_16_r4.c index ced073aeecb..a551aff9945 100644 --- a/libgfortran/generated/maxloc1_16_r4.c +++ b/libgfortran/generated/maxloc1_16_r4.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_16_r4 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_16_r8.c b/libgfortran/generated/maxloc1_16_r8.c index 7dacbb8a69a..802ea09825f 100644 --- a/libgfortran/generated/maxloc1_16_r8.c +++ b/libgfortran/generated/maxloc1_16_r8.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_16_r8 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_4_i1.c b/libgfortran/generated/maxloc1_4_i1.c index 2bda8e5a0a1..484cb0d4d45 100644 --- a/libgfortran/generated/maxloc1_4_i1.c +++ b/libgfortran/generated/maxloc1_4_i1.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_4_i1 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_4_i16.c b/libgfortran/generated/maxloc1_4_i16.c index 0f45cffaeac..353d4975505 100644 --- a/libgfortran/generated/maxloc1_4_i16.c +++ b/libgfortran/generated/maxloc1_4_i16.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_4_i16 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_4_i2.c b/libgfortran/generated/maxloc1_4_i2.c index b165d30ee6b..7342ac8e1ab 100644 --- a/libgfortran/generated/maxloc1_4_i2.c +++ b/libgfortran/generated/maxloc1_4_i2.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_4_i2 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_4_i4.c b/libgfortran/generated/maxloc1_4_i4.c index bf855ca3881..12b978f9289 100644 --- a/libgfortran/generated/maxloc1_4_i4.c +++ b/libgfortran/generated/maxloc1_4_i4.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_4_i4 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_4_i8.c b/libgfortran/generated/maxloc1_4_i8.c index 603e6d65412..4f5c6590bf0 100644 --- a/libgfortran/generated/maxloc1_4_i8.c +++ b/libgfortran/generated/maxloc1_4_i8.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_4_i8 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_4_r10.c b/libgfortran/generated/maxloc1_4_r10.c index 78044462834..5df2ca36bed 100644 --- a/libgfortran/generated/maxloc1_4_r10.c +++ b/libgfortran/generated/maxloc1_4_r10.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_4_r10 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_4_r16.c b/libgfortran/generated/maxloc1_4_r16.c index 4b0f3241007..c556452a2fd 100644 --- a/libgfortran/generated/maxloc1_4_r16.c +++ b/libgfortran/generated/maxloc1_4_r16.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_4_r16 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_4_r4.c b/libgfortran/generated/maxloc1_4_r4.c index 6d02691c55e..fecd072b2e0 100644 --- a/libgfortran/generated/maxloc1_4_r4.c +++ b/libgfortran/generated/maxloc1_4_r4.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_4_r4 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_4_r8.c b/libgfortran/generated/maxloc1_4_r8.c index 363d93858f3..a63fe367c85 100644 --- a/libgfortran/generated/maxloc1_4_r8.c +++ b/libgfortran/generated/maxloc1_4_r8.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_4_r8 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_8_i1.c b/libgfortran/generated/maxloc1_8_i1.c index 20a95b86c92..d70c663128c 100644 --- a/libgfortran/generated/maxloc1_8_i1.c +++ b/libgfortran/generated/maxloc1_8_i1.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_8_i1 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_8_i16.c b/libgfortran/generated/maxloc1_8_i16.c index 2909ee43a81..ce4afb12176 100644 --- a/libgfortran/generated/maxloc1_8_i16.c +++ b/libgfortran/generated/maxloc1_8_i16.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_8_i16 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_8_i2.c b/libgfortran/generated/maxloc1_8_i2.c index fe29becd60b..1bffde89c9b 100644 --- a/libgfortran/generated/maxloc1_8_i2.c +++ b/libgfortran/generated/maxloc1_8_i2.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_8_i2 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_8_i4.c b/libgfortran/generated/maxloc1_8_i4.c index b8e2619e1dc..3abd6ab6e13 100644 --- a/libgfortran/generated/maxloc1_8_i4.c +++ b/libgfortran/generated/maxloc1_8_i4.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_8_i4 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_8_i8.c b/libgfortran/generated/maxloc1_8_i8.c index 4b0a02ae643..57fcae0e48d 100644 --- a/libgfortran/generated/maxloc1_8_i8.c +++ b/libgfortran/generated/maxloc1_8_i8.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_8_i8 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_8_r10.c b/libgfortran/generated/maxloc1_8_r10.c index 801a3273f7c..ca8047e5cca 100644 --- a/libgfortran/generated/maxloc1_8_r10.c +++ b/libgfortran/generated/maxloc1_8_r10.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_8_r10 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_8_r16.c b/libgfortran/generated/maxloc1_8_r16.c index 6ec85941a61..12ab6669898 100644 --- a/libgfortran/generated/maxloc1_8_r16.c +++ b/libgfortran/generated/maxloc1_8_r16.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_8_r16 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_8_r4.c b/libgfortran/generated/maxloc1_8_r4.c index 2696304a774..479660e6e42 100644 --- a/libgfortran/generated/maxloc1_8_r4.c +++ b/libgfortran/generated/maxloc1_8_r4.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_8_r4 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxloc1_8_r8.c b/libgfortran/generated/maxloc1_8_r8.c index 8bbb68af2ae..6f47a15415d 100644 --- a/libgfortran/generated/maxloc1_8_r8.c +++ b/libgfortran/generated/maxloc1_8_r8.c @@ -1,8 +1,8 @@ /* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ maxloc1_8_r8 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/maxval_i1.c b/libgfortran/generated/maxval_i1.c index 56bd2e25cfe..cb429016ce4 100644 --- a/libgfortran/generated/maxval_i1.c +++ b/libgfortran/generated/maxval_i1.c @@ -1,8 +1,8 @@ /* Implementation of the MAXVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ maxval_i1 (gfc_array_i1 * const restrict retarray, if (*src > result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/maxval_i16.c b/libgfortran/generated/maxval_i16.c index 5b21ac9295f..4f11635a0f6 100644 --- a/libgfortran/generated/maxval_i16.c +++ b/libgfortran/generated/maxval_i16.c @@ -1,8 +1,8 @@ /* Implementation of the MAXVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ maxval_i16 (gfc_array_i16 * const restrict retarray, if (*src > result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/maxval_i2.c b/libgfortran/generated/maxval_i2.c index cbf4efb8be0..8fb385688d8 100644 --- a/libgfortran/generated/maxval_i2.c +++ b/libgfortran/generated/maxval_i2.c @@ -1,8 +1,8 @@ /* Implementation of the MAXVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ maxval_i2 (gfc_array_i2 * const restrict retarray, if (*src > result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/maxval_i4.c b/libgfortran/generated/maxval_i4.c index d997bde1f7d..c67d0cb6986 100644 --- a/libgfortran/generated/maxval_i4.c +++ b/libgfortran/generated/maxval_i4.c @@ -1,8 +1,8 @@ /* Implementation of the MAXVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ maxval_i4 (gfc_array_i4 * const restrict retarray, if (*src > result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/maxval_i8.c b/libgfortran/generated/maxval_i8.c index 476d1385326..b2f33ddde86 100644 --- a/libgfortran/generated/maxval_i8.c +++ b/libgfortran/generated/maxval_i8.c @@ -1,8 +1,8 @@ /* Implementation of the MAXVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ maxval_i8 (gfc_array_i8 * const restrict retarray, if (*src > result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/maxval_r10.c b/libgfortran/generated/maxval_r10.c index 84daf681f52..75c45f93a5a 100644 --- a/libgfortran/generated/maxval_r10.c +++ b/libgfortran/generated/maxval_r10.c @@ -1,8 +1,8 @@ /* Implementation of the MAXVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ maxval_r10 (gfc_array_r10 * const restrict retarray, if (*src > result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/maxval_r16.c b/libgfortran/generated/maxval_r16.c index 05ea566f956..4ade432b297 100644 --- a/libgfortran/generated/maxval_r16.c +++ b/libgfortran/generated/maxval_r16.c @@ -1,8 +1,8 @@ /* Implementation of the MAXVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ maxval_r16 (gfc_array_r16 * const restrict retarray, if (*src > result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/maxval_r4.c b/libgfortran/generated/maxval_r4.c index 21247979117..567ad3b4008 100644 --- a/libgfortran/generated/maxval_r4.c +++ b/libgfortran/generated/maxval_r4.c @@ -1,8 +1,8 @@ /* Implementation of the MAXVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ maxval_r4 (gfc_array_r4 * const restrict retarray, if (*src > result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/maxval_r8.c b/libgfortran/generated/maxval_r8.c index 71758b8644a..196021cf0c2 100644 --- a/libgfortran/generated/maxval_r8.c +++ b/libgfortran/generated/maxval_r8.c @@ -1,8 +1,8 @@ /* Implementation of the MAXVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ maxval_r8 (gfc_array_r8 * const restrict retarray, if (*src > result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_16_i1.c b/libgfortran/generated/minloc1_16_i1.c index a81e82108cb..a287fee23c0 100644 --- a/libgfortran/generated/minloc1_16_i1.c +++ b/libgfortran/generated/minloc1_16_i1.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_16_i1 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_16_i16.c b/libgfortran/generated/minloc1_16_i16.c index 2efb5013ef0..852118813b6 100644 --- a/libgfortran/generated/minloc1_16_i16.c +++ b/libgfortran/generated/minloc1_16_i16.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_16_i16 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_16_i2.c b/libgfortran/generated/minloc1_16_i2.c index 404338e39b3..f7c951c7b40 100644 --- a/libgfortran/generated/minloc1_16_i2.c +++ b/libgfortran/generated/minloc1_16_i2.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_16_i2 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_16_i4.c b/libgfortran/generated/minloc1_16_i4.c index be8e99a66ba..98ec8996daf 100644 --- a/libgfortran/generated/minloc1_16_i4.c +++ b/libgfortran/generated/minloc1_16_i4.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_16_i4 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_16_i8.c b/libgfortran/generated/minloc1_16_i8.c index 53e517ce404..ab0a296b7af 100644 --- a/libgfortran/generated/minloc1_16_i8.c +++ b/libgfortran/generated/minloc1_16_i8.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_16_i8 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_16_r10.c b/libgfortran/generated/minloc1_16_r10.c index 67ae67bde26..5fe952cebc4 100644 --- a/libgfortran/generated/minloc1_16_r10.c +++ b/libgfortran/generated/minloc1_16_r10.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_16_r10 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_16_r16.c b/libgfortran/generated/minloc1_16_r16.c index 4ea3c308f36..d68cc7aab36 100644 --- a/libgfortran/generated/minloc1_16_r16.c +++ b/libgfortran/generated/minloc1_16_r16.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_16_r16 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_16_r4.c b/libgfortran/generated/minloc1_16_r4.c index d786ca2253b..8207441618e 100644 --- a/libgfortran/generated/minloc1_16_r4.c +++ b/libgfortran/generated/minloc1_16_r4.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_16_r4 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_16_r8.c b/libgfortran/generated/minloc1_16_r8.c index 0dcda10d9d7..72bfcce6488 100644 --- a/libgfortran/generated/minloc1_16_r8.c +++ b/libgfortran/generated/minloc1_16_r8.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_16_r8 (gfc_array_i16 * const restrict retarray, result = (GFC_INTEGER_16)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_4_i1.c b/libgfortran/generated/minloc1_4_i1.c index b71179044f5..631645f6b08 100644 --- a/libgfortran/generated/minloc1_4_i1.c +++ b/libgfortran/generated/minloc1_4_i1.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_4_i1 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_4_i16.c b/libgfortran/generated/minloc1_4_i16.c index f867804a178..2096589cfec 100644 --- a/libgfortran/generated/minloc1_4_i16.c +++ b/libgfortran/generated/minloc1_4_i16.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_4_i16 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_4_i2.c b/libgfortran/generated/minloc1_4_i2.c index 8d09ba5fbb9..2bdedd82d3a 100644 --- a/libgfortran/generated/minloc1_4_i2.c +++ b/libgfortran/generated/minloc1_4_i2.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_4_i2 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_4_i4.c b/libgfortran/generated/minloc1_4_i4.c index 2b8c02b96ef..513b0cf8ec6 100644 --- a/libgfortran/generated/minloc1_4_i4.c +++ b/libgfortran/generated/minloc1_4_i4.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_4_i4 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_4_i8.c b/libgfortran/generated/minloc1_4_i8.c index ae5049ab1b6..c15914bc7b0 100644 --- a/libgfortran/generated/minloc1_4_i8.c +++ b/libgfortran/generated/minloc1_4_i8.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_4_i8 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_4_r10.c b/libgfortran/generated/minloc1_4_r10.c index 8d14c2dc871..f60262ac42a 100644 --- a/libgfortran/generated/minloc1_4_r10.c +++ b/libgfortran/generated/minloc1_4_r10.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_4_r10 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_4_r16.c b/libgfortran/generated/minloc1_4_r16.c index fcb8d0cf72d..e0c1e6b262d 100644 --- a/libgfortran/generated/minloc1_4_r16.c +++ b/libgfortran/generated/minloc1_4_r16.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_4_r16 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_4_r4.c b/libgfortran/generated/minloc1_4_r4.c index 75d43ffcf4a..31104510b28 100644 --- a/libgfortran/generated/minloc1_4_r4.c +++ b/libgfortran/generated/minloc1_4_r4.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_4_r4 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_4_r8.c b/libgfortran/generated/minloc1_4_r8.c index 49e03203255..4888dd72f3d 100644 --- a/libgfortran/generated/minloc1_4_r8.c +++ b/libgfortran/generated/minloc1_4_r8.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_4_r8 (gfc_array_i4 * const restrict retarray, result = (GFC_INTEGER_4)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_8_i1.c b/libgfortran/generated/minloc1_8_i1.c index 7104a60506d..953460d33be 100644 --- a/libgfortran/generated/minloc1_8_i1.c +++ b/libgfortran/generated/minloc1_8_i1.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_8_i1 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_8_i16.c b/libgfortran/generated/minloc1_8_i16.c index ac994015e85..9ac6de055b8 100644 --- a/libgfortran/generated/minloc1_8_i16.c +++ b/libgfortran/generated/minloc1_8_i16.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_8_i16 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_8_i2.c b/libgfortran/generated/minloc1_8_i2.c index 73042fd95a1..7f4db409831 100644 --- a/libgfortran/generated/minloc1_8_i2.c +++ b/libgfortran/generated/minloc1_8_i2.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_8_i2 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_8_i4.c b/libgfortran/generated/minloc1_8_i4.c index 2eb44c45a30..cb68b4b78f5 100644 --- a/libgfortran/generated/minloc1_8_i4.c +++ b/libgfortran/generated/minloc1_8_i4.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_8_i4 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_8_i8.c b/libgfortran/generated/minloc1_8_i8.c index 2a52c29d6bf..e6eb5c3dc03 100644 --- a/libgfortran/generated/minloc1_8_i8.c +++ b/libgfortran/generated/minloc1_8_i8.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_8_i8 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_8_r10.c b/libgfortran/generated/minloc1_8_r10.c index a84456d7ccd..c78b092d130 100644 --- a/libgfortran/generated/minloc1_8_r10.c +++ b/libgfortran/generated/minloc1_8_r10.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_8_r10 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_8_r16.c b/libgfortran/generated/minloc1_8_r16.c index 07f1ba530cf..ecd80313ca5 100644 --- a/libgfortran/generated/minloc1_8_r16.c +++ b/libgfortran/generated/minloc1_8_r16.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_8_r16 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_8_r4.c b/libgfortran/generated/minloc1_8_r4.c index 053642a7159..053ef6f7e9a 100644 --- a/libgfortran/generated/minloc1_8_r4.c +++ b/libgfortran/generated/minloc1_8_r4.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_8_r4 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minloc1_8_r8.c b/libgfortran/generated/minloc1_8_r8.c index 88f91fd6a4c..ac06ec97933 100644 --- a/libgfortran/generated/minloc1_8_r8.c +++ b/libgfortran/generated/minloc1_8_r8.c @@ -1,8 +1,8 @@ /* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -174,6 +174,7 @@ minloc1_8_r8 (gfc_array_i8 * const restrict retarray, result = (GFC_INTEGER_8)n + 1; } } + *dest = result; } } diff --git a/libgfortran/generated/minval_i1.c b/libgfortran/generated/minval_i1.c index 341fbb787df..93276f977e6 100644 --- a/libgfortran/generated/minval_i1.c +++ b/libgfortran/generated/minval_i1.c @@ -1,8 +1,8 @@ /* Implementation of the MINVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ minval_i1 (gfc_array_i1 * const restrict retarray, if (*src < result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/minval_i16.c b/libgfortran/generated/minval_i16.c index 32554df3e8e..a5ff46e9a38 100644 --- a/libgfortran/generated/minval_i16.c +++ b/libgfortran/generated/minval_i16.c @@ -1,8 +1,8 @@ /* Implementation of the MINVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ minval_i16 (gfc_array_i16 * const restrict retarray, if (*src < result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/minval_i2.c b/libgfortran/generated/minval_i2.c index d50d9373e24..b4e8dd55667 100644 --- a/libgfortran/generated/minval_i2.c +++ b/libgfortran/generated/minval_i2.c @@ -1,8 +1,8 @@ /* Implementation of the MINVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ minval_i2 (gfc_array_i2 * const restrict retarray, if (*src < result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/minval_i4.c b/libgfortran/generated/minval_i4.c index bfcf5435f55..3f9e0682b76 100644 --- a/libgfortran/generated/minval_i4.c +++ b/libgfortran/generated/minval_i4.c @@ -1,8 +1,8 @@ /* Implementation of the MINVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ minval_i4 (gfc_array_i4 * const restrict retarray, if (*src < result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/minval_i8.c b/libgfortran/generated/minval_i8.c index 242c8b74c3f..725093e21ed 100644 --- a/libgfortran/generated/minval_i8.c +++ b/libgfortran/generated/minval_i8.c @@ -1,8 +1,8 @@ /* Implementation of the MINVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ minval_i8 (gfc_array_i8 * const restrict retarray, if (*src < result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/minval_r10.c b/libgfortran/generated/minval_r10.c index e9976530078..dacbb709400 100644 --- a/libgfortran/generated/minval_r10.c +++ b/libgfortran/generated/minval_r10.c @@ -1,8 +1,8 @@ /* Implementation of the MINVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ minval_r10 (gfc_array_r10 * const restrict retarray, if (*src < result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/minval_r16.c b/libgfortran/generated/minval_r16.c index 539193f5c3d..93289ba0974 100644 --- a/libgfortran/generated/minval_r16.c +++ b/libgfortran/generated/minval_r16.c @@ -1,8 +1,8 @@ /* Implementation of the MINVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ minval_r16 (gfc_array_r16 * const restrict retarray, if (*src < result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/minval_r4.c b/libgfortran/generated/minval_r4.c index e782829d0cc..4d5b8b0cfb3 100644 --- a/libgfortran/generated/minval_r4.c +++ b/libgfortran/generated/minval_r4.c @@ -1,8 +1,8 @@ /* Implementation of the MINVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ minval_r4 (gfc_array_r4 * const restrict retarray, if (*src < result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/minval_r8.c b/libgfortran/generated/minval_r8.c index 0496a421e56..7b0fdb88fb7 100644 --- a/libgfortran/generated/minval_r8.c +++ b/libgfortran/generated/minval_r8.c @@ -1,8 +1,8 @@ /* Implementation of the MINVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -166,6 +166,7 @@ minval_r8 (gfc_array_r8 * const restrict retarray, if (*src < result) result = *src; } + *dest = result; } } diff --git a/libgfortran/generated/norm2_r10.c b/libgfortran/generated/norm2_r10.c new file mode 100644 index 00000000000..64cf404e0a6 --- /dev/null +++ b/libgfortran/generated/norm2_r10.c @@ -0,0 +1,208 @@ +/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_REAL_10) + + +extern void norm2_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(norm2_r10); + +void +norm2_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_REAL_10 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = GFC_DESCRIPTOR_EXTENT(array,dim); + if (len < 0) + len = 0; + delta = GFC_DESCRIPTOR_STRIDE(array,dim); + + for (n = 0; n < dim; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n); + extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1); + extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1); + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size, str; + + for (n = 0; n < rank; n++) + { + if (n == 0) + str = 1; + else + str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1]; + + GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str); + + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_10) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + GFC_DIMENSION_SET(retarray->dim[0], 0, -1, 1); + return; + + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " NORM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + bounds_ifunction_return ((array_t *) retarray, extent, + "return value", "NORM"); + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_REAL_10 result; + src = base; + { + + GFC_REAL_10 scale; + result = 0.0L; + scale = 1.0L; + if (len <= 0) + *dest = 0.0L; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src != 0.0L) + { + GFC_REAL_10 absX, val; + absX = fabsl (*src); + if (scale < absX) + { + val = scale / absX; + result = 1.0L + result * val * val; + scale = absX; + } + else + { + val = absX / scale; + result += val * val; + } + } + } + result = scale * sqrtl (result); + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/libgfortran/generated/norm2_r16.c b/libgfortran/generated/norm2_r16.c new file mode 100644 index 00000000000..1fc79ae278b --- /dev/null +++ b/libgfortran/generated/norm2_r16.c @@ -0,0 +1,208 @@ +/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_REAL_16) + + +extern void norm2_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(norm2_r16); + +void +norm2_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_REAL_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = GFC_DESCRIPTOR_EXTENT(array,dim); + if (len < 0) + len = 0; + delta = GFC_DESCRIPTOR_STRIDE(array,dim); + + for (n = 0; n < dim; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n); + extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1); + extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1); + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size, str; + + for (n = 0; n < rank; n++) + { + if (n == 0) + str = 1; + else + str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1]; + + GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str); + + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_16) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + GFC_DIMENSION_SET(retarray->dim[0], 0, -1, 1); + return; + + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " NORM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + bounds_ifunction_return ((array_t *) retarray, extent, + "return value", "NORM"); + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_REAL_16 result; + src = base; + { + + GFC_REAL_16 scale; + result = 0.0L; + scale = 1.0L; + if (len <= 0) + *dest = 0.0L; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src != 0.0L) + { + GFC_REAL_16 absX, val; + absX = fabsl (*src); + if (scale < absX) + { + val = scale / absX; + result = 1.0L + result * val * val; + scale = absX; + } + else + { + val = absX / scale; + result += val * val; + } + } + } + result = scale * sqrtl (result); + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/libgfortran/generated/norm2_r4.c b/libgfortran/generated/norm2_r4.c new file mode 100644 index 00000000000..78f28dc77fd --- /dev/null +++ b/libgfortran/generated/norm2_r4.c @@ -0,0 +1,208 @@ +/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_REAL_4) + + +extern void norm2_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(norm2_r4); + +void +norm2_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_REAL_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = GFC_DESCRIPTOR_EXTENT(array,dim); + if (len < 0) + len = 0; + delta = GFC_DESCRIPTOR_STRIDE(array,dim); + + for (n = 0; n < dim; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n); + extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1); + extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1); + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size, str; + + for (n = 0; n < rank; n++) + { + if (n == 0) + str = 1; + else + str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1]; + + GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str); + + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_4) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + GFC_DIMENSION_SET(retarray->dim[0], 0, -1, 1); + return; + + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " NORM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + bounds_ifunction_return ((array_t *) retarray, extent, + "return value", "NORM"); + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_REAL_4 result; + src = base; + { + + GFC_REAL_4 scale; + result = 0.0F; + scale = 1.0F; + if (len <= 0) + *dest = 0.0F; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src != 0.0F) + { + GFC_REAL_4 absX, val; + absX = fabsf (*src); + if (scale < absX) + { + val = scale / absX; + result = 1.0F + result * val * val; + scale = absX; + } + else + { + val = absX / scale; + result += val * val; + } + } + } + result = scale * sqrtf (result); + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/libgfortran/generated/norm2_r8.c b/libgfortran/generated/norm2_r8.c new file mode 100644 index 00000000000..fd9aba7416d --- /dev/null +++ b/libgfortran/generated/norm2_r8.c @@ -0,0 +1,208 @@ +/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_REAL_8) + + +extern void norm2_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(norm2_r8); + +void +norm2_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_REAL_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = GFC_DESCRIPTOR_EXTENT(array,dim); + if (len < 0) + len = 0; + delta = GFC_DESCRIPTOR_STRIDE(array,dim); + + for (n = 0; n < dim; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n); + extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1); + extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1); + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size, str; + + for (n = 0; n < rank; n++) + { + if (n == 0) + str = 1; + else + str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1]; + + GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str); + + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_8) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + GFC_DIMENSION_SET(retarray->dim[0], 0, -1, 1); + return; + + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " NORM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + bounds_ifunction_return ((array_t *) retarray, extent, + "return value", "NORM"); + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_REAL_8 result; + src = base; + { + + GFC_REAL_8 scale; + result = 0.0; + scale = 1.0; + if (len <= 0) + *dest = 0.0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src != 0.0) + { + GFC_REAL_8 absX, val; + absX = fabs (*src); + if (scale < absX) + { + val = scale / absX; + result = 1.0 + result * val * val; + scale = absX; + } + else + { + val = absX / scale; + result += val * val; + } + } + } + result = scale * sqrt (result); + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/libgfortran/generated/parity_l1.c b/libgfortran/generated/parity_l1.c new file mode 100644 index 00000000000..4fef2774495 --- /dev/null +++ b/libgfortran/generated/parity_l1.c @@ -0,0 +1,191 @@ +/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_1) && defined (HAVE_GFC_LOGICAL_1) + + +extern void parity_l1 (gfc_array_l1 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(parity_l1); + +void +parity_l1 (gfc_array_l1 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_1 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = GFC_DESCRIPTOR_EXTENT(array,dim); + if (len < 0) + len = 0; + delta = GFC_DESCRIPTOR_STRIDE(array,dim); + + for (n = 0; n < dim; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n); + extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1); + extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1); + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size, str; + + for (n = 0; n < rank; n++) + { + if (n == 0) + str = 1; + else + str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1]; + + GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str); + + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_1) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + GFC_DIMENSION_SET(retarray->dim[0], 0, -1, 1); + return; + + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PARITY intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + bounds_ifunction_return ((array_t *) retarray, extent, + "return value", "PARITY"); + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_1 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result = result != *src; + } + + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/libgfortran/generated/parity_l16.c b/libgfortran/generated/parity_l16.c new file mode 100644 index 00000000000..45f4457161f --- /dev/null +++ b/libgfortran/generated/parity_l16.c @@ -0,0 +1,191 @@ +/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_16) && defined (HAVE_GFC_LOGICAL_16) + + +extern void parity_l16 (gfc_array_l16 * const restrict, + gfc_array_l16 * const restrict, const index_type * const restrict); +export_proto(parity_l16); + +void +parity_l16 (gfc_array_l16 * const restrict retarray, + gfc_array_l16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_16 * restrict base; + GFC_LOGICAL_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = GFC_DESCRIPTOR_EXTENT(array,dim); + if (len < 0) + len = 0; + delta = GFC_DESCRIPTOR_STRIDE(array,dim); + + for (n = 0; n < dim; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n); + extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1); + extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1); + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size, str; + + for (n = 0; n < rank; n++) + { + if (n == 0) + str = 1; + else + str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1]; + + GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str); + + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_16) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + GFC_DIMENSION_SET(retarray->dim[0], 0, -1, 1); + return; + + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PARITY intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + bounds_ifunction_return ((array_t *) retarray, extent, + "return value", "PARITY"); + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_16 * restrict src; + GFC_LOGICAL_16 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result = result != *src; + } + + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/libgfortran/generated/parity_l2.c b/libgfortran/generated/parity_l2.c new file mode 100644 index 00000000000..13e77bd52e0 --- /dev/null +++ b/libgfortran/generated/parity_l2.c @@ -0,0 +1,191 @@ +/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_2) && defined (HAVE_GFC_LOGICAL_2) + + +extern void parity_l2 (gfc_array_l2 * const restrict, + gfc_array_l2 * const restrict, const index_type * const restrict); +export_proto(parity_l2); + +void +parity_l2 (gfc_array_l2 * const restrict retarray, + gfc_array_l2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_2 * restrict base; + GFC_LOGICAL_2 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = GFC_DESCRIPTOR_EXTENT(array,dim); + if (len < 0) + len = 0; + delta = GFC_DESCRIPTOR_STRIDE(array,dim); + + for (n = 0; n < dim; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n); + extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1); + extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1); + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size, str; + + for (n = 0; n < rank; n++) + { + if (n == 0) + str = 1; + else + str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1]; + + GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str); + + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_2) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + GFC_DIMENSION_SET(retarray->dim[0], 0, -1, 1); + return; + + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PARITY intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + bounds_ifunction_return ((array_t *) retarray, extent, + "return value", "PARITY"); + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_2 * restrict src; + GFC_LOGICAL_2 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result = result != *src; + } + + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/libgfortran/generated/parity_l4.c b/libgfortran/generated/parity_l4.c new file mode 100644 index 00000000000..5d7fbbef625 --- /dev/null +++ b/libgfortran/generated/parity_l4.c @@ -0,0 +1,191 @@ +/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_4) && defined (HAVE_GFC_LOGICAL_4) + + +extern void parity_l4 (gfc_array_l4 * const restrict, + gfc_array_l4 * const restrict, const index_type * const restrict); +export_proto(parity_l4); + +void +parity_l4 (gfc_array_l4 * const restrict retarray, + gfc_array_l4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_4 * restrict base; + GFC_LOGICAL_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = GFC_DESCRIPTOR_EXTENT(array,dim); + if (len < 0) + len = 0; + delta = GFC_DESCRIPTOR_STRIDE(array,dim); + + for (n = 0; n < dim; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n); + extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1); + extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1); + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size, str; + + for (n = 0; n < rank; n++) + { + if (n == 0) + str = 1; + else + str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1]; + + GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str); + + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_4) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + GFC_DIMENSION_SET(retarray->dim[0], 0, -1, 1); + return; + + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PARITY intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + bounds_ifunction_return ((array_t *) retarray, extent, + "return value", "PARITY"); + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_4 * restrict src; + GFC_LOGICAL_4 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result = result != *src; + } + + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/libgfortran/generated/parity_l8.c b/libgfortran/generated/parity_l8.c new file mode 100644 index 00000000000..1d9ba82e091 --- /dev/null +++ b/libgfortran/generated/parity_l8.c @@ -0,0 +1,191 @@ +/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_8) && defined (HAVE_GFC_LOGICAL_8) + + +extern void parity_l8 (gfc_array_l8 * const restrict, + gfc_array_l8 * const restrict, const index_type * const restrict); +export_proto(parity_l8); + +void +parity_l8 (gfc_array_l8 * const restrict retarray, + gfc_array_l8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_8 * restrict base; + GFC_LOGICAL_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = GFC_DESCRIPTOR_EXTENT(array,dim); + if (len < 0) + len = 0; + delta = GFC_DESCRIPTOR_STRIDE(array,dim); + + for (n = 0; n < dim; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n); + extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1); + extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1); + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size, str; + + for (n = 0; n < rank; n++) + { + if (n == 0) + str = 1; + else + str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1]; + + GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str); + + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_8) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + GFC_DIMENSION_SET(retarray->dim[0], 0, -1, 1); + return; + + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PARITY intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + bounds_ifunction_return ((array_t *) retarray, extent, + "return value", "PARITY"); + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_8 * restrict src; + GFC_LOGICAL_8 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result = result != *src; + } + + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/libgfortran/generated/product_c10.c b/libgfortran/generated/product_c10.c index ee1da3cb90b..125c44d1e0e 100644 --- a/libgfortran/generated/product_c10.c +++ b/libgfortran/generated/product_c10.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_c10 (gfc_array_c10 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_c16.c b/libgfortran/generated/product_c16.c index eeeeb66448b..6a64e656209 100644 --- a/libgfortran/generated/product_c16.c +++ b/libgfortran/generated/product_c16.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_c16 (gfc_array_c16 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_c4.c b/libgfortran/generated/product_c4.c index 1a44948b8f0..9c092eb4670 100644 --- a/libgfortran/generated/product_c4.c +++ b/libgfortran/generated/product_c4.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_c4 (gfc_array_c4 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_c8.c b/libgfortran/generated/product_c8.c index ad3f11155f0..a6b3c3db12b 100644 --- a/libgfortran/generated/product_c8.c +++ b/libgfortran/generated/product_c8.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_c8 (gfc_array_c8 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_i1.c b/libgfortran/generated/product_i1.c index 202d0cb4f73..96c4f9c45d6 100644 --- a/libgfortran/generated/product_i1.c +++ b/libgfortran/generated/product_i1.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_i1 (gfc_array_i1 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_i16.c b/libgfortran/generated/product_i16.c index 5e471863e83..bae7554a75b 100644 --- a/libgfortran/generated/product_i16.c +++ b/libgfortran/generated/product_i16.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_i16 (gfc_array_i16 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_i2.c b/libgfortran/generated/product_i2.c index c5bfc293e55..5546f59e389 100644 --- a/libgfortran/generated/product_i2.c +++ b/libgfortran/generated/product_i2.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_i2 (gfc_array_i2 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_i4.c b/libgfortran/generated/product_i4.c index 03414453140..acb2f9780dc 100644 --- a/libgfortran/generated/product_i4.c +++ b/libgfortran/generated/product_i4.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_i4 (gfc_array_i4 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_i8.c b/libgfortran/generated/product_i8.c index d0bfb858c1c..bb2e63147fa 100644 --- a/libgfortran/generated/product_i8.c +++ b/libgfortran/generated/product_i8.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_i8 (gfc_array_i8 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_r10.c b/libgfortran/generated/product_r10.c index 694cc86dacc..ae86e720497 100644 --- a/libgfortran/generated/product_r10.c +++ b/libgfortran/generated/product_r10.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_r10 (gfc_array_r10 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_r16.c b/libgfortran/generated/product_r16.c index dcad0eda649..71bc8cc0fdb 100644 --- a/libgfortran/generated/product_r16.c +++ b/libgfortran/generated/product_r16.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_r16 (gfc_array_r16 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_r4.c b/libgfortran/generated/product_r4.c index 26fad0ddb0e..142b7c3ddf8 100644 --- a/libgfortran/generated/product_r4.c +++ b/libgfortran/generated/product_r4.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_r4 (gfc_array_r4 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/product_r8.c b/libgfortran/generated/product_r8.c index 06ee57d1f18..8e50e01d2af 100644 --- a/libgfortran/generated/product_r8.c +++ b/libgfortran/generated/product_r8.c @@ -1,8 +1,8 @@ /* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -152,6 +152,7 @@ product_r8 (gfc_array_r8 * const restrict retarray, result *= *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_c10.c b/libgfortran/generated/sum_c10.c index 4008607ea69..f254190d4c0 100644 --- a/libgfortran/generated/sum_c10.c +++ b/libgfortran/generated/sum_c10.c @@ -152,6 +152,7 @@ sum_c10 (gfc_array_c10 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_c16.c b/libgfortran/generated/sum_c16.c index 426eb108866..5505647ff1f 100644 --- a/libgfortran/generated/sum_c16.c +++ b/libgfortran/generated/sum_c16.c @@ -152,6 +152,7 @@ sum_c16 (gfc_array_c16 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_c4.c b/libgfortran/generated/sum_c4.c index 1991a3e817b..99a6e35207c 100644 --- a/libgfortran/generated/sum_c4.c +++ b/libgfortran/generated/sum_c4.c @@ -152,6 +152,7 @@ sum_c4 (gfc_array_c4 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_c8.c b/libgfortran/generated/sum_c8.c index 3272bbc4953..505050761da 100644 --- a/libgfortran/generated/sum_c8.c +++ b/libgfortran/generated/sum_c8.c @@ -152,6 +152,7 @@ sum_c8 (gfc_array_c8 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_i1.c b/libgfortran/generated/sum_i1.c index df8338d3b87..d839b0fee68 100644 --- a/libgfortran/generated/sum_i1.c +++ b/libgfortran/generated/sum_i1.c @@ -152,6 +152,7 @@ sum_i1 (gfc_array_i1 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_i16.c b/libgfortran/generated/sum_i16.c index 50ff8aba70a..d02a1714695 100644 --- a/libgfortran/generated/sum_i16.c +++ b/libgfortran/generated/sum_i16.c @@ -152,6 +152,7 @@ sum_i16 (gfc_array_i16 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_i2.c b/libgfortran/generated/sum_i2.c index 3fb848f2c47..d5b16dd01a9 100644 --- a/libgfortran/generated/sum_i2.c +++ b/libgfortran/generated/sum_i2.c @@ -152,6 +152,7 @@ sum_i2 (gfc_array_i2 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_i4.c b/libgfortran/generated/sum_i4.c index 7ad317c4846..db0ad0e4a63 100644 --- a/libgfortran/generated/sum_i4.c +++ b/libgfortran/generated/sum_i4.c @@ -152,6 +152,7 @@ sum_i4 (gfc_array_i4 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_i8.c b/libgfortran/generated/sum_i8.c index 050e596de8a..f872bd4dc3a 100644 --- a/libgfortran/generated/sum_i8.c +++ b/libgfortran/generated/sum_i8.c @@ -152,6 +152,7 @@ sum_i8 (gfc_array_i8 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_r10.c b/libgfortran/generated/sum_r10.c index 333dbb4404c..a1bf9facf54 100644 --- a/libgfortran/generated/sum_r10.c +++ b/libgfortran/generated/sum_r10.c @@ -152,6 +152,7 @@ sum_r10 (gfc_array_r10 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_r16.c b/libgfortran/generated/sum_r16.c index a765758559d..d38170230ef 100644 --- a/libgfortran/generated/sum_r16.c +++ b/libgfortran/generated/sum_r16.c @@ -152,6 +152,7 @@ sum_r16 (gfc_array_r16 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_r4.c b/libgfortran/generated/sum_r4.c index 235195aa885..53787f959df 100644 --- a/libgfortran/generated/sum_r4.c +++ b/libgfortran/generated/sum_r4.c @@ -152,6 +152,7 @@ sum_r4 (gfc_array_r4 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/generated/sum_r8.c b/libgfortran/generated/sum_r8.c index d5c5bbbcac7..c4ab3ca8adf 100644 --- a/libgfortran/generated/sum_r8.c +++ b/libgfortran/generated/sum_r8.c @@ -152,6 +152,7 @@ sum_r8 (gfc_array_r8 * const restrict retarray, result += *src; } + *dest = result; } } diff --git a/libgfortran/gfortran.map b/libgfortran/gfortran.map index 8c0978d3eb3..f33167b1a30 100644 --- a/libgfortran/gfortran.map +++ b/libgfortran/gfortran.map @@ -1115,6 +1115,15 @@ GFORTRAN_1.4 { _gfortran_bessel_yn_r8; _gfortran_bessel_yn_r10; _gfortran_bessel_yn_r16; + _gfortran_norm2_r4; + _gfortran_norm2_r8; + _gfortran_norm2_r10; + _gfortran_norm2_r16; + _gfortran_parity_l1; + _gfortran_parity_l2; + _gfortran_parity_l4; + _gfortran_parity_l8; + _gfortran_parity_l16; } GFORTRAN_1.3; F2C_1.0 { diff --git a/libgfortran/m4/all.m4 b/libgfortran/m4/all.m4 index 4dc4d1dc2a1..cc174207817 100644 --- a/libgfortran/m4/all.m4 +++ b/libgfortran/m4/all.m4 @@ -1,8 +1,8 @@ `/* Implementation of the ALL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -39,6 +39,6 @@ ARRAY_FUNCTION(1, { result = 0; break; - }')` + }', `')` #endif' diff --git a/libgfortran/m4/any.m4 b/libgfortran/m4/any.m4 index e2a22705faf..81ec31046f5 100644 --- a/libgfortran/m4/any.m4 +++ b/libgfortran/m4/any.m4 @@ -1,8 +1,8 @@ `/* Implementation of the ANY intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -39,6 +39,6 @@ ARRAY_FUNCTION(0, { result = 1; break; - }')` + }', `')` #endif' diff --git a/libgfortran/m4/count.m4 b/libgfortran/m4/count.m4 index 5a669954c50..5998c20e685 100644 --- a/libgfortran/m4/count.m4 +++ b/libgfortran/m4/count.m4 @@ -1,8 +1,8 @@ `/* Implementation of the COUNT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -35,6 +35,6 @@ include(ifunction_logical.m4)dnl ARRAY_FUNCTION(0, ` result = 0;', ` if (*src) - result++;')` + result++;', `')` #endif' diff --git a/libgfortran/m4/ifunction.m4 b/libgfortran/m4/ifunction.m4 index 6c34eb9d7ae..3d425e0108e 100644 --- a/libgfortran/m4/ifunction.m4 +++ b/libgfortran/m4/ifunction.m4 @@ -1,6 +1,6 @@ dnl Support macro file for intrinsic functions. dnl Contains the generic sections of the array functions. -dnl This file is part of the GNU Fortran 95 Runtime Library (libgfortran) +dnl This file is part of the GNU Fortran Runtime Library (libgfortran) dnl Distributed under the GNU GPL with exception. See COPYING for details. dnl dnl Pass the implementation for a single section as the parameter to @@ -140,6 +140,7 @@ define(START_ARRAY_BLOCK, ')dnl define(FINISH_ARRAY_FUNCTION, ` } + '$1` *dest = result; } } @@ -496,7 +497,7 @@ define(ARRAY_FUNCTION, $2 START_ARRAY_BLOCK($1) $3 -FINISH_ARRAY_FUNCTION')dnl +FINISH_ARRAY_FUNCTION($4)')dnl define(MASKED_ARRAY_FUNCTION, `START_MASKED_ARRAY_FUNCTION $2 diff --git a/libgfortran/m4/maxloc1.m4 b/libgfortran/m4/maxloc1.m4 index 84b5a35c5c4..44872ee61a0 100644 --- a/libgfortran/m4/maxloc1.m4 +++ b/libgfortran/m4/maxloc1.m4 @@ -1,8 +1,8 @@ `/* Implementation of the MAXLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -56,7 +56,7 @@ ARRAY_FUNCTION(0, { maxval = *src; result = (rtype_name)n + 1; - }') + }', `') MASKED_ARRAY_FUNCTION(0, ` atype_name maxval; diff --git a/libgfortran/m4/maxval.m4 b/libgfortran/m4/maxval.m4 index 7557eb130a1..15390688056 100644 --- a/libgfortran/m4/maxval.m4 +++ b/libgfortran/m4/maxval.m4 @@ -1,8 +1,8 @@ `/* Implementation of the MAXVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -48,7 +48,7 @@ ARRAY_FUNCTION(atype_min, { #endif if (*src > result) - result = *src;') + result = *src;', `') MASKED_ARRAY_FUNCTION(atype_min, `#if defined ('atype_inf`) diff --git a/libgfortran/m4/minloc1.m4 b/libgfortran/m4/minloc1.m4 index 6fa5e69ccc7..e0bd3cd88ce 100644 --- a/libgfortran/m4/minloc1.m4 +++ b/libgfortran/m4/minloc1.m4 @@ -1,8 +1,8 @@ `/* Implementation of the MINLOC intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -94,7 +94,7 @@ MASKED_ARRAY_FUNCTION(0, { minval = *src; result = (rtype_name)n + 1; - }') + }', `') SCALAR_ARRAY_FUNCTION(0) diff --git a/libgfortran/m4/minval.m4 b/libgfortran/m4/minval.m4 index 3acae2eaa88..037dd672595 100644 --- a/libgfortran/m4/minval.m4 +++ b/libgfortran/m4/minval.m4 @@ -1,8 +1,8 @@ `/* Implementation of the MINVAL intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -81,7 +81,7 @@ MASKED_ARRAY_FUNCTION(atype_max, { #endif if (*msrc && *src < result) - result = *src;') + result = *src;', `') SCALAR_ARRAY_FUNCTION(atype_max) diff --git a/libgfortran/m4/norm2.m4 b/libgfortran/m4/norm2.m4 new file mode 100644 index 00000000000..e1d6b972df4 --- /dev/null +++ b/libgfortran/m4/norm2.m4 @@ -0,0 +1,59 @@ +`/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl +include(ifunction.m4)dnl +include(`mtype.m4')dnl + +`#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(`0.0'Q, +` 'rtype_name` scale; + result = 0.0'Q`; + scale = 1.0'Q`;', +` if (*src != 0.0'Q`) + { + 'rtype_name` absX, val; + absX = fabs'q` (*src); + if (scale < absX) + { + val = scale / absX; + result = 1.0'Q` + result * val * val; + scale = absX; + } + else + { + val = absX / scale; + result += val * val; + } + }', +` result = scale * sqrt'q` (result);') + +#endif diff --git a/libgfortran/m4/parity.m4 b/libgfortran/m4/parity.m4 new file mode 100644 index 00000000000..037e96db913 --- /dev/null +++ b/libgfortran/m4/parity.m4 @@ -0,0 +1,40 @@ +`/* Implementation of the NORM2 intrinsic + Copyright 2010 Free Software Foundation, Inc. + Contributed by Tobias Burnus + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl +include(ifunction.m4)dnl + +`#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(0, +` result = 0;', +` result = result != *src;', `') + +#endif diff --git a/libgfortran/m4/product.m4 b/libgfortran/m4/product.m4 index 669b106e0c2..6f6f2c01184 100644 --- a/libgfortran/m4/product.m4 +++ b/libgfortran/m4/product.m4 @@ -1,8 +1,8 @@ `/* Implementation of the PRODUCT intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright 2002, 2007, 2009, 2010 Free Software Foundation, Inc. Contributed by Paul Brook -This file is part of the GNU Fortran 95 runtime library (libgfortran). +This file is part of the GNU Fortran runtime library (libgfortran). Libgfortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -34,7 +34,7 @@ include(ifunction.m4)dnl ARRAY_FUNCTION(1, ` result = 1;', -` result *= *src;') +` result *= *src;', `') MASKED_ARRAY_FUNCTION(1, ` result = 1;',