comparison src/cpu/sparc/vm/stubGenerator_sparc.cpp @ 671:d0994e5bebce

6822204: volatile fences should prefer lock:addl to actual mfence instructions Reviewed-by: kvn, phh
author never
date Thu, 26 Mar 2009 14:31:45 -0700
parents c517646eef23
children 6b2273dd6fa9
comparison
equal deleted inserted replaced
668:90a66aa50514 671:d0994e5bebce
813 } 813 }
814 814
815 return start; 815 return start;
816 } 816 }
817 Label _atomic_add_stub; // called from other stubs 817 Label _atomic_add_stub; // called from other stubs
818
819
820 // Support for void OrderAccess::fence().
821 //
822 address generate_fence() {
823 StubCodeMark mark(this, "StubRoutines", "fence");
824 address start = __ pc();
825
826 __ membar(Assembler::Membar_mask_bits(Assembler::LoadLoad | Assembler::LoadStore |
827 Assembler::StoreLoad | Assembler::StoreStore));
828 __ retl(false);
829 __ delayed()->nop();
830
831 return start;
832 }
833 818
834 819
835 //------------------------------------------------------------------------------------------------------------------------ 820 //------------------------------------------------------------------------------------------------------------------------
836 // The following routine generates a subroutine to throw an asynchronous 821 // The following routine generates a subroutine to throw an asynchronous
837 // UnknownError when an unsafe access gets a fault that could not be 822 // UnknownError when an unsafe access gets a fault that could not be
2859 StubRoutines::_atomic_add_entry = generate_atomic_add(); 2844 StubRoutines::_atomic_add_entry = generate_atomic_add();
2860 StubRoutines::_atomic_xchg_ptr_entry = StubRoutines::_atomic_xchg_entry; 2845 StubRoutines::_atomic_xchg_ptr_entry = StubRoutines::_atomic_xchg_entry;
2861 StubRoutines::_atomic_cmpxchg_ptr_entry = StubRoutines::_atomic_cmpxchg_entry; 2846 StubRoutines::_atomic_cmpxchg_ptr_entry = StubRoutines::_atomic_cmpxchg_entry;
2862 StubRoutines::_atomic_cmpxchg_long_entry = generate_atomic_cmpxchg_long(); 2847 StubRoutines::_atomic_cmpxchg_long_entry = generate_atomic_cmpxchg_long();
2863 StubRoutines::_atomic_add_ptr_entry = StubRoutines::_atomic_add_entry; 2848 StubRoutines::_atomic_add_ptr_entry = StubRoutines::_atomic_add_entry;
2864 StubRoutines::_fence_entry = generate_fence();
2865 #endif // COMPILER2 !=> _LP64 2849 #endif // COMPILER2 !=> _LP64
2866 } 2850 }
2867 2851
2868 2852
2869 void generate_all() { 2853 void generate_all() {