equal
deleted
inserted
replaced
24 |
24 |
25 #include "precompiled.hpp" |
25 #include "precompiled.hpp" |
26 #include "jvm.h" |
26 #include "jvm.h" |
27 #include "gc/shared/barrierSet.inline.hpp" |
27 #include "gc/shared/barrierSet.inline.hpp" |
28 #include "gc/shared/cardTable.hpp" |
28 #include "gc/shared/cardTable.hpp" |
29 #include "gc/shared/cardTableModRefBS.inline.hpp" |
29 #include "gc/shared/cardTableBarrierSet.inline.hpp" |
30 #include "gc/shared/collectedHeap.hpp" |
30 #include "gc/shared/collectedHeap.hpp" |
31 #include "interp_masm_arm.hpp" |
31 #include "interp_masm_arm.hpp" |
32 #include "interpreter/interpreter.hpp" |
32 #include "interpreter/interpreter.hpp" |
33 #include "interpreter/interpreterRuntime.hpp" |
33 #include "interpreter/interpreterRuntime.hpp" |
34 #include "logging/log.hpp" |
34 #include "logging/log.hpp" |
409 // The 1st part of the store check. |
409 // The 1st part of the store check. |
410 // Sets card_table_base register. |
410 // Sets card_table_base register. |
411 void InterpreterMacroAssembler::store_check_part1(Register card_table_base) { |
411 void InterpreterMacroAssembler::store_check_part1(Register card_table_base) { |
412 // Check barrier set type (should be card table) and element size |
412 // Check barrier set type (should be card table) and element size |
413 BarrierSet* bs = Universe::heap()->barrier_set(); |
413 BarrierSet* bs = Universe::heap()->barrier_set(); |
414 assert(bs->kind() == BarrierSet::CardTableModRef, |
414 assert(bs->kind() == BarrierSet::CardTableBarrierSet, |
415 "Wrong barrier set kind"); |
415 "Wrong barrier set kind"); |
416 |
416 |
417 CardTableModRefBS* ctbs = barrier_set_cast<CardTableModRefBS>(bs); |
417 CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs); |
418 CardTable* ct = ctbs->card_table(); |
418 CardTable* ct = ctbs->card_table(); |
419 assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "Adjust store check code"); |
419 assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "Adjust store check code"); |
420 |
420 |
421 // Load card table base address. |
421 // Load card table base address. |
422 |
422 |
471 |
471 |
472 void InterpreterMacroAssembler::set_card(Register card_table_base, Address card_table_addr, Register tmp) { |
472 void InterpreterMacroAssembler::set_card(Register card_table_base, Address card_table_addr, Register tmp) { |
473 #ifdef AARCH64 |
473 #ifdef AARCH64 |
474 strb(ZR, card_table_addr); |
474 strb(ZR, card_table_addr); |
475 #else |
475 #else |
476 CardTableModRefBS* ctbs = barrier_set_cast<CardTableModRefBS>(Universe::heap()->barrier_set()); |
476 CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(Universe::heap()->barrier_set()); |
477 CardTable* ct = ctbs->card_table(); |
477 CardTable* ct = ctbs->card_table(); |
478 if ((((uintptr_t)ct->byte_map_base() & 0xff) == 0)) { |
478 if ((((uintptr_t)ct->byte_map_base() & 0xff) == 0)) { |
479 // Card table is aligned so the lowest byte of the table address base is zero. |
479 // Card table is aligned so the lowest byte of the table address base is zero. |
480 // This works only if the code is not saved for later use, possibly |
480 // This works only if the code is not saved for later use, possibly |
481 // in a context where the base would no longer be aligned. |
481 // in a context where the base would no longer be aligned. |