From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NI4Sq-0000A2-R3 for qemu-devel@nongnu.org; Tue, 08 Dec 2009 13:07:08 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NI4Sm-0008WD-Sp for qemu-devel@nongnu.org; Tue, 08 Dec 2009 13:07:08 -0500 Received: from [199.232.76.173] (port=56183 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NI4Sm-0008Vu-MB for qemu-devel@nongnu.org; Tue, 08 Dec 2009 13:07:04 -0500 Received: from mx20.gnu.org ([199.232.41.8]:57959) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NI4Sm-0006iN-GK for qemu-devel@nongnu.org; Tue, 08 Dec 2009 13:07:04 -0500 Received: from mail.codesourcery.com ([38.113.113.100]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NI4Sl-0006r7-44 for qemu-devel@nongnu.org; Tue, 08 Dec 2009 13:07:03 -0500 From: Nathan Froyd Date: Tue, 8 Dec 2009 08:06:25 -0800 Message-Id: <1260288392-20804-5-git-send-email-froydnj@codesourcery.com> In-Reply-To: <1260288392-20804-1-git-send-email-froydnj@codesourcery.com> References: <1260288392-20804-1-git-send-email-froydnj@codesourcery.com> Subject: [Qemu-devel] [PATCH 04/11] target-mips: make gen_compute_branch 16/32-bit-aware List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Signed-off-by: Nathan Froyd --- target-mips/translate.c | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-) diff --git a/target-mips/translate.c b/target-mips/translate.c index d403c56..3751516 100644 --- a/target-mips/translate.c +++ b/target-mips/translate.c @@ -2390,6 +2390,7 @@ static inline void gen_goto_tb(DisasContext *ctx, int n, target_ulong dest) /* Branches (before delay slot) */ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, + int insn_bytes, int rs, int rt, int32_t offset) { target_ulong btgt = -1; @@ -2418,7 +2419,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, gen_load_gpr(t1, rt); bcond_compute = 1; } - btgt = ctx->pc + 4 + offset; + btgt = ctx->pc + insn_bytes + offset; break; case OPC_BGEZ: case OPC_BGEZAL: @@ -2437,12 +2438,12 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, gen_load_gpr(t0, rs); bcond_compute = 1; } - btgt = ctx->pc + 4 + offset; + btgt = ctx->pc + insn_bytes + offset; break; case OPC_J: case OPC_JAL: /* Jump to immediate */ - btgt = ((ctx->pc + 4) & (int32_t)0xF0000000) | (uint32_t)offset; + btgt = ((ctx->pc + insn_bytes) & (int32_t)0xF0000000) | (uint32_t)offset; break; case OPC_JR: case OPC_JALR: @@ -7654,7 +7655,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) gen_muldiv(ctx, op1, rs, rt); break; case OPC_JR ... OPC_JALR: - gen_compute_branch(ctx, op1, rs, rd, sa); + gen_compute_branch(ctx, op1, 4, rs, rd, sa); return; case OPC_TGE ... OPC_TEQ: /* Traps */ case OPC_TNE: @@ -7943,7 +7944,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) switch (op1) { case OPC_BLTZ ... OPC_BGEZL: /* REGIMM branches */ case OPC_BLTZAL ... OPC_BGEZALL: - gen_compute_branch(ctx, op1, rs, -1, imm << 2); + gen_compute_branch(ctx, op1, 4, rs, -1, imm << 2); return; case OPC_TGEI ... OPC_TEQI: /* REGIMM traps */ case OPC_TNEI: @@ -8062,11 +8063,11 @@ static void decode_opc (CPUState *env, DisasContext *ctx) break; case OPC_J ... OPC_JAL: /* Jump */ offset = (int32_t)(ctx->opcode & 0x3FFFFFF) << 2; - gen_compute_branch(ctx, op, rs, rt, offset); + gen_compute_branch(ctx, op, 4, rs, rt, offset); return; case OPC_BEQ ... OPC_BGTZ: /* Branch */ case OPC_BEQL ... OPC_BGTZL: - gen_compute_branch(ctx, op, rs, rt, imm << 2); + gen_compute_branch(ctx, op, 4, rs, rt, imm << 2); return; case OPC_LB ... OPC_LWR: /* Load and stores */ case OPC_SB ... OPC_SW: -- 1.6.3.2