src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
changeset 49455 848864ed9b17
parent 49449 ef5d5d343e2a
child 49592 77fb0be7d19f
equal deleted inserted replaced
49454:689ebcfe04fd 49455:848864ed9b17
    28 #include "precompiled.hpp"
    28 #include "precompiled.hpp"
    29 #include "jvm.h"
    29 #include "jvm.h"
    30 #include "asm/assembler.hpp"
    30 #include "asm/assembler.hpp"
    31 #include "asm/assembler.inline.hpp"
    31 #include "asm/assembler.inline.hpp"
    32 #include "gc/shared/cardTable.hpp"
    32 #include "gc/shared/cardTable.hpp"
    33 #include "gc/shared/cardTableModRefBS.hpp"
    33 #include "gc/shared/cardTableBarrierSet.hpp"
    34 #include "interpreter/interpreter.hpp"
    34 #include "interpreter/interpreter.hpp"
    35 #include "compiler/disassembler.hpp"
    35 #include "compiler/disassembler.hpp"
    36 #include "memory/resourceArea.hpp"
    36 #include "memory/resourceArea.hpp"
    37 #include "nativeInst_aarch64.hpp"
    37 #include "nativeInst_aarch64.hpp"
    38 #include "oops/klass.inline.hpp"
    38 #include "oops/klass.inline.hpp"
  3616 void MacroAssembler::store_check(Register obj) {
  3616 void MacroAssembler::store_check(Register obj) {
  3617   // Does a store check for the oop in register obj. The content of
  3617   // Does a store check for the oop in register obj. The content of
  3618   // register obj is destroyed afterwards.
  3618   // register obj is destroyed afterwards.
  3619 
  3619 
  3620   BarrierSet* bs = Universe::heap()->barrier_set();
  3620   BarrierSet* bs = Universe::heap()->barrier_set();
  3621   assert(bs->kind() == BarrierSet::CardTableModRef,
  3621   assert(bs->kind() == BarrierSet::CardTableBarrierSet,
  3622          "Wrong barrier set kind");
  3622          "Wrong barrier set kind");
  3623 
  3623 
  3624   CardTableModRefBS* ctbs = barrier_set_cast<CardTableModRefBS>(bs);
  3624   CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs);
  3625   CardTable* ct = ctbs->card_table();
  3625   CardTable* ct = ctbs->card_table();
  3626   assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
  3626   assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
  3627 
  3627 
  3628   lsr(obj, obj, CardTable::card_shift);
  3628   lsr(obj, obj, CardTable::card_shift);
  3629 
  3629 
  4127                                        DirtyCardQueue::byte_offset_of_index()));
  4127                                        DirtyCardQueue::byte_offset_of_index()));
  4128   Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() +
  4128   Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() +
  4129                                        DirtyCardQueue::byte_offset_of_buf()));
  4129                                        DirtyCardQueue::byte_offset_of_buf()));
  4130 
  4130 
  4131   BarrierSet* bs = Universe::heap()->barrier_set();
  4131   BarrierSet* bs = Universe::heap()->barrier_set();
  4132   CardTableModRefBS* ctbs = barrier_set_cast<CardTableModRefBS>(bs);
  4132   CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs);
  4133   CardTable* ct = ctbs->card_table();
  4133   CardTable* ct = ctbs->card_table();
  4134   assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
  4134   assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
  4135 
  4135 
  4136   Label done;
  4136   Label done;
  4137   Label runtime;
  4137   Label runtime;
  4513   byte_offset = (unsigned long)dest.target() & 0xfff;
  4513   byte_offset = (unsigned long)dest.target() & 0xfff;
  4514 }
  4514 }
  4515 
  4515 
  4516 void MacroAssembler::load_byte_map_base(Register reg) {
  4516 void MacroAssembler::load_byte_map_base(Register reg) {
  4517   jbyte *byte_map_base =
  4517   jbyte *byte_map_base =
  4518     ((CardTableModRefBS*)(Universe::heap()->barrier_set()))->card_table()->byte_map_base();
  4518     ((CardTableBarrierSet*)(Universe::heap()->barrier_set()))->card_table()->byte_map_base();
  4519 
  4519 
  4520   if (is_valid_AArch64_address((address)byte_map_base)) {
  4520   if (is_valid_AArch64_address((address)byte_map_base)) {
  4521     // Strictly speaking the byte_map_base isn't an address at all,
  4521     // Strictly speaking the byte_map_base isn't an address at all,
  4522     // and it might even be negative.
  4522     // and it might even be negative.
  4523     unsigned long offset;
  4523     unsigned long offset;