# HG changeset patch # User aoqi # Date 1513045827 -28800 # Node ID 3fb3ceb7398f647ed8f786714b6d2d4fa235b0c1 # Parent 7763e0b50e20aac3a6392efd6e649036ca5c7eef #6345 sync is controled by UseSyncLevel instead of Use3A2000 Reviewed-by: fujie diff -r 7763e0b50e20 -r 3fb3ceb7398f src/cpu/mips/vm/globals_mips.hpp --- a/src/cpu/mips/vm/globals_mips.hpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/cpu/mips/vm/globals_mips.hpp Tue Dec 12 10:30:27 2017 +0800 @@ -96,10 +96,11 @@ product(bool, UseCodeCacheAllocOpt, true, \ "Allocate code cache within 32-bit memory address space") \ \ - product(intx, UseSyncLevel, 1000, \ + product(intx, UseSyncLevel, 3000, \ "The sync level on Loongson CPUs" \ - "for GS464E, UseSyncLevel >= 2000" \ - "others, UseSyncLevel <= 1000") \ + "default: for all Loongson CPUs, UseSyncLevel == 3000, " \ + "for GS464E, UseSyncLevel == 2000" \ + "for GS464, UseSyncLevel == 1000") \ \ develop(bool, UseBoundCheckInstruction, false, \ "Use bound check instruction") \ diff -r 7763e0b50e20 -r 3fb3ceb7398f src/cpu/mips/vm/macroAssembler_mips.cpp --- a/src/cpu/mips/vm/macroAssembler_mips.cpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/cpu/mips/vm/macroAssembler_mips.cpp Tue Dec 12 10:30:27 2017 +0800 @@ -413,7 +413,7 @@ li(tmp_reg1, counter_addr); bind(again); - if(!Use3A2000) sync(); + if(UseSyncLevel >= 3000 || UseSyncLevel < 2000) sync(); ll(tmp_reg2, tmp_reg1, 0); addi(tmp_reg2, tmp_reg2, inc); sc(tmp_reg2, tmp_reg1, 0); @@ -2578,7 +2578,7 @@ bind(again); - if(!Use3A2000) sync(); + if(UseSyncLevel >= 3000 || UseSyncLevel < 2000) sync(); ll(AT, dest); bne(AT, c_reg, nequal); delayed()->nop(); @@ -2604,11 +2604,10 @@ Label done, again, nequal; bind(again); + if(UseSyncLevel >= 3000 || UseSyncLevel < 2000) sync(); #ifdef _LP64 - if(!Use3A2000) sync(); lld(AT, dest); #else - if(!Use3A2000) sync(); ll(AT, dest); #endif bne(AT, c_reg, nequal); @@ -2651,7 +2650,7 @@ bind(again); - if(!Use3A2000) sync(); + if(UseSyncLevel >= 3000 || UseSyncLevel < 2000) sync(); lld(AT, dest); bne(AT, c_reg, nequal); delayed()->nop(); diff -r 7763e0b50e20 -r 3fb3ceb7398f src/cpu/mips/vm/mips_64.ad --- a/src/cpu/mips/vm/mips_64.ad Thu Dec 07 16:21:29 2017 +0800 +++ b/src/cpu/mips/vm/mips_64.ad Tue Dec 12 10:30:27 2017 +0800 @@ -13075,7 +13075,7 @@ __ stop("in storeIConditional: index != 0"); } else { __ bind(again); - if(!Use3A2000) __ sync(); + if(UseSyncLevel >= 3000 || UseSyncLevel < 2000) __ sync(); __ ll(AT, addr); __ bne(AT, oldval, failure); __ delayed()->addu(AT, R0, R0); diff -r 7763e0b50e20 -r 3fb3ceb7398f src/cpu/mips/vm/vm_version_mips.cpp --- a/src/cpu/mips/vm/vm_version_mips.cpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/cpu/mips/vm/vm_version_mips.cpp Tue Dec 12 10:30:27 2017 +0800 @@ -141,6 +141,18 @@ FLAG_SET_DEFAULT(Use3A2000, 0); } + if (is_gs464()) { + if (FLAG_IS_DEFAULT(UseSyncLevel)) { + FLAG_SET_DEFAULT(UseSyncLevel, 1000); + } + } + + if (is_gs464e()) { + if (FLAG_IS_DEFAULT(UseSyncLevel)) { + FLAG_SET_DEFAULT(UseSyncLevel, 2000); + } + } + if (TieredCompilation) { if (!FLAG_IS_DEFAULT(TieredCompilation)) warning("TieredCompilation not supported"); diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.hpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.hpp Tue Dec 12 10:30:27 2017 +0800 @@ -87,7 +87,7 @@ jbyte* byte = byte_for(field); *byte = youngergen_card; #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp Tue Dec 12 10:30:27 2017 +0800 @@ -106,8 +106,8 @@ DEBUG_ONLY(Atomic::inc_ptr(&mark_bitmap_count)); DEBUG_ONLY(Atomic::add_ptr(size, &mark_bitmap_size)); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); -#endif + if (UseSyncLevel >= 2000) OrderAccess::fence(); +#endif return true; } return false; diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.inline.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.inline.hpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.inline.hpp Tue Dec 12 10:30:27 2017 +0800 @@ -34,7 +34,7 @@ assert(task.is_valid(), "bad ObjArrayTask"); _objarray_stack.push(task); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } @@ -48,7 +48,7 @@ #endif region_stack()->push(index); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Tue Dec 12 10:30:27 2017 +0800 @@ -497,7 +497,7 @@ // All in one region. _region_data[beg_region].add_live_obj(len); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif return; } @@ -518,7 +518,7 @@ _region_data[end_region].set_partial_obj_size(end_ofs + 1); _region_data[end_region].set_partial_obj_addr(addr); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } @@ -3239,7 +3239,7 @@ cur_block = new_block; sd.block(cur_block)->set_offset(bitmap->bits_to_words(live_bits)); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp Tue Dec 12 10:30:27 2017 +0800 @@ -1327,7 +1327,7 @@ if (mark_bitmap()->mark_obj(obj, obj_size)) { _summary_data.add_obj(obj, obj_size); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif return true; } else { @@ -1364,7 +1364,7 @@ if (mark_bitmap()->is_unmarked(obj) && mark_obj(obj)) { cm->push(obj); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } } diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp Tue Dec 12 10:30:27 2017 +0800 @@ -76,7 +76,7 @@ oop new_obj = NULL; #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif // NOTE! We must be very careful with any methods that access the mark @@ -85,7 +85,7 @@ markOop test_mark = o->mark(); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif // The same test as "o->is_forwarded()" @@ -122,7 +122,7 @@ } #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } } @@ -182,7 +182,7 @@ // Copy obj Copy::aligned_disjoint_words((HeapWord*)o, (HeapWord*)new_obj, new_obj_size); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif // Now we have to CAS in the header. @@ -233,7 +233,7 @@ } #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } else { assert(o->is_forwarded(), "Sanity"); diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/memory/barrierSet.hpp --- a/src/share/vm/memory/barrierSet.hpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/memory/barrierSet.hpp Tue Dec 12 10:30:27 2017 +0800 @@ -98,12 +98,12 @@ protected: virtual void write_ref_field_pre_work( oop* field, oop new_val) { #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif }; virtual void write_ref_field_pre_work(narrowOop* field, oop new_val) { #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif }; public: @@ -143,13 +143,13 @@ virtual void write_ref_array_pre(oop* dst, int length, bool dest_uninitialized = false) { #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } virtual void write_ref_array_pre(narrowOop* dst, int length, bool dest_uninitialized = false) { #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } // Below count is the # array elements being written, starting diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/memory/cardTableModRefBS.hpp --- a/src/share/vm/memory/cardTableModRefBS.hpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/memory/cardTableModRefBS.hpp Tue Dec 12 10:30:27 2017 +0800 @@ -317,7 +317,7 @@ inline void inline_write_ref_array(MemRegion mr) { dirty_MemRegion(mr); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } protected: @@ -334,7 +334,7 @@ template inline void inline_write_ref_field_pre(T* field, oop newVal) { #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } @@ -347,7 +347,7 @@ *byte = dirty_card; } #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/memory/cardTableRS.cpp --- a/src/share/vm/memory/cardTableRS.cpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/memory/cardTableRS.cpp Tue Dec 12 10:30:27 2017 +0800 @@ -253,7 +253,7 @@ void CardTableRS::write_ref_field_gc_par(void* field, oop new_val) { jbyte* entry = ct_bs()->byte_for(field); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif do { jbyte entry_val = *entry; @@ -271,7 +271,7 @@ // Did the CAS succeed? if (res == entry_val) { #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif return; } diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/memory/cardTableRS.hpp --- a/src/share/vm/memory/cardTableRS.hpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/memory/cardTableRS.hpp Tue Dec 12 10:30:27 2017 +0800 @@ -122,11 +122,11 @@ void inline_write_ref_field_gc(void* field, oop new_val) { jbyte* byte = _ct_bs->byte_for(field); #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif *byte = youngergen_card; #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); + if (UseSyncLevel >= 2000) OrderAccess::fence(); #endif } diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/oops/klass.hpp --- a/src/share/vm/oops/klass.hpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/oops/klass.hpp Tue Dec 12 10:30:27 2017 +0800 @@ -287,17 +287,17 @@ // The Klasses are not placed in the Heap, so the Card Table or // the Mod Union Table can't be used to mark when klasses have modified oops. // The CT and MUT bits saves this information for the individual Klasses. - void record_modified_oops() { - _modified_oops = 1; + void record_modified_oops() { + _modified_oops = 1; #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); -#endif + if (UseSyncLevel >= 2000) OrderAccess::fence(); +#endif } - void clear_modified_oops() { - _modified_oops = 0; + void clear_modified_oops() { + _modified_oops = 0; #ifdef MIPS64 - if (Use3A2000) OrderAccess::fence(); -#endif + if (UseSyncLevel >= 2000) OrderAccess::fence(); +#endif } bool has_modified_oops() { return _modified_oops == 1; } diff -r 7763e0b50e20 -r 3fb3ceb7398f src/share/vm/oops/oop.hpp --- a/src/share/vm/oops/oop.hpp Thu Dec 07 16:21:29 2017 +0800 +++ b/src/share/vm/oops/oop.hpp Tue Dec 12 10:30:27 2017 +0800 @@ -72,12 +72,12 @@ markOop mark() const { return _mark; } markOop* mark_addr() const { return (markOop*) &_mark; } - void set_mark(volatile markOop m) { + void set_mark(volatile markOop m) { #ifdef MIPS64 - if (Use3A2000) release_set_mark(m); + if (UseSyncLevel >= 2000) release_set_mark(m); else #endif - _mark = m; + _mark = m; } void release_set_mark(markOop m);