Skip to content

Commit 719f874

Browse files
committed
target/mips: Check nanoMIPS DSP MULT[U] accumulator with Release 6
Per the "MIPS Architecture Extension: nanoMIPS32 DSP TRM" rev 0.04, MULT and MULTU opcodes: The value of ac selects an accumulator numbered from 0 to 3. When ac=0, this refers to the original HI/LO register pair of the MIPS32 architecture. In Release 6 of the MIPS Architecture, accumulators are eliminated from MIPS32. Ensure pre-Release 6 is restricted to HI/LO registers pair. Fixes: 8b3698b ("target/mips: Add emulation of DSP ASE for nanoMIPS - part 4") Reviewed-by: Richard Henderson <[email protected]> Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
1 parent c148a05 commit 719f874

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

target/mips/tcg/nanomips_translate.c.inc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1868,6 +1868,9 @@ static void gen_pool32axf_2_nanomips_insn(DisasContext *ctx, uint32_t opc,
18681868
TCGv_i32 t2 = tcg_temp_new_i32();
18691869
TCGv_i32 t3 = tcg_temp_new_i32();
18701870

1871+
if (acc || ctx->insn_flags & ISA_MIPS_R6) {
1872+
check_dsp_r2(ctx);
1873+
}
18711874
gen_load_gpr(t0, rs);
18721875
gen_load_gpr(t1, rt);
18731876
tcg_gen_trunc_tl_i32(t2, t0);
@@ -1925,6 +1928,9 @@ static void gen_pool32axf_2_nanomips_insn(DisasContext *ctx, uint32_t opc,
19251928
TCGv_i32 t2 = tcg_temp_new_i32();
19261929
TCGv_i32 t3 = tcg_temp_new_i32();
19271930

1931+
if (acc || ctx->insn_flags & ISA_MIPS_R6) {
1932+
check_dsp_r2(ctx);
1933+
}
19281934
gen_load_gpr(t0, rs);
19291935
gen_load_gpr(t1, rt);
19301936
tcg_gen_trunc_tl_i32(t2, t0);

0 commit comments

Comments
 (0)