< prev index next > src/hotspot/share/oops/fieldInfo.inline.hpp
Print this page
#include "oops/fieldInfo.hpp"
#include "memory/metadataFactory.hpp"
#include "oops/constantPool.hpp"
+ #include "oops/instanceKlass.hpp"
#include "oops/symbol.hpp"
#include "runtime/atomic.hpp"
#include "utilities/checkedCast.hpp"
inline Symbol* FieldInfo::name(ConstantPool* cp) const {
_consumer->accept_uint(fi.generic_signature_index());
}
if (fi.field_flags().is_contended()) {
_consumer->accept_uint(fi.contention_group());
}
+ if (fi.field_flags().is_flat()) {
+ assert(fi.layout_kind() != LayoutKind::UNKNOWN, "Must be set");
+ _consumer->accept_uint((uint32_t)fi.layout_kind());
+ }
+ if (fi.field_flags().has_null_marker()) {
+ _consumer->accept_uint(fi.null_marker_offset());
+ }
} else {
assert(fi.initializer_index() == 0, "");
assert(fi.generic_signature_index() == 0, "");
assert(fi.contention_group() == 0, "");
+ assert(fi.null_marker_offset() == 0, "");
}
}
inline FieldInfoReader::FieldInfoReader(const Array<u1>* fi)
if (fi._field_flags.is_contended()) {
fi._contention_group = checked_cast<u2>(next_uint());
} else {
fi._contention_group = 0;
}
}
inline FieldInfoReader& FieldInfoReader::skip_field_info() {
_next_index++;
const int name_sig_af_off = 4; // four items
skip(name_sig_af_off);
FieldInfo::FieldFlags ff(next_uint());
if (ff.has_any_optionals()) {
const int init_gen_cont = (ff.is_initialized() +
ff.is_generic() +
! ff.is_contended());
skip(init_gen_cont); // up to three items
}
return *this;
}
if (fi._field_flags.is_contended()) {
fi._contention_group = checked_cast<u2>(next_uint());
} else {
fi._contention_group = 0;
}
+ if (fi._field_flags.is_flat()) {
+ fi._layout_kind = static_cast<LayoutKind>(next_uint());
+ }
+ if (fi._field_flags.has_null_marker()) {
+ fi._null_marker_offset = next_uint();
+ } else {
+ fi._null_marker_offset = 0;
+ }
}
inline FieldInfoReader& FieldInfoReader::skip_field_info() {
_next_index++;
const int name_sig_af_off = 4; // four items
skip(name_sig_af_off);
FieldInfo::FieldFlags ff(next_uint());
if (ff.has_any_optionals()) {
const int init_gen_cont = (ff.is_initialized() +
ff.is_generic() +
! ff.is_contended() +
+ ff.is_flat() +
+ ff.has_null_marker());
skip(init_gen_cont); // up to three items
}
return *this;
}
inline void FieldStatus::update_flag(FieldStatusBitPosition pos, bool z) {
if (z) atomic_set_bits(_flags, flag_mask(pos));
else atomic_clear_bits(_flags, flag_mask(pos));
}
! inline void FieldStatus::update_access_watched(bool z) { update_flag(_fs_access_watched, z); }
! inline void FieldStatus::update_modification_watched(bool z) { update_flag(_fs_modification_watched, z); }
inline void FieldStatus::update_initialized_final_update(bool z) { update_flag(_initialized_final_update, z); }
#endif // SHARE_OOPS_FIELDINFO_INLINE_HPP
inline void FieldStatus::update_flag(FieldStatusBitPosition pos, bool z) {
if (z) atomic_set_bits(_flags, flag_mask(pos));
else atomic_clear_bits(_flags, flag_mask(pos));
}
! inline void FieldStatus::update_access_watched(bool z) { update_flag(_fs_access_watched, z); }
! inline void FieldStatus::update_modification_watched(bool z) { update_flag(_fs_modification_watched, z); }
+ inline void FieldStatus::update_strict_static_unset(bool z) { update_flag(_fs_strict_static_unset, z); }
+ inline void FieldStatus::update_strict_static_unread(bool z) { update_flag(_fs_strict_static_unread, z); }
inline void FieldStatus::update_initialized_final_update(bool z) { update_flag(_initialized_final_update, z); }
#endif // SHARE_OOPS_FIELDINFO_INLINE_HPP
< prev index next >