[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 18/32] tcg/i386: Propagate is64 to tcg_out_qemu_ld_sl
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PULL 18/32] tcg/i386: Propagate is64 to tcg_out_qemu_ld_slow_path |
Date: |
Thu, 13 Dec 2018 21:19:09 -0600 |
This helps preserve the invariant that all TCG_TYPE_I32 values
are stored zero-extended in the 64-bit host registers.
Signed-off-by: Richard Henderson <address@hidden>
---
tcg/i386/tcg-target.inc.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c
index 6bf4f84b20..695b406b4e 100644
--- a/tcg/i386/tcg-target.inc.c
+++ b/tcg/i386/tcg-target.inc.c
@@ -1692,7 +1692,8 @@ static inline void tcg_out_tlb_load(TCGContext *s, TCGReg
addrlo, TCGReg addrhi,
* Record the context of a call to the out of line helper code for the slow
path
* for a load or store, so that we can later generate the correct helper code
*/
-static void add_qemu_ldst_label(TCGContext *s, bool is_ld, TCGMemOpIdx oi,
+static void add_qemu_ldst_label(TCGContext *s, bool is_ld, bool is_64,
+ TCGMemOpIdx oi,
TCGReg datalo, TCGReg datahi,
TCGReg addrlo, TCGReg addrhi,
tcg_insn_unit *raddr,
@@ -1702,6 +1703,7 @@ static void add_qemu_ldst_label(TCGContext *s, bool
is_ld, TCGMemOpIdx oi,
label->is_ld = is_ld;
label->oi = oi;
+ label->type = is_64 ? TCG_TYPE_I64 : TCG_TYPE_I32;
label->datalo_reg = datalo;
label->datahi_reg = datahi;
label->addrlo_reg = addrlo;
@@ -1722,6 +1724,7 @@ static void tcg_out_qemu_ld_slow_path(TCGContext *s,
TCGLabelQemuLdst *l)
TCGMemOp opc = get_memop(oi);
TCGReg data_reg;
tcg_insn_unit **label_ptr = &l->label_ptr[0];
+ int rexw = (l->type == TCG_TYPE_I64 ? P_REXW : 0);
/* resolve label address */
tcg_patch32(label_ptr[0], s->code_ptr - label_ptr[0] - 4);
@@ -1760,10 +1763,10 @@ static void tcg_out_qemu_ld_slow_path(TCGContext *s,
TCGLabelQemuLdst *l)
data_reg = l->datalo_reg;
switch (opc & MO_SSIZE) {
case MO_SB:
- tcg_out_ext8s(s, data_reg, TCG_REG_EAX, P_REXW);
+ tcg_out_ext8s(s, data_reg, TCG_REG_EAX, rexw);
break;
case MO_SW:
- tcg_out_ext16s(s, data_reg, TCG_REG_EAX, P_REXW);
+ tcg_out_ext16s(s, data_reg, TCG_REG_EAX, rexw);
break;
#if TCG_TARGET_REG_BITS == 64
case MO_SL:
@@ -2014,7 +2017,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg
*args, bool is64)
tcg_out_qemu_ld_direct(s, datalo, datahi, TCG_REG_L1, -1, 0, 0, is64, opc);
/* Record the current context of a load into ldst label */
- add_qemu_ldst_label(s, true, oi, datalo, datahi, addrlo, addrhi,
+ add_qemu_ldst_label(s, true, is64, oi, datalo, datahi, addrlo, addrhi,
s->code_ptr, label_ptr);
#else
{
@@ -2154,7 +2157,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg
*args, bool is64)
tcg_out_qemu_st_direct(s, datalo, datahi, TCG_REG_L1, 0, 0, opc);
/* Record the current context of a store into ldst label */
- add_qemu_ldst_label(s, false, oi, datalo, datahi, addrlo, addrhi,
+ add_qemu_ldst_label(s, false, is64, oi, datalo, datahi, addrlo, addrhi,
s->code_ptr, label_ptr);
#else
{
--
2.17.2
- [Qemu-devel] [PULL 10/32] tcg/mips: Remove retranslation code, (continued)
- [Qemu-devel] [PULL 10/32] tcg/mips: Remove retranslation code, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 09/32] tcg/sparc: Remove retranslation code, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 12/32] tcg/i386: Return false on failure from patch_reloc, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 11/32] tcg: Return success from patch_reloc, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 14/32] tcg/arm: Return false on failure from patch_reloc, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 13/32] tcg/aarch64: Return false on failure from patch_reloc, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 15/32] tcg/ppc: Return false on failure from patch_reloc, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 17/32] tcg/i386: Propagate is64 to tcg_out_qemu_ld_direct, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 16/32] tcg/s390x: Return false on failure from patch_reloc, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 19/32] tcg/i386: Implement INDEX_op_extr{lh}_i64_i32 for 32-bit guests, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 18/32] tcg/i386: Propagate is64 to tcg_out_qemu_ld_slow_path,
Richard Henderson <=
- [Qemu-devel] [PULL 21/32] tcg/i386: Precompute all guest_base parameters, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 23/32] tcg: Clean up generic bswap32, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 29/32] qht-bench: document -p flag, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 22/32] tcg/i386: Add setup_guest_base_seg for FreeBSD, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 24/32] tcg: Clean up generic bswap64, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 20/32] tcg/i386: Assume 32-bit values are zero-extended, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 31/32] include: move exec/tb-hash-xx.h to qemu/xxhash.h, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 32/32] xxhash: match output against the original xxhash32, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 27/32] tcg/mips: Improve the add2/sub2 command to use TCG_TARGET_REG_BITS, Richard Henderson, 2018/12/13
- [Qemu-devel] [PULL 28/32] tcg: Drop nargs from tcg_op_insert_{before, after}, Richard Henderson, 2018/12/13