1. 25 Sep, 2015 1 commit
  2. 24 Sep, 2015 6 commits
    • mstarzinger's avatar
      [turbofan] Call ArgumentsAccessStub to materialize arguments. · 9b12ec9a
      mstarzinger authored
      This lowers JSCreateArgument nodes to call the ArgumentsAccessStub for
      help with materializing arguments objects when possible. Along the way
      this changes the calling convention of said stub to take parameters in
      registers instead of on the stack.
      
      R=mvstanton@chromium.org
      
      Review URL: https://codereview.chromium.org/1348773002
      
      Cr-Commit-Position: refs/heads/master@{#30919}
      9b12ec9a
    • 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
    • bmeurer's avatar
      [es6] Introduce spec compliant IsConstructor. · 8fe3ac07
      bmeurer authored
      There was already a bit on the Map named "function with prototype",
      which basically meant that the Map was a map for a JSFunction that could
      be used as a constructor. Now this CL generalizes that bit to
      IsConstructor, which says that whatever (Heap)Object you are looking at
      can be used as a constructor (i.e. the bit is also set for bound
      functions that can be used as constructors and proxies that have a
      [[Construct]] internal method).
      
      This way we have a single chokepoint for IsConstructor checking, which
      allows us to get rid of the various ways in which we tried to guess
      whether something could be used as a constructor or not.
      
      Drive-by-fix: Renamed IsConstructor on FunctionKind to
      IsClassConstructor to resolve the weird name clash, and the
      IsClassConstructor name also matches the spec.
      
      CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_layout_dbg,v8_linux_nosnap_dbg
      R=jarin@chromium.org, rossberg@chromium.org
      BUG=v8:4413, v8:4430
      LOG=n
      
      Committed: https://crrev.com/8de4d9351df4cf66c8a128d561a6e331d196be54
      Cr-Commit-Position: refs/heads/master@{#30900}
      
      Review URL: https://codereview.chromium.org/1358423002
      
      Cr-Commit-Position: refs/heads/master@{#30902}
      8fe3ac07
    • bmeurer's avatar
      Revert of [es6] Introduce spec compliant IsConstructor. (patchset #2 id:20001... · 656ebdce
      bmeurer authored
      Revert of [es6] Introduce spec compliant IsConstructor. (patchset #2 id:20001 of https://codereview.chromium.org/1358423002/ )
      
      Reason for revert:
      Failed on Fuzzer and MIPS bot.
      
      Original issue's description:
      > [es6] Introduce spec compliant IsConstructor.
      >
      > There was already a bit on the Map named "function with prototype",
      > which basically meant that the Map was a map for a JSFunction that could
      > be used as a constructor. Now this CL generalizes that bit to
      > IsConstructor, which says that whatever (Heap)Object you are looking at
      > can be used as a constructor (i.e. the bit is also set for bound
      > functions that can be used as constructors and proxies that have a
      > [[Construct]] internal method).
      >
      > This way we have a single chokepoint for IsConstructor checking, which
      > allows us to get rid of the various ways in which we tried to guess
      > whether something could be used as a constructor or not.
      >
      > Drive-by-fix: Renamed IsConstructor on FunctionKind to
      > IsClassConstructor to resolve the weird name clash, and the
      > IsClassConstructor name also matches the spec.
      >
      > R=jarin@chromium.org, rossberg@chromium.org
      > BUG=v8:4430
      > LOG=n
      >
      > Committed: https://crrev.com/8de4d9351df4cf66c8a128d561a6e331d196be54
      > Cr-Commit-Position: refs/heads/master@{#30900}
      
      TBR=jarin@chromium.org,rossberg@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      BUG=v8:4430
      
      Review URL: https://codereview.chromium.org/1360403002
      
      Cr-Commit-Position: refs/heads/master@{#30901}
      656ebdce
    • bmeurer's avatar
      [es6] Introduce spec compliant IsConstructor. · 8de4d935
      bmeurer authored
      There was already a bit on the Map named "function with prototype",
      which basically meant that the Map was a map for a JSFunction that could
      be used as a constructor. Now this CL generalizes that bit to
      IsConstructor, which says that whatever (Heap)Object you are looking at
      can be used as a constructor (i.e. the bit is also set for bound
      functions that can be used as constructors and proxies that have a
      [[Construct]] internal method).
      
      This way we have a single chokepoint for IsConstructor checking, which
      allows us to get rid of the various ways in which we tried to guess
      whether something could be used as a constructor or not.
      
      Drive-by-fix: Renamed IsConstructor on FunctionKind to
      IsClassConstructor to resolve the weird name clash, and the
      IsClassConstructor name also matches the spec.
      
      R=jarin@chromium.org, rossberg@chromium.org
      BUG=v8:4430
      LOG=n
      
      Review URL: https://codereview.chromium.org/1358423002
      
      Cr-Commit-Position: refs/heads/master@{#30900}
      8de4d935
  3. 23 Sep, 2015 3 commits
  4. 22 Sep, 2015 3 commits
    • bmeurer's avatar
      [ic] Introduce BOOLEAN state for CompareIC. · 10c5f2e8
      bmeurer authored
      Slow path for relational comparison of boolean primitive values
      now goes through the runtime, which made the slow path even
      slower than it already was. So in order to repair the regression,
      we just track boolean feedback for comparisons and use that
      to generate decent code in Crankshaft (not the best possible
      code, but good enough for Crankshaft; TurboFan will be able
      to do better on that).
      
      R=jarin@chromium.org
      BUG=chromium:534200
      LOG=n
      
      Review URL: https://codereview.chromium.org/1347063004
      
      Cr-Commit-Position: refs/heads/master@{#30860}
      10c5f2e8
    • bmeurer's avatar
      [x64] Compare map instead of value to heap number map in ToStringStub. · 02a2580b
      bmeurer authored
      Fixes a typo introduced earlier, where we compare the value to heap
      number map instead of the map loaded previously.
      
      TBR=jarin@chromium.org
      
      Review URL: https://codereview.chromium.org/1355253002
      
      Cr-Commit-Position: refs/heads/master@{#30859}
      02a2580b
    • bmeurer's avatar
      [builtins] Add support for NewTarget to Execution::New. · 1dfac69f
      bmeurer authored
      Introduce new builtins Construct and ConstructFunction (in line
      with the Call and CallFunction builtins that we already have) as
      proper bottleneck for Construct and [[Construct]] on JSFunctions.
      Use these builtins to support passing NewTarget from C++ to
      JavaScript land.
      
      Long-term we want the CallConstructStub to be used for
      gathering feedback on entry to construction chain (i.e. the
      initial new Foo), and use the Construct builtins to do the
      actual work inside the construction chain (i.e. calling into
      super and stuff).
      
      MIPS and MIPS64 ports contributed by akos.palfi@imgtec.com.
      
      R=jarin@chromium.org
      BUG=v8:4430
      LOG=n
      
      Review URL: https://codereview.chromium.org/1359583002
      
      Cr-Commit-Position: refs/heads/master@{#30857}
      1dfac69f
  5. 21 Sep, 2015 1 commit
    • bmeurer's avatar
      [ic] Also collect known map for relational comparison. · e56f265f
      bmeurer authored
      Previously we only collected the known map for equality comparisons. But
      if we also collect it for relational comparisons, we can inline a fast
      path of ToPrimitive on the objects, which is especially interesting
      since both sides have the same map.
      
      For now we only inline a very limited subset of ToPrimitive in
      Crankshaft, which is when the receiver map (and its prototype chain)
      doesn't have @@toPrimitive, and both valueOf and toString are the
      default versions on the %ObjectPrototype%. In this case the relational
      comparison would reduce to a string comparison of "[object CLASS]" with
      itself and so we can reduce that to a boolean constant plus map checks
      on both left and right hand side, plus code dependencies on the
      prototype chain. This repairs the regression on box2d.
      
      R=jkummerow@chromium.org
      BUG=chromium:534200
      LOG=n
      
      Review URL: https://codereview.chromium.org/1355113002
      
      Cr-Commit-Position: refs/heads/master@{#30852}
      e56f265f
  6. 18 Sep, 2015 2 commits
    • bmeurer's avatar
      [stubs] Refactor StringCompareStub and use it for HStringCompareAndBranch. · 8016547c
      bmeurer authored
      The StringCompareStub used to take its parameters on the (JavaScript)
      stack, which made it impossible to use in TurboFan. Actually
      StringCompareStub was currently completely unused. This changes the
      calling convention to something TurboFan compatible and introduces a
      CallInterfaceDescriptor for StringCompareStub. It also changes
      HStringCompareAndBranch to use the StringCompareStub instead of using
      the full blown CompareICStub for a stupid string comparison.
      
      R=jarin@chromium.org
      
      Review URL: https://codereview.chromium.org/1347913003
      
      Cr-Commit-Position: refs/heads/master@{#30818}
      8016547c
    • bmeurer's avatar
      [runtime] Replace COMPARE/COMPARE_STRONG with proper Object::Compare. · 593c655a
      bmeurer authored
      This removes the weird COMPARE and COMPARE_STRONG JavaScript builtins
      and replaces them with a proper C++ implementation in Object::Compare
      and appropriate wrappers Object::LessThan, Object::GreaterThan, and
      friends that are intended to be used by a true/false returning CompareIC
      in the future, as well as the interpreter.  As a short-term solution we
      provide %Compare and %Compare_Strong entry points for the current
      CompareIC that return the appropriate integer values expected by
      fullcodegen currently.
      
      Now the Abstract Relational Comparison is also using the correct
      ToPrimitive implementation, which properly supports @@toPrimitive.
      
      BUG=v8:4307
      LOG=n
      
      Review URL: https://codereview.chromium.org/1350113002
      
      Cr-Commit-Position: refs/heads/master@{#30816}
      593c655a
  7. 17 Sep, 2015 3 commits
  8. 16 Sep, 2015 4 commits
  9. 15 Sep, 2015 1 commit
    • bmeurer's avatar
      [runtime] Replace the EQUALS builtin with proper Object::Equals. · 54bab695
      bmeurer authored
      Move the implementation of the Abstract Equality Comparison to the
      runtime and thereby remove the EQUALS dispatcher builtin. Also remove
      the various runtime entry points that were only used to support the
      EQUALS builtin.
      
      Now the Abstract Equality Comparison is also using the correct
      ToPrimitive implementation, which properly supports @@toPrimitive.
      
      CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_layout_dbg,v8_linux_nosnap_dbg
      R=mstarzinger@chromium.org
      BUG=v8:4307
      LOG=n
      
      Review URL: https://codereview.chromium.org/1337993005
      
      Cr-Commit-Position: refs/heads/master@{#30747}
      54bab695
  10. 14 Sep, 2015 2 commits
    • rmcilroy's avatar
      [Interpreter] Add support for JS calls. · e7fb2339
      rmcilroy authored
      Adds support for JS calls to the interpreter. In order to support
      calls from the interpreter, the PushArgsAndCall builtin is added
      which pushes a sequence of arguments onto the stack and calls
      builtin::Call.
      
      Adds the Call bytecode.
      
      MIPS port contributed by akos.palfi@imgtec.com in https://codereview.chromium.org/1334873002/
      
      BUG=v8:4280
      LOG=N
      
      Review URL: https://codereview.chromium.org/1323463005
      
      Cr-Commit-Position: refs/heads/master@{#30710}
      e7fb2339
    • bmeurer's avatar
      [builtins] Simplify String constructor code. · eadfd666
      bmeurer authored
      The String constructor was somewhat complex with a lot of micro
      optimizations that are not relevant or even misguided. It would be
      really hard to port that code to ES6, which requires String to be
      subclassable. So as a first step we reduced the necessary complexity
      to the bare minimum (also removing the last user of the fairly complex
      MacroAssembler::LookupNumberStringCache method).
      
      This also removes the counters for the String constructor, which
      were not properly exposed anymore (and not kept in sync with inlined
      versions of the String constructor anyway).
      
      R=jarin@chromium.org
      
      Review URL: https://codereview.chromium.org/1335193002
      
      Cr-Commit-Position: refs/heads/master@{#30706}
      eadfd666
  11. 11 Sep, 2015 3 commits
    • mlippautz's avatar
      Make FlushICache part of Assembler(Base) and take Isolate as parameter. · 9fc4fc14
      mlippautz authored
      BUG=chromium:524425
      LOG=N
      
      Review URL: https://codereview.chromium.org/1332283002
      
      Cr-Commit-Position: refs/heads/master@{#30695}
      9fc4fc14
    • bmeurer's avatar
      [builtins] Remove the weird STACK_OVERFLOW builtin. · 39604dda
      bmeurer authored
      Just use a %ThrowStackOverflow runtime function instead, which
      does the trick, especially since the Isolate already has a
      preallocated StackOverflow error for that.
      
      R=mstarzinger@chromium.org
      
      Review URL: https://codereview.chromium.org/1337883002
      
      Cr-Commit-Position: refs/heads/master@{#30693}
      39604dda
    • bmeurer's avatar
      [stubs] Simplify the non-function case of CallConstructStub. · 622fa0ea
      bmeurer authored
      Currently we do this dance between the CallConstructStub, the
      CALL_* builtins and the %GetConstructorDelegate, %GetProxyTrap,
      and %Apply runtime functions for every [[Construct]] operation on
      non-function callables. This is complexity is unnecessary, and can
      be simplified to work without any JS builtin. This will also make it
      a lot easier to implement ES6 compliant [[Construct]] for proxies.
      
      Also sanitize the invariant for CallConstructStub, which up until now
      always restored the context itself, but that force us to always create
      another copy of all arguments in case of proxies and other callables,
      so we can relax that constraint by making the caller restore the context
      (this only affects fullcodegen, since the optimizing compilers already
      properly restore the context anyway).
      
      R=mstarzinger@chromium.org
      
      Review URL: https://codereview.chromium.org/1335723002
      
      Cr-Commit-Position: refs/heads/master@{#30691}
      622fa0ea
  12. 10 Sep, 2015 1 commit
    • bmeurer's avatar
      [runtime] Sanitize %NewClosure runtime entries. · 6b3c070d
      bmeurer authored
      There are now two runtime entries %NewClosure and %NewClosure_Tenured,
      with the same signature (one parameter, the SharedFunctionInfo, and the
      context of the caller).
      
      Also remove the HFunctionLiteral special case instruction from Crankshaft,
      as HCallWithDescriptor with FastNewClosureStub or HCallRuntime with
      either %NewClosure or %NewClosure_Tenured can easily do that for you.
      
      Also remove the redundant context parameter from the JSCreateClosure
      operator, because every JS operator already takes a context input.
      
      CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_nosnap_dbg
      
      Review URL: https://codereview.chromium.org/1329293003
      
      Cr-Commit-Position: refs/heads/master@{#30671}
      6b3c070d
  13. 09 Sep, 2015 2 commits
    • mvstanton's avatar
      On a call to Array(), we patched a call ic. This CL makes do with a single... · ba7b6413
      mvstanton authored
      On a call to Array(), we patched a call ic. This CL makes do with a single dispatcher which inlines the special handling for the Array() call case, loading the allocation site found in the vector and calling the array constructor stub appropriately.
      
      BUG=
      
      Review URL: https://codereview.chromium.org/1332563003
      
      Cr-Commit-Position: refs/heads/master@{#30649}
      ba7b6413
    • bmeurer's avatar
      [calls] Consistent call protocol for calls. · b37907ff
      bmeurer authored
      The number of actual arguments should always be available, there's no
      point in trying to optimize away a simple assignment of an immediate to
      a register before some calls.
      
      The main motivation is to have a consistent state at the beginning of every
      function. Currently the arguments register (i.e. rax or eax) either contains
      the number of arguments or some random garbage depending on whether
      the callsite decided that the callee might need the information or not.
      This causes trouble with runtime implementations of functions that
      do not set internal_formal_parameter_count to the DontAdaptArguments
      sentinel (we don't have any of those yet), but also makes it impossible
      to sanity check the arguments in the callee, because the callee doesn't
      know whether the caller decided to pass the number of arguments or
      random garbage.
      
      BUG=v8:4413
      LOG=n
      
      Review URL: https://codereview.chromium.org/1330033002
      
      Cr-Commit-Position: refs/heads/master@{#30648}
      b37907ff
  14. 08 Sep, 2015 4 commits
    • bmeurer's avatar
      [runtime] Replace many buggy uses of %_CallFunction with %_Call. · db2ba190
      bmeurer authored
      The semantics of the %_CallFunction intrinsic seem to be very unclear,
      which resulted in a lot of bugs. Especially the combination with
      %IsSloppyModeFunction is always a bug, because the receiver would be
      wrapped in the wrong context. So the %IsSloppyModeFunction helper is
      gone now, and many of the buggy uses of %_CallFunction are also
      eliminated.
      
      If you ever need to call something with a different receiver, then
      %_Call is your friend now. It does what you want and implements the
      call sequence fully (and correct).
      
      BUG=v8:4413
      LOG=n
      
      Review URL: https://codereview.chromium.org/1325573004
      
      Cr-Commit-Position: refs/heads/master@{#30634}
      db2ba190
    • 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
  15. 04 Sep, 2015 1 commit
  16. 03 Sep, 2015 3 commits