| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without | 
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are | 
| 4 // met: | 4 // met: | 
| 5 // | 5 // | 
| 6 //     * Redistributions of source code must retain the above copyright | 6 //     * Redistributions of source code must retain the above copyright | 
| 7 //       notice, this list of conditions and the following disclaimer. | 7 //       notice, this list of conditions and the following disclaimer. | 
| 8 //     * Redistributions in binary form must reproduce the above | 8 //     * Redistributions in binary form must reproduce the above | 
| 9 //       copyright notice, this list of conditions and the following | 9 //       copyright notice, this list of conditions and the following | 
| 10 //       disclaimer in the documentation and/or other materials provided | 10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 124  public: | 124  public: | 
| 125   enum BailoutType { | 125   enum BailoutType { | 
| 126     EAGER, | 126     EAGER, | 
| 127     LAZY, | 127     LAZY, | 
| 128     SOFT, | 128     SOFT, | 
| 129     // This last bailout type is not really a bailout, but used by the | 129     // This last bailout type is not really a bailout, but used by the | 
| 130     // debugger to deoptimize stack frames to allow inspection. | 130     // debugger to deoptimize stack frames to allow inspection. | 
| 131     DEBUGGER | 131     DEBUGGER | 
| 132   }; | 132   }; | 
| 133 | 133 | 
| 134   enum InterruptPatchState { |  | 
| 135     NOT_PATCHED, |  | 
| 136     PATCHED_FOR_OSR |  | 
| 137   }; |  | 
| 138 |  | 
| 139   static const int kBailoutTypesWithCodeEntry = SOFT + 1; | 134   static const int kBailoutTypesWithCodeEntry = SOFT + 1; | 
| 140 | 135 | 
| 141   struct JumpTableEntry { | 136   struct JumpTableEntry { | 
| 142     inline JumpTableEntry(Address entry, | 137     inline JumpTableEntry(Address entry, | 
| 143                           Deoptimizer::BailoutType type, | 138                           Deoptimizer::BailoutType type, | 
| 144                           bool frame) | 139                           bool frame) | 
| 145         : label(), | 140         : label(), | 
| 146           address(entry), | 141           address(entry), | 
| 147           bailout_type(type), | 142           bailout_type(type), | 
| 148           needs_frame(frame) { } | 143           needs_frame(frame) { } | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 206   // refer to that code. | 201   // refer to that code. | 
| 207   static void DeoptimizeMarkedCode(Isolate* isolate); | 202   static void DeoptimizeMarkedCode(Isolate* isolate); | 
| 208 | 203 | 
| 209   // Visit all the known optimized functions in a given isolate. | 204   // Visit all the known optimized functions in a given isolate. | 
| 210   static void VisitAllOptimizedFunctions( | 205   static void VisitAllOptimizedFunctions( | 
| 211       Isolate* isolate, OptimizedFunctionVisitor* visitor); | 206       Isolate* isolate, OptimizedFunctionVisitor* visitor); | 
| 212 | 207 | 
| 213   // The size in bytes of the code required at a lazy deopt patch site. | 208   // The size in bytes of the code required at a lazy deopt patch site. | 
| 214   static int patch_size(); | 209   static int patch_size(); | 
| 215 | 210 | 
| 216   // Patch all interrupts with allowed loop depth in the unoptimized code to |  | 
| 217   // unconditionally call replacement_code. |  | 
| 218   static void PatchInterruptCode(Isolate* isolate, |  | 
| 219                                  Code* unoptimized_code); |  | 
| 220 |  | 
| 221   // Patch the interrupt at the instruction before pc_after in |  | 
| 222   // the unoptimized code to unconditionally call replacement_code. |  | 
| 223   static void PatchInterruptCodeAt(Code* unoptimized_code, |  | 
| 224                                    Address pc_after, |  | 
| 225                                    Code* replacement_code); |  | 
| 226 |  | 
| 227   // Change all patched interrupts patched in the unoptimized code |  | 
| 228   // back to normal interrupts. |  | 
| 229   static void RevertInterruptCode(Isolate* isolate, |  | 
| 230                                   Code* unoptimized_code); |  | 
| 231 |  | 
| 232   // Change patched interrupt in the unoptimized code |  | 
| 233   // back to a normal interrupt. |  | 
| 234   static void RevertInterruptCodeAt(Code* unoptimized_code, |  | 
| 235                                     Address pc_after, |  | 
| 236                                     Code* interrupt_code); |  | 
| 237 |  | 
| 238 #ifdef DEBUG |  | 
| 239   static InterruptPatchState GetInterruptPatchState(Isolate* isolate, |  | 
| 240                                                     Code* unoptimized_code, |  | 
| 241                                                     Address pc_after); |  | 
| 242 |  | 
| 243   // Verify that all back edges of a certain loop depth are patched. |  | 
| 244   static bool VerifyInterruptCode(Isolate* isolate, |  | 
| 245                                   Code* unoptimized_code, |  | 
| 246                                   int loop_nesting_level); |  | 
| 247 #endif  // DEBUG |  | 
| 248 |  | 
| 249   ~Deoptimizer(); | 211   ~Deoptimizer(); | 
| 250 | 212 | 
| 251   void MaterializeHeapObjects(JavaScriptFrameIterator* it); | 213   void MaterializeHeapObjects(JavaScriptFrameIterator* it); | 
| 252 #ifdef ENABLE_DEBUGGER_SUPPORT | 214 #ifdef ENABLE_DEBUGGER_SUPPORT | 
| 253   void MaterializeHeapNumbersForDebuggerInspectableFrame( | 215   void MaterializeHeapNumbersForDebuggerInspectableFrame( | 
| 254       Address parameters_top, | 216       Address parameters_top, | 
| 255       uint32_t parameters_size, | 217       uint32_t parameters_size, | 
| 256       Address expressions_top, | 218       Address expressions_top, | 
| 257       uint32_t expressions_size, | 219       uint32_t expressions_size, | 
| 258       DeoptimizedFrameInfo* info); | 220       DeoptimizedFrameInfo* info); | 
| (...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 953   Object** expression_stack_; | 915   Object** expression_stack_; | 
| 954   int source_position_; | 916   int source_position_; | 
| 955 | 917 | 
| 956   friend class Deoptimizer; | 918   friend class Deoptimizer; | 
| 957 }; | 919 }; | 
| 958 #endif | 920 #endif | 
| 959 | 921 | 
| 960 } }  // namespace v8::internal | 922 } }  // namespace v8::internal | 
| 961 | 923 | 
| 962 #endif  // V8_DEOPTIMIZER_H_ | 924 #endif  // V8_DEOPTIMIZER_H_ | 
| OLD | NEW | 
|---|