Annotation of qemu/tcg/tci/README, revision 1.1.1.1

1.1       root        1: TCG Interpreter (TCI) - Copyright (c) 2011 Stefan Weil.
                      2: 
                      3: This file is released under the BSD license.
                      4: 
                      5: 1) Introduction
                      6: 
                      7: TCG (Tiny Code Generator) is a code generator which translates
                      8: code fragments ("basic blocks") from target code (any of the
                      9: targets supported by QEMU) to a code representation which
                     10: can be run on a host.
                     11: 
                     12: QEMU can create native code for some hosts (arm, hppa, i386, ia64, ppc, ppc64,
                     13: s390, sparc, x86_64). For others, unofficial host support was written.
                     14: 
                     15: By adding a code generator for a virtual machine and using an
                     16: interpreter for the generated bytecode, it is possible to
                     17: support (almost) any host.
                     18: 
                     19: This is what TCI (Tiny Code Interpreter) does.
                     20: 
                     21: 2) Implementation
                     22: 
                     23: Like each TCG host frontend, TCI implements the code generator in
                     24: tcg-target.c, tcg-target.h. Both files are in directory tcg/tci.
                     25: 
                     26: The additional file tcg/tci.c adds the interpreter.
                     27: 
                     28: The bytecode consists of opcodes (same numeric values as those used by
                     29: TCG), command length and arguments of variable size and number.
                     30: 
                     31: 3) Usage
                     32: 
                     33: For hosts without native TCG, the interpreter TCI must be enabled by
                     34: 
                     35:         configure --enable-tcg-interpreter
                     36: 
                     37: If configure is called without --enable-tcg-interpreter, it will
                     38: suggest using this option. Setting it automatically would need
                     39: additional code in configure which must be fixed when new native TCG
                     40: implementations are added.
                     41: 
                     42: System emulation should work on any 32 or 64 bit host.
                     43: User mode emulation might work. Maybe a new linker script (*.ld)
                     44: is needed. Byte order might be wrong (on big endian hosts)
                     45: and need fixes in configure.
                     46: 
                     47: For hosts with native TCG, the interpreter TCI can be enabled by
                     48: 
                     49:         configure --enable-tcg-interpreter
                     50: 
                     51: The only difference from running QEMU with TCI to running without TCI
                     52: should be speed. Especially during development of TCI, it was very
                     53: useful to compare runs with and without TCI. Create /tmp/qemu.log by
                     54: 
                     55:         qemu-system-i386 -d in_asm,op_opt,cpu -singlestep
                     56: 
                     57: once with interpreter and once without interpreter and compare the resulting
                     58: qemu.log files. This is also useful to see the effects of additional
                     59: registers or additional opcodes (it is easy to modify the virtual machine).
                     60: It can also be used to verify native TCGs.
                     61: 
                     62: Hosts with native TCG can also enable TCI by claiming to be unsupported:
                     63: 
                     64:         configure --cpu=unknown --enable-tcg-interpreter
                     65: 
                     66: configure then no longer uses the native linker script (*.ld) for
                     67: user mode emulation.
                     68: 
                     69: 
                     70: 4) Status
                     71: 
                     72: TCI needs special implementation for 32 and 64 bit host, 32 and 64 bit target,
                     73: host and target with same or different endianness.
                     74: 
                     75:             | host (le)                     host (be)
                     76:             | 32             64             32             64
                     77: ------------+------------------------------------------------------------
                     78: target (le) | s0, u0         s1, u1         s?, u?         s?, u?
                     79: 32 bit      |
                     80:             |
                     81: target (le) | sc, uc         s1, u1         s?, u?         s?, u?
                     82: 64 bit      |
                     83:             |
                     84: target (be) | sc, u0         sc, uc         s?, u?         s?, u?
                     85: 32 bit      |
                     86:             |
                     87: target (be) | sc, uc         sc, uc         s?, u?         s?, u?
                     88: 64 bit      |
                     89:             |
                     90: 
                     91: System emulation
                     92: s? = untested
                     93: sc = compiles
                     94: s0 = bios works
                     95: s1 = grub works
                     96: s2 = Linux boots
                     97: 
                     98: Linux user mode emulation
                     99: u? = untested
                    100: uc = compiles
                    101: u0 = static hello works
                    102: u1 = linux-user-test works
                    103: 
                    104: 5) Todo list
                    105: 
                    106: * TCI is not widely tested. It was written and tested on a x86_64 host
                    107:   running i386 and x86_64 system emulation and Linux user mode.
                    108:   A cross compiled QEMU for i386 host also works with the same basic tests.
                    109:   A cross compiled QEMU for mipsel host works, too. It is terribly slow
                    110:   because I run it in a mips malta emulation, so it is an interpreted
                    111:   emulation in an emulation.
                    112:   A cross compiled QEMU for arm host works (tested with pc bios).
                    113:   A cross compiled QEMU for ppc host works at least partially:
                    114:   i386-linux-user/qemu-i386 can run a simple hello-world program
                    115:   (tested in a ppc emulation).
                    116: 
                    117: * Some TCG opcodes are either missing in the code generator and/or
                    118:   in the interpreter. These opcodes raise a runtime exception, so it is
                    119:   possible to see where code must be added.
                    120: 
                    121: * The pseudo code is not optimized and still ugly. For hosts with special
                    122:   alignment requirements, it needs some fixes (maybe aligned bytecode
                    123:   would also improve speed for hosts which support byte alignment).
                    124: 
                    125: * A better disassembler for the pseudo code would be nice (a very primitive
                    126:   disassembler is included in tcg-target.c).
                    127: 
                    128: * It might be useful to have a runtime option which selects the native TCG
                    129:   or TCI, so QEMU would have to include two TCGs. Today, selecting TCI
                    130:   is a configure option, so you need two compilations of QEMU.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.