@@ -65,27 +65,31 @@ FlatArrayKlass::FlatArrayKlass(Klass* element_klass, Symbol* name, LayoutKind lk
6565 set_layout_helper (array_layout_helper (InlineKlass::cast (element_klass), lk));
6666 assert (is_array_klass (), " sanity" );
6767 assert (is_flatArray_klass (), " sanity" );
68- assert (is_null_free_array_klass (), " sanity" );
6968
7069#ifdef _LP64
7170 set_prototype_header (markWord::flat_array_prototype (lk));
72- assert (prototype_header ().is_flat_array (), " sanity" );
7371#else
7472 fatal (" Not supported yet" );
7573 set_prototype_header (markWord::inline_type_prototype ());
7674#endif
7775
7876#ifdef ASSERT
77+ assert (layout_helper_is_array (layout_helper ()), " Must be" );
78+ assert (layout_helper_is_flatArray (layout_helper ()), " Must be" );
79+ assert (layout_helper_element_type (layout_helper ()) == T_FLAT_ELEMENT, " Must be" );
80+ assert (prototype_header ().is_flat_array (), " Must be" );
7981 switch (lk) {
8082 case NON_ATOMIC_FLAT:
83+ case ATOMIC_FLAT:
8184 assert (layout_helper_is_null_free (layout_helper ()), " Must be" );
82- assert (layout_helper_is_array (layout_helper ()), " Must be" );
83- assert (layout_helper_is_flatArray (layout_helper ()), " Must be" );
84- assert (layout_helper_element_type (layout_helper ()) == T_FLAT_ELEMENT, " Must be" );
8585 assert (prototype_header ().is_null_free_array (), " Must be" );
86- assert (prototype_header ().is_flat_array (), " Must be" );
86+ break ;
87+ case NULLABLE_ATOMIC_FLAT:
88+ assert (!layout_helper_is_null_free (layout_helper ()), " Must be" );
89+ assert (!prototype_header ().is_null_free_array (), " Must be" );
8790 break ;
8891 default :
92+ ShouldNotReachHere ();
8993 break ;
9094 }
9195#endif // ASSERT
@@ -161,15 +165,15 @@ jint FlatArrayKlass::array_layout_helper(InlineKlass* vk, LayoutKind lk) {
161165 BasicType etype = T_FLAT_ELEMENT;
162166 int esize = log2i_exact (round_up_power_of_2 (vk->layout_size_in_bytes (lk)));
163167 int hsize = arrayOopDesc::base_offset_in_bytes (etype);
164-
165- int lh = Klass::array_layout_helper (_lh_array_tag_vt_value, true , hsize, etype, esize);
168+ bool null_free = lk != NULLABLE_ATOMIC_FLAT;
169+ int lh = Klass::array_layout_helper (_lh_array_tag_vt_value, null_free , hsize, etype, esize);
166170
167171 assert (lh < (int )_lh_neutral_value, " must look like an array layout" );
168172 assert (layout_helper_is_array (lh), " correct kind" );
169173 assert (layout_helper_is_flatArray (lh), " correct kind" );
170174 assert (!layout_helper_is_typeArray (lh), " correct kind" );
171175 assert (!layout_helper_is_objArray (lh), " correct kind" );
172- assert (layout_helper_is_null_free (lh), " correct kind" );
176+ assert (layout_helper_is_null_free (lh) == null_free , " correct kind" );
173177 assert (layout_helper_header_size (lh) == hsize, " correct decode" );
174178 assert (layout_helper_element_type (lh) == etype, " correct decode" );
175179 assert (layout_helper_log2_element_size (lh) == esize, " correct decode" );
0 commit comments