From: Richard Henderson <rth@twiddle.net>
To: Sergey Sorokin <afarallax@yandex.ru>, qemu-devel@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Peter Crosthwaite <crosthwaite.peter@gmail.com>,
Alexander Graf <agraf@suse.de>,
qemu-arm@nongnu.org, Claudio Fontana <claudio.fontana@huawei.com>,
Vassili Karpov <av1474@comtv.ru>
Subject: Re: [Qemu-devel] [PATCH v2] Improve the alignment check infrastructure
Date: Wed, 22 Jun 2016 08:49:57 -0700 [thread overview]
Message-ID: <5d86b8ba-16e8-e94d-ba7f-e865cbcc938e@twiddle.net> (raw)
In-Reply-To: <1466599029-3388432-1-git-send-email-afarallax@yandex.ru>
On 06/22/2016 05:37 AM, Sergey Sorokin wrote:
> +/* Use this mask to check interception with an alignment mask
> + * in a TCG backend.
> + */
> +#define TLB_FLAGS_MASK (TLB_INVALID_MASK | TLB_NOTDIRTY | TLB_MMIO)
I think we ought to check this in tcg-op.c, rather than wait until generating
code in the backend.
> --- a/tcg/aarch64/tcg-target.inc.c
> +++ b/tcg/aarch64/tcg-target.inc.c
> @@ -1071,19 +1071,21 @@ static void tcg_out_tlb_read(TCGContext *s, TCGReg addr_reg, TCGMemOp opc,
> int tlb_offset = is_read ?
> offsetof(CPUArchState, tlb_table[mem_index][0].addr_read)
> : offsetof(CPUArchState, tlb_table[mem_index][0].addr_write);
> - int s_mask = (1 << (opc & MO_SIZE)) - 1;
> + int a_bits = get_alignment_bits(opc);
> TCGReg base = TCG_AREG0, x3;
> - uint64_t tlb_mask;
> + target_ulong tlb_mask;
Hum. I had been talking about i386 specifically when changing the type of
tlb_mask.
For aarch64, a quirk in the code generation logic requires that a 32-bit
tlb_mask be sign-extended to 64-bit. The effect of the actual instruction will
be zero-extension, however.
See is_limm, tcg_out_logicali, and a related comment in tcg_out_movi for
details. We should probably add a comment here in tlb_read for the next person
that comes along...
> diff --git a/tcg/ppc/tcg-target.inc.c b/tcg/ppc/tcg-target.inc.c
> index da10052..3dc38fa 100644
> --- a/tcg/ppc/tcg-target.inc.c
> +++ b/tcg/ppc/tcg-target.inc.c
> @@ -1399,6 +1399,7 @@ static TCGReg tcg_out_tlb_read(TCGContext *s, TCGMemOp opc,
> int add_off = offsetof(CPUArchState, tlb_table[mem_index][0].addend);
> TCGReg base = TCG_AREG0;
> TCGMemOp s_bits = opc & MO_SIZE;
> + int a_bits = get_alignment_bits(opc);
>
> /* Extract the page index, shifted into place for tlb index. */
> if (TCG_TARGET_REG_BITS == 64) {
> @@ -1456,14 +1457,21 @@ static TCGReg tcg_out_tlb_read(TCGContext *s, TCGMemOp opc,
> * the bottom bits and thus trigger a comparison failure on
> * unaligned accesses
> */
> + if (a_bits > 0) {
> + tcg_debug_assert((((1 << a_bits) - 1) & TLB_FLAGS_MASK) == 0);
> + } else {
> + a_bits = s_bits;
> + }
> tcg_out_rlw(s, RLWINM, TCG_REG_R0, addrlo, 0,
> + (32 - a_bits) & 31, 31 - TARGET_PAGE_BITS);
ppc32 can certainly support over-alignment, just like every other target. It's
just that there are some 32-bit parts that don't support unaligned accesses.
r~
next prev parent reply other threads:[~2016-06-22 15:50 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-22 12:37 [Qemu-devel] [PATCH v2] Improve the alignment check infrastructure Sergey Sorokin
2016-06-22 15:49 ` Richard Henderson [this message]
2016-06-22 16:30 ` Sergey Sorokin
2016-06-22 17:12 ` Richard Henderson
2016-06-23 10:03 ` Sergey Sorokin
2016-06-23 14:05 ` Richard Henderson
2016-06-23 14:13 ` Sergey Sorokin
2016-06-23 14:45 ` Sergey Sorokin
2016-06-23 16:12 ` Richard Henderson
2016-06-23 18:21 ` Sergey Sorokin
2016-06-23 19:06 ` Richard Henderson
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=5d86b8ba-16e8-e94d-ba7f-e865cbcc938e@twiddle.net \
--to=rth@twiddle.net \
--cc=afarallax@yandex.ru \
--cc=agraf@suse.de \
--cc=av1474@comtv.ru \
--cc=claudio.fontana@huawei.com \
--cc=crosthwaite.peter@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).