Index: src/x64/lithium-x64.h |
diff --git a/src/x64/lithium-x64.h b/src/x64/lithium-x64.h |
index 3185d782e9fe5e5ddeaf97b2377a798d66dc084b..54f117c0d9adafaeb31691af6f6796bd0b277554 100644 |
--- a/src/x64/lithium-x64.h |
+++ b/src/x64/lithium-x64.h |
@@ -133,9 +133,18 @@ class LCodeGen; |
V(LoadNamedField) \ |
V(LoadNamedFieldPolymorphic) \ |
V(LoadNamedGeneric) \ |
+ 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) \ |
@@ -177,7 +186,6 @@ class LCodeGen; |
V(TrapAllocationMemento) \ |
V(Typeof) \ |
V(TypeofIsAndBranch) \ |
- V(UnaryMathOperation) \ |
V(UnknownOSRValue) \ |
V(ValueOf) \ |
V(ForInPrepareMap) \ |
@@ -649,19 +657,90 @@ class LCmpIDAndBranch: public LControlInstruction<2, 0> { |
}; |
-class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> { |
+class LMathFloor: public LTemplateInstruction<1, 1, 0> { |
public: |
- explicit LUnaryMathOperation(LOperand* value) { |
+ explicit LMathFloor(LOperand* value) { |
inputs_[0] = value; |
} |
LOperand* value() { return inputs_[0]; } |
- DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation") |
+ DECLARE_CONCRETE_INSTRUCTION(MathFloor, "math-floor") |
DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) |
+}; |
- virtual void PrintDataTo(StringStream* stream); |
- BuiltinFunctionId op() const { return hydrogen()->op(); } |
+ |
+class LMathRound: public LTemplateInstruction<1, 1, 0> { |
+ public: |
+ explicit LMathRound(LOperand* value) { |
+ inputs_[0] = value; |
+ } |
+ |
+ LOperand* value() { return inputs_[0]; } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") |
+ DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) |
+}; |
+ |
+ |
+class LMathAbs: public LTemplateInstruction<1, 1, 0> { |
+ public: |
+ explicit LMathAbs(LOperand* value) { |
+ inputs_[0] = value; |
+ } |
+ |
+ 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") |
}; |
@@ -679,8 +758,30 @@ class LMathExp: public LTemplateInstruction<1, 1, 2> { |
LOperand* temp2() { return temps_[1]; } |
DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp") |
+}; |
- virtual void PrintDataTo(StringStream* stream); |
+ |
+class LMathSqrt: public LTemplateInstruction<1, 1, 0> { |
+ public: |
+ explicit LMathSqrt(LOperand* value) { |
+ inputs_[0] = value; |
+ } |
+ |
+ LOperand* value() { return inputs_[0]; } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(MathSqrt, "math-sqrt") |
+}; |
+ |
+ |
+class LMathPowHalf: public LTemplateInstruction<1, 1, 0> { |
+ public: |
+ explicit LMathPowHalf(LOperand* value) { |
+ inputs_[0] = value; |
+ } |
+ |
+ LOperand* value() { return inputs_[0]; } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half") |
}; |
@@ -1249,7 +1350,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) |
}; |
@@ -2497,6 +2598,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, |