diff --git a/target/ppc/translate.c b/target/ppc/translate.c index 1ade063616..8f74a864e4 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -4429,7 +4429,12 @@ static void gen_sc(DisasContext *ctx) { uint32_t lev; - lev = (ctx->opcode >> 5) & 0x7F; + /* + * LEV is a 7-bit field, but the top 6 bits are treated as a reserved + * field (i.e., ignored). ISA v3.1 changes that to 5 bits, but that is + * for Ultravisor which TCG does not support, so just ignore the top 6. + */ + lev = (ctx->opcode >> 5) & 0x1; gen_exception_err(ctx, POWERPC_SYSCALL, lev); }