| Index: runtime/vm/simulator_dbc.cc
|
| diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc
|
| index a34d93badcfc3cb1d322075d0b73157e5d2c8550..15c77a29f346570bcd0d56ed72b4c263b23fcf0d 100644
|
| --- a/runtime/vm/simulator_dbc.cc
|
| +++ b/runtime/vm/simulator_dbc.cc
|
| @@ -32,9 +32,13 @@
|
|
|
| namespace dart {
|
|
|
| -DEFINE_FLAG(uint64_t, trace_sim_after, ULLONG_MAX,
|
| +DEFINE_FLAG(uint64_t,
|
| + trace_sim_after,
|
| + ULLONG_MAX,
|
| "Trace simulator execution after instruction count reached.");
|
| -DEFINE_FLAG(uint64_t, stop_sim_at, ULLONG_MAX,
|
| +DEFINE_FLAG(uint64_t,
|
| + stop_sim_at,
|
| + ULLONG_MAX,
|
| "Instruction address or instruction count to stop simulator at.");
|
|
|
| #define LIKELY(cond) __builtin_expect((cond), 1)
|
| @@ -97,17 +101,17 @@ DART_FORCE_INLINE static RawObject** FrameArguments(RawObject** FP,
|
| }
|
|
|
|
|
| -#define RAW_CAST(Type, val) (SimulatorHelpers::CastTo##Type(val))
|
| +#define RAW_CAST(Type, val) (SimulatorHelpers::CastTo##Type(val))
|
|
|
|
|
| class SimulatorHelpers {
|
| public:
|
| -#define DEFINE_CASTS(Type) \
|
| - DART_FORCE_INLINE static Raw##Type* CastTo##Type(RawObject* obj) { \
|
| - ASSERT((k##Type##Cid == kSmiCid) ? !obj->IsHeapObject() \
|
| - : obj->Is##Type()); \
|
| - return reinterpret_cast<Raw##Type*>(obj); \
|
| - }
|
| +#define DEFINE_CASTS(Type) \
|
| + DART_FORCE_INLINE static Raw##Type* CastTo##Type(RawObject* obj) { \
|
| + ASSERT((k##Type##Cid == kSmiCid) ? !obj->IsHeapObject() \
|
| + : obj->Is##Type()); \
|
| + return reinterpret_cast<Raw##Type*>(obj); \
|
| + }
|
| CLASS_LIST(DEFINE_CASTS)
|
| #undef DEFINE_CASTS
|
|
|
| @@ -132,8 +136,7 @@ class SimulatorHelpers {
|
| const intptr_t raw_smi_old =
|
| reinterpret_cast<intptr_t>(entries[offset + count_offset]);
|
| const intptr_t raw_smi_new = raw_smi_old + Smi::RawValue(1);
|
| - *reinterpret_cast<intptr_t*>(&entries[offset + count_offset]) =
|
| - raw_smi_new;
|
| + *reinterpret_cast<intptr_t*>(&entries[offset + count_offset]) = raw_smi_new;
|
| }
|
|
|
| DART_FORCE_INLINE static bool IsStrictEqualWithNumberCheck(RawObject* lhs,
|
| @@ -173,10 +176,9 @@ class SimulatorHelpers {
|
| }
|
|
|
| DART_FORCE_INLINE static bool CheckIndex(RawSmi* index, RawSmi* length) {
|
| - return !index->IsHeapObject() &&
|
| - (reinterpret_cast<intptr_t>(index) >= 0) &&
|
| + return !index->IsHeapObject() && (reinterpret_cast<intptr_t>(index) >= 0) &&
|
| (reinterpret_cast<intptr_t>(index) <
|
| - reinterpret_cast<intptr_t>(length));
|
| + reinterpret_cast<intptr_t>(length));
|
| }
|
|
|
| static bool ObjectArraySetIndexed(Thread* thread,
|
| @@ -247,9 +249,8 @@ class SimulatorHelpers {
|
| RawObject** result) {
|
| RawObject** args = FrameArguments(FP, 1);
|
| RawDouble* d = static_cast<RawDouble*>(args[0]);
|
| - *result = isnan(d->ptr()->value_)
|
| - ? Bool::True().raw()
|
| - : Bool::False().raw();
|
| + *result =
|
| + isnan(d->ptr()->value_) ? Bool::True().raw() : Bool::False().raw();
|
| return true;
|
| }
|
|
|
| @@ -258,15 +259,12 @@ class SimulatorHelpers {
|
| RawObject** result) {
|
| RawObject** args = FrameArguments(FP, 1);
|
| RawDouble* d = static_cast<RawDouble*>(args[0]);
|
| - *result = isinf(d->ptr()->value_)
|
| - ? Bool::True().raw()
|
| - : Bool::False().raw();
|
| + *result =
|
| + isinf(d->ptr()->value_) ? Bool::True().raw() : Bool::False().raw();
|
| return true;
|
| }
|
|
|
| - static bool ObjectEquals(Thread* thread,
|
| - RawObject** FP,
|
| - RawObject** result) {
|
| + static bool ObjectEquals(Thread* thread, RawObject** FP, RawObject** result) {
|
| RawObject** args = FrameArguments(FP, 2);
|
| *result = args[0] == args[1] ? Bool::True().raw() : Bool::False().raw();
|
| return true;
|
| @@ -307,8 +305,8 @@ class SimulatorHelpers {
|
| static bool GetDoubleOperands(RawObject** args, double* d1, double* d2) {
|
| RawObject* obj2 = args[1];
|
| if (!obj2->IsHeapObject()) {
|
| - *d2 = static_cast<double>(
|
| - reinterpret_cast<intptr_t>(obj2) >> kSmiTagSize);
|
| + *d2 =
|
| + static_cast<double>(reinterpret_cast<intptr_t>(obj2) >> kSmiTagSize);
|
| } else if (obj2->GetClassId() == kDoubleCid) {
|
| RawDouble* obj2d = static_cast<RawDouble*>(obj2);
|
| *d2 = obj2d->ptr()->value_;
|
| @@ -322,8 +320,7 @@ class SimulatorHelpers {
|
|
|
| static RawObject* AllocateDouble(Thread* thread, double value) {
|
| const intptr_t instance_size = Double::InstanceSize();
|
| - const uword start =
|
| - thread->heap()->new_space()->TryAllocate(instance_size);
|
| + const uword start = thread->heap()->new_space()->TryAllocate(instance_size);
|
| if (LIKELY(start != 0)) {
|
| uword tags = 0;
|
| tags = RawObject::ClassIdTag::update(kDoubleCid, tags);
|
| @@ -335,9 +332,7 @@ class SimulatorHelpers {
|
| return NULL;
|
| }
|
|
|
| - static bool Double_add(Thread* thread,
|
| - RawObject** FP,
|
| - RawObject** result) {
|
| + static bool Double_add(Thread* thread, RawObject** FP, RawObject** result) {
|
| double d1, d2;
|
| if (!GetDoubleOperands(FrameArguments(FP, 2), &d1, &d2)) {
|
| return false;
|
| @@ -350,9 +345,7 @@ class SimulatorHelpers {
|
| return false;
|
| }
|
|
|
| - static bool Double_mul(Thread* thread,
|
| - RawObject** FP,
|
| - RawObject** result) {
|
| + static bool Double_mul(Thread* thread, RawObject** FP, RawObject** result) {
|
| double d1, d2;
|
| if (!GetDoubleOperands(FrameArguments(FP, 2), &d1, &d2)) {
|
| return false;
|
| @@ -365,9 +358,7 @@ class SimulatorHelpers {
|
| return false;
|
| }
|
|
|
| - static bool Double_sub(Thread* thread,
|
| - RawObject** FP,
|
| - RawObject** result) {
|
| + static bool Double_sub(Thread* thread, RawObject** FP, RawObject** result) {
|
| double d1, d2;
|
| if (!GetDoubleOperands(FrameArguments(FP, 2), &d1, &d2)) {
|
| return false;
|
| @@ -380,9 +371,7 @@ class SimulatorHelpers {
|
| return false;
|
| }
|
|
|
| - static bool Double_div(Thread* thread,
|
| - RawObject** FP,
|
| - RawObject** result) {
|
| + static bool Double_div(Thread* thread, RawObject** FP, RawObject** result) {
|
| double d1, d2;
|
| if (!GetDoubleOperands(FrameArguments(FP, 2), &d1, &d2)) {
|
| return false;
|
| @@ -407,8 +396,8 @@ class SimulatorHelpers {
|
| }
|
|
|
| static bool Double_greaterEqualThan(Thread* thread,
|
| - RawObject** FP,
|
| - RawObject** result) {
|
| + RawObject** FP,
|
| + RawObject** result) {
|
| double d1, d2;
|
| if (!GetDoubleOperands(FrameArguments(FP, 2), &d1, &d2)) {
|
| return false;
|
| @@ -418,8 +407,8 @@ class SimulatorHelpers {
|
| }
|
|
|
| static bool Double_lessThan(Thread* thread,
|
| - RawObject** FP,
|
| - RawObject** result) {
|
| + RawObject** FP,
|
| + RawObject** result) {
|
| double d1, d2;
|
| if (!GetDoubleOperands(FrameArguments(FP, 2), &d1, &d2)) {
|
| return false;
|
| @@ -428,9 +417,7 @@ class SimulatorHelpers {
|
| return true;
|
| }
|
|
|
| - static bool Double_equal(Thread* thread,
|
| - RawObject** FP,
|
| - RawObject** result) {
|
| + static bool Double_equal(Thread* thread, RawObject** FP, RawObject** result) {
|
| double d1, d2;
|
| if (!GetDoubleOperands(FrameArguments(FP, 2), &d1, &d2)) {
|
| return false;
|
| @@ -440,8 +427,8 @@ class SimulatorHelpers {
|
| }
|
|
|
| static bool Double_lessEqualThan(Thread* thread,
|
| - RawObject** FP,
|
| - RawObject** result) {
|
| + RawObject** FP,
|
| + RawObject** result) {
|
| double d1, d2;
|
| if (!GetDoubleOperands(FrameArguments(FP, 2), &d1, &d2)) {
|
| return false;
|
| @@ -461,8 +448,8 @@ class SimulatorHelpers {
|
| FP[kPcMarkerSlotFromFp] = code;
|
| }
|
|
|
| - DART_FORCE_INLINE static uint8_t* GetTypedData(
|
| - RawObject* obj, RawObject* index) {
|
| + DART_FORCE_INLINE static uint8_t* GetTypedData(RawObject* obj,
|
| + RawObject* index) {
|
| ASSERT(RawObject::IsTypedDataClassId(obj->GetClassId()));
|
| RawTypedData* array = reinterpret_cast<RawTypedData*>(obj);
|
| const intptr_t byte_offset = Smi::Value(RAW_CAST(Smi, index));
|
| @@ -501,40 +488,29 @@ void Simulator::InitOnce() {
|
| SimulatorHelpers::GrowableArraySetIndexed;
|
| intrinsics_[kGrowableArrayGetIndexedIntrinsic] =
|
| SimulatorHelpers::GrowableArrayGetIndexed;
|
| - intrinsics_[kObjectEqualsIntrinsic] =
|
| - SimulatorHelpers::ObjectEquals;
|
| + intrinsics_[kObjectEqualsIntrinsic] = SimulatorHelpers::ObjectEquals;
|
| intrinsics_[kObjectRuntimeTypeIntrinsic] =
|
| SimulatorHelpers::ObjectRuntimeType;
|
|
|
| - intrinsics_[kDouble_getIsNaNIntrinsic] =
|
| - SimulatorHelpers::Double_getIsNan;
|
| + intrinsics_[kDouble_getIsNaNIntrinsic] = SimulatorHelpers::Double_getIsNan;
|
| intrinsics_[kDouble_getIsInfiniteIntrinsic] =
|
| SimulatorHelpers::Double_getIsInfinite;
|
| - intrinsics_[kDouble_addIntrinsic] =
|
| - SimulatorHelpers::Double_add;
|
| - intrinsics_[kDouble_mulIntrinsic] =
|
| - SimulatorHelpers::Double_mul;
|
| - intrinsics_[kDouble_subIntrinsic] =
|
| - SimulatorHelpers::Double_sub;
|
| - intrinsics_[kDouble_divIntrinsic] =
|
| - SimulatorHelpers::Double_div;
|
| + intrinsics_[kDouble_addIntrinsic] = SimulatorHelpers::Double_add;
|
| + intrinsics_[kDouble_mulIntrinsic] = SimulatorHelpers::Double_mul;
|
| + intrinsics_[kDouble_subIntrinsic] = SimulatorHelpers::Double_sub;
|
| + intrinsics_[kDouble_divIntrinsic] = SimulatorHelpers::Double_div;
|
| intrinsics_[kDouble_greaterThanIntrinsic] =
|
| SimulatorHelpers::Double_greaterThan;
|
| intrinsics_[kDouble_greaterEqualThanIntrinsic] =
|
| SimulatorHelpers::Double_greaterEqualThan;
|
| - intrinsics_[kDouble_lessThanIntrinsic] =
|
| - SimulatorHelpers::Double_lessThan;
|
| - intrinsics_[kDouble_equalIntrinsic] =
|
| - SimulatorHelpers::Double_equal;
|
| + intrinsics_[kDouble_lessThanIntrinsic] = SimulatorHelpers::Double_lessThan;
|
| + intrinsics_[kDouble_equalIntrinsic] = SimulatorHelpers::Double_equal;
|
| intrinsics_[kDouble_lessEqualThanIntrinsic] =
|
| SimulatorHelpers::Double_lessEqualThan;
|
| }
|
|
|
|
|
| -Simulator::Simulator()
|
| - : stack_(NULL),
|
| - fp_(NULL),
|
| - sp_(NULL) {
|
| +Simulator::Simulator() : stack_(NULL), fp_(NULL), sp_(NULL) {
|
| // Setup simulator support first. Some of this information is needed to
|
| // setup the architecture state.
|
| // We allocate the stack here, the size is computed as the sum of
|
| @@ -726,7 +702,7 @@ DART_FORCE_INLINE static bool AreBothSmis(intptr_t a, intptr_t b) {
|
|
|
|
|
| #define SMI_MUL(lhs, rhs, pres) SignedMulWithOverflow((lhs), (rhs) >> 1, pres)
|
| -#define SMI_COND(cond, lhs, rhs, pres) \
|
| +#define SMI_COND(cond, lhs, rhs, pres) \
|
| ((*(pres) = ((lhs cond rhs) ? true_value : false_value)), false)
|
| #define SMI_EQ(lhs, rhs, pres) SMI_COND(==, lhs, rhs, pres)
|
| #define SMI_LT(lhs, rhs, pres) SMI_COND(<, lhs, rhs, pres)
|
| @@ -825,14 +801,8 @@ void Simulator::InlineCacheMiss(int checked_args,
|
| // Handler arguments: arguments to check and an ICData object.
|
| const intptr_t miss_handler_argc = checked_args + 1;
|
| RawObject** exit_frame = miss_handler_args + miss_handler_argc;
|
| - CallRuntime(thread,
|
| - FP,
|
| - exit_frame,
|
| - pc,
|
| - miss_handler_argc,
|
| - miss_handler_args,
|
| - result,
|
| - reinterpret_cast<uword>(handler));
|
| + CallRuntime(thread, FP, exit_frame, pc, miss_handler_argc, miss_handler_args,
|
| + result, reinterpret_cast<uword>(handler));
|
| }
|
|
|
|
|
| @@ -857,8 +827,7 @@ DART_FORCE_INLINE void Simulator::InstanceCall1(Thread* thread,
|
| bool found = false;
|
| const intptr_t length = Smi::Value(cache->length_);
|
| intptr_t i;
|
| - for (i = 0;
|
| - i < (length - (kCheckedArgs + 2)); i += (kCheckedArgs + 2)) {
|
| + for (i = 0; i < (length - (kCheckedArgs + 2)); i += (kCheckedArgs + 2)) {
|
| if (cache->data()[i + 0] == receiver_cid) {
|
| top[0] = cache->data()[i + kCheckedArgs];
|
| found = true;
|
| @@ -871,8 +840,8 @@ DART_FORCE_INLINE void Simulator::InstanceCall1(Thread* thread,
|
| SimulatorHelpers::IncrementICUsageCount(cache->data(), i, kCheckedArgs);
|
| }
|
| } else {
|
| - InlineCacheMiss(
|
| - kCheckedArgs, thread, icdata, call_base, top, *pc, *FP, *SP);
|
| + InlineCacheMiss(kCheckedArgs, thread, icdata, call_base, top, *pc, *FP,
|
| + *SP);
|
| }
|
|
|
| *argdesc = icdata->ptr()->args_descriptor_;
|
| @@ -902,8 +871,7 @@ DART_FORCE_INLINE void Simulator::InstanceCall2(Thread* thread,
|
| bool found = false;
|
| const intptr_t length = Smi::Value(cache->length_);
|
| intptr_t i;
|
| - for (i = 0;
|
| - i < (length - (kCheckedArgs + 2)); i += (kCheckedArgs + 2)) {
|
| + for (i = 0; i < (length - (kCheckedArgs + 2)); i += (kCheckedArgs + 2)) {
|
| if ((cache->data()[i + 0] == receiver_cid) &&
|
| (cache->data()[i + 1] == arg0_cid)) {
|
| top[0] = cache->data()[i + kCheckedArgs];
|
| @@ -917,8 +885,8 @@ DART_FORCE_INLINE void Simulator::InstanceCall2(Thread* thread,
|
| SimulatorHelpers::IncrementICUsageCount(cache->data(), i, kCheckedArgs);
|
| }
|
| } else {
|
| - InlineCacheMiss(
|
| - kCheckedArgs, thread, icdata, call_base, top, *pc, *FP, *SP);
|
| + InlineCacheMiss(kCheckedArgs, thread, icdata, call_base, top, *pc, *FP,
|
| + *SP);
|
| }
|
|
|
| *argdesc = icdata->ptr()->args_descriptor_;
|
| @@ -929,11 +897,10 @@ DART_FORCE_INLINE void Simulator::InstanceCall2(Thread* thread,
|
| // 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.
|
| -static DART_NOINLINE bool InvokeRuntime(
|
| - Thread* thread,
|
| - Simulator* sim,
|
| - RuntimeFunction drt,
|
| - const NativeArguments& args) {
|
| +static DART_NOINLINE bool InvokeRuntime(Thread* thread,
|
| + Simulator* sim,
|
| + RuntimeFunction drt,
|
| + const NativeArguments& args) {
|
| SimulatorSetjmpBuffer buffer(sim);
|
| if (!setjmp(buffer.buffer_)) {
|
| thread->set_vm_tag(reinterpret_cast<uword>(drt));
|
| @@ -947,11 +914,10 @@ static DART_NOINLINE bool InvokeRuntime(
|
| }
|
|
|
|
|
| -static DART_NOINLINE bool InvokeNative(
|
| - Thread* thread,
|
| - Simulator* sim,
|
| - SimulatorBootstrapNativeCall f,
|
| - NativeArguments* args) {
|
| +static DART_NOINLINE bool InvokeNative(Thread* thread,
|
| + Simulator* sim,
|
| + SimulatorBootstrapNativeCall f,
|
| + NativeArguments* args) {
|
| SimulatorSetjmpBuffer buffer(sim);
|
| if (!setjmp(buffer.buffer_)) {
|
| thread->set_vm_tag(reinterpret_cast<uword>(f));
|
| @@ -965,11 +931,10 @@ static DART_NOINLINE bool InvokeNative(
|
| }
|
|
|
|
|
| -static DART_NOINLINE bool InvokeNativeWrapper(
|
| - Thread* thread,
|
| - Simulator* sim,
|
| - Dart_NativeFunction f,
|
| - NativeArguments* args) {
|
| +static DART_NOINLINE bool InvokeNativeWrapper(Thread* thread,
|
| + Simulator* sim,
|
| + Dart_NativeFunction f,
|
| + NativeArguments* args) {
|
| SimulatorSetjmpBuffer buffer(sim);
|
| if (!setjmp(buffer.buffer_)) {
|
| thread->set_vm_tag(reinterpret_cast<uword>(f));
|
| @@ -987,29 +952,32 @@ static DART_NOINLINE bool InvokeNativeWrapper(
|
|
|
| // Decode opcode and A part of the given value and dispatch to the
|
| // corresponding bytecode handler.
|
| -#define DISPATCH_OP(val) \
|
| - do { \
|
| - op = (val); \
|
| - rA = ((op >> 8) & 0xFF); \
|
| - goto* dispatch[op & 0xFF]; \
|
| +#define DISPATCH_OP(val) \
|
| + do { \
|
| + op = (val); \
|
| + rA = ((op >> 8) & 0xFF); \
|
| + goto* dispatch[op & 0xFF]; \
|
| } while (0)
|
|
|
| // Fetch next operation from PC, increment program counter and dispatch.
|
| #define DISPATCH() DISPATCH_OP(*pc++)
|
|
|
| // Define entry point that handles bytecode Name with the given operand format.
|
| -#define BYTECODE(Name, Operands) \
|
| +#define BYTECODE(Name, Operands) \
|
| BYTECODE_HEADER(Name, DECLARE_##Operands, DECODE_##Operands)
|
|
|
| -#define BYTECODE_HEADER(Name, Declare, Decode) \
|
| - Declare; \
|
| - bc##Name : Decode \
|
| +#define BYTECODE_HEADER(Name, Declare, Decode) \
|
| + Declare; \
|
| + bc##Name : Decode
|
|
|
| // Helpers to decode common instruction formats. Used in conjunction with
|
| // BYTECODE() macro.
|
| -#define DECLARE_A_B_C uint16_t rB, rC; USE(rB); USE(rC)
|
| -#define DECODE_A_B_C \
|
| - rB = ((op >> Bytecode::kBShift) & Bytecode::kBMask); \
|
| +#define DECLARE_A_B_C \
|
| + uint16_t rB, rC; \
|
| + USE(rB); \
|
| + USE(rC)
|
| +#define DECODE_A_B_C \
|
| + rB = ((op >> Bytecode::kBShift) & Bytecode::kBMask); \
|
| rC = ((op >> Bytecode::kCShift) & Bytecode::kCMask);
|
|
|
| #define DECLARE_0
|
| @@ -1018,13 +986,17 @@ static DART_NOINLINE bool InvokeNativeWrapper(
|
| #define DECLARE_A
|
| #define DECODE_A
|
|
|
| -#define DECLARE___D uint32_t rD; USE(rD)
|
| +#define DECLARE___D \
|
| + uint32_t rD; \
|
| + USE(rD)
|
| #define DECODE___D rD = (op >> Bytecode::kDShift);
|
|
|
| #define DECLARE_A_D DECLARE___D
|
| #define DECODE_A_D DECODE___D
|
|
|
| -#define DECLARE_A_X int32_t rD; USE(rD)
|
| +#define DECLARE_A_X \
|
| + int32_t rD; \
|
| + USE(rD)
|
| #define DECODE_A_X rD = (static_cast<int32_t>(op) >> Bytecode::kDShift);
|
|
|
|
|
| @@ -1035,7 +1007,7 @@ static DART_NOINLINE bool InvokeNativeWrapper(
|
| const RawICData* icdata = RAW_CAST(ICData, LOAD_CONSTANT(kidx)); \
|
| RawObject** entries = icdata->ptr()->ic_data_->ptr()->data(); \
|
| SimulatorHelpers::IncrementICUsageCount(entries, 0, 2); \
|
| - } while (0); \
|
| + } while (0);
|
|
|
| // Declare bytecode handler for a smi operation (e.g. AddTOS) with the
|
| // given result type and the given behavior specified as a function
|
| @@ -1047,8 +1019,7 @@ static DART_NOINLINE bool InvokeNativeWrapper(
|
| const intptr_t rhs = reinterpret_cast<intptr_t>(SP[-0]); \
|
| ResultT* slot = reinterpret_cast<ResultT*>(SP - 1); \
|
| if (LIKELY(!thread->isolate()->single_step()) && \
|
| - LIKELY(AreBothSmis(lhs, rhs) && \
|
| - !Func(lhs, rhs, slot))) { \
|
| + LIKELY(AreBothSmis(lhs, rhs) && !Func(lhs, rhs, slot))) { \
|
| SMI_FASTPATH_ICDATA_INC; \
|
| /* Fast path succeeded. Skip the generic call that follows. */ \
|
| pc++; \
|
| @@ -1076,7 +1047,7 @@ static DART_NOINLINE bool InvokeNativeWrapper(
|
| const intptr_t rhs = reinterpret_cast<intptr_t>(FP[rC]); \
|
| ResultT* slot = reinterpret_cast<ResultT*>(&FP[rA]); \
|
| Func(lhs, rhs, slot); \
|
| - } \
|
| + }
|
|
|
|
|
| // Exception handling helper. Gets handler FP and PC from the Simulator where
|
| @@ -1088,7 +1059,7 @@ static DART_NOINLINE bool InvokeNativeWrapper(
|
| do { \
|
| FP = reinterpret_cast<RawObject**>(fp_); \
|
| pc = reinterpret_cast<uint32_t*>(pc_); \
|
| - if ((reinterpret_cast<uword>(pc) & 2) != 0) { /* Entry frame? */ \
|
| + if ((reinterpret_cast<uword>(pc) & 2) != 0) { /* Entry frame? */ \
|
| fp_ = sp_ = reinterpret_cast<RawObject**>(fp_[0]); \
|
| thread->set_top_exit_frame_info(reinterpret_cast<uword>(sp_)); \
|
| thread->set_top_resource(top_resource); \
|
| @@ -1097,23 +1068,23 @@ static DART_NOINLINE bool InvokeNativeWrapper(
|
| } \
|
| pp = SimulatorHelpers::FrameCode(FP)->ptr()->object_pool_->ptr(); \
|
| goto DispatchAfterException; \
|
| - } while (0) \
|
| + } while (0)
|
|
|
| // Runtime call helpers: handle invocation and potential exception after return.
|
| -#define INVOKE_RUNTIME(Func, Args) \
|
| - if (!InvokeRuntime(thread, this, Func, Args)) { \
|
| - HANDLE_EXCEPTION; \
|
| - } \
|
| +#define INVOKE_RUNTIME(Func, Args) \
|
| + if (!InvokeRuntime(thread, this, Func, Args)) { \
|
| + HANDLE_EXCEPTION; \
|
| + }
|
|
|
| -#define INVOKE_NATIVE(Func, Args) \
|
| - if (!InvokeNative(thread, this, Func, &Args)) { \
|
| - HANDLE_EXCEPTION; \
|
| - } \
|
| +#define INVOKE_NATIVE(Func, Args) \
|
| + if (!InvokeNative(thread, this, Func, &Args)) { \
|
| + HANDLE_EXCEPTION; \
|
| + }
|
|
|
| -#define INVOKE_NATIVE_WRAPPER(Func, Args) \
|
| - if (!InvokeNativeWrapper(thread, this, Func, &Args)) { \
|
| - HANDLE_EXCEPTION; \
|
| - } \
|
| +#define INVOKE_NATIVE_WRAPPER(Func, Args) \
|
| + if (!InvokeNativeWrapper(thread, this, Func, &Args)) { \
|
| + HANDLE_EXCEPTION; \
|
| + }
|
|
|
| #define LOAD_CONSTANT(index) (pp->data()[(index)].raw_obj_)
|
|
|
| @@ -1130,10 +1101,10 @@ RawObject* Simulator::Call(const Code& code,
|
| };
|
|
|
| // Interpreter state (see constants_dbc.h for high-level overview).
|
| - uint32_t* pc; // Program Counter: points to the next op to execute.
|
| + uint32_t* pc; // Program Counter: points to the next op to execute.
|
| RawObjectPool* pp; // Pool Pointer.
|
| - RawObject** FP; // Frame Pointer.
|
| - RawObject** SP; // Stack Pointer.
|
| + RawObject** FP; // Frame Pointer.
|
| + RawObject** SP; // Stack Pointer.
|
|
|
| RawArray* argdesc; // Arguments Descriptor: used to pass information between
|
| // call instruction and the function entry.
|
| @@ -1301,7 +1272,7 @@ RawObject* Simulator::Call(const Code& code,
|
| // descriptor.
|
| RawObject** argdesc_data = argdesc->ptr()->data();
|
|
|
| - intptr_t i = named_count - 1; // argument position
|
| + intptr_t i = named_count - 1; // argument position
|
| intptr_t j = num_opt_named_params - 1; // parameter position
|
| while ((j >= 0) && (i >= 0)) {
|
| // Fetch formal parameter information: name, default value, target slot.
|
| @@ -1365,8 +1336,7 @@ RawObject* Simulator::Call(const Code& code,
|
| // Process the list of default values encoded as a sequence of
|
| // LoadConstant instructions after EntryOpt bytecode.
|
| // Execute only those that correspond to parameters the were not passed.
|
| - for (intptr_t i = pos_count - num_fixed_params;
|
| - i < num_opt_pos_params;
|
| + for (intptr_t i = pos_count - num_fixed_params; i < num_opt_pos_params;
|
| i++) {
|
| const uint32_t load_value = pc[i];
|
| ASSERT(Bytecode::DecodeOpcode(load_value) == Bytecode::kLoadConstant);
|
| @@ -1428,7 +1398,7 @@ RawObject* Simulator::Call(const Code& code,
|
| BYTECODE(HotCheck, A_D);
|
| const uint8_t increment = rA;
|
| const uint16_t threshold = rD;
|
| - RawFunction* f = FrameFunction(FP);
|
| + RawFunction* f = FrameFunction(FP);
|
| int32_t counter = f->ptr()->usage_counter_;
|
| // Note: we don't increment usage counter in the prologue of optimized
|
| // functions.
|
| @@ -1673,8 +1643,7 @@ RawObject* Simulator::Call(const Code& code,
|
| RawICData* ic_data = RAW_CAST(ICData, ic_data_obj);
|
| RawObject** data = ic_data->ptr()->ic_data_->ptr()->data();
|
| SimulatorHelpers::IncrementICUsageCount(data, 0, 0);
|
| - SP[0] = data[ICData::TargetIndexFor(
|
| - ic_data->ptr()->state_bits_ & 0x3)];
|
| + SP[0] = data[ICData::TargetIndexFor(ic_data->ptr()->state_bits_ & 0x3)];
|
| RawObject** call_base = SP - argc;
|
| RawObject** call_top = SP; // *SP contains function
|
| argdesc = static_cast<RawArray*>(LOAD_CONSTANT(rD));
|
| @@ -1714,9 +1683,8 @@ RawObject* Simulator::Call(const Code& code,
|
| RawICData* icdata = RAW_CAST(ICData, LOAD_CONSTANT(kidx));
|
| SimulatorHelpers::IncrementUsageCounter(
|
| RAW_CAST(Function, icdata->ptr()->owner_));
|
| - InstanceCall1(thread, icdata, call_base, call_top,
|
| - &argdesc, &pp, &pc, &FP, &SP,
|
| - false /* optimized */);
|
| + InstanceCall1(thread, icdata, call_base, call_top, &argdesc, &pp, &pc,
|
| + &FP, &SP, false /* optimized */);
|
| }
|
|
|
| DISPATCH();
|
| @@ -1740,9 +1708,8 @@ RawObject* Simulator::Call(const Code& code,
|
| RawICData* icdata = RAW_CAST(ICData, LOAD_CONSTANT(kidx));
|
| SimulatorHelpers::IncrementUsageCounter(
|
| RAW_CAST(Function, icdata->ptr()->owner_));
|
| - InstanceCall2(thread, icdata, call_base, call_top,
|
| - &argdesc, &pp, &pc, &FP, &SP,
|
| - false /* optimized */);
|
| + InstanceCall2(thread, icdata, call_base, call_top, &argdesc, &pp, &pc,
|
| + &FP, &SP, false /* optimized */);
|
| }
|
|
|
| DISPATCH();
|
| @@ -1760,9 +1727,8 @@ RawObject* Simulator::Call(const Code& code,
|
|
|
| RawICData* icdata = RAW_CAST(ICData, LOAD_CONSTANT(kidx));
|
| SimulatorHelpers::IncrementUsageCounter(FrameFunction(FP));
|
| - InstanceCall1(thread, icdata, call_base, call_top,
|
| - &argdesc, &pp, &pc, &FP, &SP,
|
| - true /* optimized */);
|
| + InstanceCall1(thread, icdata, call_base, call_top, &argdesc, &pp, &pc,
|
| + &FP, &SP, true /* optimized */);
|
| }
|
|
|
| DISPATCH();
|
| @@ -1780,9 +1746,8 @@ RawObject* Simulator::Call(const Code& code,
|
|
|
| RawICData* icdata = RAW_CAST(ICData, LOAD_CONSTANT(kidx));
|
| SimulatorHelpers::IncrementUsageCounter(FrameFunction(FP));
|
| - InstanceCall2(thread, icdata, call_base, call_top,
|
| - &argdesc, &pp, &pc, &FP, &SP,
|
| - true /* optimized */);
|
| + InstanceCall2(thread, icdata, call_base, call_top, &argdesc, &pp, &pc,
|
| + &FP, &SP, true /* optimized */);
|
| }
|
|
|
| DISPATCH();
|
| @@ -1794,7 +1759,7 @@ RawObject* Simulator::Call(const Code& code,
|
| const intptr_t cids_length = rD;
|
| RawObject** args = SP - argc + 1;
|
| const intptr_t receiver_cid = SimulatorHelpers::GetClassId(args[0]);
|
| - for (intptr_t i = 0; i < 2*cids_length; i+=2) {
|
| + for (intptr_t i = 0; i < 2 * cids_length; i += 2) {
|
| const intptr_t icdata_cid = Bytecode::DecodeD(*(pc + i));
|
| if (receiver_cid == icdata_cid) {
|
| RawFunction* target =
|
| @@ -1980,8 +1945,8 @@ RawObject* Simulator::Call(const Code& code,
|
| const intptr_t rhs = reinterpret_cast<intptr_t>(FP[rC]);
|
| if (rhs != 0) {
|
| const intptr_t lhs = reinterpret_cast<intptr_t>(FP[rB]);
|
| - const intptr_t res =
|
| - ((lhs >> kSmiTagSize) % (rhs >> kSmiTagSize)) << kSmiTagSize;
|
| + const intptr_t res = ((lhs >> kSmiTagSize) % (rhs >> kSmiTagSize))
|
| + << kSmiTagSize;
|
| *reinterpret_cast<intptr_t*>(&FP[rA]) =
|
| (res < 0) ? ((rhs < 0) ? (res - rhs) : (res + rhs)) : res;
|
| pc++;
|
| @@ -2010,8 +1975,8 @@ RawObject* Simulator::Call(const Code& code,
|
| const intptr_t shift_amount =
|
| (rhs >= kBitsPerWord) ? (kBitsPerWord - 1) : rhs;
|
| const intptr_t lhs = reinterpret_cast<intptr_t>(FP[rB]) >> kSmiTagSize;
|
| - *reinterpret_cast<intptr_t*>(&FP[rA]) =
|
| - (lhs >> shift_amount) << kSmiTagSize;
|
| + *reinterpret_cast<intptr_t*>(&FP[rA]) = (lhs >> shift_amount)
|
| + << kSmiTagSize;
|
| pc++;
|
| }
|
| DISPATCH();
|
| @@ -2365,7 +2330,7 @@ RawObject* Simulator::Call(const Code& code,
|
| FP[rA] = Smi::New(static_cast<intptr_t>(value32));
|
| DISPATCH();
|
| }
|
| -#else // defined(ARCH_IS_64_BIT)
|
| +#else // defined(ARCH_IS_64_BIT)
|
| {
|
| BYTECODE(WriteIntoDouble, A_D);
|
| UNIMPLEMENTED();
|
| @@ -2590,7 +2555,7 @@ RawObject* Simulator::Call(const Code& code,
|
|
|
| BYTECODE(ReturnTOS, 0);
|
| result = *SP;
|
| - // Fall through to the ReturnImpl.
|
| + // Fall through to the ReturnImpl.
|
|
|
| ReturnImpl:
|
| // Restore caller PC.
|
| @@ -2732,8 +2697,7 @@ RawObject* Simulator::Call(const Code& code,
|
| BYTECODE(AllocateUninitializedContext, A_D);
|
| const uint16_t num_context_variables = rD;
|
| const intptr_t instance_size = Context::InstanceSize(num_context_variables);
|
| - const uword start =
|
| - thread->heap()->new_space()->TryAllocate(instance_size);
|
| + const uword start = thread->heap()->new_space()->TryAllocate(instance_size);
|
| if (LIKELY(start != 0)) {
|
| uword tags = 0;
|
| tags = RawObject::ClassIdTag::update(kContextCid, tags);
|
| @@ -2780,8 +2744,7 @@ RawObject* Simulator::Call(const Code& code,
|
| if (LIKELY(start != 0)) {
|
| *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
|
| for (intptr_t current_offset = sizeof(RawInstance);
|
| - current_offset < instance_size;
|
| - current_offset += kWordSize) {
|
| + current_offset < instance_size; current_offset += kWordSize) {
|
| *reinterpret_cast<RawObject**>(start + current_offset) = null_value;
|
| }
|
| FP[rA] = reinterpret_cast<RawObject*>(start + kHeapObjectTag);
|
| @@ -2792,9 +2755,9 @@ RawObject* Simulator::Call(const Code& code,
|
|
|
| {
|
| BYTECODE(Allocate, A_D);
|
| - SP[1] = 0; // Space for the result.
|
| + SP[1] = 0; // Space for the result.
|
| SP[2] = LOAD_CONSTANT(rD); // Class object.
|
| - SP[3] = null_value; // Type arguments.
|
| + SP[3] = null_value; // Type arguments.
|
| Exit(thread, FP, SP + 4, pc);
|
| NativeArguments args(thread, 2, SP + 2, SP + 1);
|
| INVOKE_RUNTIME(DRT_AllocateObject, args);
|
| @@ -2812,8 +2775,7 @@ RawObject* Simulator::Call(const Code& code,
|
| const intptr_t type_args_offset = Bytecode::DecodeD(*pc);
|
| *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
|
| for (intptr_t current_offset = sizeof(RawInstance);
|
| - current_offset < instance_size;
|
| - current_offset += kWordSize) {
|
| + current_offset < instance_size; current_offset += kWordSize) {
|
| *reinterpret_cast<RawObject**>(start + current_offset) = null_value;
|
| }
|
| *reinterpret_cast<RawObject**>(start + type_args_offset) = type_args;
|
| @@ -2841,7 +2803,7 @@ RawObject* Simulator::Call(const Code& code,
|
| if (LIKELY(length <= Array::kMaxElements)) {
|
| const intptr_t fixed_size = sizeof(RawArray) + kObjectAlignment - 1;
|
| const intptr_t instance_size =
|
| - (fixed_size + length*kWordSize) & ~(kObjectAlignment - 1);
|
| + (fixed_size + length * kWordSize) & ~(kObjectAlignment - 1);
|
| const uword start =
|
| thread->heap()->new_space()->TryAllocate(instance_size);
|
| if (LIKELY(start != 0)) {
|
| @@ -2899,15 +2861,13 @@ RawObject* Simulator::Call(const Code& code,
|
| } else {
|
| instance_cid_or_function = Smi::New(cid);
|
|
|
| - RawClass* instance_class =
|
| - thread->isolate()->class_table()->At(cid);
|
| + RawClass* instance_class = thread->isolate()->class_table()->At(cid);
|
| if (instance_class->ptr()->num_type_arguments_ < 0) {
|
| goto InstanceOfCallRuntime;
|
| } else if (instance_class->ptr()->num_type_arguments_ > 0) {
|
| instance_type_arguments = reinterpret_cast<RawTypeArguments**>(
|
| - instance
|
| - ->ptr())[instance_class->ptr()
|
| - ->type_arguments_field_offset_in_words_];
|
| + instance->ptr())[instance_class->ptr()
|
| + ->type_arguments_field_offset_in_words_];
|
| }
|
| }
|
|
|
| @@ -2915,17 +2875,18 @@ RawObject* Simulator::Call(const Code& code,
|
| entries[0] != null_value;
|
| entries += SubtypeTestCache::kTestEntryLength) {
|
| if ((entries[SubtypeTestCache::kInstanceClassIdOrFunction] ==
|
| - instance_cid_or_function) &&
|
| + instance_cid_or_function) &&
|
| (entries[SubtypeTestCache::kInstanceTypeArguments] ==
|
| - instance_type_arguments) &&
|
| + instance_type_arguments) &&
|
| (entries[SubtypeTestCache::kInstantiatorTypeArguments] ==
|
| - instantiator_type_arguments)) {
|
| + instantiator_type_arguments)) {
|
| SP[-3] = entries[SubtypeTestCache::kTestResult];
|
| goto InstanceOfOk;
|
| }
|
| }
|
| }
|
|
|
| + // clang-format off
|
| InstanceOfCallRuntime:
|
| {
|
| SP[1] = instance;
|
| @@ -2936,6 +2897,7 @@ RawObject* Simulator::Call(const Code& code,
|
| NativeArguments native_args(thread, 4, SP + 1, SP - 3);
|
| INVOKE_RUNTIME(DRT_Instanceof, native_args);
|
| }
|
| + // clang-format on
|
|
|
| InstanceOfOk:
|
| SP -= 3;
|
| @@ -2988,15 +2950,13 @@ RawObject* Simulator::Call(const Code& code,
|
| } else {
|
| instance_cid_or_function = Smi::New(cid);
|
|
|
| - RawClass* instance_class =
|
| - thread->isolate()->class_table()->At(cid);
|
| + RawClass* instance_class = thread->isolate()->class_table()->At(cid);
|
| if (instance_class->ptr()->num_type_arguments_ < 0) {
|
| goto AssertAssignableCallRuntime;
|
| } else if (instance_class->ptr()->num_type_arguments_ > 0) {
|
| instance_type_arguments = reinterpret_cast<RawTypeArguments**>(
|
| - instance
|
| - ->ptr())[instance_class->ptr()
|
| - ->type_arguments_field_offset_in_words_];
|
| + instance->ptr())[instance_class->ptr()
|
| + ->type_arguments_field_offset_in_words_];
|
| }
|
| }
|
|
|
| @@ -3004,11 +2964,11 @@ RawObject* Simulator::Call(const Code& code,
|
| entries[0] != null_value;
|
| entries += SubtypeTestCache::kTestEntryLength) {
|
| if ((entries[SubtypeTestCache::kInstanceClassIdOrFunction] ==
|
| - instance_cid_or_function) &&
|
| + instance_cid_or_function) &&
|
| (entries[SubtypeTestCache::kInstanceTypeArguments] ==
|
| - instance_type_arguments) &&
|
| + instance_type_arguments) &&
|
| (entries[SubtypeTestCache::kInstantiatorTypeArguments] ==
|
| - instantiator_type_arguments)) {
|
| + instantiator_type_arguments)) {
|
| if (true_value == entries[SubtypeTestCache::kTestResult]) {
|
| goto AssertAssignableOk;
|
| } else {
|
| @@ -3360,7 +3320,7 @@ RawObject* Simulator::Call(const Code& code,
|
| pc += (lhs > rhs) ? 0 : 1;
|
| DISPATCH();
|
| }
|
| -#else // defined(ARCH_IS_64_BIT)
|
| +#else // defined(ARCH_IS_64_BIT)
|
| {
|
| BYTECODE(IfDEq, A_D);
|
| UNREACHABLE();
|
| @@ -3677,9 +3637,8 @@ RawObject* Simulator::Call(const Code& code,
|
| pc = SavedCallerPC(FP);
|
|
|
| const bool has_dart_caller = (reinterpret_cast<uword>(pc) & 2) == 0;
|
| - const intptr_t argc = has_dart_caller
|
| - ? Bytecode::DecodeArgc(pc[-1])
|
| - : (reinterpret_cast<uword>(pc) >> 2);
|
| + const intptr_t argc = has_dart_caller ? Bytecode::DecodeArgc(pc[-1])
|
| + : (reinterpret_cast<uword>(pc) >> 2);
|
|
|
| SP = FrameArguments(FP, 0);
|
| RawObject** args = SP - argc;
|
|
|