| Index: runtime/vm/intermediate_language_x64.cc
|
| ===================================================================
|
| --- runtime/vm/intermediate_language_x64.cc (revision 11758)
|
| +++ runtime/vm/intermediate_language_x64.cc (working copy)
|
| @@ -1751,56 +1751,6 @@
|
| }
|
|
|
|
|
| -LocationSummary* BinaryDoubleOpComp::MakeLocationSummary() const {
|
| - return MakeCallSummary(); // Calls into a stub for allocation.
|
| -}
|
| -
|
| -
|
| -void BinaryDoubleOpComp::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| - Register left = RBX;
|
| - Register right = RCX;
|
| - Register temp = RDX;
|
| - Register result = locs()->out().reg();
|
| -
|
| - const Class& double_class = compiler->double_class();
|
| - const Code& stub =
|
| - Code::Handle(StubCode::GetAllocationStubForClass(double_class));
|
| - const ExternalLabel label(double_class.ToCString(), stub.EntryPoint());
|
| - compiler->GenerateCall(instance_call()->token_pos(),
|
| - &label,
|
| - PcDescriptors::kOther,
|
| - locs());
|
| - // Newly allocated object is now in the result register (RAX).
|
| - ASSERT(result == RAX);
|
| - __ movq(right, Address(RSP, 0));
|
| - __ movq(left, Address(RSP, kWordSize));
|
| -
|
| - Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
|
| - kDeoptBinaryDoubleOp);
|
| -
|
| - // Binary operation of two Smi's produces a Smi not a double.
|
| - __ movq(temp, left);
|
| - __ orq(temp, right);
|
| - __ testq(temp, Immediate(kSmiTagMask));
|
| - __ j(ZERO, deopt);
|
| -
|
| - compiler->LoadDoubleOrSmiToXmm(XMM0, left, temp, deopt);
|
| - compiler->LoadDoubleOrSmiToXmm(XMM1, right, temp, deopt);
|
| -
|
| - switch (op_kind()) {
|
| - case Token::kADD: __ addsd(XMM0, XMM1); break;
|
| - case Token::kSUB: __ subsd(XMM0, XMM1); break;
|
| - case Token::kMUL: __ mulsd(XMM0, XMM1); break;
|
| - case Token::kDIV: __ divsd(XMM0, XMM1); break;
|
| - default: UNREACHABLE();
|
| - }
|
| -
|
| - __ movsd(FieldAddress(result, Double::value_offset()), XMM0);
|
| -
|
| - __ Drop(2);
|
| -}
|
| -
|
| -
|
| LocationSummary* CheckEitherNonSmiComp::MakeLocationSummary() const {
|
| ASSERT((left()->ResultCid() != kDoubleCid) &&
|
| (right()->ResultCid() != kDoubleCid));
|
|
|