예제 #1
0
void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register len, Register t1, Register t2) {
    assert_different_registers(obj, klass, len);
    if (UseBiasedLocking && !len->is_valid()) {
        assert_different_registers(obj, klass, len, t1, t2);
        movptr(t1, Address(klass, Klass::prototype_header_offset()));
        movptr(Address(obj, oopDesc::mark_offset_in_bytes()), t1);
    } else {
        // This assumes that all prototype bits fit in an int32_t
        movptr(Address(obj, oopDesc::mark_offset_in_bytes ()), (int32_t)(intptr_t)markOopDesc::prototype());
    }
#ifdef _LP64
    if (UseCompressedClassPointers) { // Take care not to kill klass
        movptr(t1, klass);
        encode_klass_not_null(t1);
        movl(Address(obj, oopDesc::klass_offset_in_bytes()), t1);
    } else
#endif
    {
        movptr(Address(obj, oopDesc::klass_offset_in_bytes()), klass);
    }

    if (len->is_valid()) {
        movl(Address(obj, arrayOopDesc::length_offset_in_bytes()), len);
    }
#ifdef _LP64
    else if (UseCompressedClassPointers) {
        xorptr(t1, t1);
        store_klass_gap(obj, t1);
    }
#endif
}
예제 #2
0
void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register len, Register t1, Register t2) {
    assert_different_registers(obj, klass, len, t1, t2);
    if (UseBiasedLocking && !len->is_valid()) {
        ld_ptr(klass, in_bytes(Klass::prototype_header_offset()), t1);
    } else {
        set((intx)markOopDesc::prototype(), t1);
    }
    st_ptr(t1, obj, oopDesc::mark_offset_in_bytes());
    if (UseCompressedKlassPointers) {
        // Save klass
        mov(klass, t1);
        encode_klass_not_null(t1);
        stw(t1, obj, oopDesc::klass_offset_in_bytes());
    } else {
        st_ptr(klass, obj, oopDesc::klass_offset_in_bytes());
    }
    if (len->is_valid()) {
        st(len, obj, arrayOopDesc::length_offset_in_bytes());
    } else if (UseCompressedKlassPointers) {
        // otherwise length is in the class gap
        store_klass_gap(G0, obj);
    }
}