Chromium Code Reviews| Index: src/ic/ic-state.cc |
| diff --git a/src/ic/ic-state.cc b/src/ic/ic-state.cc |
| index 37822e523a278dac1467e011f8d558bc8ee248e1..bcb1c96c40f8ce0499737d4f0eac3378eb0dcd0a 100644 |
| --- a/src/ic/ic-state.cc |
| +++ b/src/ic/ic-state.cc |
| @@ -48,7 +48,6 @@ BinaryOpICState::BinaryOpICState(Isolate* isolate, ExtraICState extra_ic_state) |
| : isolate_(isolate) { |
| op_ = |
| static_cast<Token::Value>(FIRST_TOKEN + OpField::decode(extra_ic_state)); |
| - mode_ = OverwriteModeField::decode(extra_ic_state); |
| fixed_right_arg_ = |
| Maybe<int>(HasFixedRightArgField::decode(extra_ic_state), |
| 1 << FixedRightArgValueField::decode(extra_ic_state)); |
| @@ -66,8 +65,7 @@ BinaryOpICState::BinaryOpICState(Isolate* isolate, ExtraICState extra_ic_state) |
| ExtraICState BinaryOpICState::GetExtraICState() const { |
| ExtraICState extra_ic_state = |
| - OpField::encode(op_ - FIRST_TOKEN) | OverwriteModeField::encode(mode_) | |
| - LeftKindField::encode(left_kind_) | |
| + OpField::encode(op_ - FIRST_TOKEN) | LeftKindField::encode(left_kind_) | |
| ResultKindField::encode(result_kind_) | |
| HasFixedRightArgField::encode(fixed_right_arg_.has_value); |
| if (fixed_right_arg_.has_value) { |
| @@ -87,218 +85,106 @@ void BinaryOpICState::GenerateAheadOfTime( |
| // expensive at runtime. When solved we should be able to add most binops to |
| // the snapshot instead of hand-picking them. |
| // Generated list of commonly used stubs |
| -#define GENERATE(op, left_kind, right_kind, result_kind, mode) \ |
| - do { \ |
| - BinaryOpICState state(isolate, op, mode); \ |
| - state.left_kind_ = left_kind; \ |
| - state.fixed_right_arg_.has_value = false; \ |
| - state.right_kind_ = right_kind; \ |
| - state.result_kind_ = result_kind; \ |
| - Generate(isolate, state); \ |
| +#define GENERATE(op, left_kind, right_kind, result_kind) \ |
| + do { \ |
| + BinaryOpICState state(isolate, op); \ |
| + state.left_kind_ = left_kind; \ |
| + state.fixed_right_arg_.has_value = false; \ |
| + state.right_kind_ = right_kind; \ |
| + state.result_kind_ = result_kind; \ |
| + Generate(isolate, state); \ |
| } while (false) |
| - GENERATE(Token::ADD, INT32, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::ADD, INT32, INT32, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::ADD, INT32, INT32, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::ADD, INT32, INT32, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::ADD, INT32, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::ADD, INT32, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::ADD, INT32, NUMBER, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::ADD, INT32, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::ADD, INT32, SMI, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::ADD, INT32, SMI, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::ADD, NUMBER, INT32, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::ADD, NUMBER, INT32, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::ADD, NUMBER, INT32, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::ADD, NUMBER, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::ADD, NUMBER, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::ADD, NUMBER, NUMBER, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::ADD, NUMBER, SMI, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::ADD, NUMBER, SMI, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::ADD, NUMBER, SMI, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::ADD, SMI, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::ADD, SMI, INT32, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::ADD, SMI, INT32, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::ADD, SMI, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::ADD, SMI, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::ADD, SMI, NUMBER, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::ADD, SMI, SMI, INT32, OVERWRITE_LEFT); |
|
Jakob Kummerow
2015/02/05 10:21:57
I would assume that we want to keep the SMI,SMI,IN
Benedikt Meurer
2015/02/05 10:32:29
Done.
|
| - GENERATE(Token::ADD, SMI, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_AND, INT32, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::BIT_AND, INT32, INT32, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_AND, INT32, INT32, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_AND, INT32, INT32, SMI, NO_OVERWRITE); |
| - GENERATE(Token::BIT_AND, INT32, INT32, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_AND, INT32, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::BIT_AND, INT32, SMI, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_AND, INT32, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::BIT_AND, INT32, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_AND, INT32, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_AND, NUMBER, INT32, INT32, OVERWRITE_RIGHT); |
|
Jakob Kummerow
2015/02/05 10:21:57
keep this?
Benedikt Meurer
2015/02/05 10:32:29
Done.
|
| - GENERATE(Token::BIT_AND, NUMBER, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::BIT_AND, NUMBER, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_AND, SMI, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::BIT_AND, SMI, INT32, SMI, OVERWRITE_RIGHT); |
|
Jakob Kummerow
2015/02/05 10:21:57
keep this?
Benedikt Meurer
2015/02/05 10:32:29
Done.
|
| - GENERATE(Token::BIT_AND, SMI, NUMBER, SMI, OVERWRITE_RIGHT); |
|
Jakob Kummerow
2015/02/05 10:21:57
keep this?
Ah, you know what, instead of manually
Benedikt Meurer
2015/02/05 10:32:29
Done.
|
| - GENERATE(Token::BIT_AND, SMI, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::BIT_AND, SMI, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_AND, SMI, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_OR, INT32, INT32, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_OR, INT32, INT32, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_OR, INT32, INT32, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_OR, INT32, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::BIT_OR, INT32, SMI, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_OR, INT32, SMI, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_OR, INT32, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::BIT_OR, INT32, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_OR, NUMBER, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::BIT_OR, NUMBER, SMI, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_OR, NUMBER, SMI, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_OR, NUMBER, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::BIT_OR, NUMBER, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_OR, SMI, INT32, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_OR, SMI, INT32, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_OR, SMI, INT32, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_OR, SMI, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_OR, SMI, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_XOR, INT32, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::BIT_XOR, INT32, INT32, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_XOR, INT32, INT32, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_XOR, INT32, INT32, SMI, NO_OVERWRITE); |
| - GENERATE(Token::BIT_XOR, INT32, INT32, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_XOR, INT32, NUMBER, SMI, NO_OVERWRITE); |
| - GENERATE(Token::BIT_XOR, INT32, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::BIT_XOR, INT32, SMI, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_XOR, INT32, SMI, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::BIT_XOR, NUMBER, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::BIT_XOR, NUMBER, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::BIT_XOR, NUMBER, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::BIT_XOR, SMI, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::BIT_XOR, SMI, INT32, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_XOR, SMI, INT32, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_XOR, SMI, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::BIT_XOR, SMI, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::BIT_XOR, SMI, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::DIV, INT32, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::DIV, INT32, INT32, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::DIV, INT32, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::DIV, INT32, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::DIV, INT32, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::DIV, INT32, SMI, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::DIV, NUMBER, INT32, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::DIV, NUMBER, INT32, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::DIV, NUMBER, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::DIV, NUMBER, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::DIV, NUMBER, NUMBER, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::DIV, NUMBER, SMI, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::DIV, NUMBER, SMI, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::DIV, SMI, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::DIV, SMI, INT32, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::DIV, SMI, INT32, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::DIV, SMI, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::DIV, SMI, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::DIV, SMI, NUMBER, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::DIV, SMI, SMI, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::DIV, SMI, SMI, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::DIV, SMI, SMI, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::DIV, SMI, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::DIV, SMI, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::DIV, SMI, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::MOD, NUMBER, SMI, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::MOD, SMI, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::MOD, SMI, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::MUL, INT32, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::MUL, INT32, INT32, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::MUL, INT32, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::MUL, INT32, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::MUL, INT32, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::MUL, INT32, SMI, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::MUL, INT32, SMI, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::MUL, NUMBER, INT32, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::MUL, NUMBER, INT32, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::MUL, NUMBER, INT32, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::MUL, NUMBER, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::MUL, NUMBER, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::MUL, NUMBER, SMI, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::MUL, NUMBER, SMI, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::MUL, NUMBER, SMI, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::MUL, SMI, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::MUL, SMI, INT32, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::MUL, SMI, INT32, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::MUL, SMI, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::MUL, SMI, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::MUL, SMI, NUMBER, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::MUL, SMI, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::MUL, SMI, SMI, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::MUL, SMI, SMI, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::MUL, SMI, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::MUL, SMI, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::MUL, SMI, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::SAR, INT32, SMI, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::SAR, INT32, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::SAR, INT32, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::SAR, NUMBER, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::SAR, NUMBER, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::SAR, SMI, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::SAR, SMI, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::SHL, INT32, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::SHL, INT32, SMI, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::SHL, INT32, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::SHL, INT32, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::SHL, NUMBER, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::SHL, SMI, SMI, INT32, NO_OVERWRITE); |
| - GENERATE(Token::SHL, SMI, SMI, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::SHL, SMI, SMI, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::SHL, SMI, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::SHL, SMI, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::SHL, SMI, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::SHR, INT32, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::SHR, INT32, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::SHR, INT32, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::SHR, NUMBER, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::SHR, NUMBER, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::SHR, NUMBER, SMI, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::SHR, SMI, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::SHR, SMI, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::SHR, SMI, SMI, SMI, OVERWRITE_RIGHT); |
| - GENERATE(Token::SUB, INT32, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::SUB, INT32, INT32, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::SUB, INT32, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::SUB, INT32, NUMBER, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::SUB, INT32, SMI, INT32, OVERWRITE_LEFT); |
| - GENERATE(Token::SUB, INT32, SMI, INT32, OVERWRITE_RIGHT); |
| - GENERATE(Token::SUB, NUMBER, INT32, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::SUB, NUMBER, INT32, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::SUB, NUMBER, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::SUB, NUMBER, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::SUB, NUMBER, NUMBER, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::SUB, NUMBER, SMI, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::SUB, NUMBER, SMI, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::SUB, NUMBER, SMI, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::SUB, SMI, INT32, INT32, NO_OVERWRITE); |
| - GENERATE(Token::SUB, SMI, NUMBER, NUMBER, NO_OVERWRITE); |
| - GENERATE(Token::SUB, SMI, NUMBER, NUMBER, OVERWRITE_LEFT); |
| - GENERATE(Token::SUB, SMI, NUMBER, NUMBER, OVERWRITE_RIGHT); |
| - GENERATE(Token::SUB, SMI, SMI, SMI, NO_OVERWRITE); |
| - GENERATE(Token::SUB, SMI, SMI, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::SUB, SMI, SMI, SMI, OVERWRITE_RIGHT); |
| + GENERATE(Token::ADD, INT32, INT32, INT32); |
| + GENERATE(Token::ADD, INT32, INT32, NUMBER); |
| + GENERATE(Token::ADD, INT32, NUMBER, NUMBER); |
| + GENERATE(Token::ADD, INT32, SMI, INT32); |
| + GENERATE(Token::ADD, NUMBER, INT32, NUMBER); |
| + GENERATE(Token::ADD, NUMBER, NUMBER, NUMBER); |
| + GENERATE(Token::ADD, NUMBER, SMI, NUMBER); |
| + GENERATE(Token::ADD, SMI, INT32, INT32); |
| + GENERATE(Token::ADD, SMI, INT32, NUMBER); |
| + GENERATE(Token::ADD, SMI, NUMBER, NUMBER); |
| + GENERATE(Token::BIT_AND, INT32, INT32, INT32); |
| + GENERATE(Token::BIT_AND, INT32, INT32, SMI); |
| + GENERATE(Token::BIT_AND, INT32, SMI, INT32); |
| + GENERATE(Token::BIT_AND, INT32, SMI, SMI); |
| + GENERATE(Token::BIT_AND, NUMBER, SMI, SMI); |
| + GENERATE(Token::BIT_AND, SMI, INT32, INT32); |
| + GENERATE(Token::BIT_AND, SMI, SMI, SMI); |
| + GENERATE(Token::BIT_OR, INT32, SMI, INT32); |
| + GENERATE(Token::BIT_OR, INT32, SMI, SMI); |
| + GENERATE(Token::BIT_OR, NUMBER, SMI, INT32); |
| + GENERATE(Token::BIT_OR, NUMBER, SMI, SMI); |
| + GENERATE(Token::BIT_XOR, INT32, INT32, INT32); |
| + GENERATE(Token::BIT_XOR, INT32, INT32, SMI); |
| + GENERATE(Token::BIT_XOR, INT32, NUMBER, SMI); |
| + GENERATE(Token::BIT_XOR, INT32, SMI, INT32); |
| + GENERATE(Token::BIT_XOR, NUMBER, INT32, INT32); |
| + GENERATE(Token::BIT_XOR, NUMBER, SMI, INT32); |
| + GENERATE(Token::BIT_XOR, NUMBER, SMI, SMI); |
| + GENERATE(Token::BIT_XOR, SMI, INT32, INT32); |
| + GENERATE(Token::BIT_XOR, SMI, SMI, SMI); |
| + GENERATE(Token::DIV, INT32, INT32, INT32); |
| + GENERATE(Token::DIV, INT32, INT32, NUMBER); |
| + GENERATE(Token::DIV, INT32, NUMBER, NUMBER); |
| + GENERATE(Token::DIV, INT32, SMI, INT32); |
| + GENERATE(Token::DIV, INT32, SMI, NUMBER); |
| + GENERATE(Token::DIV, NUMBER, INT32, NUMBER); |
| + GENERATE(Token::DIV, NUMBER, NUMBER, NUMBER); |
| + GENERATE(Token::DIV, NUMBER, SMI, NUMBER); |
| + GENERATE(Token::DIV, SMI, INT32, INT32); |
| + GENERATE(Token::DIV, SMI, INT32, NUMBER); |
| + GENERATE(Token::DIV, SMI, NUMBER, NUMBER); |
| + GENERATE(Token::DIV, SMI, SMI, NUMBER); |
| + GENERATE(Token::DIV, SMI, SMI, SMI); |
| + GENERATE(Token::MOD, SMI, SMI, SMI); |
| + GENERATE(Token::MUL, INT32, INT32, INT32); |
| + GENERATE(Token::MUL, INT32, INT32, NUMBER); |
| + GENERATE(Token::MUL, INT32, NUMBER, NUMBER); |
| + GENERATE(Token::MUL, INT32, SMI, INT32); |
| + GENERATE(Token::MUL, INT32, SMI, NUMBER); |
| + GENERATE(Token::MUL, NUMBER, INT32, NUMBER); |
| + GENERATE(Token::MUL, NUMBER, NUMBER, NUMBER); |
| + GENERATE(Token::MUL, NUMBER, SMI, NUMBER); |
| + GENERATE(Token::MUL, SMI, INT32, INT32); |
| + GENERATE(Token::MUL, SMI, INT32, NUMBER); |
| + GENERATE(Token::MUL, SMI, NUMBER, NUMBER); |
| + GENERATE(Token::MUL, SMI, SMI, INT32); |
| + GENERATE(Token::MUL, SMI, SMI, NUMBER); |
| + GENERATE(Token::MUL, SMI, SMI, SMI); |
| + GENERATE(Token::SAR, INT32, SMI, SMI); |
| + GENERATE(Token::SAR, NUMBER, SMI, SMI); |
| + GENERATE(Token::SHL, INT32, SMI, INT32); |
| + GENERATE(Token::SHL, INT32, SMI, SMI); |
| + GENERATE(Token::SHL, SMI, SMI, INT32); |
| + GENERATE(Token::SHL, SMI, SMI, SMI); |
| + GENERATE(Token::SHR, INT32, SMI, SMI); |
| + GENERATE(Token::SHR, NUMBER, SMI, SMI); |
| + GENERATE(Token::SHR, SMI, SMI, SMI); |
| + GENERATE(Token::SUB, INT32, INT32, INT32); |
| + GENERATE(Token::SUB, INT32, NUMBER, NUMBER); |
| + GENERATE(Token::SUB, NUMBER, INT32, NUMBER); |
| + GENERATE(Token::SUB, NUMBER, NUMBER, NUMBER); |
| + GENERATE(Token::SUB, NUMBER, SMI, NUMBER); |
| + GENERATE(Token::SUB, SMI, INT32, INT32); |
| + GENERATE(Token::SUB, SMI, NUMBER, NUMBER); |
| + GENERATE(Token::SUB, SMI, SMI, SMI); |
| #undef GENERATE |
| -#define GENERATE(op, left_kind, fixed_right_arg_value, result_kind, mode) \ |
| - do { \ |
| - BinaryOpICState state(isolate, op, mode); \ |
| - state.left_kind_ = left_kind; \ |
| - state.fixed_right_arg_.has_value = true; \ |
| - state.fixed_right_arg_.value = fixed_right_arg_value; \ |
| - state.right_kind_ = SMI; \ |
| - state.result_kind_ = result_kind; \ |
| - Generate(isolate, state); \ |
| +#define GENERATE(op, left_kind, fixed_right_arg_value, result_kind) \ |
| + do { \ |
| + BinaryOpICState state(isolate, op); \ |
| + state.left_kind_ = left_kind; \ |
| + state.fixed_right_arg_.has_value = true; \ |
| + state.fixed_right_arg_.value = fixed_right_arg_value; \ |
| + state.right_kind_ = SMI; \ |
| + state.result_kind_ = result_kind; \ |
| + Generate(isolate, state); \ |
| } while (false) |
| - GENERATE(Token::MOD, SMI, 2, SMI, NO_OVERWRITE); |
| - GENERATE(Token::MOD, SMI, 4, SMI, NO_OVERWRITE); |
| - GENERATE(Token::MOD, SMI, 4, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::MOD, SMI, 8, SMI, NO_OVERWRITE); |
| - GENERATE(Token::MOD, SMI, 16, SMI, OVERWRITE_LEFT); |
| - GENERATE(Token::MOD, SMI, 32, SMI, NO_OVERWRITE); |
| - GENERATE(Token::MOD, SMI, 2048, SMI, NO_OVERWRITE); |
| + GENERATE(Token::MOD, SMI, 2, SMI); |
| + GENERATE(Token::MOD, SMI, 4, SMI); |
| + GENERATE(Token::MOD, SMI, 8, SMI); |
| + GENERATE(Token::MOD, SMI, 32, SMI); |
| + GENERATE(Token::MOD, SMI, 2048, SMI); |
| #undef GENERATE |
| } |
| @@ -319,10 +205,6 @@ Type* BinaryOpICState::GetResultType(Zone* zone) const { |
| std::ostream& operator<<(std::ostream& os, const BinaryOpICState& s) { |
| os << "(" << Token::Name(s.op_); |
| - if (s.mode_ == OVERWRITE_LEFT) |
| - os << "_ReuseLeft"; |
| - else if (s.mode_ == OVERWRITE_RIGHT) |
| - os << "_ReuseRight"; |
| if (s.CouldCreateAllocationMementos()) os << "_CreateAllocationMementos"; |
| os << ":" << BinaryOpICState::KindToString(s.left_kind_) << "*"; |
| if (s.fixed_right_arg_.has_value) { |
| @@ -372,14 +254,6 @@ void BinaryOpICState::Update(Handle<Object> left, Handle<Object> right, |
| left_kind_ = NUMBER; |
| } |
| - // Reset overwrite mode unless we can actually make use of it, or may be able |
| - // to make use of it at some point in the future. |
| - if ((mode_ == OVERWRITE_LEFT && left_kind_ > NUMBER) || |
| - (mode_ == OVERWRITE_RIGHT && right_kind_ > NUMBER) || |
| - result_kind_ > NUMBER) { |
| - mode_ = NO_OVERWRITE; |
| - } |
| - |
| if (old_extra_ic_state == GetExtraICState()) { |
| // Tagged operations can lead to non-truncating HChanges |
| if (left->IsUndefined() || left->IsBoolean()) { |