| 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() {}
 | 
| 
 |