summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2024-04-13 13:07:06 -0700
committerRichard Henderson <richard.henderson@linaro.org>2024-05-15 09:58:44 +0200
commitd08ad0e0f08d3b6561be83beb992b9835aa47895 (patch)
tree0a3d686e7cc5b52cf5080076316417490348b8ba
parent0dcd6640e49c3cbd534e5a1d39338bcd6e691e18 (diff)
downloadfocaccia-qemu-d08ad0e0f08d3b6561be83beb992b9835aa47895.tar.gz
focaccia-qemu-d08ad0e0f08d3b6561be83beb992b9835aa47895.zip
target/hppa: Skip nullified insns in unconditional dbranch path
Reviewed-by: Helge Deller <deller@gmx.de>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r--target/hppa/translate.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/target/hppa/translate.c b/target/hppa/translate.c
index 9189e0350b..6c5efb0023 100644
--- a/target/hppa/translate.c
+++ b/target/hppa/translate.c
@@ -1806,11 +1806,17 @@ static bool do_dbranch(DisasContext *ctx, int64_t disp,
 
     if (ctx->null_cond.c == TCG_COND_NEVER && ctx->null_lab == NULL) {
         install_link(ctx, link, false);
-        ctx->iaoq_n = dest;
-        ctx->iaoq_n_var = NULL;
         if (is_n) {
+            if (use_nullify_skip(ctx)) {
+                nullify_set(ctx, 0);
+                gen_goto_tb(ctx, 0, dest, dest + 4);
+                ctx->base.is_jmp = DISAS_NORETURN;
+                return true;
+            }
             ctx->null_cond.c = TCG_COND_ALWAYS;
         }
+        ctx->iaoq_n = dest;
+        ctx->iaoq_n_var = NULL;
     } else {
         nullify_over(ctx);