aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/intrinsic.c
diff options
context:
space:
mode:
authorFritz Reese <fritzoreese@gmail.com>2016-08-03 14:55:26 +0000
committerFritz Reese <foreese@gcc.gnu.org>2016-08-03 14:55:26 +0000
commitc98583e997e74487876c1a4aafb3d12602e330ff (patch)
tree2f17abc1e7e1eb41d4214cc06d7bc3d073ff0b98 /gcc/fortran/intrinsic.c
parent9ad1a1da40869324fd22aec2b3a993cabc82ea80 (diff)
downloadgcc-c98583e997e74487876c1a4aafb3d12602e330ff.zip
gcc-c98583e997e74487876c1a4aafb3d12602e330ff.tar.gz
gcc-c98583e997e74487876c1a4aafb3d12602e330ff.tar.bz2
lang.opt: New option -fdec-intrinsic-ints.
2016-08-03 Fritz Reese <fritzoreese@gmail.com> gcc/fortran/ * lang.opt: New option -fdec-intrinsic-ints. * options.c (set_dec_flags): Enable with -fdec. * gfortran.texi, invoke.texi, intrinsics.texi: Update documentation. * intrinsic.c (add_function, add_subroutine): New B/I/J/K intrinsic variants. gcc/testsuite/gfortran.dg/ * dec_intrinsic_ints.f90: New testcase. From-SVN: r239078
Diffstat (limited to 'gcc/fortran/intrinsic.c')
-rw-r--r--gcc/fortran/intrinsic.c111
1 files changed, 111 insertions, 0 deletions
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
index 1d7503d..ca28eac 100644
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -1255,6 +1255,14 @@ add_functions (void)
gfc_check_abs, gfc_simplify_abs, gfc_resolve_abs,
a, BT_REAL, dr, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("babs", GFC_STD_GNU);
+ make_alias ("iiabs", GFC_STD_GNU);
+ make_alias ("jiabs", GFC_STD_GNU);
+ make_alias ("kiabs", GFC_STD_GNU);
+ }
+
add_sym_1 ("iabs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77,
NULL, gfc_simplify_abs, gfc_resolve_abs,
a, BT_INTEGER, di, REQUIRED);
@@ -1557,6 +1565,14 @@ add_functions (void)
gfc_check_bitfcn, gfc_simplify_btest, gfc_resolve_btest,
i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bbtest", GFC_STD_GNU);
+ make_alias ("bitest", GFC_STD_GNU);
+ make_alias ("bjtest", GFC_STD_GNU);
+ make_alias ("bktest", GFC_STD_GNU);
+ }
+
make_generic ("btest", GFC_ISYM_BTEST, GFC_STD_F95);
add_sym_2 ("ceiling", GFC_ISYM_CEILING, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
@@ -1950,6 +1966,14 @@ add_functions (void)
gfc_check_iand, gfc_simplify_iand, gfc_resolve_iand,
i, BT_INTEGER, di, REQUIRED, j, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("biand", GFC_STD_GNU);
+ make_alias ("iiand", GFC_STD_GNU);
+ make_alias ("jiand", GFC_STD_GNU);
+ make_alias ("kiand", GFC_STD_GNU);
+ }
+
make_generic ("iand", GFC_ISYM_IAND, GFC_STD_F95);
add_sym_2 ("and", GFC_ISYM_AND, CLASS_IMPURE, ACTUAL_NO, BT_LOGICAL,
@@ -1981,6 +2005,14 @@ add_functions (void)
gfc_check_bitfcn, gfc_simplify_ibclr, gfc_resolve_ibclr,
i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bbclr", GFC_STD_GNU);
+ make_alias ("iibclr", GFC_STD_GNU);
+ make_alias ("jibclr", GFC_STD_GNU);
+ make_alias ("kibclr", GFC_STD_GNU);
+ }
+
make_generic ("ibclr", GFC_ISYM_IBCLR, GFC_STD_F95);
add_sym_3 ("ibits", GFC_ISYM_IBITS, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
@@ -1988,12 +2020,28 @@ add_functions (void)
i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED,
ln, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bbits", GFC_STD_GNU);
+ make_alias ("iibits", GFC_STD_GNU);
+ make_alias ("jibits", GFC_STD_GNU);
+ make_alias ("kibits", GFC_STD_GNU);
+ }
+
make_generic ("ibits", GFC_ISYM_IBITS, GFC_STD_F95);
add_sym_2 ("ibset", GFC_ISYM_IBSET, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
gfc_check_bitfcn, gfc_simplify_ibset, gfc_resolve_ibset,
i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bbset", GFC_STD_GNU);
+ make_alias ("iibset", GFC_STD_GNU);
+ make_alias ("jibset", GFC_STD_GNU);
+ make_alias ("kibset", GFC_STD_GNU);
+ }
+
make_generic ("ibset", GFC_ISYM_IBSET, GFC_STD_F95);
add_sym_2 ("ichar", GFC_ISYM_ICHAR, CLASS_ELEMENTAL, ACTUAL_NO,
@@ -2007,6 +2055,14 @@ add_functions (void)
gfc_check_ieor, gfc_simplify_ieor, gfc_resolve_ieor,
i, BT_INTEGER, di, REQUIRED, j, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bieor", GFC_STD_GNU);
+ make_alias ("iieor", GFC_STD_GNU);
+ make_alias ("jieor", GFC_STD_GNU);
+ make_alias ("kieor", GFC_STD_GNU);
+ }
+
make_generic ("ieor", GFC_ISYM_IEOR, GFC_STD_F95);
add_sym_2 ("xor", GFC_ISYM_XOR, CLASS_IMPURE, ACTUAL_NO, BT_LOGICAL,
@@ -2072,6 +2128,14 @@ add_functions (void)
gfc_check_ior, gfc_simplify_ior, gfc_resolve_ior,
i, BT_INTEGER, di, REQUIRED, j, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bior", GFC_STD_GNU);
+ make_alias ("iior", GFC_STD_GNU);
+ make_alias ("jior", GFC_STD_GNU);
+ make_alias ("kior", GFC_STD_GNU);
+ }
+
make_generic ("ior", GFC_ISYM_IOR, GFC_STD_F95);
add_sym_2 ("or", GFC_ISYM_OR, CLASS_IMPURE, ACTUAL_NO, BT_LOGICAL,
@@ -2139,6 +2203,14 @@ add_functions (void)
gfc_check_ishft, gfc_simplify_ishft, gfc_resolve_ishft,
i, BT_INTEGER, di, REQUIRED, sh, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bshft", GFC_STD_GNU);
+ make_alias ("iishft", GFC_STD_GNU);
+ make_alias ("jishft", GFC_STD_GNU);
+ make_alias ("kishft", GFC_STD_GNU);
+ }
+
make_generic ("ishft", GFC_ISYM_ISHFT, GFC_STD_F95);
add_sym_3 ("ishftc", GFC_ISYM_ISHFTC, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
@@ -2146,6 +2218,14 @@ add_functions (void)
i, BT_INTEGER, di, REQUIRED, sh, BT_INTEGER, di, REQUIRED,
sz, BT_INTEGER, di, OPTIONAL);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bshftc", GFC_STD_GNU);
+ make_alias ("iishftc", GFC_STD_GNU);
+ make_alias ("jishftc", GFC_STD_GNU);
+ make_alias ("kishftc", GFC_STD_GNU);
+ }
+
make_generic ("ishftc", GFC_ISYM_ISHFTC, GFC_STD_F95);
add_sym_2 ("kill", GFC_ISYM_KILL, CLASS_IMPURE, ACTUAL_NO, BT_INTEGER,
@@ -2456,6 +2536,14 @@ add_functions (void)
gfc_check_a_p, gfc_simplify_mod, gfc_resolve_mod,
a, BT_INTEGER, di, REQUIRED, p, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bmod", GFC_STD_GNU);
+ make_alias ("imod", GFC_STD_GNU);
+ make_alias ("jmod", GFC_STD_GNU);
+ make_alias ("kmod", GFC_STD_GNU);
+ }
+
add_sym_2 ("amod", GFC_ISYM_MOD, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
NULL, gfc_simplify_mod, gfc_resolve_mod,
a, BT_REAL, dr, REQUIRED, p, BT_REAL, dr, REQUIRED);
@@ -2498,6 +2586,14 @@ add_functions (void)
gfc_check_i, gfc_simplify_not, gfc_resolve_not,
i, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bnot", GFC_STD_GNU);
+ make_alias ("inot", GFC_STD_GNU);
+ make_alias ("jnot", GFC_STD_GNU);
+ make_alias ("knot", GFC_STD_GNU);
+ }
+
make_generic ("not", GFC_ISYM_NOT, GFC_STD_F95);
add_sym_2 ("norm2", GFC_ISYM_NORM2, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr,
@@ -2608,6 +2704,13 @@ add_functions (void)
gfc_check_float, gfc_simplify_float, NULL,
a, BT_INTEGER, di, REQUIRED);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("floati", GFC_STD_GNU);
+ make_alias ("floatj", GFC_STD_GNU);
+ make_alias ("floatk", GFC_STD_GNU);
+ }
+
add_sym_1 ("dfloat", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
gfc_check_float, gfc_simplify_dble, gfc_resolve_dble,
a, BT_REAL, dr, REQUIRED);
@@ -3306,6 +3409,14 @@ add_subroutines (void)
t, BT_INTEGER, di, REQUIRED, INTENT_INOUT,
tp, BT_INTEGER, di, REQUIRED, INTENT_IN);
+ if (flag_dec_intrinsic_ints)
+ {
+ make_alias ("bmvbits", GFC_STD_GNU);
+ make_alias ("imvbits", GFC_STD_GNU);
+ make_alias ("jmvbits", GFC_STD_GNU);
+ make_alias ("kmvbits", GFC_STD_GNU);
+ }
+
add_sym_1s ("random_number", GFC_ISYM_RANDOM_NUMBER, CLASS_IMPURE,
BT_UNKNOWN, 0, GFC_STD_F95,
gfc_check_random_number, NULL, gfc_resolve_random_number,