1. 01 Apr, 2016 1 commit
    • epertoso's avatar
      [ia32] Byte and word memory operands in ia32 cmp/test. · 3dd3beb0
      epertoso authored
      Currently, if the size of two cmp or test operands is a byte or a word, we sign-extend or zero-extend each of them into a 32-bit register before doing the comparison, even when the conditions for the use of a memory operand are met.
      
      This CL makes it possible to load only one of them into a register and address the other as a memory operand.
      
      The tricky bit is that, unlike as in the x64 counterpart http://crrev.com/1780193003, not all registers can be accessed as bytes.
      
      BUG=
      
      Review URL: https://codereview.chromium.org/1845603002
      
      Cr-Commit-Position: refs/heads/master@{#35199}
      3dd3beb0
  2. 21 Mar, 2016 1 commit
  3. 16 Mar, 2016 3 commits
  4. 09 Mar, 2016 1 commit
  5. 07 Mar, 2016 1 commit
    • ahaas's avatar
      [wasm] Int64Lowering of I64Shl on ia32. · ddc626e1
      ahaas authored
      I64Shl is lowered to a new turbofan operator, WasmWord64Shl. The new
      operator takes 3 inputs, the low-word input, the high-word input, and
      the shift, and produces 2 output, the low-word output and the high-word
      output.
      
      At the moment I implemented the lowering only for ia32, but I think the
      CL is already big enough. I will add the other platforms in separate
      CLs.
      
      R=titzer@chromium.org
      
      Review URL: https://codereview.chromium.org/1756863002
      
      Cr-Commit-Position: refs/heads/master@{#34546}
      ddc626e1
  6. 02 Mar, 2016 1 commit
    • rmcilroy's avatar
      [Interpreter] Log source positions for bytecode arrays. · d5820158
      rmcilroy authored
      Add support to log source position offsets to the profiler. As part of
      this change PositionsRecorder is split into two, with the subset needed
      by log.cc moved into log.h and the remainder kept in assembler.h as
      AssemblerPositionsRecorder. The interpreter's source position table
      builder is updated to log positions when the profiler is active.
      
      BUG=v8:4766
      LOG=N
      
      Review URL: https://codereview.chromium.org/1737043002
      
      Cr-Commit-Position: refs/heads/master@{#34416}
      d5820158
  7. 22 Feb, 2016 1 commit
    • epertoso's avatar
      Emit memory operands for cmp and test on ia32 and x64 when it makes sense. · 0e43ff56
      epertoso authored
      The InstructionSelector now associates an effect level to every node in a block.
      
      The effect level of a node is the number of non-eliminatable nodes encountered from the beginning of the block to the node itself.
      
      With this change, on ia32 and x64, a load from memory into a register can be replaced by a memory operand if all of the following conditions hold:
      
      1. The only use of the load is in a 32 or 64 bit word comparison.
      2. The user node and the load node belong to the same block.
      3. The values of the operands have the same size (i.e., no need to zero-extend or sign-extend the result of the load).
      
      BUG=
      
      Review URL: https://codereview.chromium.org/1706763002
      
      Cr-Commit-Position: refs/heads/master@{#34187}
      0e43ff56
  8. 17 Feb, 2016 1 commit
  9. 18 Jan, 2016 2 commits
    • ahaas's avatar
      Revert of [turbofan] Implement rounding of floats on x64 and ia32 without... · 900b2933
      ahaas authored
      Revert of [turbofan] Implement rounding of floats on x64 and ia32 without sse4.1. (patchset #2 id:20001 of https://codereview.chromium.org/1584663007/ )
      
      Reason for revert:
      Code is incorrect for -0.
      
      Original issue's description:
      > [turbofan] Implement rounding of floats on x64 and ia32 without sse4.1.
      >
      > The implementation sets the rounding mode flag and then uses the
      > cvtsd2si and cvtsi2sd instructions (convert between float and int) to do
      > the rounding. Input values outside int range either don't have to be
      > rounded anyways, or are rounded by calculating input + 2^52 - 2^52 for
      > positive inputs, or input -2^52 + 2^52 for negative inputs. The original
      > rounding mode is restored afterwards.
      >
      > R=titzer@chromium.org
      >
      > B=575379
      >
      > Committed: https://crrev.com/fa5d09e547abe79a8c82f780deb980c53ad78beb
      > Cr-Commit-Position: refs/heads/master@{#33367}
      
      TBR=titzer@chromium.org
      # Skipping CQ checks because original CL landed less than 1 days ago.
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      
      Review URL: https://codereview.chromium.org/1593313010
      
      Cr-Commit-Position: refs/heads/master@{#33369}
      900b2933
    • ahaas's avatar
      [turbofan] Implement rounding of floats on x64 and ia32 without sse4.1. · fa5d09e5
      ahaas authored
      The implementation sets the rounding mode flag and then uses the
      cvtsd2si and cvtsi2sd instructions (convert between float and int) to do
      the rounding. Input values outside int range either don't have to be
      rounded anyways, or are rounded by calculating input + 2^52 - 2^52 for
      positive inputs, or input -2^52 + 2^52 for negative inputs. The original
      rounding mode is restored afterwards.
      
      R=titzer@chromium.org
      
      B=575379
      
      Review URL: https://codereview.chromium.org/1584663007
      
      Cr-Commit-Position: refs/heads/master@{#33367}
      fa5d09e5
  10. 16 Jan, 2016 1 commit
    • ahaas's avatar
      [turbofan] Add the RoundInt32ToFloat32 operator to turbofan. · e06f7d78
      ahaas authored
      The new operator converts an int32 input to float32. If the input cannot
      be represented exactly in float32, the value is rounded using the
      round-ties-even rounding mode (the default rounding mode).
      
      I provide implementations of the new operator for x64, ia32, arm, arm64,
      mips, mips64, ppc, and ppc64.
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com, v8-mips-ports@googlegroups.com, v8-ppc-ports@googlegroups.com
      
      Review URL: https://codereview.chromium.org/1589363002
      
      Cr-Commit-Position: refs/heads/master@{#33347}
      e06f7d78
  11. 15 Jan, 2016 1 commit
  12. 02 Dec, 2015 1 commit
  13. 27 Nov, 2015 1 commit
  14. 25 Nov, 2015 1 commit
  15. 15 Oct, 2015 1 commit
  16. 07 Oct, 2015 1 commit
  17. 02 Oct, 2015 3 commits
    • danno's avatar
      Re-reland: Remove register index/code indirection · 5cf1c0bc
      danno authored
      Previous to this patch, both the lithium and TurboFan register
      allocators tracked allocated registers by "indices", rather than
      the register codes used elsewhere in the runtime. This patch
      ensures that codes are used everywhere, and in the process cleans
      up a bunch of redundant code and adds more structure to how the
      set of allocatable registers is defined.
      
      Some highlights of changes:
      
      * TurboFan's RegisterConfiguration class moved to V8's top level
        so that it can be shared with Crankshaft.
      * Various "ToAllocationIndex" and related methods removed.
      * Code that can be easily shared between Register classes on
        different platforms is now shared.
      * The list of allocatable registers on each platform is declared
        as a list rather than implicitly via the register index <->
        code mapping.
      
      Committed: https://crrev.com/80bc6f6e11f79524e3f1ad05579583adfd5f18b2
      Cr-Commit-Position: refs/heads/master@{#30913}
      
      Committed: https://crrev.com/7b7a8205d9a00c678fb7a6e032a55fecbc1509cf
      Cr-Commit-Position: refs/heads/master@{#31075}
      
      Review URL: https://codereview.chromium.org/1287383003
      
      Cr-Commit-Position: refs/heads/master@{#31087}
      5cf1c0bc
    • danno's avatar
      Revert of Reland: Remove register index/code indirection (patchset #20... · 00e07b00
      danno authored
      Revert of Reland: Remove register index/code indirection (patchset #20 id:380001 of https://codereview.chromium.org/1287383003/ )
      
      Reason for revert:
      Failures on MIPS
      
      Original issue's description:
      > Remove register index/code indirection
      >
      > Previous to this patch, both the lithium and TurboFan register
      > allocators tracked allocated registers by "indices", rather than
      > the register codes used elsewhere in the runtime. This patch
      > ensures that codes are used everywhere, and in the process cleans
      > up a bunch of redundant code and adds more structure to how the
      > set of allocatable registers is defined.
      >
      > Some highlights of changes:
      >
      > * TurboFan's RegisterConfiguration class moved to V8's top level
      >   so that it can be shared with Crankshaft.
      > * Various "ToAllocationIndex" and related methods removed.
      > * Code that can be easily shared between Register classes on
      >   different platforms is now shared.
      > * The list of allocatable registers on each platform is declared
      >   as a list rather than implicitly via the register index <->
      >   code mapping.
      >
      > Committed: https://crrev.com/80bc6f6e11f79524e3f1ad05579583adfd5f18b2
      > Cr-Commit-Position: refs/heads/master@{#30913}
      >
      > Committed: https://crrev.com/7b7a8205d9a00c678fb7a6e032a55fecbc1509cf
      > Cr-Commit-Position: refs/heads/master@{#31075}
      
      TBR=akos.palfi@imgtec.com,bmeurer@chromium.org,jarin@chromium.org,paul.lind@imgtec.com,titzer@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      
      Review URL: https://codereview.chromium.org/1380863004
      
      Cr-Commit-Position: refs/heads/master@{#31083}
      00e07b00
    • danno's avatar
      Remove register index/code indirection · 7b7a8205
      danno authored
      Previous to this patch, both the lithium and TurboFan register
      allocators tracked allocated registers by "indices", rather than
      the register codes used elsewhere in the runtime. This patch
      ensures that codes are used everywhere, and in the process cleans
      up a bunch of redundant code and adds more structure to how the
      set of allocatable registers is defined.
      
      Some highlights of changes:
      
      * TurboFan's RegisterConfiguration class moved to V8's top level
        so that it can be shared with Crankshaft.
      * Various "ToAllocationIndex" and related methods removed.
      * Code that can be easily shared between Register classes on
        different platforms is now shared.
      * The list of allocatable registers on each platform is declared
        as a list rather than implicitly via the register index <->
        code mapping.
      
      Committed: https://crrev.com/80bc6f6e11f79524e3f1ad05579583adfd5f18b2
      Cr-Commit-Position: refs/heads/master@{#30913}
      
      Review URL: https://codereview.chromium.org/1287383003
      
      Cr-Commit-Position: refs/heads/master@{#31075}
      7b7a8205
  18. 30 Sep, 2015 1 commit
  19. 24 Sep, 2015 2 commits
    • danno's avatar
      Revert of Remove register index/code indirection (patchset #17 id:320001 of... · 3ac27431
      danno authored
      Revert of Remove register index/code indirection (patchset #17 id:320001 of https://codereview.chromium.org/1287383003/ )
      
      Reason for revert:
      Failures on greedy RegAlloc, Fuzzer
      
      Original issue's description:
      > Remove register index/code indirection
      >
      > Previous to this patch, both the lithium and TurboFan register
      > allocators tracked allocated registers by "indices", rather than
      > the register codes used elsewhere in the runtime. This patch
      > ensures that codes are used everywhere, and in the process cleans
      > up a bunch of redundant code and adds more structure to how the
      > set of allocatable registers is defined.
      >
      > Some highlights of changes:
      >
      > * TurboFan's RegisterConfiguration class moved to V8's top level
      >   so that it can be shared with Crankshaft.
      > * Various "ToAllocationIndex" and related methods removed.
      > * Code that can be easily shared between Register classes on
      >   different platforms is now shared.
      > * The list of allocatable registers on each platform is declared
      >   as a list rather than implicitly via the register index <->
      >   code mapping.
      >
      > Committed: https://crrev.com/80bc6f6e11f79524e3f1ad05579583adfd5f18b2
      > Cr-Commit-Position: refs/heads/master@{#30913}
      
      TBR=akos.palfi@imgtec.com,bmeurer@chromium.org,jarin@chromium.org,paul.lind@imgtec.com,titzer@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      
      Review URL: https://codereview.chromium.org/1365073002
      
      Cr-Commit-Position: refs/heads/master@{#30914}
      3ac27431
    • danno's avatar
      Remove register index/code indirection · 80bc6f6e
      danno authored
      Previous to this patch, both the lithium and TurboFan register
      allocators tracked allocated registers by "indices", rather than
      the register codes used elsewhere in the runtime. This patch
      ensures that codes are used everywhere, and in the process cleans
      up a bunch of redundant code and adds more structure to how the
      set of allocatable registers is defined.
      
      Some highlights of changes:
      
      * TurboFan's RegisterConfiguration class moved to V8's top level
        so that it can be shared with Crankshaft.
      * Various "ToAllocationIndex" and related methods removed.
      * Code that can be easily shared between Register classes on
        different platforms is now shared.
      * The list of allocatable registers on each platform is declared
        as a list rather than implicitly via the register index <->
        code mapping.
      
      Review URL: https://codereview.chromium.org/1287383003
      
      Cr-Commit-Position: refs/heads/master@{#30913}
      80bc6f6e
  20. 08 Sep, 2015 3 commits
    • bmeurer's avatar
      [builtins] Unify the various versions of [[Call]] with a Call builtin. · ccbb4ff0
      bmeurer authored
      The new Call and CallFunction builtins supersede the current
      CallFunctionStub (and CallIC magic) and will be the single bottleneck
      for all calling, including the currently special Function.prototype.call
      and Function.prototype.apply builtins, which had handwritten (and
      not fully compliant) versions of CallFunctionStub, and also the
      CallIC(s), which where also slightly different.
      
      This also reduces the overhead for API function calls, which is still
      unnecessary high, but let's do that step-by-step.
      
      This also fixes a bunch of cases where the implicit ToObject for
      sloppy receivers was done in the wrong context (in the caller
      context instead of the callee context), which basically meant
      that we allowed cross context access to %ObjectPrototype%.
      
      MIPS and MIPS64 ports contributed by akos.palfi@imgtec.com.
      
      R=mstarzinger@chromium.org, jarin@chromium.org, mvstanton@chromium.org
      CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_layout_dbg,v8_linux_nosnap_dbg
      BUG=v8:4413
      LOG=n
      
      Committed: https://crrev.com/ef268a83be4dead004047c25b702319ea4be7277
      Cr-Commit-Position: refs/heads/master@{#30627}
      
      Review URL: https://codereview.chromium.org/1311013008
      
      Cr-Commit-Position: refs/heads/master@{#30629}
      ccbb4ff0
    • bmeurer's avatar
      Revert of [builtins] Unify the various versions of [[Call]] with a Call... · 298d4a6b
      bmeurer authored
      Revert of [builtins] Unify the various versions of [[Call]] with a Call builtin. (patchset #10 id:260001 of https://codereview.chromium.org/1311013008/ )
      
      Reason for revert:
      Breaks nosnap, needs investigation
      
      Original issue's description:
      > [builtins] Unify the various versions of [[Call]] with a Call builtin.
      >
      > The new Call and CallFunction builtins supersede the current
      > CallFunctionStub (and CallIC magic) and will be the single bottleneck
      > for all calling, including the currently special Function.prototype.call
      > and Function.prototype.apply builtins, which had handwritten (and
      > not fully compliant) versions of CallFunctionStub, and also the
      > CallIC(s), which where also slightly different.
      >
      > This also reduces the overhead for API function calls, which is still
      > unnecessary high, but let's do that step-by-step.
      >
      > This also fixes a bunch of cases where the implicit ToObject for
      > sloppy receivers was done in the wrong context (in the caller
      > context instead of the callee context), which basically meant
      > that we allowed cross context access to %ObjectPrototype%.
      >
      > MIPS and MIPS64 ports contributed by akos.palfi@imgtec.com.
      >
      > R=mstarzinger@chromium.org, jarin@chromium.org, mvstanton@chromium.org
      > CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_layout_dbg
      > BUG=v8:4413
      > LOG=n
      >
      > Committed: https://crrev.com/ef268a83be4dead004047c25b702319ea4be7277
      > Cr-Commit-Position: refs/heads/master@{#30627}
      
      TBR=rmcilroy@chromium.org,jarin@chromium.org,mstarzinger@chromium.org,mvstanton@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      BUG=v8:4413
      
      Review URL: https://codereview.chromium.org/1328963004
      
      Cr-Commit-Position: refs/heads/master@{#30628}
      298d4a6b
    • bmeurer's avatar
      [builtins] Unify the various versions of [[Call]] with a Call builtin. · ef268a83
      bmeurer authored
      The new Call and CallFunction builtins supersede the current
      CallFunctionStub (and CallIC magic) and will be the single bottleneck
      for all calling, including the currently special Function.prototype.call
      and Function.prototype.apply builtins, which had handwritten (and
      not fully compliant) versions of CallFunctionStub, and also the
      CallIC(s), which where also slightly different.
      
      This also reduces the overhead for API function calls, which is still
      unnecessary high, but let's do that step-by-step.
      
      This also fixes a bunch of cases where the implicit ToObject for
      sloppy receivers was done in the wrong context (in the caller
      context instead of the callee context), which basically meant
      that we allowed cross context access to %ObjectPrototype%.
      
      MIPS and MIPS64 ports contributed by akos.palfi@imgtec.com.
      
      R=mstarzinger@chromium.org, jarin@chromium.org, mvstanton@chromium.org
      CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_layout_dbg
      BUG=v8:4413
      LOG=n
      
      Review URL: https://codereview.chromium.org/1311013008
      
      Cr-Commit-Position: refs/heads/master@{#30627}
      ef268a83
  21. 12 Aug, 2015 1 commit
    • jfb's avatar
      Security: disable nontemporals. · a904b569
      jfb authored
      The operations were available on ARM64 and x86-32 but were unused.
      
      It has been conjectured that nontemporals can be used for rowhammer-like bitflips more easily than regular load/store operations. It is therefore desirable to avoid generating these instructions in the future.
      
      R= titzer, jochen, jln, Mark Seaborn, ruiq
      
      Review URL: https://codereview.chromium.org/1276113002
      
      Cr-Commit-Position: refs/heads/master@{#30139}
      a904b569
  22. 15 Jul, 2015 1 commit
  23. 14 Jul, 2015 1 commit
  24. 10 Jul, 2015 1 commit
    • yangguo's avatar
      Debugger: use debug break slot to break on call. · 8965b683
      yangguo authored
      Break point at calls are currently set via IC. To change this, we
      need to set debug break slots instead. We also need to distinguish
      those debug break slots as calls to support step-in.
      
      To implement this, we add a data field to debug break reloc info to
      indicate non-call debug breaks or in case of call debug breaks, the
      number of arguments. We can later use this to find the callee on the
      evaluation stack in Debug::PrepareStep.
      
      BUG=v8:4269
      R=ulan@chromium.org
      LOG=N
      
      Review URL: https://codereview.chromium.org/1222093007
      
      Cr-Commit-Position: refs/heads/master@{#29561}
      8965b683
  25. 09 Jun, 2015 1 commit
    • mbrandy's avatar
      Fix issues with Arm's use of embedded constant pools · e3d76269
      mbrandy authored
      - Introduce Assembler::DataAlign for table alignment in code object
      - Fix several misuses of r8 (alias of the pool pointer register, pp)
      - Fix calculation of pp in OSR/handler entry invocation
      - Enable missing cases in deserializer
      - Fix references to ool constant pools in comments.
      
      R=rmcilroy@chromium.org, michael_dawson@ca.ibm.com
      BUG=chromium:497180
      LOG=N
      
      Review URL: https://codereview.chromium.org/1155673005
      
      Cr-Commit-Position: refs/heads/master@{#28873}
      e3d76269
  26. 04 Jun, 2015 1 commit
    • mbrandy's avatar
      Add support for Embedded Constant Pools for PPC and Arm · eac7f046
      mbrandy authored
      Embed constant pools within their corresponding Code
      objects.
      
      This removes support for out-of-line constant pools in favor
      of the new approach -- the main advantage being that it
      eliminates the need to allocate and manage separate constant
      pool array objects.
      
      Currently supported on PPC and ARM.  Enabled by default on
      PPC only.
      
      This yields a 6% improvment in Octane on PPC64.
      
      R=bmeurer@chromium.org, rmcilroy@chromium.org, michael_dawson@ca.ibm.com
      BUG=chromium:478811
      LOG=Y
      
      Review URL: https://codereview.chromium.org/1162993006
      
      Cr-Commit-Position: refs/heads/master@{#28801}
      eac7f046
  27. 03 Jun, 2015 1 commit
  28. 02 Jun, 2015 1 commit
    • mbrandy's avatar
      Add support for Embedded Constant Pools for PPC and Arm · a9404029
      mbrandy authored
      Embed constant pools within their corresponding Code
      objects.
      
      This removes support for out-of-line constant pools in favor
      of the new approach -- the main advantage being that it
      eliminates the need to allocate and manage separate constant
      pool array objects.
      
      Currently supported on PPC and ARM.  Enabled by default on
      PPC only.
      
      This yields a 6% improvment in Octane on PPC64.
      
      R=danno@chromium.org, svenpanne@chromium.org, bmeurer@chromium.org, rmcilroy@chromium.org, dstence@us.ibm.com, michael_dawson@ca.ibm.com
      BUG=chromium:478811
      LOG=Y
      
      Review URL: https://codereview.chromium.org/1131783003
      
      Cr-Commit-Position: refs/heads/master@{#28770}
      a9404029
  29. 11 Apr, 2015 1 commit
  30. 09 Apr, 2015 1 commit
  31. 30 Mar, 2015 1 commit
    • bmeurer's avatar
      [turbofan] Add backend support for float32 operations. · 8dad78cd
      bmeurer authored
      This adds the basics necessary to support float32 operations in TurboFan.
      The actual functionality required to detect safe float32 operations will
      be added based on this later. Therefore this does not affect production
      code except for some cleanup/refactoring.
      
      In detail, this patchset contains the following features:
      - Add support for float32 operations to arm, arm64, ia32 and x64
        backends.
      - Add float32 machine operators.
      - Add support for float32 constants to simplified lowering.
      - Handle float32 representation for phis in simplified lowering.
      
      In addition, contains the following (related) cleanups:
      - Fix/unify naming of backend instructions.
      - Use AVX comparisons when available.
      - Extend ArchOpcodeField to 9 bits (required for arm64).
      - Refactor some code duplication in instruction selectors.
      
      BUG=v8:3589
      LOG=n
      R=dcarney@chromium.org
      
      Review URL: https://codereview.chromium.org/1044793002
      
      Cr-Commit-Position: refs/heads/master@{#27509}
      8dad78cd
  32. 27 Mar, 2015 1 commit