1. 22 Sep, 2016 1 commit
  2. 14 Sep, 2016 1 commit
  3. 07 Sep, 2016 1 commit
  4. 12 Aug, 2016 2 commits
  5. 08 Aug, 2016 1 commit
  6. 05 Aug, 2016 2 commits
  7. 22 Jul, 2016 1 commit
    • bmeurer's avatar
      [turbofan] Change Float64Max/Float64Min to JavaScript semantics. · ba092fb0
      bmeurer authored
      So far we don't have a useful way to inline Math.max or Math.min in
      TurboFan optimized code. This adds new operators NumberMax and NumberMin
      and changes the Float64Max/Float64Min operators to have JavaScript
      semantics instead of the C++ semantics that it had previously.
      
      This also removes support for recognizing the tenary case in the
      CommonOperatorReducer, since that doesn't seem to have any positive
      impact (and actually doesn't show up in regular JavaScript, where
      people use Math.max/Math.min instead).
      
      Drive-by-fix: Also nuke the unused Float32Max/Float32Min operators.
      
      R=jarin@chromium.org
      
      Review-Url: https://codereview.chromium.org/2170343002
      Cr-Commit-Position: refs/heads/master@{#37971}
      ba092fb0
  8. 29 Jun, 2016 1 commit
    • georgia.kouveli's avatar
      [arm64] Generate adds/ands. · 317dc057
      georgia.kouveli authored
      Perform the following transformation:
      
          | Before           | After               |
          |------------------+---------------------|
          | add w2, w0, w1   | adds w2, w0, w1     |
          | cmp w2, #0x0     | b.<cond'> <addr>    |
          | b.<cond> <addr>  |                     |
          |------------------+---------------------|
          | add w2, w0, w1   | adds w2, w0, w1     |
          | cmp #0x0, w2     | b.<cond'> <addr>    |
          | b.<cond> <addr>  |                     |
      
      and the same for and instructions instead of add.  When the result of the
      add/and is not used, generate cmn/tst instead. We need to take care with which
      conditions we can handle and what new condition we map them to.
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/2065243005
      Cr-Commit-Position: refs/heads/master@{#37400}
      317dc057
  9. 23 Jun, 2016 1 commit
  10. 01 Jun, 2016 1 commit
    • pierre.langlois's avatar
      [turbofan] ARM64: Match 64 bit compare with zero and branch · 27bd1747
      pierre.langlois authored
      This patch enables the following transformations in the instruction
      selector:
      
      | Before           | After                  |
      |------------------+------------------------|
      | and x3, x1, #0x1 | tb{,n}z w1, #0, #+0x78 |
      | cmp x3, #0x0     |                        |
      | b.{eq,ne} #+0x80 |                        |
      |------------------+------------------------|
      | cmp x0, #0x0     | cb{,n}z x0, #+0x48     |
      | b.{eq,ne} #+0x4c |                        |
      
      I have not seen these patterns beeing generated by turbofan, however the
      stubs hit these cases frequently. A particular reason is that we are
      turning operations that check for a Smi into a single `tbz`.
      
      As a concequence, the interpreter is affected thanks to inlining
      turbofan stubs into it's bytecode handlers. I have noticed the size of
      the interpreter was reduced by 200 instructions.
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/2022073002
      Cr-Commit-Position: refs/heads/master@{#36632}
      27bd1747
  11. 27 May, 2016 1 commit
  12. 13 May, 2016 1 commit
    • pierre.langlois's avatar
      [turbofan] ARM64: Support shifted indexes in loads and stores · 60fb6ea1
      pierre.langlois authored
      This patch adds support for the `Operand2_R_LSL_I` addressing mode to
      loads and stores. This allows merging a shift instruction into a
      MemoryOperand. Since the shift immediate is restricted to the log2 of
      the operation width, the opportunities to hit this are slim. However,
      Ignition's bytecode handlers hit this case all the time:
      
      kind = BYTECODE_HANDLER
      name = Star
      compiler = turbofan
      Instructions (size = 44)
      0x23e67280     0  add x1, x19, #0x1 (1)
      0x23e67284     4  ldrsb x1, [x20, x1]
      0x23e67288     8  sxtw x1, w1
      0x23e6728c    12  mov x2, fp
      0x23e67290    16  str x0, [x2, x1, lsl #3]
                        ^^^^^^^^^^^^^^^^^^^^^
      0x23e67294    20  add x19, x19, #0x2 (2)
      0x23e67298    24  ldrb w1, [x20, x19]
      0x23e6729c    28  ldr x1, [x21, x1, lsl #3]
                        ^^^^^^^^^^^^^^^^^^^^^
      0x23e672a0    32  br x1
      
      Additionally, I noticed the optimisation occurs once in both the
      `StringPrototypeCharAt` and `StringPrototypeCharCodeAt` turbofan stubs.
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/1972103002
      Cr-Commit-Position: refs/heads/master@{#36227}
      60fb6ea1
  13. 04 May, 2016 2 commits
    • pierre.langlois's avatar
      ARM64: [turbofan] Avoid zero-extension after a 32-bit load · f07d2cdd
      pierre.langlois authored
      A load instruction will implicitely clear the top 32 bits when writing to a W
      register. This patch avoids generating a `mov` instruction to zero-extend the
      result in this case.
      
      For example, this occurs in the generated code for dispatching to the next
      bytecode in the interpreter:
      
        kind = BYTECODE_HANDLER
        name = LdaZero
        compiler = turbofan
        Instructions (size = 36)
        0x32e64c60     0  add x19, x19, #0x1 (1)
        0x32e64c64     4  ldrb w0, [x20, x19]
        0x32e64c68     8  mov w0, w0
                          ^^^^^^^^^^
        0x32e64c6c    12  lsl x0, x0, #3
        0x32e64c70    16  ldr x1, [x21, x0]
        0x32e64c74    20  movz x0, #0x0
        0x32e64c78    24  br x1
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/1950013003
      Cr-Commit-Position: refs/heads/master@{#36038}
      f07d2cdd
    • martyn.capewell's avatar
      [turbofan] ARM64: Use zr to store immediate zero · 0322c20d
      martyn.capewell authored
      When storing an immediate integer or floating point zero, use the zero register
      as the source value. This avoids the need to sometimes allocate a new register.
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/1945783002
      Cr-Commit-Position: refs/heads/master@{#36013}
      0322c20d
  14. 11 Dec, 2015 1 commit
  15. 10 Dec, 2015 1 commit
    • jarin's avatar
      [turbofan] Make MachineType a pair of enums. · bb2a830d
      jarin authored
      MachineType is now a class with two enum fields:
      - MachineRepresentation
      - MachineSemantic
      
      Both enums are usable on their own, and this change switches some places from using MachineType to use just MachineRepresentation. Most notably:
      - register allocator now uses just the representation.
      - Phi and Select nodes only refer to representations.
      
      Review URL: https://codereview.chromium.org/1513543003
      
      Cr-Commit-Position: refs/heads/master@{#32738}
      bb2a830d
  16. 30 Nov, 2015 1 commit
  17. 07 Nov, 2015 1 commit
  18. 29 Oct, 2015 1 commit
  19. 28 Oct, 2015 1 commit
  20. 26 Oct, 2015 1 commit
    • rmcilroy's avatar
      [Interpreter] Add support for loading from / storing to outer context variables. · c0c214da
      rmcilroy authored
      Adds support for loading from and storing to outer context
      variables. Also adds support for declaring functions on contexts and
      locals. Finally, fixes a couple of issues with StaContextSlot where
      we weren't emitting the write barrier and therefore would crash in the
      GC.
      
      Also added code so that --print-bytecode will output the
      function name before the bytecodes, and replaces MachineType with StoreRepresentation in RawMachineAssembler::Store and updates tests.
      
      BUG=v8:4280
      LOG=N
      
      Review URL: https://codereview.chromium.org/1425633002
      
      Cr-Commit-Position: refs/heads/master@{#31584}
      c0c214da
  21. 14 Oct, 2015 1 commit
  22. 24 Sep, 2015 1 commit
  23. 23 Sep, 2015 1 commit
    • pierre.langlois's avatar
      [arm64] Optimize fcmp when lhs operand is #0.0 · e28ae8ca
      pierre.langlois authored
      This patch checks the type of the lhs operand of a floating point
      comparison, and commutes the operands if it is #0.0.  It allows us to
      optimize a comparison with zero, as the fcmp instruction accepts #0.0 as
      rhs operand.
      
      Code before for "0.0 < 0.123":
      ------------------------------
      fmov d1, xzr
      ldr d0, pc+96
      fcmp d1, d0
      b.lo #+0xc
      
      Code after:
      -----------
      ldr d0, pc+92
      fcmp d0, #0.0
      b.gt #+0xc
      
      Before this patch, we used unsigned condition codes for floating point
      comparisons, but the unordered case was not correctly commuted.
      
      Review URL: https://codereview.chromium.org/1356283003
      
      Cr-Commit-Position: refs/heads/master@{#30881}
      e28ae8ca
  24. 31 Jul, 2015 1 commit
  25. 02 Jul, 2015 1 commit
  26. 30 Jun, 2015 1 commit
  27. 12 Jun, 2015 2 commits
  28. 11 Jun, 2015 3 commits
  29. 02 Jun, 2015 1 commit
  30. 15 May, 2015 1 commit
  31. 08 May, 2015 1 commit
  32. 08 Apr, 2015 1 commit
  33. 07 Apr, 2015 2 commits