Chromium Code Reviews| Index: runtime/vm/stub_code_x64.cc |
| diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc |
| index 53f153e2c25d4d1d337309569f7377f94a1654c1..3cf72f01760830fd7e2b92b84dcc0834af39080e 100644 |
| --- a/runtime/vm/stub_code_x64.cc |
| +++ b/runtime/vm/stub_code_x64.cc |
| @@ -564,8 +564,17 @@ static void GenerateDispatcherCode(Assembler* assembler, |
| __ pushq(RAX); // Receiver. |
| __ pushq(RBX); // ICData/MegamorphicCache. |
| __ pushq(R10); // Arguments descriptor array. |
| + |
| + // Adjust arguments count. |
| + __ movq(RAX, FieldAddress(R10, ArgumentsDescriptor::type_args_len_offset())); |
| __ movq(R10, RDI); |
| - // EDX: Smi-tagged arguments array length. |
| + __ cmpq(RAX, Immediate(0)); |
|
Vyacheslav Egorov (Google)
2017/05/13 22:20:14
__ cmpq(FieldAddress(...), Immediate(0))
regis
2017/05/18 21:02:13
Done.
|
| + Label args_count_ok; |
| + __ j(EQUAL, &args_count_ok, Assembler::kNearJump); |
| + __ addq(R10, Immediate(Smi::RawValue(1))); // Include the type arguments. |
| + __ Bind(&args_count_ok); |
| + |
| + // R10: Smi-tagged arguments array length. |
| PushArgumentsArray(assembler); |
| const intptr_t kNumArgs = 4; |
| __ CallRuntime(kInvokeNoSuchMethodDispatcherRuntimeEntry, kNumArgs); |
| @@ -1214,7 +1223,16 @@ void StubCode::GenerateCallClosureNoSuchMethodStub(Assembler* assembler) { |
| __ pushq(RAX); // Receiver. |
| __ pushq(R10); // Arguments descriptor array. |
| - __ movq(R10, R13); // Smi-tagged arguments array length. |
| + // Adjust arguments count. |
| + __ movq(RAX, FieldAddress(R10, ArgumentsDescriptor::type_args_len_offset())); |
| + __ movq(R10, R13); |
| + __ cmpq(RAX, Immediate(0)); |
|
Vyacheslav Egorov (Google)
2017/05/13 22:20:14
ditto
regis
2017/05/18 21:02:13
Done.
|
| + Label args_count_ok; |
| + __ j(EQUAL, &args_count_ok, Assembler::kNearJump); |
| + __ addq(R10, Immediate(Smi::RawValue(1))); // Include the type arguments. |
| + __ Bind(&args_count_ok); |
| + |
| + // R10: Smi-tagged arguments array length. |
| PushArgumentsArray(assembler); |
| const intptr_t kNumArgs = 3; |