| Index: runtime/vm/isolate.h
|
| diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
|
| index 2e6735f3fc4709fba78ef8043cc1efd1c2d66328..9dcea6b0fd2a45f8cc95a7772e3ed0766a622a78 100644
|
| --- a/runtime/vm/isolate.h
|
| +++ b/runtime/vm/isolate.h
|
| @@ -30,6 +30,7 @@ class MessageHandler;
|
| class Mutex;
|
| class ObjectPointerVisitor;
|
| class ObjectStore;
|
| +class RawInstance;
|
| class RawArray;
|
| class RawContext;
|
| class RawDouble;
|
| @@ -40,47 +41,98 @@ class Simulator;
|
| class StackResource;
|
| class StackZone;
|
| class StubCode;
|
| +class RawFloat32x4;
|
| +class RawUint32x4;
|
|
|
|
|
| -// Used by the deoptimization infrastructure to defer allocation of Double
|
| +// Used by the deoptimization infrastructure to defer allocation of unboxed
|
| // objects until frame is fully rewritten and GC is safe.
|
| -// See callers of Isolate::DeferDoubleMaterialization.
|
| -class DeferredDouble {
|
| +// See callers of Isolate::DeferObjectMaterialization.
|
| +class DeferredObject {
|
| public:
|
| - DeferredDouble(double value, RawDouble** slot, DeferredDouble* next)
|
| - : value_(value), slot_(slot), next_(next) { }
|
| + DeferredObject(RawInstance** slot, DeferredObject* next)
|
| + : slot_(slot), next_(next) { }
|
| + virtual ~DeferredObject() { }
|
| +
|
| + RawInstance** slot() const { return slot_; }
|
| + DeferredObject* next() const { return next_; }
|
| +
|
| + virtual void Materialize() = 0;
|
| +
|
| + private:
|
| + RawInstance** const slot_;
|
| + DeferredObject* const next_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DeferredObject);
|
| +};
|
| +
|
| +
|
| +class DeferredDouble : public DeferredObject {
|
| + public:
|
| + DeferredDouble(double value, RawInstance** slot, DeferredObject* next)
|
| + : DeferredObject(slot, next), value_(value) { }
|
| +
|
| + virtual void Materialize();
|
|
|
| double value() const { return value_; }
|
| - RawDouble** slot() const { return slot_; }
|
| - DeferredDouble* next() const { return next_; }
|
|
|
| private:
|
| const double value_;
|
| - RawDouble** const slot_;
|
| - DeferredDouble* const next_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(DeferredDouble);
|
| };
|
|
|
|
|
| -class DeferredMint {
|
| +class DeferredMint : public DeferredObject {
|
| public:
|
| - DeferredMint(int64_t value, RawMint** slot, DeferredMint* next)
|
| - : value_(value), slot_(slot), next_(next) { }
|
| + DeferredMint(int64_t value, RawInstance** slot, DeferredObject* next)
|
| + : DeferredObject(slot, next), value_(value) { }
|
| +
|
| + virtual void Materialize();
|
|
|
| int64_t value() const { return value_; }
|
| - RawMint** slot() const { return slot_; }
|
| - DeferredMint* next() const { return next_; }
|
|
|
| private:
|
| const int64_t value_;
|
| - RawMint** const slot_;
|
| - DeferredMint* const next_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(DeferredMint);
|
| };
|
|
|
|
|
| +class DeferredFloat32x4 : public DeferredObject {
|
| + public:
|
| + DeferredFloat32x4(simd128_value_t value, RawInstance** slot,
|
| + DeferredObject* next)
|
| + : DeferredObject(slot, next), value_(value) { }
|
| +
|
| + virtual void Materialize();
|
| +
|
| + simd128_value_t value() const { return value_; }
|
| +
|
| + private:
|
| + const simd128_value_t value_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DeferredFloat32x4);
|
| +};
|
| +
|
| +
|
| +class DeferredUint32x4 : public DeferredObject {
|
| + public:
|
| + DeferredUint32x4(simd128_value_t value, RawInstance** slot,
|
| + DeferredObject* next)
|
| + : DeferredObject(slot, next), value_(value) { }
|
| +
|
| + virtual void Materialize();
|
| +
|
| + simd128_value_t value() const { return value_; }
|
| +
|
| + private:
|
| + const simd128_value_t value_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DeferredUint32x4);
|
| +};
|
| +
|
| +
|
| class Isolate : public BaseIsolate {
|
| public:
|
| ~Isolate();
|
| @@ -308,10 +360,10 @@ class Isolate : public BaseIsolate {
|
| ASSERT((value == NULL) || (deopt_cpu_registers_copy_ == NULL));
|
| deopt_cpu_registers_copy_ = value;
|
| }
|
| - double* deopt_fpu_registers_copy() const {
|
| + fpu_register_t* deopt_fpu_registers_copy() const {
|
| return deopt_fpu_registers_copy_;
|
| }
|
| - void set_deopt_fpu_registers_copy(double* value) {
|
| + void set_deopt_fpu_registers_copy(fpu_register_t* value) {
|
| ASSERT((value == NULL) || (deopt_fpu_registers_copy_ == NULL));
|
| deopt_fpu_registers_copy_ = value;
|
| }
|
| @@ -325,22 +377,37 @@ class Isolate : public BaseIsolate {
|
| intptr_t deopt_frame_copy_size() const { return deopt_frame_copy_size_; }
|
|
|
| void DeferDoubleMaterialization(double value, RawDouble** slot) {
|
| - deferred_doubles_ = new DeferredDouble(value, slot, deferred_doubles_);
|
| + deferred_objects_ = new DeferredDouble(
|
| + value,
|
| + reinterpret_cast<RawInstance**>(slot),
|
| + deferred_objects_);
|
| }
|
|
|
| void DeferMintMaterialization(int64_t value, RawMint** slot) {
|
| - deferred_mints_ = new DeferredMint(value, slot, deferred_mints_);
|
| + deferred_objects_ = new DeferredMint(value,
|
| + reinterpret_cast<RawInstance**>(slot),
|
| + deferred_objects_);
|
| }
|
|
|
| - DeferredDouble* DetachDeferredDoubles() {
|
| - DeferredDouble* list = deferred_doubles_;
|
| - deferred_doubles_ = NULL;
|
| - return list;
|
| + void DeferFloat32x4Materialization(simd128_value_t value,
|
| + RawFloat32x4** slot) {
|
| + deferred_objects_ = new DeferredFloat32x4(
|
| + value,
|
| + reinterpret_cast<RawInstance**>(slot),
|
| + deferred_objects_);
|
| + }
|
| +
|
| + void DeferUint32x4Materialization(simd128_value_t value,
|
| + RawUint32x4** slot) {
|
| + deferred_objects_ = new DeferredUint32x4(
|
| + value,
|
| + reinterpret_cast<RawInstance**>(slot),
|
| + deferred_objects_);
|
| }
|
|
|
| - DeferredMint* DetachDeferredMints() {
|
| - DeferredMint* list = deferred_mints_;
|
| - deferred_mints_ = NULL;
|
| + DeferredObject* DetachDeferredObjects() {
|
| + DeferredObject* list = deferred_objects_;
|
| + deferred_objects_ = NULL;
|
| return list;
|
| }
|
|
|
| @@ -385,11 +452,10 @@ class Isolate : public BaseIsolate {
|
|
|
| // Deoptimization support.
|
| intptr_t* deopt_cpu_registers_copy_;
|
| - double* deopt_fpu_registers_copy_;
|
| + fpu_register_t* deopt_fpu_registers_copy_;
|
| intptr_t* deopt_frame_copy_;
|
| intptr_t deopt_frame_copy_size_;
|
| - DeferredDouble* deferred_doubles_;
|
| - DeferredMint* deferred_mints_;
|
| + DeferredObject* deferred_objects_;
|
|
|
| static Dart_IsolateCreateCallback create_callback_;
|
| static Dart_IsolateInterruptCallback interrupt_callback_;
|
|
|