| Index: runtime/vm/intermediate_language_x64.cc
|
| diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
|
| index 27684c40a3e4641660ae450a17c130d36f041665..7cebfd70433e35810ad54058fdd001769dd03c85 100644
|
| --- a/runtime/vm/intermediate_language_x64.cc
|
| +++ b/runtime/vm/intermediate_language_x64.cc
|
| @@ -5641,36 +5641,11 @@ LocationSummary* MergedMathInstr::MakeLocationSummary(Zone* zone,
|
| Location::RegisterLocation(RDX)));
|
| return summary;
|
| }
|
| - if (kind() == MergedMathInstr::kSinCos) {
|
| - const intptr_t kNumInputs = 1;
|
| - const intptr_t kNumTemps = 1;
|
| - LocationSummary* summary = new (zone)
|
| - LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
|
| - // Because we always call into the runtime (LocationSummary::kCall) we
|
| - // must specify each input, temp, and output register explicitly.
|
| - summary->set_in(0, Location::FpuRegisterLocation(XMM1));
|
| - // R13 is chosen because it is callee saved so we do not need to back it
|
| - // up before calling into the runtime.
|
| - summary->set_temp(0, Location::RegisterLocation(R13));
|
| - summary->set_out(0, Location::Pair(Location::FpuRegisterLocation(XMM2),
|
| - Location::FpuRegisterLocation(XMM3)));
|
| - return summary;
|
| - }
|
| UNIMPLEMENTED();
|
| return NULL;
|
| }
|
|
|
|
|
| -typedef void (*SinCosCFunction)(double x, double* res_sin, double* res_cos);
|
| -
|
| -extern const RuntimeEntry kSinCosRuntimeEntry(
|
| - "libc_sincos",
|
| - reinterpret_cast<RuntimeFunction>(static_cast<SinCosCFunction>(&SinCos)),
|
| - 1,
|
| - true,
|
| - true);
|
| -
|
| -
|
| void MergedMathInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| Label* deopt = NULL;
|
| if (CanDeoptimize()) {
|
| @@ -5764,41 +5739,6 @@ void MergedMathInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| // in-range arguments, cannot create out-of-range result.
|
| return;
|
| }
|
| - if (kind() == MergedMathInstr::kSinCos) {
|
| - ASSERT(locs()->out(0).IsPairLocation());
|
| - PairLocation* pair = locs()->out(0).AsPairLocation();
|
| - XmmRegister out1 = pair->At(0).fpu_reg();
|
| - XmmRegister out2 = pair->At(1).fpu_reg();
|
| -
|
| - // Save RSP.
|
| - __ movq(locs()->temp(0).reg(), RSP);
|
| - // +-------------------------------+
|
| - // | double-argument | <- TOS
|
| - // +-------------------------------+
|
| - // | address-cos-result | +8
|
| - // +-------------------------------+
|
| - // | address-sin-result | +16
|
| - // +-------------------------------+
|
| - // | double-storage-for-cos-result | +24
|
| - // +-------------------------------+
|
| - // | double-storage-for-sin-result | +32
|
| - // +-------------------------------+
|
| - // ....
|
| - __ ReserveAlignedFrameSpace(kDoubleSize * 3 + kWordSize * 2);
|
| - __ movsd(Address(RSP, 0), locs()->in(0).fpu_reg());
|
| -
|
| - __ leaq(RDI, Address(RSP, 2 * kWordSize + kDoubleSize));
|
| - __ leaq(RSI, Address(RSP, 2 * kWordSize + 2 * kDoubleSize));
|
| - __ movaps(XMM0, locs()->in(0).fpu_reg());
|
| -
|
| - __ CallRuntime(kSinCosRuntimeEntry, InputCount());
|
| - __ movsd(out2, Address(RSP, 2 * kWordSize + kDoubleSize * 2)); // sin.
|
| - __ movsd(out1, Address(RSP, 2 * kWordSize + kDoubleSize)); // cos.
|
| - // Restore RSP.
|
| - __ movq(RSP, locs()->temp(0).reg());
|
| -
|
| - return;
|
| - }
|
| UNIMPLEMENTED();
|
| }
|
|
|
|
|