| Index: runtime/vm/simulator_dbc.cc
|
| diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc
|
| index 053c81a3185410aaa930ab54eaecdcab8269ed30..92b158e62c79f692caab36408755bbc71b3352ce 100644
|
| --- a/runtime/vm/simulator_dbc.cc
|
| +++ b/runtime/vm/simulator_dbc.cc
|
| @@ -86,21 +86,17 @@ class SimulatorSetjmpBuffer {
|
| DISALLOW_COPY_AND_ASSIGN(SimulatorSetjmpBuffer);
|
| };
|
|
|
| -
|
| DART_FORCE_INLINE static RawObject** SavedCallerFP(RawObject** FP) {
|
| return reinterpret_cast<RawObject**>(FP[kSavedCallerFpSlotFromFp]);
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE static RawObject** FrameArguments(RawObject** FP,
|
| intptr_t argc) {
|
| return FP - (kDartFrameFixedSize + argc);
|
| }
|
|
|
| -
|
| #define RAW_CAST(Type, val) (SimulatorHelpers::CastTo##Type(val))
|
|
|
| -
|
| class SimulatorHelpers {
|
| public:
|
| #define DEFINE_CASTS(Type) \
|
| @@ -458,7 +454,6 @@ class SimulatorHelpers {
|
| return static_cast<RawCode*>(FP[kPcMarkerSlotFromFp]);
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE static void SetFrameCode(RawObject** FP, RawCode* code) {
|
| ASSERT(GetClassId(code) == kCodeCid);
|
| FP[kPcMarkerSlotFromFp] = code;
|
| @@ -474,22 +469,18 @@ class SimulatorHelpers {
|
| }
|
| };
|
|
|
| -
|
| DART_FORCE_INLINE static uint32_t* SavedCallerPC(RawObject** FP) {
|
| return reinterpret_cast<uint32_t*>(FP[kSavedCallerPcSlotFromFp]);
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE static RawFunction* FrameFunction(RawObject** FP) {
|
| RawFunction* function = static_cast<RawFunction*>(FP[kFunctionSlotFromFp]);
|
| ASSERT(SimulatorHelpers::GetClassId(function) == kFunctionCid);
|
| return function;
|
| }
|
|
|
| -
|
| IntrinsicHandler Simulator::intrinsics_[Simulator::kIntrinsicCount];
|
|
|
| -
|
| // Synchronization primitives support.
|
| void Simulator::InitOnce() {
|
| for (intptr_t i = 0; i < kIntrinsicCount; i++) {
|
| @@ -529,7 +520,6 @@ void Simulator::InitOnce() {
|
| SimulatorHelpers::SetAsyncThreadStackTrace;
|
| }
|
|
|
| -
|
| Simulator::Simulator() : stack_(NULL), fp_(NULL) {
|
| // Setup simulator support first. Some of this information is needed to
|
| // setup the architecture state.
|
| @@ -547,7 +537,6 @@ Simulator::Simulator() : stack_(NULL), fp_(NULL) {
|
| NOT_IN_PRODUCT(icount_ = 0;)
|
| }
|
|
|
| -
|
| Simulator::~Simulator() {
|
| delete[] stack_;
|
| Isolate* isolate = Isolate::Current();
|
| @@ -556,7 +545,6 @@ Simulator::~Simulator() {
|
| }
|
| }
|
|
|
| -
|
| // Get the active Simulator for the current isolate.
|
| Simulator* Simulator::Current() {
|
| Simulator* simulator = Isolate::Current()->simulator();
|
| @@ -567,7 +555,6 @@ Simulator* Simulator::Current() {
|
| return simulator;
|
| }
|
|
|
| -
|
| // Returns the top of the stack area to enable checking for stack pointer
|
| // validity.
|
| uword Simulator::StackTop() const {
|
| @@ -577,14 +564,12 @@ uword Simulator::StackTop() const {
|
| (OSThread::GetSpecifiedStackSize() + OSThread::kStackSizeBuffer);
|
| }
|
|
|
| -
|
| #if !defined(PRODUCT)
|
| // Returns true if tracing of executed instructions is enabled.
|
| DART_FORCE_INLINE bool Simulator::IsTracingExecution() const {
|
| return icount_ > FLAG_trace_sim_after;
|
| }
|
|
|
| -
|
| // Prints bytecode instruction at given pc for instruction tracing.
|
| DART_NOINLINE void Simulator::TraceInstruction(uint32_t* pc) const {
|
| THR_Print("%" Pu64 " ", icount_);
|
| @@ -597,7 +582,6 @@ DART_NOINLINE void Simulator::TraceInstruction(uint32_t* pc) const {
|
| }
|
| #endif // !defined(PRODUCT)
|
|
|
| -
|
| // Calls into the Dart runtime are based on this interface.
|
| typedef void (*SimulatorRuntimeCall)(NativeArguments arguments);
|
|
|
| @@ -614,7 +598,6 @@ typedef double (*SimulatorLeafFloatRuntimeCall)(double d0, double d1);
|
| typedef void (*SimulatorBootstrapNativeCall)(NativeArguments* arguments);
|
| typedef void (*SimulatorNativeCall)(NativeArguments* arguments, uword target);
|
|
|
| -
|
| void Simulator::Exit(Thread* thread,
|
| RawObject** base,
|
| RawObject** frame,
|
| @@ -661,7 +644,6 @@ DART_FORCE_INLINE static bool SignedAddWithOverflow(intptr_t lhs,
|
| return (res != 0);
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE static bool SignedSubWithOverflow(intptr_t lhs,
|
| intptr_t rhs,
|
| intptr_t* out) {
|
| @@ -692,7 +674,6 @@ DART_FORCE_INLINE static bool SignedSubWithOverflow(intptr_t lhs,
|
| return (res != 0);
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE static bool SignedMulWithOverflow(intptr_t lhs,
|
| intptr_t rhs,
|
| intptr_t* out) {
|
| @@ -737,12 +718,10 @@ DART_FORCE_INLINE static bool SignedMulWithOverflow(intptr_t lhs,
|
| return (res != 0);
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE static bool AreBothSmis(intptr_t a, intptr_t b) {
|
| return ((a | b) & kHeapObjectTag) == 0;
|
| }
|
|
|
| -
|
| #define SMI_MUL(lhs, rhs, pres) SignedMulWithOverflow((lhs), (rhs) >> 1, pres)
|
| #define SMI_COND(cond, lhs, rhs, pres) \
|
| ((*(pres) = ((lhs cond rhs) ? true_value : false_value)), false)
|
| @@ -753,7 +732,6 @@ DART_FORCE_INLINE static bool AreBothSmis(intptr_t a, intptr_t b) {
|
| #define SMI_BITAND(lhs, rhs, pres) ((*(pres) = ((lhs) & (rhs))), false)
|
| #define SMI_BITXOR(lhs, rhs, pres) ((*(pres) = ((lhs) ^ (rhs))), false)
|
|
|
| -
|
| void Simulator::CallRuntime(Thread* thread,
|
| RawObject** base,
|
| RawObject** exit_frame,
|
| @@ -767,7 +745,6 @@ void Simulator::CallRuntime(Thread* thread,
|
| reinterpret_cast<RuntimeFunction>(target)(native_args);
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE static void EnterSyntheticFrame(RawObject*** FP,
|
| RawObject*** SP,
|
| uint32_t* pc) {
|
| @@ -779,7 +756,6 @@ DART_FORCE_INLINE static void EnterSyntheticFrame(RawObject*** FP,
|
| *SP = fp - 1;
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE static void LeaveSyntheticFrame(RawObject*** FP,
|
| RawObject*** SP) {
|
| RawObject** fp = *FP;
|
| @@ -787,7 +763,6 @@ DART_FORCE_INLINE static void LeaveSyntheticFrame(RawObject*** FP,
|
| *SP = fp - kDartFrameFixedSize;
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE void Simulator::Invoke(Thread* thread,
|
| RawObject** call_base,
|
| RawObject** call_top,
|
| @@ -809,7 +784,6 @@ DART_FORCE_INLINE void Simulator::Invoke(Thread* thread,
|
| *SP = *FP - 1;
|
| }
|
|
|
| -
|
| void Simulator::InlineCacheMiss(int checked_args,
|
| Thread* thread,
|
| RawICData* icdata,
|
| @@ -844,7 +818,6 @@ void Simulator::InlineCacheMiss(int checked_args,
|
| result, reinterpret_cast<uword>(handler));
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE void Simulator::InstanceCall1(Thread* thread,
|
| RawICData* icdata,
|
| RawObject** call_base,
|
| @@ -887,7 +860,6 @@ DART_FORCE_INLINE void Simulator::InstanceCall1(Thread* thread,
|
| Invoke(thread, call_base, top, pp, pc, FP, SP);
|
| }
|
|
|
| -
|
| DART_FORCE_INLINE void Simulator::InstanceCall2(Thread* thread,
|
| RawICData* icdata,
|
| RawObject** call_base,
|
| @@ -932,7 +904,6 @@ DART_FORCE_INLINE void Simulator::InstanceCall2(Thread* thread,
|
| Invoke(thread, call_base, top, pp, pc, FP, SP);
|
| }
|
|
|
| -
|
| // Note: functions below are marked DART_NOINLINE to recover performance on
|
| // ARM where inlining these functions into the interpreter loop seemed to cause
|
| // some code quality issues.
|
| @@ -952,7 +923,6 @@ static DART_NOINLINE bool InvokeRuntime(Thread* thread,
|
| }
|
| }
|
|
|
| -
|
| static DART_NOINLINE bool InvokeBootstrapNative(Thread* thread,
|
| Simulator* sim,
|
| SimulatorBootstrapNativeCall f,
|
| @@ -969,7 +939,6 @@ static DART_NOINLINE bool InvokeBootstrapNative(Thread* thread,
|
| }
|
| }
|
|
|
| -
|
| static DART_NOINLINE bool InvokeNativeNoScopeWrapper(Thread* thread,
|
| Simulator* sim,
|
| Dart_NativeFunction f,
|
| @@ -987,7 +956,6 @@ static DART_NOINLINE bool InvokeNativeNoScopeWrapper(Thread* thread,
|
| }
|
| }
|
|
|
| -
|
| static DART_NOINLINE bool InvokeNativeAutoScopeWrapper(Thread* thread,
|
| Simulator* sim,
|
| Dart_NativeFunction f,
|
| @@ -1068,7 +1036,6 @@ static DART_NOINLINE bool InvokeNativeAutoScopeWrapper(Thread* thread,
|
| USE(rD)
|
| #define DECODE_A_X rD = (static_cast<int32_t>(op) >> Bytecode::kDShift);
|
|
|
| -
|
| #define SMI_FASTPATH_ICDATA_INC \
|
| do { \
|
| ASSERT(Bytecode::IsCallOpcode(*pc)); \
|
| @@ -1118,7 +1085,6 @@ static DART_NOINLINE bool InvokeNativeAutoScopeWrapper(Thread* thread,
|
| Func(lhs, rhs, slot); \
|
| }
|
|
|
| -
|
| // Exception handling helper. Gets handler FP and PC from the Simulator where
|
| // they were stored by Simulator::Longjmp and proceeds to execute the handler.
|
| // Corner case: handler PC can be a fake marker that marks entry frame, which
|
| @@ -1162,7 +1128,6 @@ static DART_NOINLINE bool InvokeNativeAutoScopeWrapper(Thread* thread,
|
|
|
| #define LOAD_CONSTANT(index) (pp->data()[(index)].raw_obj_)
|
|
|
| -
|
| // Returns true if deoptimization succeeds.
|
| DART_FORCE_INLINE bool Simulator::Deoptimize(Thread* thread,
|
| RawObjectPool** pp,
|
| @@ -1219,7 +1184,6 @@ DART_FORCE_INLINE bool Simulator::Deoptimize(Thread* thread,
|
| return true;
|
| }
|
|
|
| -
|
| RawObject* Simulator::Call(const Code& code,
|
| const Array& arguments_descriptor,
|
| const Array& arguments,
|
| @@ -3904,7 +3868,6 @@ RawObject* Simulator::Call(const Code& code,
|
| return 0;
|
| }
|
|
|
| -
|
| void Simulator::JumpToFrame(uword pc, uword sp, uword fp, Thread* thread) {
|
| // Walk over all setjmp buffers (simulated --> C++ transitions)
|
| // and try to find the setjmp associated with the simulated frame pointer.
|
|
|