634 #endif
635
636 virtual void oop_verify_on(oop obj, outputStream* st);
637
638 static bool is_null(narrowKlass obj);
639 static bool is_null(Klass* obj);
640
641 // klass encoding for klass pointer in objects.
642 static narrowKlass encode_klass_not_null(Klass* v);
643 static narrowKlass encode_klass(Klass* v);
644
645 static Klass* decode_klass_not_null(narrowKlass v);
646 static Klass* decode_klass(narrowKlass v);
647
648 private:
649 // barriers used by klass_oop_store
650 void klass_update_barrier_set(oop v);
651 void klass_update_barrier_set_pre(oop* p, oop v);
652 };
653
654 #endif // SHARE_VM_OOPS_KLASS_HPP
|
634 #endif
635
636 virtual void oop_verify_on(oop obj, outputStream* st);
637
638 static bool is_null(narrowKlass obj);
639 static bool is_null(Klass* obj);
640
641 // klass encoding for klass pointer in objects.
642 static narrowKlass encode_klass_not_null(Klass* v);
643 static narrowKlass encode_klass(Klass* v);
644
645 static Klass* decode_klass_not_null(narrowKlass v);
646 static Klass* decode_klass(narrowKlass v);
647
648 private:
649 // barriers used by klass_oop_store
650 void klass_update_barrier_set(oop v);
651 void klass_update_barrier_set_pre(oop* p, oop v);
652 };
653
654 // Helper to convert the oop iterate macro suffixes into bool values that can be used by template functions.
655 #define nvs_nv_to_bool true
656 #define nvs_v_to_bool false
657 #define nvs_to_bool(nv_suffix) nvs##nv_suffix##_to_bool
658
659 // Oop iteration macros for declarations.
660 #define OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \
661 int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk); \
662 int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk, MemRegion mr);
663
664 #if INCLUDE_ALL_GCS
665 #define OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \
666 int oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* blk);
667 #endif // INCLUDE_ALL_GCS
668
669 // Oop iteration macros for definitions.
670 #define OOP_OOP_ITERATE_DEFN(KlassType, OopClosureType, nv_suffix) \
671 int KlassType::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \
672 return oop_oop_iterate<nvs_to_bool(nv_suffix)>(obj, closure); \
673 }
674
675 #if INCLUDE_ALL_GCS
676 #define OOP_OOP_ITERATE_BACKWARDS_DEFN(KlassType, OopClosureType, nv_suffix) \
677 int KlassType::oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) { \
678 return oop_oop_iterate_reverse<nvs_to_bool(nv_suffix)>(obj, closure); \
679 }
680 #else
681 #define OOP_OOP_ITERATE_BACKWARDS_DEFN(KlassType, OopClosureType, nv_suffix)
682 #endif
683
684 #define OOP_OOP_ITERATE_DEFN_m(KlassType, OopClosureType, nv_suffix) \
685 int KlassType::oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* closure, MemRegion mr) { \
686 return oop_oop_iterate_bounded<nvs_to_bool(nv_suffix)>(obj, closure, mr); \
687 }
688
689 #endif // SHARE_VM_OOPS_KLASS_HPP
|