< prev index next >
src/share/vm/runtime/deoptimization.cpp
Print this page
*** 877,892 ****
// We're deoptimizing at the return of a call, value type fields are
// in registers. When we go back to the interpreter, it will expect a
// reference to a value type instance. Allocate and initialize it from
// the register values here.
bool Deoptimization::realloc_value_type_result(ValueKlass* vk, const RegisterMap& map, GrowableArray<Handle>& return_oops, TRAPS) {
! VMRegPair* regs;
! int nb_fields;
! const GrowableArray<SigEntry>& sig_vk = vk->return_convention(regs, nb_fields);
! regs++;
! nb_fields--;
! oop new_vt = vk->realloc_result(sig_vk, map, regs, return_oops, nb_fields, THREAD);
if (new_vt == NULL) {
CLEAR_PENDING_EXCEPTION;
THROW_OOP_(Universe::out_of_memory_error_realloc_objects(), true);
}
return_oops.clear();
--- 877,887 ----
// We're deoptimizing at the return of a call, value type fields are
// in registers. When we go back to the interpreter, it will expect a
// reference to a value type instance. Allocate and initialize it from
// the register values here.
bool Deoptimization::realloc_value_type_result(ValueKlass* vk, const RegisterMap& map, GrowableArray<Handle>& return_oops, TRAPS) {
! oop new_vt = vk->realloc_result(map, return_oops, THREAD);
if (new_vt == NULL) {
CLEAR_PENDING_EXCEPTION;
THROW_OOP_(Universe::out_of_memory_error_realloc_objects(), true);
}
return_oops.clear();
< prev index next >