Annotation of qemu/tcg/tci/README, revision 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.