diff options
Diffstat (limited to 'deps/v8/src/deoptimizer.h')
-rw-r--r-- | deps/v8/src/deoptimizer.h | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/deps/v8/src/deoptimizer.h b/deps/v8/src/deoptimizer.h index cd33477e26..89955b38bd 100644 --- a/deps/v8/src/deoptimizer.h +++ b/deps/v8/src/deoptimizer.h @@ -57,6 +57,20 @@ class HeapNumberMaterializationDescriptor BASE_EMBEDDED { }; +class ArgumentsObjectMaterializationDescriptor BASE_EMBEDDED { + public: + ArgumentsObjectMaterializationDescriptor(Address slot_address, int argc) + : slot_address_(slot_address), arguments_length_(argc) { } + + Address slot_address() const { return slot_address_; } + int arguments_length() const { return arguments_length_; } + + private: + Address slot_address_; + int arguments_length_; +}; + + class OptimizedFunctionVisitor BASE_EMBEDDED { public: virtual ~OptimizedFunctionVisitor() {} @@ -86,8 +100,10 @@ class DeoptimizerData { #endif private: - MemoryChunk* eager_deoptimization_entry_code_; - MemoryChunk* lazy_deoptimization_entry_code_; + int eager_deoptimization_entry_code_entries_; + int lazy_deoptimization_entry_code_entries_; + VirtualMemory* eager_deoptimization_entry_code_; + VirtualMemory* lazy_deoptimization_entry_code_; Deoptimizer* current_; #ifdef ENABLE_DEBUGGER_SUPPORT @@ -152,6 +168,10 @@ class Deoptimizer : public Malloced { // execution returns. static void DeoptimizeFunction(JSFunction* function); + // Iterate over all the functions which share the same code object + // and make them use unoptimized version. + static void ReplaceCodeForRelatedFunctions(JSFunction* function, Code* code); + // Deoptimize all functions in the heap. static void DeoptimizeAll(); @@ -196,7 +216,7 @@ class Deoptimizer : public Malloced { ~Deoptimizer(); - void MaterializeHeapNumbers(); + void MaterializeHeapObjects(JavaScriptFrameIterator* it); #ifdef ENABLE_DEBUGGER_SUPPORT void MaterializeHeapNumbersForDebuggerInspectableFrame( Address parameters_top, @@ -208,7 +228,17 @@ class Deoptimizer : public Malloced { static void ComputeOutputFrames(Deoptimizer* deoptimizer); - static Address GetDeoptimizationEntry(int id, BailoutType type); + + enum GetEntryMode { + CALCULATE_ENTRY_ADDRESS, + ENSURE_ENTRY_CODE + }; + + + static Address GetDeoptimizationEntry( + int id, + BailoutType type, + GetEntryMode mode = ENSURE_ENTRY_CODE); static int GetDeoptimizationId(Address addr, BailoutType type); static int GetOutputInfo(DeoptimizationOutputData* data, BailoutId node_id, @@ -265,8 +295,11 @@ class Deoptimizer : public Malloced { int ConvertJSFrameIndexToFrameIndex(int jsframe_index); + static size_t GetMaxDeoptTableSize(); + private: - static const int kNumberOfEntries = 16384; + static const int kMinNumberOfEntries = 64; + static const int kMaxNumberOfEntries = 16384; Deoptimizer(Isolate* isolate, JSFunction* function, @@ -305,9 +338,12 @@ class Deoptimizer : public Malloced { Object* ComputeLiteral(int index) const; + void AddArgumentsObject(intptr_t slot_address, int argc); + void AddArgumentsObjectValue(intptr_t value); void AddDoubleValue(intptr_t slot_address, double value); - static MemoryChunk* CreateCode(BailoutType type); + static void EnsureCodeForDeoptimizationEntry(BailoutType type, + int max_entry_id); static void GenerateDeoptimizationEntries( MacroAssembler* masm, int count, BailoutType type); @@ -340,6 +376,8 @@ class Deoptimizer : public Malloced { // Array of output frame descriptions. FrameDescription** output_; + List<Object*> deferred_arguments_objects_values_; + List<ArgumentsObjectMaterializationDescriptor> deferred_arguments_objects_; List<HeapNumberMaterializationDescriptor> deferred_heap_numbers_; static const int table_entry_size_; @@ -499,9 +537,6 @@ class FrameDescription { intptr_t context_; StackFrame::Type type_; Smi* state_; -#ifdef DEBUG - Code::Kind kind_; -#endif // Continuation is the PC where the execution continues after // deoptimizing. @@ -608,7 +643,7 @@ class Translation BASE_EMBEDDED { void StoreUint32StackSlot(int index); void StoreDoubleStackSlot(int index); void StoreLiteral(int literal_id); - void StoreArgumentsObject(); + void StoreArgumentsObject(int args_index, int args_length); void MarkDuplicate(); Zone* zone() const { return zone_; } |