Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(990)

Side by Side Diff: src/x64/code-stubs-x64.cc

Issue 363313002: Remove unnecessary check in RegExpExecStub. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/ia32/code-stubs-ia32.cc ('k') | test/mjsunit/regexp-stack-overflow.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_X64 7 #if V8_TARGET_ARCH_X64
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 1556 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 RegExpImpl::kFirstCaptureOffset), 1567 RegExpImpl::kFirstCaptureOffset),
1568 rdi); 1568 rdi);
1569 __ jmp(&next_capture); 1569 __ jmp(&next_capture);
1570 __ bind(&done); 1570 __ bind(&done);
1571 1571
1572 // Return last match info. 1572 // Return last match info.
1573 __ movp(rax, r15); 1573 __ movp(rax, r15);
1574 __ ret(REG_EXP_EXEC_ARGUMENT_COUNT * kPointerSize); 1574 __ ret(REG_EXP_EXEC_ARGUMENT_COUNT * kPointerSize);
1575 1575
1576 __ bind(&exception); 1576 __ bind(&exception);
1577 // Result must now be exception. If there is no pending exception already a 1577 // Result must now be exception.
1578 // stack overflow (on the backtrack stack) was detected in RegExp code but
1579 // haven't created the exception yet. Handle that in the runtime system.
1580 // TODO(592): Rerunning the RegExp to get the stack overflow exception.
1581 ExternalReference pending_exception_address( 1578 ExternalReference pending_exception_address(
1582 Isolate::kPendingExceptionAddress, isolate()); 1579 Isolate::kPendingExceptionAddress, isolate());
1583 Operand pending_exception_operand = 1580 Operand pending_exception_operand =
1584 masm->ExternalOperand(pending_exception_address, rbx); 1581 masm->ExternalOperand(pending_exception_address, rbx);
1582 __ LoadRoot(rdx, Heap::kTheHoleValueRootIndex);
1585 __ movp(rax, pending_exception_operand); 1583 __ movp(rax, pending_exception_operand);
1586 __ LoadRoot(rdx, Heap::kTheHoleValueRootIndex); 1584 __ movp(pending_exception_operand, rdx); // Clear pending exception.
1587 __ cmpp(rax, rdx);
1588 __ j(equal, &runtime);
1589 __ movp(pending_exception_operand, rdx);
1590 1585
1591 __ CompareRoot(rax, Heap::kTerminationExceptionRootIndex); 1586 __ CompareRoot(rax, Heap::kTerminationExceptionRootIndex);
1592 Label termination_exception; 1587 Label termination_exception;
1593 __ j(equal, &termination_exception, Label::kNear); 1588 __ j(equal, &termination_exception, Label::kNear);
1594 __ Throw(rax); 1589 __ Throw(rax);
1595 1590
1596 __ bind(&termination_exception); 1591 __ bind(&termination_exception);
1597 __ ThrowUncatchable(rax); 1592 __ ThrowUncatchable(rax);
1598 1593
1599 // Do the runtime call to execute the regexp. 1594 // Do the runtime call to execute the regexp.
(...skipping 3341 matching lines...) Expand 10 before | Expand all | Expand 10 after
4941 return_value_operand, 4936 return_value_operand,
4942 NULL); 4937 NULL);
4943 } 4938 }
4944 4939
4945 4940
4946 #undef __ 4941 #undef __
4947 4942
4948 } } // namespace v8::internal 4943 } } // namespace v8::internal
4949 4944
4950 #endif // V8_TARGET_ARCH_X64 4945 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/ia32/code-stubs-ia32.cc ('k') | test/mjsunit/regexp-stack-overflow.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698