From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35278) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vu2xU-000541-0A for qemu-devel@nongnu.org; Fri, 20 Dec 2013 11:29:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vu2xM-0006Iq-97 for qemu-devel@nongnu.org; Fri, 20 Dec 2013 11:29:51 -0500 Received: from mail-pb0-f43.google.com ([209.85.160.43]:40624) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vu2xM-0006Ij-2v for qemu-devel@nongnu.org; Fri, 20 Dec 2013 11:29:44 -0500 Received: by mail-pb0-f43.google.com with SMTP id rq2so2817273pbb.2 for ; Fri, 20 Dec 2013 08:29:43 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <52B46FA4.8070705@twiddle.net> References: <1387293144-11554-1-git-send-email-peter.maydell@linaro.org> <1387293144-11554-3-git-send-email-peter.maydell@linaro.org> <52B33112.7090700@twiddle.net> <52B46FA4.8070705@twiddle.net> From: Peter Maydell Date: Fri, 20 Dec 2013 16:29:22 +0000 Message-ID: Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [PATCH 02/21] target-arm: A64: add support for ld/st unsigned imm List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Richard Henderson Cc: Patch Tracking , Michael Matz , QEMU Developers , Claudio Fontana , Dirk Mueller , Will Newton , Laurent Desnogues , =?UTF-8?B?QWxleCBCZW5uw6ll?= , "kvmarm@lists.cs.columbia.edu" , Christoffer Dall On 20 December 2013 16:26, Richard Henderson wrote: > On 12/20/2013 08:08 AM, Peter Maydell wrote: >>> In particular, opc = 2 && size = 2 should be unallocated. >> >> This is LDRSW (immediate), not unallocated, isn't it? >> >> I agree the decode logic isn't laid out the same as the ARM ARM, >> but I'm pretty sure it's correct. > > Oops, typo: opc=3 && size=2. Basically, > > > if opc<1> == '0' then > // store or zero-extending load > memop = if opc<0> == '1' then MemOp_LOAD else MemOp_STORE; > regsize = if size == '11' then 64 else 32; > signed = FALSE; > else > if size == '11' then > memop = MemOp_PREFETCH; > if opc<0> == '1' then UnallocatedEncoding(); > else > // sign-extending load > memop = MemOp_LOAD; > if size == '10' && opc<0> == '1' then UnallocatedEncoding(); > > this one ----^ + if (size == 3 && opc == 2) { + /* PRFM - prefetch */ + return; + } + if (opc == 3 && size > 1) { + unallocated_encoding(s); + return; + } + is_store = (opc == 0); + is_signed = opc & (1<<1); + is_extended = (size < 3) && (opc & 1); That is caught by 'if (opc == 3 && size > 1)'. thanks -- PMM