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 #ifndef SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP
26 #define SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP
27
28 #include "gc/serial/serial_specialized_oop_closures.hpp"
29 #include "utilities/macros.hpp"
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
35 // The following OopClosure types get specialized versions of
36 // "oop_oop_iterate" that invoke the closures' do_oop methods
37 // non-virtually, using a mechanism defined in this file. Extend these
38 // macros in the obvious way to add specializations for new closures.
39
40 // Forward declarations.
41 class ExtendedOopClosure;
42 class NoHeaderExtendedOopClosure;
43 class OopsInGenClosure;
44
45 // This macro applies an argument macro to all OopClosures for which we
46 // want specialized bodies of "oop_oop_iterate". The arguments to "f" are:
47 // "f(closureType, non_virtual)"
48 // where "closureType" is the name of the particular subclass of ExtendedOopClosure,
49 // and "non_virtual" will be the string "_nv" if the closure type should
50 // have its "do_oop" method invoked non-virtually, or else the
51 // string "_v". ("ExtendedOopClosure" itself will be the only class in the latter
52 // category.)
53
54 // This is split into several because of a Visual C++ 6.0 compiler bug
55 // where very long macros cause the compiler to crash
56
57 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f) \
58 f(NoHeaderExtendedOopClosure,_nv) \
59 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_S(f) \
60 ALL_GCS_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(f))
61
62 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f) \
63 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_MS(f) \
64 ALL_GCS_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_CMS(f)) \
65 ALL_GCS_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_G1(f)) \
66 ALL_GCS_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_G1FULL(f))
67
68 // We separate these out, because sometime the general one has
69 // a different definition from the specialized ones, and sometimes it
70 // doesn't.
71
72 #define ALL_OOP_OOP_ITERATE_CLOSURES_1(f) \
73 f(ExtendedOopClosure,_v) \
74 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f)
75
76 #define ALL_OOP_OOP_ITERATE_CLOSURES_2(f) \
77 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f)
78
79 // This macro applies an argument macro to all OopClosures for which we
80 // want specialized bodies of a family of methods related to
81 // "par_oop_iterate". The arguments to f are the same as above.
82 // The "root_class" is the most general class to define; this may be
83 // "OopClosure" in some applications and "OopsInGenClosure" in others.
84
85
86 #define ALL_PAR_OOP_ITERATE_CLOSURES(f) \
87 f(ExtendedOopClosure,_v) \
88 ALL_GCS_ONLY(SPECIALIZED_PAR_OOP_ITERATE_CLOSURES(f))
89
90 // This macro applies an argument macro to all OopClosures for which we
91 // 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.
93 // The "root_class" is the most general class to define; this may be
94 // "OopClosure" in some applications and "OopsInGenClosure" in others.
95
96 #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG(f) \
97 SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_S(f) \
98 ALL_GCS_ONLY(SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_P(f))
99
100 #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f) \
101 SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG(f)
102
103 // We separate these out, because sometime the general one has
104 // a different definition from the specialized ones, and sometimes it
105 // doesn't.
106
107 #define ALL_SINCE_SAVE_MARKS_CLOSURES(f) \
108 f(OopsInGenClosure,_v) \
109 SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f)
110
111 #endif // SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP
|
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 #ifndef SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP
26 #define SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP
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
36 #include "gc/serial/serial_specialized_oop_closures.hpp"
37 #endif
38
39 // The following OopClosure types get specialized versions of
40 // "oop_oop_iterate" that invoke the closures' do_oop methods
41 // non-virtually, using a mechanism defined in this file. Extend these
42 // macros in the obvious way to add specializations for new closures.
43
44 // Forward declarations.
45 class ExtendedOopClosure;
46 class NoHeaderExtendedOopClosure;
47 class OopsInGenClosure;
48
49 // This macro applies an argument macro to all OopClosures for which we
50 // want specialized bodies of "oop_oop_iterate". The arguments to "f" are:
51 // "f(closureType, non_virtual)"
52 // where "closureType" is the name of the particular subclass of ExtendedOopClosure,
53 // and "non_virtual" will be the string "_nv" if the closure type should
54 // have its "do_oop" method invoked non-virtually, or else the
55 // string "_v". ("ExtendedOopClosure" itself will be the only class in the latter
56 // category.)
57
58 // This is split into several because of a Visual C++ 6.0 compiler bug
59 // where very long macros cause the compiler to crash
60
61 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f) \
62 f(NoHeaderExtendedOopClosure,_nv) \
63 SERIALGC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_S(f)) \
64 CMSGC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(f))
65
66 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f) \
67 SERIALGC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_MS(f)) \
68 CMSGC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_CMS(f)) \
69 G1GC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_G1(f)) \
70 G1GC_ONLY(SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_G1FULL(f))
71
72 // We separate these out, because sometime the general one has
73 // a different definition from the specialized ones, and sometimes it
74 // doesn't.
75
76 #define ALL_OOP_OOP_ITERATE_CLOSURES_1(f) \
77 f(ExtendedOopClosure,_v) \
78 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f)
79
80 #define ALL_OOP_OOP_ITERATE_CLOSURES_2(f) \
81 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f)
82
83 // This macro applies an argument macro to all OopClosures for which we
84 // want specialized bodies of a family of methods related to
85 // "par_oop_iterate". The arguments to f are the same as above.
86 // The "root_class" is the most general class to define; this may be
87 // "OopClosure" in some applications and "OopsInGenClosure" in others.
88
89
90 #define ALL_PAR_OOP_ITERATE_CLOSURES(f) \
91 f(ExtendedOopClosure,_v) \
92 CMSGC_ONLY(SPECIALIZED_PAR_OOP_ITERATE_CLOSURES(f))
93
94 // This macro applies an argument macro to all OopClosures for which we
95 // want specialized bodies of a family of methods related to
96 // "oops_since_save_marks_do". The arguments to f are the same as above.
97 // The "root_class" is the most general class to define; this may be
98 // "OopClosure" in some applications and "OopsInGenClosure" in others.
99
100 #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG(f) \
101 SERIALGC_ONLY(SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_S(f)) \
102 CMSGC_ONLY(SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_P(f))
103
104 #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f) \
105 SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG(f)
106
107 // We separate these out, because sometime the general one has
108 // a different definition from the specialized ones, and sometimes it
109 // doesn't.
110
111 #define ALL_SINCE_SAVE_MARKS_CLOSURES(f) \
112 f(OopsInGenClosure,_v) \
113 SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f)
114
115 #endif // SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP
|