OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1891 return Representation::Tagged(); | 1891 return Representation::Tagged(); |
1892 } | 1892 } |
1893 | 1893 |
1894 DECLARE_CONCRETE_INSTRUCTION(LoadExternalArrayPointer) | 1894 DECLARE_CONCRETE_INSTRUCTION(LoadExternalArrayPointer) |
1895 | 1895 |
1896 protected: | 1896 protected: |
1897 virtual bool DataEquals(HValue* other) { return true; } | 1897 virtual bool DataEquals(HValue* other) { return true; } |
1898 }; | 1898 }; |
1899 | 1899 |
1900 | 1900 |
1901 class HCheckMap: public HUnaryOperation { | 1901 class HCheckMap: public HTemplateInstruction<2> { |
1902 public: | 1902 public: |
1903 HCheckMap(HValue* value, Handle<Map> map) | 1903 HCheckMap(HValue* value, Handle<Map> map, HValue* typecheck = NULL) |
1904 : HUnaryOperation(value), map_(map) { | 1904 : map_(map) { |
| 1905 SetOperandAt(0, value); |
| 1906 // If callers don't depend on a typecheck, they can pass in NULL. In that |
| 1907 // case we use a copy of the |value| argument as a dummy value. |
| 1908 SetOperandAt(1, typecheck != NULL ? typecheck : value); |
1905 set_representation(Representation::Tagged()); | 1909 set_representation(Representation::Tagged()); |
1906 SetFlag(kUseGVN); | 1910 SetFlag(kUseGVN); |
1907 SetFlag(kDependsOnMaps); | 1911 SetFlag(kDependsOnMaps); |
1908 } | 1912 } |
1909 | 1913 |
1910 virtual Representation RequiredInputRepresentation(int index) const { | 1914 virtual Representation RequiredInputRepresentation(int index) const { |
1911 return Representation::Tagged(); | 1915 return Representation::Tagged(); |
1912 } | 1916 } |
1913 virtual void PrintDataTo(StringStream* stream); | 1917 virtual void PrintDataTo(StringStream* stream); |
1914 virtual HType CalculateInferredType(); | 1918 virtual HType CalculateInferredType(); |
1915 | 1919 |
| 1920 HValue* value() { return OperandAt(0); } |
1916 Handle<Map> map() const { return map_; } | 1921 Handle<Map> map() const { return map_; } |
1917 | 1922 |
1918 DECLARE_CONCRETE_INSTRUCTION(CheckMap) | 1923 DECLARE_CONCRETE_INSTRUCTION(CheckMap) |
1919 | 1924 |
1920 protected: | 1925 protected: |
1921 virtual bool DataEquals(HValue* other) { | 1926 virtual bool DataEquals(HValue* other) { |
1922 HCheckMap* b = HCheckMap::cast(other); | 1927 HCheckMap* b = HCheckMap::cast(other); |
1923 return map_.is_identical_to(b->map()); | 1928 return map_.is_identical_to(b->map()); |
1924 } | 1929 } |
1925 | 1930 |
(...skipping 2259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4185 | 4190 |
4186 DECLARE_CONCRETE_INSTRUCTION(In) | 4191 DECLARE_CONCRETE_INSTRUCTION(In) |
4187 }; | 4192 }; |
4188 | 4193 |
4189 #undef DECLARE_INSTRUCTION | 4194 #undef DECLARE_INSTRUCTION |
4190 #undef DECLARE_CONCRETE_INSTRUCTION | 4195 #undef DECLARE_CONCRETE_INSTRUCTION |
4191 | 4196 |
4192 } } // namespace v8::internal | 4197 } } // namespace v8::internal |
4193 | 4198 |
4194 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 4199 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |