Index: src/interpreter/interpreter-assembler.cc |
diff --git a/src/interpreter/interpreter-assembler.cc b/src/interpreter/interpreter-assembler.cc |
index 440e879c4869fbd7b0e52b9035167e49ffd81168..a56f498eb820280d82e3fc2000269551f48d7885 100644 |
--- a/src/interpreter/interpreter-assembler.cc |
+++ b/src/interpreter/interpreter-assembler.cc |
@@ -79,7 +79,7 @@ Node* InterpreterAssembler::RegisterLocation(Node* reg_index) { |
Node* InterpreterAssembler::LoadRegister(int offset) { |
return Load(MachineType::AnyTagged(), RegisterFileRawPointer(), |
- Int32Constant(offset)); |
+ IntPtrConstant(offset)); |
} |
Node* InterpreterAssembler::LoadRegister(Register reg) { |
@@ -97,7 +97,7 @@ Node* InterpreterAssembler::LoadRegister(Node* reg_index) { |
Node* InterpreterAssembler::StoreRegister(Node* value, int offset) { |
return StoreNoWriteBarrier(MachineRepresentation::kTagged, |
- RegisterFileRawPointer(), Int32Constant(offset), |
+ RegisterFileRawPointer(), IntPtrConstant(offset), |
value); |
} |
@@ -113,7 +113,7 @@ Node* InterpreterAssembler::StoreRegister(Node* value, Node* reg_index) { |
Node* InterpreterAssembler::NextRegister(Node* reg_index) { |
// Register indexes are negative, so the next index is minus one. |
- return IntPtrAdd(reg_index, Int32Constant(-1)); |
+ return IntPtrAdd(reg_index, IntPtrConstant(-1)); |
} |
Node* InterpreterAssembler::BytecodeOperand(int operand_index) { |
@@ -122,7 +122,7 @@ Node* InterpreterAssembler::BytecodeOperand(int operand_index) { |
Bytecodes::GetOperandSize(bytecode_, operand_index)); |
return Load( |
MachineType::Uint8(), BytecodeArrayTaggedPointer(), |
- IntPtrAdd(BytecodeOffset(), Int32Constant(Bytecodes::GetOperandOffset( |
+ IntPtrAdd(BytecodeOffset(), IntPtrConstant(Bytecodes::GetOperandOffset( |
bytecode_, operand_index)))); |
} |
@@ -132,7 +132,7 @@ Node* InterpreterAssembler::BytecodeOperandSignExtended(int operand_index) { |
Bytecodes::GetOperandSize(bytecode_, operand_index)); |
Node* load = Load( |
MachineType::Int8(), BytecodeArrayTaggedPointer(), |
- IntPtrAdd(BytecodeOffset(), Int32Constant(Bytecodes::GetOperandOffset( |
+ IntPtrAdd(BytecodeOffset(), IntPtrConstant(Bytecodes::GetOperandOffset( |
bytecode_, operand_index)))); |
// Ensure that we sign extend to full pointer size |
if (kPointerSize == 8) { |
@@ -148,15 +148,16 @@ Node* InterpreterAssembler::BytecodeOperandShort(int operand_index) { |
if (TargetSupportsUnalignedAccess()) { |
return Load( |
MachineType::Uint16(), BytecodeArrayTaggedPointer(), |
- IntPtrAdd(BytecodeOffset(), Int32Constant(Bytecodes::GetOperandOffset( |
+ IntPtrAdd(BytecodeOffset(), IntPtrConstant(Bytecodes::GetOperandOffset( |
bytecode_, operand_index)))); |
} else { |
int offset = Bytecodes::GetOperandOffset(bytecode_, operand_index); |
- Node* first_byte = Load(MachineType::Uint8(), BytecodeArrayTaggedPointer(), |
- IntPtrAdd(BytecodeOffset(), Int32Constant(offset))); |
+ Node* first_byte = |
+ Load(MachineType::Uint8(), BytecodeArrayTaggedPointer(), |
+ IntPtrAdd(BytecodeOffset(), IntPtrConstant(offset))); |
Node* second_byte = |
Load(MachineType::Uint8(), BytecodeArrayTaggedPointer(), |
- IntPtrAdd(BytecodeOffset(), Int32Constant(offset + 1))); |
+ IntPtrAdd(BytecodeOffset(), IntPtrConstant(offset + 1))); |
#if V8_TARGET_LITTLE_ENDIAN |
return WordOr(WordShl(second_byte, kBitsPerByte), first_byte); |
#elif V8_TARGET_BIG_ENDIAN |
@@ -176,14 +177,14 @@ Node* InterpreterAssembler::BytecodeOperandShortSignExtended( |
Node* load; |
if (TargetSupportsUnalignedAccess()) { |
load = Load(MachineType::Int16(), BytecodeArrayTaggedPointer(), |
- IntPtrAdd(BytecodeOffset(), Int32Constant(operand_offset))); |
+ IntPtrAdd(BytecodeOffset(), IntPtrConstant(operand_offset))); |
} else { |
#if V8_TARGET_LITTLE_ENDIAN |
- Node* hi_byte_offset = Int32Constant(operand_offset + 1); |
- Node* lo_byte_offset = Int32Constant(operand_offset); |
+ Node* hi_byte_offset = IntPtrConstant(operand_offset + 1); |
+ Node* lo_byte_offset = IntPtrConstant(operand_offset); |
#elif V8_TARGET_BIG_ENDIAN |
- Node* hi_byte_offset = Int32Constant(operand_offset); |
- Node* lo_byte_offset = Int32Constant(operand_offset + 1); |
+ Node* hi_byte_offset = IntPtrConstant(operand_offset); |
+ Node* lo_byte_offset = IntPtrConstant(operand_offset + 1); |
#else |
#error "Unknown Architecture" |
#endif |
@@ -264,14 +265,6 @@ Node* InterpreterAssembler::LoadConstantPoolEntry(Node* index) { |
return Load(MachineType::AnyTagged(), constant_pool, entry_offset); |
} |
-Node* InterpreterAssembler::LoadFixedArrayElement(Node* fixed_array, |
- int index) { |
- Node* entry_offset = |
- IntPtrAdd(IntPtrConstant(FixedArray::kHeaderSize - kHeapObjectTag), |
- WordShl(Int32Constant(index), kPointerSizeLog2)); |
- return Load(MachineType::AnyTagged(), fixed_array, entry_offset); |
-} |
- |
Node* InterpreterAssembler::LoadObjectField(Node* object, int offset) { |
return Load(MachineType::AnyTagged(), object, |
IntPtrConstant(offset - kHeapObjectTag)); |
@@ -285,7 +278,7 @@ Node* InterpreterAssembler::LoadContextSlot(Node* context, int slot_index) { |
Node* InterpreterAssembler::LoadContextSlot(Node* context, Node* slot_index) { |
Node* offset = |
IntPtrAdd(WordShl(slot_index, kPointerSizeLog2), |
- Int32Constant(Context::kHeaderSize - kHeapObjectTag)); |
+ IntPtrConstant(Context::kHeaderSize - kHeapObjectTag)); |
return Load(MachineType::AnyTagged(), context, offset); |
} |
@@ -293,7 +286,7 @@ Node* InterpreterAssembler::StoreContextSlot(Node* context, Node* slot_index, |
Node* value) { |
Node* offset = |
IntPtrAdd(WordShl(slot_index, kPointerSizeLog2), |
- Int32Constant(Context::kHeaderSize - kHeapObjectTag)); |
+ IntPtrConstant(Context::kHeaderSize - kHeapObjectTag)); |
return Store(MachineRepresentation::kTagged, context, offset, value); |
} |
@@ -368,7 +361,7 @@ Node* InterpreterAssembler::CallRuntimeN(Node* function_id, Node* context, |
Node* function = IntPtrAdd(function_table, function_offset); |
Node* function_entry = |
Load(MachineType::Pointer(), function, |
- Int32Constant(offsetof(Runtime::Function, entry))); |
+ IntPtrConstant(offsetof(Runtime::Function, entry))); |
return CallStub(callable.descriptor(), code_target, context, arg_count, |
first_arg, function_entry, result_size); |
@@ -405,7 +398,7 @@ void InterpreterAssembler::UpdateInterruptBudget(Node* weight) { |
} |
Node* InterpreterAssembler::Advance(int delta) { |
- return IntPtrAdd(BytecodeOffset(), Int32Constant(delta)); |
+ return IntPtrAdd(BytecodeOffset(), IntPtrConstant(delta)); |
} |
Node* InterpreterAssembler::Advance(Node* delta) { |
@@ -444,12 +437,15 @@ void InterpreterAssembler::Dispatch() { |
void InterpreterAssembler::DispatchTo(Node* new_bytecode_offset) { |
Node* target_bytecode = Load( |
MachineType::Uint8(), BytecodeArrayTaggedPointer(), new_bytecode_offset); |
+ if (kPointerSize == 8) { |
+ target_bytecode = ChangeUint32ToUint64(target_bytecode); |
+ } |
// TODO(rmcilroy): Create a code target dispatch table to avoid conversion |
// from code object on every dispatch. |
Node* target_code_object = |
Load(MachineType::Pointer(), DispatchTableRawPointer(), |
- Word32Shl(target_bytecode, Int32Constant(kPointerSizeLog2))); |
+ WordShl(target_bytecode, IntPtrConstant(kPointerSizeLog2))); |
DispatchToBytecodeHandler(target_code_object, new_bytecode_offset); |
} |