| Index: src/compiler/interpreter-assembler.cc
|
| diff --git a/src/compiler/interpreter-assembler.cc b/src/compiler/interpreter-assembler.cc
|
| index 47e014ba3992b3aa2e1b1ce4b191b0f76b15930c..f981a4f6751442c2573887b82cf098c05f05939e 100644
|
| --- a/src/compiler/interpreter-assembler.cc
|
| +++ b/src/compiler/interpreter-assembler.cc
|
| @@ -72,6 +72,11 @@ void InterpreterAssembler::SetAccumulator(Node* value) {
|
| }
|
|
|
|
|
| +Node* InterpreterAssembler::ContextTaggedPointer() {
|
| + return raw_assembler_->Parameter(Linkage::kInterpreterContextParameter);
|
| +}
|
| +
|
| +
|
| Node* InterpreterAssembler::RegisterFileRawPointer() {
|
| return raw_assembler_->Parameter(Linkage::kInterpreterRegisterFileParameter);
|
| }
|
| @@ -99,13 +104,13 @@ Node* InterpreterAssembler::RegisterFrameOffset(Node* index) {
|
|
|
|
|
| Node* InterpreterAssembler::LoadRegister(Node* reg_index) {
|
| - return raw_assembler_->Load(kMachPtr, RegisterFileRawPointer(),
|
| + return raw_assembler_->Load(kMachAnyTagged, RegisterFileRawPointer(),
|
| RegisterFrameOffset(reg_index));
|
| }
|
|
|
|
|
| Node* InterpreterAssembler::StoreRegister(Node* value, Node* reg_index) {
|
| - return raw_assembler_->Store(kMachPtr, RegisterFileRawPointer(),
|
| + return raw_assembler_->Store(kMachAnyTagged, RegisterFileRawPointer(),
|
| RegisterFrameOffset(reg_index), value);
|
| }
|
|
|
| @@ -152,6 +157,11 @@ Node* InterpreterAssembler::Int32Constant(int value) {
|
| }
|
|
|
|
|
| +Node* InterpreterAssembler::IntPtrConstant(intptr_t value) {
|
| + return raw_assembler_->IntPtrConstant(value);
|
| +}
|
| +
|
| +
|
| Node* InterpreterAssembler::NumberConstant(double value) {
|
| return raw_assembler_->NumberConstant(value);
|
| }
|
| @@ -177,6 +187,12 @@ Node* InterpreterAssembler::SmiUntag(Node* value) {
|
| }
|
|
|
|
|
| +Node* InterpreterAssembler::LoadContextSlot(int slot_index) {
|
| + return raw_assembler_->Load(kMachAnyTagged, ContextTaggedPointer(),
|
| + IntPtrConstant(Context::SlotOffset(slot_index)));
|
| +}
|
| +
|
| +
|
| void InterpreterAssembler::Return() {
|
| Node* exit_trampoline_code_object =
|
| HeapConstant(Unique<HeapObject>::CreateImmovable(
|
| @@ -187,10 +203,11 @@ void InterpreterAssembler::Return() {
|
| STATIC_ASSERT(2 == Linkage::kInterpreterBytecodeOffsetParameter);
|
| STATIC_ASSERT(3 == Linkage::kInterpreterBytecodeArrayParameter);
|
| STATIC_ASSERT(4 == Linkage::kInterpreterDispatchTableParameter);
|
| + STATIC_ASSERT(5 == Linkage::kInterpreterContextParameter);
|
| Node* tail_call = raw_assembler_->TailCallInterpreterDispatch(
|
| call_descriptor(), exit_trampoline_code_object, GetAccumulator(),
|
| RegisterFileRawPointer(), BytecodeOffset(), BytecodeArrayTaggedPointer(),
|
| - DispatchTableRawPointer());
|
| + DispatchTableRawPointer(), ContextTaggedPointer());
|
| // This should always be the end node.
|
| SetEndInput(tail_call);
|
| }
|
| @@ -219,10 +236,12 @@ void InterpreterAssembler::Dispatch() {
|
| STATIC_ASSERT(2 == Linkage::kInterpreterBytecodeOffsetParameter);
|
| STATIC_ASSERT(3 == Linkage::kInterpreterBytecodeArrayParameter);
|
| STATIC_ASSERT(4 == Linkage::kInterpreterDispatchTableParameter);
|
| + STATIC_ASSERT(5 == Linkage::kInterpreterContextParameter);
|
| Node* tail_call = raw_assembler_->TailCallInterpreterDispatch(
|
| call_descriptor(), target_code_object, GetAccumulator(),
|
| RegisterFileRawPointer(), new_bytecode_offset,
|
| - BytecodeArrayTaggedPointer(), DispatchTableRawPointer());
|
| + BytecodeArrayTaggedPointer(), DispatchTableRawPointer(),
|
| + ContextTaggedPointer());
|
| // This should always be the end node.
|
| SetEndInput(tail_call);
|
| }
|
|
|