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, |