1. 18 May, 2017 1 commit
    • bmeurer's avatar
      [turbofan] Avoid allocating rest parameters for spread calls. · bfa319e5
      bmeurer authored
      We already had an optimization to turn Function.prototype.apply with
      arguments object, i.e.
      
        function foo() { return bar.apply(this, arguments); }
      
      into a special operator JSCallForwardVarargs, which avoids the
      allocation and deconstruction of the arguments object, but just passes
      along the incoming parameters. We can do the same for rest parameters
      and spread calls/constructs, i.e.
      
        class A extends B {
          constructor(...args) { super(...args); }
        }
      
      or
      
        function foo(...args) { return bar(1, 2, 3, ...args); }
      
      where we basically pass along the parameters (plus maybe additional
      statically known parameters).
      
      For this, we introduce a new JSConstructForwardVarargs operator and
      generalize the CallForwardVarargs builtins that are backing this.
      
      BUG=v8:6407,v8:6278,v8:6344
      R=jarin@chromium.org
      
      Review-Url: https://codereview.chromium.org/2890023004
      Cr-Commit-Position: refs/heads/master@{#45388}
      bfa319e5
  2. 16 May, 2017 1 commit
  3. 15 May, 2017 1 commit
  4. 04 May, 2017 1 commit
  5. 02 May, 2017 1 commit
    • neis's avatar
      [simulator] Make reference redirection thread-safe. · 34e79456
      neis authored
      In the simulators, the ExternalReference constructor rewrites external
      addresses, which involves mutating a linked list rooted in the isolate.
      
      We already construct external references concurrently (at least in Turbofan),
      but the list mutation was not thread-safe (though no crashes are known). This
      CL adds the necessary locking.
      
      BUG=v8:6048
      
      Review-Url: https://codereview.chromium.org/2852983002
      Cr-Commit-Position: refs/heads/master@{#45014}
      34e79456
  6. 28 Apr, 2017 1 commit
  7. 25 Apr, 2017 2 commits
    • bmeurer's avatar
      [stubs] Drop CallApiCallbackStub::call_data_undefined optimization. · 46d0e481
      bmeurer authored
      The CallApiCallbackStub can avoid loading undefined in case the
      call_data is already undefined, which doubles the number of versions of
      the stub and adds unnecessary complexity (at the benefit of saving one
      stupid load). The idea is to turn the CallApiCallbackStub into a single
      builtin instead, which does the right thing, so this is the first step
      towards that goal.
      
      R=yangguo@chromium.org
      BUG=v8:6304
      
      Review-Url: https://codereview.chromium.org/2838143003
      Cr-Commit-Position: refs/heads/master@{#44869}
      46d0e481
    • ulan's avatar
      Add a host parameter to ObjectVisitor methods. · c59f78f6
      ulan authored
      This makes an ObjectVisitor as powerful as a StaticVisitor and allows
      slots recording in ObjectVisitor.
      
      This patch also renames VisitCell method of ObjectVisitor to
      VisitCellPointer, so that VisitCell is free to be used for actually
      visiting a cell.
      
      BUG=chromium:709075
      
      Review-Url: https://codereview.chromium.org/2810653002
      Cr-Commit-Position: refs/heads/master@{#44860}
      c59f78f6
  8. 24 Apr, 2017 3 commits
  9. 21 Apr, 2017 5 commits
  10. 19 Apr, 2017 2 commits
    • bbudge's avatar
      [WASM SIMD] Implement primitive shuffles. · 5806d862
      bbudge authored
      - Adds unary Reverse shuffles (swizzles): S32x2Reverse, S16x4Reverse,
        S16x2Reverse, S8x8Reverse, S8x4Reverse, S8x2Reverse. Reversals are
        done within the sub-vectors that prefix the opcode name, e.g. S8x2
        reverses the 8 consecutive pairs in an S8x16 vector.
      
      - Adds binary Zip (interleave) left and right half-shuffles to return a
        single vector: S32x4ZipLeft, S32x4ZipRightS16x8ZipLeft, S16x8ZipRight,
        S8x16ZipLeft, S8x16ZipRight.
      
      - Adds binary Unzip (de-interleave) left and right half shuffles to return
        a single vector: S32x4UnzipLeft, S32x4UnzipRight, S16x8UnzipLeft,
        S16x8UnzipRight, S8x16UnzipLeft, S8x16UnzipRight.
      
      - Adds binary Transpose left and right half shuffles to return
        a single vector: S32x4TransposeLeft, S32x4TransposeRight,
        S16x8TransposeLeft, S16xTransposeRight, S8x16TransposeLeft,
        S8x16TransposeRight.
      
      - Adds binary Concat (concatenate) byte shuffle: S8x16Concat #bytes to
        paste two vectors together.
      
      LOG=N
      BUG=v8:6020
      
      Review-Url: https://codereview.chromium.org/2801183002
      Cr-Commit-Position: refs/heads/master@{#44734}
      5806d862
    • bbudge's avatar
      [ARM] Reserve scratch q-register. · 246a7bdd
      bbudge authored
      - Reserves q15 (d30,d31) as a scratch register for NEON operations.
      - Rewrites CodeGenerator::AssembleSwap to use it.
      
      LOG=N
      BUG=v8:6020
      
      Review-Url: https://codereview.chromium.org/2827743002
      Cr-Commit-Position: refs/heads/master@{#44728}
      246a7bdd
  11. 18 Apr, 2017 1 commit
  12. 13 Apr, 2017 1 commit
  13. 11 Apr, 2017 2 commits
  14. 10 Apr, 2017 4 commits
  15. 07 Apr, 2017 1 commit
    • jgruber's avatar
      [builtins] Introduce new TFC macro and auto-generate TFS descriptors · 9ddfeafe
      jgruber authored
      Split TFS builtins into
      
      * TFC: TF builtins with stub linkage that use a custom interface descriptor
             (e.g. because of a non-standard return size or untagged arguments)
      * TFS: the rest.
      
      Automatically generate interface descriptors for TFS builtins to reduce
      boilerplate involved in setting up stub calls. These are now as simple as
      creating the TFS stub and using CSA::CallBuiltin, no extra work required.
      
      BUG=v8:6116
      
      Review-Url: https://codereview.chromium.org/2777203007
      Cr-Commit-Position: refs/heads/master@{#44490}
      9ddfeafe
  16. 29 Mar, 2017 2 commits
    • Caitlin Potter's avatar
      [cleanup] combine 3 ResumeGenerator stubs into one · 5615e5b8
      Caitlin Potter authored
      This hopefully shrinks binary size a bit, at the cost of (slightly)
      increasing the complexity of the ResumeGenerator stub. Includes ia32,
      x64, mips, mips64, arm and arm64 ports.
      
      BUG=v8:5855
      R=rmcilroy@chromium.org, paul.lind@imgtec.com, bmeurer@chromium.org, neis@chromium.org
      
      Change-Id: I848ce08afd828091a11e03c89d5be065ff557ef3
      Reviewed-on: https://chromium-review.googlesource.com/461303
      Commit-Queue: Caitlin Potter <caitp@igalia.com>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#44244}
      5615e5b8
    • Caitlin Potter's avatar
      [async-iteration] implement AsyncGenerator · bf463c4d
      Caitlin Potter authored
      - Introduce new struct AsyncGeneratorRequest, which holds
        information pertinent to resuming execution of an
        AsyncGenerator, such as the Promise associated with the async
        generator request. It is intended to be used as a singly
        linked list, and holds a pointer to the next item in te queue.
      
      - Introduce JSAsyncGeneratorObject (subclass of
        JSGeneratorObject), which includes several new internal fields
        (`queue` which contains a singly linked list of
        AsyncGeneratorRequest objects, and `await_input` which
        contains the sent value from an Await expression (This is
        necessary to prevent function.sent (used by yield*) from
        having the sent value observably overwritten during
        execution).
      
      - Modify SuspendGenerator to accept a set of Flags, which
        indicate whether the suspend is for a Yield or Await, and
        whether it takes place on an async generator or ES6
        generator.
      
      - Introduce interpreter intrinsics and TF intrinsic lowering for
        accessing the await input of an async generator
      
      - Modify the JSGeneratorStore operator to understand whether or
        not it's suspending for a normal yield, or an AsyncGenerator
        Await. This ensures appropriate registers are stored.
      
      - Add versions of ResumeGeneratorTrampoline which store the
        input value in a different field depending on wether it's an
        AsyncGenerator Await resume, or an ordinary resume. Also modifies
        whether debug code will assert that the generator object is a
        JSGeneratorObject or a JSAsyncGeneratorObject depending on the
        resume type.
      
      BUG=v8:5855
      R=bmeurer@chromium.org, rmcilroy@chromium.org, jgruber@chromium.org,
      littledan@chromium.org, neis@chromium.org
      TBR=marja@chromium.org
      
      Change-Id: I9d58df1d344465fc937fe7eed322424204497187
      Reviewed-on: https://chromium-review.googlesource.com/446961
      Commit-Queue: Caitlin Potter <caitp@igalia.com>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarHannes Payer <hpayer@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#44240}
      bf463c4d
  17. 28 Mar, 2017 1 commit
  18. 27 Mar, 2017 1 commit
  19. 24 Mar, 2017 1 commit
    • Jochen Eisinger's avatar
      Revert "Remove ClassOf intrinsic from FCG and CS" · d0c2b8c4
      Jochen Eisinger authored
      This reverts commit f20261bf.
      
      Reason for revert: We need the GetMapConstructor instruction for CallApiCallbackStub
      
      Original change's description:
      > Remove ClassOf intrinsic from FCG and CS
      > 
      > I plan to change the constructor field of maps, and instead of patching
      > the intrinsics all over the place, just fall back to the runtime.
      > 
      > R=​bmeurer@chromium.org
      > BUG=v8:6084
      > 
      > Change-Id: Ie294b74ab615fd794d7fc47488e2e30e2b49b4db
      > Reviewed-on: https://chromium-review.googlesource.com/454616
      > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
      > Commit-Queue: Jochen Eisinger <jochen@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#43765}
      
      TBR=jochen@chromium.org,bmeurer@chromium.org,adamk@chromium.org,hablich@chromium.org,v8-reviews@googlegroups.com,v8-mips-ports@googlegroups.com,v8-ppc-ports@googlegroups.com,v8-x87-ports@googlegroups.com
      # Not skipping CQ checks because original CL landed > 1 day ago.
      BUG=v8:6084
      
      Change-Id: I06f60d409eccb4ad3abad14f5c9782bfe9122aea
      Reviewed-on: https://chromium-review.googlesource.com/458379Reviewed-by: 's avatarJochen Eisinger <jochen@chromium.org>
      Commit-Queue: Jochen Eisinger <jochen@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#44106}
      d0c2b8c4
  20. 23 Mar, 2017 1 commit
  21. 22 Mar, 2017 2 commits
  22. 20 Mar, 2017 2 commits
  23. 17 Mar, 2017 1 commit
    • neis's avatar
      Disentangle assembler from isolate. · 94b088ca
      neis authored
      This is a first step towards moving Turbofan code generation off the main thread.
      
      Summary of the changes:
      - AssemblerBase no longer has a pointer to the isolate. Instead, its
        constructor receives the few things that it needs from the isolate (on most
        architectures this is just the serializer_enabled flag).
      - RelocInfo no longer has a pointer to the isolate. Instead, the functions
        that need it take it as an argument.  (There are currently still a few that
        implicitly access the isolate through a HeapObject.)
      - The MacroAssembler now explicitly holds a pointer to the isolate (before, it
        used to get it from the Assembler).
      - The jit_cookie also moved from AssemblerBase to the MacroAssemblers, since
        it's not used at all in the Assemblers.
      - A few architectures implemented parts of the Assembler with the help
        of a Codepatcher that is based on MacroAssembler.  Since the Assembler no
        longer has the isolate, but the MacroAssembler still needs it, this doesn't
        work anymore.  Instead, these Assemblers now use a new PatchingAssembler.
      
      BUG=v8:6048
      
      Review-Url: https://codereview.chromium.org/2732273003
      Cr-Commit-Position: refs/heads/master@{#43890}
      94b088ca
  24. 16 Mar, 2017 2 commits