src/hotspot/cpu/x86/macroAssembler_x86.cpp
changeset 50446 39ca7558bc43
parent 50157 bd198a98f3c5
child 50534 a6a44177f99c
equal deleted inserted replaced
50445:bd6b78feb6a3 50446:39ca7558bc43
    31 #include "gc/shared/barrierSetAssembler.hpp"
    31 #include "gc/shared/barrierSetAssembler.hpp"
    32 #include "gc/shared/collectedHeap.inline.hpp"
    32 #include "gc/shared/collectedHeap.inline.hpp"
    33 #include "interpreter/interpreter.hpp"
    33 #include "interpreter/interpreter.hpp"
    34 #include "memory/resourceArea.hpp"
    34 #include "memory/resourceArea.hpp"
    35 #include "memory/universe.hpp"
    35 #include "memory/universe.hpp"
    36 #include "oops/access.hpp"
    36 #include "oops/accessDecorators.hpp"
    37 #include "oops/klass.inline.hpp"
    37 #include "oops/klass.inline.hpp"
    38 #include "prims/methodHandles.hpp"
    38 #include "prims/methodHandles.hpp"
    39 #include "runtime/biasedLocking.hpp"
    39 #include "runtime/biasedLocking.hpp"
    40 #include "runtime/flags/flagSetting.hpp"
    40 #include "runtime/flags/flagSetting.hpp"
    41 #include "runtime/interfaceSupport.inline.hpp"
    41 #include "runtime/interfaceSupport.inline.hpp"
  5257                  value, Address(value, -JNIHandles::weak_tag_value), tmp, thread);
  5257                  value, Address(value, -JNIHandles::weak_tag_value), tmp, thread);
  5258   verify_oop(value);
  5258   verify_oop(value);
  5259   jmp(done);
  5259   jmp(done);
  5260   bind(not_weak);
  5260   bind(not_weak);
  5261   // Resolve (untagged) jobject.
  5261   // Resolve (untagged) jobject.
  5262   access_load_at(T_OBJECT, IN_ROOT | IN_CONCURRENT_ROOT,
  5262   access_load_at(T_OBJECT, IN_CONCURRENT_ROOT,
  5263                  value, Address(value, 0), tmp, thread);
  5263                  value, Address(value, 0), tmp, thread);
  5264   verify_oop(value);
  5264   verify_oop(value);
  5265   bind(done);
  5265   bind(done);
  5266 }
  5266 }
  5267 
  5267 
  6279   assert_different_registers(result, tmp);
  6279   assert_different_registers(result, tmp);
  6280 
  6280 
  6281   // Only 64 bit platforms support GCs that require a tmp register
  6281   // Only 64 bit platforms support GCs that require a tmp register
  6282   // Only IN_HEAP loads require a thread_tmp register
  6282   // Only IN_HEAP loads require a thread_tmp register
  6283   // OopHandle::resolve is an indirection like jobject.
  6283   // OopHandle::resolve is an indirection like jobject.
  6284   access_load_at(T_OBJECT, IN_ROOT | IN_CONCURRENT_ROOT,
  6284   access_load_at(T_OBJECT, IN_CONCURRENT_ROOT,
  6285                  result, Address(result, 0), tmp, /*tmp_thread*/noreg);
  6285                  result, Address(result, 0), tmp, /*tmp_thread*/noreg);
  6286 }
  6286 }
  6287 
  6287 
  6288 void MacroAssembler::load_mirror(Register mirror, Register method, Register tmp) {
  6288 void MacroAssembler::load_mirror(Register mirror, Register method, Register tmp) {
  6289   // get mirror
  6289   // get mirror
  6321 }
  6321 }
  6322 
  6322 
  6323 void MacroAssembler::access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
  6323 void MacroAssembler::access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
  6324                                     Register tmp1, Register thread_tmp) {
  6324                                     Register tmp1, Register thread_tmp) {
  6325   BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
  6325   BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
       
  6326   decorators = AccessInternal::decorator_fixup(decorators);
  6326   bool as_raw = (decorators & AS_RAW) != 0;
  6327   bool as_raw = (decorators & AS_RAW) != 0;
  6327   if (as_raw) {
  6328   if (as_raw) {
  6328     bs->BarrierSetAssembler::load_at(this, decorators, type, dst, src, tmp1, thread_tmp);
  6329     bs->BarrierSetAssembler::load_at(this, decorators, type, dst, src, tmp1, thread_tmp);
  6329   } else {
  6330   } else {
  6330     bs->load_at(this, decorators, type, dst, src, tmp1, thread_tmp);
  6331     bs->load_at(this, decorators, type, dst, src, tmp1, thread_tmp);
  6332 }
  6333 }
  6333 
  6334 
  6334 void MacroAssembler::access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register src,
  6335 void MacroAssembler::access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register src,
  6335                                      Register tmp1, Register tmp2) {
  6336                                      Register tmp1, Register tmp2) {
  6336   BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
  6337   BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
       
  6338   decorators = AccessInternal::decorator_fixup(decorators);
  6337   bool as_raw = (decorators & AS_RAW) != 0;
  6339   bool as_raw = (decorators & AS_RAW) != 0;
  6338   if (as_raw) {
  6340   if (as_raw) {
  6339     bs->BarrierSetAssembler::store_at(this, decorators, type, dst, src, tmp1, tmp2);
  6341     bs->BarrierSetAssembler::store_at(this, decorators, type, dst, src, tmp1, tmp2);
  6340   } else {
  6342   } else {
  6341     bs->store_at(this, decorators, type, dst, src, tmp1, tmp2);
  6343     bs->store_at(this, decorators, type, dst, src, tmp1, tmp2);