126 // to flush other fields (f1, f2) completely to memory before the bytecodes |
126 // to flush other fields (f1, f2) completely to memory before the bytecodes |
127 // are updated, lest other processors see a non-zero bytecode but zero f1/f2. |
127 // are updated, lest other processors see a non-zero bytecode but zero f1/f2. |
128 void ConstantPoolCacheEntry::set_field(Bytecodes::Code get_code, |
128 void ConstantPoolCacheEntry::set_field(Bytecodes::Code get_code, |
129 Bytecodes::Code put_code, |
129 Bytecodes::Code put_code, |
130 KlassHandle field_holder, |
130 KlassHandle field_holder, |
131 int orig_field_index, |
131 int field_index, |
132 int field_offset, |
132 int field_offset, |
133 TosState field_type, |
133 TosState field_type, |
134 bool is_final, |
134 bool is_final, |
135 bool is_volatile) { |
135 bool is_volatile) { |
136 set_f1(field_holder()->java_mirror()); |
136 set_f1(field_holder()->java_mirror()); |
137 set_f2(field_offset); |
137 set_f2(field_offset); |
138 // The field index is used by jvm/ti and is the index into fields() array |
|
139 // in holder instanceKlass. This is scaled by instanceKlass::next_offset. |
|
140 assert((orig_field_index % instanceKlass::next_offset) == 0, "wierd index"); |
|
141 const int field_index = orig_field_index / instanceKlass::next_offset; |
|
142 assert(field_index <= field_index_mask, |
138 assert(field_index <= field_index_mask, |
143 "field index does not fit in low flag bits"); |
139 "field index does not fit in low flag bits"); |
144 set_flags(as_flags(field_type, is_final, false, is_volatile, false, false) | |
140 set_flags(as_flags(field_type, is_final, false, is_volatile, false, false) | |
145 (field_index & field_index_mask)); |
141 (field_index & field_index_mask)); |
146 set_bytecode_1(get_code); |
142 set_bytecode_1(get_code); |
147 set_bytecode_2(put_code); |
143 set_bytecode_2(put_code); |
148 NOT_PRODUCT(verify(tty)); |
144 NOT_PRODUCT(verify(tty)); |
149 } |
145 } |
150 |
146 |
151 int ConstantPoolCacheEntry::field_index() const { |
147 int ConstantPoolCacheEntry::field_index() const { |
152 return (_flags & field_index_mask) * instanceKlass::next_offset; |
148 return (_flags & field_index_mask); |
153 } |
149 } |
154 |
150 |
155 void ConstantPoolCacheEntry::set_method(Bytecodes::Code invoke_code, |
151 void ConstantPoolCacheEntry::set_method(Bytecodes::Code invoke_code, |
156 methodHandle method, |
152 methodHandle method, |
157 int vtable_index) { |
153 int vtable_index) { |