248 VMField::klass()->initialize(CHECK_NULL); |
248 VMField::klass()->initialize(CHECK_NULL); |
249 VMFlag::klass()->initialize(CHECK_NULL); |
249 VMFlag::klass()->initialize(CHECK_NULL); |
250 VMIntrinsicMethod::klass()->initialize(CHECK_NULL); |
250 VMIntrinsicMethod::klass()->initialize(CHECK_NULL); |
251 |
251 |
252 int len = JVMCIVMStructs::localHotSpotVMStructs_count(); |
252 int len = JVMCIVMStructs::localHotSpotVMStructs_count(); |
253 objArrayHandle vmFields = oopFactory::new_objArray(VMField::klass(), len, CHECK_NULL); |
253 objArrayHandle vmFields = oopFactory::new_objArray_handle(VMField::klass(), len, CHECK_NULL); |
254 for (int i = 0; i < len ; i++) { |
254 for (int i = 0; i < len ; i++) { |
|
255 HandleMark hm(THREAD); |
255 VMStructEntry vmField = JVMCIVMStructs::localHotSpotVMStructs[i]; |
256 VMStructEntry vmField = JVMCIVMStructs::localHotSpotVMStructs[i]; |
256 instanceHandle vmFieldObj = InstanceKlass::cast(VMField::klass())->allocate_instance_handle(CHECK_NULL); |
257 instanceHandle vmFieldObj = InstanceKlass::cast(VMField::klass())->allocate_instance_handle(CHECK_NULL); |
257 size_t name_buf_len = strlen(vmField.typeName) + strlen(vmField.fieldName) + 2 /* "::" */; |
258 size_t name_buf_len = strlen(vmField.typeName) + strlen(vmField.fieldName) + 2 /* "::" */; |
258 char* name_buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, name_buf_len + 1); |
259 char* name_buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, name_buf_len + 1); |
259 sprintf(name_buf, "%s::%s", vmField.typeName, vmField.fieldName); |
260 sprintf(name_buf, "%s::%s", vmField.typeName, vmField.fieldName); |
288 } |
289 } |
289 vmFields->obj_at_put(i, vmFieldObj()); |
290 vmFields->obj_at_put(i, vmFieldObj()); |
290 } |
291 } |
291 |
292 |
292 len = JVMCIVMStructs::localHotSpotVMTypes_count(); |
293 len = JVMCIVMStructs::localHotSpotVMTypes_count(); |
293 objArrayHandle vmTypes = oopFactory::new_objArray(SystemDictionary::Object_klass(), len * 2, CHECK_NULL); |
294 objArrayHandle vmTypes = oopFactory::new_objArray_handle(SystemDictionary::Object_klass(), len * 2, CHECK_NULL); |
294 for (int i = 0; i < len ; i++) { |
295 for (int i = 0; i < len ; i++) { |
|
296 HandleMark hm(THREAD); |
295 VMTypeEntry vmType = JVMCIVMStructs::localHotSpotVMTypes[i]; |
297 VMTypeEntry vmType = JVMCIVMStructs::localHotSpotVMTypes[i]; |
296 Handle name = java_lang_String::create_from_str(vmType.typeName, CHECK_NULL); |
298 Handle name = java_lang_String::create_from_str(vmType.typeName, CHECK_NULL); |
297 BOXED_LONG(size, vmType.size); |
299 BOXED_LONG(size, vmType.size); |
298 vmTypes->obj_at_put(i * 2, name()); |
300 vmTypes->obj_at_put(i * 2, name()); |
299 vmTypes->obj_at_put(i * 2 + 1, size); |
301 vmTypes->obj_at_put(i * 2 + 1, size); |
300 } |
302 } |
301 |
303 |
302 int ints_len = JVMCIVMStructs::localHotSpotVMIntConstants_count(); |
304 int ints_len = JVMCIVMStructs::localHotSpotVMIntConstants_count(); |
303 int longs_len = JVMCIVMStructs::localHotSpotVMLongConstants_count(); |
305 int longs_len = JVMCIVMStructs::localHotSpotVMLongConstants_count(); |
304 len = ints_len + longs_len; |
306 len = ints_len + longs_len; |
305 objArrayHandle vmConstants = oopFactory::new_objArray(SystemDictionary::Object_klass(), len * 2, CHECK_NULL); |
307 objArrayHandle vmConstants = oopFactory::new_objArray_handle(SystemDictionary::Object_klass(), len * 2, CHECK_NULL); |
306 int insert = 0; |
308 int insert = 0; |
307 for (int i = 0; i < ints_len ; i++) { |
309 for (int i = 0; i < ints_len ; i++) { |
|
310 HandleMark hm(THREAD); |
308 VMIntConstantEntry c = JVMCIVMStructs::localHotSpotVMIntConstants[i]; |
311 VMIntConstantEntry c = JVMCIVMStructs::localHotSpotVMIntConstants[i]; |
309 Handle name = java_lang_String::create_from_str(c.name, CHECK_NULL); |
312 Handle name = java_lang_String::create_from_str(c.name, CHECK_NULL); |
310 BOXED_LONG(value, c.value); |
313 BOXED_LONG(value, c.value); |
311 vmConstants->obj_at_put(insert++, name()); |
314 vmConstants->obj_at_put(insert++, name()); |
312 vmConstants->obj_at_put(insert++, value); |
315 vmConstants->obj_at_put(insert++, value); |
313 } |
316 } |
314 for (int i = 0; i < longs_len ; i++) { |
317 for (int i = 0; i < longs_len ; i++) { |
|
318 HandleMark hm(THREAD); |
315 VMLongConstantEntry c = JVMCIVMStructs::localHotSpotVMLongConstants[i]; |
319 VMLongConstantEntry c = JVMCIVMStructs::localHotSpotVMLongConstants[i]; |
316 Handle name = java_lang_String::create_from_str(c.name, CHECK_NULL); |
320 Handle name = java_lang_String::create_from_str(c.name, CHECK_NULL); |
317 BOXED_LONG(value, c.value); |
321 BOXED_LONG(value, c.value); |
318 vmConstants->obj_at_put(insert++, name()); |
322 vmConstants->obj_at_put(insert++, name()); |
319 vmConstants->obj_at_put(insert++, value); |
323 vmConstants->obj_at_put(insert++, value); |
320 } |
324 } |
321 assert(insert == len * 2, "must be"); |
325 assert(insert == len * 2, "must be"); |
322 |
326 |
323 len = JVMCIVMStructs::localHotSpotVMAddresses_count(); |
327 len = JVMCIVMStructs::localHotSpotVMAddresses_count(); |
324 objArrayHandle vmAddresses = oopFactory::new_objArray(SystemDictionary::Object_klass(), len * 2, CHECK_NULL); |
328 objArrayHandle vmAddresses = oopFactory::new_objArray_handle(SystemDictionary::Object_klass(), len * 2, CHECK_NULL); |
325 for (int i = 0; i < len ; i++) { |
329 for (int i = 0; i < len ; i++) { |
|
330 HandleMark hm(THREAD); |
326 VMAddressEntry a = JVMCIVMStructs::localHotSpotVMAddresses[i]; |
331 VMAddressEntry a = JVMCIVMStructs::localHotSpotVMAddresses[i]; |
327 Handle name = java_lang_String::create_from_str(a.name, CHECK_NULL); |
332 Handle name = java_lang_String::create_from_str(a.name, CHECK_NULL); |
328 BOXED_LONG(value, a.value); |
333 BOXED_LONG(value, a.value); |
329 vmAddresses->obj_at_put(i * 2, name()); |
334 vmAddresses->obj_at_put(i * 2, name()); |
330 vmAddresses->obj_at_put(i * 2 + 1, value); |
335 vmAddresses->obj_at_put(i * 2 + 1, value); |
331 } |
336 } |
332 |
337 |
333 // The last entry is the null entry. |
338 // The last entry is the null entry. |
334 len = (int) Flag::numFlags - 1; |
339 len = (int) Flag::numFlags - 1; |
335 objArrayHandle vmFlags = oopFactory::new_objArray(VMFlag::klass(), len, CHECK_NULL); |
340 objArrayHandle vmFlags = oopFactory::new_objArray_handle(VMFlag::klass(), len, CHECK_NULL); |
336 for (int i = 0; i < len; i++) { |
341 for (int i = 0; i < len; i++) { |
|
342 HandleMark hm(THREAD); |
337 Flag* flag = &Flag::flags[i]; |
343 Flag* flag = &Flag::flags[i]; |
338 instanceHandle vmFlagObj = InstanceKlass::cast(VMFlag::klass())->allocate_instance_handle(CHECK_NULL); |
344 instanceHandle vmFlagObj = InstanceKlass::cast(VMFlag::klass())->allocate_instance_handle(CHECK_NULL); |
339 Handle name = java_lang_String::create_from_str(flag->_name, CHECK_NULL); |
345 Handle name = java_lang_String::create_from_str(flag->_name, CHECK_NULL); |
340 Handle type = java_lang_String::create_from_str(flag->_type, CHECK_NULL); |
346 Handle type = java_lang_String::create_from_str(flag->_type, CHECK_NULL); |
341 VMFlag::set_name(vmFlagObj, name()); |
347 VMFlag::set_name(vmFlagObj, name()); |
604 return CompilerOracle::should_inline(method) || method->force_inline(); |
610 return CompilerOracle::should_inline(method) || method->force_inline(); |
605 C2V_END |
611 C2V_END |
606 |
612 |
607 C2V_VMENTRY(jobject, lookupType, (JNIEnv*, jobject, jstring jname, jclass accessing_class, jboolean resolve)) |
613 C2V_VMENTRY(jobject, lookupType, (JNIEnv*, jobject, jstring jname, jclass accessing_class, jboolean resolve)) |
608 ResourceMark rm; |
614 ResourceMark rm; |
609 Handle name = JNIHandles::resolve(jname); |
615 Handle name(THREAD, JNIHandles::resolve(jname)); |
610 Symbol* class_name = java_lang_String::as_symbol(name, CHECK_0); |
616 Symbol* class_name = java_lang_String::as_symbol(name(), CHECK_0); |
611 if (java_lang_String::length(name()) <= 1) { |
617 if (java_lang_String::length(name()) <= 1) { |
612 THROW_MSG_0(vmSymbols::java_lang_InternalError(), err_msg("Primitive type %s should be handled in Java code", class_name->as_C_string())); |
618 THROW_MSG_0(vmSymbols::java_lang_InternalError(), err_msg("Primitive type %s should be handled in Java code", class_name->as_C_string())); |
613 } |
619 } |
614 |
620 |
615 Klass* resolved_klass = NULL; |
621 Klass* resolved_klass = NULL; |
616 Handle class_loader; |
|
617 Handle protection_domain; |
|
618 if (JNIHandles::resolve(accessing_class) == NULL) { |
622 if (JNIHandles::resolve(accessing_class) == NULL) { |
619 THROW_0(vmSymbols::java_lang_NullPointerException()); |
623 THROW_0(vmSymbols::java_lang_NullPointerException()); |
620 } |
624 } |
621 Klass* accessing_klass = java_lang_Class::as_Klass(JNIHandles::resolve(accessing_class)); |
625 Klass* accessing_klass = java_lang_Class::as_Klass(JNIHandles::resolve(accessing_class)); |
622 class_loader = accessing_klass->class_loader(); |
626 Handle class_loader(THREAD, accessing_klass->class_loader()); |
623 protection_domain = accessing_klass->protection_domain(); |
627 Handle protection_domain(THREAD, accessing_klass->protection_domain()); |
624 |
628 |
625 if (resolve) { |
629 if (resolve) { |
626 resolved_klass = SystemDictionary::resolve_or_null(class_name, class_loader, protection_domain, CHECK_0); |
630 resolved_klass = SystemDictionary::resolve_or_null(class_name, class_loader, protection_domain, CHECK_0); |
627 } else { |
631 } else { |
628 if (class_name->byte_at(0) == 'L' && |
632 if (class_name->byte_at(0) == 'L' && |
695 C2V_END |
699 C2V_END |
696 |
700 |
697 C2V_VMENTRY(jobject, resolveTypeInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index)) |
701 C2V_VMENTRY(jobject, resolveTypeInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index)) |
698 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool); |
702 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool); |
699 Klass* resolved_klass = cp->klass_at(index, CHECK_NULL); |
703 Klass* resolved_klass = cp->klass_at(index, CHECK_NULL); |
700 Handle klass = CompilerToVM::get_jvmci_type(resolved_klass, CHECK_NULL); |
704 oop klass = CompilerToVM::get_jvmci_type(resolved_klass, CHECK_NULL); |
701 return JNIHandles::make_local(THREAD, klass()); |
705 return JNIHandles::make_local(THREAD, klass); |
702 C2V_END |
706 C2V_END |
703 |
707 |
704 C2V_VMENTRY(jobject, lookupKlassInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode)) |
708 C2V_VMENTRY(jobject, lookupKlassInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode)) |
705 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool); |
709 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool); |
706 KlassHandle loading_klass(cp->pool_holder()); |
710 KlassHandle loading_klass(cp->pool_holder()); |
708 KlassHandle klass = JVMCIEnv::get_klass_by_index(cp, index, is_accessible, loading_klass); |
712 KlassHandle klass = JVMCIEnv::get_klass_by_index(cp, index, is_accessible, loading_klass); |
709 Symbol* symbol = NULL; |
713 Symbol* symbol = NULL; |
710 if (klass.is_null()) { |
714 if (klass.is_null()) { |
711 symbol = cp->klass_name_at(index); |
715 symbol = cp->klass_name_at(index); |
712 } |
716 } |
713 Handle result; |
717 oop result_oop; |
714 if (!klass.is_null()) { |
718 if (!klass.is_null()) { |
715 result = CompilerToVM::get_jvmci_type(klass, CHECK_NULL); |
719 result_oop = CompilerToVM::get_jvmci_type(klass, CHECK_NULL); |
716 } else { |
720 } else { |
717 result = java_lang_String::create_from_symbol(symbol, CHECK_NULL); |
721 Handle result = java_lang_String::create_from_symbol(symbol, CHECK_NULL); |
718 } |
722 result_oop = result(); |
719 return JNIHandles::make_local(THREAD, result()); |
723 } |
|
724 return JNIHandles::make_local(THREAD, result_oop); |
720 C2V_END |
725 C2V_END |
721 |
726 |
722 C2V_VMENTRY(jobject, lookupAppendixInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index)) |
727 C2V_VMENTRY(jobject, lookupAppendixInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index)) |
723 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool); |
728 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool); |
724 oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, index); |
729 oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, index); |
836 C2V_END |
841 C2V_END |
837 |
842 |
838 C2V_VMENTRY(jint, installCode, (JNIEnv *jniEnv, jobject, jobject target, jobject compiled_code, jobject installed_code, jobject speculation_log)) |
843 C2V_VMENTRY(jint, installCode, (JNIEnv *jniEnv, jobject, jobject target, jobject compiled_code, jobject installed_code, jobject speculation_log)) |
839 ResourceMark rm; |
844 ResourceMark rm; |
840 HandleMark hm; |
845 HandleMark hm; |
841 Handle target_handle = JNIHandles::resolve(target); |
846 Handle target_handle(THREAD, JNIHandles::resolve(target)); |
842 Handle compiled_code_handle = JNIHandles::resolve(compiled_code); |
847 Handle compiled_code_handle(THREAD, JNIHandles::resolve(compiled_code)); |
843 CodeBlob* cb = NULL; |
848 CodeBlob* cb = NULL; |
844 Handle installed_code_handle = JNIHandles::resolve(installed_code); |
849 Handle installed_code_handle(THREAD, JNIHandles::resolve(installed_code)); |
845 Handle speculation_log_handle = JNIHandles::resolve(speculation_log); |
850 Handle speculation_log_handle(THREAD, JNIHandles::resolve(speculation_log)); |
846 |
851 |
847 JVMCICompiler* compiler = JVMCICompiler::instance(CHECK_JNI_ERR); |
852 JVMCICompiler* compiler = JVMCICompiler::instance(CHECK_JNI_ERR); |
848 |
853 |
849 TraceTime install_time("installCode", JVMCICompiler::codeInstallTimer()); |
854 TraceTime install_time("installCode", JVMCICompiler::codeInstallTimer()); |
850 bool is_immutable_PIC = HotSpotCompiledCode::isImmutablePIC(compiled_code_handle) > 0; |
855 bool is_immutable_PIC = HotSpotCompiledCode::isImmutablePIC(compiled_code_handle) > 0; |
912 if (result != JVMCIEnv::ok) { |
917 if (result != JVMCIEnv::ok) { |
913 return result; |
918 return result; |
914 } |
919 } |
915 |
920 |
916 if (code_metadata.get_nr_pc_desc() > 0) { |
921 if (code_metadata.get_nr_pc_desc() > 0) { |
917 typeArrayHandle pcArrayOop = oopFactory::new_byteArray(sizeof(PcDesc) * code_metadata.get_nr_pc_desc(), CHECK_(JVMCIEnv::cache_full)); |
922 typeArrayHandle pcArrayOop = oopFactory::new_byteArray_handle(sizeof(PcDesc) * code_metadata.get_nr_pc_desc(), CHECK_(JVMCIEnv::cache_full)); |
918 memcpy(pcArrayOop->byte_at_addr(0), code_metadata.get_pc_desc(), sizeof(PcDesc) * code_metadata.get_nr_pc_desc()); |
923 memcpy(pcArrayOop->byte_at_addr(0), code_metadata.get_pc_desc(), sizeof(PcDesc) * code_metadata.get_nr_pc_desc()); |
919 HotSpotMetaData::set_pcDescBytes(metadata_handle, pcArrayOop()); |
924 HotSpotMetaData::set_pcDescBytes(metadata_handle, pcArrayOop()); |
920 } |
925 } |
921 |
926 |
922 if (code_metadata.get_scopes_size() > 0) { |
927 if (code_metadata.get_scopes_size() > 0) { |
923 typeArrayHandle scopesArrayOop = oopFactory::new_byteArray(code_metadata.get_scopes_size(), CHECK_(JVMCIEnv::cache_full)); |
928 typeArrayHandle scopesArrayOop = oopFactory::new_byteArray_handle(code_metadata.get_scopes_size(), CHECK_(JVMCIEnv::cache_full)); |
924 memcpy(scopesArrayOop->byte_at_addr(0), code_metadata.get_scopes_desc(), code_metadata.get_scopes_size()); |
929 memcpy(scopesArrayOop->byte_at_addr(0), code_metadata.get_scopes_desc(), code_metadata.get_scopes_size()); |
925 HotSpotMetaData::set_scopesDescBytes(metadata_handle, scopesArrayOop()); |
930 HotSpotMetaData::set_scopesDescBytes(metadata_handle, scopesArrayOop()); |
926 } |
931 } |
927 |
932 |
928 RelocBuffer* reloc_buffer = code_metadata.get_reloc_buffer(); |
933 RelocBuffer* reloc_buffer = code_metadata.get_reloc_buffer(); |
929 typeArrayHandle relocArrayOop = oopFactory::new_byteArray((int) reloc_buffer->size(), CHECK_(JVMCIEnv::cache_full)); |
934 typeArrayHandle relocArrayOop = oopFactory::new_byteArray_handle((int) reloc_buffer->size(), CHECK_(JVMCIEnv::cache_full)); |
930 if (reloc_buffer->size() > 0) { |
935 if (reloc_buffer->size() > 0) { |
931 memcpy(relocArrayOop->byte_at_addr(0), reloc_buffer->begin(), reloc_buffer->size()); |
936 memcpy(relocArrayOop->byte_at_addr(0), reloc_buffer->begin(), reloc_buffer->size()); |
932 } |
937 } |
933 HotSpotMetaData::set_relocBytes(metadata_handle, relocArrayOop()); |
938 HotSpotMetaData::set_relocBytes(metadata_handle, relocArrayOop()); |
934 |
939 |
935 const OopMapSet* oopMapSet = installer.oopMapSet(); |
940 const OopMapSet* oopMapSet = installer.oopMapSet(); |
936 { |
941 { |
937 ResourceMark mark; |
942 ResourceMark mark; |
938 ImmutableOopMapBuilder builder(oopMapSet); |
943 ImmutableOopMapBuilder builder(oopMapSet); |
939 int oopmap_size = builder.heap_size(); |
944 int oopmap_size = builder.heap_size(); |
940 typeArrayHandle oopMapArrayHandle = oopFactory::new_byteArray(oopmap_size, CHECK_(JVMCIEnv::cache_full)); |
945 typeArrayHandle oopMapArrayHandle = oopFactory::new_byteArray_handle(oopmap_size, CHECK_(JVMCIEnv::cache_full)); |
941 builder.generate_into((address) oopMapArrayHandle->byte_at_addr(0)); |
946 builder.generate_into((address) oopMapArrayHandle->byte_at_addr(0)); |
942 HotSpotMetaData::set_oopMaps(metadata_handle, oopMapArrayHandle()); |
947 HotSpotMetaData::set_oopMaps(metadata_handle, oopMapArrayHandle()); |
943 } |
948 } |
944 |
949 |
945 AOTOopRecorder* recorder = code_metadata.get_oop_recorder(); |
950 AOTOopRecorder* recorder = code_metadata.get_oop_recorder(); |
946 |
951 |
947 int nr_meta_strings = recorder->nr_meta_strings(); |
952 int nr_meta_strings = recorder->nr_meta_strings(); |
948 objArrayHandle metadataArrayHandle = oopFactory::new_objectArray(nr_meta_strings, CHECK_(JVMCIEnv::cache_full)); |
953 objArrayOop metadataArray = oopFactory::new_objectArray(nr_meta_strings, CHECK_(JVMCIEnv::cache_full)); |
|
954 objArrayHandle metadataArrayHandle(THREAD, metadataArray); |
949 for (int i = 0; i < nr_meta_strings; ++i) { |
955 for (int i = 0; i < nr_meta_strings; ++i) { |
950 const char* element = recorder->meta_element(i); |
956 const char* element = recorder->meta_element(i); |
951 Handle java_string = java_lang_String::create_from_str(element, CHECK_(JVMCIEnv::cache_full)); |
957 Handle java_string = java_lang_String::create_from_str(element, CHECK_(JVMCIEnv::cache_full)); |
952 metadataArrayHandle->obj_at_put(i, java_string()); |
958 metadataArrayHandle->obj_at_put(i, java_string()); |
953 } |
959 } |
954 HotSpotMetaData::set_metadata(metadata_handle, metadataArrayHandle()); |
960 HotSpotMetaData::set_metadata(metadata_handle, metadataArrayHandle()); |
955 |
961 |
956 ExceptionHandlerTable* handler = code_metadata.get_exception_table(); |
962 ExceptionHandlerTable* handler = code_metadata.get_exception_table(); |
957 int table_size = handler->size_in_bytes(); |
963 int table_size = handler->size_in_bytes(); |
958 typeArrayHandle exceptionArrayOop = oopFactory::new_byteArray(table_size, CHECK_(JVMCIEnv::cache_full)); |
964 typeArrayHandle exceptionArrayOop = oopFactory::new_byteArray_handle(table_size, CHECK_(JVMCIEnv::cache_full)); |
959 |
965 |
960 if (table_size > 0) { |
966 if (table_size > 0) { |
961 handler->copy_bytes_to((address) exceptionArrayOop->byte_at_addr(0)); |
967 handler->copy_bytes_to((address) exceptionArrayOop->byte_at_addr(0)); |
962 } |
968 } |
963 HotSpotMetaData::set_exceptionBytes(metadata_handle, exceptionArrayOop()); |
969 HotSpotMetaData::set_exceptionBytes(metadata_handle, exceptionArrayOop()); |
1246 if (scope != NULL && scope->objects() != NULL) { |
1252 if (scope != NULL && scope->objects() != NULL) { |
1247 bool realloc_failures = Deoptimization::realloc_objects(thread, fst.current(), scope->objects(), THREAD); |
1253 bool realloc_failures = Deoptimization::realloc_objects(thread, fst.current(), scope->objects(), THREAD); |
1248 Deoptimization::reassign_fields(fst.current(), fst.register_map(), scope->objects(), realloc_failures, false); |
1254 Deoptimization::reassign_fields(fst.current(), fst.register_map(), scope->objects(), realloc_failures, false); |
1249 |
1255 |
1250 GrowableArray<ScopeValue*>* local_values = scope->locals(); |
1256 GrowableArray<ScopeValue*>* local_values = scope->locals(); |
1251 typeArrayHandle array = oopFactory::new_boolArray(local_values->length(), thread); |
1257 typeArrayOop array_oop = oopFactory::new_boolArray(local_values->length(), thread); |
|
1258 typeArrayHandle array(THREAD, array_oop); |
1252 for (int i = 0; i < local_values->length(); i++) { |
1259 for (int i = 0; i < local_values->length(); i++) { |
1253 ScopeValue* value = local_values->at(i); |
1260 ScopeValue* value = local_values->at(i); |
1254 if (value->is_object()) { |
1261 if (value->is_object()) { |
1255 array->bool_at_put(i, true); |
1262 array->bool_at_put(i, true); |
1256 } |
1263 } |
1287 HotSpotStackFrameReference::set_compilerToVM(result, JNIHandles::resolve(compilerToVM)); |
1294 HotSpotStackFrameReference::set_compilerToVM(result, JNIHandles::resolve(compilerToVM)); |
1288 HotSpotStackFrameReference::set_stackPointer(result, (jlong) fst.current()->sp()); |
1295 HotSpotStackFrameReference::set_stackPointer(result, (jlong) fst.current()->sp()); |
1289 HotSpotStackFrameReference::set_frameNumber(result, frame_number); |
1296 HotSpotStackFrameReference::set_frameNumber(result, frame_number); |
1290 |
1297 |
1291 // initialize the locals array |
1298 // initialize the locals array |
1292 objArrayHandle array = oopFactory::new_objectArray(locals->size(), thread); |
1299 objArrayOop array_oop = oopFactory::new_objectArray(locals->size(), CHECK_NULL); |
|
1300 objArrayHandle array(THREAD, array_oop); |
1293 for (int i = 0; i < locals->size(); i++) { |
1301 for (int i = 0; i < locals->size(); i++) { |
1294 StackValue* var = locals->at(i); |
1302 StackValue* var = locals->at(i); |
1295 if (var->type() == T_OBJECT) { |
1303 if (var->type() == T_OBJECT) { |
1296 array->obj_at_put(i, locals->at(i)->get_obj()()); |
1304 array->obj_at_put(i, locals->at(i)->get_obj()()); |
1297 } |
1305 } |
1339 cp_cache_entry->set_method_handle(cp, callInfo); |
1347 cp_cache_entry->set_method_handle(cp, callInfo); |
1340 } |
1348 } |
1341 C2V_END |
1349 C2V_END |
1342 |
1350 |
1343 C2V_VMENTRY(jobject, getSignaturePolymorphicHolders, (JNIEnv*, jobject)) |
1351 C2V_VMENTRY(jobject, getSignaturePolymorphicHolders, (JNIEnv*, jobject)) |
1344 objArrayHandle holders = oopFactory::new_objArray(SystemDictionary::String_klass(), 2, CHECK_NULL); |
1352 objArrayHandle holders = oopFactory::new_objArray_handle(SystemDictionary::String_klass(), 2, CHECK_NULL); |
1345 Handle mh = java_lang_String::create_from_str("Ljava/lang/invoke/MethodHandle;", CHECK_NULL); |
1353 Handle mh = java_lang_String::create_from_str("Ljava/lang/invoke/MethodHandle;", CHECK_NULL); |
1346 Handle vh = java_lang_String::create_from_str("Ljava/lang/invoke/VarHandle;", CHECK_NULL); |
1354 Handle vh = java_lang_String::create_from_str("Ljava/lang/invoke/VarHandle;", CHECK_NULL); |
1347 holders->obj_at_put(0, mh()); |
1355 holders->obj_at_put(0, mh()); |
1348 holders->obj_at_put(1, vh()); |
1356 holders->obj_at_put(1, vh()); |
1349 return JNIHandles::make_local(THREAD, holders()); |
1357 return JNIHandles::make_local(THREAD, holders()); |
1547 } |
1555 } |
1548 return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord; |
1556 return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord; |
1549 C2V_END |
1557 C2V_END |
1550 |
1558 |
1551 C2V_VMENTRY(void, compileToBytecode, (JNIEnv*, jobject, jobject lambda_form_handle)) |
1559 C2V_VMENTRY(void, compileToBytecode, (JNIEnv*, jobject, jobject lambda_form_handle)) |
1552 Handle lambda_form = JNIHandles::resolve_non_null(lambda_form_handle); |
1560 Handle lambda_form(THREAD, JNIHandles::resolve_non_null(lambda_form_handle)); |
1553 if (lambda_form->is_a(SystemDictionary::LambdaForm_klass())) { |
1561 if (lambda_form->is_a(SystemDictionary::LambdaForm_klass())) { |
1554 TempNewSymbol compileToBytecode = SymbolTable::new_symbol("compileToBytecode", CHECK); |
1562 TempNewSymbol compileToBytecode = SymbolTable::new_symbol("compileToBytecode", CHECK); |
1555 JavaValue result(T_VOID); |
1563 JavaValue result(T_VOID); |
1556 JavaCalls::call_special(&result, lambda_form, SystemDictionary::LambdaForm_klass(), compileToBytecode, vmSymbols::void_method_signature(), CHECK); |
1564 JavaCalls::call_special(&result, lambda_form, SystemDictionary::LambdaForm_klass(), compileToBytecode, vmSymbols::void_method_signature(), CHECK); |
1557 } else { |
1565 } else { |