Chromium Code Reviews| Index: src/x64/builtins-x64.cc |
| diff --git a/src/x64/builtins-x64.cc b/src/x64/builtins-x64.cc |
| index d743d1c097225b1099e802f3bff1ec1f228b710f..a7cf8a47718709023098e437dc87051562d50a51 100644 |
| --- a/src/x64/builtins-x64.cc |
| +++ b/src/x64/builtins-x64.cc |
| @@ -479,6 +479,11 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { |
| __ RecordWriteField(rbx, JSGeneratorObject::kInputOffset, rax, rcx, |
| kDontSaveFPRegs); |
| + // Store resume mode into generator object. |
| + __ movp(FieldOperand(rbx, JSGeneratorObject::kResumeModeOffset), rdx); |
| + __ RecordWriteField(rbx, JSGeneratorObject::kResumeModeOffset, rdx, rcx, |
|
Benedikt Meurer
2016/04/08 10:20:14
You don't need a write barrier, the resume mode is
|
| + kDontSaveFPRegs); |
| + |
| // Load suspended function and context. |
| __ movp(rsi, FieldOperand(rbx, JSGeneratorObject::kContextOffset)); |
| __ movp(rdi, FieldOperand(rbx, JSGeneratorObject::kFunctionOffset)); |
| @@ -559,16 +564,12 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { |
| __ bind(&done_loop); |
| } |
| - // Push resume mode (consumed in continuation). |
| - __ Push(rdx); |
| - |
| // Reset operand stack so we don't leak. |
| __ LoadRoot(FieldOperand(rbx, JSGeneratorObject::kOperandStackOffset), |
| Heap::kEmptyFixedArrayRootIndex); |
| - // Restore context and value. |
| + // Restore context. |
| __ movp(rsi, FieldOperand(rbx, JSGeneratorObject::kContextOffset)); |
| - __ movp(rax, FieldOperand(rbx, JSGeneratorObject::kInputOffset)); |
| // Resume the generator function at the continuation. |
| __ movp(rdx, FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset)); |
| @@ -578,6 +579,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { |
| __ leap(rdx, FieldOperand(rdx, rcx, times_1, Code::kHeaderSize)); |
| __ Move(FieldOperand(rbx, JSGeneratorObject::kContinuationOffset), |
| Smi::FromInt(JSGeneratorObject::kGeneratorExecuting)); |
| + __ movp(rax, rbx); // Continuation expects generator object in rax. |
| __ jmp(rdx); |
| } |