From 143350a8e2a65c8604f2fc5d36e04cf838bf280a Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Thu, 22 May 2008 21:55:43 +0000 Subject: [PATCH] re PR libfortran/36302 (cshift and eoshift missing some kind=16 functions) 2008-05-22 Thomas Koenig PR libgfortran/36302 * gfortran.map (GFORTRAN_1.1): Add _gfortran_eoshift0_16, _gfortran_eoshift0_16_char, _gfortran_eoshift2_16, _gfortran_eoshift2_16_char,_gfortran_cshift0_16, _gfortran_cshift0_16_char. Sort alphabetically. * intrinsics/eoshift0.c: Add function for kind=16 integer. * intrinsics/eoshift2.c: Likewise. * intrinsics/cshift0.c: Likewise. 2008-05-22 Thomas Koenig PR libgfortran/36302 * gfortran.dg/cshift_large_1.f90: New test. * gfortran.dg/eoshift_large_1.f90: New test. From-SVN: r135777 --- gcc/testsuite/ChangeLog | 6 + gcc/testsuite/gfortran.dg/cshift_large_1.f90 | 46 ++++++++ gcc/testsuite/gfortran.dg/eoshift_large_1.f90 | 106 ++++++++++++++++++ libgfortran/ChangeLog | 11 ++ libgfortran/gfortran.map | 34 +++--- libgfortran/intrinsics/cshift0.c | 3 + libgfortran/intrinsics/eoshift0.c | 3 + libgfortran/intrinsics/eoshift2.c | 3 + 8 files changed, 198 insertions(+), 14 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/cshift_large_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/eoshift_large_1.f90 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2c62a499ce7..af0260cff6f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-05-22 Thomas Koenig + + PR libgfortran/36302 + * gfortran.dg/cshift_large_1.f90: New test. + * gfortran.dg/eoshift_large_1.f90: New test. + 2008-05-22 Rafael Espindola * gcc.c-torture/compile/20080522-1.c: New testcase. diff --git a/gcc/testsuite/gfortran.dg/cshift_large_1.f90 b/gcc/testsuite/gfortran.dg/cshift_large_1.f90 new file mode 100644 index 00000000000..e9d064e2186 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/cshift_large_1.f90 @@ -0,0 +1,46 @@ +! { dg-do run } +! { dg-require-effective-target fortran_large_int } +! Program to test the cshift intrinsic for kind=16 integers +program intrinsic_cshift + integer, parameter :: k=16 + integer(kind=k), dimension(3_k, 3_k) :: a + integer(kind=k), dimension(3_k, 3_k, 2_k) :: b + + ! Scalar shift + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = cshift (a, 1_k, 1_k) + if (any (a .ne. reshape ((/2_k, 3_k, 1_k, 5_k, 6_k, 4_k, 8_k, 9_k, 7_k/), (/3_k, 3_k/)))) & + call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = cshift (a, -2_k, dim = 2_k) + if (any (a .ne. reshape ((/4_k, 5_k, 6_k, 7_k, 8_k, 9_k, 1_k, 2_k, 3_k/), (/3_k, 3_k/)))) & + call abort + + ! Array shift + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = cshift (a, (/1_k, 0_k, -1_k/)) + if (any (a .ne. reshape ((/2_k, 3_k, 1_k, 4_k, 5_k, 6_k, 9_k, 7_k, 8_k/), (/3_k, 3_k/)))) & + call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = cshift (a, (/2_k, -2_k, 0_k/), dim = 2_k) + if (any (a .ne. reshape ((/7_k, 5_k, 3_k, 1_k, 8_k, 6_k, 4_k, 2_k, 9_k/), (/3_k, 3_k/)))) & + call abort + + ! Test arrays > rank 2 + b = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k, 11_k, 12_k, 13_k, 14_k, 15_k, 16_k, 17_k,& + 18_k, 19_k/), (/3_k, 3_k, 2_k/)) + b = cshift (b, 1_k) + if (any (b .ne. reshape ((/2_k, 3_k, 1_k, 5_k, 6_k, 4_k, 8_k, 9_k, 7_k, 12_k, 13_k, 11_k, 15_k,& + 16_k, 14_k, 18_k, 19_k, 17_k/), (/3_k, 3_k, 2_k/)))) & + call abort + + b = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k, 11_k, 12_k, 13_k, 14_k, 15_k, 16_k, 17_k,& + 18_k, 19_k/), (/3_k, 3_k, 2_k/)) + b = cshift (b, reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)), 3_k) + if (any (b .ne. reshape ((/11_k, 2_k, 13_k, 4_k, 15_k, 6_k, 17_k, 8_k, 19_k, 1_k, 12_k, 3_k,& + 14_k, 5_k, 16_k, 7_k, 18_k, 9_k/), (/3_k, 3_k, 2_k/)))) & + call abort + +end program diff --git a/gcc/testsuite/gfortran.dg/eoshift_large_1.f90 b/gcc/testsuite/gfortran.dg/eoshift_large_1.f90 new file mode 100644 index 00000000000..02938f9cb79 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/eoshift_large_1.f90 @@ -0,0 +1,106 @@ +! { dg-do run } +! { dg-require-effective-target fortran_large_int } +! Program to test the eoshift intrinsic for kind=16_k integers +! +program intrinsic_eoshift + integer, parameter :: k=16 + integer(kind=k), dimension(3_k, 3_k) :: a + integer(kind=k), dimension(3_k, 3_k, 2_k) :: b + integer(kind=k), dimension(3_k) :: bo, sh + + ! Scalar shift and scalar bound. + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, 1_k, 99_k, 1_k) + if (any (a .ne. reshape ((/2_k, 3_k, 99_k, 5_k, 6_k, 99_k, 8_k, 9_k, 99_k/), (/3_k, 3_k/)))) & + call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, 9999_k, 99_k, 1_k) + if (any (a .ne. 99_k)) call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, -2_k, dim = 2_k) + if (any (a .ne. reshape ((/0_k, 0_k, 0_k, 0_k, 0_k, 0_k, 1_k, 2_k, 3_k/), (/3_k, 3_k/)))) & + call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, -9999_k, 99_k, 1_k) + if (any (a .ne. 99_k)) call abort + + ! Array shift and scalar bound. + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, (/1_k, 0_k, -1_k/), 99_k, 1_k) + if (any (a .ne. reshape ((/2_k, 3_k, 99_k, 4_k, 5_k, 6_k, 99_k, 7_k, 8_k/), (/3_k, 3_k/)))) & + call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, (/9999_k, 0_k, -9999_k/), 99_k, 1_k) + if (any (a .ne. reshape ((/99_k, 99_k, 99_k, 4_k, 5_k, 6_k, 99_k, 99_k, 99_k/), (/3_k, 3_k/)))) & + call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, (/2_k, -2_k, 0_k/), dim = 2_k) + if (any (a .ne. reshape ((/7_k, 0_k, 3_k, 0_k, 0_k, 6_k, 0_k, 2_k, 9_k/), (/3_k, 3_k/)))) & + call abort + + ! Scalar shift and array bound. + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, 1_k, (/99_k, -1_k, 42_k/), 1_k) + if (any (a .ne. reshape ((/2_k, 3_k, 99_k, 5_k, 6_k, -1_k, 8_k, 9_k, 42_k/), (/3_k, 3_k/)))) & + call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, 9999_k, (/99_k, -1_k, 42_k/), 1_k) + if (any (a .ne. reshape ((/99_k, 99_k, 99_k, -1_k, -1_k, -1_k, 42_k, 42_k, 42_k/), & + (/3_k, 3_k/)))) call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, -9999_k, (/99_k, -1_k, 42_k/), 1_k) + if (any (a .ne. reshape ((/99_k, 99_k, 99_k, -1_k, -1_k, -1_k, 42_k, 42_k, 42_k/), & + (/3_k, 3_k/)))) call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, -2_k, (/99_k, -1_k, 42_k/), 2_k) + if (any (a .ne. reshape ((/99_k, -1_k, 42_k, 99_k, -1_k, 42_k, 1_k, 2_k, 3_k/), (/3_k, 3_k/)))) & + call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + bo = (/99_k, -1_k, 42_k/) + a = eoshift (a, -2_k, bo, 2_k) + if (any (a .ne. reshape ((/99_k, -1_k, 42_k, 99_k, -1_k, 42_k, 1_k, 2_k, 3_k/), (/3_k, 3_k/)))) & + call abort + + ! Array shift and array bound. + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, (/1_k, 0_k, -1_k/), (/99_k, -1_k, 42_k/), 1_k) + if (any (a .ne. reshape ((/2_k, 3_k, 99_k, 4_k, 5_k, 6_k, 42_k, 7_k, 8_k/), (/3_k, 3_k/)))) & + call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, (/2_k, -2_k, 0_k/), (/99_k, -1_k, 42_k/), 2_k) + if (any (a .ne. reshape ((/7_k, -1_k, 3_k, 99_k, -1_k, 6_k, 99_k, 2_k, 9_k/), (/3_k, 3_k/)))) & + call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + sh = (/ 3_k, -1_k, -3_k /) + bo = (/-999_k, -99_k, -9_k /) + a = eoshift(a, shift=sh, boundary=bo) + if (any (a .ne. reshape ((/ -999_k, -999_k, -999_k, -99_k, 4_k, 5_k, -9_k, -9_k, -9_k /), & + shape(a)))) call abort + + a = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + a = eoshift (a, (/9999_k, -9999_k, 0_k/), (/99_k, -1_k, 42_k/), 2_k) + if (any (a .ne. reshape ((/99_k, -1_k, 3_k, 99_k, -1_k, 6_k, 99_k, -1_k, 9_k/), (/3_k, 3_k/)))) & + call abort + + ! Test arrays > rank 2 + b(:, :, 1_k) = reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + b(:, :, 2_k) = 10_k + reshape ((/1_k, 2_k, 3_k, 4_k, 5_k, 6_k, 7_k, 8_k, 9_k/), (/3_k, 3_k/)) + b = eoshift (b, 1_k, 99_k, 1_k) + if (any (b(:, :, 1_k) .ne. reshape ((/2_k, 3_k, 99_k, 5_k, 6_k, 99_k, 8_k, 9_k, 99_k/), (/3_k, 3_k/)))) & + call abort + if (any (b(:, :, 2_k) .ne. reshape ((/12_k, 13_k, 99_k, 15_k, 16_k, 99_k, 18_k, 19_k, 99_k/), (/3_k, 3_k/)))) & + call abort + + ! TODO: Test array sections +end program diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 671ae4be37d..81820965ca6 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,14 @@ +2008-05-22 Thomas Koenig + + PR libgfortran/36302 + * gfortran.map (GFORTRAN_1.1): Add _gfortran_eoshift0_16, + _gfortran_eoshift0_16_char, _gfortran_eoshift2_16, + _gfortran_eoshift2_16_char,_gfortran_cshift0_16, + _gfortran_cshift0_16_char. Sort alphabetically. + * intrinsics/eoshift0.c: Add function for kind=16 integer. + * intrinsics/eoshift2.c: Likewise. + * intrinsics/cshift0.c: Likewise. + 2008-05-18 Thomas Koenig * m4/in_pack.m4 (internal_pack_'rtype_code`): Destination diff --git a/libgfortran/gfortran.map b/libgfortran/gfortran.map index deac160423c..b61ce87990e 100644 --- a/libgfortran/gfortran.map +++ b/libgfortran/gfortran.map @@ -1033,31 +1033,37 @@ GFORTRAN_1.0 { GFORTRAN_1.1 { global: - _gfortran_erfc_scaled_r4; - _gfortran_erfc_scaled_r8; - _gfortran_erfc_scaled_r10; - _gfortran_erfc_scaled_r16; - _gfortran_selected_char_kind; - _gfortran_st_wait; _gfortran_adjustl_char4; _gfortran_adjustr_char4; _gfortran_compare_string_char4; _gfortran_concat_string_char4; + _gfortran_convert_char1_to_char4; + _gfortran_convert_char4_to_char1; + _gfortran_cshift0_16; + _gfortran_cshift0_16_char; + _gfortran_eoshift0_16; + _gfortran_eoshift0_16_char; + _gfortran_eoshift2_16; + _gfortran_eoshift2_16_char; + _gfortran_erfc_scaled_r10; + _gfortran_erfc_scaled_r16; + _gfortran_erfc_scaled_r4; + _gfortran_erfc_scaled_r8; + _gfortran_pack_char4; + _gfortran_pack_s_char4; + _gfortran_reshape_char4; + _gfortran_select_string_char4; + _gfortran_selected_char_kind; + _gfortran_spread_char4; + _gfortran_spread_char4_scalar; + _gfortran_st_wait; _gfortran_string_index_char4; _gfortran_string_len_trim_char4; _gfortran_string_minmax_char4; _gfortran_string_scan_char4; _gfortran_string_trim_char4; _gfortran_string_verify_char4; - _gfortran_select_string_char4; - _gfortran_convert_char1_to_char4; - _gfortran_convert_char4_to_char1; _gfortran_transpose_char4; - _gfortran_spread_char4; - _gfortran_spread_char4_scalar; - _gfortran_reshape_char4; - _gfortran_pack_char4; - _gfortran_pack_s_char4; _gfortran_unpack0_char4; _gfortran_unpack1_char4; } GFORTRAN_1.0; diff --git a/libgfortran/intrinsics/cshift0.c b/libgfortran/intrinsics/cshift0.c index aa466ff3b6b..71574658dda 100644 --- a/libgfortran/intrinsics/cshift0.c +++ b/libgfortran/intrinsics/cshift0.c @@ -340,3 +340,6 @@ DEFINE_CSHIFT (1); DEFINE_CSHIFT (2); DEFINE_CSHIFT (4); DEFINE_CSHIFT (8); +#ifdef HAVE_GFC_INTEGER_16 +DEFINE_CSHIFT (16); +#endif diff --git a/libgfortran/intrinsics/eoshift0.c b/libgfortran/intrinsics/eoshift0.c index 9946b4877e3..c75199c4a2f 100644 --- a/libgfortran/intrinsics/eoshift0.c +++ b/libgfortran/intrinsics/eoshift0.c @@ -251,3 +251,6 @@ DEFINE_EOSHIFT (1); DEFINE_EOSHIFT (2); DEFINE_EOSHIFT (4); DEFINE_EOSHIFT (8); +#ifdef HAVE_GFC_INTEGER_16 +DEFINE_EOSHIFT (16); +#endif diff --git a/libgfortran/intrinsics/eoshift2.c b/libgfortran/intrinsics/eoshift2.c index ca870d245fb..f74cb01fec8 100644 --- a/libgfortran/intrinsics/eoshift2.c +++ b/libgfortran/intrinsics/eoshift2.c @@ -272,3 +272,6 @@ DEFINE_EOSHIFT (1); DEFINE_EOSHIFT (2); DEFINE_EOSHIFT (4); DEFINE_EOSHIFT (8); +#ifdef HAVE_GFC_INTEGER_16 +DEFINE_EOSHIFT (16); +#endif -- 2.30.2