From: Philippe Mathieu-Daudé Date: Sat, 29 May 2021 16:08:19 +0000 (+0200) Subject: target/mips: Raise exception when DINSV opcode used with DSP disabled X-Git-Tag: v6.1.0-rc0~55^2~11 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=a071578b93e850dcbebbe2c0cfe86e7977ddffa7;p=users%2Fdwmw2%2Fqemu.git target/mips: Raise exception when DINSV opcode used with DSP disabled Per the "MIPS® DSP Module for MIPS64 Architecture" manual, rev. 3.02, Table 5.3 "SPECIAL3 Encoding of Function Field for DSP Module": If the Module/ASE is not implemented, executing such an instruction must cause a Reserved Instruction Exception. The DINSV instruction lists the following exceptions: - Reserved Instruction - DSP Disabled If the MIPS core doesn't support the DSP module, or the DSP is disabled, do not handle the '$rt = $0' case as a no-op but raise the proper exception instead. Cc: Jia Liu Fixes: 1cb6686cf92 ("target-mips: Add ASE DSP bit/manipulation instructions") Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Message-Id: <20210529165443.1114402-1-f4bug@amsat.org> --- diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c index 09b19262c8..3fd0c48d77 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -24379,10 +24379,11 @@ static void decode_opc_special3_legacy(CPUMIPSState *env, DisasContext *ctx) { TCGv t0, t1; + check_dsp(ctx); + if (rt == 0) { break; } - check_dsp(ctx); t0 = tcg_temp_new(); t1 = tcg_temp_new();