< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp

Print this page

  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  *
 23  */
 24 
 25 #include "gc/shenandoah/shenandoahBarrierSet.inline.hpp"
 26 #include "gc/shenandoah/shenandoahBarrierSetClone.inline.hpp"
 27 #include "gc/shenandoah/shenandoahRuntime.hpp"
 28 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
 29 #include "oops/oop.inline.hpp"
 30 #include "runtime/interfaceSupport.inline.hpp"
 31 #include "utilities/copy.hpp"
 32 
 33 JRT_LEAF(void, ShenandoahRuntime::arraycopy_barrier_oop(oop* src, oop* dst, size_t length))
 34   ShenandoahBarrierSet::barrier_set()->arraycopy_barrier(src, dst, length);
 35 JRT_END
 36 
 37 JRT_LEAF(void, ShenandoahRuntime::arraycopy_barrier_narrow_oop(narrowOop* src, narrowOop* dst, size_t length))
 38   ShenandoahBarrierSet::barrier_set()->arraycopy_barrier(src, dst, length);
 39 JRT_END
 40 
 41 JRT_LEAF(void, ShenandoahRuntime::write_barrier_pre(oopDesc* orig))
 42   assert(orig != nullptr, "should be optimized out");
 43   shenandoah_assert_correct(nullptr, orig);
 44   // Capture the original value that was in the field reference.
 45   JavaThread* thread = JavaThread::current();
 46   assert(ShenandoahThreadLocalData::satb_mark_queue(thread).is_active(), "Shouldn't be here otherwise");
 47   SATBMarkQueue& queue = ShenandoahThreadLocalData::satb_mark_queue(thread);
 48   ShenandoahBarrierSet::satb_mark_queue_set().enqueue_known_active(queue, orig);




 49 JRT_END
 50 
 51 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_strong(oopDesc* src, oop* load_addr))
 52   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_STRONG_OOP_REF, oop>(src, load_addr);
 53 JRT_END
 54 
 55 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_strong_narrow(oopDesc* src, narrowOop* load_addr))
 56   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_STRONG_OOP_REF, narrowOop>(src, load_addr);
 57 JRT_END
 58 







 59 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_weak(oopDesc* src, oop* load_addr))
 60   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_WEAK_OOP_REF, oop>(src, load_addr);
 61 JRT_END
 62 
 63 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_weak_narrow(oopDesc* src, narrowOop* load_addr))
 64   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_WEAK_OOP_REF, narrowOop>(src, load_addr);
 65 JRT_END
 66 







 67 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_phantom(oopDesc* src, oop* load_addr))
 68   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_PHANTOM_OOP_REF, oop>(src, load_addr);
 69 JRT_END
 70 
 71 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_phantom_narrow(oopDesc* src, narrowOop* load_addr))
 72   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_PHANTOM_OOP_REF, narrowOop>(src, load_addr);
 73 JRT_END
 74 
 75 JRT_LEAF(void, ShenandoahRuntime::clone_barrier(oopDesc* src))
 76   oop s = oop(src);
 77   shenandoah_assert_correct(nullptr, s);
 78   ShenandoahBarrierSet::barrier_set()->clone_barrier(s);







 79 JRT_END

  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  *
 23  */
 24 
 25 #include "gc/shenandoah/shenandoahBarrierSet.inline.hpp"

 26 #include "gc/shenandoah/shenandoahRuntime.hpp"
 27 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
 28 #include "oops/oop.inline.hpp"
 29 #include "runtime/interfaceSupport.inline.hpp"
 30 #include "utilities/copy.hpp"
 31 
 32 JRT_LEAF(void, ShenandoahRuntime::arraycopy_barrier_oop(oop* src, oop* dst, size_t length))
 33   ShenandoahBarrierSet::barrier_set()->arraycopy_barrier(src, dst, length);
 34 JRT_END
 35 
 36 JRT_LEAF(void, ShenandoahRuntime::arraycopy_barrier_narrow_oop(narrowOop* src, narrowOop* dst, size_t length))
 37   ShenandoahBarrierSet::barrier_set()->arraycopy_barrier(src, dst, length);
 38 JRT_END
 39 
 40 JRT_LEAF(void, ShenandoahRuntime::write_barrier_pre(oopDesc* obj))
 41   // Called from barrier slow-paths on full buffer.
 42   // We need to enqueue without filters to force buffer cleanups.
 43   ShenandoahBarrierSet::barrier_set()->enqueue(obj, /* filter = */ false);
 44 JRT_END
 45 
 46 JRT_LEAF(void, ShenandoahRuntime::write_barrier_pre_narrow(narrowOop nobj))
 47   assert(!CompressedOops::is_null(nobj), "Filtered by caller");
 48   // Called from barrier slow-paths on full buffer.
 49   // We need to enqueue without filters to force buffer cleanups.
 50   oop obj = CompressedOops::decode_not_null(nobj);
 51   ShenandoahBarrierSet::barrier_set()->enqueue(obj, /* filter = */ false);
 52 JRT_END
 53 
 54 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_strong(oopDesc* src, oop* load_addr))
 55   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_STRONG_OOP_REF, oop>(src, load_addr);
 56 JRT_END
 57 
 58 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_strong_narrow(oopDesc* src, narrowOop* load_addr))
 59   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_STRONG_OOP_REF, narrowOop>(src, load_addr);
 60 JRT_END
 61 
 62 JRT_LEAF(narrowOop, ShenandoahRuntime::load_reference_barrier_strong_narrow_narrow(narrowOop src, narrowOop* load_addr))
 63   assert(!CompressedOops::is_null(src), "Filtered by caller");
 64   oop s = CompressedOops::decode_not_null(src);
 65   oop r = ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_STRONG_OOP_REF, narrowOop>(s, load_addr);
 66   return CompressedOops::encode(r);
 67 JRT_END
 68 
 69 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_weak(oopDesc* src, oop* load_addr))
 70   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_WEAK_OOP_REF, oop>(src, load_addr);
 71 JRT_END
 72 
 73 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_weak_narrow(oopDesc* src, narrowOop* load_addr))
 74   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_WEAK_OOP_REF, narrowOop>(src, load_addr);
 75 JRT_END
 76 
 77 JRT_LEAF(narrowOop, ShenandoahRuntime::load_reference_barrier_weak_narrow_narrow(narrowOop src, narrowOop* load_addr))
 78   assert(!CompressedOops::is_null(src), "Filtered by caller");
 79   oop s = CompressedOops::decode_not_null(src);
 80   oop r = ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_WEAK_OOP_REF, narrowOop>(s, load_addr);
 81   return CompressedOops::encode(r);
 82 JRT_END
 83 
 84 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_phantom(oopDesc* src, oop* load_addr))
 85   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_PHANTOM_OOP_REF, oop>(src, load_addr);
 86 JRT_END
 87 
 88 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_phantom_narrow(oopDesc* src, narrowOop* load_addr))
 89   return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_PHANTOM_OOP_REF, narrowOop>(src, load_addr);
 90 JRT_END
 91 
 92 JRT_LEAF(narrowOop, ShenandoahRuntime::load_reference_barrier_phantom_narrow_narrow(narrowOop src, narrowOop* load_addr))
 93   assert(!CompressedOops::is_null(src), "Filtered by caller");
 94   oop s = CompressedOops::decode_not_null(src);
 95   oop r = ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator<ON_PHANTOM_OOP_REF, narrowOop>(s, load_addr);
 96   return CompressedOops::encode(r);
 97 JRT_END
 98 
 99 JRT_LEAF(void, ShenandoahRuntime::clone(oopDesc* src, oopDesc* dst, size_t size))
100   shenandoah_assert_correct(nullptr, src);
101   shenandoah_assert_correct(nullptr, dst);
102   HeapAccess<>::clone(src, dst, size);
103 JRT_END
< prev index next >