• 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
..
assembler-ia32-inl.h Loading commit data...
assembler-ia32.cc Loading commit data...
assembler-ia32.h Loading commit data...
builtins-ia32.cc Loading commit data...
code-stubs-ia32.cc Loading commit data...
code-stubs-ia32.h Loading commit data...
codegen-ia32.cc Loading commit data...
codegen-ia32.h Loading commit data...
cpu-ia32.cc Loading commit data...
debug-ia32.cc Loading commit data...
deoptimizer-ia32.cc Loading commit data...
disasm-ia32.cc Loading commit data...
frames-ia32.cc Loading commit data...
frames-ia32.h Loading commit data...
full-codegen-ia32.cc Loading commit data...
ic-ia32.cc Loading commit data...
lithium-codegen-ia32.cc Loading commit data...
lithium-codegen-ia32.h Loading commit data...
lithium-gap-resolver-ia32.cc Loading commit data...
lithium-gap-resolver-ia32.h Loading commit data...
lithium-ia32.cc Loading commit data...
lithium-ia32.h Loading commit data...
macro-assembler-ia32.cc Loading commit data...
macro-assembler-ia32.h Loading commit data...
regexp-macro-assembler-ia32.cc Loading commit data...
regexp-macro-assembler-ia32.h Loading commit data...
simulator-ia32.cc Loading commit data...
simulator-ia32.h Loading commit data...
stub-cache-ia32.cc Loading commit data...