| Index: src/a64/lithium-a64.h | 
| diff --git a/src/a64/lithium-a64.h b/src/a64/lithium-a64.h | 
| index aa1c23ac303932eb21c29cf222dff251192964c8..6f718e5b1b4a7c9c6cd653096fbd7e99a7876370 100644 | 
| --- a/src/a64/lithium-a64.h | 
| +++ b/src/a64/lithium-a64.h | 
| @@ -90,6 +90,7 @@ class LCodeGen; | 
| V(DebugBreak)                                 \ | 
| V(DeclareGlobals)                             \ | 
| V(Deoptimize)                                 \ | 
| +  V(DivByConstI)                                \ | 
| V(DivByPowerOf2I)                             \ | 
| V(DivI)                                       \ | 
| V(DoubleBits)                                 \ | 
| @@ -97,6 +98,7 @@ class LCodeGen; | 
| V(Drop)                                       \ | 
| V(Dummy)                                      \ | 
| V(DummyUse)                                   \ | 
| +  V(FlooringDivByConstI)                        \ | 
| V(FlooringDivByPowerOf2I)                     \ | 
| V(FlooringDivI)                               \ | 
| V(ForInCacheArray)                            \ | 
| @@ -143,6 +145,7 @@ class LCodeGen; | 
| V(MathPowHalf)                                \ | 
| V(MathRound)                                  \ | 
| V(MathSqrt)                                   \ | 
| +  V(ModByConstI)                                \ | 
| V(ModByPowerOf2I)                             \ | 
| V(ModI)                                       \ | 
| V(MulConstIS)                                 \ | 
| @@ -1300,6 +1303,26 @@ class LDivByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 
| }; | 
|  | 
|  | 
| +class LDivByConstI V8_FINAL : public LTemplateInstruction<1, 1, 1> { | 
| + public: | 
| +  LDivByConstI(LOperand* dividend, int32_t divisor, LOperand* temp) { | 
| +    inputs_[0] = dividend; | 
| +    divisor_ = divisor; | 
| +    temps_[0] = temp; | 
| +  } | 
| + | 
| +  LOperand* dividend() { return inputs_[0]; } | 
| +  int32_t divisor() const { return divisor_; } | 
| +  LOperand* temp() { return temps_[0]; } | 
| + | 
| +  DECLARE_CONCRETE_INSTRUCTION(DivByConstI, "div-by-const-i") | 
| +  DECLARE_HYDROGEN_ACCESSOR(Div) | 
| + | 
| + private: | 
| +  int32_t divisor_; | 
| +}; | 
| + | 
| + | 
| class LDivI V8_FINAL : public LTemplateInstruction<1, 2, 1> { | 
| public: | 
| LDivI(LOperand* left, LOperand* right, LOperand* temp) { | 
| @@ -1949,6 +1972,25 @@ class LFlooringDivByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 
| }; | 
|  | 
|  | 
| +class LFlooringDivByConstI V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 
| + public: | 
| +  LFlooringDivByConstI(LOperand* dividend, int32_t divisor) { | 
| +    inputs_[0] = dividend; | 
| +    divisor_ = divisor; | 
| +  } | 
| + | 
| +  LOperand* dividend() { return inputs_[0]; } | 
| +  int32_t divisor() const { return divisor_; } | 
| +  LOperand* temp1() { return temps_[0]; } | 
| + | 
| +  DECLARE_CONCRETE_INSTRUCTION(FlooringDivByConstI, "flooring-div-by-const-i") | 
| +  DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) | 
| + | 
| + private: | 
| +  int32_t divisor_; | 
| +}; | 
| + | 
| + | 
| class LFlooringDivI V8_FINAL : public LTemplateInstruction<1, 2, 1> { | 
| public: | 
| LFlooringDivI(LOperand* dividend, LOperand* divisor, LOperand* temp) { | 
| @@ -2040,6 +2082,26 @@ class LModByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 
| }; | 
|  | 
|  | 
| +class LModByConstI V8_FINAL : public LTemplateInstruction<1, 1, 1> { | 
| + public: | 
| +  LModByConstI(LOperand* dividend, int32_t divisor, LOperand* temp) { | 
| +    inputs_[0] = dividend; | 
| +    divisor_ = divisor; | 
| +    temps_[0] = temp; | 
| +  } | 
| + | 
| +  LOperand* dividend() { return inputs_[0]; } | 
| +  int32_t divisor() const { return divisor_; } | 
| +  LOperand* temp() { return temps_[0]; } | 
| + | 
| +  DECLARE_CONCRETE_INSTRUCTION(ModByConstI, "mod-by-const-i") | 
| +  DECLARE_HYDROGEN_ACCESSOR(Mod) | 
| + | 
| + private: | 
| +  int32_t divisor_; | 
| +}; | 
| + | 
| + | 
| class LModI V8_FINAL : public LTemplateInstruction<1, 2, 0> { | 
| public: | 
| LModI(LOperand* left, LOperand* right) { | 
| @@ -2931,10 +2993,13 @@ class LChunkBuilder V8_FINAL : public LChunkBuilderBase { | 
| #undef DECLARE_DO | 
|  | 
| LInstruction* DoDivByPowerOf2I(HDiv* instr); | 
| +  LInstruction* DoDivByConstI(HDiv* instr); | 
| LInstruction* DoDivI(HBinaryOperation* instr); | 
| LInstruction* DoModByPowerOf2I(HMod* instr); | 
| +  LInstruction* DoModByConstI(HMod* instr); | 
| LInstruction* DoModI(HMod* instr); | 
| LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr); | 
| +  LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr); | 
| LInstruction* DoFlooringDivI(HMathFloorOfDiv* instr); | 
|  | 
| static bool HasMagicNumberForDivision(int32_t divisor); | 
|  |