Commit da4a7325 authored by zhengxing.li's avatar zhengxing.li Committed by Commit bot

X87: [Interpreter] Save bytecode offset in interpreter stack frames.

  port 025d476c (r32906)

  original commit message:
  Adds a slot for the bytecode offset to interpreter stack frames and
  saves it on calls, and restores after calls.

  Also fixes RawMachineAssembler::Return() to call MergeControlToEnd.

BUG=

Review URL: https://codereview.chromium.org/1535613003

Cr-Commit-Position: refs/heads/master@{#32922}
parent bc55af3c
...@@ -522,6 +522,9 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { ...@@ -522,6 +522,9 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
__ push(edi); // Callee's JS function. __ push(edi); // Callee's JS function.
__ push(edx); // Callee's new target. __ push(edx); // Callee's new target.
// Push zero for bytecode array offset.
__ push(Immediate(0));
// Get the bytecode array from the function object and load the pointer to the // Get the bytecode array from the function object and load the pointer to the
// first entry into edi (InterpreterBytecodeRegister). // first entry into edi (InterpreterBytecodeRegister).
__ mov(eax, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); __ mov(eax, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset));
...@@ -591,9 +594,8 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { ...@@ -591,9 +594,8 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
// registers. // registers.
__ LoadRoot(kInterpreterAccumulatorRegister, Heap::kUndefinedValueRootIndex); __ LoadRoot(kInterpreterAccumulatorRegister, Heap::kUndefinedValueRootIndex);
__ mov(kInterpreterRegisterFileRegister, ebp); __ mov(kInterpreterRegisterFileRegister, ebp);
__ sub(kInterpreterRegisterFileRegister, __ add(kInterpreterRegisterFileRegister,
Immediate(2 * kPointerSize + Immediate(InterpreterFrameConstants::kRegisterFilePointerFromFp));
StandardFrameConstants::kFixedFrameSizeFromFp));
__ mov(kInterpreterBytecodeOffsetRegister, __ mov(kInterpreterBytecodeOffsetRegister,
Immediate(BytecodeArray::kHeaderSize - kHeapObjectTag)); Immediate(BytecodeArray::kHeaderSize - kHeapObjectTag));
// Since the dispatch table root might be set after builtins are generated, // Since the dispatch table root might be set after builtins are generated,
...@@ -617,6 +619,8 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { ...@@ -617,6 +619,8 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
// and header removal. // and header removal.
__ add(ebx, Immediate(Code::kHeaderSize - kHeapObjectTag)); __ add(ebx, Immediate(Code::kHeaderSize - kHeapObjectTag));
__ call(ebx); __ call(ebx);
__ nop(); // Ensure that return address still counts as interpreter entry
// trampoline.
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment