src/cpu/x86/vm/interpreter_x86_32.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/cpu/x86/vm

src/cpu/x86/vm/interpreter_x86_32.cpp

Print this page
rev 6068 : 8036146: make CPP interpreter build again
Summary: fix build of CPP interpreter on x86 and sparc
Reviewed-by:


 212   __ jmp(rdi);
 213 
 214   return entry_point;
 215 }
 216 
 217 
 218 // Abstract method entry
 219 // Attempt to execute abstract method. Throw exception
 220 address InterpreterGenerator::generate_abstract_entry(void) {
 221 
 222   // rbx,: Method*
 223   // rcx: receiver (unused)
 224   // rsi: previous interpreter state (C++ interpreter) must preserve
 225 
 226   // rsi: sender SP
 227 
 228   address entry_point = __ pc();
 229 
 230   // abstract method entry
 231 

 232   //  pop return address, reset last_sp to NULL
 233   __ empty_expression_stack();
 234   __ restore_bcp();      // rsi must be correct for exception handler   (was destroyed)
 235   __ restore_locals();   // make sure locals pointer is correct as well (was destroyed)

 236 
 237   // throw exception
 238   __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodError));
 239   // the call_VM checks for exception, so we should never return here.
 240   __ should_not_reach_here();
 241 
 242   return entry_point;
 243 }
 244 
 245 
 246 void Deoptimization::unwind_callee_save_values(frame* f, vframeArray* vframe_array) {
 247 
 248   // This code is sort of the equivalent of C2IAdapter::setup_stack_frame back in
 249   // the days we had adapter frames. When we deoptimize a situation where a
 250   // compiled caller calls a compiled caller will have registers it expects
 251   // to survive the call to the callee. If we deoptimize the callee the only
 252   // way we can restore these registers is to have the oldest interpreter
 253   // frame that we create restore these values. That is what this routine
 254   // will accomplish.
 255 


 212   __ jmp(rdi);
 213 
 214   return entry_point;
 215 }
 216 
 217 
 218 // Abstract method entry
 219 // Attempt to execute abstract method. Throw exception
 220 address InterpreterGenerator::generate_abstract_entry(void) {
 221 
 222   // rbx,: Method*
 223   // rcx: receiver (unused)
 224   // rsi: previous interpreter state (C++ interpreter) must preserve
 225 
 226   // rsi: sender SP
 227 
 228   address entry_point = __ pc();
 229 
 230   // abstract method entry
 231 
 232 #ifndef CC_INTERP
 233   //  pop return address, reset last_sp to NULL
 234   __ empty_expression_stack();
 235   __ restore_bcp();      // rsi must be correct for exception handler   (was destroyed)
 236   __ restore_locals();   // make sure locals pointer is correct as well (was destroyed)
 237 #endif
 238 
 239   // throw exception
 240   __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodError));
 241   // the call_VM checks for exception, so we should never return here.
 242   __ should_not_reach_here();
 243 
 244   return entry_point;
 245 }
 246 
 247 
 248 void Deoptimization::unwind_callee_save_values(frame* f, vframeArray* vframe_array) {
 249 
 250   // This code is sort of the equivalent of C2IAdapter::setup_stack_frame back in
 251   // the days we had adapter frames. When we deoptimize a situation where a
 252   // compiled caller calls a compiled caller will have registers it expects
 253   // to survive the call to the callee. If we deoptimize the callee the only
 254   // way we can restore these registers is to have the oldest interpreter
 255   // frame that we create restore these values. That is what this routine
 256   // will accomplish.
 257 
src/cpu/x86/vm/interpreter_x86_32.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File