OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/hydrogen.h" | 5 #include "src/hydrogen.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 | 8 |
9 #include "src/v8.h" | 9 #include "src/v8.h" |
10 | 10 |
(...skipping 11697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11708 { | 11708 { |
11709 // If the object is not a value return the object. | 11709 // If the object is not a value return the object. |
11710 Push(object); | 11710 Push(object); |
11711 Add<HSimulate>(call->id(), FIXED_SIMULATE); | 11711 Add<HSimulate>(call->id(), FIXED_SIMULATE); |
11712 } | 11712 } |
11713 if_objectisvalue.End(); | 11713 if_objectisvalue.End(); |
11714 return ast_context()->ReturnValue(Pop()); | 11714 return ast_context()->ReturnValue(Pop()); |
11715 } | 11715 } |
11716 | 11716 |
11717 | 11717 |
| 11718 void HOptimizedGraphBuilder::GenerateJSValueValue(CallRuntime* call) { |
| 11719 DCHECK(call->arguments()->length() == 1); |
| 11720 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
| 11721 HValue* value = Pop(); |
| 11722 HInstruction* result = Add<HLoadNamedField>( |
| 11723 value, nullptr, |
| 11724 HObjectAccess::ForObservableJSObjectOffset(JSValue::kValueOffset)); |
| 11725 return ast_context()->ReturnInstruction(result, call->id()); |
| 11726 } |
| 11727 |
| 11728 |
11718 void HOptimizedGraphBuilder::GenerateDateField(CallRuntime* call) { | 11729 void HOptimizedGraphBuilder::GenerateDateField(CallRuntime* call) { |
11719 DCHECK(call->arguments()->length() == 2); | 11730 DCHECK(call->arguments()->length() == 2); |
11720 DCHECK_NOT_NULL(call->arguments()->at(1)->AsLiteral()); | 11731 DCHECK_NOT_NULL(call->arguments()->at(1)->AsLiteral()); |
11721 Smi* index = Smi::cast(*(call->arguments()->at(1)->AsLiteral()->value())); | 11732 Smi* index = Smi::cast(*(call->arguments()->at(1)->AsLiteral()->value())); |
11722 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | 11733 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
11723 HValue* date = Pop(); | 11734 HValue* date = Pop(); |
11724 HDateField* result = New<HDateField>(date, index); | 11735 HDateField* result = New<HDateField>(date, index); |
11725 return ast_context()->ReturnInstruction(result, call->id()); | 11736 return ast_context()->ReturnInstruction(result, call->id()); |
11726 } | 11737 } |
11727 | 11738 |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11869 // Fast support for StringCompare. | 11880 // Fast support for StringCompare. |
11870 void HOptimizedGraphBuilder::GenerateStringCompare(CallRuntime* call) { | 11881 void HOptimizedGraphBuilder::GenerateStringCompare(CallRuntime* call) { |
11871 DCHECK_EQ(2, call->arguments()->length()); | 11882 DCHECK_EQ(2, call->arguments()->length()); |
11872 CHECK_ALIVE(VisitExpressions(call->arguments())); | 11883 CHECK_ALIVE(VisitExpressions(call->arguments())); |
11873 PushArgumentsFromEnvironment(call->arguments()->length()); | 11884 PushArgumentsFromEnvironment(call->arguments()->length()); |
11874 HCallStub* result = New<HCallStub>(CodeStub::StringCompare, 2); | 11885 HCallStub* result = New<HCallStub>(CodeStub::StringCompare, 2); |
11875 return ast_context()->ReturnInstruction(result, call->id()); | 11886 return ast_context()->ReturnInstruction(result, call->id()); |
11876 } | 11887 } |
11877 | 11888 |
11878 | 11889 |
| 11890 void HOptimizedGraphBuilder::GenerateStringLength(CallRuntime* call) { |
| 11891 DCHECK(call->arguments()->length() == 1); |
| 11892 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
| 11893 HValue* string = Pop(); |
| 11894 HInstruction* result = AddLoadStringLength(string); |
| 11895 return ast_context()->ReturnInstruction(result, call->id()); |
| 11896 } |
| 11897 |
| 11898 |
11879 // Support for direct calls from JavaScript to native RegExp code. | 11899 // Support for direct calls from JavaScript to native RegExp code. |
11880 void HOptimizedGraphBuilder::GenerateRegExpExec(CallRuntime* call) { | 11900 void HOptimizedGraphBuilder::GenerateRegExpExec(CallRuntime* call) { |
11881 DCHECK_EQ(4, call->arguments()->length()); | 11901 DCHECK_EQ(4, call->arguments()->length()); |
11882 CHECK_ALIVE(VisitExpressions(call->arguments())); | 11902 CHECK_ALIVE(VisitExpressions(call->arguments())); |
11883 PushArgumentsFromEnvironment(call->arguments()->length()); | 11903 PushArgumentsFromEnvironment(call->arguments()->length()); |
11884 HCallStub* result = New<HCallStub>(CodeStub::RegExpExec, 4); | 11904 HCallStub* result = New<HCallStub>(CodeStub::RegExpExec, 4); |
11885 return ast_context()->ReturnInstruction(result, call->id()); | 11905 return ast_context()->ReturnInstruction(result, call->id()); |
11886 } | 11906 } |
11887 | 11907 |
11888 | 11908 |
(...skipping 1497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13386 if (ShouldProduceTraceOutput()) { | 13406 if (ShouldProduceTraceOutput()) { |
13387 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 13407 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
13388 } | 13408 } |
13389 | 13409 |
13390 #ifdef DEBUG | 13410 #ifdef DEBUG |
13391 graph_->Verify(false); // No full verify. | 13411 graph_->Verify(false); // No full verify. |
13392 #endif | 13412 #endif |
13393 } | 13413 } |
13394 | 13414 |
13395 } } // namespace v8::internal | 13415 } } // namespace v8::internal |
OLD | NEW |