| Index: src/ia32/lithium-ia32.h
|
| diff --git a/src/ia32/lithium-ia32.h b/src/ia32/lithium-ia32.h
|
| index 1bf402b1fe8145ef3dc97ec4bb53b80200f8e3b3..dbe54bddaf7cbbe8e6ffb24c511b1dc9423031c7 100644
|
| --- a/src/ia32/lithium-ia32.h
|
| +++ b/src/ia32/lithium-ia32.h
|
| @@ -43,6 +43,7 @@ class LCodeGen;
|
| #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \
|
| V(AccessArgumentsAt) \
|
| V(AddI) \
|
| + V(Allocate) \
|
| V(AllocateObject) \
|
| V(ApplyArguments) \
|
| V(ArgumentsElements) \
|
| @@ -168,6 +169,7 @@ class LCodeGen;
|
| V(Throw) \
|
| V(ToFastProperties) \
|
| V(TransitionElementsKind) \
|
| + V(TrapAllocationMemento) \
|
| V(Typeof) \
|
| V(TypeofIsAndBranch) \
|
| V(UnaryMathOperation) \
|
| @@ -1466,7 +1468,8 @@ class LLoadKeyed: public LTemplateInstruction<1, 2, 0> {
|
| }
|
|
|
| virtual bool ClobbersDoubleRegisters() const {
|
| - return !IsDoubleOrFloatElementsKind(hydrogen()->elements_kind());
|
| + return !CpuFeatures::IsSupported(SSE2) &&
|
| + !IsDoubleOrFloatElementsKind(hydrogen()->elements_kind());
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed")
|
| @@ -1642,6 +1645,7 @@ class LThisFunction: public LTemplateInstruction<1, 0, 0> {
|
| class LContext: public LTemplateInstruction<1, 0, 0> {
|
| public:
|
| DECLARE_CONCRETE_INSTRUCTION(Context, "context")
|
| + DECLARE_HYDROGEN_ACCESSOR(Context)
|
| };
|
|
|
|
|
| @@ -1906,6 +1910,7 @@ class LNumberTagD: public LTemplateInstruction<1, 1, 1> {
|
| LOperand* temp() { return temps_[0]; }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d")
|
| + DECLARE_HYDROGEN_ACCESSOR(Change)
|
| };
|
|
|
|
|
| @@ -2091,16 +2096,19 @@ class LStoreKeyedGeneric: public LTemplateInstruction<0, 4, 0> {
|
| };
|
|
|
|
|
| -class LTransitionElementsKind: public LTemplateInstruction<1, 1, 2> {
|
| +class LTransitionElementsKind: public LTemplateInstruction<0, 2, 2> {
|
| public:
|
| LTransitionElementsKind(LOperand* object,
|
| + LOperand* context,
|
| LOperand* new_map_temp,
|
| LOperand* temp) {
|
| inputs_[0] = object;
|
| + inputs_[1] = context;
|
| temps_[0] = new_map_temp;
|
| temps_[1] = temp;
|
| }
|
|
|
| + LOperand* context() { return inputs_[1]; }
|
| LOperand* object() { return inputs_[0]; }
|
| LOperand* new_map_temp() { return temps_[0]; }
|
| LOperand* temp() { return temps_[1]; }
|
| @@ -2118,6 +2126,22 @@ class LTransitionElementsKind: public LTemplateInstruction<1, 1, 2> {
|
| };
|
|
|
|
|
| +class LTrapAllocationMemento : public LTemplateInstruction<0, 1, 1> {
|
| + public:
|
| + LTrapAllocationMemento(LOperand* object,
|
| + LOperand* temp) {
|
| + inputs_[0] = object;
|
| + temps_[0] = temp;
|
| + }
|
| +
|
| + LOperand* object() { return inputs_[0]; }
|
| + LOperand* temp() { return temps_[0]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento,
|
| + "trap-allocation-memento")
|
| +};
|
| +
|
| +
|
| class LStringAdd: public LTemplateInstruction<1, 3, 0> {
|
| public:
|
| LStringAdd(LOperand* context, LOperand* left, LOperand* right) {
|
| @@ -2315,6 +2339,23 @@ class LAllocateObject: public LTemplateInstruction<1, 1, 1> {
|
| };
|
|
|
|
|
| +class LAllocate: public LTemplateInstruction<1, 2, 1> {
|
| + public:
|
| + LAllocate(LOperand* context, LOperand* size, LOperand* temp) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = size;
|
| + temps_[0] = temp;
|
| + }
|
| +
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* size() { return inputs_[1]; }
|
| + LOperand* temp() { return temps_[0]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate")
|
| + DECLARE_HYDROGEN_ACCESSOR(Allocate)
|
| +};
|
| +
|
| +
|
| class LFastLiteral: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| explicit LFastLiteral(LOperand* context) {
|
|
|