• wingo@igalia.com's avatar
    Generators: Avoid calling into runtime if operand stack is empty · 646a34e1
    wingo@igalia.com authored
    This patch makes yield sites save the resume continuation and context
    inline.  If the operand stack is empty, we can avoid a call into the
    runtime.  This also makes the SuspendJSGeneratorObject runtime function
    less magical: it just has to save the operand stack and stack handlers.
    
    This speeds up the following case by a factor of 3 or so:
    
      function* until(n) {
        for (var i = 0; i < n; i++)
          yield i;
      }
    
      function sum(iter) {
        var sum = 0;
        for (var x of iter) sum += x;
        return sum;
      }
    
      for (var i = 0; i < 10000; i++) sum(until(1000))
    
    Also, there is no more sentinel value as the generators will resume in
    the right place already, allowing me to remove the hack added to the
    --debug-code check in r14437.
    
    R=mstarzinger@chromium.org
    BUG=
    
    Review URL: https://codereview.chromium.org/15990004
    
    git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15240 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
    646a34e1
Name
Last commit
Last update
benchmarks Loading commit data...
build Loading commit data...
include Loading commit data...
preparser Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
Makefile.nacl Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...