qemu-devel
[Top][All Lists]
Advanced

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

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


From: 鏇硅幑
Subject: [Qemu-devel] How does env_to_regs and regs_to_env works?
Date: Mon, 31 May 2010 16:41:42 +0800 (CST)

Now, I’m working with Qemu source study, but I have some difficulties. Could someday give me some help or advice.

 

At the beginning of cpu_exec, there is a function call env_to_regs, but I cannot understand the behavior of env_to_regs. In my understanding, env_to_regs stores environment context pointer(pointer that points to X86CPUState)  and other critical Qemu defined variable to real host register, that is to say function env_to_regs accomplishes the task register mapping for translating optimization. That is my understanding, but I really understand the codes in env_to_regs and regs_to_env. 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, actually, I insert one line: printf(“reg_EAX is defined!\n”) after #ifdef reg_EAX into Qemu source, compile it and run Qemu, there is no output information, so I think, env_to_regs is actually a void function (For other micro define, situations are the same). But if this is true, how did Qemu’s register mapping accomplished?

 

If I suppose that reg_EAX has already defined somewhere in Qemu source, but how does EAX = env->regs[R_EAX] works? EAX is also a micro definition like this #define EAX (env->regs[R_EAX]). Then the code becomes like this: env->regs[R_EAX]= env->regs[R_EAX]. Left side and right side of “=” is the same . So how does regs_to_env and regs_to_env work? How to understand the functionality of the two functions, Could anyone give me some advice. I will own my thankfulness for all of you. Thank you very much.

 




网易为中小企业免费提供企业邮箱(自主域名)

reply via email to

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