qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: [PATCH v3 06/14] tcg/arm: Support unaligned access for softmmu
Date: Fri, 20 Aug 2021 07:19:58 -1000	[thread overview]
Message-ID: <c3d94c13-5f18-c3fd-656c-ee94117d0910@linaro.org> (raw)
In-Reply-To: <CAFEAcA9KYVCwOR8ExCQqw-gcM=7EfEpdiRwSP+GGH3rNMh4zFQ@mail.gmail.com>

On 8/20/21 3:34 AM, Peter Maydell wrote:
> On Wed, 18 Aug 2021 at 22:32, Richard Henderson
> <richard.henderson@linaro.org> wrote:
>>
>>  From armv6, the architecture supports unaligned accesses.
>> All we need to do is perform the correct alignment check
>> in tcg_out_tlb_read and not use LDRD/STRD when the access
>> is not aligned.
>>
>> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
>> @@ -1578,27 +1576,32 @@ static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addrlo, TCGReg addrhi,
>>
>>       /*
>>        * Check alignment, check comparators.
>> -     * Do this in no more than 3 insns.  Use MOVW for v7, if possible,
>> +     * Do this in 2-4 insns.  Use MOVW for v7, if possible,
>>        * to reduce the number of sequential conditional instructions.
>>        * Almost all guests have at least 4k pages, which means that we need
>>        * to clear at least 9 bits even for an 8-byte memory, which means it
>>        * isn't worth checking for an immediate operand for BIC.
>>        */
>> +    /* For unaligned accesses, test the page of the last byte. */
>> +    t_addr = addrlo;
>> +    if (a_mask < s_mask) {
>> +        t_addr = TCG_REG_R0;
>> +        tcg_out_dat_imm(s, COND_AL, ARITH_ADD, t_addr,
>> +                        addrlo, s_mask - a_mask);
>> +    }
> 
> I don't understand what this comment means or why we're doing the
> addition. If we know we need to check eg whether the address is 2-aligned,
> why aren't we just checking whether it's 2-aligned ? Could you
> expand on the explanation a bit?

We want to detect the page crossing case of a misaligned access.

We began computing the softtlb data with the address of the start access (addrlo).  We 
then compute the address of the last (aligned) portion of the access.  For a 4-byte access 
that is 1-byte aligned, we add 3 - 0 = 3, finding the last byte; for a 2-byte aligned 
access we add 3 - 1 = 2; for a 4-byte aligned access we (logically) add 3 - 3 = 0.

This second quantity retains the alignment we need to test and also rolls over to the next 
page iff the access does. When we compare against the comparator in the tlb, a bit set 
within the alignment will cause failure as will a differing page number.


r~


  reply	other threads:[~2021-08-20 17:21 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-18 21:28 [PATCH v3 00/14] tcg/arm: Unaligned access and other cleanup Richard Henderson
2021-08-18 21:28 ` [PATCH v3 01/14] tcg/arm: Remove fallback definition of __ARM_ARCH Richard Henderson
2021-08-20 10:38   ` Peter Maydell
2021-08-18 21:29 ` [PATCH v3 02/14] tcg/arm: Standardize on tcg_out_<branch>_{reg,imm} Richard Henderson
2021-08-18 21:58   ` Philippe Mathieu-Daudé
2021-08-20 10:39   ` [PATCH v3 02/14] tcg/arm: Standardize on tcg_out_<branch>_{reg, imm} Peter Maydell
2021-08-18 21:29 ` [PATCH v3 03/14] tcg/arm: Simplify use_armvt5_instructions Richard Henderson
2021-08-20 10:59   ` Peter Maydell
2021-08-18 21:29 ` [PATCH v3 04/14] tcg/arm: Support armv4t in tcg_out_goto and tcg_out_call Richard Henderson
2021-08-20 10:50   ` Peter Maydell
2021-08-18 21:29 ` [PATCH v3 05/14] tcg/arm: Examine QEMU_TCG_DEBUG environment variable Richard Henderson
2021-08-20 11:01   ` Peter Maydell
2021-08-18 21:29 ` [PATCH v3 06/14] tcg/arm: Support unaligned access for softmmu Richard Henderson
2021-08-20 13:34   ` Peter Maydell
2021-08-20 17:19     ` Richard Henderson [this message]
2021-08-18 21:29 ` [PATCH v3 07/14] tcg/arm: Split out tcg_out_ldstm Richard Henderson
2021-08-20 11:45   ` Peter Maydell
2021-08-18 21:29 ` [PATCH v3 08/14] tcg/arm: Simplify usage of encode_imm Richard Henderson
2021-08-20 11:50   ` Peter Maydell
2021-08-18 21:29 ` [PATCH v3 09/14] tcg/arm: Drop inline markers Richard Henderson
2021-08-18 22:02   ` Philippe Mathieu-Daudé
2021-08-18 21:29 ` [PATCH v3 10/14] tcg/arm: Give enum arm_cond_code_e a typedef and use it Richard Henderson
2021-08-18 22:04   ` Philippe Mathieu-Daudé
2021-08-18 21:29 ` [PATCH v3 11/14] tcg/arm: More use of the ARMInsn enum Richard Henderson
2021-08-18 22:04   ` Philippe Mathieu-Daudé
2021-08-18 21:29 ` [PATCH v3 12/14] tcg/arm: More use of the TCGReg enum Richard Henderson
2021-08-18 22:05   ` Philippe Mathieu-Daudé
2021-08-18 21:29 ` [PATCH v3 13/14] tcg/arm: Reserve a register for guest_base Richard Henderson
2021-08-20 12:03   ` Peter Maydell
2021-08-20 18:47     ` Richard Henderson
2021-08-21 10:38       ` Peter Maydell
2021-08-18 21:29 ` [PATCH v3 14/14] tcg/arm: Support raising sigbus for user-only Richard Henderson
2021-08-20 13:56   ` Peter Maydell

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=c3d94c13-5f18-c3fd-656c-ee94117d0910@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=peter.maydell@linaro.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).