< 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 >