annotate src/share/vm/oops/fieldStreams.hpp @ 10185:d50cc62e94ff

8012715: G1: GraphKit accesses PtrQueue::_index as int but is size_t Summary: In graphKit INT operations were generated to access PtrQueue::_index which has type size_t. This is 64 bit on 64-bit machines. No problems occur on little endian machines as long as the index fits into 32 bit, but on big endian machines the upper part is read, which is zero. This leads to unnecessary branches to the slow path in the runtime. Reviewed-by: twisti, johnc Contributed-by: Martin Doerr <martin.doerr@sap.com>
author johnc
date Wed, 24 Apr 2013 14:48:43 -0700
parents 4a916f2ce331
children b2e698d2276c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
1 /*
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
2 * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
4 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
7 * published by the Free Software Foundation.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
8 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
13 * accompanied this code).
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
14 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
18 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
21 * questions.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
22 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
23 */
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
24
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
25 #ifndef SHARE_VM_OOPS_FIELDSTREAMS_HPP
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
26 #define SHARE_VM_OOPS_FIELDSTREAMS_HPP
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
27
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
28 #include "oops/instanceKlass.hpp"
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
29 #include "oops/fieldInfo.hpp"
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
30
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
31 // The is the base class for iteration over the fields array
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
32 // describing the declared fields in the class. Several subclasses
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
33 // are provided depending on the kind of iteration required. The
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
34 // JavaFieldStream is for iterating over regular Java fields and it
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
35 // generally the preferred iterator. InternalFieldStream only
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
36 // iterates over fields that have been injected by the JVM.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
37 // AllFieldStream exposes all fields and should only be used in rare
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
38 // cases.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
39 class FieldStreamBase : public StackObj {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
40 protected:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
41 Array<u2>* _fields;
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
42 constantPoolHandle _constants;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
43 int _index;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
44 int _limit;
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
45 int _generic_signature_slot;
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
46
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
47 FieldInfo* field() const { return FieldInfo::from_field_array(_fields, _index); }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
48
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
49 int init_generic_signature_start_slot() {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
50 int length = _fields->length();
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
51 int num_fields = 0;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
52 int skipped_generic_signature_slots = 0;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
53 FieldInfo* fi;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
54 AccessFlags flags;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
55 /* Scan from 0 to the current _index. Count the number of generic
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
56 signature slots for field[0] to field[_index - 1]. */
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
57 for (int i = 0; i < _index; i++) {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
58 fi = FieldInfo::from_field_array(_fields, i);
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
59 flags.set_flags(fi->access_flags());
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
60 if (flags.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
61 length --;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
62 skipped_generic_signature_slots ++;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
63 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
64 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
65 /* Scan from the current _index. */
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
66 for (int i = _index; i*FieldInfo::field_slots < length; i++) {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
67 fi = FieldInfo::from_field_array(_fields, i);
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
68 flags.set_flags(fi->access_flags());
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
69 if (flags.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
70 length --;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
71 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
72 num_fields ++;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
73 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
74 _generic_signature_slot = length + skipped_generic_signature_slots;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
75 assert(_generic_signature_slot <= _fields->length(), "");
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
76 return num_fields;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
77 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
78
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
79 FieldStreamBase(Array<u2>* fields, constantPoolHandle constants, int start, int limit) {
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
80 _fields = fields;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
81 _constants = constants;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
82 _index = start;
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
83 int num_fields = init_generic_signature_start_slot();
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
84 if (limit < start) {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
85 _limit = num_fields;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
86 } else {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
87 _limit = limit;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
88 }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
89 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
90
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
91 FieldStreamBase(Array<u2>* fields, constantPoolHandle constants) {
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
92 _fields = fields;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
93 _constants = constants;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
94 _index = 0;
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
95 _limit = init_generic_signature_start_slot();
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
96 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
97
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
98 public:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
99 FieldStreamBase(InstanceKlass* klass) {
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
100 _fields = klass->fields();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
101 _constants = klass->constants();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
102 _index = 0;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
103 _limit = klass->java_fields_count();
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
104 init_generic_signature_start_slot();
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
105 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
106 FieldStreamBase(instanceKlassHandle klass) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
107 _fields = klass->fields();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
108 _constants = klass->constants();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
109 _index = 0;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
110 _limit = klass->java_fields_count();
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
111 init_generic_signature_start_slot();
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
112 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
113
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
114 // accessors
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
115 int index() const { return _index; }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
116
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
117 void next() {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
118 if (access_flags().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
119 _generic_signature_slot ++;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
120 assert(_generic_signature_slot <= _fields->length(), "");
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
121 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
122 _index += 1;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
123 }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
124 bool done() const { return _index >= _limit; }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
125
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
126 // Accessors for current field
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
127 AccessFlags access_flags() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
128 AccessFlags flags;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
129 flags.set_flags(field()->access_flags());
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
130 return flags;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
131 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
132
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
133 void set_access_flags(u2 flags) const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
134 field()->set_access_flags(flags);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
135 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
136
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
137 void set_access_flags(AccessFlags flags) const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
138 set_access_flags(flags.as_short());
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
139 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
140
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
141 Symbol* name() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
142 return field()->name(_constants);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
143 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
144
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
145 Symbol* signature() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
146 return field()->signature(_constants);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
147 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
148
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
149 Symbol* generic_signature() const {
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
150 if (access_flags().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
151 assert(_generic_signature_slot < _fields->length(), "out of bounds");
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
152 int index = _fields->at(_generic_signature_slot);
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
153 return _constants->symbol_at(index);
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
154 } else {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
155 return NULL;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
156 }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
157 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
158
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
159 int offset() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
160 return field()->offset();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
161 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
162
7587
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
163 int allocation_type() const {
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
164 return field()->allocation_type();
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
165 }
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
166
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
167 void set_offset(int offset) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
168 field()->set_offset(offset);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
169 }
7587
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
170
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
171 bool is_offset_set() const {
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
172 return field()->is_offset_set();
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
173 }
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
174
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
175 bool is_contended() const {
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
176 return field()->is_contended();
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
177 }
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
178
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
179 int contended_group() const {
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
180 return field()->contended_group();
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
181 }
4a916f2ce331 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 6725
diff changeset
182
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
183 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
184
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
185 // Iterate over only the internal fields
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
186 class JavaFieldStream : public FieldStreamBase {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
187 public:
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
188 JavaFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), 0, k->java_fields_count()) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
189
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
190 int name_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
191 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
192 return field()->name_index();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
193 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
194 void set_name_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
195 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
196 field()->set_name_index(index);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
197 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
198 int signature_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
199 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
200 return field()->signature_index();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
201 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
202 void set_signature_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
203 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
204 field()->set_signature_index(index);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
205 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
206 int generic_signature_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
207 assert(!field()->is_internal(), "regular only");
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
208 if (access_flags().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
209 assert(_generic_signature_slot < _fields->length(), "out of bounds");
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
210 return _fields->at(_generic_signature_slot);
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
211 } else {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
212 return 0;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
213 }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
214 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
215 void set_generic_signature_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
216 assert(!field()->is_internal(), "regular only");
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
217 if (access_flags().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
218 assert(_generic_signature_slot < _fields->length(), "out of bounds");
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
219 _fields->at_put(_generic_signature_slot, index);
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
220 }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
221 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
222 int initval_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
223 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
224 return field()->initval_index();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
225 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
226 void set_initval_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
227 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
228 return field()->set_initval_index(index);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
229 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
230 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
231
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
232
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
233 // Iterate over only the internal fields
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
234 class InternalFieldStream : public FieldStreamBase {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
235 public:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
236 InternalFieldStream(InstanceKlass* k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {}
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
237 InternalFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {}
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
238 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
239
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
240
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
241 class AllFieldStream : public FieldStreamBase {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
242 public:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
243 AllFieldStream(Array<u2>* fields, constantPoolHandle constants): FieldStreamBase(fields, constants) {}
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
244 AllFieldStream(InstanceKlass* k): FieldStreamBase(k->fields(), k->constants()) {}
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
245 AllFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants()) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
246 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
247
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
248 #endif // SHARE_VM_OOPS_FIELDSTREAMS_HPP