Commit fd429f2f authored by bellard's avatar bellard
Browse files


git-svn-id: svn:// c046a42c-6fe2-441c-8c8c-71466251a162
parent fb3e5849
......@@ -19,6 +19,10 @@ ifeq ($(ARCH),ppc)
ifeq ($(ARCH),s390)
ifeq ($(GCC_MAJOR),3)
# very important to generate a return at the end of every operation
OP_CFLAGS+=-fno-reorder-blocks -fno-optimize-sibling-calls
......@@ -94,19 +98,20 @@ qemu-doc.html: qemu-doc.texi
texi2html -monolithic -number $<
dyngen.c ioctls.h ops_template.h syscall_types.h\
dyngen.c ioctls.h ops_template.h op_string.h syscall_types.h\
Makefile elf.h linux_bin.h segment.h thunk.c\
elfload.c main.c signal.c thunk.h\
cpu-i386.h qemu.h op-i386.c opc-i386.h syscall-i386.h translate-i386.c\
cpu-i386.h qemu.h op-i386.c opc-i386.h syscall-i386.h translate-i386.c\
dis-asm.h gen-i386.h op-i386.h syscall.c\
dis-buf.c i386-dis.c opreg_template.h syscall_defs.h\
i386.ld ppc.ld exec-i386.h exec-i386.c configure \
i386.ld ppc.ld s390.ld exec-i386.h exec-i386.c configure \
tests/test-i386.c tests/test-i386-shift.h tests/test-i386.h\
tests/test-i386-muldiv.h tests/test-i386-code16.S\
tests/hello.c tests/hello tests/sha1.c \
tests/testsig.c tests/testclone.c tests/testthread.c \
tests/runcom.c tests/ \
qemu-doc.texi qemu-doc.html
\ No newline at end of file
\ No newline at end of file
......@@ -12,8 +12,9 @@
QEMU is an x86 processor emulator. Its purpose is to run x86 Linux
processes on non-x86 Linux architectures such as PowerPC or ARM. By
using dynamic translation it achieves a reasonnable speed while being
easy to port on new host CPUs. An obviously interesting x86 only process
is 'wine' (Windows emulation).
easy to port on new host CPUs. Its main goal is to be able to launch the
@code{Wine} Windows API emulator (@url{}) on
non-x86 CPUs.
QEMU features:
......@@ -21,12 +22,13 @@ QEMU features:
@item User space only x86 emulator.
@item Currently ported on i386 and PowerPC.
@item Currently ported on i386, PowerPC and S390.
@item Using dynamic translation for reasonnable speed.
@item Using dynamic translation to native code for reasonnable speed.
@item The virtual x86 CPU supports 16 bit and 32 bit addressing with segmentation.
User space LDT and GDT are emulated.
User space LDT and GDT are emulated. VM86 mode is also supported
@item Generic Linux system call converter, including most ioctls.
......@@ -52,10 +54,6 @@ Current QEMU Limitations:
@item No support for self modifying code (yet). [Very few programs need that, a notable exception is QEMU itself !].
@item No VM86 mode (yet), althought the virtual
CPU has support for most of it. [VM86 support is useful to launch old 16
bit DOS programs with dosemu or wine].
@item No SSE/MMX support (yet).
@item No x86-64 support.
......@@ -123,10 +121,10 @@ able to do:
qemu /usr/local/qemu-i386/bin/ls-i386
@end example
@item Download the binary x86 wine install
@item Download the binary x86 Wine install
(@file{qemu-i386-wine.tar.gz} on the QEMU web page).
@item Configure wine on your account. Look at the provided script
@item Configure Wine on your account. Look at the provided script
@file{/usr/local/qemu-i386/bin/}. Your previous
@code{$@{HOME@}/.wine} directory is saved to @code{$@{HOME@}/}.
......@@ -177,6 +175,13 @@ code, in particular the ELF file loader). EM86 was limited to an alpha
host and used a proprietary and slow interpreter (the interpreter part
of the FX!32 Digital Win32 code translator [5]).
TWIN [6] is a Windows API emulator like Wine. It is less accurate than
Wine but includes a protected mode x86 interpreter to launch x86 Windows
executables. Such an approach as greater potential because most of the
Windows API is executed natively but it is far more difficult to develop
because all the data structures and function parameters exchanged
between the API and the x86 code must be converted.
@section Portable dynamic translation
QEMU is a dynamic translator. When it first encounters a piece of code,
......@@ -218,7 +223,7 @@ doing complicated register allocation.
Good CPU condition codes emulation (@code{EFLAGS} register on x86) is a
critical point to get good performances. QEMU uses lazy condition code
evaluation: instead of computing the condition codes after each x86
instruction, it store justs one operand (called @code{CC_CRC}), the
instruction, it just stores one operand (called @code{CC_SRC}), the
result (called @code{CC_DST}) and the type of operation (called
......@@ -231,7 +236,7 @@ generated simple instructions (see
the condition codes are not needed by the next instructions, no
condition codes are computed at all.
@section Translation CPU state optimisations
@section CPU state optimisations
The x86 CPU has many internal states which change the way it evaluates
instructions. In order to achieve a good speed, the translation phase
......@@ -323,6 +328,10 @@ x86 emulator on Alpha-Linux.
DIGITAL FX!32: Running 32-Bit x86 Applications on Alpha NT, by Anton
Chernoff and Ray Hookway.
@item [6]
@url{}, Windows API library emulation from
Willows Software.
@end table
@chapter Regression Tests
......@@ -365,3 +374,9 @@ It is a simple benchmark. Care must be taken to interpret the results
because it mostly tests the ability of the virtual CPU to optimize the
@code{rol} x86 instruction and the condition code computations.
@section @file{runcom}
A very simple MSDOS emulator to test the Linux vm86() system call
emulation. The excellent 54 byte @file{} PI number calculator
can be launched with it. @file{} was written by Bertram
Felgenhauer (more information at @url{}).
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment