src/hotspot/share/gc/shared/specialized_oop_closures.hpp
changeset 49982 9042ffe5b7fe
parent 49735 b3c09ab95c1a
child 50034 01a88f825a84
equal deleted inserted replaced
49981:bd0a95bec96b 49982:9042ffe5b7fe
    23  */
    23  */
    24 
    24 
    25 #ifndef SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP
    25 #ifndef SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP
    26 #define SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP
    26 #define SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP
    27 
    27 
       
    28 #include "utilities/macros.hpp"
       
    29 #if INCLUDE_CMSGC
       
    30 #include "gc/cms/cms_specialized_oop_closures.hpp"
       
    31 #endif
       
    32 #if INCLUDE_G1GC
       
    33 #include "gc/g1/g1_specialized_oop_closures.hpp"
       
    34 #endif
       
    35 #if INCLUDE_SERIALGC
    28 #include "gc/serial/serial_specialized_oop_closures.hpp"
    36 #include "gc/serial/serial_specialized_oop_closures.hpp"
    29 #include "utilities/macros.hpp"
    37 #endif
    30 #if INCLUDE_ALL_GCS
       
    31 #include "gc/cms/cms_specialized_oop_closures.hpp"
       
    32 #include "gc/g1/g1_specialized_oop_closures.hpp"
       
    33 #endif // INCLUDE_ALL_GCS
       
    34 
    38 
    35 // The following OopClosure types get specialized versions of
    39 // The following OopClosure types get specialized versions of
    36 // "oop_oop_iterate" that invoke the closures' do_oop methods
    40 // "oop_oop_iterate" that invoke the closures' do_oop methods
    37 // non-virtually, using a mechanism defined in this file.  Extend these
    41 // non-virtually, using a mechanism defined in this file.  Extend these
    38 // macros in the obvious way to add specializations for new closures.
    42 // macros in the obvious way to add specializations for new closures.
    54 // This is split into several because of a Visual C++ 6.0 compiler bug
    58 // This is split into several because of a Visual C++ 6.0 compiler bug
    55 // where very long macros cause the compiler to crash
    59 // where very long macros cause the compiler to crash
    56 
    60 
    57 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f)                 \
    61 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f)                 \
    58   f(NoHeaderExtendedOopClosure,_nv)                               \
    62   f(NoHeaderExtendedOopClosure,_nv)                               \
    59                SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_S(f)          \
    63   SERIALGC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_S(f))        \
    60   ALL_GCS_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(f))
    64      CMSGC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(f))
    61 
    65 
    62 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f)                 \
    66 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f)                 \
    63                SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_MS(f)         \
    67   SERIALGC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_MS(f))       \
    64   ALL_GCS_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_CMS(f))       \
    68      CMSGC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_CMS(f))      \
    65   ALL_GCS_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_G1(f))        \
    69       G1GC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_G1(f))       \
    66   ALL_GCS_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_G1FULL(f))
    70       G1GC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_G1FULL(f))
    67 
    71 
    68 // We separate these out, because sometime the general one has
    72 // We separate these out, because sometime the general one has
    69 // a different definition from the specialized ones, and sometimes it
    73 // a different definition from the specialized ones, and sometimes it
    70 // doesn't.
    74 // doesn't.
    71 
    75 
    83 // "OopClosure" in some applications and "OopsInGenClosure" in others.
    87 // "OopClosure" in some applications and "OopsInGenClosure" in others.
    84 
    88 
    85 
    89 
    86 #define ALL_PAR_OOP_ITERATE_CLOSURES(f)                           \
    90 #define ALL_PAR_OOP_ITERATE_CLOSURES(f)                           \
    87   f(ExtendedOopClosure,_v)                                        \
    91   f(ExtendedOopClosure,_v)                                        \
    88   ALL_GCS_ONLY(SPECIALIZED_PAR_OOP_ITERATE_CLOSURES(f))
    92   CMSGC_ONLY(SPECIALIZED_PAR_OOP_ITERATE_CLOSURES(f))
    89 
    93 
    90 // This macro applies an argument macro to all OopClosures for which we
    94 // This macro applies an argument macro to all OopClosures for which we
    91 // want specialized bodies of a family of methods related to
    95 // want specialized bodies of a family of methods related to
    92 // "oops_since_save_marks_do".  The arguments to f are the same as above.
    96 // "oops_since_save_marks_do".  The arguments to f are the same as above.
    93 // The "root_class" is the most general class to define; this may be
    97 // The "root_class" is the most general class to define; this may be
    94 // "OopClosure" in some applications and "OopsInGenClosure" in others.
    98 // "OopClosure" in some applications and "OopsInGenClosure" in others.
    95 
    99 
    96 #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG(f)  \
   100 #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG(f)  \
    97                SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_S(f)   \
   101   SERIALGC_ONLY(SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_S(f))   \
    98   ALL_GCS_ONLY(SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_P(f))
   102      CMSGC_ONLY(SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_P(f))
    99 
   103 
   100 #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f)                  \
   104 #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f)                  \
   101   SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG(f)
   105   SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG(f)
   102 
   106 
   103 // We separate these out, because sometime the general one has
   107 // We separate these out, because sometime the general one has