1. 15 11月, 2011 1 次提交
  2. 01 10月, 2011 1 次提交
  3. 22 8月, 2011 1 次提交
  4. 02 4月, 2010 1 次提交
    • A
      tcg: initial ia64 support · 477ba620
      Aurelien Jarno 提交于
      A few words about design choices:
      * On IA64, instructions should be grouped by bundle, and dependencies
        between instructions declared. A first version of this code tried to
        schedule instructions automatically, but was very complex and too
        invasive for the current common TCG code (ops not ending at
        instruction boundaries, code retranslation breaking already generated
        code, etc.)  It was also not very efficient, as dependencies between
        TCG ops is not available.
        Instead the option taken by the current implementation does not try
        to fill the bundle by scheduling instructions, but by providing ops
        not available as an ia64 instruction, and by offering 22-bit constant
        loading for most of the instructions. With both options the bundle are
        filled at approximately the same level.
      
      * Up to 128 registers can be affected to a function on IA64, but TCG
        limits this number to 64, which is actually more than enough. The
        register affectation is the following:
        - r0: used to map a constant argument with value 0
        - r1: global pointer
        - r2, r3: internal use
        - r4 to r6: not used to avoid saving them
        - r7: env structure
        - r8 to r11: free for TCG (call clobbered)
        - r12: stack pointer
        - r13: thread pointer
        - r14 to r31: free for TCG (call clobbered)
        - r32: reserved (return address)
        - r33: reserved (PFS)
        - r33 to r63: free for TCG
      
      * The IA64 architecture has only 64-bit registers and no 32-bit
        instructions (the only exception being cmp4). Therefore 64-bit
        registers and instructions are used for 32-bit ops. The adopted
        strategy is the same as the ABI, that is the higher 32 bits are
        undefined. Most ops (and, or, add, shl, etc.) can directly use
        the 64-bit registers, while some others have to sign-extend (sar,
        div, etc.) or zero-extend (shr, divu, etc.) the register first.
      Signed-off-by: NAurelien Jarno <aurelien@aurel32.net>
      477ba620