Skip to content

Commit 11dea0f

Browse files
committed
reduce diffs in ISCK IMK
1 parent eea6be8 commit 11dea0f

File tree

4 files changed

+67
-70
lines changed

4 files changed

+67
-70
lines changed

src/hotspot/share/oops/instanceMirrorKlass.hpp

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
#define SHARE_OOPS_INSTANCEMIRRORKLASS_HPP
2727

2828
#include "classfile/vmClasses.hpp"
29-
#include "oops/instanceKlass.hpp"
3029
#include "oops/klassInfoLUTEntry.hpp"
30+
#include "oops/instanceKlass.hpp"
3131
#include "runtime/handles.hpp"
3232
#include "utilities/macros.hpp"
3333

@@ -46,7 +46,7 @@ class InstanceMirrorKlass: public InstanceKlass {
4646
friend class InstanceKlass;
4747

4848
public:
49-
static constexpr KlassKind Kind = InstanceMirrorKlassKind;
49+
static const KlassKind Kind = InstanceMirrorKlassKind;
5050

5151
private:
5252
static int _offset_of_static_fields;
@@ -98,34 +98,30 @@ class InstanceMirrorKlass: public InstanceKlass {
9898
//
9999
// The InstanceMirrorKlass iterators also visit the hidden Klass pointer.
100100

101+
// Iterate over the static fields.
102+
template <typename T, class OopClosureType>
103+
inline void oop_oop_iterate_statics(oop obj, OopClosureType* closure);
104+
101105
// Forward iteration
102106
// Iterate over the oop fields and metadata.
103107
template <typename T, class OopClosureType>
104-
static inline void oop_oop_iterate(oop obj, OopClosureType* closure, KlassLUTEntry klute);
108+
inline static void oop_oop_iterate(oop obj, OopClosureType* closure, KlassLUTEntry klute);
105109

106110
// Reverse iteration
107111
// Iterate over the oop fields and metadata.
108112
template <typename T, class OopClosureType>
109-
static inline void oop_oop_iterate_reverse(oop obj, OopClosureType* closure, KlassLUTEntry klute);
113+
inline static void oop_oop_iterate_reverse(oop obj, OopClosureType* closure, KlassLUTEntry klute);
110114

111115
// Bounded range iteration
112116
// Iterate over the oop fields and metadata.
113117
template <typename T, class OopClosureType>
114-
static inline void oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr, KlassLUTEntry klute);
118+
inline static void oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr, KlassLUTEntry klute);
115119

116120
private:
117121

118122
// Iterate over the static fields.
119123
template <typename T, class OopClosureType>
120-
static inline void oop_oop_iterate_statics(oop obj, OopClosureType* closure);
121-
template <typename T, class OopClosureType>
122-
static inline void oop_oop_iterate_statics_bounded(oop obj, OopClosureType* closure, MemRegion mr);
123-
124-
// Iterate over the metadata
125-
template <typename T, class OopClosureType>
126-
static inline void oop_oop_iterate_metadata(oop obj, OopClosureType* closure);
127-
template <typename T, class OopClosureType>
128-
static inline void oop_oop_iterate_metadata_bounded(oop obj, OopClosureType* closure, MemRegion mr);
124+
inline void oop_oop_iterate_statics_bounded(oop obj, OopClosureType* closure, MemRegion mr);
129125
};
130126

131127
#endif // SHARE_OOPS_INSTANCEMIRRORKLASS_HPP

src/hotspot/share/oops/instanceMirrorKlass.inline.hpp

Lines changed: 43 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -47,32 +47,9 @@ void InstanceMirrorKlass::oop_oop_iterate_statics(oop obj, OopClosureType* closu
4747
}
4848

4949
template <typename T, class OopClosureType>
50-
void InstanceMirrorKlass::oop_oop_iterate_statics_bounded(oop obj,
51-
OopClosureType* closure,
52-
MemRegion mr) {
53-
T* p = (T*)start_of_static_fields(obj);
54-
T* end = p + java_lang_Class::static_oop_field_count(obj);
55-
56-
T* const l = (T*)mr.start();
57-
T* const h = (T*)mr.end();
58-
assert(mask_bits((intptr_t)l, sizeof(T)-1) == 0 &&
59-
mask_bits((intptr_t)h, sizeof(T)-1) == 0,
60-
"bounded region must be properly aligned");
61-
62-
if (p < l) {
63-
p = l;
64-
}
65-
if (end > h) {
66-
end = h;
67-
}
68-
69-
for (;p < end; ++p) {
70-
Devirtualizer::do_oop(closure, p);
71-
}
72-
}
50+
void InstanceMirrorKlass::oop_oop_iterate(oop obj, OopClosureType* closure, KlassLUTEntry klute) {
51+
InstanceKlass::oop_oop_iterate<T>(obj, closure, klute);
7352

74-
template <typename T, class OopClosureType>
75-
void InstanceMirrorKlass::oop_oop_iterate_metadata(oop obj, OopClosureType* closure) {
7653
if (Devirtualizer::do_metadata(closure)) {
7754
Klass* klass = java_lang_Class::as_Klass(obj);
7855
// We'll get null for primitive mirrors.
@@ -102,41 +79,60 @@ void InstanceMirrorKlass::oop_oop_iterate_metadata(oop obj, OopClosureType* clos
10279
// assert(java_lang_Class::is_primitive(obj), "Sanity check");
10380
}
10481
}
105-
}
10682

107-
template <typename T, class OopClosureType>
108-
void InstanceMirrorKlass::oop_oop_iterate_metadata_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
109-
if (Devirtualizer::do_metadata(closure)) {
110-
if (mr.contains(obj)) {
111-
Klass* klass = java_lang_Class::as_Klass(obj);
112-
// We'll get null for primitive mirrors.
113-
if (klass != nullptr) {
114-
Devirtualizer::do_klass(closure, klass);
115-
}
116-
}
117-
}
83+
InstanceMirrorKlass* const ik = obj->klass()->as_InstanceMirrorKlass();
84+
ik->oop_oop_iterate_statics<T>(obj, closure);
11885
}
11986

12087
template <typename T, class OopClosureType>
121-
void InstanceMirrorKlass::oop_oop_iterate(oop obj, OopClosureType* closure, KlassLUTEntry klute) {
122-
InstanceKlass::oop_oop_iterate<T>(obj, closure, klute);
123-
oop_oop_iterate_metadata<T>(obj, closure);
124-
oop_oop_iterate_statics<T>(obj, closure);
88+
void InstanceMirrorKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure, KlassLUTEntry klute) {
89+
InstanceKlass::oop_oop_iterate_reverse<T>(obj, closure, klute);
12590

91+
InstanceMirrorKlass* const ik = obj->klass()->as_InstanceMirrorKlass();
92+
ik->oop_oop_iterate_statics<T>(obj, closure);
12693
}
12794

12895
template <typename T, class OopClosureType>
129-
void InstanceMirrorKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure, KlassLUTEntry klute) {
130-
InstanceKlass::oop_oop_iterate_reverse<T>(obj, closure, klute);
96+
void InstanceMirrorKlass::oop_oop_iterate_statics_bounded(oop obj,
97+
OopClosureType* closure,
98+
MemRegion mr) {
99+
T* p = (T*)start_of_static_fields(obj);
100+
T* end = p + java_lang_Class::static_oop_field_count(obj);
131101

132-
InstanceMirrorKlass::oop_oop_iterate_statics<T>(obj, closure);
133-
}
102+
T* const l = (T*)mr.start();
103+
T* const h = (T*)mr.end();
104+
assert(mask_bits((intptr_t)l, sizeof(T)-1) == 0 &&
105+
mask_bits((intptr_t)h, sizeof(T)-1) == 0,
106+
"bounded region must be properly aligned");
107+
108+
if (p < l) {
109+
p = l;
110+
}
111+
if (end > h) {
112+
end = h;
113+
}
134114

115+
for (;p < end; ++p) {
116+
Devirtualizer::do_oop(closure, p);
117+
}
118+
}
135119

136120
template <typename T, class OopClosureType>
137121
void InstanceMirrorKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr, KlassLUTEntry klute) {
138122
InstanceKlass::oop_oop_iterate_bounded<T>(obj, closure, mr, klute);
139-
oop_oop_iterate_metadata_bounded<T>(obj, closure, mr);
140-
oop_oop_iterate_statics_bounded<T>(obj, closure, mr);
123+
124+
if (Devirtualizer::do_metadata(closure)) {
125+
if (mr.contains(obj)) {
126+
Klass* klass = java_lang_Class::as_Klass(obj);
127+
// We'll get null for primitive mirrors.
128+
if (klass != nullptr) {
129+
Devirtualizer::do_klass(closure, klass);
130+
}
131+
}
132+
}
133+
134+
InstanceMirrorKlass* const ik = obj->klass()->as_InstanceMirrorKlass();
135+
ik->oop_oop_iterate_statics_bounded<T>(obj, closure, mr);
141136
}
137+
142138
#endif // SHARE_OOPS_INSTANCEMIRRORKLASS_INLINE_HPP

src/hotspot/share/oops/instanceStackChunkKlass.inline.hpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,25 +90,22 @@ void InstanceStackChunkKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* c
9090
oop_oop_iterate_lockstack<T>(chunk, closure, mr);
9191
}
9292

93-
static InstanceStackChunkKlass* get_isck(oop obj) {
94-
Klass* const k = obj->klass();
95-
assert(k->is_stack_chunk_instance_klass(), "must be");
96-
return (InstanceStackChunkKlass*)k;
97-
}
98-
9993
template <typename T, class OopClosureType>
10094
void InstanceStackChunkKlass::oop_oop_iterate(oop obj, OopClosureType* closure, KlassLUTEntry klute) {
101-
get_isck(obj)->oop_oop_iterate<T>(obj, closure);
95+
InstanceStackChunkKlass* ik = obj->klass()->as_InstanceStackChunkKlass();
96+
ik->oop_oop_iterate<T>(obj, closure);
10297
}
10398

10499
template <typename T, class OopClosureType>
105100
void InstanceStackChunkKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure, KlassLUTEntry klute) {
106-
get_isck(obj)->oop_oop_iterate_reverse<T>(obj, closure);
101+
InstanceStackChunkKlass* ik = obj->klass()->as_InstanceStackChunkKlass();
102+
ik->oop_oop_iterate_reverse<T>(obj, closure);
107103
}
108104

109105
template <typename T, class OopClosureType>
110106
void InstanceStackChunkKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr, KlassLUTEntry klute) {
111-
get_isck(obj)->oop_oop_iterate_bounded<T>(obj, closure, mr);
107+
InstanceStackChunkKlass* ik = obj->klass()->as_InstanceStackChunkKlass();
108+
ik->oop_oop_iterate_bounded<T>(obj, closure, mr);
112109
}
113110

114111
template <typename T, class OopClosureType>

src/hotspot/share/oops/klass.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,14 @@ class Klass : public Metadata {
8484
};
8585
static const uint KLASS_KIND_COUNT = ObjArrayKlassKind + 1;
8686

87+
// Define a set of handy cast functions (e.g. "as_InstanceStackChunkKlass")
88+
#define WHAT(name, shortname) \
89+
name* as_##name() { \
90+
assert(_kind == name ## Kind, "not a " #name ); \
91+
return (name*) this; }
92+
KLASS_ALL_KINDS_DO(WHAT)
93+
#undef WHAT
94+
8795
protected:
8896

8997
// If you add a new field that points to any metaspace object, you

0 commit comments

Comments
 (0)