Commit 945ca823b9c5e3f99798d06f84939e610b362310
1 parent
a7ec4229
Add concat32_i64 and concat_tl_i64 ops
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5282 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
18 additions
and
0 deletions
tcg/README
... | ... | @@ -269,6 +269,10 @@ Truncate t1 (64 bit) to t0 (32 bit) |
269 | 269 | Construct t0 (64-bit) taking the low half from t1 (32 bit) and the high half |
270 | 270 | from t2 (32 bit). |
271 | 271 | |
272 | +* concat32_i64 t0, t1, t2 | |
273 | +Construct t0 (64-bit) taking the low half from t1 (64 bit) and the high half | |
274 | +from t2 (64 bit). | |
275 | + | |
272 | 276 | ********* Load/Store |
273 | 277 | |
274 | 278 | * ld_i32/i64 t0, t1, offset | ... | ... |
tcg/tcg-op.h
... | ... | @@ -1412,6 +1412,18 @@ static inline void tcg_gen_concat_i32_i64(TCGv dest, TCGv low, TCGv high) |
1412 | 1412 | #endif |
1413 | 1413 | } |
1414 | 1414 | |
1415 | +static inline void tcg_gen_concat32_i64(TCGv dest, TCGv low, TCGv high) | |
1416 | +{ | |
1417 | +#if TCG_TARGET_REG_BITS == 32 | |
1418 | + tcg_gen_concat_i32_i64(dest, low, high); | |
1419 | +#else | |
1420 | + TCGv tmp = tcg_temp_new(TCG_TYPE_I64); | |
1421 | + tcg_gen_shli_i64(tmp, high, 32); | |
1422 | + tcg_gen_or_i64(dest, low, tmp); | |
1423 | + tcg_temp_free(tmp); | |
1424 | +#endif | |
1425 | +} | |
1426 | + | |
1415 | 1427 | /***************************************/ |
1416 | 1428 | /* QEMU specific operations. Their type depend on the QEMU CPU |
1417 | 1429 | type. */ |
... | ... | @@ -1664,6 +1676,7 @@ static inline void tcg_gen_qemu_st64(TCGv arg, TCGv addr, int mem_index) |
1664 | 1676 | #define tcg_gen_ext16s_tl tcg_gen_ext16s_i64 |
1665 | 1677 | #define tcg_gen_ext32u_tl tcg_gen_ext32u_i64 |
1666 | 1678 | #define tcg_gen_ext32s_tl tcg_gen_ext32s_i64 |
1679 | +#define tcg_gen_concat_tl_i64 tcg_gen_concat32_i64 | |
1667 | 1680 | #define tcg_const_tl tcg_const_i64 |
1668 | 1681 | #else |
1669 | 1682 | #define TCG_TYPE_TL TCG_TYPE_I32 |
... | ... | @@ -1715,6 +1728,7 @@ static inline void tcg_gen_qemu_st64(TCGv arg, TCGv addr, int mem_index) |
1715 | 1728 | #define tcg_gen_ext16s_tl tcg_gen_ext16s_i32 |
1716 | 1729 | #define tcg_gen_ext32u_tl tcg_gen_mov_i32 |
1717 | 1730 | #define tcg_gen_ext32s_tl tcg_gen_mov_i32 |
1731 | +#define tcg_gen_concat_tl_i64 tcg_gen_concat_i32_i64 | |
1718 | 1732 | #define tcg_const_tl tcg_const_i32 |
1719 | 1733 | #endif |
1720 | 1734 | ... | ... |