Index: runtime/vm/simulator_dbc.cc |
diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc |
index 22b159f9c13dea18140f57b85bd63ed01853de21..44e1e5c97cca85d35ffc7eead8e48b4854084a60 100644 |
--- a/runtime/vm/simulator_dbc.cc |
+++ b/runtime/vm/simulator_dbc.cc |
@@ -1711,6 +1711,14 @@ RawObject* Simulator::Call(const Code& code, |
} |
{ |
+ BYTECODE(ShrImm, A_B_C); |
+ const uint8_t shift = rC; |
+ const intptr_t lhs = reinterpret_cast<intptr_t>(FP[rB]) >> kSmiTagSize; |
+ *reinterpret_cast<intptr_t*>(&FP[rA]) = (lhs >> shift) << kSmiTagSize; |
+ DISPATCH(); |
+ } |
+ |
+ { |
BYTECODE(Min, A_B_C); |
const intptr_t lhs = reinterpret_cast<intptr_t>(FP[rB]); |
const intptr_t rhs = reinterpret_cast<intptr_t>(FP[rC]); |
@@ -1828,6 +1836,38 @@ RawObject* Simulator::Call(const Code& code, |
} |
{ |
+ BYTECODE(DSin, A_D); |
+ const double value = bit_cast<double, RawObject*>(FP[rD]); |
+ FP[rA] = bit_cast<RawObject*, double>(sin(value)); |
+ DISPATCH(); |
+ } |
+ |
+ { |
+ BYTECODE(DCos, A_D); |
+ const double value = bit_cast<double, RawObject*>(FP[rD]); |
+ FP[rA] = bit_cast<RawObject*, double>(cos(value)); |
+ DISPATCH(); |
+ } |
+ |
+ { |
+ BYTECODE(DPow, A_B_C); |
+ const double lhs = bit_cast<double, RawObject*>(FP[rB]); |
+ const double rhs = bit_cast<double, RawObject*>(FP[rC]); |
+ const double result = pow(lhs, rhs); |
+ FP[rA] = bit_cast<RawObject*, double>(result); |
+ DISPATCH(); |
+ } |
+ |
+ { |
+ BYTECODE(DMod, A_B_C); |
+ const double lhs = bit_cast<double, RawObject*>(FP[rB]); |
+ const double rhs = bit_cast<double, RawObject*>(FP[rC]); |
+ const double result = DartModulo(lhs, rhs); |
+ FP[rA] = bit_cast<RawObject*, double>(result); |
+ DISPATCH(); |
+ } |
+ |
+ { |
BYTECODE(DMin, A_B_C); |
const double lhs = bit_cast<double, RawObject*>(FP[rB]); |
const double rhs = bit_cast<double, RawObject*>(FP[rC]); |
@@ -1910,6 +1950,30 @@ RawObject* Simulator::Call(const Code& code, |
} |
{ |
+ BYTECODE(DSin, A_D); |
+ UNREACHABLE(); |
+ DISPATCH(); |
+ } |
+ |
+ { |
+ BYTECODE(DCos, A_D); |
+ UNREACHABLE(); |
+ DISPATCH(); |
+ } |
+ |
+ { |
+ BYTECODE(DPow, A_B_C); |
+ UNREACHABLE(); |
+ DISPATCH(); |
+ } |
+ |
+ { |
+ BYTECODE(DMod, A_B_C); |
+ UNREACHABLE(); |
+ DISPATCH(); |
+ } |
+ |
+ { |
BYTECODE(DMin, A_B_C); |
UNREACHABLE(); |
DISPATCH(); |
@@ -2700,6 +2764,17 @@ RawObject* Simulator::Call(const Code& code, |
} |
{ |
+ BYTECODE(StoreFloat64Indexed, A_B_C); |
+ ASSERT(RawObject::IsTypedDataClassId(FP[rA]->GetClassId())); |
+ RawTypedData* array = reinterpret_cast<RawTypedData*>(FP[rA]); |
+ RawSmi* index = RAW_CAST(Smi, FP[rB]); |
+ ASSERT(SimulatorHelpers::CheckIndex(index, array->ptr()->length_)); |
+ double* data = reinterpret_cast<double*>(array->ptr()->data()); |
+ data[Smi::Value(index)] = bit_cast<double, RawObject*>(FP[rC]); |
+ DISPATCH(); |
+ } |
+ |
+ { |
BYTECODE(LoadIndexed, A_B_C); |
RawArray* array = RAW_CAST(Array, FP[rB]); |
RawSmi* index = RAW_CAST(Smi, FP[rC]); |
@@ -2709,6 +2784,35 @@ RawObject* Simulator::Call(const Code& code, |
} |
{ |
+ BYTECODE(LoadFloat64Indexed, A_B_C); |
+ ASSERT(RawObject::IsTypedDataClassId(FP[rB]->GetClassId())); |
+ RawTypedData* array = reinterpret_cast<RawTypedData*>(FP[rB]); |
+ RawSmi* index = RAW_CAST(Smi, FP[rC]); |
+ ASSERT(SimulatorHelpers::CheckIndex(index, array->ptr()->length_)); |
+ double* data = reinterpret_cast<double*>(array->ptr()->data()); |
+ FP[rA] = bit_cast<RawObject*, double>(data[Smi::Value(index)]); |
+ DISPATCH(); |
+ } |
+ |
+ { |
+ BYTECODE(LoadOneByteStringIndexed, A_B_C); |
+ RawOneByteString* array = RAW_CAST(OneByteString, FP[rB]); |
+ RawSmi* index = RAW_CAST(Smi, FP[rC]); |
+ ASSERT(SimulatorHelpers::CheckIndex(index, array->ptr()->length_)); |
+ FP[rA] = Smi::New(array->ptr()->data()[Smi::Value(index)]); |
+ DISPATCH(); |
+ } |
+ |
+ { |
+ BYTECODE(LoadTwoByteStringIndexed, A_B_C); |
+ RawTwoByteString* array = RAW_CAST(TwoByteString, FP[rB]); |
+ RawSmi* index = RAW_CAST(Smi, FP[rC]); |
+ ASSERT(SimulatorHelpers::CheckIndex(index, array->ptr()->length_)); |
+ FP[rA] = Smi::New(array->ptr()->data()[Smi::Value(index)]); |
+ DISPATCH(); |
+ } |
+ |
+ { |
BYTECODE(Deopt, A_D); |
const bool is_lazy = rD == 0; |