OSDN Git Service

2008-05-22 Thomas Koenig <tkoenig@gcc.gnu.org>
authortkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 May 2008 21:55:43 +0000 (21:55 +0000)
committertkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 May 2008 21:55:43 +0000 (21:55 +0000)
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

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/cshift_large_1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/eoshift_large_1.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/gfortran.map
libgfortran/intrinsics/cshift0.c
libgfortran/intrinsics/eoshift0.c
libgfortran/intrinsics/eoshift2.c

index 2c62a49..af0260c 100644 (file)
@@ -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 (file)
index 0000000..e9d064e
--- /dev/null
@@ -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 (file)
index 0000000..02938f9
--- /dev/null
@@ -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
index 671ae4b..8182096 100644 (file)
@@ -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
index deac160..b61ce87 100644 (file)
@@ -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; 
index aa466ff..7157465 100644 (file)
@@ -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
index 9946b48..c75199c 100644 (file)
@@ -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
index ca870d2..f74cb01 100644 (file)
@@ -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