| Index: src/ia32/codegen-ia32.h
|
| diff --git a/src/ia32/codegen-ia32.h b/src/ia32/codegen-ia32.h
|
| index c7cad14b1926b0ef142e3aa9c2c575b639183554..b3db0c42d3c895b3dd8142a7b2cef39188d53ec6 100644
|
| --- a/src/ia32/codegen-ia32.h
|
| +++ b/src/ia32/codegen-ia32.h
|
| @@ -883,53 +883,85 @@ class GenericBinaryOpStub: public CodeStub {
|
| };
|
|
|
|
|
| -class StringStubBase: public CodeStub {
|
| +class StringHelper : public AllStatic {
|
| public:
|
| + // Generates fast code for getting a char code out of a string
|
| + // object at the given index. May bail out for three reasons (in the
|
| + // listed order):
|
| + // * Receiver is not a string (receiver_not_string label).
|
| + // * Index is not a positive smi (index_not_positive_smi label).
|
| + // * Some other reason (slow_case label). In this case it's
|
| + // guaranteed that the above conditions are not violated,
|
| + // e.g. it's safe to assume the receiver is a string and the
|
| + // index is a positive smi.
|
| + // When successful, object, index, and scratch are clobbered.
|
| + // Otherwise, scratch and result are clobbered.
|
| + static void GenerateFastCharCodeAt(MacroAssembler* masm,
|
| + Register object,
|
| + Register index,
|
| + Register scratch,
|
| + Register result,
|
| + Label* receiver_not_string,
|
| + Label* index_not_positive_smi,
|
| + Label* slow_case);
|
| +
|
| + // Generates code for creating a one-char string from the given char
|
| + // code. May do a runtime call, so any register can be clobbered
|
| + // and, if the given invoke flag specifies a call, an internal frame
|
| + // is required. In tail call mode the result must be eax register.
|
| + static void GenerateCharFromCode(MacroAssembler* masm,
|
| + Register code,
|
| + Register result,
|
| + InvokeFlag flag);
|
| +
|
| // 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,
|
| - Register scratch,
|
| - bool ascii);
|
| + static void GenerateCopyCharacters(MacroAssembler* masm,
|
| + Register dest,
|
| + Register src,
|
| + Register count,
|
| + Register scratch,
|
| + bool ascii);
|
|
|
| // Generate code for copying characters using the rep movs instruction.
|
| // Copies ecx characters from esi to edi. Copying of overlapping regions is
|
| // not supported.
|
| - void GenerateCopyCharactersREP(MacroAssembler* masm,
|
| - Register dest, // Must be edi.
|
| - Register src, // Must be esi.
|
| - Register count, // Must be ecx.
|
| - Register scratch, // Neither of the above.
|
| - bool ascii);
|
| + static void GenerateCopyCharactersREP(MacroAssembler* masm,
|
| + Register dest, // Must be edi.
|
| + Register src, // Must be esi.
|
| + Register count, // Must be ecx.
|
| + Register scratch, // Neither of above.
|
| + bool ascii);
|
|
|
| // Probe the symbol table for a two character string. If the string is
|
| // not found by probing a jump to the label not_found is performed. This jump
|
| // does not guarantee that the string is not in the symbol table. If the
|
| // string is found the code falls through with the string in register eax.
|
| - void GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm,
|
| - Register c1,
|
| - Register c2,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - Register scratch3,
|
| - Label* not_found);
|
| + static void GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm,
|
| + Register c1,
|
| + Register c2,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + Register scratch3,
|
| + Label* not_found);
|
|
|
| // Generate string hash.
|
| - void GenerateHashInit(MacroAssembler* masm,
|
| - Register hash,
|
| - Register character,
|
| - Register scratch);
|
| - void GenerateHashAddCharacter(MacroAssembler* masm,
|
| - Register hash,
|
| - Register character,
|
| - Register scratch);
|
| - void GenerateHashGetHash(MacroAssembler* masm,
|
| - Register hash,
|
| - Register scratch);
|
| + static void GenerateHashInit(MacroAssembler* masm,
|
| + Register hash,
|
| + Register character,
|
| + Register scratch);
|
| + static void GenerateHashAddCharacter(MacroAssembler* masm,
|
| + Register hash,
|
| + Register character,
|
| + Register scratch);
|
| + static void GenerateHashGetHash(MacroAssembler* masm,
|
| + Register hash,
|
| + Register scratch);
|
| +
|
| + private:
|
| + DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper);
|
| };
|
|
|
|
|
| @@ -940,7 +972,7 @@ enum StringAddFlags {
|
| };
|
|
|
|
|
| -class StringAddStub: public StringStubBase {
|
| +class StringAddStub: public CodeStub {
|
| public:
|
| explicit StringAddStub(StringAddFlags flags) {
|
| string_check_ = ((flags & NO_STRING_CHECK_IN_STUB) == 0);
|
| @@ -957,7 +989,7 @@ class StringAddStub: public StringStubBase {
|
| };
|
|
|
|
|
| -class SubStringStub: public StringStubBase {
|
| +class SubStringStub: public CodeStub {
|
| public:
|
| SubStringStub() {}
|
|
|
| @@ -969,7 +1001,7 @@ class SubStringStub: public StringStubBase {
|
| };
|
|
|
|
|
| -class StringCompareStub: public StringStubBase {
|
| +class StringCompareStub: public CodeStub {
|
| public:
|
| explicit StringCompareStub() {
|
| }
|
|
|