diff options
Diffstat (limited to 'qemu/tcg/tci/README')
-rw-r--r-- | qemu/tcg/tci/README | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/qemu/tcg/tci/README b/qemu/tcg/tci/README deleted file mode 100644 index 3786b0915..000000000 --- a/qemu/tcg/tci/README +++ /dev/null @@ -1,130 +0,0 @@ -TCG Interpreter (TCI) - Copyright (c) 2011 Stefan Weil. - -This file is released under the BSD license. - -1) Introduction - -TCG (Tiny Code Generator) is a code generator which translates -code fragments ("basic blocks") from target code (any of the -targets supported by QEMU) to a code representation which -can be run on a host. - -QEMU can create native code for some hosts (arm, hppa, i386, ia64, ppc, ppc64, -s390, sparc, x86_64). For others, unofficial host support was written. - -By adding a code generator for a virtual machine and using an -interpreter for the generated bytecode, it is possible to -support (almost) any host. - -This is what TCI (Tiny Code Interpreter) does. - -2) Implementation - -Like each TCG host frontend, TCI implements the code generator in -tcg-target.inc.c, tcg-target.h. Both files are in directory tcg/tci. - -The additional file tcg/tci.c adds the interpreter. - -The bytecode consists of opcodes (same numeric values as those used by -TCG), command length and arguments of variable size and number. - -3) Usage - -For hosts without native TCG, the interpreter TCI must be enabled by - - configure --enable-tcg-interpreter - -If configure is called without --enable-tcg-interpreter, it will -suggest using this option. Setting it automatically would need -additional code in configure which must be fixed when new native TCG -implementations are added. - -System emulation should work on any 32 or 64 bit host. -User mode emulation might work. Maybe a new linker script (*.ld) -is needed. Byte order might be wrong (on big endian hosts) -and need fixes in configure. - -For hosts with native TCG, the interpreter TCI can be enabled by - - configure --enable-tcg-interpreter - -The only difference from running QEMU with TCI to running without TCI -should be speed. Especially during development of TCI, it was very -useful to compare runs with and without TCI. Create /tmp/qemu.log by - - qemu-system-i386 -d in_asm,op_opt,cpu -D /tmp/qemu.log -singlestep - -once with interpreter and once without interpreter and compare the resulting -qemu.log files. This is also useful to see the effects of additional -registers or additional opcodes (it is easy to modify the virtual machine). -It can also be used to verify native TCGs. - -Hosts with native TCG can also enable TCI by claiming to be unsupported: - - configure --cpu=unknown --enable-tcg-interpreter - -configure then no longer uses the native linker script (*.ld) for -user mode emulation. - - -4) Status - -TCI needs special implementation for 32 and 64 bit host, 32 and 64 bit target, -host and target with same or different endianness. - - | host (le) host (be) - | 32 64 32 64 -------------+------------------------------------------------------------ -target (le) | s0, u0 s1, u1 s?, u? s?, u? -32 bit | - | -target (le) | sc, uc s1, u1 s?, u? s?, u? -64 bit | - | -target (be) | sc, u0 sc, uc s?, u? s?, u? -32 bit | - | -target (be) | sc, uc sc, uc s?, u? s?, u? -64 bit | - | - -System emulation -s? = untested -sc = compiles -s0 = bios works -s1 = grub works -s2 = Linux boots - -Linux user mode emulation -u? = untested -uc = compiles -u0 = static hello works -u1 = linux-user-test works - -5) Todo list - -* TCI is not widely tested. It was written and tested on a x86_64 host - running i386 and x86_64 system emulation and Linux user mode. - A cross compiled QEMU for i386 host also works with the same basic tests. - A cross compiled QEMU for mipsel host works, too. It is terribly slow - because I run it in a mips malta emulation, so it is an interpreted - emulation in an emulation. - A cross compiled QEMU for arm host works (tested with pc bios). - A cross compiled QEMU for ppc host works at least partially: - i386-linux-user/qemu-i386 can run a simple hello-world program - (tested in a ppc emulation). - -* Some TCG opcodes are either missing in the code generator and/or - in the interpreter. These opcodes raise a runtime exception, so it is - possible to see where code must be added. - -* The pseudo code is not optimized and still ugly. For hosts with special - alignment requirements, it needs some fixes (maybe aligned bytecode - would also improve speed for hosts which support byte alignment). - -* A better disassembler for the pseudo code would be nice (a very primitive - disassembler is included in tcg-target.inc.c). - -* It might be useful to have a runtime option which selects the native TCG - or TCI, so QEMU would have to include two TCGs. Today, selecting TCI - is a configure option, so you need two compilations of QEMU. |