Mercurial > hg > graal-jvmci-8
comparison src/cpu/x86/vm/graalRuntime_x86.cpp @ 7145:6c46172c04bf
consolidated new_type_array and new_object_array stubs into one as there no difference between them
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 07 Dec 2012 18:26:26 +0100 |
parents | 1baf7f1e3f23 |
children | 5d0bb7d52783 2ae3e26b7e9a |
comparison
equal
deleted
inserted
replaced
7144:ae69cd8c08a9 | 7145:6c46172c04bf |
---|---|
802 // rax,: new instance | 802 // rax,: new instance |
803 } | 803 } |
804 | 804 |
805 break; | 805 break; |
806 | 806 |
807 case graal_new_type_array_id: | 807 case graal_new_array_id: |
808 case graal_new_object_array_id: | |
809 { | 808 { |
810 Register length = rbx; // Incoming | 809 Register length = rbx; // Incoming |
811 Register klass = rdx; // Incoming | 810 Register klass = rdx; // Incoming |
812 Register obj = rax; // Result | 811 Register obj = rax; // Result |
813 | 812 |
814 if (id == graal_new_type_array_id) { | 813 __ set_info("new_array", dont_gc_arguments); |
815 __ set_info("new_type_array", dont_gc_arguments); | 814 |
816 } else { | |
817 __ set_info("new_object_array", dont_gc_arguments); | |
818 } | |
819 | |
820 #ifdef ASSERT | |
821 // assert object type is really an array of the proper kind | |
822 { | |
823 Label ok; | |
824 Register t0 = obj; | |
825 __ movl(t0, Address(klass, Klass::layout_helper_offset())); | |
826 __ sarl(t0, Klass::_lh_array_tag_shift); | |
827 int tag = ((id == graal_new_type_array_id) | |
828 ? Klass::_lh_array_tag_type_value | |
829 : Klass::_lh_array_tag_obj_value); | |
830 __ cmpl(t0, tag); | |
831 __ jcc(Assembler::equal, ok); | |
832 __ stop("assert(is an array klass)"); | |
833 __ should_not_reach_here(); | |
834 __ bind(ok); | |
835 } | |
836 #endif // ASSERT | |
837 __ enter(); | 815 __ enter(); |
838 OopMap* map = save_live_registers(sasm, 3); | 816 OopMap* map = save_live_registers(sasm, 3); |
839 int call_offset; | 817 int call_offset; |
840 if (id == graal_new_type_array_id) { | 818 call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_array), klass, length); |
841 call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_type_array), klass, length); | |
842 } else { | |
843 call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_object_array), klass, length); | |
844 } | |
845 | 819 |
846 oop_maps = new OopMapSet(); | 820 oop_maps = new OopMapSet(); |
847 oop_maps->add_gc_map(call_offset, map); | 821 oop_maps->add_gc_map(call_offset, map); |
848 restore_live_registers_except_rax(sasm); | 822 restore_live_registers_except_rax(sasm); |
849 | 823 |