equal
deleted
inserted
replaced
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; |