Mercurial > hg > truffle
diff src/share/vm/oops/constantPoolOop.cpp @ 726:be93aad57795
6655646: dynamic languages need dynamically linked call sites
Summary: invokedynamic instruction (JSR 292 RI)
Reviewed-by: twisti, never
author | jrose |
---|---|
date | Tue, 21 Apr 2009 23:21:04 -0700 |
parents | 0fbdb4381b99 |
children | 47ffceb239d0 |
line wrap: on
line diff
--- a/src/share/vm/oops/constantPoolOop.cpp Mon Apr 20 14:48:03 2009 -0700 +++ b/src/share/vm/oops/constantPoolOop.cpp Tue Apr 21 23:21:04 2009 -0700 @@ -249,32 +249,41 @@ } -symbolOop constantPoolOopDesc::uncached_name_ref_at(int which) { - jint ref_index = name_and_type_at(uncached_name_and_type_ref_index_at(which)); - int name_index = extract_low_short_from_int(ref_index); +symbolOop constantPoolOopDesc::impl_name_ref_at(int which, bool uncached) { + int name_index = name_ref_index_at(impl_name_and_type_ref_index_at(which, uncached)); return symbol_at(name_index); } -symbolOop constantPoolOopDesc::uncached_signature_ref_at(int which) { - jint ref_index = name_and_type_at(uncached_name_and_type_ref_index_at(which)); - int signature_index = extract_high_short_from_int(ref_index); +symbolOop constantPoolOopDesc::impl_signature_ref_at(int which, bool uncached) { + int signature_index = signature_ref_index_at(impl_name_and_type_ref_index_at(which, uncached)); return symbol_at(signature_index); } -int constantPoolOopDesc::uncached_name_and_type_ref_index_at(int which) { - jint ref_index = field_or_method_at(which, true); +int constantPoolOopDesc::impl_name_and_type_ref_index_at(int which, bool uncached) { + jint ref_index = field_or_method_at(which, uncached); return extract_high_short_from_int(ref_index); } -int constantPoolOopDesc::uncached_klass_ref_index_at(int which) { - jint ref_index = field_or_method_at(which, true); +int constantPoolOopDesc::impl_klass_ref_index_at(int which, bool uncached) { + jint ref_index = field_or_method_at(which, uncached); return extract_low_short_from_int(ref_index); } + +int constantPoolOopDesc::map_instruction_operand_to_index(int operand) { + if (constantPoolCacheOopDesc::is_secondary_index(operand)) { + return cache()->main_entry_at(operand)->constant_pool_index(); + } + assert((int)(u2)operand == operand, "clean u2"); + int index = Bytes::swap_u2(operand); + return cache()->entry_at(index)->constant_pool_index(); +} + + void constantPoolOopDesc::verify_constant_pool_resolve(constantPoolHandle this_oop, KlassHandle k, TRAPS) { if (k->oop_is_instance() || k->oop_is_objArray()) { instanceKlassHandle holder (THREAD, this_oop->pool_holder()); @@ -290,26 +299,14 @@ } -int constantPoolOopDesc::klass_ref_index_at(int which) { - jint ref_index = field_or_method_at(which, false); +int constantPoolOopDesc::name_ref_index_at(int which_nt) { + jint ref_index = name_and_type_at(which_nt); return extract_low_short_from_int(ref_index); } -int constantPoolOopDesc::name_and_type_ref_index_at(int which) { - jint ref_index = field_or_method_at(which, false); - return extract_high_short_from_int(ref_index); -} - - -int constantPoolOopDesc::name_ref_index_at(int which) { - jint ref_index = name_and_type_at(which); - return extract_low_short_from_int(ref_index); -} - - -int constantPoolOopDesc::signature_ref_index_at(int which) { - jint ref_index = name_and_type_at(which); +int constantPoolOopDesc::signature_ref_index_at(int which_nt) { + jint ref_index = name_and_type_at(which_nt); return extract_high_short_from_int(ref_index); } @@ -353,20 +350,6 @@ } -symbolOop constantPoolOopDesc::name_ref_at(int which) { - jint ref_index = name_and_type_at(name_and_type_ref_index_at(which)); - int name_index = extract_low_short_from_int(ref_index); - return symbol_at(name_index); -} - - -symbolOop constantPoolOopDesc::signature_ref_at(int which) { - jint ref_index = name_and_type_at(name_and_type_ref_index_at(which)); - int signature_index = extract_high_short_from_int(ref_index); - return symbol_at(signature_index); -} - - BasicType constantPoolOopDesc::basic_type_for_signature_at(int which) { return FieldType::basic_type(symbol_at(which)); }