diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2016-07-27 16:56:44 +1000 |
---|---|---|
committer | David Gibson <david@gibson.dropbear.id.au> | 2016-09-07 12:40:11 +1000 |
commit | fbc3b39b3974bd6d3960376a1d4898adbbd47787 (patch) | |
tree | 0477cd0713bca587c1efd70bbe7f6de52ec18e6a | |
parent | c9f82d013be0d8d9c5d9f51bb76e337a0a5a5cac (diff) | |
download | qemu-fbc3b39b3974bd6d3960376a1d4898adbbd47787.tar.gz qemu-fbc3b39b3974bd6d3960376a1d4898adbbd47787.tar.bz2 qemu-fbc3b39b3974bd6d3960376a1d4898adbbd47787.zip |
ppc: Fix CFAR updates
We were one instruction off
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r-- | target-ppc/translate.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/target-ppc/translate.c b/target-ppc/translate.c index ac2c79bf28..bc5b2ee97f 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -3346,7 +3346,7 @@ static void gen_b(DisasContext *ctx) if (LK(ctx->opcode)) { gen_setlr(ctx, ctx->nip); } - gen_update_cfar(ctx, ctx->nip); + gen_update_cfar(ctx, ctx->nip - 4); gen_goto_tb(ctx, 0, target); } @@ -3411,7 +3411,7 @@ static inline void gen_bcond(DisasContext *ctx, int type) } tcg_temp_free_i32(temp); } - gen_update_cfar(ctx, ctx->nip); + gen_update_cfar(ctx, ctx->nip - 4); if (type == BCOND_IM) { target_ulong li = (target_long)((int16_t)(BD(ctx->opcode))); if (likely(AA(ctx->opcode) == 0)) { @@ -3526,7 +3526,7 @@ static void gen_rfi(DisasContext *ctx) */ /* Restore CPU state */ CHK_SV; - gen_update_cfar(ctx, ctx->nip); + gen_update_cfar(ctx, ctx->nip - 4); gen_helper_rfi(cpu_env); gen_sync_exception(ctx); #endif @@ -3540,7 +3540,7 @@ static void gen_rfid(DisasContext *ctx) #else /* Restore CPU state */ CHK_SV; - gen_update_cfar(ctx, ctx->nip); + gen_update_cfar(ctx, ctx->nip - 4); gen_helper_rfid(cpu_env); gen_sync_exception(ctx); #endif |