qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] How does env_to_regs and regs_to_env works?


From: Stuart Brady
Subject: Re: [Qemu-devel] How does env_to_regs and regs_to_env works?
Date: Wed, 2 Jun 2010 22:25:04 +0100
User-agent: Mutt/1.5.20 (2009-06-14)

On Mon, May 31, 2010 at 04:41:42PM +0800, 曹莹 wrote:

> Codes in env_to_regs are like this:
> 
> #ifdef reg_EAX
> 
> EAX = env->regs[R_EAX];

[...]

> I cannot find where the micro reg_EAX is defined
[...]
> I think, env_to_regs is actually a void function
> But if this is true, how did Qemu’s register mapping accomplished? 

For i386 and x86_64, only AREG[0123] were ever defined.  The introduction
of TCG on 2008-02-01 broke support for all hosts except i386 and x86_64.

Commit edea5f0 (2008-05-10) then removed the definitions of reg_EAX, etc.
for target-i386.

Commit 6635f6f (2009-03-08) then removed the definitions of AREG3 to AREG11
for any hosts that defined them.

Commit 49a945a (2010-01-19) then removed env_to_regs() and regs_to_env().

So in other words, env_to_regs() and regs_to_env() haven't done anything
at all for quite a long time.

TCG allocates host registers dynamically (i.e. at translation time),
so host registers are no longer allocated statically (as they were with
dyngen under combinations of hosts and targets with these definitions).
TCG_AREG0 is still needed for the 'env' pointer itself, though.

It is TCG's job to make sure that the generated code saves values in the
CPUState struct where appropriate, i.e. at the end of any 'basic block',
or where host registers might get clobbered, or where exceptions might
need to be raised.  This is handled by calls to the save_globals()
function in tcg.c.

Cheers,
-- 
Stuart Brady



reply via email to

[Prev in Thread] Current Thread [Next in Thread]