qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paul Brook <paul@codesourcery.com>
To: Blue Swirl <blauwirbel@gmail.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC PATCH] s390x-linux-user
Date: Fri, 26 Jun 2009 18:59:02 +0100	[thread overview]
Message-ID: <200906261859.03172.paul@codesourcery.com> (raw)
In-Reply-To: <f43fc5580906261046w70b50596s5b4f75e0d530c996@mail.gmail.com>

On Friday 26 June 2009, Blue Swirl wrote:
> On 6/26/09, Paul Brook <paul@codesourcery.com> wrote:
> > On Friday 26 June 2009, Blue Swirl wrote:
> >  > On 6/26/09, Ulrich Hecht <uli@suse.de> wrote:
> >  > >  There is a very peculiar S/390 instruction called "EXECUTE". What
> >  > > it does is to take another instruction stored somewhere in memory,
> >  > > logical-OR the second byte of the instruction with the LSB of R0 and
> >  > > then execute the result, without changing the instruction in memory
> >  > > or the program counter. Any idea how to implement this in QEMU?
> >  > > Currently, I'm interpreting the couple of instructions that GCC uses
> >  > > EXECUTE with, but in the long run that would amount to implementing
> >  > > a second emulator...
> >  >
> >  > Maybe something like this: Make a special TB of the EXECUTE
> >  > instruction and add LSB of R0 to TB flags for these TBs. Then you can
> >  > examine R0, OR and generate code at translation time. The TBs linking
> >  > to EXECUTE TB may need to be special too in order to track for R0.
> >
> > That's not sufficient. The results also depend on the referenced
> > instruction.
>
> Then add the second byte of the referenced instruction to TB flags? Or
> maybe just the result of the OR operation for compactness?

No. You need the whole instruction. Which is fetched from memory, so is not 
easily available when you're checking TB flags.
To do it this way, I think you'd need to split the instruction in two. The 
first part would load the whole instruciton from memory, or with r0, then 
store the result in an internal CPU pseudo-register to the whole instruction, 
and cuse annother TB lookup. The second would generate code that cleared the 
pseudo-register then executed the code that was stored in it.
You'd have to include the whole of the pseudo-register in TB_FLAGS, and I 
doubt you've got enough bits for that.

OTOH, tweaking the TCG interface so that it works as an interpreter shouldn't 
be all that hard. It's something I've been considering to do for a while, and 
would mean that you can build both interpreter and translator from the same 
source.

Paul

  reply	other threads:[~2009-06-26 17:59 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-26 16:49 [Qemu-devel] [RFC PATCH] s390x-linux-user Ulrich Hecht
2009-06-26 17:17 ` Blue Swirl
2009-06-26 17:40   ` Paul Brook
2009-06-26 17:46     ` Blue Swirl
2009-06-26 17:59       ` Paul Brook [this message]
2009-06-26 18:18         ` Paul Brook
2009-06-26 18:22         ` Blue Swirl
2009-06-26 18:39           ` Paul Brook
2009-06-26 19:07   ` Stuart Brady
2009-06-26 19:24     ` Paul Brook
2009-07-03 15:11     ` Ulrich Hecht

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=200906261859.03172.paul@codesourcery.com \
    --to=paul@codesourcery.com \
    --cc=blauwirbel@gmail.com \
    --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).