From c1d56e6a737418b7b48a53b355f588ea14f1b9a9 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Thu, 4 Feb 2021 22:34:22 +0100 Subject: d: Merge upstream dmd 46133f761, druntime 0fd4364c D front-end changes: - Backported built-in function handling from upstream. - Added new intrinsic `byteswap(ushort)`. Druntime changes: - Update intrinsic modules core.bitop, core.checkedint, core.simd, core.vararg, and core.volatile. - Backport platform-specific fixes for runtime modules core.cpuid, core.internal.traits, and rt.lifetime. - Backport openbsd fixes for core.stdc.stdio. - Backport solaris fixes for core.sys.posix.locale, and core.thread.osthread (PR98910). gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 46133f761. * d-builtins.cc (d_build_builtins_module): Set builtins as BUILTINgcc. (maybe_set_builtin_1): Likewise. * d-frontend.cc (eval_builtin): Adjust condition for early return. * intrinsics.cc (maybe_set_intrinsic): Set intrinsics as BUILTINgcc. (maybe_expand_intrinsic): Add case for INTRINSIC_BSWAP16. * intrinsics.def (INTRINSIC_BT): Update signature. (INTRINSIC_BT64): Likewise. (INTRINSIC_BSWAP16): New intrinsic. (INTRINSIC_VLOAD8): Update module. (INTRINSIC_VLOAD16): Likewise. (INTRINSIC_VLOAD32): Likewise. (INTRINSIC_VLOAD64): Likewise. (INTRINSIC_VSTORE8): Likewise. (INTRINSIC_VSTORE16): Likewise. (INTRINSIC_VSTORE32): Likewise. (INTRINSIC_VSTORE64): Likewise. (INTRINSIC_ADDS): Update signature. (INTRINSIC_ADDSL): Likewise. (INTRINSIC_ADDU): Likewise. (INTRINSIC_ADDUL): Likewise. (INTRINSIC_SUBS): Likewise. (INTRINSIC_SUBSL): Likewise. (INTRINSIC_SUBU): Likewise. (INTRINSIC_SUBUL): Likewise. (INTRINSIC_MULS): Likewise. (INTRINSIC_MULSL): Likewise. (INTRINSIC_MULU): Likewise. (INTRINSIC_MULUI): Likewise. (INTRINSIC_MULUL): Likewise. (INTRINSIC_NEGS): Likewise. (INTRINSIC_NEGSL): Likewise. libphobos/ChangeLog: PR d/98910 * libdruntime/MERGE: Merge upstream druntime 0fd4364c. * libdruntime/Makefile.am (DRUNTIME_DSOURCES): Add core/volatile.d. * libdruntime/Makefile.in: Regenerate. * testsuite/libphobos.allocations/tls_gc_integration.d: Update test. gcc/testsuite/ChangeLog: * gdc.dg/intrinsics.d: Update test. --- gcc/d/d-builtins.cc | 4 ++-- gcc/d/d-frontend.cc | 2 +- gcc/d/dmd/MERGE | 2 +- gcc/d/dmd/declaration.h | 40 +++++++++++++++++++++++++++++++++--- gcc/d/dmd/dinterpret.c | 2 +- gcc/d/dmd/idgen.c | 38 ++++++++++++++++++++++++++++++++++ gcc/d/dmd/root/ctfloat.h | 18 ++++++++++++++++ gcc/d/intrinsics.cc | 7 ++++--- gcc/d/intrinsics.def | 53 +++++++++++++++++++++++++----------------------- 9 files changed, 130 insertions(+), 36 deletions(-) (limited to 'gcc/d') diff --git a/gcc/d/d-builtins.cc b/gcc/d/d-builtins.cc index 3f1533b..c45edc2 100644 --- a/gcc/d/d-builtins.cc +++ b/gcc/d/d-builtins.cc @@ -566,7 +566,7 @@ d_build_builtins_module (Module *m) STCextern, tf); DECL_LANG_SPECIFIC (decl) = build_lang_decl (func); func->csym = decl; - func->builtin = BUILTINyes; + func->builtin = BUILTINgcc; members->push (func); } @@ -706,7 +706,7 @@ maybe_set_builtin_1 (Dsymbol *d) /* Found a match, tell the frontend this is a builtin. */ DECL_LANG_SPECIFIC (t) = build_lang_decl (fd); fd->csym = t; - fd->builtin = BUILTINyes; + fd->builtin = BUILTINgcc; return; } } diff --git a/gcc/d/d-frontend.cc b/gcc/d/d-frontend.cc index 32550ec..84c70f8 100644 --- a/gcc/d/d-frontend.cc +++ b/gcc/d/d-frontend.cc @@ -158,7 +158,7 @@ isBuiltin (FuncDeclaration *fd) Expression * eval_builtin (Loc loc, FuncDeclaration *fd, Expressions *arguments) { - if (fd->builtin != BUILTINyes) + if (fd->builtin == BUILTINunimp) return NULL; tree decl = get_symbol_decl (fd); diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE index 342871f..89397c8 100644 --- a/gcc/d/dmd/MERGE +++ b/gcc/d/dmd/MERGE @@ -1,4 +1,4 @@ -5e2a81d9cbcd653d9eed52344d664e72ba1355bc +46133f76172c26c89e2ebf9cd058cd1f1e8807ed The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/gcc/d/dmd/declaration.h b/gcc/d/dmd/declaration.h index a464f9b..6a3ec9e 100644 --- a/gcc/d/dmd/declaration.h +++ b/gcc/d/dmd/declaration.h @@ -503,9 +503,43 @@ enum ILS enum BUILTIN { - BUILTINunknown = -1, // not known if this is a builtin - BUILTINno, // this is not a builtin - BUILTINyes // this is a builtin + BUILTINunknown = 255, /// not known if this is a builtin + BUILTINunimp = 0, /// this is not a builtin + BUILTINgcc, /// this is a GCC builtin + BUILTINllvm, /// this is an LLVM builtin + BUILTINsin, + BUILTINcos, + BUILTINtan, + BUILTINsqrt, + BUILTINfabs, + BUILTINldexp, + BUILTINlog, + BUILTINlog2, + BUILTINlog10, + BUILTINexp, + BUILTINexpm1, + BUILTINexp2, + BUILTINround, + BUILTINfloor, + BUILTINceil, + BUILTINtrunc, + BUILTINcopysign, + BUILTINpow, + BUILTINfmin, + BUILTINfmax, + BUILTINfma, + BUILTINisnan, + BUILTINisinfinity, + BUILTINisfinite, + BUILTINbsf, + BUILTINbsr, + BUILTINbswap, + BUILTINpopcnt, + BUILTINyl2x, + BUILTINyl2xp1, + BUILTINtoPrecFloat, + BUILTINtoPrecDouble, + BUILTINtoPrecReal }; Expression *eval_builtin(Loc loc, FuncDeclaration *fd, Expressions *arguments); diff --git a/gcc/d/dmd/dinterpret.c b/gcc/d/dmd/dinterpret.c index 74c5b40..f868790 100644 --- a/gcc/d/dmd/dinterpret.c +++ b/gcc/d/dmd/dinterpret.c @@ -6801,7 +6801,7 @@ Expression *evaluateIfBuiltin(UnionExp *pue, InterState *istate, Loc loc, size_t nargs = arguments ? arguments->length : 0; if (!pthis) { - if (isBuiltin(fd) == BUILTINyes) + if (isBuiltin(fd) != BUILTINunimp) { Expressions args; args.setDim(nargs); diff --git a/gcc/d/dmd/idgen.c b/gcc/d/dmd/idgen.c index 09855a0..322a293 100644 --- a/gcc/d/dmd/idgen.c +++ b/gcc/d/dmd/idgen.c @@ -291,6 +291,8 @@ Msgtable msgtable[] = { "entrypoint", "__entrypoint" }, // varargs implementation + { "stdc", NULL }, + { "stdarg", NULL }, { "va_start", NULL }, // Builtin functions @@ -304,16 +306,52 @@ Msgtable msgtable[] = { "_sqrt", "sqrt" }, { "_pow", "pow" }, { "atan2", NULL }, + { "rint", NULL }, + { "ldexp", NULL }, { "rndtol", NULL }, + { "exp", NULL }, { "expm1", NULL }, { "exp2", NULL }, { "yl2x", NULL }, { "yl2xp1", NULL }, + { "log", NULL }, + { "log2", NULL }, + { "log10", NULL }, + { "round", NULL }, + { "floor", NULL }, + { "trunc", NULL }, + { "fmax", NULL }, + { "fmin", NULL }, + { "fma", NULL }, + { "isnan", NULL }, + { "isInfinity", NULL }, + { "isfinite", NULL }, + { "ceil", NULL }, + { "copysign", NULL }, { "fabs", NULL }, + { "toPrec", NULL }, + { "simd", NULL }, + { "__prefetch", NULL }, + { "__simd_sto", NULL }, + { "__simd", NULL }, + { "__simd_ib", NULL }, { "bitop", NULL }, { "bsf", NULL }, { "bsr", NULL }, + { "btc", NULL }, + { "btr", NULL }, + { "bts", NULL }, { "bswap", NULL }, + { "_volatile", "volatile" }, + { "volatileLoad", NULL }, + { "volatileStore", NULL }, + { "_popcnt", NULL }, + { "inp", NULL }, + { "inpl", NULL }, + { "inpw", NULL }, + { "outp", NULL }, + { "outpl", NULL }, + { "outpw", NULL }, // Traits { "isAbstractClass", NULL }, diff --git a/gcc/d/dmd/root/ctfloat.h b/gcc/d/dmd/root/ctfloat.h index c72b8fc..4cdf362 100644 --- a/gcc/d/dmd/root/ctfloat.h +++ b/gcc/d/dmd/root/ctfloat.h @@ -29,6 +29,24 @@ struct CTFloat static real_t fabs(real_t x); static real_t ldexp(real_t n, int exp); + static real_t round(real_t x); + static real_t floor(real_t x); + static real_t ceil(real_t x); + static real_t trunc(real_t x); + static real_t log(real_t x); + static real_t log2(real_t x); + static real_t log10(real_t x); + static real_t pow(real_t x, real_t y); + static real_t exp(real_t x); + static real_t expm1(real_t x); + static real_t exp2(real_t x); + + static real_t fmin(real_t x, real_t y); + static real_t fmax(real_t x, real_t y); + static real_t copysign(real_t x, real_t s); + + static real_t fma(real_t x, real_t y, real_t z); + static bool isIdentical(real_t a, real_t b); static bool isNaN(real_t r); static bool isSNaN(real_t r); diff --git a/gcc/d/intrinsics.cc b/gcc/d/intrinsics.cc index 70c9850..7f97c1d 100644 --- a/gcc/d/intrinsics.cc +++ b/gcc/d/intrinsics.cc @@ -81,7 +81,7 @@ maybe_set_intrinsic (FuncDeclaration *decl) /* The builtin flag is updated only if we can evaluate the intrinsic at compile-time. Such as the math or bitop intrinsics. */ - decl->builtin = BUILTINno; + decl->builtin = BUILTINunimp; /* Check if it's a compiler intrinsic. We only require that any internally recognised intrinsics are declared in a module with @@ -177,12 +177,12 @@ maybe_set_intrinsic (FuncDeclaration *decl) built-in function. It could be `int pow(int, int)'. */ tree rettype = TREE_TYPE (TREE_TYPE (decl->csym)); if (mathfn_built_in (rettype, BUILT_IN_POW) != NULL_TREE) - decl->builtin = BUILTINyes; + decl->builtin = BUILTINgcc; break; } default: - decl->builtin = BUILTINyes; + decl->builtin = BUILTINgcc; break; } @@ -809,6 +809,7 @@ maybe_expand_intrinsic (tree callexp) case INTRINSIC_ROR_TIARG: return expand_intrinsic_rotate (intrinsic, callexp); + case INTRINSIC_BSWAP16: case INTRINSIC_BSWAP32: case INTRINSIC_BSWAP64: case INTRINSIC_CEIL: diff --git a/gcc/d/intrinsics.def b/gcc/d/intrinsics.def index e44843e..dc6b104 100644 --- a/gcc/d/intrinsics.def +++ b/gcc/d/intrinsics.def @@ -42,17 +42,18 @@ DEF_D_BUILTIN (NONE, NONE, 0, 0, 0) DEF_D_BUILTIN (BSF, NONE, "bsf", "core.bitop", "FNaNbNiNfkZi") DEF_D_BUILTIN (BSR, NONE, "bsr", "core.bitop", "FNaNbNiNfkZi") -DEF_D_BUILTIN (BT, NONE, "bt", "core.bitop", "FNaNbNixPkkZi") +DEF_D_BUILTIN (BT, NONE, "bt", "core.bitop", "FNaNbNiMxPkkZi") DEF_D_BUILTIN (BTC, NONE, "btc", "core.bitop", "FNaNbNiPkkZi") DEF_D_BUILTIN (BTR, NONE, "btr", "core.bitop", "FNaNbNiPkkZi") DEF_D_BUILTIN (BTS, NONE, "bts", "core.bitop", "FNaNbNiPkkZi") DEF_D_BUILTIN (BSF64, NONE, "bsf", "core.bitop", "FNaNbNiNfmZi") DEF_D_BUILTIN (BSR64, NONE, "bsr", "core.bitop", "FNaNbNiNfmZi") -DEF_D_BUILTIN (BT64, NONE, "bt", "core.bitop", "FNaNbNixPmmZi") +DEF_D_BUILTIN (BT64, NONE, "bt", "core.bitop", "FNaNbNiMxPmmZi") DEF_D_BUILTIN (BTC64, NONE, "btc", "core.bitop", "FNaNbNiPmmZi") DEF_D_BUILTIN (BTR64, NONE, "btr", "core.bitop", "FNaNbNiPmmZi") DEF_D_BUILTIN (BTS64, NONE, "bts", "core.bitop", "FNaNbNiPmmZi") +DEF_D_BUILTIN (BSWAP16, BSWAP16, "byteswap", "core.bitop", "FNaNbNiNftZt") DEF_D_BUILTIN (BSWAP32, BSWAP32, "bswap", "core.bitop", "FNaNbNiNfkZk") DEF_D_BUILTIN (BSWAP64, BSWAP64, "bswap", "core.bitop", "FNaNbNiNfmZm") @@ -64,32 +65,34 @@ DEF_D_BUILTIN (ROL_TIARG, NONE, "rol", "core.bitop", "FNaI1TZI1T") DEF_D_BUILTIN (ROR, NONE, "ror", "core.bitop", "FNaI1TkZI1T") DEF_D_BUILTIN (ROR_TIARG, NONE, "ror", "core.bitop", "FNaI1TZI1T") -DEF_D_BUILTIN (VLOAD8, NONE, "volatileLoad", "core.bitop", "FNbNiNfPhZh") -DEF_D_BUILTIN (VLOAD16, NONE, "volatileLoad", "core.bitop", "FNbNiNfPtZt") -DEF_D_BUILTIN (VLOAD32, NONE, "volatileLoad", "core.bitop", "FNbNiNfPkZk") -DEF_D_BUILTIN (VLOAD64, NONE, "volatileLoad", "core.bitop", "FNbNiNfPmZm") -DEF_D_BUILTIN (VSTORE8, NONE, "volatileStore", "core.bitop", "FNbNiNfPhhZv") -DEF_D_BUILTIN (VSTORE16, NONE, "volatileStore", "core.bitop", "FNbNiNfPttZv") -DEF_D_BUILTIN (VSTORE32, NONE, "volatileStore", "core.bitop", "FNbNiNfPkkZv") -DEF_D_BUILTIN (VSTORE64, NONE, "volatileStore", "core.bitop", "FNbNiNfPmmZv") +/* core.volatile intrinsics. */ + +DEF_D_BUILTIN (VLOAD8, NONE, "volatileLoad", "core.volatile", "FNbNiNfPhZh") +DEF_D_BUILTIN (VLOAD16, NONE, "volatileLoad", "core.volatile", "FNbNiNfPtZt") +DEF_D_BUILTIN (VLOAD32, NONE, "volatileLoad", "core.volatile", "FNbNiNfPkZk") +DEF_D_BUILTIN (VLOAD64, NONE, "volatileLoad", "core.volatile", "FNbNiNfPmZm") +DEF_D_BUILTIN (VSTORE8, NONE, "volatileStore", "core.volatile", "FNbNiNfPhhZv") +DEF_D_BUILTIN (VSTORE16, NONE, "volatileStore", "core.volatile", "FNbNiNfPttZv") +DEF_D_BUILTIN (VSTORE32, NONE, "volatileStore", "core.volatile", "FNbNiNfPkkZv") +DEF_D_BUILTIN (VSTORE64, NONE, "volatileStore", "core.volatile", "FNbNiNfPmmZv") /* core.checkedint intrinsics. */ -DEF_D_BUILTIN (ADDS, NONE, "adds", "core.checkedint", "FNaNbNiNfiiKbZi") -DEF_D_BUILTIN (ADDSL, NONE, "adds", "core.checkedint", "FNaNbNiNfllKbZl") -DEF_D_BUILTIN (ADDU, NONE, "addu", "core.checkedint", "FNaNbNiNfkkKbZk") -DEF_D_BUILTIN (ADDUL, NONE, "addu", "core.checkedint", "FNaNbNiNfmmKbZm") -DEF_D_BUILTIN (SUBS, NONE, "subs", "core.checkedint", "FNaNbNiNfiiKbZi") -DEF_D_BUILTIN (SUBSL, NONE, "subs", "core.checkedint", "FNaNbNiNfllKbZl") -DEF_D_BUILTIN (SUBU, NONE, "subu", "core.checkedint", "FNaNbNiNfkkKbZk") -DEF_D_BUILTIN (SUBUL, NONE, "subu", "core.checkedint", "FNaNbNiNfmmKbZm") -DEF_D_BUILTIN (MULS, NONE, "muls", "core.checkedint", "FNaNbNiNfiiKbZi") -DEF_D_BUILTIN (MULSL, NONE, "muls", "core.checkedint", "FNaNbNiNfllKbZl") -DEF_D_BUILTIN (MULU, NONE, "mulu", "core.checkedint", "FNaNbNiNfkkKbZk") -DEF_D_BUILTIN (MULUI, NONE, "mulu", "core.checkedint", "FNaNbNiNfmkKbZm") -DEF_D_BUILTIN (MULUL, NONE, "mulu", "core.checkedint", "FNaNbNiNfmmKbZm") -DEF_D_BUILTIN (NEGS, NONE, "negs", "core.checkedint", "FNaNbNiNfiKbZi") -DEF_D_BUILTIN (NEGSL, NONE, "negs", "core.checkedint", "FNaNbNiNflKbZl") +DEF_D_BUILTIN (ADDS, NONE, "adds", "core.checkedint", "FiiKbZi") +DEF_D_BUILTIN (ADDSL, NONE, "adds", "core.checkedint", "FllKbZl") +DEF_D_BUILTIN (ADDU, NONE, "addu", "core.checkedint", "FkkKbZk") +DEF_D_BUILTIN (ADDUL, NONE, "addu", "core.checkedint", "FmmKbZm") +DEF_D_BUILTIN (SUBS, NONE, "subs", "core.checkedint", "FiiKbZi") +DEF_D_BUILTIN (SUBSL, NONE, "subs", "core.checkedint", "FllKbZl") +DEF_D_BUILTIN (SUBU, NONE, "subu", "core.checkedint", "FkkKbZk") +DEF_D_BUILTIN (SUBUL, NONE, "subu", "core.checkedint", "FmmKbZm") +DEF_D_BUILTIN (MULS, NONE, "muls", "core.checkedint", "FiiKbZi") +DEF_D_BUILTIN (MULSL, NONE, "muls", "core.checkedint", "FllKbZl") +DEF_D_BUILTIN (MULU, NONE, "mulu", "core.checkedint", "FkkKbZk") +DEF_D_BUILTIN (MULUI, NONE, "mulu", "core.checkedint", "FmkKbZm") +DEF_D_BUILTIN (MULUL, NONE, "mulu", "core.checkedint", "FmmKbZm") +DEF_D_BUILTIN (NEGS, NONE, "negs", "core.checkedint", "FiKbZi") +DEF_D_BUILTIN (NEGSL, NONE, "negs", "core.checkedint", "FlKbZl") /* core.math intrinsics. */ -- cgit v1.1