src/share/vm/runtime/deoptimization.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File valhalla Sdiff src/share/vm/runtime

src/share/vm/runtime/deoptimization.cpp

Print this page




1128         val = value->get_int();
1129         obj->byte_field_put(offset, (jbyte)*((jint*)&val));
1130         break;
1131 
1132       case T_BOOLEAN:
1133         assert(value->type() == T_INT, "Agreement.");
1134         val = value->get_int();
1135         obj->bool_field_put(offset, (jboolean)*((jint*)&val));
1136         break;
1137 
1138       default:
1139         ShouldNotReachHere();
1140     }
1141     svIndex++;
1142   }
1143   return svIndex;
1144 }
1145 
1146 // restore fields of an eliminated value type array
1147 void Deoptimization::reassign_value_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, valueArrayOop obj, ValueArrayKlass* vak, TRAPS) {
1148   ValueKlass* vk = vak->element_klass();
1149   assert(vk->flatten_array(), "should only be used for flattened value type arrays");
1150   // Adjust offset to omit oop header
1151   int base_offset = arrayOopDesc::base_offset_in_bytes(T_VALUETYPE) - ValueKlass::cast(vk)->first_field_offset();
1152   // Initialize all elements of the flattened value type array
1153   for (int i = 0; i < sv->field_size(); i++) {
1154     ScopeValue* val = sv->field_at(i);
1155     int offset = base_offset + (i << Klass::layout_helper_log2_element_size(vak->layout_helper()));
1156     reassign_fields_by_klass(vk, fr, reg_map, val->as_ObjectValue(), 0, (oop)obj, false /* skip_internal */, offset, CHECK);
1157   }
1158 }
1159 
1160 // restore fields of all eliminated objects and arrays
1161 void Deoptimization::reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures, bool skip_internal, TRAPS) {
1162   for (int i = 0; i < objects->length(); i++) {
1163     ObjectValue* sv = (ObjectValue*) objects->at(i);
1164     Klass* k = java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()());
1165     Handle obj = sv->value();
1166     assert(obj.not_null() || realloc_failures, "reallocation was missed");
1167     if (PrintDeoptimizationDetails) {
1168       tty->print_cr("reassign fields for object of type %s!", k->name()->as_C_string());




1128         val = value->get_int();
1129         obj->byte_field_put(offset, (jbyte)*((jint*)&val));
1130         break;
1131 
1132       case T_BOOLEAN:
1133         assert(value->type() == T_INT, "Agreement.");
1134         val = value->get_int();
1135         obj->bool_field_put(offset, (jboolean)*((jint*)&val));
1136         break;
1137 
1138       default:
1139         ShouldNotReachHere();
1140     }
1141     svIndex++;
1142   }
1143   return svIndex;
1144 }
1145 
1146 // restore fields of an eliminated value type array
1147 void Deoptimization::reassign_value_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, valueArrayOop obj, ValueArrayKlass* vak, TRAPS) {
1148   ValueKlass* vk = (ValueKlass*)vak->element_klass();
1149   assert(vk->flatten_array(), "should only be used for flattened value type arrays");
1150   // Adjust offset to omit oop header
1151   int base_offset = arrayOopDesc::base_offset_in_bytes(T_VALUETYPE) - ValueKlass::cast(vk)->first_field_offset();
1152   // Initialize all elements of the flattened value type array
1153   for (int i = 0; i < sv->field_size(); i++) {
1154     ScopeValue* val = sv->field_at(i);
1155     int offset = base_offset + (i << Klass::layout_helper_log2_element_size(vak->layout_helper()));
1156     reassign_fields_by_klass(vk, fr, reg_map, val->as_ObjectValue(), 0, (oop)obj, false /* skip_internal */, offset, CHECK);
1157   }
1158 }
1159 
1160 // restore fields of all eliminated objects and arrays
1161 void Deoptimization::reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures, bool skip_internal, TRAPS) {
1162   for (int i = 0; i < objects->length(); i++) {
1163     ObjectValue* sv = (ObjectValue*) objects->at(i);
1164     Klass* k = java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()());
1165     Handle obj = sv->value();
1166     assert(obj.not_null() || realloc_failures, "reallocation was missed");
1167     if (PrintDeoptimizationDetails) {
1168       tty->print_cr("reassign fields for object of type %s!", k->name()->as_C_string());


src/share/vm/runtime/deoptimization.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File