mirror of https://github.com/proxmox/mirror_qemu
target-alpha: fix bug: integer conditional branch offset is 21 bits wide.
Signed-off-by: Tristan Gingold <gingold@adacore.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6924 c046a42c-6fe2-441c-8c8c-71466251a162master
parent
577d5e7fe2
commit
a151674462
|
@ -290,7 +290,7 @@ static always_inline void gen_store_mem (DisasContext *ctx,
|
||||||
|
|
||||||
static always_inline void gen_bcond (DisasContext *ctx,
|
static always_inline void gen_bcond (DisasContext *ctx,
|
||||||
TCGCond cond,
|
TCGCond cond,
|
||||||
int ra, int32_t disp16, int mask)
|
int ra, int32_t disp, int mask)
|
||||||
{
|
{
|
||||||
int l1, l2;
|
int l1, l2;
|
||||||
|
|
||||||
|
@ -313,7 +313,7 @@ static always_inline void gen_bcond (DisasContext *ctx,
|
||||||
tcg_gen_movi_i64(cpu_pc, ctx->pc);
|
tcg_gen_movi_i64(cpu_pc, ctx->pc);
|
||||||
tcg_gen_br(l2);
|
tcg_gen_br(l2);
|
||||||
gen_set_label(l1);
|
gen_set_label(l1);
|
||||||
tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp16 << 2));
|
tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp << 2));
|
||||||
gen_set_label(l2);
|
gen_set_label(l2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2285,42 +2285,42 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
|
||||||
break;
|
break;
|
||||||
case 0x38:
|
case 0x38:
|
||||||
/* BLBC */
|
/* BLBC */
|
||||||
gen_bcond(ctx, TCG_COND_EQ, ra, disp16, 1);
|
gen_bcond(ctx, TCG_COND_EQ, ra, disp21, 1);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
case 0x39:
|
case 0x39:
|
||||||
/* BEQ */
|
/* BEQ */
|
||||||
gen_bcond(ctx, TCG_COND_EQ, ra, disp16, 0);
|
gen_bcond(ctx, TCG_COND_EQ, ra, disp21, 0);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
case 0x3A:
|
case 0x3A:
|
||||||
/* BLT */
|
/* BLT */
|
||||||
gen_bcond(ctx, TCG_COND_LT, ra, disp16, 0);
|
gen_bcond(ctx, TCG_COND_LT, ra, disp21, 0);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
case 0x3B:
|
case 0x3B:
|
||||||
/* BLE */
|
/* BLE */
|
||||||
gen_bcond(ctx, TCG_COND_LE, ra, disp16, 0);
|
gen_bcond(ctx, TCG_COND_LE, ra, disp21, 0);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
case 0x3C:
|
case 0x3C:
|
||||||
/* BLBS */
|
/* BLBS */
|
||||||
gen_bcond(ctx, TCG_COND_NE, ra, disp16, 1);
|
gen_bcond(ctx, TCG_COND_NE, ra, disp21, 1);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
case 0x3D:
|
case 0x3D:
|
||||||
/* BNE */
|
/* BNE */
|
||||||
gen_bcond(ctx, TCG_COND_NE, ra, disp16, 0);
|
gen_bcond(ctx, TCG_COND_NE, ra, disp21, 0);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
case 0x3E:
|
case 0x3E:
|
||||||
/* BGE */
|
/* BGE */
|
||||||
gen_bcond(ctx, TCG_COND_GE, ra, disp16, 0);
|
gen_bcond(ctx, TCG_COND_GE, ra, disp21, 0);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
case 0x3F:
|
case 0x3F:
|
||||||
/* BGT */
|
/* BGT */
|
||||||
gen_bcond(ctx, TCG_COND_GT, ra, disp16, 0);
|
gen_bcond(ctx, TCG_COND_GT, ra, disp21, 0);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
invalid_opc:
|
invalid_opc:
|
||||||
|
|
Loading…
Reference in New Issue