diff gcc/testsuite/gfortran.dg/dshift_2.F90 @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/gfortran.dg/dshift_2.F90	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,59 @@
+! Test the DSHIFTL and DSHIFTR intrinsics.
+!
+! { dg-do run }
+! { dg-options "-ffree-line-length-none" }
+! { dg-require-effective-target fortran_integer_16 }
+
+  implicit none
+
+#define RESL(I,J,SHIFT) \
+  IOR(SHIFTL(I,SHIFT),SHIFTR(J,BIT_SIZE(J)-SHIFT))
+#define RESR(I,J,SHIFT) \
+  IOR(SHIFTL(I,BIT_SIZE(I)-SHIFT),SHIFTR(J,SHIFT))
+
+#define CHECK(I,J,SHIFT) \
+  if (dshiftl(I,J,SHIFT) /= RESL(I,J,SHIFT)) call abort ; \
+  if (dshiftr(I,J,SHIFT) /= RESR(I,J,SHIFT)) call abort ; \
+  if (run_dshiftl(I,J,SHIFT) /= RESL(I,J,SHIFT)) call abort ; \
+  if (run_dshiftr(I,J,SHIFT) /= RESR(I,J,SHIFT)) call abort
+
+  CHECK(0_16,0_16,0)
+  CHECK(0_16,0_16,1)
+  CHECK(0_16,0_16,7)
+  CHECK(0_16,0_16,8)
+  CHECK(28_16,79_16,0)
+  CHECK(28_16,79_16,1)
+  CHECK(28_16,79_16,5)
+  CHECK(28_16,79_16,7)
+  CHECK(28_16,79_16,8)
+  CHECK(-28_16,79_16,0)
+  CHECK(-28_16,79_16,1)
+  CHECK(-28_16,79_16,5)
+  CHECK(-28_16,79_16,7)
+  CHECK(-28_16,79_16,8)
+  CHECK(28_16,-79_16,0)
+  CHECK(28_16,-79_16,1)
+  CHECK(28_16,-79_16,5)
+  CHECK(28_16,-79_16,7)
+  CHECK(28_16,-79_16,8)
+  CHECK(-28_16,-79_16,0)
+  CHECK(-28_16,-79_16,1)
+  CHECK(-28_16,-79_16,5)
+  CHECK(-28_16,-79_16,7)
+  CHECK(-28_16,-79_16,8)
+
+contains
+
+  function run_dshiftl (i, j, shift) result(res)
+    integer(kind=16) :: i, j, res
+    integer :: shift
+    res = dshiftl(i,j,shift)
+  end function
+
+  function run_dshiftr (i, j, shift) result(res)
+    integer(kind=16) :: i, j, res
+    integer :: shift
+    res = dshiftr(i,j,shift)
+  end function
+
+end