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); |