mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-07-01 12:38:13 +00:00
target/arm: Improve gen_top_byte_ignore
Use simple arithmetic instead of a conditional move when tbi0 != tbi1. Backports 2169b5c6f7a791ef9c43c72412efaafae3245114
This commit is contained in:
parent
ab07f048d8
commit
de982a8346
|
@ -318,17 +318,20 @@ static void gen_top_byte_ignore(DisasContext *s, TCGv_i64 dst,
|
||||||
/* Sign-extend from bit 55. */
|
/* Sign-extend from bit 55. */
|
||||||
tcg_gen_sextract_i64(tcg_ctx, dst, src, 0, 56);
|
tcg_gen_sextract_i64(tcg_ctx, dst, src, 0, 56);
|
||||||
|
|
||||||
if (tbi != 3) {
|
switch (tbi) {
|
||||||
TCGv_i64 tcg_zero = tcg_const_i64(tcg_ctx, 0);
|
case 1:
|
||||||
|
/* tbi0 but !tbi1: only use the extension if positive */
|
||||||
/*
|
tcg_gen_and_i64(tcg_ctx, dst, dst, src);
|
||||||
* The two TBI bits differ.
|
break;
|
||||||
* If tbi0, then !tbi1: only use the extension if positive.
|
case 2:
|
||||||
* if !tbi0, then tbi1: only use the extension if negative.
|
/* !tbi0 but tbi1: only use the extension if negative */
|
||||||
*/
|
tcg_gen_or_i64(tcg_ctx, dst, dst, src);
|
||||||
tcg_gen_movcond_i64(tcg_ctx, tbi == 1 ? TCG_COND_GE : TCG_COND_LT,
|
break;
|
||||||
dst, dst, tcg_zero, dst, src);
|
case 3:
|
||||||
tcg_temp_free_i64(tcg_ctx, tcg_zero);
|
/* tbi0 and tbi1: always use the extension */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue