From: Stefano Bonifazi <stefboombastic@gmail.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] TCG flow vs dyngen
Date: Fri, 10 Dec 2010 22:26:43 +0100 [thread overview]
Message-ID: <4D029B13.3050002@gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 2636 bytes --]
Hi all!
From the technical documentation
(http://www.usenix.org/publications/library/proceedings/usenix05/tech/freenix/bellard.html)
I read:
> The first step is to split each target CPU instruction into fewer
> simpler instructions called /micro operations/. Each micro operation
> is implemented by a small piece of C code. This small C source code is
> compiled by GCC to an object file. The micro operations are chosen so
> that their number is much smaller (typically a few hundreds) than all
> the combinations of instructions and operands of the target CPU. The
> translation from target CPU instructions to micro operations is done
> entirely with hand coded code.
> A compile time tool called dyngen uses the object file containing the
> micro operations as input to generate a dynamic code generator. This
> dynamic code generator is invoked at runtime to generate a complete
> host function which concatenates several micro operations.
instead from wikipedia(http://en.wikipedia.org/wiki/QEMU) and other
sources I read:
> The Tiny Code Generator (TCG) aims to remove the shortcoming of
> relying on a particular version of GCC
> <http://en.wikipedia.org/wiki/GNU_Compiler_Collection> or any
> compiler, instead incorporating the compiler (code generator) into
> other tasks performed by QEMU in run-time. The whole translation task
> thus consists of two parts: blocks of target code (/TBs/) being
> rewritten in *TCG ops* - a kind of machine-independent intermediate
> notation, and subsequently this notation being compiled for the host's
> architecture by TCG. Optional optimisation passes are performed
> between them.
- So, I think that the technical documentation is now obsolete, isn't it?
- The "old way" used much offline (compile time) work compiling the
micro operations into host machine code, while if I understand well, TCG
does everything in run-time(please correct me if I am wrong!).. so I
wonder, how can it be as fast as the previous method (or even faster)?
- If I understand well, TGC runtime flow is the following:
- TCG takes the target binary, and splits it into target blocks
- if the TB is not cached, TGC translates it (or better the target
instructions it is composed by) into TCG micro ops,
- TGC compiles TGC uops into host object code,
- TGC caches the TB,
- TGC tries to chain the block with others,
- TGC copies the TB into the execution buffer
- TGC runs it
Am I right? Please correct me, whether I am wrong, as I wanna use that
flow scheme for trying to understand the code..
Thank you very much in advance!
Stefano B.
[-- Attachment #2: Type: text/html, Size: 3664 bytes --]
next reply other threads:[~2010-12-10 21:27 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-10 21:26 Stefano Bonifazi [this message]
2010-12-11 11:02 ` [Qemu-devel] TCG flow vs dyngen Blue Swirl
2010-12-11 12:29 ` Stefano Bonifazi
2010-12-11 13:11 ` Blue Swirl
2010-12-11 14:32 ` Stefano Bonifazi
2010-12-11 14:44 ` Blue Swirl
2010-12-14 20:17 ` Stefano Bonifazi
-- strict thread matches above, loose matches on Subject: below --
2011-01-16 14:46 Raphael Lefevre
2011-01-16 15:21 ` Stefano Bonifazi
2011-01-16 16:01 ` Raphaël Lefèvre
2011-01-16 16:43 ` Stefano Bonifazi
2011-01-16 18:29 ` Peter Maydell
2011-01-16 19:02 ` Stefano Bonifazi
2011-01-16 19:24 ` Peter Maydell
2011-01-16 20:50 ` Stefano Bonifazi
2011-01-16 21:08 ` Raphaël Lefèvre
2011-01-17 11:59 ` Lluís
2011-01-16 19:16 ` Raphaël Lefèvre
2011-01-23 21:50 ` Rob Landley
2011-01-23 22:25 ` Stefano Bonifazi
2011-01-23 23:40 ` Rob Landley
2011-01-24 10:17 ` Stefano Bonifazi
2011-01-24 18:20 ` Rob Landley
2011-01-24 21:16 ` Stefano Bonifazi
2011-01-25 1:19 ` Rob Landley
2011-01-25 8:53 ` Stefano Bonifazi
2011-01-24 14:32 ` Peter Maydell
2011-01-24 14:56 ` Stefano Bonifazi
2011-01-24 15:15 ` Lluís
2011-01-24 18:02 ` Dushyant Bansal
2011-01-24 19:38 ` Stefano Bonifazi
2011-01-25 7:56 ` Dushyant Bansal
2011-01-25 9:04 ` Stefano Bonifazi
2011-01-25 9:05 ` Edgar E. Iglesias
2011-01-25 9:28 ` Stefano Bonifazi
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=4D029B13.3050002@gmail.com \
--to=stefboombastic@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).