< prev index next >

src/share/vm/runtime/deoptimization.hpp

Print this page

        

*** 121,131 **** enum UnpackType { Unpack_deopt = 0, // normal deoptimization, use pc computed in unpack_vframe_on_stack Unpack_exception = 1, // exception is pending Unpack_uncommon_trap = 2, // redo last byte code (C2 only) ! Unpack_reexecute = 3 // reexecute bytecode (C1 only) }; // Checks all compiled methods. Invalid methods are deleted and // corresponding activations are deoptimized. static int deoptimize_dependents(); --- 121,132 ---- enum UnpackType { Unpack_deopt = 0, // normal deoptimization, use pc computed in unpack_vframe_on_stack Unpack_exception = 1, // exception is pending Unpack_uncommon_trap = 2, // redo last byte code (C2 only) ! Unpack_reexecute = 3, // reexecute bytecode (C1 only) ! Unpack_LIMIT = 4 }; // Checks all compiled methods. Invalid methods are deleted and // corresponding activations are deoptimized. static int deoptimize_dependents();
*** 177,212 **** intptr_t* _register_block; // Block for storing callee-saved registers. BasicType _return_type; // Tells if we have to restore double or long return value intptr_t _initial_info; // Platform dependent data for the sender frame (was FP on x86) int _caller_actual_parameters; // The number of actual arguments at the // interpreted caller of the deoptimized frame // The following fields are used as temps during the unpacking phase // (which is tight on registers, especially on x86). They really ought // to be PD variables but that involves moving this class into its own // file to use the pd include mechanism. Maybe in a later cleanup ... intptr_t _counter_temp; // SHOULD BE PD VARIABLE (x86 frame count temp) - intptr_t _unpack_kind; // SHOULD BE PD VARIABLE (x86 unpack kind) intptr_t _sender_sp_temp; // SHOULD BE PD VARIABLE (x86 sender_sp) public: // Constructor UnrollBlock(int size_of_deoptimized_frame, int caller_adjustment, int caller_actual_parameters, int number_of_frames, intptr_t* frame_sizes, address* frames_pcs, ! BasicType return_type); ~UnrollBlock(); // Returns where a register is located. intptr_t* value_addr_at(int register_number) const; // Accessors intptr_t* frame_sizes() const { return _frame_sizes; } int number_of_frames() const { return _number_of_frames; } address* frame_pcs() const { return _frame_pcs ; } // Returns the total size of frames int size_of_frames() const; void set_initial_info(intptr_t info) { _initial_info = info; } --- 178,215 ---- intptr_t* _register_block; // Block for storing callee-saved registers. BasicType _return_type; // Tells if we have to restore double or long return value intptr_t _initial_info; // Platform dependent data for the sender frame (was FP on x86) int _caller_actual_parameters; // The number of actual arguments at the // interpreted caller of the deoptimized frame + int _unpack_kind; // exec_mode that can be changed during fetch_unroll_info // The following fields are used as temps during the unpacking phase // (which is tight on registers, especially on x86). They really ought // to be PD variables but that involves moving this class into its own // file to use the pd include mechanism. Maybe in a later cleanup ... intptr_t _counter_temp; // SHOULD BE PD VARIABLE (x86 frame count temp) intptr_t _sender_sp_temp; // SHOULD BE PD VARIABLE (x86 sender_sp) public: // Constructor UnrollBlock(int size_of_deoptimized_frame, int caller_adjustment, int caller_actual_parameters, int number_of_frames, intptr_t* frame_sizes, address* frames_pcs, ! BasicType return_type, ! int unpack_kind); ~UnrollBlock(); // Returns where a register is located. intptr_t* value_addr_at(int register_number) const; // Accessors intptr_t* frame_sizes() const { return _frame_sizes; } int number_of_frames() const { return _number_of_frames; } address* frame_pcs() const { return _frame_pcs ; } + int unpack_kind() const { return _unpack_kind; } // Returns the total size of frames int size_of_frames() const; void set_initial_info(intptr_t info) { _initial_info = info; }
*** 235,245 **** // how to make room for the resulting interpreter frames. // Called by assembly stub after execution has returned to // deoptimized frame. // @argument thread. Thread where stub_frame resides. // @see OptoRuntime::deoptimization_fetch_unroll_info_C ! static UnrollBlock* fetch_unroll_info(JavaThread* thread); //** Unpacks vframeArray onto execution stack // Called by assembly stub after execution has returned to // deoptimized frame and after the stack unrolling. // @argument thread. Thread where stub_frame resides. --- 238,248 ---- // how to make room for the resulting interpreter frames. // Called by assembly stub after execution has returned to // deoptimized frame. // @argument thread. Thread where stub_frame resides. // @see OptoRuntime::deoptimization_fetch_unroll_info_C ! static UnrollBlock* fetch_unroll_info(JavaThread* thread, int exec_mode); //** Unpacks vframeArray onto execution stack // Called by assembly stub after execution has returned to // deoptimized frame and after the stack unrolling. // @argument thread. Thread where stub_frame resides.
*** 260,270 **** // so caller of the deoptimized frame will get back the values it expects. static void unwind_callee_save_values(frame* f, vframeArray* vframe_array); //** Performs an uncommon trap for compiled code. // The top most compiler frame is converted into interpreter frames ! static UnrollBlock* uncommon_trap(JavaThread* thread, jint unloaded_class_index); // Helper routine that enters the VM and may block static void uncommon_trap_inner(JavaThread* thread, jint unloaded_class_index); //** Deoptimizes the frame identified by id. // Only called from VMDeoptimizeFrame --- 263,273 ---- // so caller of the deoptimized frame will get back the values it expects. static void unwind_callee_save_values(frame* f, vframeArray* vframe_array); //** Performs an uncommon trap for compiled code. // The top most compiler frame is converted into interpreter frames ! static UnrollBlock* uncommon_trap(JavaThread* thread, jint unloaded_class_index, jint exec_mode); // Helper routine that enters the VM and may block static void uncommon_trap_inner(JavaThread* thread, jint unloaded_class_index); //** Deoptimizes the frame identified by id. // Only called from VMDeoptimizeFrame
*** 421,431 **** bool& ret_maybe_prior_recompile); // class loading support for uncommon trap static void load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS); static void load_class_by_index(constantPoolHandle constant_pool, int index); ! static UnrollBlock* fetch_unroll_info_helper(JavaThread* thread); static DeoptAction _unloaded_action; // == Action_reinterpret; static const char* _trap_reason_name[]; static const char* _trap_action_name[]; --- 424,434 ---- bool& ret_maybe_prior_recompile); // class loading support for uncommon trap static void load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS); static void load_class_by_index(constantPoolHandle constant_pool, int index); ! static UnrollBlock* fetch_unroll_info_helper(JavaThread* thread, int exec_mode); static DeoptAction _unloaded_action; // == Action_reinterpret; static const char* _trap_reason_name[]; static const char* _trap_action_name[];
< prev index next >