diff options
author | Trevor Norris <trev.norris@gmail.com> | 2013-08-27 15:18:12 -0700 |
---|---|---|
committer | Trevor Norris <trev.norris@gmail.com> | 2013-08-27 15:18:12 -0700 |
commit | 26bc8db33f15a365e22f23229d0700d70ac0d560 (patch) | |
tree | fbe2f60ef1380c023efa66e86d53d1d9f42ddb7c /deps/v8/src/deoptimizer.h | |
parent | d86814aeca64d8985402dc073eff1fc8ac93c231 (diff) | |
download | android-node-v8-26bc8db33f15a365e22f23229d0700d70ac0d560.tar.gz android-node-v8-26bc8db33f15a365e22f23229d0700d70ac0d560.tar.bz2 android-node-v8-26bc8db33f15a365e22f23229d0700d70ac0d560.zip |
v8: upgrade to 3.20.17
Diffstat (limited to 'deps/v8/src/deoptimizer.h')
-rw-r--r-- | deps/v8/src/deoptimizer.h | 57 |
1 files changed, 53 insertions, 4 deletions
diff --git a/deps/v8/src/deoptimizer.h b/deps/v8/src/deoptimizer.h index 7ad1ab0b2e..b6e4667a20 100644 --- a/deps/v8/src/deoptimizer.h +++ b/deps/v8/src/deoptimizer.h @@ -77,15 +77,31 @@ class HeapNumberMaterializationDescriptor BASE_EMBEDDED { class ObjectMaterializationDescriptor BASE_EMBEDDED { public: - ObjectMaterializationDescriptor(Address slot_address, int length) - : slot_address_(slot_address), object_length_(length) { } + ObjectMaterializationDescriptor( + Address slot_address, int frame, int length, int duplicate, bool is_args) + : slot_address_(slot_address), + jsframe_index_(frame), + object_length_(length), + duplicate_object_(duplicate), + is_arguments_(is_args) { } Address slot_address() const { return slot_address_; } + int jsframe_index() const { return jsframe_index_; } int object_length() const { return object_length_; } + int duplicate_object() const { return duplicate_object_; } + bool is_arguments() const { return is_arguments_; } + + // Only used for allocated receivers in DoComputeConstructStubFrame. + void patch_slot_address(intptr_t slot) { + slot_address_ = reinterpret_cast<Address>(slot); + } private: Address slot_address_; + int jsframe_index_; int object_length_; + int duplicate_object_; + bool is_arguments_; }; @@ -372,7 +388,7 @@ class Deoptimizer : public Malloced { int frame_index); void DoTranslateObject(TranslationIterator* iterator, - int object_opcode, + int object_index, int field_index); enum DeoptimizerTranslatedValueType { @@ -400,11 +416,28 @@ class Deoptimizer : public Malloced { Object* ComputeLiteral(int index) const; - void AddObjectStart(intptr_t slot_address, int argc); + void AddObjectStart(intptr_t slot_address, int argc, bool is_arguments); + void AddObjectDuplication(intptr_t slot, int object_index); void AddObjectTaggedValue(intptr_t value); void AddObjectDoubleValue(double value); void AddDoubleValue(intptr_t slot_address, double value); + bool ArgumentsObjectIsAdapted(int object_index) { + ObjectMaterializationDescriptor desc = deferred_objects_.at(object_index); + int reverse_jsframe_index = jsframe_count_ - desc.jsframe_index() - 1; + return jsframe_has_adapted_arguments_[reverse_jsframe_index]; + } + + Handle<JSFunction> ArgumentsObjectFunction(int object_index) { + ObjectMaterializationDescriptor desc = deferred_objects_.at(object_index); + int reverse_jsframe_index = jsframe_count_ - desc.jsframe_index() - 1; + return jsframe_functions_[reverse_jsframe_index]; + } + + // Helper function for heap object materialization. + Handle<Object> MaterializeNextHeapObject(); + Handle<Object> MaterializeNextValue(); + static void GenerateDeoptimizationEntries( MacroAssembler* masm, int count, BailoutType type); @@ -455,10 +488,22 @@ class Deoptimizer : public Malloced { // Array of output frame descriptions. FrameDescription** output_; + // Deferred values to be materialized. List<Object*> deferred_objects_tagged_values_; List<double> deferred_objects_double_values_; List<ObjectMaterializationDescriptor> deferred_objects_; List<HeapNumberMaterializationDescriptor> deferred_heap_numbers_; + + // Output frame information. Only used during heap object materialization. + List<Handle<JSFunction> > jsframe_functions_; + List<bool> jsframe_has_adapted_arguments_; + + // Materialized objects. Only used during heap object materialization. + List<Handle<Object> >* materialized_values_; + List<Handle<Object> >* materialized_objects_; + int materialization_value_index_; + int materialization_object_index_; + #ifdef DEBUG DisallowHeapAllocation* disallow_heap_allocation_; #endif // DEBUG @@ -712,7 +757,9 @@ class Translation BASE_EMBEDDED { SETTER_STUB_FRAME, ARGUMENTS_ADAPTOR_FRAME, COMPILED_STUB_FRAME, + DUPLICATED_OBJECT, ARGUMENTS_OBJECT, + CAPTURED_OBJECT, REGISTER, INT32_REGISTER, UINT32_REGISTER, @@ -744,6 +791,8 @@ class Translation BASE_EMBEDDED { void BeginGetterStubFrame(int literal_id); void BeginSetterStubFrame(int literal_id); void BeginArgumentsObject(int args_length); + void BeginCapturedObject(int length); + void DuplicateObject(int object_index); void StoreRegister(Register reg); void StoreInt32Register(Register reg); void StoreUint32Register(Register reg); |