From c4aaba92e516ad061dff7ac2ae3c2b2b7058c404 Mon Sep 17 00:00:00 2001 From: "Jovanovic, Petar" Date: Tue, 11 Dec 2012 15:06:35 +0000 Subject: target-mips: Make repl_ph to sign extend to target-long The immediate value is 9bits, should sign-extend to 16bits. The return value to register should sign-extend to target_long, as Richard says, removing an unnecessary cast works fun. Signed-off-by: Dongxue Zhang Signed-off-by: Aurelien Jarno --- target-mips/translate.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'target-mips') diff --git a/target-mips/translate.c b/target-mips/translate.c index e81ff38..6281e70 100644 --- a/target-mips/translate.c +++ b/target-mips/translate.c @@ -13769,9 +13769,10 @@ static void gen_mipsdsp_bitinsn(CPUMIPSState *env, DisasContext *ctx, check_dsp(ctx); { imm = (ctx->opcode >> 16) & 0x03FF; + imm = (int16_t)(imm << 6) >> 6; tcg_gen_movi_tl(cpu_gpr[ret], \ (target_long)((int32_t)imm << 16 | \ - (uint32_t)(uint16_t)imm)); + (uint16_t)imm)); } break; case OPC_REPLV_PH: -- cgit v1.1