src/hotspot/cpu/arm/interp_masm_arm.cpp
changeset 49455 848864ed9b17
parent 49347 edb65305d3ac
child 49480 d7df2dd501ce
equal deleted inserted replaced
49454:689ebcfe04fd 49455:848864ed9b17
    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.