524
525
526 IRT_ENTRY(void, InterpreterRuntime::throw_AbstractMethodError(JavaThread* thread))
527 THROW(vmSymbols::java_lang_AbstractMethodError());
528 IRT_END
529
530
531 IRT_ENTRY(void, InterpreterRuntime::throw_IncompatibleClassChangeError(JavaThread* thread))
532 THROW(vmSymbols::java_lang_IncompatibleClassChangeError());
533 IRT_END
534
535
536 //------------------------------------------------------------------------------------------------------------------------
537 // Fields
538 //
539
540 IRT_ENTRY(void, InterpreterRuntime::resolve_get_put(JavaThread* thread, Bytecodes::Code bytecode))
541 // resolve field
542 fieldDescriptor info;
543 constantPoolHandle pool(thread, method(thread)->constants());
544 bool is_put = (bytecode == Bytecodes::_putfield || bytecode == Bytecodes::_putstatic);
545 bool is_static = (bytecode == Bytecodes::_getstatic || bytecode == Bytecodes::_putstatic);
546
547 {
548 JvmtiHideSingleStepping jhss(thread);
549 LinkResolver::resolve_field_access(info, pool, get_index_u2_cpcache(thread, bytecode),
550 bytecode, CHECK);
551 } // end JvmtiHideSingleStepping
552
553 // check if link resolution caused cpCache to be updated
554 if (already_resolved(thread)) return;
555
556 // compute auxiliary field attributes
557 TosState state = as_TosState(info.field_type());
558
559 // We need to delay resolving put instructions on final fields
560 // until we actually invoke one. This is required so we throw
561 // exceptions at the correct place. If we do not resolve completely
562 // in the current pass, leaving the put_code set to zero will
563 // cause the next put instruction to reresolve.
564 Bytecodes::Code put_code = (Bytecodes::Code)0;
|
524
525
526 IRT_ENTRY(void, InterpreterRuntime::throw_AbstractMethodError(JavaThread* thread))
527 THROW(vmSymbols::java_lang_AbstractMethodError());
528 IRT_END
529
530
531 IRT_ENTRY(void, InterpreterRuntime::throw_IncompatibleClassChangeError(JavaThread* thread))
532 THROW(vmSymbols::java_lang_IncompatibleClassChangeError());
533 IRT_END
534
535
536 //------------------------------------------------------------------------------------------------------------------------
537 // Fields
538 //
539
540 IRT_ENTRY(void, InterpreterRuntime::resolve_get_put(JavaThread* thread, Bytecodes::Code bytecode))
541 // resolve field
542 fieldDescriptor info;
543 constantPoolHandle pool(thread, method(thread)->constants());
544 bool is_put = (bytecode == Bytecodes::_putfield || bytecode == Bytecodes::_nofast_putfield ||
545 bytecode == Bytecodes::_putstatic);
546 bool is_static = (bytecode == Bytecodes::_getstatic || bytecode == Bytecodes::_putstatic);
547
548 {
549 JvmtiHideSingleStepping jhss(thread);
550 LinkResolver::resolve_field_access(info, pool, get_index_u2_cpcache(thread, bytecode),
551 bytecode, CHECK);
552 } // end JvmtiHideSingleStepping
553
554 // check if link resolution caused cpCache to be updated
555 if (already_resolved(thread)) return;
556
557 // compute auxiliary field attributes
558 TosState state = as_TosState(info.field_type());
559
560 // We need to delay resolving put instructions on final fields
561 // until we actually invoke one. This is required so we throw
562 // exceptions at the correct place. If we do not resolve completely
563 // in the current pass, leaving the put_code set to zero will
564 // cause the next put instruction to reresolve.
565 Bytecodes::Code put_code = (Bytecodes::Code)0;
|