< prev index next >

src/hotspot/cpu/x86/jniFastGetField_x86_64.cpp

Print this page
*** 28,10 ***
--- 28,11 ---
  #include "gc/shared/barrierSet.hpp"
  #include "gc/shared/barrierSetAssembler.hpp"
  #include "memory/resourceArea.hpp"
  #include "prims/jniFastGetField.hpp"
  #include "prims/jvm_misc.hpp"
+ #include "runtime/jfieldIDWorkaround.hpp"
  #include "prims/jvmtiExport.hpp"
  #include "runtime/safepoint.hpp"
  
  #define __ masm->
  

*** 79,11 ***
      __ cmp32(ExternalAddress(JvmtiExport::get_field_access_count_addr()), 0, rscratch1);
      __ jcc(Assembler::notZero, slow);
    }
  
    __ mov   (roffset, c_rarg2);
!   __ shrptr(roffset, 2);                         // offset
  
    // Both robj and rtmp are clobbered by try_resolve_jobject_in_native.
    BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
    bs->try_resolve_jobject_in_native(masm, /* jni_env */ c_rarg0, robj, rtmp, slow);
    DEBUG_ONLY(__ movl(rtmp, 0xDEADC0DE);)
--- 80,11 ---
      __ cmp32(ExternalAddress(JvmtiExport::get_field_access_count_addr()), 0, rscratch1);
      __ jcc(Assembler::notZero, slow);
    }
  
    __ mov   (roffset, c_rarg2);
!   __ shrptr(roffset, jfieldIDWorkaround::offset_shift);                         // offset
  
    // Both robj and rtmp are clobbered by try_resolve_jobject_in_native.
    BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
    bs->try_resolve_jobject_in_native(masm, /* jni_env */ c_rarg0, robj, rtmp, slow);
    DEBUG_ONLY(__ movl(rtmp, 0xDEADC0DE);)

*** 181,11 ***
    BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
    bs->try_resolve_jobject_in_native(masm, /* jni_env */ c_rarg0, robj, rtmp, slow);
    DEBUG_ONLY(__ movl(rtmp, 0xDEADC0DE);)
  
    __ mov   (roffset, c_rarg2);
!   __ shrptr(roffset, 2);                         // offset
  
    assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
    speculative_load_pclist[count] = __ pc();
    switch (type) {
      case T_FLOAT:  __ movflt (xmm0, Address(robj, roffset, Address::times_1)); break;
--- 182,11 ---
    BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
    bs->try_resolve_jobject_in_native(masm, /* jni_env */ c_rarg0, robj, rtmp, slow);
    DEBUG_ONLY(__ movl(rtmp, 0xDEADC0DE);)
  
    __ mov   (roffset, c_rarg2);
!   __ shrptr(roffset, jfieldIDWorkaround::offset_shift);                         // offset
  
    assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
    speculative_load_pclist[count] = __ pc();
    switch (type) {
      case T_FLOAT:  __ movflt (xmm0, Address(robj, roffset, Address::times_1)); break;
< prev index next >