Mercurial > hg > graal-jvmci-8
comparison src/share/vm/oops/cpCache.hpp @ 6822:f6b0eb4e44cf
7200949: JSR 292: rubybench/bench/time/bench_base64.rb fails with jruby.jar not on boot class path
Reviewed-by: jrose, kvn
author | twisti |
---|---|
date | Mon, 01 Oct 2012 14:50:10 -0700 |
parents | 4bfe8b33cf66 |
children | 64672b22ef05 |
comparison
equal
deleted
inserted
replaced
6811:1b582b1bf7cb | 6822:f6b0eb4e44cf |
---|---|
40 // bit length |-8--|-8--|---16----| | 40 // bit length |-8--|-8--|---16----| |
41 // -------------------------------- | 41 // -------------------------------- |
42 // _indices [ b2 | b1 | index ] index = constant_pool_index | 42 // _indices [ b2 | b1 | index ] index = constant_pool_index |
43 // _f1 [ entry specific ] metadata ptr (method or klass) | 43 // _f1 [ entry specific ] metadata ptr (method or klass) |
44 // _f2 [ entry specific ] vtable or res_ref index, or vfinal method ptr | 44 // _f2 [ entry specific ] vtable or res_ref index, or vfinal method ptr |
45 // _flags [tos|0|F=1|0|0|f|v|0 |00000|field_index] (for field entries) | 45 // _flags [tos|0|F=1|0|0|0|f|v|0 |0000|field_index] (for field entries) |
46 // bit length [ 4 |1| 1 |1|1|1|1|1 |--5--|----16-----] | 46 // bit length [ 4 |1| 1 |1|1|1|1|1|1 |-4--|----16-----] |
47 // _flags [tos|0|F=0|A|I|f|0|vf|00000|00000|psize] (for method entries) | 47 // _flags [tos|0|F=0|M|A|I|f|0|vf|0000|00000|psize] (for method entries) |
48 // bit length [ 4 |1| 1 |1|1|1|1|1 |--5--|--8--|--8--] | 48 // bit length [ 4 |1| 1 |1|1|1|1|1|1 |-4--|--8--|--8--] |
49 | 49 |
50 // -------------------------------- | 50 // -------------------------------- |
51 // | 51 // |
52 // with: | 52 // with: |
53 // index = original constant pool index | 53 // index = original constant pool index |
164 tos_state_bits = 4, | 164 tos_state_bits = 4, |
165 tos_state_mask = right_n_bits(tos_state_bits), | 165 tos_state_mask = right_n_bits(tos_state_bits), |
166 tos_state_shift = BitsPerInt - tos_state_bits, // see verify_tos_state_shift below | 166 tos_state_shift = BitsPerInt - tos_state_bits, // see verify_tos_state_shift below |
167 // misc. option bits; can be any bit position in [16..27] | 167 // misc. option bits; can be any bit position in [16..27] |
168 is_field_entry_shift = 26, // (F) is it a field or a method? | 168 is_field_entry_shift = 26, // (F) is it a field or a method? |
169 has_appendix_shift = 25, // (A) does the call site have an appendix argument? | 169 has_method_type_shift = 25, // (M) does the call site have a MethodType? |
170 is_forced_virtual_shift = 24, // (I) is the interface reference forced to virtual mode? | 170 has_appendix_shift = 24, // (A) does the call site have an appendix argument? |
171 is_final_shift = 23, // (f) is the field or method final? | 171 is_forced_virtual_shift = 23, // (I) is the interface reference forced to virtual mode? |
172 is_volatile_shift = 22, // (v) is the field volatile? | 172 is_final_shift = 22, // (f) is the field or method final? |
173 is_vfinal_shift = 21, // (vf) did the call resolve to a final method? | 173 is_volatile_shift = 21, // (v) is the field volatile? |
174 is_vfinal_shift = 20, // (vf) did the call resolve to a final method? | |
174 // low order bits give field index (for FieldInfo) or method parameter size: | 175 // low order bits give field index (for FieldInfo) or method parameter size: |
175 field_index_bits = 16, | 176 field_index_bits = 16, |
176 field_index_mask = right_n_bits(field_index_bits), | 177 field_index_mask = right_n_bits(field_index_bits), |
177 parameter_size_bits = 8, // subset of field_index_mask, range is 0..255 | 178 parameter_size_bits = 8, // subset of field_index_mask, range is 0..255 |
178 parameter_size_mask = right_n_bits(parameter_size_bits), | 179 parameter_size_mask = right_n_bits(parameter_size_bits), |
221 ); | 222 ); |
222 | 223 |
223 void set_method_handle( | 224 void set_method_handle( |
224 constantPoolHandle cpool, // holding constant pool (required for locking) | 225 constantPoolHandle cpool, // holding constant pool (required for locking) |
225 methodHandle method, // adapter for invokeExact, etc. | 226 methodHandle method, // adapter for invokeExact, etc. |
226 Handle appendix, // stored in refs[f2]; could be a java.lang.invoke.MethodType | 227 Handle appendix, // stored in refs[f2+0]; could be a java.lang.invoke.MethodType |
228 Handle method_type, // stored in refs[f2+1]; is a java.lang.invoke.MethodType | |
227 objArrayHandle resolved_references | 229 objArrayHandle resolved_references |
228 ); | 230 ); |
229 | 231 |
230 void set_dynamic_call( | 232 void set_dynamic_call( |
231 constantPoolHandle cpool, // holding constant pool (required for locking) | 233 constantPoolHandle cpool, // holding constant pool (required for locking) |
232 methodHandle method, // adapter for this call site | 234 methodHandle method, // adapter for this call site |
233 Handle appendix, // stored in refs[f2]; could be a java.lang.invoke.CallSite | 235 Handle appendix, // stored in refs[f2+0]; could be a java.lang.invoke.CallSite |
236 Handle method_type, // stored in refs[f2+1]; is a java.lang.invoke.MethodType | |
234 objArrayHandle resolved_references | 237 objArrayHandle resolved_references |
235 ); | 238 ); |
236 | 239 |
237 // Common code for invokedynamic and MH invocations. | 240 // Common code for invokedynamic and MH invocations. |
238 | 241 |
251 // number and types of arguments. | 254 // number and types of arguments. |
252 void set_method_handle_common( | 255 void set_method_handle_common( |
253 constantPoolHandle cpool, // holding constant pool (required for locking) | 256 constantPoolHandle cpool, // holding constant pool (required for locking) |
254 Bytecodes::Code invoke_code, // _invokehandle or _invokedynamic | 257 Bytecodes::Code invoke_code, // _invokehandle or _invokedynamic |
255 methodHandle adapter, // invoker method (f1) | 258 methodHandle adapter, // invoker method (f1) |
256 Handle appendix, // appendix such as CallSite, MethodType, etc. (refs[f2]) | 259 Handle appendix, // appendix such as CallSite, MethodType, etc. (refs[f2+0]) |
260 Handle method_type, // MethodType (refs[f2+1]) | |
257 objArrayHandle resolved_references | 261 objArrayHandle resolved_references |
258 ); | 262 ); |
259 | 263 |
260 Method* method_if_resolved(constantPoolHandle cpool); | 264 // invokedynamic and invokehandle call sites have two entries in the |
261 oop appendix_if_resolved(constantPoolHandle cpool); | 265 // resolved references array: |
266 // appendix (at index+0) | |
267 // MethodType (at index+1) | |
268 enum { | |
269 _indy_resolved_references_appendix_offset = 0, | |
270 _indy_resolved_references_method_type_offset = 1, | |
271 _indy_resolved_references_entries | |
272 }; | |
273 | |
274 Method* method_if_resolved(constantPoolHandle cpool); | |
275 oop appendix_if_resolved(constantPoolHandle cpool); | |
276 oop method_type_if_resolved(constantPoolHandle cpool); | |
262 | 277 |
263 void set_parameter_size(int value); | 278 void set_parameter_size(int value); |
264 | 279 |
265 // Which bytecode number (1 or 2) in the index field is valid for this bytecode? | 280 // Which bytecode number (1 or 2) in the index field is valid for this bytecode? |
266 // Returns -1 if neither is valid. | 281 // Returns -1 if neither is valid. |
268 switch (code) { | 283 switch (code) { |
269 case Bytecodes::_getstatic : // fall through | 284 case Bytecodes::_getstatic : // fall through |
270 case Bytecodes::_getfield : // fall through | 285 case Bytecodes::_getfield : // fall through |
271 case Bytecodes::_invokespecial : // fall through | 286 case Bytecodes::_invokespecial : // fall through |
272 case Bytecodes::_invokestatic : // fall through | 287 case Bytecodes::_invokestatic : // fall through |
288 case Bytecodes::_invokehandle : // fall through | |
289 case Bytecodes::_invokedynamic : // fall through | |
273 case Bytecodes::_invokeinterface : return 1; | 290 case Bytecodes::_invokeinterface : return 1; |
274 case Bytecodes::_putstatic : // fall through | 291 case Bytecodes::_putstatic : // fall through |
275 case Bytecodes::_putfield : // fall through | 292 case Bytecodes::_putfield : // fall through |
276 case Bytecodes::_invokehandle : // fall through | |
277 case Bytecodes::_invokedynamic : // fall through | |
278 case Bytecodes::_invokevirtual : return 2; | 293 case Bytecodes::_invokevirtual : return 2; |
279 default : break; | 294 default : break; |
280 } | 295 } |
281 return -1; | 296 return -1; |
282 } | 297 } |
305 bool is_volatile() const { return (_flags & (1 << is_volatile_shift)) != 0; } | 320 bool is_volatile() const { return (_flags & (1 << is_volatile_shift)) != 0; } |
306 bool is_final() const { return (_flags & (1 << is_final_shift)) != 0; } | 321 bool is_final() const { return (_flags & (1 << is_final_shift)) != 0; } |
307 bool is_forced_virtual() const { return (_flags & (1 << is_forced_virtual_shift)) != 0; } | 322 bool is_forced_virtual() const { return (_flags & (1 << is_forced_virtual_shift)) != 0; } |
308 bool is_vfinal() const { return (_flags & (1 << is_vfinal_shift)) != 0; } | 323 bool is_vfinal() const { return (_flags & (1 << is_vfinal_shift)) != 0; } |
309 bool has_appendix() const { return (_flags & (1 << has_appendix_shift)) != 0; } | 324 bool has_appendix() const { return (_flags & (1 << has_appendix_shift)) != 0; } |
325 bool has_method_type() const { return (_flags & (1 << has_method_type_shift)) != 0; } | |
310 bool is_method_entry() const { return (_flags & (1 << is_field_entry_shift)) == 0; } | 326 bool is_method_entry() const { return (_flags & (1 << is_field_entry_shift)) == 0; } |
311 bool is_field_entry() const { return (_flags & (1 << is_field_entry_shift)) != 0; } | 327 bool is_field_entry() const { return (_flags & (1 << is_field_entry_shift)) != 0; } |
312 bool is_byte() const { return flag_state() == btos; } | 328 bool is_byte() const { return flag_state() == btos; } |
313 bool is_char() const { return flag_state() == ctos; } | 329 bool is_char() const { return flag_state() == ctos; } |
314 bool is_short() const { return flag_state() == stos; } | 330 bool is_short() const { return flag_state() == stos; } |