From 10c75e2a2a15e35bd6e70503ef7e3e119ae90775 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Tue, 29 Oct 2024 21:08:59 +0100 Subject: Add UMASKR and UMASKL intrinsics. gcc/fortran/ChangeLog: * check.cc (gfc_check_mask): Handle BT_INSIGNED. * gfortran.h (enum gfc_isym_id): Add GFC_ISYM_UMASKL and GFC_ISYM_UMASKR. * gfortran.texi: List UMASKL and UMASKR, remove unsigned future unsigned arguments for MASKL and MASKR. * intrinsic.cc (add_functions): Add UMASKL and UMASKR. * intrinsic.h (gfc_simplify_umaskl): New function. (gfc_simplify_umaskr): New function. (gfc_resolve_umasklr): New function. * intrinsic.texi: Document UMASKL and UMASKR. * iresolve.cc (gfc_resolve_umasklr): New function. * simplify.cc (gfc_simplify_umaskr): New function. (gfc_simplify_umaskl): New function. gcc/testsuite/ChangeLog: * gfortran.dg/unsigned_39.f90: New test. --- gcc/fortran/iresolve.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'gcc/fortran/iresolve.cc') diff --git a/gcc/fortran/iresolve.cc b/gcc/fortran/iresolve.cc index d8b216b..6adc630 100644 --- a/gcc/fortran/iresolve.cc +++ b/gcc/fortran/iresolve.cc @@ -2012,6 +2012,20 @@ gfc_resolve_mask (gfc_expr *f, gfc_expr *i ATTRIBUTE_UNUSED, f->value.function.name = gfc_get_string ("__maskr_i%d", f->ts.kind); } +void +gfc_resolve_umasklr (gfc_expr *f, gfc_expr *i ATTRIBUTE_UNUSED, + gfc_expr *kind) +{ + f->ts.type = BT_UNSIGNED; + f->ts.kind = kind ? mpz_get_si (kind->value.integer) + : gfc_default_unsigned_kind; + + if (f->value.function.isym->id == GFC_ISYM_UMASKL) + f->value.function.name = gfc_get_string ("__maskl_m%d", f->ts.kind); + else + f->value.function.name = gfc_get_string ("__maskr_m%d", f->ts.kind); +} + void gfc_resolve_merge (gfc_expr *f, gfc_expr *tsource, -- cgit v1.1