src/hotspot/share/oops/instanceRefKlass.inline.hpp
changeset 50752 9d62da00bf15
parent 50450 517f76115e5a
child 50870 830b05ca7f58
--- a/src/hotspot/share/oops/instanceRefKlass.inline.hpp	Mon Jun 25 12:44:52 2018 +0200
+++ b/src/hotspot/share/oops/instanceRefKlass.inline.hpp	Sat May 26 06:59:49 2018 +0200
@@ -37,19 +37,19 @@
 #include "utilities/globalDefinitions.hpp"
 #include "utilities/macros.hpp"
 
-template <bool nv, typename T, class OopClosureType, class Contains>
+template <typename T, class OopClosureType, class Contains>
 void InstanceRefKlass::do_referent(oop obj, OopClosureType* closure, Contains& contains) {
   T* referent_addr = (T*)java_lang_ref_Reference::referent_addr_raw(obj);
   if (contains(referent_addr)) {
-    Devirtualizer<nv>::do_oop(closure, referent_addr);
+    Devirtualizer::do_oop(closure, referent_addr);
   }
 }
 
-template <bool nv, typename T, class OopClosureType, class Contains>
+template <typename T, class OopClosureType, class Contains>
 void InstanceRefKlass::do_discovered(oop obj, OopClosureType* closure, Contains& contains) {
   T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr_raw(obj);
   if (contains(discovered_addr)) {
-    Devirtualizer<nv>::do_oop(closure, discovered_addr);
+    Devirtualizer::do_oop(closure, discovered_addr);
   }
 }
 
@@ -76,7 +76,7 @@
   return false;
 }
 
-template <bool nv, typename T, class OopClosureType, class Contains>
+template <typename T, class OopClosureType, class Contains>
 void InstanceRefKlass::oop_oop_iterate_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains) {
   // Try to discover reference and return if it succeeds.
   if (try_discover<T>(obj, type, closure)) {
@@ -84,38 +84,38 @@
   }
 
   // Treat referent and discovered as normal oops.
-  do_referent<nv, T>(obj, closure, contains);
-  do_discovered<nv, T>(obj, closure, contains);
+  do_referent<T>(obj, closure, contains);
+  do_discovered<T>(obj, closure, contains);
 }
 
-template <bool nv, typename T, class OopClosureType, class Contains>
+template <typename T, class OopClosureType, class Contains>
 void InstanceRefKlass::oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains) {
-  do_referent<nv, T>(obj, closure, contains);
-  do_discovered<nv, T>(obj, closure, contains);
+  do_referent<T>(obj, closure, contains);
+  do_discovered<T>(obj, closure, contains);
 }
 
-template <bool nv, typename T, class OopClosureType, class Contains>
+template <typename T, class OopClosureType, class Contains>
 void InstanceRefKlass::oop_oop_iterate_discovered_and_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains) {
   // Explicitly apply closure to the discovered field.
-  do_discovered<nv, T>(obj, closure, contains);
+  do_discovered<T>(obj, closure, contains);
   // Then do normal reference processing with discovery.
-  oop_oop_iterate_discovery<nv, T>(obj, type, closure, contains);
+  oop_oop_iterate_discovery<T>(obj, type, closure, contains);
 }
 
-template <bool nv, typename T, class OopClosureType, class Contains>
-void InstanceRefKlass::oop_oop_iterate_ref_processing_specialized(oop obj, OopClosureType* closure, Contains& contains) {
+template <typename T, class OopClosureType, class Contains>
+void InstanceRefKlass::oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure, Contains& contains) {
   switch (closure->reference_iteration_mode()) {
-    case ExtendedOopClosure::DO_DISCOVERY:
+    case OopIterateClosure::DO_DISCOVERY:
       trace_reference_gc<T>("do_discovery", obj);
-      oop_oop_iterate_discovery<nv, T>(obj, reference_type(), closure, contains);
+      oop_oop_iterate_discovery<T>(obj, reference_type(), closure, contains);
       break;
-    case ExtendedOopClosure::DO_DISCOVERED_AND_DISCOVERY:
+    case OopIterateClosure::DO_DISCOVERED_AND_DISCOVERY:
       trace_reference_gc<T>("do_discovered_and_discovery", obj);
-      oop_oop_iterate_discovered_and_discovery<nv, T>(obj, reference_type(), closure, contains);
+      oop_oop_iterate_discovered_and_discovery<T>(obj, reference_type(), closure, contains);
       break;
-    case ExtendedOopClosure::DO_FIELDS:
+    case OopIterateClosure::DO_FIELDS:
       trace_reference_gc<T>("do_fields", obj);
-      oop_oop_iterate_fields<nv, T>(obj, closure, contains);
+      oop_oop_iterate_fields<T>(obj, closure, contains);
       break;
     default:
       ShouldNotReachHere();
@@ -127,14 +127,10 @@
   template <typename T> bool operator()(T* p) const { return true; }
 };
 
-template <bool nv, class OopClosureType>
+template <typename T, class OopClosureType>
 void InstanceRefKlass::oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure) {
   AlwaysContains always_contains;
-  if (UseCompressedOops) {
-    oop_oop_iterate_ref_processing_specialized<nv, narrowOop>(obj, closure, always_contains);
-  } else {
-    oop_oop_iterate_ref_processing_specialized<nv, oop>(obj, closure, always_contains);
-  }
+  oop_oop_iterate_ref_processing<T>(obj, closure, always_contains);
 }
 
 class MrContains {
@@ -144,38 +140,31 @@
   template <typename T> bool operator()(T* p) const { return _mr.contains(p); }
 };
 
-template <bool nv, class OopClosureType>
+template <typename T, class OopClosureType>
 void InstanceRefKlass::oop_oop_iterate_ref_processing_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
   const MrContains contains(mr);
-  if (UseCompressedOops) {
-    oop_oop_iterate_ref_processing_specialized<nv, narrowOop>(obj, closure, contains);
-  } else {
-    oop_oop_iterate_ref_processing_specialized<nv, oop>(obj, closure, contains);
-  }
+  oop_oop_iterate_ref_processing<T>(obj, closure, contains);
+}
+
+template <typename T, class OopClosureType>
+void InstanceRefKlass::oop_oop_iterate(oop obj, OopClosureType* closure) {
+  InstanceKlass::oop_oop_iterate<T>(obj, closure);
+
+  oop_oop_iterate_ref_processing<T>(obj, closure);
 }
 
-template <bool nv, class OopClosureType>
-void InstanceRefKlass::oop_oop_iterate(oop obj, OopClosureType* closure) {
-  InstanceKlass::oop_oop_iterate<nv>(obj, closure);
+template <typename T, class OopClosureType>
+void InstanceRefKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure) {
+  InstanceKlass::oop_oop_iterate_reverse<T>(obj, closure);
 
-  oop_oop_iterate_ref_processing<nv>(obj, closure);
+  oop_oop_iterate_ref_processing<T>(obj, closure);
 }
 
-#if INCLUDE_OOP_OOP_ITERATE_BACKWARDS
-template <bool nv, class OopClosureType>
-void InstanceRefKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure) {
-  InstanceKlass::oop_oop_iterate_reverse<nv>(obj, closure);
+template <typename T, class OopClosureType>
+void InstanceRefKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
+  InstanceKlass::oop_oop_iterate_bounded<T>(obj, closure, mr);
 
-  oop_oop_iterate_ref_processing<nv>(obj, closure);
-}
-#endif // INCLUDE_OOP_OOP_ITERATE_BACKWARDS
-
-
-template <bool nv, class OopClosureType>
-void InstanceRefKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
-  InstanceKlass::oop_oop_iterate_bounded<nv>(obj, closure, mr);
-
-  oop_oop_iterate_ref_processing_bounded<nv>(obj, closure, mr);
+  oop_oop_iterate_ref_processing_bounded<T>(obj, closure, mr);
 }
 
 #ifdef ASSERT
@@ -192,11 +181,4 @@
 }
 #endif
 
-// Macro to define InstanceRefKlass::oop_oop_iterate for virtual/nonvirtual for
-// all closures.  Macros calling macros above for each oop size.
-#define ALL_INSTANCE_REF_KLASS_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix)  \
-  OOP_OOP_ITERATE_DEFN(          InstanceRefKlass, OopClosureType, nv_suffix)   \
-  OOP_OOP_ITERATE_DEFN_BOUNDED(  InstanceRefKlass, OopClosureType, nv_suffix)   \
-  OOP_OOP_ITERATE_DEFN_BACKWARDS(InstanceRefKlass, OopClosureType, nv_suffix)
-
 #endif // SHARE_VM_OOPS_INSTANCEREFKLASS_INLINE_HPP