diff --git a/qemu/target-arm/translate.c b/qemu/target-arm/translate.c index d07305e2..9b944963 100644 --- a/qemu/target-arm/translate.c +++ b/qemu/target-arm/translate.c @@ -802,6 +802,14 @@ void arm_test_cc(TCGContext *tcg_ctx, DisasCompare *cmp, int cc) tcg_gen_andc_i32(tcg_ctx, value, tcg_ctx->cpu_ZF, value); break; + case 14: /* always */ + case 15: /* always */ + /* Use the ALWAYS condition, which will fold early. + * It doesn't matter what we use for the value. */ + cond = TCG_COND_ALWAYS; + value = tcg_ctx->cpu_ZF; + goto no_invert; + default: fprintf(stderr, "Bad condition code 0x%x\n", cc); abort(); @@ -811,6 +819,7 @@ void arm_test_cc(TCGContext *tcg_ctx, DisasCompare *cmp, int cc) cond = tcg_invert_cond(cond); } +no_invert: cmp->cond = cond; cmp->value = value; cmp->value_global = global;