From f2b0ecc2de8db52da702ae4d235d4916f4a09d86 Mon Sep 17 00:00:00 2001 From: goetz Date: Wed, 26 Feb 2014 11:33:34 -0800 Subject: [PATCH] 8035396: Introduce accessor for tmp_oop in frame. Summary: Avoid #ifs by introducing the accessor function interpreter_frame_temp_oop_addr(). Reviewed-by: kvn, twisti --- src/cpu/sparc/vm/frame_sparc.inline.hpp | 4 ++++ src/cpu/x86/vm/frame_x86.inline.hpp | 4 ++++ src/share/vm/runtime/frame.cpp | 17 +++-------------- src/share/vm/runtime/frame.hpp | 6 +++--- src/share/vm/runtime/frame.inline.hpp | 7 +++++++ 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/cpu/sparc/vm/frame_sparc.inline.hpp b/src/cpu/sparc/vm/frame_sparc.inline.hpp index 61ef794ab..b87681750 100644 --- a/src/cpu/sparc/vm/frame_sparc.inline.hpp +++ b/src/cpu/sparc/vm/frame_sparc.inline.hpp @@ -237,6 +237,10 @@ inline ConstantPoolCache** frame::interpreter_frame_cpoolcache_addr() const { inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { return (ConstantPoolCache**)sp_addr_at( LcpoolCache->sp_offset_in_saved_window()); } + +inline oop* frame::interpreter_frame_temp_oop_addr() const { + return (oop *)(fp() + interpreter_frame_oop_temp_offset); +} #endif // CC_INTERP diff --git a/src/cpu/x86/vm/frame_x86.inline.hpp b/src/cpu/x86/vm/frame_x86.inline.hpp index bb161c9d4..9b875b834 100644 --- a/src/cpu/x86/vm/frame_x86.inline.hpp +++ b/src/cpu/x86/vm/frame_x86.inline.hpp @@ -247,6 +247,10 @@ inline intptr_t* frame::interpreter_frame_tos_address() const { } } +inline oop* frame::interpreter_frame_temp_oop_addr() const { + return (oop *)(fp() + interpreter_frame_oop_temp_offset); +} + #endif /* CC_INTERP */ inline int frame::pd_oop_map_offset_adjustment() const { diff --git a/src/share/vm/runtime/frame.cpp b/src/share/vm/runtime/frame.cpp index 4c77d9a00..11cc75213 100644 --- a/src/share/vm/runtime/frame.cpp +++ b/src/share/vm/runtime/frame.cpp @@ -936,20 +936,9 @@ void frame::oops_interpreted_do(OopClosure* f, CLDToOopClosure* cld_f, cld_f->do_cld(m->method_holder()->class_loader_data()); } -#if !defined(PPC32) || defined(ZERO) - if (m->is_native()) { -#ifdef CC_INTERP - interpreterState istate = get_interpreterState(); - f->do_oop((oop*)&istate->_oop_temp); -#else - f->do_oop((oop*)( fp() + interpreter_frame_oop_temp_offset )); -#endif /* CC_INTERP */ - } -#else // PPC32 - if (m->is_native() && m->is_static()) { - f->do_oop(interpreter_frame_mirror_addr()); - } -#endif // PPC32 + if (m->is_native() PPC32_ONLY(&& m->is_static())) { + f->do_oop(interpreter_frame_temp_oop_addr()); + } int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals(); diff --git a/src/share/vm/runtime/frame.hpp b/src/share/vm/runtime/frame.hpp index f58638e05..ef515fb30 100644 --- a/src/share/vm/runtime/frame.hpp +++ b/src/share/vm/runtime/frame.hpp @@ -314,6 +314,9 @@ class frame VALUE_OBJ_CLASS_SPEC { void interpreter_frame_set_monitor_end(BasicObjectLock* value); #endif // CC_INTERP + // Address of the temp oop in the frame. Needed as GC root. + oop* interpreter_frame_temp_oop_addr() const; + // BasicObjectLocks: // // interpreter_frame_monitor_begin is higher in memory than interpreter_frame_monitor_end @@ -350,9 +353,6 @@ class frame VALUE_OBJ_CLASS_SPEC { void interpreter_frame_set_method(Method* method); Method** interpreter_frame_method_addr() const; ConstantPoolCache** interpreter_frame_cache_addr() const; -#ifdef PPC32 - oop* interpreter_frame_mirror_addr() const; -#endif public: // Entry frames diff --git a/src/share/vm/runtime/frame.inline.hpp b/src/share/vm/runtime/frame.inline.hpp index e00d2cf9d..ce725956d 100644 --- a/src/share/vm/runtime/frame.inline.hpp +++ b/src/share/vm/runtime/frame.inline.hpp @@ -87,6 +87,13 @@ inline bool frame::is_first_frame() const { return is_entry_frame() && entry_frame_is_first(); } +#ifdef CC_INTERP +inline oop* frame::interpreter_frame_temp_oop_addr() const { + interpreterState istate = get_interpreterState(); + return (oop *)&istate->_oop_temp; +} +#endif // CC_INTERP + // here are the platform-dependent bodies: #ifdef TARGET_ARCH_x86 -- GitLab