Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6824463

deopt blob is testing wrong register on 64-bit x86

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • hs15
    • hs14
    • hotspot
    • None
    • b05
    • x86
    • solaris_9

        The change for 5108146 added a new test in the deopt blob for x86_64 for use the by 64-bit version of C1. During the time that it was being developed and it's final push register usage in the deopt blob was changed so that now the deopt blob is testing the wrong register.

        diff --git a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp
        --- a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp
        +++ b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp
        @@ -2691,7 +2691,7 @@ void SharedRuntime::generate_deopt_blob(
           __ mov(rdi, rax);
                                                                                                                                             
            Label noException;
        - __ cmpl(r12, Deoptimization::Unpack_exception); // Was exception pending?
        + __ cmpl(r14, Deoptimization::Unpack_exception); // Was exception pending?
           __ jcc(Assembler::notEqual, noException);
           __ movptr(rax, Address(r15_thread, JavaThread::exception_oop_offset()));
           // QQQ this is useless it was NULL above

        So far for whatever reason r12 never contains the same value as Deoptimization::Unpack_exception when using C2 but it's a bug waiting to happen.

              never Tom Rodriguez
              never Tom Rodriguez
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: