src/cpu/x86/vm/cppInterpreter_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/cpu/x86/vm/cppInterpreter_x86.cpp	Mon Jan 12 10:51:11 2009
--- new/src/cpu/x86/vm/cppInterpreter_x86.cpp	Mon Jan 12 10:51:10 2009

*** 592,602 **** --- 592,602 ---- // if the compilation did not complete (either went background or bailed out). __ movptr(rax, (int32_t)false); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), rax); // for c++ interpreter can rsi really be munged? ! __ lea(state, Address(rbp, -(int)sizeof(BytecodeInterpreter))); // restore state __ movptr(rbx, Address(state, byte_offset_of(BytecodeInterpreter, _method))); // restore method __ movptr(rdi, Address(state, byte_offset_of(BytecodeInterpreter, _locals))); // get locals pointer __ jmp(*do_continue, relocInfo::none);
*** 656,666 **** --- 656,666 ---- // locals + overhead, in bytes const Address size_of_stack (rbx, methodOopDesc::max_stack_offset()); // Always give one monitor to allow us to start interp if sync method. // Any additional monitors need a check when moving the expression stack ! const int one_monitor = frame::interpreter_frame_monitor_size() * wordSize; __ load_unsigned_word(rax, size_of_stack); // get size of expression stack in words __ lea(rax, Address(noreg, rax, Interpreter::stackElementScale(), one_monitor)); __ lea(rax, Address(rax, rdx, Interpreter::stackElementScale(), overhead_size)); #ifdef ASSERT
*** 1827,1837 **** --- 1827,1837 ---- Label return_with_exception; Label unwind_and_forward; // restore state pointer. ! __ lea(state, Address(rbp, -(int)sizeof(BytecodeInterpreter))); __ movptr(rbx, STATE(_method)); // get method #ifdef _LP64 __ movptr(Address(r15_thread, Thread::pending_exception_offset()), rax); #else
*** 1875,1892 **** --- 1875,1892 ---- address compiled_entry = __ pc(); // The FPU stack is clean if UseSSE >= 2 but must be cleaned in other cases if (UseSSE < 2) { ! __ lea(state, Address(rbp, -(int)sizeof(BytecodeInterpreter))); __ movptr(rbx, STATE(_result._to_call._callee)); // get method just executed __ movl(rcx, Address(rbx, methodOopDesc::result_index_offset())); __ cmpl(rcx, AbstractInterpreter::BasicType_as_index(T_FLOAT)); // Result stub address array index __ jcc(Assembler::equal, do_float); __ cmpl(rcx, AbstractInterpreter::BasicType_as_index(T_DOUBLE)); // Result stub address array index __ jcc(Assembler::equal, do_double); ! #ifdef COMPILER2 ! #if !defined(_LP64) || defined(COMPILER1) || !defined(COMPILER2) __ empty_FPU_stack(); #endif // COMPILER2 __ jmp(done_conv); __ bind(do_float);
*** 1926,1936 **** --- 1926,1936 ---- // calling convention left it (i.e. params may or may not be present) // Copy the result from tosca and place it on java expression stack. // Restore rsi/r13 as compiled code may not preserve it ! __ lea(state, Address(rbp, -(int)sizeof(BytecodeInterpreter))); // restore stack to what we had when we left (in case i2c extended it) __ movptr(rsp, STATE(_stack)); __ lea(rsp, Address(rsp, wordSize));
*** 1940,1950 **** --- 1940,1950 ---- #ifdef _LP64 __ cmpptr(Address(r15_thread, Thread::pending_exception_offset()), (int32_t)NULL_WORD); #else __ movptr(rcx, STATE(_thread)); // get thread __ cmpptr(Address(rcx, Thread::pending_exception_offset()), (int32_t)NULL_WORD); ! #endif / __LP64 ! #endif // _LP64 __ jcc(Assembler::notZero, return_with_exception); // get method just executed __ movptr(rbx, STATE(_result._to_call._callee));

src/cpu/x86/vm/cppInterpreter_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File