| Index: src/ia32/lithium-ia32.h
|
| diff --git a/src/ia32/lithium-ia32.h b/src/ia32/lithium-ia32.h
|
| index a016cfb036af81f7c69bdf946515d03a55450475..b0d031a737e18cba8464ba1a5e4d3127955e2209 100644
|
| --- a/src/ia32/lithium-ia32.h
|
| +++ b/src/ia32/lithium-ia32.h
|
| @@ -74,6 +74,7 @@ class LCodeGen;
|
| V(ClampTToUint8NoSSE2) \
|
| V(ClassOfTestAndBranch) \
|
| V(ClobberDoubles) \
|
| + V(CompareMinusZeroAndBranch) \
|
| V(CompareNumericAndBranch) \
|
| V(CmpObjectEqAndBranch) \
|
| V(CmpHoleAndBranch) \
|
| @@ -93,6 +94,7 @@ class LCodeGen;
|
| V(DoubleToI) \
|
| V(DoubleToSmi) \
|
| V(Drop) \
|
| + V(Dummy) \
|
| V(DummyUse) \
|
| V(ElementsKind) \
|
| V(ForInCacheArray) \
|
| @@ -156,6 +158,7 @@ class LCodeGen;
|
| V(PushArgument) \
|
| V(RegExpLiteral) \
|
| V(Return) \
|
| + V(SeqStringGetChar) \
|
| V(SeqStringSetChar) \
|
| V(ShiftI) \
|
| V(SmiTag) \
|
| @@ -183,6 +186,7 @@ class LCodeGen;
|
| V(Typeof) \
|
| V(TypeofIsAndBranch) \
|
| V(Uint32ToDouble) \
|
| + V(Uint32ToSmi) \
|
| V(UnknownOSRValue) \
|
| V(ValueOf) \
|
| V(WrapReceiver)
|
| @@ -430,6 +434,13 @@ class LLazyBailout V8_FINAL : public LTemplateInstruction<0, 0, 0> {
|
| };
|
|
|
|
|
| +class LDummy V8_FINAL : public LTemplateInstruction<1, 0, 0> {
|
| + public:
|
| + explicit LDummy() { }
|
| + DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy")
|
| +};
|
| +
|
| +
|
| class LDummyUse V8_FINAL : public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| explicit LDummyUse(LOperand* value) {
|
| @@ -740,15 +751,13 @@ class LMathFloor V8_FINAL : public LTemplateInstruction<1, 1, 0> {
|
| };
|
|
|
|
|
| -class LMathRound V8_FINAL : public LTemplateInstruction<1, 2, 1> {
|
| +class LMathRound V8_FINAL : public LTemplateInstruction<1, 1, 1> {
|
| public:
|
| - LMathRound(LOperand* context, LOperand* value, LOperand* temp) {
|
| - inputs_[1] = context;
|
| + LMathRound(LOperand* value, LOperand* temp) {
|
| inputs_[0] = value;
|
| temps_[0] = temp;
|
| }
|
|
|
| - LOperand* context() { return inputs_[1]; }
|
| LOperand* value() { return inputs_[0]; }
|
| LOperand* temp() { return temps_[0]; }
|
|
|
| @@ -851,15 +860,13 @@ class LMathSqrt V8_FINAL : public LTemplateInstruction<1, 1, 0> {
|
| };
|
|
|
|
|
| -class LMathPowHalf V8_FINAL : public LTemplateInstruction<1, 2, 1> {
|
| +class LMathPowHalf V8_FINAL : public LTemplateInstruction<1, 1, 1> {
|
| public:
|
| - LMathPowHalf(LOperand* context, LOperand* value, LOperand* temp) {
|
| - inputs_[1] = context;
|
| + LMathPowHalf(LOperand* value, LOperand* temp) {
|
| inputs_[0] = value;
|
| temps_[0] = temp;
|
| }
|
|
|
| - LOperand* context() { return inputs_[1]; }
|
| LOperand* value() { return inputs_[0]; }
|
| LOperand* temp() { return temps_[0]; }
|
|
|
| @@ -894,6 +901,22 @@ class LCmpHoleAndBranch V8_FINAL : public LControlInstruction<1, 0> {
|
| };
|
|
|
|
|
| +class LCompareMinusZeroAndBranch V8_FINAL : public LControlInstruction<1, 1> {
|
| + public:
|
| + LCompareMinusZeroAndBranch(LOperand* value, LOperand* temp) {
|
| + inputs_[0] = value;
|
| + temps_[0] = temp;
|
| + }
|
| +
|
| + LOperand* value() { return inputs_[0]; }
|
| + LOperand* temp() { return temps_[0]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(CompareMinusZeroAndBranch,
|
| + "cmp-minus-zero-and-branch")
|
| + DECLARE_HYDROGEN_ACCESSOR(CompareMinusZeroAndBranch)
|
| +};
|
| +
|
| +
|
| class LIsObjectAndBranch V8_FINAL : public LControlInstruction<1, 1> {
|
| public:
|
| LIsObjectAndBranch(LOperand* value, LOperand* temp) {
|
| @@ -968,6 +991,7 @@ class LStringCompareAndBranch V8_FINAL : public LControlInstruction<3, 0> {
|
| inputs_[2] = right;
|
| }
|
|
|
| + LOperand* context() { return inputs_[1]; }
|
| LOperand* left() { return inputs_[1]; }
|
| LOperand* right() { return inputs_[2]; }
|
|
|
| @@ -1072,6 +1096,7 @@ class LCmpT V8_FINAL : public LTemplateInstruction<1, 3, 0> {
|
| DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t")
|
| DECLARE_HYDROGEN_ACCESSOR(CompareGeneric)
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| Token::Value op() const { return hydrogen()->token(); }
|
| };
|
|
|
| @@ -1098,6 +1123,7 @@ class LInstanceOfKnownGlobal V8_FINAL : public LTemplateInstruction<1, 2, 1> {
|
| temps_[0] = temp;
|
| }
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| LOperand* value() { return inputs_[1]; }
|
| LOperand* temp() { return temps_[0]; }
|
|
|
| @@ -1336,27 +1362,37 @@ class LDateField V8_FINAL : public LTemplateInstruction<1, 1, 1> {
|
| };
|
|
|
|
|
| +class LSeqStringGetChar V8_FINAL : public LTemplateInstruction<1, 2, 0> {
|
| + public:
|
| + LSeqStringGetChar(LOperand* string, LOperand* index) {
|
| + inputs_[0] = string;
|
| + inputs_[1] = index;
|
| + }
|
| +
|
| + LOperand* string() const { return inputs_[0]; }
|
| + LOperand* index() const { return inputs_[1]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(SeqStringGetChar, "seq-string-get-char")
|
| + DECLARE_HYDROGEN_ACCESSOR(SeqStringGetChar)
|
| +};
|
| +
|
| +
|
| class LSeqStringSetChar V8_FINAL : public LTemplateInstruction<1, 3, 0> {
|
| public:
|
| - LSeqStringSetChar(String::Encoding encoding,
|
| - LOperand* string,
|
| + LSeqStringSetChar(LOperand* string,
|
| LOperand* index,
|
| - LOperand* value) : encoding_(encoding) {
|
| + LOperand* value) {
|
| inputs_[0] = string;
|
| inputs_[1] = index;
|
| inputs_[2] = value;
|
| }
|
|
|
| - String::Encoding encoding() { return encoding_; }
|
| LOperand* string() { return inputs_[0]; }
|
| LOperand* index() { return inputs_[1]; }
|
| LOperand* value() { return inputs_[2]; }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char")
|
| DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar)
|
| -
|
| - private:
|
| - String::Encoding encoding_;
|
| };
|
|
|
|
|
| @@ -1501,7 +1537,8 @@ class LArithmeticT V8_FINAL : public LTemplateInstruction<1, 3, 0> {
|
|
|
| class LReturn V8_FINAL : public LTemplateInstruction<0, 3, 0> {
|
| public:
|
| - explicit LReturn(LOperand* value, LOperand* context,
|
| + explicit LReturn(LOperand* value,
|
| + LOperand* context,
|
| LOperand* parameter_count) {
|
| inputs_[0] = value;
|
| inputs_[1] = context;
|
| @@ -2076,6 +2113,19 @@ class LUint32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 1> {
|
| };
|
|
|
|
|
| +class LUint32ToSmi V8_FINAL : public LTemplateInstruction<1, 1, 0> {
|
| + public:
|
| + explicit LUint32ToSmi(LOperand* value) {
|
| + inputs_[0] = value;
|
| + }
|
| +
|
| + LOperand* value() { return inputs_[0]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(Uint32ToSmi, "uint32-to-smi")
|
| + DECLARE_HYDROGEN_ACCESSOR(Change)
|
| +};
|
| +
|
| +
|
| class LNumberTagI V8_FINAL : public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| explicit LNumberTagI(LOperand* value) {
|
| @@ -2818,6 +2868,10 @@ class LChunkBuilder V8_FINAL BASE_EMBEDDED {
|
| MUST_USE_RESULT LOperand* UseOrConstant(HValue* value);
|
| MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value);
|
|
|
| + // An input operand in a fixed register or a constant operand.
|
| + MUST_USE_RESULT LOperand* UseFixedOrConstant(HValue* value,
|
| + Register fixed_register);
|
| +
|
| // An input operand in a register or a constant operand.
|
| MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value);
|
| MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value);
|
|
|