Skip to content

Commit a328bf8

Browse files
committed
fix a bug in extrh_i64_i32 operation.
1 parent 92d5e1b commit a328bf8

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

tcg/tcg-op.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -426,15 +426,28 @@ void tcg_gen_discard_i32(TCGv_i32 arg)
426426
tcg_gen_op1_i32(INDEX_op_discard, arg);
427427
}
428428

429-
void tcg_gen_mov_i32(TCGv_i32 ret, TCGv_i32 arg)
429+
static void tcg_gen_mov_i32_internal(TCGv_i32 ret, TCGv_i32 arg, bool concrete)
430430
{
431431
if (ret != arg) {
432-
tcg_gen_op2_i64(INDEX_op_mov_i64, tcgv_i32_expr_num(ret),
433-
tcgv_i32_expr_num(arg));
432+
if (!concrete) {
433+
tcg_gen_op2_i64(INDEX_op_mov_i64, tcgv_i32_expr_num(ret),
434+
tcgv_i32_expr_num(arg));
435+
}
436+
434437
tcg_gen_op2_i32(INDEX_op_mov_i32, ret, arg);
435438
}
436439
}
437440

441+
void tcg_gen_mov_i32(TCGv_i32 ret, TCGv_i32 arg)
442+
{
443+
tcg_gen_mov_i32_internal(ret, arg, false);
444+
}
445+
446+
void tcg_gen_mov_i32_concrete(TCGv_i32 ret, TCGv_i32 arg)
447+
{
448+
tcg_gen_mov_i32_internal(ret, arg, true);
449+
}
450+
438451
void tcg_gen_movi_i32(TCGv_i32 ret, int32_t arg)
439452
{
440453
/* TODO : Make movi rely on the inline mov_i32 */
@@ -3504,8 +3517,7 @@ void tcg_gen_extrl_i64_i32(TCGv_i32 ret, TCGv_i64 arg)
35043517
} else {*/
35053518
gen_helper_sym_trunc_i64_i32(tcgv_i32_expr(ret), tcgv_i64_expr(arg));
35063519
/* We don't want symbolic handling of this mov. */
3507-
if (ret != (TCGv_i32)arg)
3508-
tcg_gen_op2_i32(INDEX_op_mov_i32, ret, (TCGv_i32)arg);
3520+
tcg_gen_mov_i32_concrete(ret, (TCGv_i32)arg);
35093521
/* } */
35103522
}
35113523

@@ -3521,7 +3533,7 @@ void tcg_gen_extrh_i64_i32(TCGv_i32 ret, TCGv_i64 arg)
35213533
tcg_gen_shri_i64(t, arg, 32);
35223534
gen_helper_sym_trunc_i64_i32(tcgv_i32_expr(ret), tcgv_i64_expr(t));
35233535
/* We don't want symbolic handling of this mov. */
3524-
tcg_gen_op2_i32(INDEX_op_mov_i32, ret, (TCGv_i32)t);
3536+
tcg_gen_mov_i32_concrete(ret, (TCGv_i32)t);
35253537
tcg_temp_free_i64(t);
35263538
/*}*/
35273539
}

0 commit comments

Comments
 (0)