Index: src/arm/code-stubs-arm.cc |
diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc |
index 6bf4d99b77f0ebc0e74c0e6fd9d66965b5b1b74d..be85fa15be8d3888bf27b28f0c2faaf788eccb12 100644 |
--- a/src/arm/code-stubs-arm.cc |
+++ b/src/arm/code-stubs-arm.cc |
@@ -5246,70 +5246,6 @@ void StringCharAtGenerator::GenerateSlow( |
} |
-class StringHelper : public AllStatic { |
- 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 GenerateCopyCharactersLong adds too much |
- // overhead. Copying of overlapping regions is not supported. |
- // Dest register ends at the position after the last character written. |
- static void GenerateCopyCharacters(MacroAssembler* masm, |
- Register dest, |
- Register src, |
- Register count, |
- Register scratch, |
- bool ascii); |
- |
- // Generate code for copying a large number of characters. This function |
- // is allowed to spend extra time setting up conditions to make copying |
- // faster. Copying of overlapping regions is not supported. |
- // Dest register ends at the position after the last character written. |
- static void GenerateCopyCharactersLong(MacroAssembler* masm, |
- Register dest, |
- Register src, |
- Register count, |
- Register scratch1, |
- Register scratch2, |
- Register scratch3, |
- Register scratch4, |
- Register scratch5, |
- int flags); |
- |
- |
- // 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 r0. |
- // Contents of both c1 and c2 registers are modified. At the exit c1 is |
- // guaranteed to contain halfword with low and high bytes equal to |
- // initial contents of c1 and c2 respectively. |
- static void GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm, |
- Register c1, |
- Register c2, |
- Register scratch1, |
- Register scratch2, |
- Register scratch3, |
- Register scratch4, |
- Register scratch5, |
- Label* not_found); |
- |
- // Generate string hash. |
- static void GenerateHashInit(MacroAssembler* masm, |
- Register hash, |
- Register character); |
- |
- static void GenerateHashAddCharacter(MacroAssembler* masm, |
- Register hash, |
- Register character); |
- |
- static void GenerateHashGetHash(MacroAssembler* masm, |
- Register hash); |
- |
- private: |
- DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper); |
-}; |
- |
- |
void StringHelper::GenerateCopyCharacters(MacroAssembler* masm, |
Register dest, |
Register src, |
@@ -5562,9 +5498,8 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm, |
static const int kProbes = 4; |
Label found_in_symbol_table; |
Label next_probe[kProbes]; |
+ Register candidate = scratch5; // Scratch register contains candidate. |
for (int i = 0; i < kProbes; i++) { |
- Register candidate = scratch5; // Scratch register contains candidate. |
- |
// Calculate entry in symbol table. |
if (i > 0) { |
__ add(candidate, hash, Operand(SymbolTable::GetProbeOffset(i))); |
@@ -5589,11 +5524,11 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm, |
__ cmp(undefined, candidate); |
__ b(eq, not_found); |
- // Must be null (deleted entry). |
+ // Must be the hole (deleted entry). |
if (FLAG_debug_code) { |
- __ LoadRoot(ip, Heap::kNullValueRootIndex); |
+ __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); |
__ cmp(ip, candidate); |
- __ Assert(eq, "oddball in symbol table is not undefined or null"); |
+ __ Assert(eq, "oddball in symbol table is not undefined or the hole"); |
} |
__ jmp(&next_probe[i]); |
@@ -5621,7 +5556,7 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm, |
__ jmp(not_found); |
// Scratch register contains result when we fall through to here. |
- Register result = scratch; |
+ Register result = candidate; |
__ bind(&found_in_symbol_table); |
__ Move(r0, result); |
} |
@@ -5633,7 +5568,7 @@ void StringHelper::GenerateHashInit(MacroAssembler* masm, |
// hash = character + (character << 10); |
__ add(hash, character, Operand(character, LSL, 10)); |
// hash ^= hash >> 6; |
- __ eor(hash, hash, Operand(hash, ASR, 6)); |
+ __ eor(hash, hash, Operand(hash, LSR, 6)); |
} |
@@ -5645,7 +5580,7 @@ void StringHelper::GenerateHashAddCharacter(MacroAssembler* masm, |
// hash += hash << 10; |
__ add(hash, hash, Operand(hash, LSL, 10)); |
// hash ^= hash >> 6; |
- __ eor(hash, hash, Operand(hash, ASR, 6)); |
+ __ eor(hash, hash, Operand(hash, LSR, 6)); |
} |
@@ -5654,12 +5589,15 @@ void StringHelper::GenerateHashGetHash(MacroAssembler* masm, |
// hash += hash << 3; |
__ add(hash, hash, Operand(hash, LSL, 3)); |
// hash ^= hash >> 11; |
- __ eor(hash, hash, Operand(hash, ASR, 11)); |
+ __ eor(hash, hash, Operand(hash, LSR, 11)); |
// hash += hash << 15; |
__ add(hash, hash, Operand(hash, LSL, 15), SetCC); |
+ uint32_t kHashShiftCutOffMask = (1 << (32 - String::kHashShift)) - 1; |
+ __ and_(hash, hash, Operand(kHashShiftCutOffMask)); |
+ |
// if (hash == 0) hash = 27; |
- __ mov(hash, Operand(27), LeaveCC, ne); |
+ __ mov(hash, Operand(27), LeaveCC, eq); |
} |