Mercurial > hg > truffle
annotate src/share/vm/utilities/accessFlags.hpp @ 6862:8a5ea0a9ccc4
7127708: G1: change task num types from int to uint in concurrent mark
Summary: Change the type of various task num fields, parameters etc to unsigned and rename them to be more consistent with the other collectors. Code changes were also reviewed by Vitaly Davidovich.
Reviewed-by: johnc
Contributed-by: Kaushik Srenevasan <kaushik@twitter.com>
author | johnc |
---|---|
date | Sat, 06 Oct 2012 01:17:44 -0700 |
parents | 9191895df19d |
children | 8d9fc28831cc |
rev | line source |
---|---|
0 | 1 /* |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
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 | |
7 * published by the Free Software Foundation. | |
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 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
710
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
710
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
710
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_UTILITIES_ACCESSFLAGS_HPP |
26 #define SHARE_VM_UTILITIES_ACCESSFLAGS_HPP | |
27 | |
28 #include "prims/jvm.h" | |
29 #include "utilities/top.hpp" | |
30 | |
0 | 31 // AccessFlags is an abstraction over Java access flags. |
32 | |
33 | |
34 enum { | |
35 // See jvm.h for shared JVM_ACC_XXX access flags | |
36 | |
37 // HotSpot-specific access flags | |
38 | |
39 // flags actually put in .class file | |
40 JVM_ACC_WRITTEN_FLAGS = 0x00007FFF, | |
41 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
42 // Method* flags |
0 | 43 JVM_ACC_MONITOR_MATCH = 0x10000000, // True if we know that monitorenter/monitorexit bytecodes match |
44 JVM_ACC_HAS_MONITOR_BYTECODES = 0x20000000, // Method contains monitorenter/monitorexit bytecodes | |
45 JVM_ACC_HAS_LOOPS = 0x40000000, // Method has loops | |
46 JVM_ACC_LOOPS_FLAG_INIT = (int)0x80000000,// The loop flag has been initialized | |
47 JVM_ACC_QUEUED = 0x01000000, // Queued for compilation | |
1783 | 48 JVM_ACC_NOT_C2_COMPILABLE = 0x02000000, |
49 JVM_ACC_NOT_C1_COMPILABLE = 0x04000000, | |
6800
9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents:
6725
diff
changeset
|
50 JVM_ACC_NOT_C2_OSR_COMPILABLE = 0x08000000, |
0 | 51 JVM_ACC_HAS_LINE_NUMBER_TABLE = 0x00100000, |
52 JVM_ACC_HAS_CHECKED_EXCEPTIONS = 0x00400000, | |
53 JVM_ACC_HAS_JSRS = 0x00800000, | |
54 JVM_ACC_IS_OLD = 0x00010000, // RedefineClasses() has replaced this method | |
55 JVM_ACC_IS_OBSOLETE = 0x00020000, // RedefineClasses() has made method obsolete | |
56 JVM_ACC_IS_PREFIXED_NATIVE = 0x00040000, // JVMTI has prefixed this native method | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
57 JVM_ACC_ON_STACK = 0x00080000, // RedefinedClasses() is used on the stack |
1783 | 58 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
59 // Klass* flags |
0 | 60 JVM_ACC_HAS_MIRANDA_METHODS = 0x10000000, // True if this class has miranda methods in it's vtable |
61 JVM_ACC_HAS_VANILLA_CONSTRUCTOR = 0x20000000, // True if klass has a vanilla default constructor | |
62 JVM_ACC_HAS_FINALIZER = 0x40000000, // True if klass has a non-empty finalize() method | |
63 JVM_ACC_IS_CLONEABLE = (int)0x80000000,// True if klass supports the Clonable interface | |
64 JVM_ACC_HAS_FINAL_METHOD = 0x01000000, // True if klass has final method | |
65 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
66 // Klass* and Method* flags |
0 | 67 JVM_ACC_HAS_LOCAL_VARIABLE_TABLE= 0x00200000, |
68 | |
69 JVM_ACC_PROMOTED_FLAGS = 0x00200000, // flags promoted from methods to the holding klass | |
70 | |
71 // field flags | |
72 // Note: these flags must be defined in the low order 16 bits because | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
73 // InstanceKlass only stores a ushort worth of information from the |
0 | 74 // AccessFlags value. |
75 // These bits must not conflict with any other field-related access flags | |
76 // (e.g., ACC_ENUM). | |
77 // Note that the class-related ACC_ANNOTATION bit conflicts with these flags. | |
78 JVM_ACC_FIELD_ACCESS_WATCHED = 0x00002000, // field access is watched by JVMTI | |
79 JVM_ACC_FIELD_MODIFICATION_WATCHED = 0x00008000, // field modification is watched by JVMTI | |
3938 | 80 JVM_ACC_FIELD_INTERNAL = 0x00000400, // internal field, same as JVM_ACC_ABSTRACT |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
81 JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE = 0x00000800, // field has generic signature |
3938 | 82 |
83 JVM_ACC_FIELD_INTERNAL_FLAGS = JVM_ACC_FIELD_ACCESS_WATCHED | | |
84 JVM_ACC_FIELD_MODIFICATION_WATCHED | | |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
85 JVM_ACC_FIELD_INTERNAL | |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
86 JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE, |
0 | 87 |
88 // flags accepted by set_field_flags() | |
3938 | 89 JVM_ACC_FIELD_FLAGS = JVM_RECOGNIZED_FIELD_MODIFIERS | JVM_ACC_FIELD_INTERNAL_FLAGS |
710 | 90 |
0 | 91 }; |
92 | |
93 | |
94 class AccessFlags VALUE_OBJ_CLASS_SPEC { | |
95 friend class VMStructs; | |
96 private: | |
97 jint _flags; | |
98 | |
99 public: | |
100 // Java access flags | |
101 bool is_public () const { return (_flags & JVM_ACC_PUBLIC ) != 0; } | |
102 bool is_private () const { return (_flags & JVM_ACC_PRIVATE ) != 0; } | |
103 bool is_protected () const { return (_flags & JVM_ACC_PROTECTED ) != 0; } | |
104 bool is_static () const { return (_flags & JVM_ACC_STATIC ) != 0; } | |
105 bool is_final () const { return (_flags & JVM_ACC_FINAL ) != 0; } | |
106 bool is_synchronized() const { return (_flags & JVM_ACC_SYNCHRONIZED) != 0; } | |
107 bool is_super () const { return (_flags & JVM_ACC_SUPER ) != 0; } | |
108 bool is_volatile () const { return (_flags & JVM_ACC_VOLATILE ) != 0; } | |
109 bool is_transient () const { return (_flags & JVM_ACC_TRANSIENT ) != 0; } | |
110 bool is_native () const { return (_flags & JVM_ACC_NATIVE ) != 0; } | |
111 bool is_interface () const { return (_flags & JVM_ACC_INTERFACE ) != 0; } | |
112 bool is_abstract () const { return (_flags & JVM_ACC_ABSTRACT ) != 0; } | |
113 bool is_strict () const { return (_flags & JVM_ACC_STRICT ) != 0; } | |
114 | |
115 // Attribute flags | |
116 bool is_synthetic () const { return (_flags & JVM_ACC_SYNTHETIC ) != 0; } | |
117 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
118 // Method* flags |
0 | 119 bool is_monitor_matching () const { return (_flags & JVM_ACC_MONITOR_MATCH ) != 0; } |
120 bool has_monitor_bytecodes () const { return (_flags & JVM_ACC_HAS_MONITOR_BYTECODES ) != 0; } | |
121 bool has_loops () const { return (_flags & JVM_ACC_HAS_LOOPS ) != 0; } | |
122 bool loops_flag_init () const { return (_flags & JVM_ACC_LOOPS_FLAG_INIT ) != 0; } | |
123 bool queued_for_compilation () const { return (_flags & JVM_ACC_QUEUED ) != 0; } | |
6800
9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents:
6725
diff
changeset
|
124 bool is_not_c1_compilable () const { return (_flags & JVM_ACC_NOT_C1_COMPILABLE ) != 0; } |
9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents:
6725
diff
changeset
|
125 bool is_not_c2_compilable () const { return (_flags & JVM_ACC_NOT_C2_COMPILABLE ) != 0; } |
9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents:
6725
diff
changeset
|
126 bool is_not_c2_osr_compilable() const { return (_flags & JVM_ACC_NOT_C2_OSR_COMPILABLE ) != 0; } |
0 | 127 bool has_linenumber_table () const { return (_flags & JVM_ACC_HAS_LINE_NUMBER_TABLE ) != 0; } |
128 bool has_checked_exceptions () const { return (_flags & JVM_ACC_HAS_CHECKED_EXCEPTIONS ) != 0; } | |
129 bool has_jsrs () const { return (_flags & JVM_ACC_HAS_JSRS ) != 0; } | |
130 bool is_old () const { return (_flags & JVM_ACC_IS_OLD ) != 0; } | |
131 bool is_obsolete () const { return (_flags & JVM_ACC_IS_OBSOLETE ) != 0; } | |
132 bool is_prefixed_native () const { return (_flags & JVM_ACC_IS_PREFIXED_NATIVE ) != 0; } | |
133 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
134 // Klass* flags |
0 | 135 bool has_miranda_methods () const { return (_flags & JVM_ACC_HAS_MIRANDA_METHODS ) != 0; } |
136 bool has_vanilla_constructor () const { return (_flags & JVM_ACC_HAS_VANILLA_CONSTRUCTOR) != 0; } | |
137 bool has_finalizer () const { return (_flags & JVM_ACC_HAS_FINALIZER ) != 0; } | |
138 bool has_final_method () const { return (_flags & JVM_ACC_HAS_FINAL_METHOD ) != 0; } | |
139 bool is_cloneable () const { return (_flags & JVM_ACC_IS_CLONEABLE ) != 0; } | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
140 // Klass* and Method* flags |
0 | 141 bool has_localvariable_table () const { return (_flags & JVM_ACC_HAS_LOCAL_VARIABLE_TABLE) != 0; } |
142 void set_has_localvariable_table() { atomic_set_bits(JVM_ACC_HAS_LOCAL_VARIABLE_TABLE); } | |
143 void clear_has_localvariable_table() { atomic_clear_bits(JVM_ACC_HAS_LOCAL_VARIABLE_TABLE); } | |
144 | |
145 // field flags | |
146 bool is_field_access_watched() const { return (_flags & JVM_ACC_FIELD_ACCESS_WATCHED) != 0; } | |
147 bool is_field_modification_watched() const | |
148 { return (_flags & JVM_ACC_FIELD_MODIFICATION_WATCHED) != 0; } | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
149 bool on_stack() const { return (_flags & JVM_ACC_ON_STACK) != 0; } |
3938 | 150 bool is_internal() const { return (_flags & JVM_ACC_FIELD_INTERNAL) != 0; } |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
151 bool field_has_generic_signature() const |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
152 { return (_flags & JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE) != 0; } |
0 | 153 |
154 // get .class file flags | |
155 jint get_flags () const { return (_flags & JVM_ACC_WRITTEN_FLAGS); } | |
156 | |
157 // Initialization | |
158 void add_promoted_flags(jint flags) { _flags |= (flags & JVM_ACC_PROMOTED_FLAGS); } | |
3938 | 159 void set_field_flags(jint flags) { |
160 assert((flags & JVM_ACC_FIELD_FLAGS) == flags, "only recognized flags"); | |
161 _flags = (flags & JVM_ACC_FIELD_FLAGS); | |
162 } | |
0 | 163 void set_flags(jint flags) { _flags = (flags & JVM_ACC_WRITTEN_FLAGS); } |
164 | |
165 void set_queued_for_compilation() { atomic_set_bits(JVM_ACC_QUEUED); } | |
166 void clear_queued_for_compilation() { atomic_clear_bits(JVM_ACC_QUEUED); } | |
167 | |
168 // Atomic update of flags | |
169 void atomic_set_bits(jint bits); | |
170 void atomic_clear_bits(jint bits); | |
171 | |
172 private: | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
173 friend class Method; |
0 | 174 friend class Klass; |
175 friend class ClassFileParser; | |
176 // the functions below should only be called on the _access_flags inst var directly, | |
177 // otherwise they are just changing a copy of the flags | |
178 | |
179 // attribute flags | |
180 void set_is_synthetic() { atomic_set_bits(JVM_ACC_SYNTHETIC); } | |
181 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
182 // Method* flags |
0 | 183 void set_monitor_matching() { atomic_set_bits(JVM_ACC_MONITOR_MATCH); } |
184 void set_has_monitor_bytecodes() { atomic_set_bits(JVM_ACC_HAS_MONITOR_BYTECODES); } | |
185 void set_has_loops() { atomic_set_bits(JVM_ACC_HAS_LOOPS); } | |
186 void set_loops_flag_init() { atomic_set_bits(JVM_ACC_LOOPS_FLAG_INIT); } | |
1783 | 187 void set_not_c1_compilable() { atomic_set_bits(JVM_ACC_NOT_C1_COMPILABLE); } |
188 void set_not_c2_compilable() { atomic_set_bits(JVM_ACC_NOT_C2_COMPILABLE); } | |
6800
9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents:
6725
diff
changeset
|
189 void set_not_c2_osr_compilable() { atomic_set_bits(JVM_ACC_NOT_C2_OSR_COMPILABLE); } |
0 | 190 void set_has_linenumber_table() { atomic_set_bits(JVM_ACC_HAS_LINE_NUMBER_TABLE); } |
191 void set_has_checked_exceptions() { atomic_set_bits(JVM_ACC_HAS_CHECKED_EXCEPTIONS); } | |
192 void set_has_jsrs() { atomic_set_bits(JVM_ACC_HAS_JSRS); } | |
193 void set_is_old() { atomic_set_bits(JVM_ACC_IS_OLD); } | |
194 void set_is_obsolete() { atomic_set_bits(JVM_ACC_IS_OBSOLETE); } | |
195 void set_is_prefixed_native() { atomic_set_bits(JVM_ACC_IS_PREFIXED_NATIVE); } | |
196 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
197 // Klass* flags |
0 | 198 void set_has_vanilla_constructor() { atomic_set_bits(JVM_ACC_HAS_VANILLA_CONSTRUCTOR); } |
199 void set_has_finalizer() { atomic_set_bits(JVM_ACC_HAS_FINALIZER); } | |
200 void set_has_final_method() { atomic_set_bits(JVM_ACC_HAS_FINAL_METHOD); } | |
201 void set_is_cloneable() { atomic_set_bits(JVM_ACC_IS_CLONEABLE); } | |
202 void set_has_miranda_methods() { atomic_set_bits(JVM_ACC_HAS_MIRANDA_METHODS); } | |
203 | |
204 public: | |
205 // field flags | |
206 void set_is_field_access_watched(const bool value) | |
207 { | |
208 if (value) { | |
209 atomic_set_bits(JVM_ACC_FIELD_ACCESS_WATCHED); | |
210 } else { | |
211 atomic_clear_bits(JVM_ACC_FIELD_ACCESS_WATCHED); | |
212 } | |
213 } | |
214 void set_is_field_modification_watched(const bool value) | |
215 { | |
216 if (value) { | |
217 atomic_set_bits(JVM_ACC_FIELD_MODIFICATION_WATCHED); | |
218 } else { | |
219 atomic_clear_bits(JVM_ACC_FIELD_MODIFICATION_WATCHED); | |
220 } | |
221 } | |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
222 void set_field_has_generic_signature() |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
223 { |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
224 atomic_set_bits(JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE); |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
225 } |
0 | 226 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
227 void set_on_stack(const bool value) |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
228 { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
229 if (value) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
230 atomic_set_bits(JVM_ACC_ON_STACK); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
231 } else { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
232 atomic_clear_bits(JVM_ACC_ON_STACK); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
233 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
234 } |
0 | 235 // Conversion |
3938 | 236 jshort as_short() const { return (jshort)_flags; } |
237 jint as_int() const { return _flags; } | |
0 | 238 |
710 | 239 inline friend AccessFlags accessFlags_from(jint flags); |
240 | |
0 | 241 // Printing/debugging |
242 void print_on(outputStream* st) const PRODUCT_RETURN; | |
243 }; | |
710 | 244 |
245 inline AccessFlags accessFlags_from(jint flags) { | |
246 AccessFlags af; | |
247 af._flags = flags; | |
248 return af; | |
249 } | |
1972 | 250 |
251 #endif // SHARE_VM_UTILITIES_ACCESSFLAGS_HPP |