Mercurial > hg > graal-jvmci-8
diff src/cpu/sparc/vm/sharedRuntime_sparc.cpp @ 727:6b2273dd6fa9
6822110: Add AddressLiteral class on SPARC
Summary: The Address class on SPARC currently handles both, addresses and address literals, what makes the Address class more complicated than it has to be.
Reviewed-by: never, kvn
author | twisti |
---|---|
date | Tue, 21 Apr 2009 11:16:30 -0700 |
parents | e5b0439ef4ae |
children | dcf03e02b020 |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Mon Apr 20 14:48:03 2009 -0700 +++ b/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Tue Apr 21 11:16:30 2009 -0700 @@ -625,9 +625,9 @@ __ mov(I7, O1); // VM needs caller's callsite // Must be a leaf call... // can be very far once the blob has been relocated - Address dest(O7, CAST_FROM_FN_PTR(address, SharedRuntime::fixup_callers_callsite)); + AddressLiteral dest(CAST_FROM_FN_PTR(address, SharedRuntime::fixup_callers_callsite)); __ relocate(relocInfo::runtime_call_type); - __ jumpl_to(dest, O7); + __ jumpl_to(dest, O7, O7); __ delayed()->mov(G2_thread, L7_thread_cache); __ mov(L7_thread_cache, G2_thread); __ mov(L1, G1); @@ -1152,7 +1152,7 @@ #ifndef _LP64 if (g3_crushed) { // Rats load was wasted, at least it is in cache... - __ ld_ptr(G5_method, in_bytes(methodOopDesc::from_compiled_offset()), G3); + __ ld_ptr(G5_method, methodOopDesc::from_compiled_offset(), G3); } #endif /* _LP64 */ @@ -1165,7 +1165,7 @@ // we try and find the callee by normal means a safepoint // is possible. So we stash the desired callee in the thread // and the vm will find there should this case occur. - Address callee_target_addr(G2_thread, 0, in_bytes(JavaThread::callee_target_offset())); + Address callee_target_addr(G2_thread, JavaThread::callee_target_offset()); __ st_ptr(G5_method, callee_target_addr); if (StressNonEntrant) { @@ -1218,7 +1218,7 @@ Register R_temp = G1; // another scratch register #endif - Address ic_miss(G3_scratch, SharedRuntime::get_ic_miss_stub()); + AddressLiteral ic_miss(SharedRuntime::get_ic_miss_stub()); __ verify_oop(O0); __ verify_oop(G5_method); @@ -1240,7 +1240,7 @@ Label ok, ok2; __ brx(Assembler::equal, false, Assembler::pt, ok); __ delayed()->ld_ptr(G5_method, compiledICHolderOopDesc::holder_method_offset(), G5_method); - __ jump_to(ic_miss); + __ jump_to(ic_miss, G3_scratch); __ delayed()->nop(); __ bind(ok); @@ -1251,7 +1251,7 @@ __ bind(ok2); __ br_null(G3_scratch, false, __ pt, skip_fixup); __ delayed()->ld_ptr(G5_method, in_bytes(methodOopDesc::interpreter_entry_offset()), G3_scratch); - __ jump_to(ic_miss); + __ jump_to(ic_miss, G3_scratch); __ delayed()->nop(); } @@ -1444,8 +1444,8 @@ // without calling into the VM: it's the empty function. Just pop this // frame and then jump to forward_exception_entry; O7 will contain the // native caller's return PC. - Address exception_entry(G3_scratch, StubRoutines::forward_exception_entry()); - __ jump_to(exception_entry); + AddressLiteral exception_entry(StubRoutines::forward_exception_entry()); + __ jump_to(exception_entry, G3_scratch); __ delayed()->restore(); // Pop this frame off. __ bind(L); } @@ -1822,14 +1822,14 @@ { Label L; const Register temp_reg = G3_scratch; - Address ic_miss(temp_reg, SharedRuntime::get_ic_miss_stub()); + AddressLiteral ic_miss(SharedRuntime::get_ic_miss_stub()); __ verify_oop(O0); __ load_klass(O0, temp_reg); __ cmp(temp_reg, G5_inline_cache_reg); __ brx(Assembler::equal, true, Assembler::pt, L); __ delayed()->nop(); - __ jump_to(ic_miss, 0); + __ jump_to(ic_miss, temp_reg); __ delayed()->nop(); __ align(CodeEntryAlignment); __ bind(L); @@ -2261,21 +2261,19 @@ // Transition from _thread_in_Java to _thread_in_native. __ set(_thread_in_native, G3_scratch); - __ st(G3_scratch, G2_thread, in_bytes(JavaThread::thread_state_offset())); + __ st(G3_scratch, G2_thread, JavaThread::thread_state_offset()); // We flushed the windows ages ago now mark them as flushed // mark windows as flushed __ set(JavaFrameAnchor::flushed, G3_scratch); - Address flags(G2_thread, - 0, - in_bytes(JavaThread::frame_anchor_offset()) + in_bytes(JavaFrameAnchor::flags_offset())); + Address flags(G2_thread, JavaThread::frame_anchor_offset() + JavaFrameAnchor::flags_offset()); #ifdef _LP64 - Address dest(O7, method->native_function()); + AddressLiteral dest(method->native_function()); __ relocate(relocInfo::runtime_call_type); - __ jumpl_to(dest, O7); + __ jumpl_to(dest, O7, O7); #else __ call(method->native_function(), relocInfo::runtime_call_type); #endif @@ -2316,7 +2314,7 @@ // Block, if necessary, before resuming in _thread_in_Java state. // In order for GC to work, don't clear the last_Java_sp until after blocking. { Label no_block; - Address sync_state(G3_scratch, SafepointSynchronize::address_of_state()); + AddressLiteral sync_state(SafepointSynchronize::address_of_state()); // Switch thread to "native transition" state before reading the synchronization state. // This additional state is necessary because reading and testing the synchronization @@ -2326,7 +2324,7 @@ // Thread A is resumed to finish this native method, but doesn't block here since it // didn't see any synchronization is progress, and escapes. __ set(_thread_in_native_trans, G3_scratch); - __ st(G3_scratch, G2_thread, in_bytes(JavaThread::thread_state_offset())); + __ st(G3_scratch, G2_thread, JavaThread::thread_state_offset()); if(os::is_MP()) { if (UseMembar) { // Force this write out before the read below @@ -2343,10 +2341,9 @@ __ cmp(G3_scratch, SafepointSynchronize::_not_synchronized); Label L; - Address suspend_state(G2_thread, 0, in_bytes(JavaThread::suspend_flags_offset())); + Address suspend_state(G2_thread, JavaThread::suspend_flags_offset()); __ br(Assembler::notEqual, false, Assembler::pn, L); - __ delayed()-> - ld(suspend_state, G3_scratch); + __ delayed()->ld(suspend_state, G3_scratch); __ cmp(G3_scratch, 0); __ br(Assembler::equal, false, Assembler::pt, no_block); __ delayed()->nop(); @@ -2372,11 +2369,11 @@ __ set(_thread_in_Java, G3_scratch); - __ st(G3_scratch, G2_thread, in_bytes(JavaThread::thread_state_offset())); + __ st(G3_scratch, G2_thread, JavaThread::thread_state_offset()); Label no_reguard; - __ ld(G2_thread, in_bytes(JavaThread::stack_guard_state_offset()), G3_scratch); + __ ld(G2_thread, JavaThread::stack_guard_state_offset(), G3_scratch); __ cmp(G3_scratch, JavaThread::stack_guard_yellow_disabled); __ br(Assembler::notEqual, false, Assembler::pt, no_reguard); __ delayed()->nop(); @@ -2684,14 +2681,14 @@ { Label L; const Register temp_reg = G3_scratch; - Address ic_miss(temp_reg, SharedRuntime::get_ic_miss_stub()); + AddressLiteral ic_miss(SharedRuntime::get_ic_miss_stub()); __ verify_oop(O0); __ ld_ptr(O0, oopDesc::klass_offset_in_bytes(), temp_reg); __ cmp(temp_reg, G5_inline_cache_reg); __ brx(Assembler::equal, true, Assembler::pt, L); __ delayed()->nop(); - __ jump_to(ic_miss, 0); + __ jump_to(ic_miss, temp_reg); __ delayed()->nop(); __ align(CodeEntryAlignment); __ bind(L); @@ -3155,15 +3152,13 @@ // Do this after the caller's return address is on top of stack if (UseStackBanging) { // Get total frame size for interpreted frames - __ ld(Address(O2UnrollBlock, 0, - Deoptimization::UnrollBlock::total_frame_sizes_offset_in_bytes()), O4); + __ ld(O2UnrollBlock, Deoptimization::UnrollBlock::total_frame_sizes_offset_in_bytes(), O4); __ bang_stack_size(O4, O3, G3_scratch); } - __ ld(Address(O2UnrollBlock, 0, Deoptimization::UnrollBlock::number_of_frames_offset_in_bytes()), O4array_size); - __ ld_ptr(Address(O2UnrollBlock, 0, Deoptimization::UnrollBlock::frame_pcs_offset_in_bytes()), G3pcs); - - __ ld_ptr(Address(O2UnrollBlock, 0, Deoptimization::UnrollBlock::frame_sizes_offset_in_bytes()), O3array); + __ ld(O2UnrollBlock, Deoptimization::UnrollBlock::number_of_frames_offset_in_bytes(), O4array_size); + __ ld_ptr(O2UnrollBlock, Deoptimization::UnrollBlock::frame_pcs_offset_in_bytes(), G3pcs); + __ ld_ptr(O2UnrollBlock, Deoptimization::UnrollBlock::frame_sizes_offset_in_bytes(), O3array); // Adjust old interpreter frame to make space for new frame's extra java locals // @@ -3176,7 +3171,7 @@ // for each frame we create and keep up the illusion every where. // - __ ld(Address(O2UnrollBlock, 0, Deoptimization::UnrollBlock::caller_adjustment_offset_in_bytes()), O7); + __ ld(O2UnrollBlock, Deoptimization::UnrollBlock::caller_adjustment_offset_in_bytes(), O7); __ mov(SP, O5_savedSP); // remember initial sender's original sp before adjustment __ sub(SP, O7, SP); @@ -3225,9 +3220,9 @@ Register I5exception_tmp = I5; Register G4exception_tmp = G4_scratch; int frame_size_words; - Address saved_Freturn0_addr(FP, 0, -sizeof(double) + STACK_BIAS); + Address saved_Freturn0_addr(FP, -sizeof(double) + STACK_BIAS); #if !defined(_LP64) && defined(COMPILER2) - Address saved_Greturn1_addr(FP, 0, -sizeof(double) -sizeof(jlong) + STACK_BIAS); + Address saved_Greturn1_addr(FP, -sizeof(double) -sizeof(jlong) + STACK_BIAS); #endif Label cont; @@ -3289,7 +3284,7 @@ // save exception oop in JavaThread and fall through into the // exception_in_tls case since they are handled in same way except // for where the pending exception is kept. - __ st_ptr(Oexception, G2_thread, in_bytes(JavaThread::exception_oop_offset())); + __ st_ptr(Oexception, G2_thread, JavaThread::exception_oop_offset()); // // Vanilla deoptimization with an exception pending in exception_oop @@ -3306,7 +3301,7 @@ { // verify that there is really an exception oop in exception_oop Label has_exception; - __ ld_ptr(G2_thread, in_bytes(JavaThread::exception_oop_offset()), Oexception); + __ ld_ptr(G2_thread, JavaThread::exception_oop_offset(), Oexception); __ br_notnull(Oexception, false, Assembler::pt, has_exception); __ delayed()-> nop(); __ stop("no exception in thread"); @@ -3314,7 +3309,7 @@ // verify that there is no pending exception Label no_pending_exception; - Address exception_addr(G2_thread, 0, in_bytes(Thread::pending_exception_offset())); + Address exception_addr(G2_thread, Thread::pending_exception_offset()); __ ld_ptr(exception_addr, Oexception); __ br_null(Oexception, false, Assembler::pt, no_pending_exception); __ delayed()->nop();