| Index: src/interpreter/interpreter-intrinsics.cc
|
| diff --git a/src/interpreter/interpreter-intrinsics.cc b/src/interpreter/interpreter-intrinsics.cc
|
| index b46ca878ccc35757b3826f25f0b1d097a03c6206..d3717d96e66ca8d69c99523daf42af02158bb70f 100644
|
| --- a/src/interpreter/interpreter-intrinsics.cc
|
| +++ b/src/interpreter/interpreter-intrinsics.cc
|
| @@ -81,7 +81,8 @@ Node* IntrinsicsHelper::InvokeIntrinsic(Node* function_id, Node* context,
|
| int32_t cases[] = {INTRINSICS_LIST(CASE)};
|
| #undef CASE
|
|
|
| - __ Switch(function_id, &abort, cases, labels, arraysize(cases));
|
| + __ Switch(__ TruncateWordToWord32(function_id), &abort, cases, labels,
|
| + arraysize(cases));
|
| #define HANDLE_CASE(name, lower_case, expected_arg_count) \
|
| __ Bind(&lower_case); \
|
| if (FLAG_debug_code && expected_arg_count >= 0) { \
|
| @@ -105,12 +106,8 @@ Node* IntrinsicsHelper::InvokeIntrinsic(Node* function_id, Node* context,
|
|
|
| Node* IntrinsicsHelper::CompareInstanceType(Node* object, int type,
|
| InstanceTypeCompareMode mode) {
|
| - InterpreterAssembler::Variable return_value(assembler_,
|
| - MachineRepresentation::kTagged);
|
| Node* instance_type = __ LoadInstanceType(object);
|
|
|
| - InterpreterAssembler::Label if_true(assembler_), if_false(assembler_),
|
| - end(assembler_);
|
| if (mode == kInstanceTypeEqual) {
|
| return __ Word32Equal(instance_type, __ Int32Constant(type));
|
| } else {
|
| @@ -122,6 +119,7 @@ Node* IntrinsicsHelper::CompareInstanceType(Node* object, int type,
|
| Node* IntrinsicsHelper::IsInstanceType(Node* input, int type) {
|
| InterpreterAssembler::Variable return_value(assembler_,
|
| MachineRepresentation::kTagged);
|
| + // TODO(ishell): Use Select here.
|
| InterpreterAssembler::Label if_not_smi(assembler_), return_true(assembler_),
|
| return_false(assembler_), end(assembler_);
|
| Node* arg = __ LoadRegister(input);
|
| @@ -148,6 +146,8 @@ Node* IntrinsicsHelper::IsInstanceType(Node* input, int type) {
|
|
|
| Node* IntrinsicsHelper::IsJSReceiver(Node* input, Node* arg_count,
|
| Node* context) {
|
| + // TODO(ishell): Use Select here.
|
| + // TODO(ishell): Use CSA::IsJSReceiverInstanceType here.
|
| InterpreterAssembler::Variable return_value(assembler_,
|
| MachineRepresentation::kTagged);
|
| InterpreterAssembler::Label return_true(assembler_), return_false(assembler_),
|
| @@ -195,6 +195,7 @@ Node* IntrinsicsHelper::IsTypedArray(Node* input, Node* arg_count,
|
| }
|
|
|
| Node* IntrinsicsHelper::IsSmi(Node* input, Node* arg_count, Node* context) {
|
| + // TODO(ishell): Use SelectBooleanConstant here.
|
| InterpreterAssembler::Variable return_value(assembler_,
|
| MachineRepresentation::kTagged);
|
| InterpreterAssembler::Label if_smi(assembler_), if_not_smi(assembler_),
|
| @@ -288,12 +289,14 @@ Node* IntrinsicsHelper::Call(Node* args_reg, Node* arg_count, Node* context) {
|
| Node* receiver_arg = __ RegisterLocation(receiver_reg);
|
|
|
| // Subtract function and receiver from arg count.
|
| - Node* function_and_receiver_count = __ Int32Constant(2);
|
| - Node* target_args_count = __ Int32Sub(arg_count, function_and_receiver_count);
|
| + Node* function_and_receiver_count = __ IntPtrConstant(2);
|
| + Node* target_args_count =
|
| + __ IntPtrSub(arg_count, function_and_receiver_count);
|
|
|
| if (FLAG_debug_code) {
|
| InterpreterAssembler::Label arg_count_positive(assembler_);
|
| - Node* comparison = __ Int32LessThan(target_args_count, __ Int32Constant(0));
|
| + Node* comparison =
|
| + __ IntPtrLessThan(target_args_count, __ IntPtrConstant(0));
|
| __ GotoUnless(comparison, &arg_count_positive);
|
| __ Abort(kWrongArgumentCountForInvokeIntrinsic);
|
| __ Goto(&arg_count_positive);
|
| @@ -392,7 +395,7 @@ Node* IntrinsicsHelper::ClassOf(Node* args_reg, Node* arg_count,
|
|
|
| void IntrinsicsHelper::AbortIfArgCountMismatch(int expected, Node* actual) {
|
| InterpreterAssembler::Label match(assembler_);
|
| - Node* comparison = __ Word32Equal(actual, __ Int32Constant(expected));
|
| + Node* comparison = __ WordEqual(actual, __ IntPtrConstant(expected));
|
| __ GotoIf(comparison, &match);
|
| __ Abort(kWrongArgumentCountForInvokeIntrinsic);
|
| __ Goto(&match);
|
|
|