hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp
changeset 34651 07b1cc0f6040
parent 34188 e6c7861d438d
child 35166 23125410af16
equal deleted inserted replaced
34648:b7ea5d095ef5 34651:07b1cc0f6040
    37 #include "oops/oop.inline.hpp"
    37 #include "oops/oop.inline.hpp"
    38 #include "prims/jvmtiExport.hpp"
    38 #include "prims/jvmtiExport.hpp"
    39 #include "prims/jvmtiThreadState.hpp"
    39 #include "prims/jvmtiThreadState.hpp"
    40 #include "prims/methodHandles.hpp"
    40 #include "prims/methodHandles.hpp"
    41 #include "runtime/arguments.hpp"
    41 #include "runtime/arguments.hpp"
    42 #include "runtime/deoptimization.hpp"
       
    43 #include "runtime/frame.inline.hpp"
    42 #include "runtime/frame.inline.hpp"
    44 #include "runtime/sharedRuntime.hpp"
    43 #include "runtime/sharedRuntime.hpp"
    45 #include "runtime/stubRoutines.hpp"
    44 #include "runtime/stubRoutines.hpp"
    46 #include "runtime/synchronizer.hpp"
    45 #include "runtime/synchronizer.hpp"
    47 #include "runtime/timer.hpp"
    46 #include "runtime/timer.hpp"
    58 #else
    57 #else
    59 #define BLOCK_COMMENT(str) __ block_comment(str)
    58 #define BLOCK_COMMENT(str) __ block_comment(str)
    60 #endif
    59 #endif
    61 
    60 
    62 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
    61 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
    63 
       
    64 int AbstractInterpreter::BasicType_as_index(BasicType type) {
       
    65   int i = 0;
       
    66   switch (type) {
       
    67     case T_BOOLEAN: i = 0; break;
       
    68     case T_CHAR   : i = 1; break;
       
    69     case T_BYTE   : i = 2; break;
       
    70     case T_SHORT  : i = 3; break;
       
    71     case T_INT    : i = 4; break;
       
    72     case T_LONG   : i = 5; break;
       
    73     case T_VOID   : i = 6; break;
       
    74     case T_FLOAT  : i = 7; break;
       
    75     case T_DOUBLE : i = 8; break;
       
    76     case T_OBJECT : i = 9; break;
       
    77     case T_ARRAY  : i = 9; break;
       
    78     default       : ShouldNotReachHere();
       
    79   }
       
    80   assert(0 <= i && i < AbstractInterpreter::number_of_result_handlers, "index out of bounds");
       
    81   return i;
       
    82 }
       
    83 
    62 
    84 address AbstractInterpreterGenerator::generate_slow_signature_handler() {
    63 address AbstractInterpreterGenerator::generate_slow_signature_handler() {
    85   // Slow_signature handler that respects the PPC C calling conventions.
    64   // Slow_signature handler that respects the PPC C calling conventions.
    86   //
    65   //
    87   // We get called by the native entry code with our output register
    66   // We get called by the native entry code with our output register
   577     return entry;
   556     return entry;
   578   }
   557   }
   579 
   558 
   580   return NULL;
   559   return NULL;
   581 }
   560 }
   582 
       
   583 void Deoptimization::unwind_callee_save_values(frame* f, vframeArray* vframe_array) {
       
   584   // This code is sort of the equivalent of C2IAdapter::setup_stack_frame back in
       
   585   // the days we had adapter frames. When we deoptimize a situation where a
       
   586   // compiled caller calls a compiled caller will have registers it expects
       
   587   // to survive the call to the callee. If we deoptimize the callee the only
       
   588   // way we can restore these registers is to have the oldest interpreter
       
   589   // frame that we create restore these values. That is what this routine
       
   590   // will accomplish.
       
   591 
       
   592   // At the moment we have modified c2 to not have any callee save registers
       
   593   // so this problem does not exist and this routine is just a place holder.
       
   594 
       
   595   assert(f->is_interpreted_frame(), "must be interpreted");
       
   596 }