| Index: src/ic/ic.cc
|
| diff --git a/src/ic/ic.cc b/src/ic/ic.cc
|
| index a6ae92a892c06ac9dcc88ecf093a0201e9f0eb12..7a42d23f0c748c6095bb16721c4e9b6cff50b250 100644
|
| --- a/src/ic/ic.cc
|
| +++ b/src/ic/ic.cc
|
| @@ -2568,7 +2568,7 @@ MaybeHandle<Object> BinaryOpIC::Transition(
|
|
|
| // Compute the actual result using the builtin for the binary operation.
|
| Object* builtin = isolate()->js_builtins_object()->javascript_builtin(
|
| - TokenToJSBuiltin(state.op()));
|
| + TokenToJSBuiltin(state.op(), state.language_mode()));
|
| Handle<JSFunction> function = handle(JSFunction::cast(builtin), isolate());
|
| Handle<Object> result;
|
| ASSIGN_RETURN_ON_EXCEPTION(
|
| @@ -2805,43 +2805,62 @@ RUNTIME_FUNCTION(Unreachable) {
|
| }
|
|
|
|
|
| -Builtins::JavaScript BinaryOpIC::TokenToJSBuiltin(Token::Value op) {
|
| - switch (op) {
|
| - default:
|
| - UNREACHABLE();
|
| - case Token::ADD:
|
| - return Builtins::ADD;
|
| - break;
|
| - case Token::SUB:
|
| - return Builtins::SUB;
|
| - break;
|
| - case Token::MUL:
|
| - return Builtins::MUL;
|
| - break;
|
| - case Token::DIV:
|
| - return Builtins::DIV;
|
| - break;
|
| - case Token::MOD:
|
| - return Builtins::MOD;
|
| - break;
|
| - case Token::BIT_OR:
|
| - return Builtins::BIT_OR;
|
| - break;
|
| - case Token::BIT_AND:
|
| - return Builtins::BIT_AND;
|
| - break;
|
| - case Token::BIT_XOR:
|
| - return Builtins::BIT_XOR;
|
| - break;
|
| - case Token::SAR:
|
| - return Builtins::SAR;
|
| - break;
|
| - case Token::SHR:
|
| - return Builtins::SHR;
|
| - break;
|
| - case Token::SHL:
|
| - return Builtins::SHL;
|
| - break;
|
| +Builtins::JavaScript BinaryOpIC::TokenToJSBuiltin(Token::Value op,
|
| + LanguageMode language_mode) {
|
| + if (is_strong(language_mode)) {
|
| + switch (op) {
|
| + default:
|
| + UNREACHABLE();
|
| + case Token::ADD:
|
| + return Builtins::ADD;
|
| + 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;
|
| + 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;
|
| + }
|
| + } 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;
|
| + }
|
| }
|
| }
|
|
|
|
|