< prev index next >
src/hotspot/cpu/x86/macroAssembler_x86.cpp
Print this page
*** 3452,3474 ****
andl(temp_reg, 0x1);
testl(temp_reg, temp_reg);
jcc(Assembler::notZero, is_flattened);
}
! void MacroAssembler::test_flat_array_klass(Register klass, Register temp_reg,
! Label& is_flat_array) {
! movl(temp_reg, Address(klass, Klass::layout_helper_offset()));
! sarl(temp_reg, Klass::_lh_array_tag_shift);
! cmpl(temp_reg, Klass::_lh_array_tag_vt_value);
! jcc(Assembler::equal, is_flat_array);
}
!
! void MacroAssembler::test_flat_array_oop(Register oop, Register temp_reg,
! Label& is_flat_array) {
! load_klass(temp_reg, oop);
! test_flat_array_klass(temp_reg, temp_reg, is_flat_array);
}
void MacroAssembler::os_breakpoint() {
// instead of directly emitting a breakpoint, call os:breakpoint for better debugability
// (e.g., MSVC can't call ps() otherwise)
--- 3452,3472 ----
andl(temp_reg, 0x1);
testl(temp_reg, temp_reg);
jcc(Assembler::notZero, is_flattened);
}
! void MacroAssembler::test_flattened_array_oop(Register oop, Register temp_reg,
! Label&is_flattened_array) {
! load_storage_props(temp_reg, oop);
! testb(temp_reg, ArrayStorageProperties::flattened_value);
! jcc(Assembler::notZero, is_flattened_array);
}
! void MacroAssembler::test_null_free_array_oop(Register oop, Register temp_reg, Label&is_null_free_array) {
! load_storage_props(temp_reg, oop);
! testb(temp_reg, ArrayStorageProperties::null_free_value);
! jcc(Assembler::notZero, is_null_free_array);
}
void MacroAssembler::os_breakpoint() {
// instead of directly emitting a breakpoint, call os:breakpoint for better debugability
// (e.g., MSVC can't call ps() otherwise)
*** 5086,5103 ****
movptr(mirror, Address(mirror, ConstantPool::pool_holder_offset_in_bytes()));
movptr(mirror, Address(mirror, mirror_offset));
resolve_oop_handle(mirror, tmp);
}
void MacroAssembler::load_klass(Register dst, Register src) {
#ifdef _LP64
if (UseCompressedClassPointers) {
! movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
decode_klass_not_null(dst);
} else
#endif
! movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
}
void MacroAssembler::load_prototype_header(Register dst, Register src) {
load_klass(dst, src);
movptr(dst, Address(dst, Klass::prototype_header_offset()));
--- 5084,5126 ----
movptr(mirror, Address(mirror, ConstantPool::pool_holder_offset_in_bytes()));
movptr(mirror, Address(mirror, mirror_offset));
resolve_oop_handle(mirror, tmp);
}
+ void MacroAssembler::load_metadata(Register dst, Register src) {
+ if (UseCompressedClassPointers) {
+ movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
+ } else {
+ movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
+ }
+ }
+
+ void MacroAssembler::load_storage_props(Register dst, Register src) {
+ load_metadata(dst, src);
+ if (UseCompressedClassPointers) {
+ shrl(dst, oopDesc::narrow_storage_props_shift);
+ } else {
+ shrq(dst, oopDesc::wide_storage_props_shift);
+ }
+ }
+
void MacroAssembler::load_klass(Register dst, Register src) {
+ load_metadata(dst, src);
#ifdef _LP64
if (UseCompressedClassPointers) {
! andl(dst, oopDesc::compressed_klass_mask());
decode_klass_not_null(dst);
} else
#endif
! {
! #ifdef _LP64
! shlq(dst, oopDesc::storage_props_nof_bits);
! shrq(dst, oopDesc::storage_props_nof_bits);
! #else
! andl(dst, oopDesc::wide_klass_mask());
! #endif
! }
}
void MacroAssembler::load_prototype_header(Register dst, Register src) {
load_klass(dst, src);
movptr(dst, Address(dst, Klass::prototype_header_offset()));
< prev index next >