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 1059 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1070 UseRegisterAtStart(compare->right())); | 1070 UseRegisterAtStart(compare->right())); |
1071 } else if (v->IsInstanceOf()) { | 1071 } else if (v->IsInstanceOf()) { |
1072 HInstanceOf* instance_of = HInstanceOf::cast(v); | 1072 HInstanceOf* instance_of = HInstanceOf::cast(v); |
1073 LInstruction* result = | 1073 LInstruction* result = |
1074 new LInstanceOfAndBranch(UseFixed(instance_of->left(), r0), | 1074 new LInstanceOfAndBranch(UseFixed(instance_of->left(), r0), |
1075 UseFixed(instance_of->right(), r1)); | 1075 UseFixed(instance_of->right(), r1)); |
1076 return MarkAsCall(result, instr); | 1076 return MarkAsCall(result, instr); |
1077 } else if (v->IsTypeofIs()) { | 1077 } else if (v->IsTypeofIs()) { |
1078 HTypeofIs* typeof_is = HTypeofIs::cast(v); | 1078 HTypeofIs* typeof_is = HTypeofIs::cast(v); |
1079 return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value())); | 1079 return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value())); |
| 1080 } else if (v->IsIsConstructCall()) { |
| 1081 return new LIsConstructCallAndBranch(TempRegister(), TempRegister()); |
1080 } else { | 1082 } else { |
1081 if (v->IsConstant()) { | 1083 if (v->IsConstant()) { |
1082 if (HConstant::cast(v)->handle()->IsTrue()) { | 1084 if (HConstant::cast(v)->handle()->IsTrue()) { |
1083 return new LGoto(instr->FirstSuccessor()->block_id()); | 1085 return new LGoto(instr->FirstSuccessor()->block_id()); |
1084 } else if (HConstant::cast(v)->handle()->IsFalse()) { | 1086 } else if (HConstant::cast(v)->handle()->IsFalse()) { |
1085 return new LGoto(instr->SecondSuccessor()->block_id()); | 1087 return new LGoto(instr->SecondSuccessor()->block_id()); |
1086 } | 1088 } |
1087 } | 1089 } |
1088 Abort("Undefined compare before branch"); | 1090 Abort("Undefined compare before branch"); |
1089 return NULL; | 1091 return NULL; |
(...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1883 LInstruction* LChunkBuilder::DoTypeof(HTypeof* instr) { | 1885 LInstruction* LChunkBuilder::DoTypeof(HTypeof* instr) { |
1884 LTypeof* result = new LTypeof(UseRegisterAtStart(instr->value())); | 1886 LTypeof* result = new LTypeof(UseRegisterAtStart(instr->value())); |
1885 return MarkAsCall(DefineFixed(result, r0), instr); | 1887 return MarkAsCall(DefineFixed(result, r0), instr); |
1886 } | 1888 } |
1887 | 1889 |
1888 | 1890 |
1889 LInstruction* LChunkBuilder::DoTypeofIs(HTypeofIs* instr) { | 1891 LInstruction* LChunkBuilder::DoTypeofIs(HTypeofIs* instr) { |
1890 return DefineSameAsFirst(new LTypeofIs(UseRegister(instr->value()))); | 1892 return DefineSameAsFirst(new LTypeofIs(UseRegister(instr->value()))); |
1891 } | 1893 } |
1892 | 1894 |
| 1895 |
| 1896 LInstruction* LChunkBuilder::DoIsConstructCall(HIsConstructCall* instr) { |
| 1897 return DefineAsRegister(new LIsConstructCall(TempRegister())); |
| 1898 } |
| 1899 |
| 1900 |
1893 LInstruction* LChunkBuilder::DoSimulate(HSimulate* instr) { | 1901 LInstruction* LChunkBuilder::DoSimulate(HSimulate* instr) { |
1894 HEnvironment* env = current_block_->last_environment(); | 1902 HEnvironment* env = current_block_->last_environment(); |
1895 ASSERT(env != NULL); | 1903 ASSERT(env != NULL); |
1896 | 1904 |
1897 env->set_ast_id(instr->ast_id()); | 1905 env->set_ast_id(instr->ast_id()); |
1898 | 1906 |
1899 env->Drop(instr->pop_count()); | 1907 env->Drop(instr->pop_count()); |
1900 for (int i = 0; i < instr->values()->length(); ++i) { | 1908 for (int i = 0; i < instr->values()->length(); ++i) { |
1901 HValue* value = instr->values()->at(i); | 1909 HValue* value = instr->values()->at(i); |
1902 if (instr->HasAssignedIndexAt(i)) { | 1910 if (instr->HasAssignedIndexAt(i)) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1942 | 1950 |
1943 | 1951 |
1944 LInstruction* LChunkBuilder::DoLeaveInlined(HLeaveInlined* instr) { | 1952 LInstruction* LChunkBuilder::DoLeaveInlined(HLeaveInlined* instr) { |
1945 HEnvironment* outer = current_block_->last_environment()->outer(); | 1953 HEnvironment* outer = current_block_->last_environment()->outer(); |
1946 current_block_->UpdateEnvironment(outer); | 1954 current_block_->UpdateEnvironment(outer); |
1947 return NULL; | 1955 return NULL; |
1948 } | 1956 } |
1949 | 1957 |
1950 | 1958 |
1951 } } // namespace v8::internal | 1959 } } // namespace v8::internal |
OLD | NEW |