mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53:56 -06:00
tcg: Optimize mulu2
Like add2, do operand ordering, constant folding, and dead operand elimination. The latter happens about 15% of all mulu2 during an x86_64 bios boot. Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
1305c451e6
commit
1414968a6a
3 changed files with 47 additions and 0 deletions
19
tcg/tcg.c
19
tcg/tcg.c
|
@ -1338,6 +1338,25 @@ static void tcg_liveness_analysis(TCGContext *s)
|
|||
}
|
||||
goto do_not_remove;
|
||||
|
||||
case INDEX_op_mulu2_i32:
|
||||
args -= 4;
|
||||
nb_iargs = 2;
|
||||
nb_oargs = 2;
|
||||
/* Likewise, test for the high part of the operation dead. */
|
||||
if (dead_temps[args[1]]) {
|
||||
if (dead_temps[args[0]]) {
|
||||
goto do_remove;
|
||||
}
|
||||
gen_opc_buf[op_index] = op = INDEX_op_mul_i32;
|
||||
args[1] = args[2];
|
||||
args[2] = args[3];
|
||||
assert(gen_opc_buf[op_index + 1] == INDEX_op_nop);
|
||||
tcg_set_nop(s, gen_opc_buf + op_index + 1, args + 3, 1);
|
||||
/* Fall through and mark the single-word operation live. */
|
||||
nb_oargs = 1;
|
||||
}
|
||||
goto do_not_remove;
|
||||
|
||||
default:
|
||||
/* XXX: optimize by hardcoding common cases (e.g. triadic ops) */
|
||||
args -= def->nb_args;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue