summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-22 21:55:43 +0000
committertkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-22 21:55:43 +0000
commit914c67560da83b34bdc7cc6ba277663a2b001cf7 (patch)
tree7266a2b95724af3a9bf3d77816e0fb5e4737445a
parent6d528959722410eaa8cafce4347f52fb2b68af6e (diff)
downloadgcc-914c67560da83b34bdc7cc6ba277663a2b001cf7.tar.gz
2008-05-22 Thomas Koenig <tkoenig@gcc.gnu.org>
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 <tkoenig@gcc.gnu.org> PR libgfortran/36302 * gfortran.dg/cshift_large_1.f90: New test. * gfortran.dg/eoshift_large_1.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@135777 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/cshift_large_1.f9046
-rw-r--r--gcc/testsuite/gfortran.dg/eoshift_large_1.f90106
-rw-r--r--libgfortran/ChangeLog11
-rw-r--r--libgfortran/gfortran.map34
-rw-r--r--libgfortran/intrinsics/cshift0.c3
-rw-r--r--libgfortran/intrinsics/eoshift0.c3
-rw-r--r--libgfortran/intrinsics/eoshift2.c3
8 files changed, 198 insertions, 14 deletions
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 <tkoenig@gcc.gnu.org>
+
+ PR libgfortran/36302
+ * gfortran.dg/cshift_large_1.f90: New test.
+ * gfortran.dg/eoshift_large_1.f90: New test.
+
2008-05-22 Rafael Espindola <espindola@google.com>
* 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 <tkoenig@gcc.gnu.org>
+
+ 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 <tkoenig@gcc.gnu.org>
* 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