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());
|