Index: src/arm/code-stubs-arm.h |
diff --git a/src/arm/code-stubs-arm.h b/src/arm/code-stubs-arm.h |
index 2ca7b7a8a1b5c80d51c90b028f1bfb10b8f5e624..112503f7850dd88839653f96dd6465dcb6b36091 100644 |
--- a/src/arm/code-stubs-arm.h |
+++ b/src/arm/code-stubs-arm.h |
@@ -327,8 +327,7 @@ class StringCompareStub: public CodeStub { |
public: |
StringCompareStub() { } |
- // Compare two flat ASCII strings and returns result in r0. |
- // Does not use the stack. |
+ // Compares two flat ASCII strings and returns result in r0. |
static void GenerateCompareFlatAsciiStrings(MacroAssembler* masm, |
Register left, |
Register right, |
@@ -337,11 +336,27 @@ class StringCompareStub: public CodeStub { |
Register scratch3, |
Register scratch4); |
- private: |
- Major MajorKey() { return StringCompare; } |
- int MinorKey() { return 0; } |
+ // Compares two flat ASCII strings for equality and returns result |
+ // in r0. |
+ static void GenerateFlatAsciiStringEquals(MacroAssembler* masm, |
+ Register left, |
+ Register right, |
+ Register scratch1, |
+ Register scratch2, |
+ Register scratch3); |
- void Generate(MacroAssembler* masm); |
+ private: |
+ virtual Major MajorKey() { return StringCompare; } |
+ virtual int MinorKey() { return 0; } |
+ virtual void Generate(MacroAssembler* masm); |
+ |
+ static void GenerateAsciiCharsCompareLoop(MacroAssembler* masm, |
+ Register left, |
+ Register right, |
+ Register length, |
+ Register scratch1, |
+ Register scratch2, |
+ Label* chars_not_equal); |
}; |
@@ -597,6 +612,61 @@ class FloatingPointHelper : public AllStatic { |
}; |
+class StringDictionaryLookupStub: public CodeStub { |
+ public: |
+ enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP }; |
+ |
+ explicit StringDictionaryLookupStub(LookupMode mode) : mode_(mode) { } |
+ |
+ void Generate(MacroAssembler* masm); |
+ |
+ static void GenerateNegativeLookup(MacroAssembler* masm, |
+ Label* miss, |
+ Label* done, |
+ Register receiver, |
+ Register properties, |
+ String* name, |
+ Register scratch0) ; |
+ |
+ static void GeneratePositiveLookup(MacroAssembler* masm, |
+ Label* miss, |
+ Label* done, |
+ Register elements, |
+ Register name, |
+ Register r0, |
+ Register r1); |
+ |
+ private: |
+ static const int kInlinedProbes = 4; |
+ static const int kTotalProbes = 20; |
+ |
+ static const int kCapacityOffset = |
+ StringDictionary::kHeaderSize + |
+ StringDictionary::kCapacityIndex * kPointerSize; |
+ |
+ static const int kElementsStartOffset = |
+ StringDictionary::kHeaderSize + |
+ StringDictionary::kElementsStartIndex * kPointerSize; |
+ |
+ |
+#ifdef DEBUG |
+ void Print() { |
+ PrintF("StringDictionaryLookupStub\n"); |
+ } |
+#endif |
+ |
+ Major MajorKey() { return StringDictionaryNegativeLookup; } |
+ |
+ int MinorKey() { |
+ return LookupModeBits::encode(mode_); |
+ } |
+ |
+ class LookupModeBits: public BitField<LookupMode, 0, 1> {}; |
+ |
+ LookupMode mode_; |
+}; |
+ |
+ |
} } // namespace v8::internal |
#endif // V8_ARM_CODE_STUBS_ARM_H_ |