target/ppc: add macros to check privilege level

Equivalent to CHK_SV and CHK_HV, but can be used in decodetree methods.

Reviewed-by: Leandro Lupori <leandro.lupori@eldorado.org.br>
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br>
Signed-off-by: Lucas Coutinho <lucas.coutinho@eldorado.org.br>
Message-Id: <20220701133507.740619-3-lucas.coutinho@eldorado.org.br>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
This commit is contained in:
Matheus Ferst 2022-07-01 10:34:58 -03:00 committed by Daniel Henrique Barboza
parent 9f0cf04197
commit fc34e81acd
2 changed files with 23 additions and 5 deletions

View File

@ -6559,6 +6559,27 @@ static int times_16(DisasContext *ctx, int x)
} \
} while (0)
#if !defined(CONFIG_USER_ONLY)
#define REQUIRE_SV(CTX) \
do { \
if (unlikely((CTX)->pr)) { \
gen_priv_opc(CTX); \
return true; \
} \
} while (0)
#define REQUIRE_HV(CTX) \
do { \
if (unlikely((CTX)->pr || !(CTX)->hv)) \
gen_priv_opc(CTX); \
return true; \
} \
} while (0)
#else
#define REQUIRE_SV(CTX) do { gen_priv_opc(CTX); return true; } while (0)
#define REQUIRE_HV(CTX) do { gen_priv_opc(CTX); return true; } while (0)
#endif
/*
* Helpers for implementing sets of trans_* functions.
* Defer the implementation of NAME to FUNC, with optional extra arguments.

View File

@ -79,11 +79,8 @@ static bool do_ldst_quad(DisasContext *ctx, arg_D *a, bool store, bool prefixed)
REQUIRE_INSNS_FLAGS(ctx, 64BX);
if (!prefixed && !(ctx->insns_flags2 & PPC2_LSQ_ISA207)) {
if (ctx->pr) {
/* lq and stq were privileged prior to V. 2.07 */
gen_priv_exception(ctx, POWERPC_EXCP_PRIV_OPC);
return true;
}
/* lq and stq were privileged prior to V. 2.07 */
REQUIRE_SV(ctx);
if (ctx->le_mode) {
gen_align_no_le(ctx);