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