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:
parent
9f0cf04197
commit
fc34e81acd
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
REQUIRE_SV(ctx);
|
||||
|
||||
if (ctx->le_mode) {
|
||||
gen_align_no_le(ctx);
|
||||
|
|
Loading…
Reference in New Issue