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 |