< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Print this page
rev 47398 : 8166317: InterpreterCodeSize should be computed
Reviewed-by: kvn, coleenp


3832   strb(zr, Address(card_addr));
3833 
3834   ldr(rscratch1, queue_index);
3835   cbz(rscratch1, runtime);
3836   sub(rscratch1, rscratch1, wordSize);
3837   str(rscratch1, queue_index);
3838 
3839   ldr(tmp2, buffer);
3840   str(card_addr, Address(tmp2, rscratch1));
3841   b(done);
3842 
3843   bind(runtime);
3844   // save the live input values
3845   push(store_addr->bit(true) | new_val->bit(true), sp);
3846   call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post), card_addr, thread);
3847   pop(store_addr->bit(true) | new_val->bit(true), sp);
3848 
3849   bind(done);
3850 }
3851 




3852 #endif // INCLUDE_ALL_GCS
3853 
3854 Address MacroAssembler::allocate_metadata_address(Metadata* obj) {
3855   assert(oop_recorder() != NULL, "this assembler needs a Recorder");
3856   int index = oop_recorder()->allocate_metadata_index(obj);
3857   RelocationHolder rspec = metadata_Relocation::spec(index);
3858   return Address((address)obj, rspec);
3859 }
3860 
3861 // Move an oop into a register.  immediate is true if we want
3862 // immediate instrcutions, i.e. we are not going to patch this
3863 // instruction while the code is being executed by another thread.  In
3864 // that case we can use move immediates rather than the constant pool.
3865 void MacroAssembler::movoop(Register dst, jobject obj, bool immediate) {
3866   int oop_index;
3867   if (obj == NULL) {
3868     oop_index = oop_recorder()->allocate_oop_index(obj);
3869   } else {
3870     oop_index = oop_recorder()->find_index(obj);
3871     assert(Universe::heap()->is_in_reserved(JNIHandles::resolve(obj)), "should be real oop");




3832   strb(zr, Address(card_addr));
3833 
3834   ldr(rscratch1, queue_index);
3835   cbz(rscratch1, runtime);
3836   sub(rscratch1, rscratch1, wordSize);
3837   str(rscratch1, queue_index);
3838 
3839   ldr(tmp2, buffer);
3840   str(card_addr, Address(tmp2, rscratch1));
3841   b(done);
3842 
3843   bind(runtime);
3844   // save the live input values
3845   push(store_addr->bit(true) | new_val->bit(true), sp);
3846   call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post), card_addr, thread);
3847   pop(store_addr->bit(true) | new_val->bit(true), sp);
3848 
3849   bind(done);
3850 }
3851 
3852 // Called from init_globals() after universe_init() and before interpreter_init()
3853 void g1_barrier_stubs_init() {
3854   // G1 barrier stubs currently only generated on SPARC
3855 }
3856 #endif // INCLUDE_ALL_GCS
3857 
3858 Address MacroAssembler::allocate_metadata_address(Metadata* obj) {
3859   assert(oop_recorder() != NULL, "this assembler needs a Recorder");
3860   int index = oop_recorder()->allocate_metadata_index(obj);
3861   RelocationHolder rspec = metadata_Relocation::spec(index);
3862   return Address((address)obj, rspec);
3863 }
3864 
3865 // Move an oop into a register.  immediate is true if we want
3866 // immediate instrcutions, i.e. we are not going to patch this
3867 // instruction while the code is being executed by another thread.  In
3868 // that case we can use move immediates rather than the constant pool.
3869 void MacroAssembler::movoop(Register dst, jobject obj, bool immediate) {
3870   int oop_index;
3871   if (obj == NULL) {
3872     oop_index = oop_recorder()->allocate_oop_index(obj);
3873   } else {
3874     oop_index = oop_recorder()->find_index(obj);
3875     assert(Universe::heap()->is_in_reserved(JNIHandles::resolve(obj)), "should be real oop");


< prev index next >