| Index: src/interpreter/interpreter-assembler.cc
|
| diff --git a/src/interpreter/interpreter-assembler.cc b/src/interpreter/interpreter-assembler.cc
|
| index ab64a360ff946af5b0a23b05055aaf63cbeab6e5..558730bf4d6a496f7a45a9d83f8980d482498b77 100644
|
| --- a/src/interpreter/interpreter-assembler.cc
|
| +++ b/src/interpreter/interpreter-assembler.cc
|
| @@ -1390,20 +1390,24 @@ bool InterpreterAssembler::TargetSupportsUnalignedAccess() {
|
| #endif
|
| }
|
|
|
| -Node* InterpreterAssembler::RegisterCount() {
|
| - Node* bytecode_array = LoadRegister(Register::bytecode_array());
|
| - Node* frame_size = LoadObjectField(
|
| - bytecode_array, BytecodeArray::kFrameSizeOffset, MachineType::Uint32());
|
| - return WordShr(ChangeUint32ToWord(frame_size),
|
| - IntPtrConstant(kPointerSizeLog2));
|
| +void InterpreterAssembler::AbortIfRegisterCountInvalid(Node* register_file,
|
| + Node* register_count) {
|
| + Node* array_size = LoadAndUntagFixedArrayBaseLength(register_file);
|
| +
|
| + Label ok(this), abort(this, Label::kDeferred);
|
| + Branch(UintPtrLessThanOrEqual(register_count, array_size), &ok, &abort);
|
| +
|
| + BIND(&abort);
|
| + Abort(kInvalidRegisterFileInGenerator);
|
| + Goto(&ok);
|
| +
|
| + BIND(&ok);
|
| }
|
|
|
| -Node* InterpreterAssembler::ExportRegisterFile(Node* array) {
|
| - Node* register_count = RegisterCount();
|
| +Node* InterpreterAssembler::ExportRegisterFile(Node* array,
|
| + Node* register_count) {
|
| if (FLAG_debug_code) {
|
| - Node* array_size = LoadAndUntagFixedArrayBaseLength(array);
|
| - AbortIfWordNotEqual(array_size, register_count,
|
| - kInvalidRegisterFileInGenerator);
|
| + AbortIfRegisterCountInvalid(array, register_count);
|
| }
|
|
|
| Variable var_index(this, MachineType::PointerRepresentation());
|
| @@ -1432,12 +1436,10 @@ Node* InterpreterAssembler::ExportRegisterFile(Node* array) {
|
| return array;
|
| }
|
|
|
| -Node* InterpreterAssembler::ImportRegisterFile(Node* array) {
|
| - Node* register_count = RegisterCount();
|
| +Node* InterpreterAssembler::ImportRegisterFile(Node* array,
|
| + Node* register_count) {
|
| if (FLAG_debug_code) {
|
| - Node* array_size = LoadAndUntagFixedArrayBaseLength(array);
|
| - AbortIfWordNotEqual(array_size, register_count,
|
| - kInvalidRegisterFileInGenerator);
|
| + AbortIfRegisterCountInvalid(array, register_count);
|
| }
|
|
|
| Variable var_index(this, MachineType::PointerRepresentation());
|
|
|