aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.fortran-torture
diff options
context:
space:
mode:
authorSteven Bosscher <steven@gcc.gnu.org>2008-10-02 18:51:12 +0000
committerSteven Bosscher <steven@gcc.gnu.org>2008-10-02 18:51:12 +0000
commit414f00e997074e07b825402f861625a47b85275e (patch)
tree8f0b9dec6eaf805add54b5ffc7ad619e59181785 /gcc/testsuite/gfortran.fortran-torture
parent3057d7cfab71a7ab3828fe093b847ec0f198c986 (diff)
downloadgcc-414f00e997074e07b825402f861625a47b85275e.zip
gcc-414f00e997074e07b825402f861625a47b85275e.tar.gz
gcc-414f00e997074e07b825402f861625a47b85275e.tar.bz2
re PR fortran/37635 (Fortran 2008: Support LEADZ / TRAILZ)
testsuite * gfortran.fortran-torture/execute/intrinsic_leadz.f90: New test. * gfortran.fortran-torture/execute/intrinsic_trailz.f90: New test. fortran/ PR fortran/37635 * intrinsic.c (add_functions): Add LEADZ and TRAILZ as generics. * intrinsic.h (gfc_simplify_leadz, gfc_simplify_trailz): New protos. * gfortran.h <enum gfc_isym_id>: (GFC_ISYM_LEADZ, GFC_ISYM_TRAILZ): New. * f95-lang (gfc_init_builtin_functions): Add BUILT_IN_CLZ, BUILT_IN_CLZL, BUILT_IN_CLZLL, BUILT_IN_CTZ, BUILT_IN_CTZL, and BUILT_IN_CTZLL. * trans-intrinsic.c (gfc_conv_intrinsic_leadz, gfc_conv_intrinsic_trails): New code-generation functions for LEADZ and TRAILZ intrinsics. (gfc_conv_intrinsic_function): Use them * intrinsic.texi: Add documentation for LEADZ and TRAILZ. * simplify.c (gfc_simplify_leadz, gfc_simplify_trailz): New functions. From-SVN: r140837
Diffstat (limited to 'gcc/testsuite/gfortran.fortran-torture')
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_leadz.f9046
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_trailz.f9046
2 files changed, 92 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_leadz.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_leadz.f90
new file mode 100644
index 0000000..80b61c8
--- /dev/null
+++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_leadz.f90
@@ -0,0 +1,46 @@
+program test_intrinsic_leadz
+ implicit none
+
+ call test_leadz(0_1,0_2,0_4,0_8,1_1,1_2,1_4,1_8,8_1,8_2,8_4,8_8)
+ stop
+
+ contains
+
+ subroutine test_leadz(z1,z2,z4,z8,i1,i2,i4,i8,e1,e2,e4,e8)
+ integer(kind=1) :: z1, i1, e1
+ integer(kind=2) :: z2, i2, e2
+ integer(kind=4) :: z4, i4, e4
+ integer(kind=8) :: z8, i8, e8
+
+ if (leadz(0_1) /= 8) call abort()
+ if (leadz(0_2) /= 16) call abort()
+ if (leadz(0_4) /= 32) call abort()
+ if (leadz(0_8) /= 64) call abort()
+
+ if (leadz(1_1) /= 7) call abort()
+ if (leadz(1_2) /= 15) call abort()
+ if (leadz(1_4) /= 31) call abort()
+ if (leadz(1_8) /= 63) call abort()
+
+ if (leadz(8_1) /= 4) call abort()
+ if (leadz(8_2) /= 12) call abort()
+ if (leadz(8_4) /= 28) call abort()
+ if (leadz(8_8) /= 60) call abort()
+
+ if (leadz(z1) /= 8) call abort()
+ if (leadz(z2) /= 16) call abort()
+ if (leadz(z4) /= 32) call abort()
+ if (leadz(z8) /= 64) call abort()
+
+ if (leadz(i1) /= 7) call abort()
+ if (leadz(i2) /= 15) call abort()
+ if (leadz(i4) /= 31) call abort()
+ if (leadz(i8) /= 63) call abort()
+
+ if (leadz(e1) /= 4) call abort()
+ if (leadz(e2) /= 12) call abort()
+ if (leadz(e4) /= 28) call abort()
+ if (leadz(e8) /= 60) call abort()
+ end subroutine test_leadz
+
+end program
diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_trailz.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_trailz.f90
new file mode 100644
index 0000000..948c806
--- /dev/null
+++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_trailz.f90
@@ -0,0 +1,46 @@
+program test_intrinsic_trailz
+ implicit none
+
+ call test_trailz(0_1,0_2,0_4,0_8,1_1,1_2,1_4,1_8,8_1,8_2,8_4,8_8)
+ stop
+
+ contains
+
+ subroutine test_trailz(z1,z2,z4,z8,i1,i2,i4,i8,e1,e2,e4,e8)
+ integer(kind=1) :: z1, i1, e1
+ integer(kind=2) :: z2, i2, e2
+ integer(kind=4) :: z4, i4, e4
+ integer(kind=8) :: z8, i8, e8
+
+ if (trailz(0_1) /= 8) call abort()
+ if (trailz(0_2) /= 16) call abort()
+ if (trailz(0_4) /= 32) call abort()
+ if (trailz(0_8) /= 64) call abort()
+
+ if (trailz(1_1) /= 0) call abort()
+ if (trailz(1_2) /= 0) call abort()
+ if (trailz(1_4) /= 0) call abort()
+ if (trailz(1_8) /= 0) call abort()
+
+ if (trailz(8_1) /= 3) call abort()
+ if (trailz(8_2) /= 3) call abort()
+ if (trailz(8_4) /= 3) call abort()
+ if (trailz(8_8) /= 3) call abort()
+
+ if (trailz(z1) /= 8) call abort()
+ if (trailz(z2) /= 16) call abort()
+ if (trailz(z4) /= 32) call abort()
+ if (trailz(z8) /= 64) call abort()
+
+ if (trailz(i1) /= 0) call abort()
+ if (trailz(i2) /= 0) call abort()
+ if (trailz(i4) /= 0) call abort()
+ if (trailz(i8) /= 0) call abort()
+
+ if (trailz(e1) /= 3) call abort()
+ if (trailz(e2) /= 3) call abort()
+ if (trailz(e4) /= 3) call abort()
+ if (trailz(e8) /= 3) call abort()
+ end subroutine test_trailz
+
+end program