Commit c29d0de4d67f09674f7070a5e9a648f1d5074d8e
1 parent
d2604285
tcg: optimize nor(X, Y, Y), used on PPC for not(X, Y)
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6798 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
18 additions
and
10 deletions
tcg/tcg-op.h
... | ... | @@ -1545,20 +1545,28 @@ static inline void tcg_gen_nand_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) |
1545 | 1545 | |
1546 | 1546 | static inline void tcg_gen_nor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) |
1547 | 1547 | { |
1548 | - TCGv_i32 t0; | |
1549 | - t0 = tcg_temp_new_i32(); | |
1550 | - tcg_gen_or_i32(t0, arg1, arg2); | |
1551 | - tcg_gen_not_i32(ret, t0); | |
1552 | - tcg_temp_free_i32(t0); | |
1548 | + if (GET_TCGV_I32(arg1) != GET_TCGV_I32(arg2)) { | |
1549 | + TCGv_i32 t0; | |
1550 | + t0 = tcg_temp_new_i32(); | |
1551 | + tcg_gen_or_i32(t0, arg1, arg2); | |
1552 | + tcg_gen_not_i32(ret, t0); | |
1553 | + tcg_temp_free_i32(t0); | |
1554 | + } else { | |
1555 | + tcg_gen_not_i32(ret, arg1); | |
1556 | + } | |
1553 | 1557 | } |
1554 | 1558 | |
1555 | 1559 | static inline void tcg_gen_nor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) |
1556 | 1560 | { |
1557 | - TCGv_i64 t0; | |
1558 | - t0 = tcg_temp_new_i64(); | |
1559 | - tcg_gen_or_i64(t0, arg1, arg2); | |
1560 | - tcg_gen_not_i64(ret, t0); | |
1561 | - tcg_temp_free_i64(t0); | |
1561 | + if (GET_TCGV_I64(arg1) != GET_TCGV_I64(arg2)) { | |
1562 | + TCGv_i64 t0; | |
1563 | + t0 = tcg_temp_new_i64(); | |
1564 | + tcg_gen_or_i64(t0, arg1, arg2); | |
1565 | + tcg_gen_not_i64(ret, t0); | |
1566 | + tcg_temp_free_i64(t0); | |
1567 | + } else { | |
1568 | + tcg_gen_not_i64(ret, arg1); | |
1569 | + } | |
1562 | 1570 | } |
1563 | 1571 | |
1564 | 1572 | static inline void tcg_gen_orc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) | ... | ... |