< 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 >