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 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1319 DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function") | 1319 DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function") |
1320 DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction) | 1320 DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction) |
1321 | 1321 |
1322 virtual void PrintDataTo(StringStream* stream); | 1322 virtual void PrintDataTo(StringStream* stream); |
1323 | 1323 |
1324 Handle<JSFunction> function() { return hydrogen()->function(); } | 1324 Handle<JSFunction> function() { return hydrogen()->function(); } |
1325 int arity() const { return hydrogen()->argument_count() - 1; } | 1325 int arity() const { return hydrogen()->argument_count() - 1; } |
1326 }; | 1326 }; |
1327 | 1327 |
1328 | 1328 |
1329 class LCallKeyed: public LTemplateInstruction<1, 0, 1> { | 1329 class LCallKeyed: public LTemplateInstruction<1, 1, 0> { |
1330 public: | 1330 public: |
1331 explicit LCallKeyed(LOperand* temp) { | 1331 explicit LCallKeyed(LOperand* key) { |
1332 temps_[0] = temp; | 1332 inputs_[0] = key; |
1333 } | 1333 } |
1334 | 1334 |
1335 DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed") | 1335 DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed") |
1336 DECLARE_HYDROGEN_ACCESSOR(CallKeyed) | 1336 DECLARE_HYDROGEN_ACCESSOR(CallKeyed) |
1337 | 1337 |
1338 virtual void PrintDataTo(StringStream* stream); | 1338 virtual void PrintDataTo(StringStream* stream); |
1339 | 1339 |
1340 int arity() const { return hydrogen()->argument_count() - 1; } | 1340 int arity() const { return hydrogen()->argument_count() - 1; } |
1341 }; | 1341 }; |
1342 | 1342 |
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1891 // Operand created by UseRegister is guaranteed to be live until the end of | 1891 // Operand created by UseRegister is guaranteed to be live until the end of |
1892 // instruction. This means that register allocator will not reuse it's | 1892 // instruction. This means that register allocator will not reuse it's |
1893 // register for any other operand inside instruction. | 1893 // register for any other operand inside instruction. |
1894 // Operand created by UseRegisterAtStart is guaranteed to be live only at | 1894 // Operand created by UseRegisterAtStart is guaranteed to be live only at |
1895 // instruction start. Register allocator is free to assign the same register | 1895 // instruction start. Register allocator is free to assign the same register |
1896 // to some other operand used inside instruction (i.e. temporary or | 1896 // to some other operand used inside instruction (i.e. temporary or |
1897 // output). | 1897 // output). |
1898 MUST_USE_RESULT LOperand* UseRegister(HValue* value); | 1898 MUST_USE_RESULT LOperand* UseRegister(HValue* value); |
1899 MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value); | 1899 MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value); |
1900 | 1900 |
1901 // A value in a register that may be trashed. | 1901 // An input operand in a register that may be trashed. |
1902 MUST_USE_RESULT LOperand* UseTempRegister(HValue* value); | 1902 MUST_USE_RESULT LOperand* UseTempRegister(HValue* value); |
1903 | 1903 |
1904 // An operand value in a register or stack slot. | 1904 // An input operand in a register or stack slot. |
1905 MUST_USE_RESULT LOperand* Use(HValue* value); | 1905 MUST_USE_RESULT LOperand* Use(HValue* value); |
1906 MUST_USE_RESULT LOperand* UseAtStart(HValue* value); | 1906 MUST_USE_RESULT LOperand* UseAtStart(HValue* value); |
1907 | 1907 |
1908 // An operand value in a register, stack slot or a constant operand. | 1908 // An input operand in a register, stack slot or a constant operand. |
1909 MUST_USE_RESULT LOperand* UseOrConstant(HValue* value); | 1909 MUST_USE_RESULT LOperand* UseOrConstant(HValue* value); |
1910 MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value); | 1910 MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value); |
1911 | 1911 |
1912 // An operand value in a register or a constant operand. | 1912 // An input operand in a register or a constant operand. |
1913 MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); | 1913 MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); |
1914 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); | 1914 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); |
1915 | 1915 |
| 1916 // An input operand in register, stack slot or a constant operand. |
| 1917 // Will not be moved to a register even if one is freely available. |
| 1918 MUST_USE_RESULT LOperand* UseAny(HValue* value); |
| 1919 |
1916 // Temporary operand that must be in a register. | 1920 // Temporary operand that must be in a register. |
1917 MUST_USE_RESULT LUnallocated* TempRegister(); | 1921 MUST_USE_RESULT LUnallocated* TempRegister(); |
1918 MUST_USE_RESULT LOperand* FixedTemp(Register reg); | 1922 MUST_USE_RESULT LOperand* FixedTemp(Register reg); |
1919 MUST_USE_RESULT LOperand* FixedTemp(XMMRegister reg); | 1923 MUST_USE_RESULT LOperand* FixedTemp(XMMRegister reg); |
1920 | 1924 |
1921 // An operand value in register, stack slot or a constant operand. | |
1922 // Will not be moved to a register even if one is freely available. | |
1923 LOperand* UseAny(HValue* value); | |
1924 | |
1925 // Methods for setting up define-use relationships. | 1925 // Methods for setting up define-use relationships. |
1926 // Return the same instruction that they are passed. | 1926 // Return the same instruction that they are passed. |
1927 template<int I, int T> | 1927 template<int I, int T> |
1928 LInstruction* Define(LTemplateInstruction<1, I, T>* instr, | 1928 LInstruction* Define(LTemplateInstruction<1, I, T>* instr, |
1929 LUnallocated* result); | 1929 LUnallocated* result); |
1930 template<int I, int T> | 1930 template<int I, int T> |
1931 LInstruction* Define(LTemplateInstruction<1, I, T>* instr); | 1931 LInstruction* Define(LTemplateInstruction<1, I, T>* instr); |
1932 template<int I, int T> | 1932 template<int I, int T> |
1933 LInstruction* DefineAsRegister(LTemplateInstruction<1, I, T>* instr); | 1933 LInstruction* DefineAsRegister(LTemplateInstruction<1, I, T>* instr); |
1934 template<int I, int T> | 1934 template<int I, int T> |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1987 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); | 1987 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); |
1988 }; | 1988 }; |
1989 | 1989 |
1990 #undef DECLARE_HYDROGEN_ACCESSOR | 1990 #undef DECLARE_HYDROGEN_ACCESSOR |
1991 #undef DECLARE_INSTRUCTION | 1991 #undef DECLARE_INSTRUCTION |
1992 #undef DECLARE_CONCRETE_INSTRUCTION | 1992 #undef DECLARE_CONCRETE_INSTRUCTION |
1993 | 1993 |
1994 } } // namespace v8::int | 1994 } } // namespace v8::int |
1995 | 1995 |
1996 #endif // V8_X64_LITHIUM_X64_H_ | 1996 #endif // V8_X64_LITHIUM_X64_H_ |
OLD | NEW |