| Index: runtime/vm/intermediate_language_x64.cc
|
| ===================================================================
|
| --- runtime/vm/intermediate_language_x64.cc (revision 12438)
|
| +++ runtime/vm/intermediate_language_x64.cc (working copy)
|
| @@ -2016,64 +2016,6 @@
|
| }
|
|
|
|
|
| -LocationSummary* NumberNegateInstr::MakeLocationSummary() const {
|
| - const intptr_t kNumInputs = 1;
|
| - const intptr_t kNumTemps = 1; // Needed for doubles.
|
| - LocationSummary* summary =
|
| - new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kCall);
|
| - summary->set_in(0, Location::RegisterLocation(RAX));
|
| - summary->set_out(Location::RegisterLocation(RAX));
|
| - summary->set_temp(0, Location::RegisterLocation(RCX));
|
| - return summary;
|
| -}
|
| -
|
| -
|
| -void NumberNegateInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| - const ICData& ic_data = *instance_call()->ic_data();
|
| - ASSERT(!ic_data.IsNull());
|
| - ASSERT(ic_data.num_args_tested() == 1);
|
| -
|
| - // TODO(srdjan): Implement for more checks.
|
| - ASSERT(ic_data.NumberOfChecks() == 1);
|
| - intptr_t test_class_id;
|
| - Function& target = Function::Handle();
|
| - ic_data.GetOneClassCheckAt(0, &test_class_id, &target);
|
| -
|
| - Register value = locs()->in(0).reg();
|
| - Register result = locs()->out().reg();
|
| - ASSERT(value == result);
|
| - Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
|
| - kDeoptUnaryOp);
|
| - if (test_class_id == kDoubleCid) {
|
| - Register temp = locs()->temp(0).reg();
|
| - __ testq(value, Immediate(kSmiTagMask));
|
| - __ j(ZERO, deopt); // Smi.
|
| - __ CompareClassId(value, kDoubleCid);
|
| - __ j(NOT_EQUAL, deopt);
|
| - // Allocate result object.
|
| - const Class& double_class = compiler->double_class();
|
| - const Code& stub =
|
| - Code::Handle(StubCode::GetAllocationStubForClass(double_class));
|
| - const ExternalLabel label(double_class.ToCString(), stub.EntryPoint());
|
| - __ pushq(value);
|
| - compiler->GenerateCall(instance_call()->token_pos(),
|
| - &label,
|
| - PcDescriptors::kOther,
|
| - instance_call()->locs());
|
| - // Result is in RAX.
|
| - ASSERT(result != temp);
|
| - __ movq(result, RAX);
|
| - __ popq(temp);
|
| - __ movsd(XMM0, FieldAddress(temp, Double::value_offset()));
|
| - __ DoubleNegate(XMM0);
|
| - __ movsd(FieldAddress(result, Double::value_offset()), XMM0);
|
| - } else {
|
| - UNREACHABLE();
|
| - }
|
| - ASSERT(ResultCid() == kDoubleCid);
|
| -}
|
| -
|
| -
|
| LocationSummary* DoubleToDoubleInstr::MakeLocationSummary() const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
|
|