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) | ... | ... |