mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
target-arm: Handle always condition codes within arm_test_cc
Handling this with TCG_COND_ALWAYS will allow these unlikely cases to be handled without special cases in the rest of the translator. The TCG optimizer ought to be able to reduce these ALWAYS conditions completely. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <rth@twiddle.net> Message-id: 1441909103-24666-4-git-send-email-rth@twiddle.net Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
6c2c63d3a0
commit
9305eac09e
1 changed files with 9 additions and 0 deletions
|
@ -804,6 +804,14 @@ void arm_test_cc(DisasCompare *cmp, int cc)
|
|||
tcg_gen_andc_i32(value, 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 = cpu_ZF;
|
||||
goto no_invert;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "Bad condition code 0x%x\n", cc);
|
||||
abort();
|
||||
|
@ -813,6 +821,7 @@ void arm_test_cc(DisasCompare *cmp, int cc)
|
|||
cond = tcg_invert_cond(cond);
|
||||
}
|
||||
|
||||
no_invert:
|
||||
cmp->cond = cond;
|
||||
cmp->value = value;
|
||||
cmp->value_global = global;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue