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