< prev index next >

src/hotspot/cpu/x86/c1_Runtime1_x86.cpp

Print this page

@@ -1101,32 +1101,36 @@
       }
       break;
 
     case new_type_array_id:
     case new_object_array_id:
+    case new_value_array_id:
       {
         Register length   = rbx; // Incoming
         Register klass    = rdx; // Incoming
         Register obj      = rax; // Result
 
         if (id == new_type_array_id) {
           __ set_info("new_type_array", dont_gc_arguments);
-        } else {
+        } else if (id == new_object_array_id) {
           __ set_info("new_object_array", dont_gc_arguments);
+        } else {
+          __ set_info("new_value_array", dont_gc_arguments);
         }
 
 #ifdef ASSERT
         // assert object type is really an array of the proper kind
         {
           Label ok;
           Register t0 = obj;
           __ movl(t0, Address(klass, Klass::layout_helper_offset()));
           __ sarl(t0, Klass::_lh_array_tag_shift);
-          int tag = ((id == new_type_array_id)
-                     ? Klass::_lh_array_tag_type_value
-                     : Klass::_lh_array_tag_obj_value);
-          __ cmpl(t0, tag);
+          switch (id) {
+          case new_type_array_id:    __ cmpl(t0, Klass::_lh_array_tag_type_value); break;
+          case new_object_array_id:  __ cmpl(t0, Klass::_lh_array_tag_obj_value);  break;
+          case new_value_array_id:   __ cmpl(t0, Klass::_lh_array_tag_vt_value);   break;
+          }
           __ jcc(Assembler::equal, ok);
           __ stop("assert(is an array klass)");
           __ should_not_reach_here();
           __ bind(ok);
         }

@@ -1177,10 +1181,11 @@
         OopMap* map = save_live_registers(sasm, 3);
         int call_offset;
         if (id == new_type_array_id) {
           call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_type_array), klass, length);
         } else {
+          // Runtime1::new_object_array handles both object and value arrays
           call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_object_array), klass, length);
         }
 
         oop_maps = new OopMapSet();
         oop_maps->add_gc_map(call_offset, map);
< prev index next >