OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 10490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10501 // Support for direct calls from JavaScript to native RegExp code. | 10501 // Support for direct calls from JavaScript to native RegExp code. |
10502 void HOptimizedGraphBuilder::GenerateRegExpExec(CallRuntime* call) { | 10502 void HOptimizedGraphBuilder::GenerateRegExpExec(CallRuntime* call) { |
10503 ASSERT_EQ(4, call->arguments()->length()); | 10503 ASSERT_EQ(4, call->arguments()->length()); |
10504 CHECK_ALIVE(VisitExpressions(call->arguments())); | 10504 CHECK_ALIVE(VisitExpressions(call->arguments())); |
10505 PushArgumentsFromEnvironment(call->arguments()->length()); | 10505 PushArgumentsFromEnvironment(call->arguments()->length()); |
10506 HCallStub* result = New<HCallStub>(CodeStub::RegExpExec, 4); | 10506 HCallStub* result = New<HCallStub>(CodeStub::RegExpExec, 4); |
10507 return ast_context()->ReturnInstruction(result, call->id()); | 10507 return ast_context()->ReturnInstruction(result, call->id()); |
10508 } | 10508 } |
10509 | 10509 |
10510 | 10510 |
10511 void HOptimizedGraphBuilder::GenerateDoubleLo(CallRuntime* call) { | |
10512 ASSERT_EQ(1, call->arguments()->length()); | |
10513 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | |
10514 HValue* value = Pop(); | |
10515 HInstruction* result = NewUncasted<HDoubleBits>(value, HDoubleBits::LOW); | |
10516 return ast_context()->ReturnInstruction(result, call->id()); | |
10517 } | |
10518 | |
10519 | |
10520 void HOptimizedGraphBuilder::GenerateDoubleHi(CallRuntime* call) { | |
10521 ASSERT_EQ(1, call->arguments()->length()); | |
10522 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | |
10523 HValue* value = Pop(); | |
10524 HInstruction* result = NewUncasted<HDoubleBits>(value, HDoubleBits::HIGH); | |
10525 return ast_context()->ReturnInstruction(result, call->id()); | |
10526 } | |
10527 | |
10528 | |
10529 void HOptimizedGraphBuilder::GenerateConstructDouble(CallRuntime* call) { | |
10530 ASSERT_EQ(2, call->arguments()->length()); | |
10531 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | |
10532 CHECK_ALIVE(VisitForValue(call->arguments()->at(1))); | |
10533 HValue* lo = Pop(); | |
10534 HValue* hi = Pop(); | |
10535 HInstruction* result = NewUncasted<HConstructDouble>(hi, lo); | |
10536 return ast_context()->ReturnInstruction(result, call->id()); | |
10537 } | |
10538 | |
10539 | |
10540 // Construct a RegExp exec result with two in-object properties. | 10511 // Construct a RegExp exec result with two in-object properties. |
10541 void HOptimizedGraphBuilder::GenerateRegExpConstructResult(CallRuntime* call) { | 10512 void HOptimizedGraphBuilder::GenerateRegExpConstructResult(CallRuntime* call) { |
10542 ASSERT_EQ(3, call->arguments()->length()); | 10513 ASSERT_EQ(3, call->arguments()->length()); |
10543 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | 10514 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
10544 CHECK_ALIVE(VisitForValue(call->arguments()->at(1))); | 10515 CHECK_ALIVE(VisitForValue(call->arguments()->at(1))); |
10545 CHECK_ALIVE(VisitForValue(call->arguments()->at(2))); | 10516 CHECK_ALIVE(VisitForValue(call->arguments()->at(2))); |
10546 HValue* input = Pop(); | 10517 HValue* input = Pop(); |
10547 HValue* index = Pop(); | 10518 HValue* index = Pop(); |
10548 HValue* length = Pop(); | 10519 HValue* length = Pop(); |
10549 HValue* result = BuildRegExpConstructResult(length, index, input); | 10520 HValue* result = BuildRegExpConstructResult(length, index, input); |
(...skipping 751 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11301 if (ShouldProduceTraceOutput()) { | 11272 if (ShouldProduceTraceOutput()) { |
11302 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 11273 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
11303 } | 11274 } |
11304 | 11275 |
11305 #ifdef DEBUG | 11276 #ifdef DEBUG |
11306 graph_->Verify(false); // No full verify. | 11277 graph_->Verify(false); // No full verify. |
11307 #endif | 11278 #endif |
11308 } | 11279 } |
11309 | 11280 |
11310 } } // namespace v8::internal | 11281 } } // namespace v8::internal |
OLD | NEW |