Message ID | 20210517205025.3777947-10-matheus.ferst@eldorado.org.br (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Base for adding PowerPC 64-bit instructions | expand |
On Mon, May 17, 2021 at 05:50:11PM -0300, matheus.ferst@eldorado.org.br wrote: > From: Richard Henderson <richard.henderson@linaro.org> > > These will be used by the decodetree trans_* functions > to early-exit when the instruction set is not enabled. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br> Applied to ppc-for-6.1, thanks. > --- > target/ppc/translate.c | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/target/ppc/translate.c b/target/ppc/translate.c > index ea200f9637..dc0f5fafc2 100644 > --- a/target/ppc/translate.c > +++ b/target/ppc/translate.c > @@ -7750,6 +7750,32 @@ static inline void set_avr64(int regno, TCGv_i64 src, bool high) > tcg_gen_st_i64(src, cpu_env, avr64_offset(regno, high)); > } > > +/* > + * Helpers for trans_* functions to check for specific insns flags. > + * Use token pasting to ensure that we use the proper flag with the > + * proper variable. > + */ > +#define REQUIRE_INSNS_FLAGS(CTX, NAME) \ > + do { \ > + if (((CTX)->insns_flags & PPC_##NAME) == 0) { \ > + return false; \ > + } \ > + } while (0) > + > +#define REQUIRE_INSNS_FLAGS2(CTX, NAME) \ > + do { \ > + if (((CTX)->insns_flags2 & PPC2_##NAME) == 0) { \ > + return false; \ > + } \ > + } while (0) > + > +/* Then special-case the check for 64-bit so that we elide code for ppc32. */ > +#if TARGET_LONG_BITS == 32 > +# define REQUIRE_64BIT(CTX) return false > +#else > +# define REQUIRE_64BIT(CTX) REQUIRE_INSNS_FLAGS(CTX, 64B) > +#endif > + > #include "translate/fp-impl.c.inc" > > #include "translate/vmx-impl.c.inc"
diff --git a/target/ppc/translate.c b/target/ppc/translate.c index ea200f9637..dc0f5fafc2 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -7750,6 +7750,32 @@ static inline void set_avr64(int regno, TCGv_i64 src, bool high) tcg_gen_st_i64(src, cpu_env, avr64_offset(regno, high)); } +/* + * Helpers for trans_* functions to check for specific insns flags. + * Use token pasting to ensure that we use the proper flag with the + * proper variable. + */ +#define REQUIRE_INSNS_FLAGS(CTX, NAME) \ + do { \ + if (((CTX)->insns_flags & PPC_##NAME) == 0) { \ + return false; \ + } \ + } while (0) + +#define REQUIRE_INSNS_FLAGS2(CTX, NAME) \ + do { \ + if (((CTX)->insns_flags2 & PPC2_##NAME) == 0) { \ + return false; \ + } \ + } while (0) + +/* Then special-case the check for 64-bit so that we elide code for ppc32. */ +#if TARGET_LONG_BITS == 32 +# define REQUIRE_64BIT(CTX) return false +#else +# define REQUIRE_64BIT(CTX) REQUIRE_INSNS_FLAGS(CTX, 64B) +#endif + #include "translate/fp-impl.c.inc" #include "translate/vmx-impl.c.inc"