From: Aurelien Jarno <aurelien@aurel32.net>
To: Richard Henderson <rth@twiddle.net>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 17/18] tcg-i386: Adjust tcg_out_tlb_load for x32
Date: Thu, 29 Aug 2013 18:45:11 +0200 [thread overview]
Message-ID: <20130829164511.GA22155@ohm.aurel32.net> (raw)
In-Reply-To: <1377190729-14008-18-git-send-email-rth@twiddle.net>
On Thu, Aug 22, 2013 at 09:58:48AM -0700, Richard Henderson wrote:
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
> tcg/i386/tcg-target.c | 35 +++++++++++++++++++++--------------
> 1 file changed, 21 insertions(+), 14 deletions(-)
>
> diff --git a/tcg/i386/tcg-target.c b/tcg/i386/tcg-target.c
> index f3083b8..dfda76e 100644
> --- a/tcg/i386/tcg-target.c
> +++ b/tcg/i386/tcg-target.c
> @@ -1061,33 +1061,40 @@ static inline void tcg_out_tlb_load(TCGContext *s, int addrlo_idx,
> const int addrlo = args[addrlo_idx];
> const int r0 = TCG_REG_L0;
> const int r1 = TCG_REG_L1;
> - TCGType type = TCG_TYPE_I32;
> - int rexw = 0;
> + TCGType ttype = TCG_TYPE_I32;
> + TCGType htype = TCG_TYPE_I32;
> + int trexw = 0, hrexw = 0;
>
> - if (TCG_TARGET_REG_BITS == 64 && TARGET_LONG_BITS == 64) {
> - type = TCG_TYPE_I64;
> - rexw = P_REXW;
> + if (TCG_TARGET_REG_BITS == 64) {
> + if (TARGET_LONG_BITS == 64) {
> + ttype = TCG_TYPE_I64;
> + trexw = P_REXW;
> + }
> + if (sizeof(void *) == 8) {
> + htype = TCG_TYPE_I64;
> + hrexw = P_REXW;
> + }
> }
>
> - tcg_out_mov(s, type, r0, addrlo);
> - tcg_out_mov(s, type, r1, addrlo);
> + tcg_out_mov(s, htype, r0, addrlo);
> + tcg_out_mov(s, ttype, r1, addrlo);
>
> - tcg_out_shifti(s, SHIFT_SHR + rexw, r0,
> + tcg_out_shifti(s, SHIFT_SHR + hrexw, r0,
> TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS);
>
> - tgen_arithi(s, ARITH_AND + rexw, r1,
> + tgen_arithi(s, ARITH_AND + trexw, r1,
> TARGET_PAGE_MASK | ((1 << s_bits) - 1), 0);
> - tgen_arithi(s, ARITH_AND + rexw, r0,
> + tgen_arithi(s, ARITH_AND + hrexw, r0,
> (CPU_TLB_SIZE - 1) << CPU_TLB_ENTRY_BITS, 0);
>
> - tcg_out_modrm_sib_offset(s, OPC_LEA + P_REXW, r0, TCG_AREG0, r0, 0,
> + tcg_out_modrm_sib_offset(s, OPC_LEA + hrexw, r0, TCG_AREG0, r0, 0,
> offsetof(CPUArchState, tlb_table[mem_index][0])
> + which);
>
> /* cmp 0(r0), r1 */
> - tcg_out_modrm_offset(s, OPC_CMP_GvEv + rexw, r1, r0, 0);
> + tcg_out_modrm_offset(s, OPC_CMP_GvEv + trexw, r1, r0, 0);
>
> - tcg_out_mov(s, type, r1, addrlo);
> + tcg_out_mov(s, ttype, r1, addrlo);
This one is not fully correct. It should be ttype for the slow path (the
value is used as an argument to the helper function), but htype for the
fast path (the value is used as a host pointer).
Using ttype currently ensures the type is safe, but it might worth
adding a comment in case ttype or htype is changed.
>
> /* jne slow_path */
> tcg_out_opc(s, OPC_JCC_long + JCC_JNE, 0, 0, 0);
> @@ -1107,7 +1114,7 @@ static inline void tcg_out_tlb_load(TCGContext *s, int addrlo_idx,
> /* TLB Hit. */
>
> /* add addend(r0), r1 */
> - tcg_out_modrm_offset(s, OPC_ADD_GvEv + P_REXW, r1, r0,
> + tcg_out_modrm_offset(s, OPC_ADD_GvEv + hrexw, r1, r0,
> offsetof(CPUTLBEntry, addend) - which);
> }
> #elif defined(__x86_64__) && defined(__linux__)
This patch (trivially) conflicts with commit 'Tidy qemu_ld/st slow path'
which is now applied, so it has to be updated. Otherwise and except the
above comment, it looks fine to me.
--
Aurelien Jarno GPG: 1024D/F1BCDB73
aurelien@aurel32.net http://www.aurel32.net
next prev parent reply other threads:[~2013-08-29 16:53 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-22 16:58 [Qemu-devel] [PATCH 00/18] tcg: decouple tcg_target_long from pointer size Richard Henderson
2013-08-22 16:58 ` [Qemu-devel] [PATCH 01/18] qtest: Fix FMT_timeval vs time_t Richard Henderson
2013-08-22 17:09 ` Andreas Färber
2013-08-22 17:53 ` Richard Henderson
2013-08-22 18:01 ` Andreas Färber
2013-08-22 18:05 ` Richard Henderson
2013-08-22 16:58 ` [Qemu-devel] [PATCH 02/18] tcg: Change flush_icache_range arguments to uintptr_t Richard Henderson
2013-08-28 21:06 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 03/18] tcg: Change tcg_qemu_tb_exec return " Richard Henderson
2013-08-28 21:06 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 04/18] tcg: Fix next_tb type in cpu_exec Richard Henderson
2013-08-28 21:07 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 05/18] tcg: Define TCG_TYPE_PTR properly Richard Henderson
2013-08-29 10:53 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 06/18] tcg: Define TCG_ptr properly Richard Henderson
2013-08-29 10:53 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 07/18] tcg: Change frame pointer offsets to intptr_t Richard Henderson
2013-08-29 10:53 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 08/18] tcg: Change memory " Richard Henderson
2013-08-29 10:53 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 09/18] tcg: Change relocation " Richard Henderson
2013-08-29 10:53 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 10/18] tcg: Use uintptr_t in TCGHelperInfo Richard Henderson
2013-08-29 10:53 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 11/18] tcg: Change tcg_gen_exit_tb argument to uintptr_t Richard Henderson
2013-08-29 10:54 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 12/18] tcg: Change tcg_out_ld/st offset to intptr_t Richard Henderson
2013-08-29 16:44 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 13/18] tcg: Use appropriate types in tcg_reg_alloc_call Richard Henderson
2013-08-29 16:44 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 14/18] tcg: Fix jit debug for pointer size != register size Richard Henderson
2013-08-29 16:44 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 15/18] tcg: Allow TCG_TARGET_REG_BITS to be specified independantly Richard Henderson
2013-08-29 16:45 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 16/18] tcg-i386: Use intptr_t appropriately Richard Henderson
2013-08-29 16:45 ` Aurelien Jarno
2013-08-22 16:58 ` [Qemu-devel] [PATCH 17/18] tcg-i386: Adjust tcg_out_tlb_load for x32 Richard Henderson
2013-08-29 16:45 ` Aurelien Jarno [this message]
2013-08-29 17:53 ` Richard Henderson
2013-08-29 20:52 ` Richard Henderson
2013-08-22 16:58 ` [Qemu-devel] [PATCH 18/18] configure: Allow x32 as a host Richard Henderson
2013-08-29 16:45 ` Aurelien Jarno
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130829164511.GA22155@ohm.aurel32.net \
--to=aurelien@aurel32.net \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.