comparison src/share/vm/graal/graalVMEntries.cpp @ 3637:ff6a991c6e3c

Use GraalEnv to look up types.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Wed, 16 Nov 2011 01:48:25 +0100
parents c7d4198a9bce
children e53cfcb230a7
comparison
equal deleted inserted replaced
3636:c7d4198a9bce 3637:ff6a991c6e3c
20 * or visit www.oracle.com if you need additional information or have any 20 * or visit www.oracle.com if you need additional information or have any
21 * questions. 21 * questions.
22 */ 22 */
23 23
24 #include "precompiled.hpp" 24 #include "precompiled.hpp"
25 #include "runtime/fieldDescriptor.hpp"
25 #include "c1/c1_Runtime1.hpp" 26 #include "c1/c1_Runtime1.hpp"
26 #include "ci/ciMethodData.hpp" 27 #include "ci/ciMethodData.hpp"
27 #include "compiler/compileBroker.hpp" 28 #include "compiler/compileBroker.hpp"
28 #include "graal/graalVMEntries.hpp" 29 #include "graal/graalVMEntries.hpp"
29 #include "graal/graalCompiler.hpp" 30 #include "graal/graalCompiler.hpp"
31 #include "graal/graalEnv.hpp"
30 #include "graal/graalJavaAccess.hpp" 32 #include "graal/graalJavaAccess.hpp"
31 #include "graal/graalCodeInstaller.hpp" 33 #include "graal/graalCodeInstaller.hpp"
32 #include "graal/graalVMExits.hpp" 34 #include "graal/graalVMExits.hpp"
33 #include "graal/graalVmIds.hpp" 35 #include "graal/graalVmIds.hpp"
34 #include "memory/oopFactory.hpp" 36 #include "memory/oopFactory.hpp"
118 120
119 if (catch_class_index == 0) { 121 if (catch_class_index == 0) {
120 HotSpotExceptionHandler::set_catchClass(entry, NULL); 122 HotSpotExceptionHandler::set_catchClass(entry, NULL);
121 } else { 123 } else {
122 constantPoolOop cp = instanceKlass::cast(method->method_holder())->constants(); 124 constantPoolOop cp = instanceKlass::cast(method->method_holder())->constants();
123 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(method->method_holder()); 125 KlassHandle loading_klass = method->method_holder();
124 bool is_accessible = false; 126 oop catch_class = GraalCompiler::get_RiType(cp, catch_class_index, loading_klass, CHECK_NULL);
125 ciKlass *klass = CURRENT_ENV->get_klass_by_index(cp, catch_class_index, is_accessible, loading_klass);
126 oop catch_class = GraalCompiler::get_RiType(klass, method->method_holder(), CHECK_NULL);
127
128 HotSpotExceptionHandler::set_catchClass(entry, catch_class); 127 HotSpotExceptionHandler::set_catchClass(entry, catch_class);
129 } 128 }
130 array->obj_at_put(i, entry()); 129 array->obj_at_put(i, entry());
131 } 130 }
132 131
306 for (uint i = 0; i < recv->row_limit(); i++) { 305 for (uint i = 0; i < recv->row_limit(); i++) {
307 KlassHandle receiver = recv->receiver(i); 306 KlassHandle receiver = recv->receiver(i);
308 if (receiver.is_null()) continue; 307 if (receiver.is_null()) continue;
309 308
310 float prob = recv->receiver_count(i) / (float) total_count; 309 float prob = recv->receiver_count(i) / (float) total_count;
311 oop type = GraalCompiler::get_RiType(receiver, KlassHandle(), CHECK_NULL); 310 oop type = GraalCompiler::get_RiType(receiver, CHECK_NULL);
312 311
313 probabilities->float_at_put(pos, prob); 312 probabilities->float_at_put(pos, prob);
314 types->obj_at_put(pos, type); 313 types->obj_at_put(pos, type);
315 314
316 pos++; 315 pos++;
510 } 509 }
511 } 510 }
512 result = VMExits::createCiConstantObject(string, CHECK_0); 511 result = VMExits::createCiConstantObject(string, CHECK_0);
513 } else if (tag.is_klass() || tag.is_unresolved_klass()) { 512 } else if (tag.is_klass() || tag.is_unresolved_klass()) {
514 bool ignore; 513 bool ignore;
515 ciInstanceKlass* accessor = (ciInstanceKlass*) ciEnv::current()->get_object(cp->pool_holder()); 514 KlassHandle klass = GraalEnv::get_klass_by_index(cp, index, ignore, cp->pool_holder());
516 ciKlass* klass = ciEnv::current()->get_klass_by_index(cp, index, ignore, accessor); 515 result = GraalCompiler::get_RiType(klass, CHECK_NULL);
517 result = GraalCompiler::get_RiType(klass, cp->pool_holder(), CHECK_NULL);
518 } else if (tag.is_object()) { 516 } else if (tag.is_object()) {
519 oop obj = cp->object_at(index); 517 oop obj = cp->object_at(index);
520 assert(obj->is_instance(), "must be an instance"); 518 assert(obj->is_instance(), "must be an instance");
521 result = VMExits::createCiConstantObject(obj, CHECK_NULL); 519 result = VMExits::createCiConstantObject(obj, CHECK_NULL);
522 } else { 520 } else {
529 // public RiMethod RiConstantPool_lookupMethod(long vmId, int cpi, byte byteCode); 527 // public RiMethod RiConstantPool_lookupMethod(long vmId, int cpi, byte byteCode);
530 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupMethod(JNIEnv *env, jobject, jobject type, jint index, jbyte byteCode) { 528 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupMethod(JNIEnv *env, jobject, jobject type, jint index, jbyte byteCode) {
531 TRACE_graal_3("VMEntries::RiConstantPool_lookupMethod"); 529 TRACE_graal_3("VMEntries::RiConstantPool_lookupMethod");
532 VM_ENTRY_MARK; 530 VM_ENTRY_MARK;
533 index = GraalCompiler::to_cp_index_u2(index); 531 index = GraalCompiler::to_cp_index_u2(index);
534 constantPoolOop cp = instanceKlass::cast(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(type)))->constants(); 532 constantPoolHandle cp = instanceKlass::cast(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(type)))->constants();
535 533
536 Bytecodes::Code bc = (Bytecodes::Code) (((int) byteCode) & 0xFF); 534 Bytecodes::Code bc = (Bytecodes::Code) (((int) byteCode) & 0xFF);
537 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder()); 535 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder());
538 ciMethod *cimethod = CURRENT_ENV->get_method_by_index(cp, index, bc, loading_klass); 536 ciMethod *cimethod = CURRENT_ENV->get_method_by_index(cp, index, bc, loading_klass);
539 if (cimethod->is_loaded()) { 537 if (cimethod->is_loaded()) {
540 methodOop method = (methodOop) cimethod->get_oop(); 538 methodOop method = (methodOop) cimethod->get_oop();
541 oop ret = GraalCompiler::createHotSpotMethodResolved(method, CHECK_NULL); 539 oop ret = GraalCompiler::createHotSpotMethodResolved(method, CHECK_NULL);
542 return JNIHandles::make_local(THREAD, ret); 540 return JNIHandles::make_local(THREAD, ret);
543 } else { 541 } else {
544 Handle name = VmIds::toString<Handle>(cimethod->name()->get_symbol(), CHECK_NULL); 542 // Get the method's name and signature.
545 Handle signature = VmIds::toString<Handle>(cimethod->signature()->as_symbol()->get_symbol(), CHECK_NULL); 543 Handle name = VmIds::toString<Handle>(cp->name_ref_at(index), CHECK_NULL);
546 Handle holder = GraalCompiler::get_RiType(cimethod->holder(), cp->klass(), THREAD); 544 Handle signature = VmIds::toString<Handle>(cp->signature_ref_at(index), CHECK_NULL);
547 return JNIHandles::make_local(THREAD, VMExits::createRiMethodUnresolved(name, signature, holder, THREAD)); 545 int holder_index = cp->klass_ref_index_at(index);
546 Handle type = GraalCompiler::get_RiType(cp, holder_index, cp->pool_holder(), CHECK_NULL);
547 return JNIHandles::make_local(THREAD, VMExits::createRiMethodUnresolved(name, signature, type, THREAD));
548 } 548 }
549 } 549 }
550 550
551 // public RiType RiConstantPool_lookupType(long vmId, int cpi); 551 // public RiType RiConstantPool_lookupType(long vmId, int cpi);
552 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupType(JNIEnv *env, jobject, jobject type, jint index) { 552 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupType(JNIEnv *env, jobject, jobject type, jint index) {
553 TRACE_graal_3("VMEntries::RiConstantPool_lookupType"); 553 TRACE_graal_3("VMEntries::RiConstantPool_lookupType");
554 VM_ENTRY_MARK; 554 VM_ENTRY_MARK;
555 555
556 constantPoolOop cp = instanceKlass::cast(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(type)))->constants(); 556 constantPoolOop cp = instanceKlass::cast(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(type)))->constants();
557 557 oop result = GraalCompiler::get_RiType(cp, index, cp->pool_holder(), CHECK_NULL);
558 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder()); 558 return JNIHandles::make_local(THREAD, result);
559 bool is_accessible = false;
560 ciKlass *klass = CURRENT_ENV->get_klass_by_index(cp, index, is_accessible, loading_klass);
561 return JNIHandles::make_local(THREAD, GraalCompiler::get_RiType(klass, cp->klass(), THREAD));
562 } 559 }
563 560
564 // public void RiConstantPool_loadReferencedType(long vmId, int cpi); 561 // public void RiConstantPool_loadReferencedType(long vmId, int cpi);
565 JNIEXPORT void JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1loadReferencedType(JNIEnv *env, jobject, jobject type, jint index, jbyte op) { 562 JNIEXPORT void JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1loadReferencedType(JNIEnv *env, jobject, jobject type, jint index, jbyte op) {
566 TRACE_graal_3("VMEntries::RiConstantPool_lookupType"); 563 TRACE_graal_3("VMEntries::RiConstantPool_lookupType");
584 } 581 }
585 } 582 }
586 } 583 }
587 584
588 // public RiField RiConstantPool_lookupField(long vmId, int cpi); 585 // public RiField RiConstantPool_lookupField(long vmId, int cpi);
589 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupField(JNIEnv *env, jobject, jobject type, jint index, jbyte byteCode) { 586 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupField(JNIEnv *env, jobject, jobject constantPoolHolder, jint index, jbyte byteCode) {
590 TRACE_graal_3("VMEntries::RiConstantPool_lookupField"); 587 TRACE_graal_3("VMEntries::RiConstantPool_lookupField");
591 VM_ENTRY_MARK; 588 VM_ENTRY_MARK;
592 589
593 index = GraalCompiler::to_cp_index_u2(index); 590 index = GraalCompiler::to_cp_index_u2(index);
594 constantPoolOop cp = instanceKlass::cast(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(type)))->constants(); 591 constantPoolHandle cp = instanceKlass::cast(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(constantPoolHolder)))->constants();
595 592
596 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder()); 593 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder());
597 ciField *field = CURRENT_ENV->get_field_by_index(loading_klass, index); 594 ciField *field = CURRENT_ENV->get_field_by_index(loading_klass, index);
598 595
596 int nt_index = cp->name_and_type_ref_index_at(index);
597 int sig_index = cp->signature_ref_index_at(nt_index);
598 Symbol* signature = cp->symbol_at(sig_index);
599 int holder_index = cp->klass_ref_index_at(index);
600 Handle holder = GraalCompiler::get_RiType(cp, holder_index, cp->pool_holder(), CHECK_NULL);
601
599 Bytecodes::Code code = (Bytecodes::Code)(((int) byteCode) & 0xFF); 602 Bytecodes::Code code = (Bytecodes::Code)(((int) byteCode) & 0xFF);
600 Handle field_handle = GraalCompiler::get_RiField(field, loading_klass, cp->pool_holder(), code, THREAD); 603 if (holder->klass() == SystemDictionary::HotSpotTypeResolved_klass()) {
604 FieldAccessInfo result;
605 LinkResolver::resolve_field(result, cp, index,
606 Bytecodes::java_code(code),
607 true, false, Thread::current());
608 if (HAS_PENDING_EXCEPTION) {
609 CLEAR_PENDING_EXCEPTION;
610 }
611 //result.field_offset();
612 holder = GraalCompiler::get_RiType(result.klass(), CHECK_NULL);
613 }
614
615 Handle type = GraalCompiler::get_RiTypeFromSignature(cp, sig_index, cp->pool_holder(), CHECK_NULL);
616 Handle field_handle = GraalCompiler::get_RiField(field, loading_klass, holder, type, code, THREAD);
601 bool is_constant = field->is_constant(); 617 bool is_constant = field->is_constant();
602 if (is_constant && field->is_static()) { 618 if (is_constant && field->is_static()) {
603 ciConstant constant = field->constant_value(); 619 ciConstant constant = field->constant_value();
604 oop constant_object = NULL; 620 oop constant_object = NULL;
605 switch (constant.basic_type()) { 621 switch (constant.basic_type()) {
690 } 706 }
691 707
692 // public RiType RiType_componentType(HotSpotResolvedType klass); 708 // public RiType RiType_componentType(HotSpotResolvedType klass);
693 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1componentType(JNIEnv *, jobject, jobject klass) { 709 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1componentType(JNIEnv *, jobject, jobject klass) {
694 TRACE_graal_3("VMEntries::RiType_componentType"); 710 TRACE_graal_3("VMEntries::RiType_componentType");
695 ciArrayKlass* array_klass; 711 VM_ENTRY_MARK;
696 { 712 KlassHandle array_klass = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass));
697 VM_ENTRY_MARK; 713 assert(array_klass->oop_is_objArray(), "just checking");
698 assert(JNIHandles::resolve(klass) != NULL, ""); 714 klassOop element_type = objArrayKlass::cast(array_klass())->element_klass();
699 array_klass = (ciArrayKlass *) CURRENT_ENV->get_object(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)));
700 }
701 ciType* element_type = array_klass->element_type();
702
703 VM_ENTRY_MARK;
704 assert(JNIHandles::resolve(klass) != NULL, ""); 715 assert(JNIHandles::resolve(klass) != NULL, "");
705 return JNIHandles::make_local(GraalCompiler::get_RiType(element_type, java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)), THREAD)); 716 return JNIHandles::make_local(GraalCompiler::get_RiType(element_type, THREAD));
706 } 717 }
707 718
708 // public RiType RiType_superType(HotSpotResolvedType klass); 719 // public RiType RiType_superType(HotSpotResolvedType klass);
709 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1superType(JNIEnv *, jobject, jobject klass) { 720 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1superType(JNIEnv *, jobject, jobject klass) {
710 TRACE_graal_3("VMEntries::RiType_superType"); 721 TRACE_graal_3("VMEntries::RiType_superType");
711 VM_ENTRY_MARK; 722 VM_ENTRY_MARK;
712 KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass))); 723 KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)));
713 ciInstanceKlass* k = NULL; 724 klassOop k;
714 725
715 if (klass_handle->oop_is_array()) { 726 if (klass_handle->oop_is_array()) {
716 k = (ciInstanceKlass *) CURRENT_ENV->get_object(SystemDictionary::Object_klass()); 727 k = SystemDictionary::Object_klass();
717 } else { 728 } else {
718 guarantee(klass_handle->oop_is_instance(), "must be instance klass"); 729 guarantee(klass_handle->oop_is_instance(), "must be instance klass");
719 k = (ciInstanceKlass *) CURRENT_ENV->get_object(klass_handle()); 730 k = klass_handle->super();
720 k = k->super();
721 } 731 }
722 732
723 if (k != NULL) { 733 if (k != NULL) {
724 return JNIHandles::make_local(GraalCompiler::get_RiType(k, klass_handle, THREAD)); 734 return JNIHandles::make_local(GraalCompiler::get_RiType(k, THREAD));
725 } else { 735 } else {
726 return NULL; 736 return NULL;
727 } 737 }
728 } 738 }
729 739
730 // public RiType RiType_uniqueConcreteSubtype(HotSpotResolvedType klass); 740 // public RiType RiType_uniqueConcreteSubtype(HotSpotResolvedType klass);
731 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1uniqueConcreteSubtype(JNIEnv *, jobject, jobject klass) { 741 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1uniqueConcreteSubtype(JNIEnv *, jobject, jobject klass) {
732 TRACE_graal_3("VMEntries::RiType_uniqueConcreteSubtype"); 742 TRACE_graal_3("VMEntries::RiType_uniqueConcreteSubtype");
733 Thread* THREAD = Thread::current(); 743 VM_ENTRY_MARK;
734 KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass))); 744 KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)));
735 ciInstanceKlass* k = NULL; 745 Klass *up_cast = klass_handle->up_cast_abstract();
736 { 746 if (up_cast->is_leaf_class()) {
737 VM_ENTRY_MARK; 747 return JNIHandles::make_local(GraalCompiler::get_RiType(up_cast, THREAD));
738 k = (ciInstanceKlass *) CURRENT_ENV->get_object(klass_handle()); 748 }
739 }
740
741 if (k->is_abstract()) {
742 ciInstanceKlass* sub = k->unique_concrete_subklass();
743 if (sub != NULL && sub->is_leaf_type()) {
744 VM_ENTRY_MARK;
745 return JNIHandles::make_local(GraalCompiler::get_RiType(sub, klass_handle, THREAD));
746 }
747 } else if (k->is_leaf_type()) {
748 assert(!k->is_interface(), "");
749 return klass;
750 }
751
752 return NULL; 749 return NULL;
753 } 750 }
754 751
755 // public bool RiType_isInitialized(HotSpotResolvedType klass); 752 // public bool RiType_isInitialized(HotSpotResolvedType klass);
756 JNIEXPORT jboolean JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1isInitialized(JNIEnv *, jobject, jobject hotspot_klass) { 753 JNIEXPORT jboolean JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1isInitialized(JNIEnv *, jobject, jobject hotspot_klass) {
772 } 769 }
773 770
774 // public RiField[] RiType_fields(HotSpotTypeResolved klass); 771 // public RiField[] RiType_fields(HotSpotTypeResolved klass);
775 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1fields(JNIEnv *, jobject, jobject klass) { 772 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1fields(JNIEnv *, jobject, jobject klass) {
776 TRACE_graal_3("VMEntries::RiType_fields"); 773 TRACE_graal_3("VMEntries::RiType_fields");
777 KlassHandle klass_handle; 774 VM_ENTRY_MARK;
778 ciInstanceKlass* instance_klass; 775
779 objArrayHandle fieldsArray; 776 instanceKlassHandle k = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass));
780 HandleMark hm; 777 objArrayHandle field_array = oopFactory::new_objArray(SystemDictionary::RiField_klass(), k->fields()->length() / instanceKlass::next_offset, CHECK_NULL);
781 { 778 class MyFieldClosure : public FieldClosure {
782 VM_ENTRY_MARK; 779 public:
783 klass_handle = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)); 780 instanceKlassHandle _holder;
784 instance_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(klass_handle()); 781 Handle _resolved_type_holder;
785 } 782 objArrayHandle _field_array;
786 GrowableArray<ciField*>* fields = instance_klass->non_static_fields(); 783 int _current;
787 { 784
788 VM_ENTRY_MARK; 785 MyFieldClosure(instanceKlassHandle& holder, Handle resolved_type_holder, objArrayHandle field_array) : _holder(holder), _resolved_type_holder(resolved_type_holder), _field_array(field_array), _current(0) { }
789 786
790 int count = 0; 787 virtual void do_field(fieldDescriptor* fd) {
791 for (int i = 0; i < fields->length(); i++) { 788 if (!Thread::current()->has_pending_exception()) {
792 ciField* field = fields->at(i); 789 if (fd->field_holder() == _holder()) {
793 if (field->holder() == instance_klass) { 790 Handle type = GraalCompiler::get_RiTypeFromSignature(fd->constants(), fd->signature_index(), fd->field_holder(), Thread::current());
794 count++; 791 Handle field = VMExits::createRiField(_resolved_type_holder, VmIds::toString<Handle>(fd->name(), Thread::current()), type, fd->offset(), fd->access_flags().as_int(), Thread::current());
792 _field_array->obj_at_put(_current++, field());
793 }
795 } 794 }
796 } 795 }
797 796 };
798 fieldsArray = oopFactory::new_objArray(SystemDictionary::RiField_klass(), count, CHECK_NULL); 797 MyFieldClosure closure(k, JNIHandles::resolve(klass), field_array);
799 int z = 0; 798 k->do_nonstatic_fields(&closure);
800 for (int i = 0; i < fields->length(); i++) { 799 return JNIHandles::make_local(field_array());
801 ciField* field = fields->at(i);
802 if (field->holder() == instance_klass) {
803 Handle field_handle = GraalCompiler::get_RiField(field, instance_klass, klass_handle, Bytecodes::_illegal, CHECK_NULL);
804 fieldsArray->obj_at_put(z, field_handle());
805 z++;
806 }
807 }
808 }
809 return JNIHandles::make_local(fieldsArray());
810 } 800 }
811 801
812 // public RiType getPrimitiveArrayType(CiKind kind); 802 // public RiType getPrimitiveArrayType(CiKind kind);
813 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_getPrimitiveArrayType(JNIEnv *env, jobject, jobject kind) { 803 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_getPrimitiveArrayType(JNIEnv *env, jobject, jobject kind) {
814 TRACE_graal_3("VMEntries::VMEntries_getPrimitiveArrayType"); 804 TRACE_graal_3("VMEntries::VMEntries_getPrimitiveArrayType");
815 VM_ENTRY_MARK; 805 VM_ENTRY_MARK;
816 BasicType type = GraalCompiler::kindToBasicType(CiKind::typeChar(kind)); 806 BasicType type = GraalCompiler::kindToBasicType(CiKind::typeChar(kind));
817 assert(type != T_OBJECT, "primitive type expecteds"); 807 assert(type != T_OBJECT, "primitive type expecteds");
818 ciKlass* klass = ciTypeArrayKlass::make(type); 808 return JNIHandles::make_local(THREAD, GraalCompiler::get_RiType(Universe::typeArrayKlassObj(type), THREAD));
819 return JNIHandles::make_local(THREAD, GraalCompiler::get_RiType(klass, KlassHandle(), THREAD));
820 } 809 }
821 810
822 // public long getMaxCallTargetOffset(CiRuntimeCall rtcall); 811 // public long getMaxCallTargetOffset(CiRuntimeCall rtcall);
823 JNIEXPORT jlong JNICALL Java_com_oracle_graal_hotspot_VMEntries_getMaxCallTargetOffset(JNIEnv *env, jobject, jobject rtcall) { 812 JNIEXPORT jlong JNICALL Java_com_oracle_graal_hotspot_VMEntries_getMaxCallTargetOffset(JNIEnv *env, jobject, jobject rtcall) {
824 TRACE_graal_3("VMEntries::VMEntries_getMaxCallTargetOffset"); 813 TRACE_graal_3("VMEntries::VMEntries_getMaxCallTargetOffset");