src/hotspot/cpu/sparc/stubGenerator_sparc.cpp
changeset 49164 7e958a8ebcd3
parent 48807 fd8ccb37fce9
child 49347 edb65305d3ac
child 56276 ee5e58456be5
equal deleted inserted replaced
49163:580bb0b85f63 49164:7e958a8ebcd3
    22  *
    22  *
    23  */
    23  */
    24 
    24 
    25 #include "precompiled.hpp"
    25 #include "precompiled.hpp"
    26 #include "asm/macroAssembler.inline.hpp"
    26 #include "asm/macroAssembler.inline.hpp"
       
    27 #include "gc/shared/cardTable.hpp"
       
    28 #include "gc/shared/cardTableModRefBS.hpp"
    27 #include "interpreter/interpreter.hpp"
    29 #include "interpreter/interpreter.hpp"
    28 #include "nativeInst_sparc.hpp"
    30 #include "nativeInst_sparc.hpp"
    29 #include "oops/instanceOop.hpp"
    31 #include "oops/instanceOop.hpp"
    30 #include "oops/method.hpp"
    32 #include "oops/method.hpp"
    31 #include "oops/objArrayKlass.hpp"
    33 #include "oops/objArrayKlass.hpp"
   873 
   875 
   874           __ bind(filtered);
   876           __ bind(filtered);
   875           DEBUG_ONLY(__ set(0xDEADC0DE, tmp);) // we have killed tmp
   877           DEBUG_ONLY(__ set(0xDEADC0DE, tmp);) // we have killed tmp
   876         }
   878         }
   877         break;
   879         break;
   878       case BarrierSet::CardTableForRS:
   880       case BarrierSet::CardTableModRef:
   879       case BarrierSet::CardTableExtension:
       
   880       case BarrierSet::ModRef:
       
   881         break;
   881         break;
   882       default:
   882       default:
   883         ShouldNotReachHere();
   883         ShouldNotReachHere();
   884     }
   884     }
   885   }
   885   }
   906           __ call(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_post));
   906           __ call(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_post));
   907           __ delayed()->mov(count->after_save(), O1);
   907           __ delayed()->mov(count->after_save(), O1);
   908           __ restore();
   908           __ restore();
   909         }
   909         }
   910         break;
   910         break;
   911       case BarrierSet::CardTableForRS:
   911       case BarrierSet::CardTableModRef:
   912       case BarrierSet::CardTableExtension:
       
   913         {
   912         {
   914           CardTableModRefBS* ct = barrier_set_cast<CardTableModRefBS>(bs);
   913           CardTableModRefBS* ctbs = barrier_set_cast<CardTableModRefBS>(bs);
   915           assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
   914           CardTable* ct = ctbs->card_table();
       
   915           assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
   916           assert_different_registers(addr, count, tmp);
   916           assert_different_registers(addr, count, tmp);
   917 
   917 
   918           Label L_loop, L_done;
   918           Label L_loop, L_done;
   919 
   919 
   920           __ cmp_and_br_short(count, 0, Assembler::equal, Assembler::pt, L_done); // zero count - nothing to do
   920           __ cmp_and_br_short(count, 0, Assembler::equal, Assembler::pt, L_done); // zero count - nothing to do
   921 
   921 
   922           __ sll_ptr(count, LogBytesPerHeapOop, count);
   922           __ sll_ptr(count, LogBytesPerHeapOop, count);
   923           __ sub(count, BytesPerHeapOop, count);
   923           __ sub(count, BytesPerHeapOop, count);
   924           __ add(count, addr, count);
   924           __ add(count, addr, count);
   925           // Use two shifts to clear out those low order two bits! (Cannot opt. into 1.)
   925           // Use two shifts to clear out those low order two bits! (Cannot opt. into 1.)
   926           __ srl_ptr(addr, CardTableModRefBS::card_shift, addr);
   926           __ srl_ptr(addr, CardTable::card_shift, addr);
   927           __ srl_ptr(count, CardTableModRefBS::card_shift, count);
   927           __ srl_ptr(count, CardTable::card_shift, count);
   928           __ sub(count, addr, count);
   928           __ sub(count, addr, count);
   929           AddressLiteral rs(ct->byte_map_base);
   929           AddressLiteral rs(ct->byte_map_base());
   930           __ set(rs, tmp);
   930           __ set(rs, tmp);
   931         __ BIND(L_loop);
   931         __ BIND(L_loop);
   932           __ stb(G0, tmp, addr);
   932           __ stb(G0, tmp, addr);
   933           __ subcc(count, 1, count);
   933           __ subcc(count, 1, count);
   934           __ brx(Assembler::greaterEqual, false, Assembler::pt, L_loop);
   934           __ brx(Assembler::greaterEqual, false, Assembler::pt, L_loop);