Reviewers: Yang,
Message:
Hi Yang,
Here is the minor issue we discussed today. Just a slight reduction in work
for
the String generators in a few cases. PTAL, thx!
--Michael
Description:
ReceiverCheckMode needs to be utilized further.
The parameter wasn't being passed appropriately, and there was an extra
opportunity to use mode RECEIVER_IS_STRING in SubStringStub.
Please review this at https://codereview.chromium.org/657313005/
Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+14, -14 lines):
M src/arm/code-stubs-arm.cc
M src/arm64/code-stubs-arm64.cc
M src/code-stubs.h
M src/ia32/code-stubs-ia32.cc
M src/mips/code-stubs-mips.cc
M src/x64/code-stubs-x64.cc
Index: src/arm/code-stubs-arm.cc
diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc
index
f857de692383873a8232939e1df660cc8271f5be..45c0c5f352fcf3a815deb9c3dc97efc6e66c74f7
100644
--- a/src/arm/code-stubs-arm.cc
+++ b/src/arm/code-stubs-arm.cc
@@ -3167,8 +3167,8 @@ void SubStringStub::Generate(MacroAssembler* masm) {
// r2: length
// r3: from index (untagged)
__ SmiTag(r3, r3);
- StringCharAtGenerator generator(
- r0, r3, r2, r0, &runtime, &runtime, &runtime,
STRING_INDEX_IS_NUMBER);
+ StringCharAtGenerator generator(r0, r3, r2, r0, &runtime, &runtime,
&runtime,
+ STRING_INDEX_IS_NUMBER,
RECEIVER_IS_STRING);
generator.GenerateFast(masm);
__ Drop(3);
__ Ret();
Index: src/arm64/code-stubs-arm64.cc
diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc
index
9056772324e5fb98606d5f4d1be30efbe3e4b369..ed951ae7eb925074a9a9aacaa4bc2e1d49aa7a65
100644
--- a/src/arm64/code-stubs-arm64.cc
+++ b/src/arm64/code-stubs-arm64.cc
@@ -3812,9 +3812,9 @@ void SubStringStub::Generate(MacroAssembler* masm) {
// x12: input_type
// x15: from (untagged)
__ SmiTag(from);
- StringCharAtGenerator generator(
- input_string, from, result_length, x0,
- &runtime, &runtime, &runtime, STRING_INDEX_IS_NUMBER);
+ StringCharAtGenerator generator(input_string, from, result_length, x0,
+ &runtime, &runtime, &runtime,
+ STRING_INDEX_IS_NUMBER,
RECEIVER_IS_STRING);
generator.GenerateFast(masm);
__ Drop(3);
__ Ret();
Index: src/code-stubs.h
diff --git a/src/code-stubs.h b/src/code-stubs.h
index
7fa9d61f985d458e42108b3e08c7d9d4a6386658..a6b543605450169c37b44517ac7588c2993889a0
100644
--- a/src/code-stubs.h
+++ b/src/code-stubs.h
@@ -1803,7 +1803,7 @@ class StringCharAtGenerator {
ReceiverCheckMode check_mode = RECEIVER_IS_UNKNOWN)
: char_code_at_generator_(object, index, scratch,
receiver_not_string,
index_not_number, index_out_of_range,
- index_flags),
+ index_flags, check_mode),
char_from_code_generator_(scratch, result) {}
// Generates the fast case code. On the fallthrough path |result|
Index: src/ia32/code-stubs-ia32.cc
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc
index
35ea821b60323fdc7311dfd8db5d9198271a4305..d64289882d0086b9200a56583da27b7c3da87454
100644
--- a/src/ia32/code-stubs-ia32.cc
+++ b/src/ia32/code-stubs-ia32.cc
@@ -702,8 +702,6 @@ void LoadIndexedStringStub::Generate(MacroAssembler*
masm) {
Register result = eax;
DCHECK(!result.is(scratch));
- // TODO(mvstanton): the generator doesn't need to verify that
- // receiver is a string map, that is done outside the handler.
StringCharAtGenerator char_at_generator(receiver, index, scratch, result,
&miss, // When not a string.
&miss, // When not a number.
@@ -3159,8 +3157,9 @@ void SubStringStub::Generate(MacroAssembler* masm) {
// ebx: instance type
// ecx: sub string length (smi)
// edx: from index (smi)
- StringCharAtGenerator generator(
- eax, edx, ecx, eax, &runtime, &runtime, &runtime,
STRING_INDEX_IS_NUMBER);
+ StringCharAtGenerator generator(eax, edx, ecx, eax, &runtime, &runtime,
+ &runtime, STRING_INDEX_IS_NUMBER,
+ RECEIVER_IS_STRING);
generator.GenerateFast(masm);
__ ret(3 * kPointerSize);
generator.SkipSlow(masm, &runtime);
Index: src/mips/code-stubs-mips.cc
diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc
index
4eb11942a5efb6a952d9e89a4d64eb11cf948fab..de834a7d6588f545c213b531e6e6730c140e230c
100644
--- a/src/mips/code-stubs-mips.cc
+++ b/src/mips/code-stubs-mips.cc
@@ -3334,8 +3334,8 @@ void SubStringStub::Generate(MacroAssembler* masm) {
// a2: length
// a3: from index (untagged)
__ SmiTag(a3, a3);
- StringCharAtGenerator generator(
- v0, a3, a2, v0, &runtime, &runtime, &runtime,
STRING_INDEX_IS_NUMBER);
+ StringCharAtGenerator generator(v0, a3, a2, v0, &runtime, &runtime,
&runtime,
+ STRING_INDEX_IS_NUMBER,
RECEIVER_IS_STRING);
generator.GenerateFast(masm);
__ DropAndRet(3);
generator.SkipSlow(masm, &runtime);
Index: src/x64/code-stubs-x64.cc
diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
index
8e6fc4496a09bdb371fecac9dbfbe09a438cb101..0f26d3ba5a7c1b63d497f55e722e4546ee56071d
100644
--- a/src/x64/code-stubs-x64.cc
+++ b/src/x64/code-stubs-x64.cc
@@ -3106,8 +3106,9 @@ void SubStringStub::Generate(MacroAssembler* masm) {
// rbx: instance type
// rcx: sub string length (smi)
// rdx: from index (smi)
- StringCharAtGenerator generator(
- rax, rdx, rcx, rax, &runtime, &runtime, &runtime,
STRING_INDEX_IS_NUMBER);
+ StringCharAtGenerator generator(rax, rdx, rcx, rax, &runtime, &runtime,
+ &runtime, STRING_INDEX_IS_NUMBER,
+ RECEIVER_IS_STRING);
generator.GenerateFast(masm);
__ ret(SUB_STRING_ARGUMENT_COUNT * kPointerSize);
generator.SkipSlow(masm, &runtime);
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.