| Index: runtime/vm/intermediate_language_x64.cc
|
| ===================================================================
|
| --- runtime/vm/intermediate_language_x64.cc (revision 32754)
|
| +++ runtime/vm/intermediate_language_x64.cc (working copy)
|
| @@ -2073,23 +2073,21 @@
|
| // generated code size.
|
| __ LoadObject(RDI, type_arguments(), PP);
|
| __ movq(RDI, FieldAddress(RDI, TypeArguments::instantiations_offset()));
|
| - __ movq(RBX, FieldAddress(RDI, Array::length_offset()));
|
| __ leaq(RDI, FieldAddress(RDI, Array::data_offset()));
|
| - __ leaq(RBX, Address(RDI, RBX, TIMES_2, 0)); // RBX is smi.
|
| + // The instantiations cache is initialized with Object::zero_array() and is
|
| + // therefore guaranteed to contain kNoInstantiator. No length check needed.
|
| Label loop, found, slow_case;
|
| __ Bind(&loop);
|
| - __ cmpq(RDI, RBX);
|
| - __ j(ABOVE_EQUAL, &slow_case);
|
| __ movq(RDX, Address(RDI, 0 * kWordSize)); // Cached instantiator.
|
| __ cmpq(RDX, RAX);
|
| __ j(EQUAL, &found, Assembler::kNearJump);
|
| - __ cmpq(RDX, Immediate(Smi::RawValue(StubCode::kNoInstantiator)));
|
| - __ j(EQUAL, &slow_case);
|
| __ addq(RDI, Immediate(2 * kWordSize));
|
| - __ jmp(&loop, Assembler::kNearJump);
|
| + __ cmpq(RDX, Immediate(Smi::RawValue(StubCode::kNoInstantiator)));
|
| + __ j(NOT_EQUAL, &loop, Assembler::kNearJump);
|
| + __ jmp(&slow_case, Assembler::kNearJump);
|
| __ Bind(&found);
|
| __ movq(RAX, Address(RDI, 1 * kWordSize)); // Cached instantiated args.
|
| - __ jmp(&type_arguments_instantiated);
|
| + __ jmp(&type_arguments_instantiated, Assembler::kNearJump);
|
|
|
| __ Bind(&slow_case);
|
| // Instantiate non-null type arguments.
|
|
|