Hello, This patch depends on the -mcpu=future patch and will be upstreamed after that patch is upstreamed.
Thanks and regards, Kishan Parmar Add support for gating rs6000 built-ins on a new target predicate "future", corresponding to -mcpu=future. Extend rs6000-gen-builtins.cc and rs6000-builtin.cc to recognize [future] as a valid built-in gating predicate to enable defining new built-ins in .bif files. 2025-03-03 Kishan Parmar <[email protected]> Michael Meissner <[email protected]> gcc/ChangeLog: * config/rs6000/rs6000-builtin.cc (rs6000_invalid_builtin): Handle ENB_FUTURE and issue diagnostic requiring -mcpu=future. (rs6000_builtin_is_supported): Return TARGET_FUTURE for ENB_FUTURE built-ins. * config/rs6000/rs6000-gen-builtins.cc (enum bif_stanza): Add BSTZ_FUTURE. (struct attrinfo): Add isfuture member. (parse_bif_attrs): Account for future attribute in debug output. (write_decls): Emit ENB_FUTURE in enable enum and define bif_future_bit and bif_is_future. (write_bif_static_init): Set bif_future_bit when isfuture is specified. --- gcc/config/rs6000/rs6000-builtin.cc | 5 +++++ gcc/config/rs6000/rs6000-gen-builtins.cc | 21 ++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc index 45c88fe063b..4d0e541351f 100644 --- a/gcc/config/rs6000/rs6000-builtin.cc +++ b/gcc/config/rs6000/rs6000-builtin.cc @@ -139,6 +139,9 @@ rs6000_invalid_builtin (enum rs6000_gen_builtins fncode) case ENB_MMA: error ("%qs requires the %qs option", name, "-mmma"); break; + case ENB_FUTURE: + error ("%qs requires the %qs option", name, "-mcpu=future"); + break; default: case ENB_ALWAYS: gcc_unreachable (); @@ -194,6 +197,8 @@ rs6000_builtin_is_supported (enum rs6000_gen_builtins fncode) return TARGET_HTM; case ENB_MMA: return TARGET_MMA; + case ENB_FUTURE: + return TARGET_FUTURE; default: gcc_unreachable (); } diff --git a/gcc/config/rs6000/rs6000-gen-builtins.cc b/gcc/config/rs6000/rs6000-gen-builtins.cc index c7ae5899c5c..a3435ded73d 100644 --- a/gcc/config/rs6000/rs6000-gen-builtins.cc +++ b/gcc/config/rs6000/rs6000-gen-builtins.cc @@ -232,6 +232,7 @@ enum bif_stanza BSTZ_P10, BSTZ_P10_64, BSTZ_MMA, + BSTZ_FUTURE, NUMBIFSTANZAS }; @@ -265,7 +266,8 @@ static stanza_entry stanza_map[NUMBIFSTANZAS] = { "htm", BSTZ_HTM }, { "power10", BSTZ_P10 }, { "power10-64", BSTZ_P10_64 }, - { "mma", BSTZ_MMA } + { "mma", BSTZ_MMA }, + { "future", BSTZ_FUTURE }, }; static const char *enable_string[NUMBIFSTANZAS] = @@ -290,7 +292,8 @@ static const char *enable_string[NUMBIFSTANZAS] = "ENB_HTM", "ENB_P10", "ENB_P10_64", - "ENB_MMA" + "ENB_MMA", + "ENB_FUTURE", }; /* Function modifiers provide special handling for const, pure, and fpmath @@ -392,6 +395,7 @@ struct attrinfo bool isendian; bool isibmld; bool isibm128; + bool isfuture; }; /* Fields associated with a function prototype (bif or overload). */ @@ -1470,14 +1474,15 @@ parse_bif_attrs (attrinfo *attrptr) "pred = %d, htm = %d, htmspr = %d, htmcr = %d, mma = %d, " "quad = %d, pair = %d, mmaint = %d, no32bit = %d, 32bit = %d, " "cpu = %d, ldstmask = %d, lxvrse = %d, lxvrze = %d, endian = %d, " - "ibmdld = %d, ibm128 = %d.\n", + "ibmdld = %d, ibm128 = %d, future = %d.\n", attrptr->isextract, attrptr->isnosoft,attrptr->isldvec, attrptr->isstvec, attrptr->isreve, attrptr->ispred, attrptr->ishtm, attrptr->ishtmspr, attrptr->ishtmcr, attrptr->ismma, attrptr->isquad, attrptr->ispair, attrptr->ismmaint, attrptr->isno32bit, attrptr->is32bit, attrptr->iscpu, attrptr->isldstmask, attrptr->islxvrse, attrptr->islxvrze, - attrptr->isendian, attrptr->isibmld, attrptr->isibm128); + attrptr->isendian, attrptr->isibmld, attrptr->isibm128, + attrptr->isfuture); #endif return PC_OK; @@ -2249,7 +2254,8 @@ write_decls (void) fprintf (header_file, " ENB_HTM,\n"); fprintf (header_file, " ENB_P10,\n"); fprintf (header_file, " ENB_P10_64,\n"); - fprintf (header_file, " ENB_MMA\n"); + fprintf (header_file, " ENB_MMA,\n"); + fprintf (header_file, " ENB_FUTURE,\n"); fprintf (header_file, "};\n\n"); fprintf (header_file, "#define PPC_MAXRESTROPNDS 3\n"); @@ -2291,6 +2297,7 @@ write_decls (void) fprintf (header_file, "#define bif_endian_bit\t\t(0x00200000)\n"); fprintf (header_file, "#define bif_ibmld_bit\t\t(0x00400000)\n"); fprintf (header_file, "#define bif_ibm128_bit\t\t(0x00800000)\n"); + fprintf (header_file, "#define bif_future_bit\t\t(0x01000000)\n"); fprintf (header_file, "\n"); fprintf (header_file, "#define bif_is_extract(x)\t((x).bifattrs & bif_extract_bit)\n"); @@ -2336,6 +2343,8 @@ write_decls (void) "#define bif_is_ibmld(x)\t((x).bifattrs & bif_ibmld_bit)\n"); fprintf (header_file, "#define bif_is_ibm128(x)\t((x).bifattrs & bif_ibm128_bit)\n"); + fprintf (header_file, + "#define bif_is_future(x)\t((x).bifattrs & bif_future_bit)\n"); fprintf (header_file, "\n"); fprintf (header_file, @@ -2535,6 +2544,8 @@ write_bif_static_init (void) fprintf (init_file, " | bif_ibmld_bit"); if (bifp->attrs.isibm128) fprintf (init_file, " | bif_ibm128_bit"); + if (bifp->attrs.isfuture) + fprintf (init_file, " | bif_future_bit"); fprintf (init_file, ",\n"); fprintf (init_file, " /* restr_opnd */\t{%d, %d, %d},\n", bifp->proto.restr_opnd[0], bifp->proto.restr_opnd[1], -- 2.47.3
