From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52406) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZqeS9-0002MV-Cf for qemu-devel@nongnu.org; Mon, 26 Oct 2015 05:52:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZqeS8-0003Iv-Fd for qemu-devel@nongnu.org; Mon, 26 Oct 2015 05:52:33 -0400 Received: from mail-vk0-x230.google.com ([2607:f8b0:400c:c05::230]:32795) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZqeS8-0003In-7G for qemu-devel@nongnu.org; Mon, 26 Oct 2015 05:52:32 -0400 Received: by vkgy127 with SMTP id y127so95410906vkg.0 for ; Mon, 26 Oct 2015 02:52:31 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <20151026092018.GA3751@toto> References: <1444863346-9711-1-git-send-email-edgar.iglesias@gmail.com> <1444863346-9711-4-git-send-email-edgar.iglesias@gmail.com> <20151026092018.GA3751@toto> From: Peter Maydell Date: Mon, 26 Oct 2015 09:52:12 +0000 Message-ID: Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [PATCH v4 03/13] target-arm: Add support for AArch32 S2 negative t0sz List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Edgar E. Iglesias" Cc: QEMU Developers , Alexander Graf , Sergey Fedorov , Laurent Desnogues , "Edgar E. Iglesias" , =?UTF-8?B?QWxleCBCZW5uw6ll?= On 26 October 2015 at 09:20, Edgar E. Iglesias wrote: > Yes, sounds good. I've changed the patch to the following: > > @@ -6521,8 +6521,24 @@ static bool get_phys_addr_lpae(CPUARMState *env, target_ulong address, > */ > int32_t t0sz = extract32(tcr->raw_tcr, 0, 6); > if (va_size == 64) { > + /* AArch64 translation. */ > t0sz = MIN(t0sz, 39); > t0sz = MAX(t0sz, 16); > + } else if (mmu_idx != ARMMMUIdx_S2NS) { > + /* AArch32 stage 1 translation. */ > + t0sz = extract32(t0sz, 0, 3); > + } else { > + /* AArch32 stage 2 translation. */ > + bool sext = extract32(t0sz, 4, 1); > + bool sign = extract32(t0sz, 3, 1); > + t0sz = sextract32(t0sz, 0, 4); > + > + /* If the sign-extend bit is not the same as t0sz[3], the result > + * is unpredictable. Flag this as a guest error. */ > + if (sign != sext) { > + qemu_log_mask(LOG_GUEST_ERROR, > + "AArch32: VTCR.S / VTCR.T0SZ[3] missmatch\n"); > + } > } > Looks good, but maybe we should just do all the extracts on tcr->raw_tcr, rather than extracting 6 bits of it and then re-extracting some subset of bits from that extract (for the 32-bit stage 1 case in particular it would be simpler). -- PMM