Chromium Code Reviews| Index: src/hydrogen-instructions.h |
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
| index 93a7073b6ad14a1b3f16c4d481eeb5f4328a1ad4..05b70ea080092a0dd31a5aaca4410faab85818c7 100644 |
| --- a/src/hydrogen-instructions.h |
| +++ b/src/hydrogen-instructions.h |
| @@ -131,6 +131,7 @@ class LChunkBuilder; |
| V(LoadFunctionPrototype) \ |
| V(LoadGlobalCell) \ |
| V(LoadGlobalGeneric) \ |
| + V(LoadKeyedFastDoubleElement) \ |
| V(LoadKeyedFastElement) \ |
| V(LoadKeyedGeneric) \ |
| V(LoadKeyedSpecializedArrayElement) \ |
| @@ -156,6 +157,7 @@ class LChunkBuilder; |
| V(StoreContextSlot) \ |
| V(StoreGlobalCell) \ |
| V(StoreGlobalGeneric) \ |
| + V(StoreKeyedFastDoubleElement) \ |
| V(StoreKeyedFastElement) \ |
| V(StoreKeyedGeneric) \ |
| V(StoreKeyedSpecializedArrayElement) \ |
| @@ -3519,6 +3521,37 @@ class HLoadKeyedFastElement: public HTemplateInstruction<2> { |
| }; |
| +class HLoadKeyedFastDoubleElement: public HTemplateInstruction<2> { |
| + public: |
| + HLoadKeyedFastDoubleElement(HValue* elements, HValue* key) { |
| + SetOperandAt(0, elements); |
| + SetOperandAt(1, key); |
| + set_representation(Representation::Double()); |
| + SetFlag(kDependsOnArrayElements); |
| + SetFlag(kUseGVN); |
| + } |
| + |
| + HValue* elements() { return OperandAt(0); } |
| + HValue* key() { return OperandAt(1); } |
| + |
| + virtual Representation RequiredInputRepresentation(int index) const { |
| + // The key is supposed to be Integer32. |
| + return index == 0 |
| + ? Representation::Tagged() |
| + : Representation::Integer32(); |
| + } |
| + |
| + virtual void PrintDataTo(StringStream* stream); |
| + |
| + bool RequiresHoleCheck() const; |
| + |
| + DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastDoubleElement) |
| + |
| + protected: |
| + virtual bool DataEquals(HValue* other) { return true; } |
| +}; |
| + |
| + |
| class HLoadKeyedSpecializedArrayElement: public HTemplateInstruction<2> { |
| public: |
| HLoadKeyedSpecializedArrayElement(HValue* external_elements, |
| @@ -3704,6 +3737,40 @@ class HStoreKeyedFastElement: public HTemplateInstruction<3> { |
| }; |
| +class HStoreKeyedFastDoubleElement: public HTemplateInstruction<3> { |
| + public: |
| + HStoreKeyedFastDoubleElement(HValue* elements, |
| + HValue* key, |
| + HValue* val) { |
| + SetOperandAt(0, elements); |
| + SetOperandAt(1, key); |
| + SetOperandAt(2, val); |
| + SetFlag(kChangesArrayElements); |
| + } |
| + |
| + virtual Representation RequiredInputRepresentation(int index) const { |
| + // The key is supposed to be Integer32. |
| + return index == 0 |
| + ? Representation::Tagged() |
|
Mads Ager (chromium)
2011/07/19 08:03:51
I would avoid the nested ?: here.
danno
2011/07/19 12:50:17
Done.
|
| + : ((index == 1) |
| + ? Representation::Integer32() |
| + : Representation::Double()); |
| + } |
| + |
| + HValue* elements() { return OperandAt(0); } |
| + HValue* key() { return OperandAt(1); } |
| + HValue* value() { return OperandAt(2); } |
| + |
| + bool NeedsWriteBarrier() { |
| + return StoringValueNeedsWriteBarrier(value()); |
| + } |
| + |
| + virtual void PrintDataTo(StringStream* stream); |
| + |
| + DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFastDoubleElement) |
| +}; |
| + |
| + |
| class HStoreKeyedSpecializedArrayElement: public HTemplateInstruction<3> { |
| public: |
| HStoreKeyedSpecializedArrayElement(HValue* external_elements, |