< prev index next >
src/hotspot/share/runtime/deoptimization.cpp
Print this page
*** 501,511 ****
// non-parameter locals of the first unpacked interpreted frame.
// Compute that adjustment.
caller_adjustment = last_frame_adjust(callee_parameters, callee_locals);
}
! // If the sender is deoptimized the we must retrieve the address of the handler
// since the frame will "magically" show the original pc before the deopt
// and we'd undo the deopt.
frame_pcs[0] = deopt_sender.raw_pc();
--- 501,511 ----
// non-parameter locals of the first unpacked interpreted frame.
// Compute that adjustment.
caller_adjustment = last_frame_adjust(callee_parameters, callee_locals);
}
! // If the sender is deoptimized we must retrieve the address of the handler
// since the frame will "magically" show the original pc before the deopt
// and we'd undo the deopt.
frame_pcs[0] = deopt_sender.raw_pc();
*** 1006,1026 ****
GrowableArray<ReassignedField>* fields = new GrowableArray<ReassignedField>();
for (AllFieldStream fs(klass); !fs.done(); fs.next()) {
if (!fs.access_flags().is_static() && (!skip_internal || !fs.access_flags().is_internal())) {
ReassignedField field;
field._offset = fs.offset();
! field._type = fs.is_flattened() ? T_VALUETYPE : FieldType::basic_type(fs.signature());
! if (field._type == T_VALUETYPE) {
if (fs.is_flattened()) {
// Resolve klass of flattened value type field
Klass* vk = klass->get_value_field_klass(fs.index());
! assert(vk->is_value(), "must be a ValueKlass");
! field._klass = InstanceKlass::cast(vk);
! } else {
! // Non-flattened value type field
! field._type = T_VALUETYPEPTR;
! }
}
fields->append(field);
}
}
fields->sort(compare);
--- 1006,1021 ----
GrowableArray<ReassignedField>* fields = new GrowableArray<ReassignedField>();
for (AllFieldStream fs(klass); !fs.done(); fs.next()) {
if (!fs.access_flags().is_static() && (!skip_internal || !fs.access_flags().is_internal())) {
ReassignedField field;
field._offset = fs.offset();
! field._type = FieldType::basic_type(fs.signature());
if (fs.is_flattened()) {
// Resolve klass of flattened value type field
Klass* vk = klass->get_value_field_klass(fs.index());
! field._klass = ValueKlass::cast(vk);
! field._type = T_VALUETYPE;
}
fields->append(field);
}
}
fields->sort(compare);
*** 1030,1040 ****
StackValue* value = StackValue::create_stack_value(fr, reg_map, scope_field);
int offset = base_offset + fields->at(i)._offset;
BasicType type = fields->at(i)._type;
switch (type) {
case T_OBJECT:
- case T_VALUETYPEPTR:
case T_ARRAY:
assert(value->type() == T_OBJECT, "Agreement.");
obj->obj_field_put(offset, value->get_obj()());
break;
--- 1025,1034 ----
< prev index next >