| Index: src/ia32/lithium-ia32.h
|
| diff --git a/src/ia32/lithium-ia32.h b/src/ia32/lithium-ia32.h
|
| index 068df1c0f248e5da977bd82f0cfe2a78f610a615..10272fd4258a46a56de5d6d58de09d4535f9fb45 100644
|
| --- a/src/ia32/lithium-ia32.h
|
| +++ b/src/ia32/lithium-ia32.h
|
| @@ -128,11 +128,18 @@ class LCodeGen;
|
| V(LoadNamedFieldPolymorphic) \
|
| V(LoadNamedGeneric) \
|
| V(MapEnumLength) \
|
| + V(MathAbs) \
|
| + V(MathCos) \
|
| V(MathExp) \
|
| + V(MathFloor) \
|
| V(MathFloorOfDiv) \
|
| + V(MathLog) \
|
| V(MathMinMax) \
|
| V(MathPowHalf) \
|
| V(MathRound) \
|
| + V(MathSin) \
|
| + V(MathSqrt) \
|
| + V(MathTan) \
|
| V(ModI) \
|
| V(MulI) \
|
| V(NumberTagD) \
|
| @@ -175,7 +182,6 @@ class LCodeGen;
|
| V(TrapAllocationMemento) \
|
| V(Typeof) \
|
| V(TypeofIsAndBranch) \
|
| - V(UnaryMathOperation) \
|
| V(UnknownOSRValue) \
|
| V(ValueOf) \
|
| V(ForInPrepareMap) \
|
| @@ -649,21 +655,96 @@ class LCmpIDAndBranch: public LControlInstruction<2, 0> {
|
| };
|
|
|
|
|
| -class LUnaryMathOperation: public LTemplateInstruction<1, 2, 0> {
|
| +class LMathFloor: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| - LUnaryMathOperation(LOperand* context, LOperand* value) {
|
| + explicit LMathFloor(LOperand* value) {
|
| + inputs_[0] = value;
|
| + }
|
| +
|
| + LOperand* value() { return inputs_[0]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(MathFloor, "math-floor")
|
| + DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
|
| +};
|
| +
|
| +
|
| +class LMathRound: public LTemplateInstruction<1, 2, 1> {
|
| + public:
|
| + LMathRound(LOperand* context, LOperand* value, LOperand* temp) {
|
| inputs_[1] = context;
|
| inputs_[0] = value;
|
| + temps_[0] = temp;
|
| }
|
|
|
| LOperand* context() { return inputs_[1]; }
|
| LOperand* value() { return inputs_[0]; }
|
| + LOperand* temp() { return temps_[0]; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation")
|
| + DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round")
|
| DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
|
| +};
|
|
|
| - virtual void PrintDataTo(StringStream* stream);
|
| - BuiltinFunctionId op() const { return hydrogen()->op(); }
|
| +
|
| +class LMathAbs: public LTemplateInstruction<1, 2, 0> {
|
| + public:
|
| + LMathAbs(LOperand* context, LOperand* value) {
|
| + inputs_[1] = context;
|
| + inputs_[0] = value;
|
| + }
|
| +
|
| + LOperand* context() { return inputs_[1]; }
|
| + LOperand* value() { return inputs_[0]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs")
|
| + DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
|
| +};
|
| +
|
| +
|
| +class LMathLog: public LTemplateInstruction<1, 1, 0> {
|
| + public:
|
| + explicit LMathLog(LOperand* value) {
|
| + inputs_[0] = value;
|
| + }
|
| +
|
| + LOperand* value() { return inputs_[0]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(MathLog, "math-log")
|
| +};
|
| +
|
| +
|
| +class LMathSin: public LTemplateInstruction<1, 1, 0> {
|
| + public:
|
| + explicit LMathSin(LOperand* value) {
|
| + inputs_[0] = value;
|
| + }
|
| +
|
| + LOperand* value() { return inputs_[0]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(MathSin, "math-sin")
|
| +};
|
| +
|
| +
|
| +class LMathCos: public LTemplateInstruction<1, 1, 0> {
|
| + public:
|
| + explicit LMathCos(LOperand* value) {
|
| + inputs_[0] = value;
|
| + }
|
| +
|
| + LOperand* value() { return inputs_[0]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(MathCos, "math-cos")
|
| +};
|
| +
|
| +
|
| +class LMathTan: public LTemplateInstruction<1, 1, 0> {
|
| + public:
|
| + explicit LMathTan(LOperand* value) {
|
| + inputs_[0] = value;
|
| + }
|
| +
|
| + LOperand* value() { return inputs_[0]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(MathTan, "math-tan")
|
| };
|
|
|
|
|
| @@ -683,32 +764,24 @@ class LMathExp: public LTemplateInstruction<1, 1, 2> {
|
| LOperand* temp2() { return temps_[1]; }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp")
|
| -
|
| - virtual void PrintDataTo(StringStream* stream);
|
| };
|
|
|
|
|
| -class LMathPowHalf: public LTemplateInstruction<1, 2, 1> {
|
| +class LMathSqrt: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| - LMathPowHalf(LOperand* context, LOperand* value, LOperand* temp) {
|
| - inputs_[1] = context;
|
| + explicit LMathSqrt(LOperand* value) {
|
| inputs_[0] = value;
|
| - temps_[0] = temp;
|
| }
|
|
|
| - LOperand* context() { return inputs_[1]; }
|
| LOperand* value() { return inputs_[0]; }
|
| - LOperand* temp() { return temps_[0]; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half")
|
| -
|
| - virtual void PrintDataTo(StringStream* stream);
|
| + DECLARE_CONCRETE_INSTRUCTION(MathSqrt, "math-sqrt")
|
| };
|
|
|
|
|
| -class LMathRound: public LTemplateInstruction<1, 2, 1> {
|
| +class LMathPowHalf: public LTemplateInstruction<1, 2, 1> {
|
| public:
|
| - LMathRound(LOperand* context, LOperand* value, LOperand* temp) {
|
| + LMathPowHalf(LOperand* context, LOperand* value, LOperand* temp) {
|
| inputs_[1] = context;
|
| inputs_[0] = value;
|
| temps_[0] = temp;
|
| @@ -718,10 +791,7 @@ class LMathRound: public LTemplateInstruction<1, 2, 1> {
|
| LOperand* value() { return inputs_[0]; }
|
| LOperand* temp() { return temps_[0]; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round")
|
| - DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
|
| -
|
| - virtual void PrintDataTo(StringStream* stream);
|
| + DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half")
|
| };
|
|
|
|
|
| @@ -1304,7 +1374,7 @@ class LMathMinMax: public LTemplateInstruction<1, 2, 0> {
|
| LOperand* left() { return inputs_[0]; }
|
| LOperand* right() { return inputs_[1]; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "min-max")
|
| + DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "math-min-max")
|
| DECLARE_HYDROGEN_ACCESSOR(MathMinMax)
|
| };
|
|
|
| @@ -2760,6 +2830,17 @@ class LChunkBuilder BASE_EMBEDDED {
|
| static HValue* SimplifiedDividendForMathFloorOfDiv(HValue* val);
|
| static HValue* SimplifiedDivisorForMathFloorOfDiv(HValue* val);
|
|
|
| + LInstruction* DoMathFloor(HUnaryMathOperation* instr);
|
| + LInstruction* DoMathRound(HUnaryMathOperation* instr);
|
| + LInstruction* DoMathAbs(HUnaryMathOperation* instr);
|
| + LInstruction* DoMathLog(HUnaryMathOperation* instr);
|
| + LInstruction* DoMathSin(HUnaryMathOperation* instr);
|
| + LInstruction* DoMathCos(HUnaryMathOperation* instr);
|
| + LInstruction* DoMathTan(HUnaryMathOperation* instr);
|
| + LInstruction* DoMathExp(HUnaryMathOperation* instr);
|
| + LInstruction* DoMathSqrt(HUnaryMathOperation* instr);
|
| + LInstruction* DoMathPowHalf(HUnaryMathOperation* instr);
|
| +
|
| private:
|
| enum Status {
|
| UNUSED,
|
|
|