qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] opc.h and gen-op.h


From: Johannes Schindelin
Subject: Re: [Qemu-devel] opc.h and gen-op.h
Date: Sat, 5 Nov 2005 16:37:47 +0100 (CET)

Hi,

On Sat, 5 Nov 2005, address@hidden wrote:

> What is the job of the two files gen-op.h and opc.h? They were created 
> by dyngen -c / -g

> opc.h contains something like:
> DEF(movl_A0_EAX, 0, 3)
> DEF(addl_A0_EAX, 0, 5)
> DEF(addl_A0_EAX_s1, 0, 6)

These are definitions of the oplets. For example, movl_A0_EAX takes 0 
arguments, and its implementation is 3 bytes long.

Remember, QEmu is not an emulator but translator: every assembler opcode 
is translated into a short assembler sequence (in the machine language 
of the host) implementing the function of the opcode.

> gen-op.h contains:
> static inline void gen_op_movl_A0_EAX(void)
> {
>     *gen_opc_ptr++ = INDEX_op_movl_A0_EAX;
> }
> 
> static inline void gen_op_addl_A0_EAX(void)
> {
>     *gen_opc_ptr++ = INDEX_op_addl_A0_EAX;
> }

This is the first step of translating: In order to translate a block of 
code, kind of a P-code is generated with the gen_op* functions. This 
step is responsible to fill in the arguments (movl_A0_EAX is one of 
the simpler functions which do not take an argument).

This P-code is then turned into working machine code by filling in the 
corresponding snippets (the compiled code of the op_* functions) and the 
arguments are put into the correct place.

I've written a document a while ago, where I wrote what I understood to be 
the process used by QEmu. Maybe it helps you:

        http://libvncserver.sourceforge.net/qemu/qemu-porting.html

The section about portable dynamic translation should be of special 
interest to you.

Ciao,
Dscho





reply via email to

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