Skip to content
  1. Jan 07, 2014
  2. Dec 19, 2013
  3. Oct 15, 2013
  4. Oct 07, 2013
    • Akira Hatanaka's avatar
      [mips] Fix definition of mfhi and mflo instructions to read from the whole · 16048332
      Akira Hatanaka authored
      accumulator instead of its sub-registers, $hi and $lo. 
      
      We need this change to prevent a mflo following a mtlo from reading an
      unpredictable/undefined value, as shown in the following example:
      
      mult $6, $7 // result of $6 * $7 is written to $lo and $hi.
      mflo $2     // read lower 32-bit result from $lo.
      mtlo $4     // write to $lo. the content of $hi becomes unpredictable.
      mfhi $3     // read higher 32-bit from $hi, which has an unpredictable value.
      
      I don't have a test case for this change that reliably reproduces the problem.
      
      llvm-svn: 192119
      16048332
  5. Sep 28, 2013
    • Akira Hatanaka's avatar
      [mips] Make sure loads from lazy-binding entries do not get CSE'd or hoisted out · af4211ad
      Akira Hatanaka authored
      of loops.
      
      Previously, two consecutive calls to function "func" would result in the
      following sequence of instructions:
      
      1. load $16, %got(func)($gp) // load address of lazy-binding stub.
      2. move $25, $16
      3. jalr $25                  // jump to lazy-binding stub.
      4. nop
      5. move $25, $16
      6. jalr $25                  // jump to lazy-binding stub again.
      
      With this patch, the second call directly jumps to func's address, bypassing
      the lazy-binding resolution routine:
      
      1. load $25, %got(func)($gp) // load address of lazy-binding stub.
      2. jalr $25                  // jump to lazy-binding stub.
      3. nop
      4. load $25, %got(func)($gp) // load resolved address of func.
      5. jalr $25                  // directly jump to func.
      
      llvm-svn: 191591
      af4211ad
  6. Sep 27, 2013
  7. Sep 25, 2013
  8. Sep 24, 2013
  9. Sep 23, 2013
  10. Sep 07, 2013
    • Akira Hatanaka's avatar
      [mips] Enhance command line option "-mno-ldc1-sdc1" to expand base+index double · 63791216
      Akira Hatanaka authored
      precision loads and stores as well as reg+imm double precision loads and stores.
      
      Previously, expansion of loads and stores was done after register allocation,
      but now it takes place during legalization. As a result, users will see double
      precision stores and loads being emitted to spill and restore 64-bit FP registers.
      
      llvm-svn: 190235
      63791216
  11. Aug 28, 2013
    • Daniel Sanders's avatar
      [mips][msa] Added bnz.df, bnz.v, bz.df, and bz.v · ce09d078
      Daniel Sanders authored
      These intrinsics are legalized to V(ALL|ANY)_(NON)?ZERO nodes,
      are matched as SN?Z_[BHWDV]_PSEUDO pseudo's, and emitted as
      a branch/mov sequence to evaluate to 0 or 1.
      
      Note: The resulting code is sub-optimal since it doesnt seem to be possible
      to feed the result of an intrinsic directly into a brcond. At the moment
      it uses (SETCC (VALL_ZERO $ws), 0, SETEQ) and similar which unnecessarily
      evaluates the boolean twice.
      
      llvm-svn: 189478
      ce09d078
  12. Aug 21, 2013
  13. Aug 14, 2013
  14. Jul 14, 2013
  15. Jul 03, 2013
  16. Jun 22, 2013
  17. May 25, 2013
  18. May 18, 2013
  19. May 16, 2013
  20. May 11, 2013
    • Reed Kotler's avatar
      Checkin in of first of several patches to finish implementation of · 783c7944
      Reed Kotler authored
      mips16/mips32 floating point interoperability. 
      
      This patch fixes returns from mips16 functions so that if the function
      was in fact called by a mips32 hard float routine, then values
      that would have been returned in floating point registers are so returned.
      
      Mips16 mode has no floating point instructions so there is no way to
      load values into floating point registers.
      
      This is needed when returning float, double, single complex, double complex
      in the Mips ABI.
      
      Helper functions in libc for mips16 are available to do this.
      
      For efficiency purposes, these helper functions have a different calling
      convention from normal Mips calls.
      
      Registers v0,v1,a0,a1 are used to pass parameters instead of
      a0,a1,a2,a3.
      
      This is because v0,v1,a0,a1 are the natural registers used to return
      floating point values in soft float. These values can then be moved
      to the appropriate floating point registers with no extra cost.
      
      The only register that is modified is ra in this call.
      
      The helper functions make sure that the return values are in the floating
      point registers that they would be in if soft float was not in effect
      (which it is for mips16, though the soft float is implemented using a mips32
      library that uses hard float).
       
      
      llvm-svn: 181641
      783c7944
  21. May 01, 2013
  22. Apr 20, 2013
  23. Apr 13, 2013
  24. Mar 30, 2013
  25. Mar 13, 2013
  26. Mar 12, 2013
  27. Mar 06, 2013
  28. Mar 05, 2013
Loading