target/mips: Fix emulation of microMIPS R6 <SELEQZ|SELNEZ>.<D|S>

Fix emulation of microMIPS R6 <SELEQZ|SELNEZ>.<D|S> instructions.
Their handling was permuted.

Reviewed-by: Aleksandar Markovic <amarkovic@wavecomp.com>
Signed-off-by: Matthew Fortune <matthew.fortune@mips.com>
Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
This commit is contained in:
Matthew Fortune 2018-10-08 17:42:48 +02:00 committed by Aleksandar Markovic
parent 074cfcb4da
commit fdac60cd04
1 changed files with 8 additions and 8 deletions

View File

@ -15643,15 +15643,15 @@ static void decode_micromips32_opc(CPUMIPSState *env, DisasContext *ctx)
case 0x38: case 0x38:
/* cmovs */ /* cmovs */
switch ((ctx->opcode >> 6) & 0x7) { switch ((ctx->opcode >> 6) & 0x7) {
case MOVN_FMT: /* SELNEZ_FMT */ case MOVN_FMT: /* SELEQZ_FMT */
if (ctx->insn_flags & ISA_MIPS32R6) { if (ctx->insn_flags & ISA_MIPS32R6) {
/* SELNEZ_FMT */ /* SELEQZ_FMT */
switch ((ctx->opcode >> 9) & 0x3) { switch ((ctx->opcode >> 9) & 0x3) {
case FMT_SDPS_S: case FMT_SDPS_S:
gen_sel_s(ctx, OPC_SELNEZ_S, rd, rt, rs); gen_sel_s(ctx, OPC_SELEQZ_S, rd, rt, rs);
break; break;
case FMT_SDPS_D: case FMT_SDPS_D:
gen_sel_d(ctx, OPC_SELNEZ_D, rd, rt, rs); gen_sel_d(ctx, OPC_SELEQZ_D, rd, rt, rs);
break; break;
default: default:
goto pool32f_invalid; goto pool32f_invalid;
@ -15665,15 +15665,15 @@ static void decode_micromips32_opc(CPUMIPSState *env, DisasContext *ctx)
check_insn_opc_removed(ctx, ISA_MIPS32R6); check_insn_opc_removed(ctx, ISA_MIPS32R6);
FINSN_3ARG_SDPS(MOVN); FINSN_3ARG_SDPS(MOVN);
break; break;
case MOVZ_FMT: /* SELEQZ_FMT */ case MOVZ_FMT: /* SELNEZ_FMT */
if (ctx->insn_flags & ISA_MIPS32R6) { if (ctx->insn_flags & ISA_MIPS32R6) {
/* SELEQZ_FMT */ /* SELNEZ_FMT */
switch ((ctx->opcode >> 9) & 0x3) { switch ((ctx->opcode >> 9) & 0x3) {
case FMT_SDPS_S: case FMT_SDPS_S:
gen_sel_s(ctx, OPC_SELEQZ_S, rd, rt, rs); gen_sel_s(ctx, OPC_SELNEZ_S, rd, rt, rs);
break; break;
case FMT_SDPS_D: case FMT_SDPS_D:
gen_sel_d(ctx, OPC_SELEQZ_D, rd, rt, rs); gen_sel_d(ctx, OPC_SELNEZ_D, rd, rt, rs);
break; break;
default: default:
goto pool32f_invalid; goto pool32f_invalid;