--- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Mon Jun 07 14:17:01 2010 -0700
+++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Wed Jun 09 18:50:45 2010 -0700
@@ -83,6 +83,18 @@
}
IRT_END
+IRT_ENTRY(void, InterpreterRuntime::resolve_ldc(JavaThread* thread, Bytecodes::Code bytecode)) {
+ assert(bytecode == Bytecodes::_fast_aldc ||
+ bytecode == Bytecodes::_fast_aldc_w, "wrong bc");
+ ResourceMark rm(thread);
+ methodHandle m (thread, method(thread));
+ Bytecode_loadconstant* ldc = Bytecode_loadconstant_at(m, bci(thread));
+ oop result = ldc->resolve_constant(THREAD);
+ DEBUG_ONLY(ConstantPoolCacheEntry* cpce = m->constants()->cache()->entry_at(ldc->cache_index()));
+ assert(result == cpce->f1(), "expected result for assembly code");
+}
+IRT_END
+
//------------------------------------------------------------------------------------------------------------------------
// Allocation
@@ -328,7 +340,7 @@
typeArrayHandle h_extable (thread, h_method->exception_table());
bool should_repeat;
int handler_bci;
- int current_bci = bcp(thread) - h_method->code_base();
+ int current_bci = bci(thread);
// Need to do this check first since when _do_not_unlock_if_synchronized
// is set, we don't want to trigger any classloading which may make calls
@@ -615,8 +627,7 @@
if (bytecode == Bytecodes::_invokevirtual || bytecode == Bytecodes::_invokeinterface) {
ResourceMark rm(thread);
methodHandle m (thread, method(thread));
- int bci = m->bci_from(bcp(thread));
- Bytecode_invoke* call = Bytecode_invoke_at(m, bci);
+ Bytecode_invoke* call = Bytecode_invoke_at(m, bci(thread));
symbolHandle signature (thread, call->signature());
receiver = Handle(thread,
thread->last_frame().interpreter_callee_receiver(signature));