As per "Cavium Networks OCTEON Plus CN50XX Hardware Reference Manual" offset field is signed 16 bit value. However arg_BBIT.offset is unsigned. We need to cast it as signed to do address calculation.
Signed-off-by: Jiaxun Yang <jiaxun.y...@flygoat.com> --- target/mips/tcg/octeon_translate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_translate.c index 6a207d2e7e..e8f2277c51 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -38,7 +38,7 @@ static bool trans_BBIT(DisasContext *ctx, arg_BBIT *a) } ctx->hflags |= MIPS_HFLAG_BC; - ctx->btarget = ctx->base.pc_next + 4 + a->offset * 4; + ctx->btarget = ctx->base.pc_next + 4 + (int16_t)a->offset * 4; ctx->hflags |= MIPS_HFLAG_BDS32; tcg_temp_free(t0); -- 2.37.1 (Apple Git-137.1)