mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
tcg: Implement insert_op_before
Rather reserving space in the op stream for optimization, let the optimizer add ops as necessary. Reviewed-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de> Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
0c627cdca2
commit
a4ce099a7a
3 changed files with 35 additions and 44 deletions
21
tcg/tcg-op.c
21
tcg/tcg-op.c
|
@ -57,11 +57,6 @@ static void tcg_emit_op(TCGContext *ctx, TCGOpcode opc, int args)
|
|||
};
|
||||
}
|
||||
|
||||
void tcg_gen_op0(TCGContext *ctx, TCGOpcode opc)
|
||||
{
|
||||
tcg_emit_op(ctx, opc, -1);
|
||||
}
|
||||
|
||||
void tcg_gen_op1(TCGContext *ctx, TCGOpcode opc, TCGArg a1)
|
||||
{
|
||||
int pi = ctx->gen_next_parm_idx;
|
||||
|
@ -571,8 +566,6 @@ void tcg_gen_add2_i32(TCGv_i32 rl, TCGv_i32 rh, TCGv_i32 al,
|
|||
{
|
||||
if (TCG_TARGET_HAS_add2_i32) {
|
||||
tcg_gen_op6_i32(INDEX_op_add2_i32, rl, rh, al, ah, bl, bh);
|
||||
/* Allow the optimizer room to replace add2 with two moves. */
|
||||
tcg_gen_op0(&tcg_ctx, INDEX_op_nop);
|
||||
} else {
|
||||
TCGv_i64 t0 = tcg_temp_new_i64();
|
||||
TCGv_i64 t1 = tcg_temp_new_i64();
|
||||
|
@ -590,8 +583,6 @@ void tcg_gen_sub2_i32(TCGv_i32 rl, TCGv_i32 rh, TCGv_i32 al,
|
|||
{
|
||||
if (TCG_TARGET_HAS_sub2_i32) {
|
||||
tcg_gen_op6_i32(INDEX_op_sub2_i32, rl, rh, al, ah, bl, bh);
|
||||
/* Allow the optimizer room to replace sub2 with two moves. */
|
||||
tcg_gen_op0(&tcg_ctx, INDEX_op_nop);
|
||||
} else {
|
||||
TCGv_i64 t0 = tcg_temp_new_i64();
|
||||
TCGv_i64 t1 = tcg_temp_new_i64();
|
||||
|
@ -608,8 +599,6 @@ void tcg_gen_mulu2_i32(TCGv_i32 rl, TCGv_i32 rh, TCGv_i32 arg1, TCGv_i32 arg2)
|
|||
{
|
||||
if (TCG_TARGET_HAS_mulu2_i32) {
|
||||
tcg_gen_op4_i32(INDEX_op_mulu2_i32, rl, rh, arg1, arg2);
|
||||
/* Allow the optimizer room to replace mulu2 with two moves. */
|
||||
tcg_gen_op0(&tcg_ctx, INDEX_op_nop);
|
||||
} else if (TCG_TARGET_HAS_muluh_i32) {
|
||||
TCGv_i32 t = tcg_temp_new_i32();
|
||||
tcg_gen_op3_i32(INDEX_op_mul_i32, t, arg1, arg2);
|
||||
|
@ -632,8 +621,6 @@ void tcg_gen_muls2_i32(TCGv_i32 rl, TCGv_i32 rh, TCGv_i32 arg1, TCGv_i32 arg2)
|
|||
{
|
||||
if (TCG_TARGET_HAS_muls2_i32) {
|
||||
tcg_gen_op4_i32(INDEX_op_muls2_i32, rl, rh, arg1, arg2);
|
||||
/* Allow the optimizer room to replace muls2 with two moves. */
|
||||
tcg_gen_op0(&tcg_ctx, INDEX_op_nop);
|
||||
} else if (TCG_TARGET_HAS_mulsh_i32) {
|
||||
TCGv_i32 t = tcg_temp_new_i32();
|
||||
tcg_gen_op3_i32(INDEX_op_mul_i32, t, arg1, arg2);
|
||||
|
@ -1648,8 +1635,6 @@ void tcg_gen_add2_i64(TCGv_i64 rl, TCGv_i64 rh, TCGv_i64 al,
|
|||
{
|
||||
if (TCG_TARGET_HAS_add2_i64) {
|
||||
tcg_gen_op6_i64(INDEX_op_add2_i64, rl, rh, al, ah, bl, bh);
|
||||
/* Allow the optimizer room to replace add2 with two moves. */
|
||||
tcg_gen_op0(&tcg_ctx, INDEX_op_nop);
|
||||
} else {
|
||||
TCGv_i64 t0 = tcg_temp_new_i64();
|
||||
TCGv_i64 t1 = tcg_temp_new_i64();
|
||||
|
@ -1668,8 +1653,6 @@ void tcg_gen_sub2_i64(TCGv_i64 rl, TCGv_i64 rh, TCGv_i64 al,
|
|||
{
|
||||
if (TCG_TARGET_HAS_sub2_i64) {
|
||||
tcg_gen_op6_i64(INDEX_op_sub2_i64, rl, rh, al, ah, bl, bh);
|
||||
/* Allow the optimizer room to replace sub2 with two moves. */
|
||||
tcg_gen_op0(&tcg_ctx, INDEX_op_nop);
|
||||
} else {
|
||||
TCGv_i64 t0 = tcg_temp_new_i64();
|
||||
TCGv_i64 t1 = tcg_temp_new_i64();
|
||||
|
@ -1687,8 +1670,6 @@ void tcg_gen_mulu2_i64(TCGv_i64 rl, TCGv_i64 rh, TCGv_i64 arg1, TCGv_i64 arg2)
|
|||
{
|
||||
if (TCG_TARGET_HAS_mulu2_i64) {
|
||||
tcg_gen_op4_i64(INDEX_op_mulu2_i64, rl, rh, arg1, arg2);
|
||||
/* Allow the optimizer room to replace mulu2 with two moves. */
|
||||
tcg_gen_op0(&tcg_ctx, INDEX_op_nop);
|
||||
} else if (TCG_TARGET_HAS_muluh_i64) {
|
||||
TCGv_i64 t = tcg_temp_new_i64();
|
||||
tcg_gen_op3_i64(INDEX_op_mul_i64, t, arg1, arg2);
|
||||
|
@ -1708,8 +1689,6 @@ void tcg_gen_muls2_i64(TCGv_i64 rl, TCGv_i64 rh, TCGv_i64 arg1, TCGv_i64 arg2)
|
|||
{
|
||||
if (TCG_TARGET_HAS_muls2_i64) {
|
||||
tcg_gen_op4_i64(INDEX_op_muls2_i64, rl, rh, arg1, arg2);
|
||||
/* Allow the optimizer room to replace muls2 with two moves. */
|
||||
tcg_gen_op0(&tcg_ctx, INDEX_op_nop);
|
||||
} else if (TCG_TARGET_HAS_mulsh_i64) {
|
||||
TCGv_i64 t = tcg_temp_new_i64();
|
||||
tcg_gen_op3_i64(INDEX_op_mul_i64, t, arg1, arg2);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue