| Index: src/x64/code-stubs-x64.cc | 
| diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc | 
| index d179d2a5d5049aefdac27249130df673f58e9eb4..5bacd1e6a5cb9f948b136e09d4b5adbc8339d452 100644 | 
| --- a/src/x64/code-stubs-x64.cc | 
| +++ b/src/x64/code-stubs-x64.cc | 
| @@ -2864,30 +2864,36 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { | 
| __ IncrementCounter(counters->regexp_entry_native(), 1); | 
|  | 
| // Isolates: note we add an additional parameter here (isolate pointer). | 
| -  static const int kRegExpExecuteArguments = 8; | 
| +  static const int kRegExpExecuteArguments = 9; | 
| int argument_slots_on_stack = | 
| masm->ArgumentStackSlotsForCFunctionCall(kRegExpExecuteArguments); | 
| __ EnterApiExitFrame(argument_slots_on_stack); | 
|  | 
| -  // Argument 8: Pass current isolate address. | 
| +  // Argument 9: Pass current isolate address. | 
| // __ movq(Operand(rsp, (argument_slots_on_stack - 1) * kPointerSize), | 
| //     Immediate(ExternalReference::isolate_address())); | 
| __ LoadAddress(kScratchRegister, ExternalReference::isolate_address()); | 
| __ movq(Operand(rsp, (argument_slots_on_stack - 1) * kPointerSize), | 
| kScratchRegister); | 
|  | 
| -  // Argument 7: Indicate that this is a direct call from JavaScript. | 
| +  // Argument 8: Indicate that this is a direct call from JavaScript. | 
| __ movq(Operand(rsp, (argument_slots_on_stack - 2) * kPointerSize), | 
| Immediate(1)); | 
|  | 
| -  // Argument 6: Start (high end) of backtracking stack memory area. | 
| +  // Argument 7: Start (high end) of backtracking stack memory area. | 
| __ movq(kScratchRegister, address_of_regexp_stack_memory_address); | 
| __ movq(r9, Operand(kScratchRegister, 0)); | 
| __ movq(kScratchRegister, address_of_regexp_stack_memory_size); | 
| __ addq(r9, Operand(kScratchRegister, 0)); | 
| -  // Argument 6 passed in r9 on Linux and on the stack on Windows. | 
| -#ifdef _WIN64 | 
| __ movq(Operand(rsp, (argument_slots_on_stack - 3) * kPointerSize), r9); | 
| + | 
| +  // Argument 6: Clear the number of capture registers for non-global capture. | 
| +  // Argument 6 is passed in r9 on Linux and on the stack on Windows. | 
| +#ifdef _WIN64 | 
| +  __ movq(Operand(rsp, (argument_slots_on_stack - 4) * kPointerSize), | 
| +          Immediate(0)); | 
| +#else | 
| +  __ Set(r9, 0); | 
| #endif | 
|  | 
| // Argument 5: static offsets vector buffer. | 
| @@ -2895,7 +2901,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { | 
| ExternalReference::address_of_static_offsets_vector(isolate)); | 
| // Argument 5 passed in r8 on Linux and on the stack on Windows. | 
| #ifdef _WIN64 | 
| -  __ movq(Operand(rsp, (argument_slots_on_stack - 4) * kPointerSize), r8); | 
| +  __ movq(Operand(rsp, (argument_slots_on_stack - 5) * kPointerSize), r8); | 
| #endif | 
|  | 
| // First four arguments are passed in registers on both Linux and Windows. | 
| @@ -2961,6 +2967,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { | 
| Label success; | 
| Label exception; | 
| __ cmpl(rax, Immediate(NativeRegExpMacroAssembler::SUCCESS)); | 
| +  // We do not expect multiple results. | 
| __ j(equal, &success, Label::kNear); | 
| __ cmpl(rax, Immediate(NativeRegExpMacroAssembler::EXCEPTION)); | 
| __ j(equal, &exception); | 
|  |