All of lore.kernel.org
 help / color / mirror / Atom feed
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~

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