| Index: runtime/vm/intermediate_language_ia32.cc
|
| ===================================================================
|
| --- runtime/vm/intermediate_language_ia32.cc (revision 31159)
|
| +++ runtime/vm/intermediate_language_ia32.cc (working copy)
|
| @@ -34,7 +34,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* PushArgumentInstr::MakeLocationSummary() const {
|
| +LocationSummary* PushArgumentInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps= 0;
|
| LocationSummary* locs =
|
| @@ -61,7 +61,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* ReturnInstr::MakeLocationSummary() const {
|
| +LocationSummary* ReturnInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -108,7 +108,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* LoadLocalInstr::MakeLocationSummary() const {
|
| +LocationSummary* LoadLocalInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 0;
|
| return LocationSummary::Make(kNumInputs,
|
| Location::RequiresRegister(),
|
| @@ -122,7 +122,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* StoreLocalInstr::MakeLocationSummary() const {
|
| +LocationSummary* StoreLocalInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| return LocationSummary::Make(kNumInputs,
|
| Location::SameAsFirstInput(),
|
| @@ -138,7 +138,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* ConstantInstr::MakeLocationSummary() const {
|
| +LocationSummary* ConstantInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 0;
|
| return LocationSummary::Make(kNumInputs,
|
| Location::RequiresRegister(),
|
| @@ -155,7 +155,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* AssertAssignableInstr::MakeLocationSummary() const {
|
| +LocationSummary* AssertAssignableInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 3;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -168,7 +168,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* AssertBooleanInstr::MakeLocationSummary() const {
|
| +LocationSummary* AssertBooleanInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -229,7 +229,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* EqualityCompareInstr::MakeLocationSummary() const {
|
| +LocationSummary* EqualityCompareInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| if (operation_cid() == kMintCid) {
|
| const intptr_t kNumTemps = 1;
|
| @@ -549,7 +549,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* TestSmiInstr::MakeLocationSummary() const {
|
| +LocationSummary* TestSmiInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -593,7 +593,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* RelationalOpInstr::MakeLocationSummary() const {
|
| +LocationSummary* RelationalOpInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| if (operation_cid() == kMintCid) {
|
| @@ -667,7 +667,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* NativeCallInstr::MakeLocationSummary() const {
|
| +LocationSummary* NativeCallInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 0;
|
| const intptr_t kNumTemps = 3;
|
| LocationSummary* locs =
|
| @@ -721,7 +721,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* StringFromCharCodeInstr::MakeLocationSummary() const {
|
| +LocationSummary* StringFromCharCodeInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| // TODO(fschneider): Allow immediate operands for the char code.
|
| return LocationSummary::Make(kNumInputs,
|
| @@ -742,7 +742,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* StringInterpolateInstr::MakeLocationSummary() const {
|
| +LocationSummary* StringInterpolateInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -768,7 +768,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* LoadUntaggedInstr::MakeLocationSummary() const {
|
| +LocationSummary* LoadUntaggedInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| return LocationSummary::Make(kNumInputs,
|
| Location::RequiresRegister(),
|
| @@ -783,7 +783,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* LoadClassIdInstr::MakeLocationSummary() const {
|
| +LocationSummary* LoadClassIdInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| return LocationSummary::Make(kNumInputs,
|
| Location::RequiresRegister(),
|
| @@ -879,7 +879,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* LoadIndexedInstr::MakeLocationSummary() const {
|
| +LocationSummary* LoadIndexedInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -1048,7 +1048,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* StoreIndexedInstr::MakeLocationSummary() const {
|
| +LocationSummary* StoreIndexedInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 3;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -1232,7 +1232,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* GuardFieldInstr::MakeLocationSummary() const {
|
| +LocationSummary* GuardFieldInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| LocationSummary* summary =
|
| new LocationSummary(kNumInputs, 0, LocationSummary::kNoCall);
|
| @@ -1581,21 +1581,147 @@
|
| }
|
|
|
|
|
| -LocationSummary* StoreInstanceFieldInstr::MakeLocationSummary() const {
|
| +class StoreInstanceFieldSlowPath : public SlowPathCode {
|
| + public:
|
| + explicit StoreInstanceFieldSlowPath(StoreInstanceFieldInstr* instruction)
|
| + : instruction_(instruction) { }
|
| +
|
| + virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
|
| + __ Comment("StoreInstanceFieldSlowPath");
|
| + __ Bind(entry_label());
|
| + const Class& double_class = compiler->double_class();
|
| + const Code& stub =
|
| + Code::Handle(StubCode::GetAllocationStubForClass(double_class));
|
| + const ExternalLabel label(double_class.ToCString(), stub.EntryPoint());
|
| +
|
| + LocationSummary* locs = instruction_->locs();
|
| + locs->live_registers()->Remove(locs->out());
|
| +
|
| + compiler->SaveLiveRegisters(locs);
|
| + compiler->GenerateCall(Scanner::kDummyTokenIndex, // No token position.
|
| + &label,
|
| + PcDescriptors::kOther,
|
| + locs);
|
| + __ MoveRegister(locs->temp(0).reg(), EAX);
|
| + compiler->RestoreLiveRegisters(locs);
|
| +
|
| + __ jmp(exit_label());
|
| + }
|
| +
|
| + private:
|
| + StoreInstanceFieldInstr* instruction_;
|
| +};
|
| +
|
| +
|
| +LocationSummary* StoreInstanceFieldInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| - new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
|
| + new LocationSummary(kNumInputs, kNumTemps,
|
| + (field().guarded_cid() == kIllegalCid) || (is_initialization_)
|
| + ? LocationSummary::kCallOnSlowPath
|
| + : LocationSummary::kNoCall);
|
| +
|
| summary->set_in(0, Location::RequiresRegister());
|
| - summary->set_in(1, ShouldEmitStoreBarrier()
|
| + if (IsUnboxedStore() && opt) {
|
| + summary->set_in(1, Location::RequiresFpuRegister());
|
| + summary->AddTemp(Location::RequiresRegister());
|
| + summary->AddTemp(Location::RequiresRegister());
|
| + } else if (IsPotentialUnboxedStore()) {
|
| + summary->set_in(1, ShouldEmitStoreBarrier()
|
| + ? Location::WritableRegister()
|
| + : Location::RequiresRegister());
|
| + summary->AddTemp(Location::RequiresRegister());
|
| + summary->AddTemp(Location::RequiresRegister());
|
| + summary->AddTemp(opt ? Location::RequiresFpuRegister()
|
| + : Location::FpuRegisterLocation(XMM1));
|
| + } else {
|
| + summary->set_in(1, ShouldEmitStoreBarrier()
|
| ? Location::WritableRegister()
|
| : Location::RegisterOrConstant(value()));
|
| + }
|
| return summary;
|
| }
|
|
|
|
|
| void StoreInstanceFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| + Label skip_store;
|
| +
|
| Register instance_reg = locs()->in(0).reg();
|
| +
|
| + if (IsUnboxedStore() && compiler->is_optimizing()) {
|
| + XmmRegister value = locs()->in(1).fpu_reg();
|
| + Register temp = locs()->temp(0).reg();
|
| + Register temp2 = locs()->temp(1).reg();
|
| +
|
| + if (is_initialization_) {
|
| + StoreInstanceFieldSlowPath* slow_path =
|
| + new StoreInstanceFieldSlowPath(this);
|
| + compiler->AddSlowPathCode(slow_path);
|
| +
|
| + __ TryAllocate(compiler->double_class(),
|
| + slow_path->entry_label(),
|
| + Assembler::kFarJump,
|
| + temp);
|
| + __ Bind(slow_path->exit_label());
|
| + __ movl(temp2, temp);
|
| + __ StoreIntoObject(instance_reg,
|
| + FieldAddress(instance_reg, field().Offset()),
|
| + temp2);
|
| + } else {
|
| + __ movl(temp, FieldAddress(instance_reg, field().Offset()));
|
| + }
|
| + __ movsd(FieldAddress(temp, Double::value_offset()), value);
|
| + return;
|
| + }
|
| +
|
| + if (IsPotentialUnboxedStore()) {
|
| + Register value_reg = locs()->in(1).reg();
|
| + Register temp = locs()->temp(0).reg();
|
| + Register temp2 = locs()->temp(1).reg();
|
| + FpuRegister fpu_temp = locs()->temp(2).fpu_reg();
|
| +
|
| + Label store_pointer, copy_payload;
|
| + __ LoadObject(temp, Field::ZoneHandle(field().raw()));
|
| + __ cmpl(FieldAddress(temp, Field::guarded_cid_offset()),
|
| + Immediate(kDoubleCid));
|
| + __ j(NOT_EQUAL, &store_pointer);
|
| + __ cmpl(FieldAddress(temp, Field::is_nullable_offset()),
|
| + Immediate(kNullCid));
|
| + __ j(EQUAL, &store_pointer);
|
| +
|
| + const Immediate& raw_null =
|
| + Immediate(reinterpret_cast<intptr_t>(Object::null()));
|
| + __ movl(temp, FieldAddress(instance_reg, field().Offset()));
|
| + __ cmpl(temp, raw_null);
|
| + __ j(NOT_EQUAL, ©_payload);
|
| +
|
| + StoreInstanceFieldSlowPath* slow_path =
|
| + new StoreInstanceFieldSlowPath(this);
|
| + compiler->AddSlowPathCode(slow_path);
|
| +
|
| + if (!compiler->is_optimizing()) {
|
| + locs()->live_registers()->Add(locs()->in(0));
|
| + locs()->live_registers()->Add(locs()->in(1));
|
| + }
|
| +
|
| + __ TryAllocate(compiler->double_class(),
|
| + slow_path->entry_label(),
|
| + Assembler::kFarJump,
|
| + temp);
|
| + __ Bind(slow_path->exit_label());
|
| + __ movl(temp2, temp);
|
| + __ StoreIntoObject(instance_reg,
|
| + FieldAddress(instance_reg, field().Offset()),
|
| + temp2);
|
| +
|
| + __ Bind(©_payload);
|
| + __ movsd(fpu_temp, FieldAddress(value_reg, Double::value_offset()));
|
| + __ movsd(FieldAddress(temp, Double::value_offset()), fpu_temp);
|
| + __ jmp(&skip_store);
|
| + __ Bind(&store_pointer);
|
| + }
|
| +
|
| if (ShouldEmitStoreBarrier()) {
|
| Register value_reg = locs()->in(1).reg();
|
| __ StoreIntoObject(instance_reg,
|
| @@ -1614,10 +1740,11 @@
|
| FieldAddress(instance_reg, field().Offset()), value_reg);
|
| }
|
| }
|
| + __ Bind(&skip_store);
|
| }
|
|
|
|
|
| -LocationSummary* LoadStaticFieldInstr::MakeLocationSummary() const {
|
| +LocationSummary* LoadStaticFieldInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -1642,7 +1769,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* StoreStaticFieldInstr::MakeLocationSummary() const {
|
| +LocationSummary* StoreStaticFieldInstr::MakeLocationSummary(bool opt) const {
|
| LocationSummary* locs = new LocationSummary(1, 1, LocationSummary::kNoCall);
|
| locs->set_in(0, value()->NeedsStoreBuffer() ? Location::WritableRegister()
|
| : Location::RequiresRegister());
|
| @@ -1666,7 +1793,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* InstanceOfInstr::MakeLocationSummary() const {
|
| +LocationSummary* InstanceOfInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 3;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -1693,7 +1820,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* CreateArrayInstr::MakeLocationSummary() const {
|
| +LocationSummary* CreateArrayInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -1717,7 +1844,7 @@
|
|
|
|
|
| LocationSummary*
|
| -AllocateObjectWithBoundsCheckInstr::MakeLocationSummary() const {
|
| +AllocateObjectWithBoundsCheckInstr::MakeLocationSummary(bool opt) const {
|
| return MakeCallSummary();
|
| }
|
|
|
| @@ -1735,22 +1862,114 @@
|
| }
|
|
|
|
|
| -LocationSummary* LoadFieldInstr::MakeLocationSummary() const {
|
| - return LocationSummary::Make(1,
|
| - Location::RequiresRegister(),
|
| - LocationSummary::kNoCall);
|
| +class BoxDoubleSlowPath : public SlowPathCode {
|
| + public:
|
| + explicit BoxDoubleSlowPath(Instruction* instruction)
|
| + : instruction_(instruction) { }
|
| +
|
| + virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
|
| + __ Comment("BoxDoubleSlowPath");
|
| + __ Bind(entry_label());
|
| + const Class& double_class = compiler->double_class();
|
| + const Code& stub =
|
| + Code::Handle(StubCode::GetAllocationStubForClass(double_class));
|
| + const ExternalLabel label(double_class.ToCString(), stub.EntryPoint());
|
| +
|
| + LocationSummary* locs = instruction_->locs();
|
| + locs->live_registers()->Remove(locs->out());
|
| +
|
| + compiler->SaveLiveRegisters(locs);
|
| + compiler->GenerateCall(Scanner::kDummyTokenIndex, // No token position.
|
| + &label,
|
| + PcDescriptors::kOther,
|
| + locs);
|
| + __ MoveRegister(locs->out().reg(), EAX);
|
| + compiler->RestoreLiveRegisters(locs);
|
| +
|
| + __ jmp(exit_label());
|
| + }
|
| +
|
| + private:
|
| + Instruction* instruction_;
|
| +};
|
| +
|
| +
|
| +LocationSummary* LoadFieldInstr::MakeLocationSummary(bool opt) const {
|
| + const intptr_t kNumInputs = 1;
|
| + const intptr_t kNumTemps = 0;
|
| + LocationSummary* locs =
|
| + new LocationSummary(
|
| + kNumInputs, kNumTemps,
|
| + (opt && !IsPotentialUnboxedLoad())
|
| + ? LocationSummary::kNoCall
|
| + : LocationSummary::kCallOnSlowPath);
|
| +
|
| + locs->set_in(0, Location::RequiresRegister());
|
| +
|
| + if (IsUnboxedLoad() && opt) {
|
| + locs->AddTemp(Location::RequiresRegister());
|
| + } else if (IsPotentialUnboxedLoad()) {
|
| + locs->AddTemp(opt ? Location::RequiresFpuRegister()
|
| + : Location::FpuRegisterLocation(XMM1));
|
| + locs->AddTemp(Location::RequiresRegister());
|
| + }
|
| + locs->set_out(Location::RequiresRegister());
|
| + return locs;
|
| }
|
|
|
|
|
| void LoadFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| Register instance_reg = locs()->in(0).reg();
|
| - Register result_reg = locs()->out().reg();
|
| + if (IsUnboxedLoad() && compiler->is_optimizing()) {
|
| + XmmRegister result = locs()->out().fpu_reg();
|
| + Register temp = locs()->temp(0).reg();
|
| + __ movl(temp, FieldAddress(instance_reg, offset_in_bytes()));
|
| + __ movsd(result, FieldAddress(temp, Double::value_offset()));
|
| + return;
|
| + }
|
|
|
| - __ movl(result_reg, FieldAddress(instance_reg, offset_in_bytes()));
|
| + Label done;
|
| + Register result = locs()->out().reg();
|
| + if (IsPotentialUnboxedLoad()) {
|
| + Register temp = locs()->temp(1).reg();
|
| + XmmRegister value = locs()->temp(0).fpu_reg();
|
| +
|
| + Label load_pointer;
|
| + __ LoadObject(result, Field::ZoneHandle(field()->raw()));
|
| +
|
| + FieldAddress field_cid_operand(result, Field::guarded_cid_offset());
|
| + FieldAddress field_nullability_operand(result, Field::is_nullable_offset());
|
| +
|
| + __ cmpl(field_cid_operand, Immediate(kDoubleCid));
|
| + __ j(NOT_EQUAL, &load_pointer);
|
| +
|
| + __ cmpl(field_nullability_operand, Immediate(kNullCid));
|
| + __ j(EQUAL, &load_pointer);
|
| +
|
| + BoxDoubleSlowPath* slow_path = new BoxDoubleSlowPath(this);
|
| + compiler->AddSlowPathCode(slow_path);
|
| +
|
| + if (!compiler->is_optimizing()) {
|
| + locs()->live_registers()->Add(locs()->in(0));
|
| + }
|
| +
|
| + __ TryAllocate(compiler->double_class(),
|
| + slow_path->entry_label(),
|
| + Assembler::kFarJump,
|
| + result);
|
| + __ Bind(slow_path->exit_label());
|
| + __ movl(temp, FieldAddress(instance_reg, offset_in_bytes()));
|
| + __ movsd(value, FieldAddress(temp, Double::value_offset()));
|
| + __ movsd(FieldAddress(result, Double::value_offset()), value);
|
| + __ jmp(&done);
|
| + __ Bind(&load_pointer);
|
| + }
|
| + __ movl(result, FieldAddress(instance_reg, offset_in_bytes()));
|
| + __ Bind(&done);
|
| }
|
|
|
|
|
| -LocationSummary* InstantiateTypeInstr::MakeLocationSummary() const {
|
| +LocationSummary* InstantiateTypeInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -1782,7 +2001,8 @@
|
| }
|
|
|
|
|
| -LocationSummary* InstantiateTypeArgumentsInstr::MakeLocationSummary() const {
|
| +LocationSummary* InstantiateTypeArgumentsInstr::MakeLocationSummary(
|
| + bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -1832,7 +2052,7 @@
|
|
|
|
|
| LocationSummary*
|
| -ExtractConstructorTypeArgumentsInstr::MakeLocationSummary() const {
|
| +ExtractConstructorTypeArgumentsInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -1875,7 +2095,7 @@
|
|
|
|
|
| LocationSummary*
|
| -ExtractConstructorInstantiatorInstr::MakeLocationSummary() const {
|
| +ExtractConstructorInstantiatorInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -1915,7 +2135,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* AllocateContextInstr::MakeLocationSummary() const {
|
| +LocationSummary* AllocateContextInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 0;
|
| const intptr_t kNumTemps = 1;
|
| LocationSummary* locs =
|
| @@ -1940,7 +2160,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* CloneContextInstr::MakeLocationSummary() const {
|
| +LocationSummary* CloneContextInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -1967,7 +2187,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* CatchBlockEntryInstr::MakeLocationSummary() const {
|
| +LocationSummary* CatchBlockEntryInstr::MakeLocationSummary(bool opt) const {
|
| UNREACHABLE();
|
| return NULL;
|
| }
|
| @@ -2000,7 +2220,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* CheckStackOverflowInstr::MakeLocationSummary() const {
|
| +LocationSummary* CheckStackOverflowInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 0;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -2190,7 +2410,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* BinarySmiOpInstr::MakeLocationSummary() const {
|
| +LocationSummary* BinarySmiOpInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| if (op_kind() == Token::kTRUNCDIV) {
|
| const intptr_t kNumTemps = 1;
|
| @@ -2560,7 +2780,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* CheckEitherNonSmiInstr::MakeLocationSummary() const {
|
| +LocationSummary* CheckEitherNonSmiInstr::MakeLocationSummary(bool opt) const {
|
| intptr_t left_cid = left()->Type()->ToCid();
|
| intptr_t right_cid = right()->Type()->ToCid();
|
| ASSERT((left_cid != kDoubleCid) && (right_cid != kDoubleCid));
|
| @@ -2596,7 +2816,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* BoxDoubleInstr::MakeLocationSummary() const {
|
| +LocationSummary* BoxDoubleInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -2609,38 +2829,6 @@
|
| }
|
|
|
|
|
| -class BoxDoubleSlowPath : public SlowPathCode {
|
| - public:
|
| - explicit BoxDoubleSlowPath(BoxDoubleInstr* instruction)
|
| - : instruction_(instruction) { }
|
| -
|
| - virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
|
| - __ Comment("BoxDoubleSlowPath");
|
| - __ Bind(entry_label());
|
| - const Class& double_class = compiler->double_class();
|
| - const Code& stub =
|
| - Code::Handle(StubCode::GetAllocationStubForClass(double_class));
|
| - const ExternalLabel label(double_class.ToCString(), stub.EntryPoint());
|
| -
|
| - LocationSummary* locs = instruction_->locs();
|
| - locs->live_registers()->Remove(locs->out());
|
| -
|
| - compiler->SaveLiveRegisters(locs);
|
| - compiler->GenerateCall(Scanner::kDummyTokenIndex, // No token position.
|
| - &label,
|
| - PcDescriptors::kOther,
|
| - locs);
|
| - __ MoveRegister(locs->out().reg(), EAX);
|
| - compiler->RestoreLiveRegisters(locs);
|
| -
|
| - __ jmp(exit_label());
|
| - }
|
| -
|
| - private:
|
| - BoxDoubleInstr* instruction_;
|
| -};
|
| -
|
| -
|
| void BoxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| BoxDoubleSlowPath* slow_path = new BoxDoubleSlowPath(this);
|
| compiler->AddSlowPathCode(slow_path);
|
| @@ -2657,7 +2845,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* UnboxDoubleInstr::MakeLocationSummary() const {
|
| +LocationSummary* UnboxDoubleInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t value_cid = value()->Type()->ToCid();
|
| const bool needs_temp = ((value_cid != kSmiCid) && (value_cid != kDoubleCid));
|
| @@ -2703,7 +2891,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* BoxFloat32x4Instr::MakeLocationSummary() const {
|
| +LocationSummary* BoxFloat32x4Instr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -2764,7 +2952,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* UnboxFloat32x4Instr::MakeLocationSummary() const {
|
| +LocationSummary* UnboxFloat32x4Instr::MakeLocationSummary(bool opt) const {
|
| const intptr_t value_cid = value()->Type()->ToCid();
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = value_cid == kFloat32x4Cid ? 0 : 1;
|
| @@ -2797,7 +2985,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
|
| +LocationSummary* BoxInt32x4Instr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -2858,7 +3046,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
|
| +LocationSummary* UnboxInt32x4Instr::MakeLocationSummary(bool opt) const {
|
| const intptr_t value_cid = value()->Type()->ToCid();
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = value_cid == kInt32x4Cid ? 0 : 1;
|
| @@ -2892,7 +3080,7 @@
|
|
|
|
|
|
|
| -LocationSummary* BinaryDoubleOpInstr::MakeLocationSummary() const {
|
| +LocationSummary* BinaryDoubleOpInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -2920,7 +3108,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* BinaryFloat32x4OpInstr::MakeLocationSummary() const {
|
| +LocationSummary* BinaryFloat32x4OpInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -2948,7 +3136,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Simd32x4ShuffleInstr::MakeLocationSummary() const {
|
| +LocationSummary* Simd32x4ShuffleInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -2990,7 +3178,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Simd32x4ShuffleMixInstr::MakeLocationSummary() const {
|
| +LocationSummary* Simd32x4ShuffleMixInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3017,7 +3205,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Simd32x4GetSignMaskInstr::MakeLocationSummary() const {
|
| +LocationSummary* Simd32x4GetSignMaskInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3037,7 +3225,8 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4ConstructorInstr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4ConstructorInstr::MakeLocationSummary(
|
| + bool opt) const {
|
| const intptr_t kNumInputs = 4;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3074,7 +3263,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4ZeroInstr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4ZeroInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 0;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3090,7 +3279,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4SplatInstr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4SplatInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3111,7 +3300,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4ComparisonInstr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4ComparisonInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3154,7 +3343,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4MinMaxInstr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4MinMaxInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3184,7 +3373,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4ScaleInstr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4ScaleInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3213,7 +3402,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4SqrtInstr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4SqrtInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3244,7 +3433,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4ZeroArgInstr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4ZeroArgInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3271,7 +3460,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4ClampInstr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4ClampInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 3;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3294,7 +3483,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4WithInstr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4WithInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3362,7 +3551,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
|
| +LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3378,7 +3567,8 @@
|
| }
|
|
|
|
|
| -LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
|
| +LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary(
|
| + bool opt) const {
|
| const intptr_t kNumInputs = 4;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3440,7 +3630,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
|
| +LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3485,7 +3675,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
|
| +LocationSummary* Int32x4SelectInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 3;
|
| const intptr_t kNumTemps = 1;
|
| LocationSummary* summary =
|
| @@ -3519,7 +3709,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
|
| +LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3575,7 +3765,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
|
| +LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3591,7 +3781,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
|
| +LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3631,7 +3821,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* MathUnaryInstr::MakeLocationSummary() const {
|
| +LocationSummary* MathUnaryInstr::MakeLocationSummary(bool opt) const {
|
| if ((kind() == MethodRecognizer::kMathSin) ||
|
| (kind() == MethodRecognizer::kMathCos)) {
|
| const intptr_t kNumInputs = 1;
|
| @@ -3667,7 +3857,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* MathMinMaxInstr::MakeLocationSummary() const {
|
| +LocationSummary* MathMinMaxInstr::MakeLocationSummary(bool opt) const {
|
| if (result_cid() == kDoubleCid) {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 1;
|
| @@ -3755,7 +3945,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* UnarySmiOpInstr::MakeLocationSummary() const {
|
| +LocationSummary* UnarySmiOpInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| return LocationSummary::Make(kNumInputs,
|
| Location::SameAsFirstInput(),
|
| @@ -3784,7 +3974,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* UnaryDoubleOpInstr::MakeLocationSummary() const {
|
| +LocationSummary* UnaryDoubleOpInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -3802,7 +3992,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
|
| +LocationSummary* SmiToDoubleInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* result =
|
| @@ -3821,7 +4011,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* DoubleToIntegerInstr::MakeLocationSummary() const {
|
| +LocationSummary* DoubleToIntegerInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* result =
|
| @@ -3865,7 +4055,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* DoubleToSmiInstr::MakeLocationSummary() const {
|
| +LocationSummary* DoubleToSmiInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* result = new LocationSummary(
|
| @@ -3888,7 +4078,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* DoubleToDoubleInstr::MakeLocationSummary() const {
|
| +LocationSummary* DoubleToDoubleInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* result =
|
| @@ -3918,7 +4108,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* InvokeMathCFunctionInstr::MakeLocationSummary() const {
|
| +LocationSummary* InvokeMathCFunctionInstr::MakeLocationSummary(bool opt) const {
|
| ASSERT((InputCount() == 1) || (InputCount() == 2));
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* result =
|
| @@ -3989,7 +4179,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* MergedMathInstr::MakeLocationSummary() const {
|
| +LocationSummary* MergedMathInstr::MakeLocationSummary(bool opt) const {
|
| if (kind() == MergedMathInstr::kTruncDivMod) {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 1;
|
| @@ -4139,7 +4329,8 @@
|
| }
|
|
|
|
|
| -LocationSummary* PolymorphicInstanceCallInstr::MakeLocationSummary() const {
|
| +LocationSummary* PolymorphicInstanceCallInstr::MakeLocationSummary(
|
| + bool opt) const {
|
| return MakeCallSummary();
|
| }
|
|
|
| @@ -4182,9 +4373,11 @@
|
| }
|
|
|
|
|
| -LocationSummary* BranchInstr::MakeLocationSummary() const {
|
| - UNREACHABLE();
|
| - return NULL;
|
| +LocationSummary* BranchInstr::MakeLocationSummary(bool opt) const {
|
| + comparison()->InitializeLocationSummary(opt);
|
| + // Branches don't produce a result.
|
| + comparison()->locs()->set_out(Location::NoLocation());
|
| + return comparison()->locs();
|
| }
|
|
|
|
|
| @@ -4193,7 +4386,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* CheckClassInstr::MakeLocationSummary() const {
|
| +LocationSummary* CheckClassInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -4253,7 +4446,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* CheckSmiInstr::MakeLocationSummary() const {
|
| +LocationSummary* CheckSmiInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* summary =
|
| @@ -4272,7 +4465,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* CheckArrayBoundInstr::MakeLocationSummary() const {
|
| +LocationSummary* CheckArrayBoundInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -4325,7 +4518,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* UnboxIntegerInstr::MakeLocationSummary() const {
|
| +LocationSummary* UnboxIntegerInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t value_cid = value()->Type()->ToCid();
|
| const bool needs_temp = ((value_cid != kSmiCid) && (value_cid != kMintCid));
|
| @@ -4373,7 +4566,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* BoxIntegerInstr::MakeLocationSummary() const {
|
| +LocationSummary* BoxIntegerInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 2;
|
| LocationSummary* summary =
|
| @@ -4461,7 +4654,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* BinaryMintOpInstr::MakeLocationSummary() const {
|
| +LocationSummary* BinaryMintOpInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| switch (op_kind()) {
|
| case Token::kBIT_AND:
|
| @@ -4551,7 +4744,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* ShiftMintOpInstr::MakeLocationSummary() const {
|
| +LocationSummary* ShiftMintOpInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = op_kind() == Token::kSHL ? 2 : 1;
|
| LocationSummary* summary =
|
| @@ -4625,7 +4818,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* UnaryMintOpInstr::MakeLocationSummary() const {
|
| +LocationSummary* UnaryMintOpInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps =
|
| FLAG_throw_on_javascript_int_overflow ? 1 : 0;
|
| @@ -4658,7 +4851,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* ThrowInstr::MakeLocationSummary() const {
|
| +LocationSummary* ThrowInstr::MakeLocationSummary(bool opt) const {
|
| return new LocationSummary(0, 0, LocationSummary::kCall);
|
| }
|
|
|
| @@ -4674,7 +4867,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* ReThrowInstr::MakeLocationSummary() const {
|
| +LocationSummary* ReThrowInstr::MakeLocationSummary(bool opt) const {
|
| return new LocationSummary(0, 0, LocationSummary::kCall);
|
| }
|
|
|
| @@ -4714,7 +4907,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* GotoInstr::MakeLocationSummary() const {
|
| +LocationSummary* GotoInstr::MakeLocationSummary(bool opt) const {
|
| return new LocationSummary(0, 0, LocationSummary::kNoCall);
|
| }
|
|
|
| @@ -4743,7 +4936,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* CurrentContextInstr::MakeLocationSummary() const {
|
| +LocationSummary* CurrentContextInstr::MakeLocationSummary(bool opt) const {
|
| return LocationSummary::Make(0,
|
| Location::RequiresRegister(),
|
| LocationSummary::kNoCall);
|
| @@ -4755,7 +4948,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* StrictCompareInstr::MakeLocationSummary() const {
|
| +LocationSummary* StrictCompareInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| if (needs_number_check()) {
|
| @@ -4841,11 +5034,11 @@
|
| }
|
|
|
|
|
| -LocationSummary* IfThenElseInstr::MakeLocationSummary() const {
|
| - LocationSummary* locs = comparison()->MakeLocationSummary();
|
| +LocationSummary* IfThenElseInstr::MakeLocationSummary(bool opt) const {
|
| + comparison()->InitializeLocationSummary(opt);
|
| // TODO(vegorov): support byte register constraints in the register allocator.
|
| - locs->set_out(Location::RegisterLocation(EDX));
|
| - return locs;
|
| + comparison()->locs()->set_out(Location::RegisterLocation(EDX));
|
| + return comparison()->locs();
|
| }
|
|
|
|
|
| @@ -4898,7 +5091,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* ClosureCallInstr::MakeLocationSummary() const {
|
| +LocationSummary* ClosureCallInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 0;
|
| const intptr_t kNumTemps = 1;
|
| LocationSummary* result =
|
| @@ -4928,7 +5121,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* BooleanNegateInstr::MakeLocationSummary() const {
|
| +LocationSummary* BooleanNegateInstr::MakeLocationSummary(bool opt) const {
|
| return LocationSummary::Make(1,
|
| Location::RequiresRegister(),
|
| LocationSummary::kNoCall);
|
| @@ -4948,7 +5141,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* StoreVMFieldInstr::MakeLocationSummary() const {
|
| +LocationSummary* StoreVMFieldInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* locs =
|
| @@ -4974,7 +5167,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* AllocateObjectInstr::MakeLocationSummary() const {
|
| +LocationSummary* AllocateObjectInstr::MakeLocationSummary(bool opt) const {
|
| return MakeCallSummary();
|
| }
|
|
|
| @@ -4990,7 +5183,7 @@
|
| }
|
|
|
|
|
| -LocationSummary* CreateClosureInstr::MakeLocationSummary() const {
|
| +LocationSummary* CreateClosureInstr::MakeLocationSummary(bool opt) const {
|
| return MakeCallSummary();
|
| }
|
|
|
|
|