From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MeD6s-0007mW-8x for qemu-devel@nongnu.org; Thu, 20 Aug 2009 15:15:42 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MeD6m-0007ln-Uq for qemu-devel@nongnu.org; Thu, 20 Aug 2009 15:15:41 -0400 Received: from [199.232.76.173] (port=52244 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MeD6m-0007lk-N2 for qemu-devel@nongnu.org; Thu, 20 Aug 2009 15:15:36 -0400 Received: from mail-fx0-f211.google.com ([209.85.220.211]:33943) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MeD6m-000671-2S for qemu-devel@nongnu.org; Thu, 20 Aug 2009 15:15:36 -0400 Received: by fxm7 with SMTP id 7so105715fxm.34 for ; Thu, 20 Aug 2009 12:15:34 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: From: Blue Swirl Date: Thu, 20 Aug 2009 22:15:14 +0300 Message-ID: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] Re: target-sparc/TODO List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Artyom Tarasenko Cc: qemu-devel On Thu, Aug 20, 2009 at 12:44 PM, Artyom Tarasenko wrote: >>> Particularly I'm interested if >>> >>> jmp =C2=A0 =C2=A0 %l1, %g4, %g0 >>> >>> may behave other than on a real hw. >> >> No, if rd is %g0, the current PC will not be written anywhere (not by >> real HW either). > > The reason I asked is the two following pieces of code work > differently on a real and emulated SS-5. On a real one spacel! does an > asi write, and spacel@ does an asi read, and under qemu =C2=A0spacel! see= ms > to do nothing, and spacel@ returns its second parameter multiplied by > 4. Both of them don't even try to call an [unimplemented] asi > operation, I've runned the tests with mmu and asi debug turned on. > > Real SS-5: > > ok 0 0 spacel@ . > Data Access Error > ok 0 20 spacel@ . > 0 > ok 12345678 0 20 spacel! > ok 0 20 spacel@ . > 12345678 > ok > > > qemu SS-5: > > ok 0 0 spacel@ . > 0 > ok 0 20 spacel@ . > 80 > ok 12345678 0 20 spacel! > ok 0 20 spacel@ . > 80 > ok > > I don't know sparc asm good enogh, but qemu behavior seems to be > logical: in the first case I see no store op, and there are shifts > which would multiply by 4: > > ok see spacel! > code spacel! > ffd26e0c =C2=A0 =C2=A0 ld =C2=A0 =C2=A0 =C2=A0[%g7], %l2 > ffd26e10 =C2=A0 =C2=A0 add =C2=A0 =C2=A0 %g7, 4, %g7 > ffd26e14 =C2=A0 =C2=A0 ld =C2=A0 =C2=A0 =C2=A0[%g7], %l0 > ffd26e18 =C2=A0 =C2=A0 add =C2=A0 =C2=A0 %g7, 4, %g7 > ffd26e1c =C2=A0 =C2=A0 sll =C2=A0 =C2=A0 %g4, 2, %g4 > ffd26e20 =C2=A0 =C2=A0 call =C2=A0 =C2=A0ffd26e24 > ffd26e24 =C2=A0 =C2=A0 add =C2=A0 =C2=A0 %g0, 14, %l1 > > ok ffd26e24 dis > ffd26e24 =C2=A0 =C2=A0 add =C2=A0 =C2=A0 %g0, 14, %l1 > ffd26e28 =C2=A0 =C2=A0 add =C2=A0 =C2=A0 %o7, %l1, %l1 > ffd26e2c =C2=A0 =C2=A0 jmp =C2=A0 =C2=A0 %l1, %g4, %g0 > ffd26e30 =C2=A0 =C2=A0 ba =C2=A0 =C2=A0 =C2=A0ffd26f68 > ok > > ok see spacel@ > code spacel@ > ffd26830 =C2=A0 =C2=A0 ld =C2=A0 =C2=A0 =C2=A0[%g7], %l0 > ffd26834 =C2=A0 =C2=A0 add =C2=A0 =C2=A0 %g7, 4, %g7 > ffd26838 =C2=A0 =C2=A0 sll =C2=A0 =C2=A0 %g4, 2, %g4 > ffd2683c =C2=A0 =C2=A0 call =C2=A0 =C2=A0ffd26840 > ffd26840 =C2=A0 =C2=A0 add =C2=A0 =C2=A0 %g0, 14, %l1 > > ok ffd26840 dis > ffd26840 =C2=A0 =C2=A0 add =C2=A0 =C2=A0 %g0, 14, %l1 > ffd26844 =C2=A0 =C2=A0 add =C2=A0 =C2=A0 %o7, %l1, %l1 > ffd26848 =C2=A0 =C2=A0 jmp =C2=A0 =C2=A0 %l1, %g4, %g0 > ffd2684c =C2=A0 =C2=A0 ba =C2=A0 =C2=A0 =C2=A0ffd26984 > > > The code is identical on a real and emulated SS. > > It must be the jump, which jumps differently on a real hw and under > qemu. Do you see from the code where the jump would jump to, or maybe > you have a suggestion how to check where the jump jumps to on the real > hw? The target of the call instruction is also a delay slot instruction for the call itself. Maybe this case is not handled correctly?