Mercurial > hg > graal-compiler
changeset 9114:01958088b87d
Merge.
author | Christian Haeubl <haeubl@ssw.jku.at> |
---|---|
date | Mon, 15 Apr 2013 08:49:14 +0200 |
parents | 6c33b2076d7c (diff) 58f9750afcab (current diff) |
children | 79b098d44d20 |
files | graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IfBoxingEliminationTest.java graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/TestNodeInterface.java graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/TypedNodeIteratorTest.java graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/TypedNodeIteratorTest2.java graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/ArrayCopyIntrinsificationTest.java graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/HotSpotMethodSubstitutionTest.java graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/InstalledCodeExecuteHelperTest.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ArrayWriteBarrier.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/FieldWriteBarrier.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxingMethodPool.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/BoxedVirtualObjectNode.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/BoxingEliminationPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ExpandBoxingNodesPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IdentifyBoxingPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/PushNodesThroughPi.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/CheckCastTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/CompiledExceptionHandlerTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/InstanceOfDynamicTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/InstanceOfTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/InvokeTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/MethodSubstitutionTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/MonitorTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/NewArrayTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/NewInstanceTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/NewMultiArrayTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/PointerTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/StandardMethodSubstitutionsTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/TypeCheckTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/WordTest.java src/cpu/x86/vm/sharedRuntime_x86_64.cpp test/gc/6941923/test6941923.sh test/gc/TestVerifyBeforeGCDuringStartup.java test/runtime/NMT/AllocTestType.java |
diffstat | 2 files changed, 34 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Mon Apr 15 08:47:06 2013 +0200 +++ b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Mon Apr 15 08:49:14 2013 +0200 @@ -3341,6 +3341,10 @@ __ jmp(cont); int reexecute_offset = __ pc() - start; +#ifdef GRAALVM + // Graal does not use this kind of deoptimization + __ should_not_reach_here(); +#endif // Reexecute case // return address is the pc describes what bci to do re-execute at @@ -3351,6 +3355,32 @@ __ movl(r14, Deoptimization::Unpack_reexecute); // callee-saved __ jmp(cont); +#ifdef GRAAL + int implicit_exception_uncommon_trap_offset = __ pc() - start; + // pc where the exception happened is in ScratchA + __ pushptr(Address(r15_thread, in_bytes(JavaThread::ScratchA_offset()))); + + int uncommon_trap_offset = __ pc() - start; + + // Save everything in sight. + RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words); + // fetch_unroll_info needs to call last_java_frame() + __ set_last_Java_frame(noreg, noreg, NULL); + + __ movl(c_rarg1, Address(r15_thread, in_bytes(ThreadShadow::pending_deoptimization_offset()))); + __ movl(Address(r15_thread, in_bytes(ThreadShadow::pending_deoptimization_offset())), -1); + + __ movl(r14, (int32_t)Deoptimization::Unpack_reexecute); + __ mov(c_rarg0, r15_thread); + __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap))); + oop_maps->add_gc_map( __ pc()-start, map->deep_copy()); + + __ reset_last_Java_frame(false, false); + + Label after_fetch_unroll_info_call; + __ jmp(after_fetch_unroll_info_call); +#endif // GRAAL + int exception_offset = __ pc() - start; // Prolog for exception case @@ -3407,34 +3437,6 @@ __ bind(no_pending_exception); #endif -#ifdef GRAAL - __ jmp(cont); - - int implicit_exception_uncommon_trap_offset = __ pc() - start; - // pc where the exception happened is in ScratchA - __ pushptr(Address(r15_thread, in_bytes(JavaThread::ScratchA_offset()))); - - int uncommon_trap_offset = __ pc() - start; - - // Save everything in sight. - RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words); - // fetch_unroll_info needs to call last_java_frame() - __ set_last_Java_frame(noreg, noreg, NULL); - - __ movl(c_rarg1, Address(r15_thread, in_bytes(ThreadShadow::pending_deoptimization_offset()))); - __ movl(Address(r15_thread, in_bytes(ThreadShadow::pending_deoptimization_offset())), -1); - - __ movl(r14, (int32_t)Deoptimization::Unpack_reexecute); - __ mov(c_rarg0, r15_thread); - __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap))); - oop_maps->add_gc_map( __ pc()-start, map->deep_copy()); - - __ reset_last_Java_frame(false, false); - - Label after_fetch_unroll_info_call; - __ jmp(after_fetch_unroll_info_call); -#endif // GRAAL - __ bind(cont); // Call C code. Need thread and this frame, but NOT official VM entry
--- a/src/share/vm/code/codeBlob.hpp Mon Apr 15 08:47:06 2013 +0200 +++ b/src/share/vm/code/codeBlob.hpp Mon Apr 15 08:49:14 2013 +0200 @@ -358,10 +358,11 @@ int _unpack_with_exception_in_tls; +#ifdef GRAAL // (thomaswue) Offset when Graal calls uncommon_trap. int _uncommon_trap_offset; int _implicit_exception_uncommon_trap_offset; - +#endif // Creation support DeoptimizationBlob( @@ -416,6 +417,7 @@ } address unpack_with_exception_in_tls() const { return code_begin() + _unpack_with_exception_in_tls; } +#ifdef GRAAL // (thomaswue) Offset when Graal calls uncommon_trap. void set_uncommon_trap_offset(int offset) { _uncommon_trap_offset = offset; @@ -427,7 +429,7 @@ assert(contains(code_begin() + _implicit_exception_uncommon_trap_offset), "must be PC inside codeblob"); } address implicit_exception_uncommon_trap() const { return code_begin() + _implicit_exception_uncommon_trap_offset; } - +#endif };