Hi Yury, > -----Original Message----- > From: Yury Khrustalev <yury.khrusta...@arm.com> > Sent: Wednesday, July 23, 2025 9:45 AM > To: gcc-patches@gcc.gnu.org > Cc: Andrew Pinski <pins...@gmail.com>; Richard Sandiford > <richard.sandif...@arm.com>; Tamar Christina <tamar.christ...@arm.com>; > Alfie Richards <alfie.richa...@arm.com>; Alice Carlotti > <alice.carlo...@arm.com>; > Victor Do Nascimento <victor.donascime...@arm.com> > Subject: [PATCH v2 3/3] testsuite: Add runtime test for FMV resolvers > > gcc/testsuite/ChangeLog: > > * g++.target/aarch64/mv-cpu-features.C: new test.
This looks OK to me. Thanks, Tamar > --- > .../g++.target/aarch64/mv-cpu-features.C | 65 +++++++++++++++++++ > 1 file changed, 65 insertions(+) > create mode 100644 gcc/testsuite/g++.target/aarch64/mv-cpu-features.C > > diff --git a/gcc/testsuite/g++.target/aarch64/mv-cpu-features.C > b/gcc/testsuite/g++.target/aarch64/mv-cpu-features.C > new file mode 100644 > index 00000000000..00a0cf1ecc4 > --- /dev/null > +++ b/gcc/testsuite/g++.target/aarch64/mv-cpu-features.C > @@ -0,0 +1,65 @@ > +/* { dg-do run } */ > +/* { dg-require-ifunc "" } */ > +/* { dg-options "-Wno-experimental-fmv-target" } */ > + > +#include <cstdint> > +#include <sys/auxv.h> > + > +__attribute__((target_version ("default"))) > +int foo () > +{ > + return 0; > +} > + > +__attribute__((target_version ("rng"))) > +int foo () > +{ > + return 1; > +} > + > +__attribute__((target_version ("lse"))) > +int foo () > +{ > + return 2; > +} > + > +typedef struct { > + uint64_t size; > + uint64_t hwcap; > + uint64_t hwcap2; > + uint64_t hwcap3; > + uint64_t hwcap4; > +} ifunc_arg_t; > + > +int impl () > +{ > + return 0; > +} > + > +#ifndef _IFUNC_ARG_HWCAP > +#define _IFUNC_ARG_HWCAP (1ULL << 62) > +#endif > + > +extern "C" void > +__init_cpu_features_resolver (unsigned long hwcap, const ifunc_arg_t *arg); > + > +extern "C" void * > +fun_resolver (uint64_t a0, const ifunc_arg_t *a1) > +{ > + ifunc_arg_t arg = {}; > + arg.size = sizeof (ifunc_arg_t); > + arg.hwcap = HWCAP_ATOMICS; > + arg.hwcap2 = HWCAP2_RNG; > + __init_cpu_features_resolver (arg.hwcap | _IFUNC_ARG_HWCAP, &arg); > + return (void *)(uintptr_t)impl; > +} > + > +extern "C" int fun (void) __attribute__((ifunc ("fun_resolver"))); > + > +int main () > +{ > + int res = fun (); > + if (res == 0 && foo () == 2) > + return 0; > + return 1; > +} > -- > 2.39.5