Add special case of taking a substring that is the entire string to stub.
Review URL: http://codereview.chromium.org/2800027 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4951 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
faaf524445
commit
f0529878d1
@ -13295,6 +13295,9 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
__ test(edx, Immediate(kSmiTagMask));
|
||||
__ j(not_zero, &runtime);
|
||||
__ sub(ecx, Operand(edx));
|
||||
__ cmp(ecx, FieldOperand(eax, String::kLengthOffset));
|
||||
Label return_eax;
|
||||
__ j(equal, &return_eax);
|
||||
// Special handling of sub-strings of length 1 and 2. One character strings
|
||||
// are handled in the runtime system (looked up in the single character
|
||||
// cache). Two character strings are looked for in the symbol cache.
|
||||
@ -13399,12 +13402,15 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
// esi: character of sub string start
|
||||
StringHelper::GenerateCopyCharactersREP(masm, edi, esi, ecx, ebx, false);
|
||||
__ mov(esi, edx); // Restore esi.
|
||||
|
||||
__ bind(&return_eax);
|
||||
__ IncrementCounter(&Counters::sub_string_native, 1);
|
||||
__ ret(3 * kPointerSize);
|
||||
|
||||
// Just jump to runtime to create the sub string.
|
||||
__ bind(&runtime);
|
||||
__ TailCallRuntime(Runtime::kSubString, 3, 1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -11574,7 +11574,9 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
__ JumpIfNotBothPositiveSmi(rcx, rdx, &runtime);
|
||||
|
||||
__ SmiSub(rcx, rcx, rdx, NULL); // Overflow doesn't happen.
|
||||
__ j(negative, &runtime);
|
||||
__ cmpq(FieldOperand(rax, String::kLengthOffset), rcx);
|
||||
Label return_rax;
|
||||
__ j(equal, &return_rax);
|
||||
// Special handling of sub-strings of length 1 and 2. One character strings
|
||||
// are handled in the runtime system (looked up in the single character
|
||||
// cache). Two character strings are looked for in the symbol cache.
|
||||
@ -11677,6 +11679,8 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
// rsi: character of sub string start
|
||||
StringHelper::GenerateCopyCharactersREP(masm, rdi, rsi, rcx, false);
|
||||
__ movq(rsi, rdx); // Restore esi.
|
||||
|
||||
__ bind(&return_rax);
|
||||
__ IncrementCounter(&Counters::sub_string_native, 1);
|
||||
__ ret(kArgumentsSize);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user