| Index: src/ic/ic.cc
|
| diff --git a/src/ic/ic.cc b/src/ic/ic.cc
|
| index b35c2a8aa39ac7989a515789ef985915e42f5f66..e6ee50108bb33699349a0bd32c49454b3c7de5a6 100644
|
| --- a/src/ic/ic.cc
|
| +++ b/src/ic/ic.cc
|
| @@ -2642,8 +2642,8 @@ MaybeHandle<Object> BinaryOpIC::Transition(
|
| BinaryOpICState state(isolate(), target()->extra_ic_state());
|
|
|
| // Compute the actual result using the builtin for the binary operation.
|
| - Object* builtin = isolate()->js_builtins_object()->javascript_builtin(
|
| - TokenToJSBuiltin(state.op(), state.strength()));
|
| + Object* builtin = isolate()->native_context()->get(
|
| + TokenToContextIndex(state.op(), state.strength()));
|
| Handle<JSFunction> function = handle(JSFunction::cast(builtin), isolate());
|
| Handle<Object> result;
|
| ASSIGN_RETURN_ON_EXCEPTION(
|
| @@ -2882,37 +2882,58 @@ RUNTIME_FUNCTION(Runtime_Unreachable) {
|
| }
|
|
|
|
|
| -Builtins::JavaScript BinaryOpIC::TokenToJSBuiltin(Token::Value op,
|
| - Strength strength) {
|
| +int BinaryOpIC::TokenToContextIndex(Token::Value op, Strength strength) {
|
| if (is_strong(strength)) {
|
| switch (op) {
|
| default: UNREACHABLE();
|
| - case Token::ADD: return Builtins::ADD_STRONG;
|
| - case Token::SUB: return Builtins::SUB_STRONG;
|
| - case Token::MUL: return Builtins::MUL_STRONG;
|
| - case Token::DIV: return Builtins::DIV_STRONG;
|
| - case Token::MOD: return Builtins::MOD_STRONG;
|
| - case Token::BIT_OR: return Builtins::BIT_OR_STRONG;
|
| - case Token::BIT_AND: return Builtins::BIT_AND_STRONG;
|
| - case Token::BIT_XOR: return Builtins::BIT_XOR_STRONG;
|
| - case Token::SAR: return Builtins::SAR_STRONG;
|
| - case Token::SHR: return Builtins::SHR_STRONG;
|
| - case Token::SHL: return Builtins::SHL_STRONG;
|
| + case Token::ADD:
|
| + return Context::ADD_STRONG_BUILTIN_INDEX;
|
| + case Token::SUB:
|
| + return Context::SUB_STRONG_BUILTIN_INDEX;
|
| + case Token::MUL:
|
| + return Context::MUL_STRONG_BUILTIN_INDEX;
|
| + case Token::DIV:
|
| + return Context::DIV_STRONG_BUILTIN_INDEX;
|
| + case Token::MOD:
|
| + return Context::MOD_STRONG_BUILTIN_INDEX;
|
| + case Token::BIT_OR:
|
| + return Context::BIT_OR_STRONG_BUILTIN_INDEX;
|
| + case Token::BIT_AND:
|
| + return Context::BIT_AND_STRONG_BUILTIN_INDEX;
|
| + case Token::BIT_XOR:
|
| + return Context::BIT_XOR_STRONG_BUILTIN_INDEX;
|
| + case Token::SAR:
|
| + return Context::SAR_STRONG_BUILTIN_INDEX;
|
| + case Token::SHR:
|
| + return Context::SHR_STRONG_BUILTIN_INDEX;
|
| + case Token::SHL:
|
| + return Context::SHL_STRONG_BUILTIN_INDEX;
|
| }
|
| } else {
|
| switch (op) {
|
| default: UNREACHABLE();
|
| - case Token::ADD: return Builtins::ADD;
|
| - case Token::SUB: return Builtins::SUB;
|
| - case Token::MUL: return Builtins::MUL;
|
| - case Token::DIV: return Builtins::DIV;
|
| - case Token::MOD: return Builtins::MOD;
|
| - case Token::BIT_OR: return Builtins::BIT_OR;
|
| - case Token::BIT_AND: return Builtins::BIT_AND;
|
| - case Token::BIT_XOR: return Builtins::BIT_XOR;
|
| - case Token::SAR: return Builtins::SAR;
|
| - case Token::SHR: return Builtins::SHR;
|
| - case Token::SHL: return Builtins::SHL;
|
| + case Token::ADD:
|
| + return Context::ADD_BUILTIN_INDEX;
|
| + case Token::SUB:
|
| + return Context::SUB_BUILTIN_INDEX;
|
| + case Token::MUL:
|
| + return Context::MUL_BUILTIN_INDEX;
|
| + case Token::DIV:
|
| + return Context::DIV_BUILTIN_INDEX;
|
| + case Token::MOD:
|
| + return Context::MOD_BUILTIN_INDEX;
|
| + case Token::BIT_OR:
|
| + return Context::BIT_OR_BUILTIN_INDEX;
|
| + case Token::BIT_AND:
|
| + return Context::BIT_AND_BUILTIN_INDEX;
|
| + case Token::BIT_XOR:
|
| + return Context::BIT_XOR_BUILTIN_INDEX;
|
| + case Token::SAR:
|
| + return Context::SAR_BUILTIN_INDEX;
|
| + case Token::SHR:
|
| + return Context::SHR_BUILTIN_INDEX;
|
| + case Token::SHL:
|
| + return Context::SHL_BUILTIN_INDEX;
|
| }
|
| }
|
| }
|
|
|