1 /* |
1 /* |
2 * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
52 class Par_PushAndMarkClosure; |
52 class Par_PushAndMarkClosure; |
53 class PushOrMarkClosure; |
53 class PushOrMarkClosure; |
54 class Par_PushOrMarkClosure; |
54 class Par_PushOrMarkClosure; |
55 class CMSKeepAliveClosure; |
55 class CMSKeepAliveClosure; |
56 class CMSInnerParMarkAndPushClosure; |
56 class CMSInnerParMarkAndPushClosure; |
|
57 // Misc |
|
58 class NoHeaderExtendedOopClosure; |
57 |
59 |
58 // This macro applies an argument macro to all OopClosures for which we |
60 // This macro applies an argument macro to all OopClosures for which we |
59 // want specialized bodies of "oop_oop_iterate". The arguments to "f" are: |
61 // want specialized bodies of "oop_oop_iterate". The arguments to "f" are: |
60 // "f(closureType, non_virtual)" |
62 // "f(closureType, non_virtual)" |
61 // where "closureType" is the name of the particular subclass of OopClosure, |
63 // where "closureType" is the name of the particular subclass of OopClosure, |
85 #else // SERIALGC |
87 #else // SERIALGC |
86 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(f) |
88 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(f) |
87 #endif // SERIALGC |
89 #endif // SERIALGC |
88 |
90 |
89 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f) \ |
91 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f) \ |
|
92 f(NoHeaderExtendedOopClosure,_nv) \ |
90 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_S(f) \ |
93 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_S(f) \ |
91 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(f) |
94 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(f) |
92 |
95 |
93 #ifndef SERIALGC |
96 #ifndef SERIALGC |
94 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f) \ |
97 #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f) \ |
109 // We separate these out, because sometime the general one has |
112 // We separate these out, because sometime the general one has |
110 // a different definition from the specialized ones, and sometimes it |
113 // a different definition from the specialized ones, and sometimes it |
111 // doesn't. |
114 // doesn't. |
112 |
115 |
113 #define ALL_OOP_OOP_ITERATE_CLOSURES_1(f) \ |
116 #define ALL_OOP_OOP_ITERATE_CLOSURES_1(f) \ |
114 f(OopClosure,_v) \ |
117 f(ExtendedOopClosure,_v) \ |
115 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f) |
118 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f) |
116 |
119 |
117 #define ALL_OOP_OOP_ITERATE_CLOSURES_2(f) \ |
120 #define ALL_OOP_OOP_ITERATE_CLOSURES_2(f) \ |
118 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f) |
121 SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f) |
119 |
122 |
129 f(PushAndMarkClosure,_nv) \ |
132 f(PushAndMarkClosure,_nv) \ |
130 f(Par_MarkRefsIntoAndScanClosure,_nv) \ |
133 f(Par_MarkRefsIntoAndScanClosure,_nv) \ |
131 f(Par_PushAndMarkClosure,_nv) |
134 f(Par_PushAndMarkClosure,_nv) |
132 |
135 |
133 #define ALL_PAR_OOP_ITERATE_CLOSURES(f) \ |
136 #define ALL_PAR_OOP_ITERATE_CLOSURES(f) \ |
134 f(OopClosure,_v) \ |
137 f(ExtendedOopClosure,_v) \ |
135 SPECIALIZED_PAR_OOP_ITERATE_CLOSURES(f) |
138 SPECIALIZED_PAR_OOP_ITERATE_CLOSURES(f) |
136 #endif // SERIALGC |
139 #endif // SERIALGC |
137 |
140 |
138 // This macro applies an argument macro to all OopClosures for which we |
141 // This macro applies an argument macro to all OopClosures for which we |
139 // want specialized bodies of a family of methods related to |
142 // want specialized bodies of a family of methods related to |