Mercurial > hg > release > icedtea6-1.10
changeset 1589:d55dfba8404f
2009-06-09 Gary Benson <gbenson@redhat.com>
* ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp
(SharkTopLevelBlock::get_interface_callee): New argument.
* ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp
(SharkTopLevelBlock::scan_for_traps): Update traps for
invokeinterface.
(SharkTopLevelBlock::get_callee): Pass method to
get_interface_callee.
(SharkTopLevelBlock::get_interface_callee): Removed constant
pool lookup.
* patches/hotspot/default/icedtea-shark.patch
(ciMethod::itable_index): New method.
author | Gary Benson <gbenson@redhat.com> |
---|---|
date | Tue, 09 Jun 2009 06:22:07 -0400 |
parents | 0be8e3334758 |
children | ff13b7d6e330 |
files | ChangeLog ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp |
diffstat | 3 files changed, 30 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Mon Jun 08 14:26:32 2009 -0400 +++ b/ChangeLog Tue Jun 09 06:22:07 2009 -0400 @@ -1,3 +1,18 @@ +2009-06-09 Gary Benson <gbenson@redhat.com> + + * ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp + (SharkTopLevelBlock::get_interface_callee): New argument. + * ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp + (SharkTopLevelBlock::scan_for_traps): Update traps for + invokeinterface. + (SharkTopLevelBlock::get_callee): Pass method to + get_interface_callee. + (SharkTopLevelBlock::get_interface_callee): Removed constant + pool lookup. + + * patches/hotspot/default/icedtea-shark.patch + (ciMethod::itable_index): New method. + 2009-06-08 Omair Majid <omajid@redhat.com> * Makefile.am
--- a/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp Mon Jun 08 14:26:32 2009 -0400 +++ b/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp Tue Jun 09 06:22:07 2009 -0400 @@ -107,8 +107,14 @@ if (method->holder() == function()->env()->Object_klass()) Unimplemented(); - // Continue to the check - index = iter()->get_method_index(); + // Bail out if the holder is unloaded + if (!method->holder()->is_linked()) { + set_trap( + Deoptimization::make_trap_request( + Deoptimization::Reason_uninitialized, + Deoptimization::Action_reinterpret), bci()); + return; + } break; case Bytecodes::_new: @@ -873,7 +879,7 @@ case CALL_VIRTUAL: return get_virtual_callee(receiver, method); case CALL_INTERFACE: - return get_interface_callee(receiver); + return get_interface_callee(receiver, method); default: ShouldNotReachHere(); } @@ -911,11 +917,9 @@ } // Interface calls are handled here -Value* SharkTopLevelBlock::get_interface_callee(SharkValue *receiver) +Value* SharkTopLevelBlock::get_interface_callee(SharkValue *receiver, + ciMethod* method) { - SharkConstantPool constants(this); - Value *cache = constants.cache_entry_at(iter()->get_method_index()); - BasicBlock *loop = function()->CreateBlock("loop"); BasicBlock *got_null = function()->CreateBlock("got_null"); BasicBlock *not_null = function()->CreateBlock("not_null"); @@ -955,11 +959,7 @@ itable_start, BytesPerLong, itable_start_name); // Locate this interface's entry in the table - Value *iklass = builder()->CreateValueOfStructEntry( - cache, ConstantPoolCacheEntry::f1_offset(), - SharkType::jobject_type(), - "iklass"); - + Value *iklass = builder()->CreateInlineOop(method->holder()); BasicBlock *loop_entry = builder()->GetInsertBlock(); builder()->CreateBr(loop); builder()->SetInsertPoint(loop); @@ -1009,11 +1009,6 @@ offset = builder()->CreateIntCast(offset, SharkType::intptr_type(), false); - Value *index = builder()->CreateValueOfStructEntry( - cache, ConstantPoolCacheEntry::f2_offset(), - SharkType::intptr_type(), - "index"); - return builder()->CreateLoad( builder()->CreateIntToPtr( builder()->CreateAdd( @@ -1022,10 +1017,8 @@ builder()->CreatePtrToInt( object_klass, SharkType::intptr_type()), offset), - builder()->CreateShl( - index, - LLVMValue::intptr_constant( - exact_log2(itableMethodEntry::size() * wordSize)))), + LLVMValue::intptr_constant( + method->itable_index() * itableMethodEntry::size() * wordSize)), LLVMValue::intptr_constant( itableMethodEntry::method_offset_in_bytes())), PointerType::getUnqual(SharkType::methodOop_type())),
--- a/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp Mon Jun 08 14:26:32 2009 -0400 +++ b/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp Tue Jun 09 06:22:07 2009 -0400 @@ -383,7 +383,7 @@ llvm::Value* get_direct_callee(ciMethod* method); llvm::Value* get_virtual_callee(SharkValue* receiver, ciMethod* method); - llvm::Value* get_interface_callee(SharkValue* receiver); + llvm::Value* get_interface_callee(SharkValue* receiver, ciMethod* method); void do_call();