Index: src/x64/codegen-x64.h |
diff --git a/src/x64/codegen-x64.h b/src/x64/codegen-x64.h |
index 766ca139de4f14bd89363ff4085f30add9465f29..af7c804daf018f90c2bf0a571d9a44c61a8bdecd 100644 |
--- a/src/x64/codegen-x64.h |
+++ b/src/x64/codegen-x64.h |
@@ -713,6 +713,29 @@ class GenericBinaryOpStub: public CodeStub { |
}; |
+class StringStubBase: public CodeStub { |
+ public: |
+ // Generate code for copying characters using a simple loop. This should only |
+ // be used in places where the number of characters is small and the |
+ // additional setup and checking in GenerateCopyCharactersREP adds too much |
+ // overhead. Copying of overlapping regions is not supported. |
+ void GenerateCopyCharacters(MacroAssembler* masm, |
+ Register dest, |
+ Register src, |
+ Register count, |
+ bool ascii); |
+ |
+ // Generate code for copying characters using the rep movs instruction. |
+ // Copies rcx characters from rsi to rdi. Copying of overlapping regions is |
+ // not supported. |
+ void GenerateCopyCharactersREP(MacroAssembler* masm, |
+ Register dest, // Must be rdi. |
+ Register src, // Must be rsi. |
+ Register count, // Must be rcx. |
+ bool ascii); |
+}; |
+ |
+ |
// Flag that indicates how to generate code for the stub StringAddStub. |
enum StringAddFlags { |
NO_STRING_ADD_FLAGS = 0, |
@@ -720,7 +743,7 @@ enum StringAddFlags { |
}; |
-class StringAddStub: public CodeStub { |
+class StringAddStub: public StringStubBase { |
public: |
explicit StringAddStub(StringAddFlags flags) { |
string_check_ = ((flags & NO_STRING_CHECK_IN_STUB) == 0); |
@@ -732,17 +755,23 @@ class StringAddStub: public CodeStub { |
void Generate(MacroAssembler* masm); |
- void GenerateCopyCharacters(MacroAssembler* masm, |
- Register desc, |
- Register src, |
- Register count, |
- bool ascii); |
- |
// Should the stub check whether arguments are strings? |
bool string_check_; |
}; |
+class SubStringStub: public StringStubBase { |
+ public: |
+ SubStringStub() {} |
+ |
+ private: |
+ Major MajorKey() { return SubString; } |
+ int MinorKey() { return 0; } |
+ |
+ void Generate(MacroAssembler* masm); |
+}; |
+ |
+ |
class StringCompareStub: public CodeStub { |
public: |
explicit StringCompareStub() {} |