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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.