src/hotspot/cpu/aarch64/jniFastGetField_aarch64.cpp
changeset 49898 4745598b307f
parent 47216 71c04702a3d5
child 49929 f38329fe8055
equal deleted inserted replaced
49897:117501815bed 49898:4745598b307f
    23  *
    23  *
    24  */
    24  */
    25 
    25 
    26 #include "precompiled.hpp"
    26 #include "precompiled.hpp"
    27 #include "asm/macroAssembler.hpp"
    27 #include "asm/macroAssembler.hpp"
       
    28 #include "gc/shared/barrierSet.hpp"
       
    29 #include "gc/shared/barrierSetAssembler.hpp"
    28 #include "memory/resourceArea.hpp"
    30 #include "memory/resourceArea.hpp"
    29 #include "prims/jniFastGetField.hpp"
    31 #include "prims/jniFastGetField.hpp"
    30 #include "prims/jvm_misc.hpp"
    32 #include "prims/jvm_misc.hpp"
    31 #include "runtime/safepoint.hpp"
    33 #include "runtime/safepoint.hpp"
    32 
    34 
    80   __ eor(robj, c_rarg1, rcounter);
    82   __ eor(robj, c_rarg1, rcounter);
    81   __ eor(robj, robj, rcounter);               // obj, since
    83   __ eor(robj, robj, rcounter);               // obj, since
    82                                               // robj ^ rcounter ^ rcounter == robj
    84                                               // robj ^ rcounter ^ rcounter == robj
    83                                               // robj is address dependent on rcounter.
    85                                               // robj is address dependent on rcounter.
    84 
    86 
    85   // If mask changes we need to ensure that the inverse is still encodable as an immediate
    87   BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
    86   STATIC_ASSERT(JNIHandles::weak_tag_mask == 1);
    88   bs->try_resolve_jobject_in_native(masm, robj, rscratch1, slow);
    87   __ andr(robj, robj, ~JNIHandles::weak_tag_mask);
       
    88 
    89 
    89   __ ldr(robj, Address(robj, 0));             // *obj
       
    90   __ lsr(roffset, c_rarg2, 2);                // offset
    90   __ lsr(roffset, c_rarg2, 2);                // offset
    91 
    91 
    92   assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
    92   assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
    93   speculative_load_pclist[count] = __ pc();   // Used by the segfault handler
    93   speculative_load_pclist[count] = __ pc();   // Used by the segfault handler
    94   switch (type) {
    94   switch (type) {
   175 }
   175 }
   176 
   176 
   177 address JNI_FastGetField::generate_fast_get_double_field() {
   177 address JNI_FastGetField::generate_fast_get_double_field() {
   178   return generate_fast_get_int_field0(T_DOUBLE);
   178   return generate_fast_get_int_field0(T_DOUBLE);
   179 }
   179 }
   180