src/cpu/x86/vm/macroAssembler_x86.cpp

changeset 9669
32bc598624bd
parent 9327
f96fcd9e1e1b
child 9703
2fdf635bcf28
     1.1 --- a/src/cpu/x86/vm/macroAssembler_x86.cpp	Thu Nov 05 11:42:42 2015 +0100
     1.2 +++ b/src/cpu/x86/vm/macroAssembler_x86.cpp	Tue May 07 20:38:26 2019 +0000
     1.3 @@ -4119,6 +4119,42 @@
     1.4    }
     1.5  }
     1.6  
     1.7 +void MacroAssembler::resolve_jobject(Register value,
     1.8 +                                     Register thread,
     1.9 +                                     Register tmp) {
    1.10 +  assert_different_registers(value, thread, tmp);
    1.11 +  Label done, not_weak;
    1.12 +  testptr(value, value);
    1.13 +  jcc(Assembler::zero, done);                // Use NULL as-is.
    1.14 +  testptr(value, JNIHandles::weak_tag_mask); // Test for jweak tag.
    1.15 +  jcc(Assembler::zero, not_weak);
    1.16 +  // Resolve jweak.
    1.17 +  movptr(value, Address(value, -JNIHandles::weak_tag_value));
    1.18 +  verify_oop(value);
    1.19 +#if INCLUDE_ALL_GCS
    1.20 +  if (UseG1GC) {
    1.21 +    g1_write_barrier_pre(noreg /* obj */,
    1.22 +                         value /* pre_val */,
    1.23 +                         thread /* thread */,
    1.24 +                         tmp /* tmp */,
    1.25 +                         true /* tosca_live */,
    1.26 +                         true /* expand_call */);
    1.27 +  }
    1.28 +#endif // INCLUDE_ALL_GCS
    1.29 +  jmp(done);
    1.30 +  bind(not_weak);
    1.31 +  // Resolve (untagged) jobject.
    1.32 +  movptr(value, Address(value, 0));
    1.33 +  verify_oop(value);
    1.34 +  bind(done);
    1.35 +}
    1.36 +
    1.37 +void MacroAssembler::clear_jweak_tag(Register possibly_jweak) {
    1.38 +  const int32_t inverted_jweak_mask = ~static_cast<int32_t>(JNIHandles::weak_tag_mask);
    1.39 +  STATIC_ASSERT(inverted_jweak_mask == -2); // otherwise check this code
    1.40 +  // The inverted mask is sign-extended
    1.41 +  andptr(possibly_jweak, inverted_jweak_mask);
    1.42 +}
    1.43  
    1.44  //////////////////////////////////////////////////////////////////////////////////
    1.45  #if INCLUDE_ALL_GCS

mercurial