Home | History | Annotate | only in /art/compiler/dex/quick/mips
Up to higher level directory
NameDateSize
assemble_mips.cc03-Dec-201435.1K
call_mips.cc03-Dec-201413K
codegen_mips.h03-Dec-201410.1K
fp_mips.cc03-Dec-20147.4K
int_mips.cc03-Dec-201420.4K
mips_lir.h03-Dec-201423.7K
README.mips03-Dec-20142.8K
target_mips.cc03-Dec-201418.6K
utility_mips.cc03-Dec-201419.3K

README.mips

      1                Notes on the Mips target (3/4/2012)
      2                -----------------------------------
      3 
      4 Testing
      5 
      6 The initial implementation of Mips support in the compiler is untested on
      7 actual hardware, and as such should be expected to have many bugs.  However,
      8 the vast majority of code for Mips support is either shared with other
      9 tested targets, or was taken from the functional Mips JIT compiler.  The
     10 expectation is that when it is first tried out on actual hardware lots of
     11 small bugs will be flushed out, but it should not take long to get it
     12 solidly running.  The following areas are considered most likely to have
     13 problems that need to be addressed:
     14 
     15     o Endianness.  Focus was on little-endian support, and if a big-endian
     16       target is desired, you should pay particular attention to the
     17       code generation for switch tables, fill array data, 64-bit
     18       data handling and the register usage conventions.
     19 
     20     o The memory model.  Verify that GenMemoryBarrier() generates the
     21       appropriate flavor of sync.
     22 
     23 Register promotion
     24 
     25 The resource masks in the LIR structure are 64-bits wide, which is enough
     26 room to fully describe def/use info for Arm and x86 instructions.  However,
     27 the larger number of MIPS core and float registers render this too small.
     28 Currently, the workaround for this limitation is to avoid using floating
     29 point registers 16-31.  These are the callee-save registers, which therefore
     30 means that no floating point promotion is allowed.  Among the solution are:
     31      o Expand the def/use mask (which, unfortunately, is a significant change)
     32      o The Arm target uses 52 of the 64 bits, so we could support float
     33        registers 16-27 without much effort.
     34      o We could likely assign the 4 non-register bits (kDalvikReg, kLiteral,
     35        kHeapRef & kMustNotAlias) to positions occuped by MIPS registers that
     36        don't need def/use bits because they are never modified by code
     37        subject to scheduling: r_K0, r_K1, r_SP, r_ZERO, r_S1 (rSELF).
     38 
     39 Branch delay slots
     40 
     41 Little to no attempt was made to fill branch delay slots.  Branch
     42 instructions in the encoding map are given a length of 8 bytes to include
     43 an implicit NOP.  It should not be too difficult to provide a slot-filling
     44 pass following successful assembly, but thought should be given to the
     45 design.  Branches are currently treated as scheduling barriers.  One
     46 simple solution would be to copy the instruction at branch targets to the
     47 slot and adjust the displacement.  However, given that code expansion is
     48 already a problem it would be preferable to use a more sophisticated
     49 scheduling solution.
     50 
     51 Code expansion
     52 
     53 Code expansion for the MIPS target is significantly higher than we see
     54 for Arm and x86.  It might make sense to replace the inline code generation
     55 for some of the more verbose Dalik byte codes with subroutine calls to
     56 shared helper functions.
     57 
     58