Chromium Code Reviews| Index: src/hydrogen-instructions.h |
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
| index f1093a004c6c340131307d8fe18ed6baf868cef1..ce37b2474e427d749b3a5a9979ab9edb8eb3db74 100644 |
| --- a/src/hydrogen-instructions.h |
| +++ b/src/hydrogen-instructions.h |
| @@ -126,12 +126,15 @@ class LChunkBuilder; |
| V(LoadKeyedGeneric) \ |
| V(LoadNamedField) \ |
| V(LoadNamedGeneric) \ |
| + V(LoadPixelArrayElement) \ |
| + V(LoadPixelArrayExternalPointer) \ |
| V(Mod) \ |
| V(Mul) \ |
| V(ObjectLiteral) \ |
| V(OsrEntry) \ |
| V(OuterContext) \ |
| V(Parameter) \ |
| + V(PixelArrayLength) \ |
| V(Power) \ |
| V(PushArgument) \ |
| V(RegExpLiteral) \ |
| @@ -163,6 +166,7 @@ class LChunkBuilder; |
| V(InobjectFields) \ |
| V(BackingStoreFields) \ |
| V(ArrayElements) \ |
| + V(PixelArrayElements) \ |
| V(GlobalVars) \ |
| V(Maps) \ |
| V(ArrayLengths) \ |
| @@ -288,6 +292,7 @@ class Representation { |
| kTagged, |
| kDouble, |
| kInteger32, |
| + kExternal, |
| kNumRepresentations |
| }; |
| @@ -297,6 +302,7 @@ class Representation { |
| static Representation Tagged() { return Representation(kTagged); } |
| static Representation Integer32() { return Representation(kInteger32); } |
| static Representation Double() { return Representation(kDouble); } |
| + static Representation External() { return Representation(kExternal); } |
| bool Equals(const Representation& other) const { |
| return kind_ == other.kind_; |
| @@ -307,6 +313,7 @@ class Representation { |
| bool IsTagged() const { return kind_ == kTagged; } |
| bool IsInteger32() const { return kind_ == kInteger32; } |
| bool IsDouble() const { return kind_ == kDouble; } |
| + bool IsExternal() const { return kind_ == kExternal; } |
| bool IsSpecialization() const { |
| return kind_ == kInteger32 || kind_ == kDouble; |
| } |
| @@ -1333,6 +1340,24 @@ class HFixedArrayLength: public HUnaryOperation { |
| }; |
| +class HPixelArrayLength: public HUnaryOperation { |
| + public: |
| + explicit HPixelArrayLength(HValue* value) : HUnaryOperation(value) { |
| + set_representation(Representation::Integer32()); |
| + SetFlag(kUseGVN); |
|
Mads Ager (chromium)
2011/02/08 17:26:31
I get a little worried when I see kUseGVN without
|
| + } |
| + |
| + virtual Representation RequiredInputRepresentation(int index) const { |
| + return Representation::Tagged(); |
| + } |
| + |
| + DECLARE_CONCRETE_INSTRUCTION(PixelArrayLength, "pixel_array_length") |
| + |
| + protected: |
| + virtual bool DataEquals(HValue* other) const { return true; } |
| +}; |
| + |
| + |
| class HBitNot: public HUnaryOperation { |
| public: |
| explicit HBitNot(HValue* value) : HUnaryOperation(value) { |
| @@ -1451,6 +1476,26 @@ class HLoadElements: public HUnaryOperation { |
| }; |
| +class HLoadPixelArrayExternalPointer: public HUnaryOperation { |
| + public: |
| + explicit HLoadPixelArrayExternalPointer(HValue* value) |
| + : HUnaryOperation(value) { |
| + set_representation(Representation::External()); |
| + SetFlag(kUseGVN); |
|
Mads Ager (chromium)
2011/02/08 17:26:31
Same comment here. I see why we don't need a kDepe
|
| + } |
| + |
| + virtual Representation RequiredInputRepresentation(int index) const { |
| + return Representation::Tagged(); |
| + } |
| + |
| + DECLARE_CONCRETE_INSTRUCTION(LoadPixelArrayExternalPointer, |
| + "load-pixel-array-external-pointer") |
| + |
| + protected: |
| + virtual bool DataEquals(HValue* other) const { return true; } |
| +}; |
| + |
| + |
| class HCheckMap: public HUnaryOperation { |
| public: |
| HCheckMap(HValue* value, Handle<Map> map) |
| @@ -2829,6 +2874,37 @@ class HLoadKeyedFastElement: public HLoadKeyed { |
| }; |
| +class HLoadPixelArrayElement: public HBinaryOperation { |
| + public: |
| + HLoadPixelArrayElement(HValue* external_elements, HValue* key) |
| + : HBinaryOperation(external_elements, key) { |
| + set_representation(Representation::Integer32()); |
| + SetFlag(kDependsOnPixelArrayElements); |
| + // Native code could change the pixel array. |
| + SetFlag(kDependsOnCalls); |
| + SetFlag(kUseGVN); |
| + } |
| + |
| + virtual void PrintDataTo(StringStream* stream) const; |
| + |
| + virtual Representation RequiredInputRepresentation(int index) const { |
| + // The key is supposed to be Integer32, but the base pointer |
| + // for the element load is a naked pointer. |
| + return (index == 1) ? Representation::Integer32() |
| + : Representation::External(); |
| + } |
| + |
| + HValue* external_pointer() const { return OperandAt(0); } |
| + HValue* key() const { return OperandAt(1); } |
| + |
| + DECLARE_CONCRETE_INSTRUCTION(LoadPixelArrayElement, |
| + "load_pixel_array_element") |
| + |
| + protected: |
| + virtual bool DataEquals(HValue* other) const { return true; } |
| +}; |
| + |
| + |
| class HLoadKeyedGeneric: public HLoadKeyed { |
| public: |
| HLoadKeyedGeneric(HValue* obj, HValue* key) : HLoadKeyed(obj, key) { |