X87: Unify some PlatformCodeStubs

port r23631.

original commit message:

  Unify some PlatformCodeStubs

BUG=
R=weiliang.lin@intel.com

Review URL: https://codereview.chromium.org/540763002

Patch from Jing Bao <jing.bao@intel.com>.

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23670 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 7fd8a961
......@@ -1437,18 +1437,10 @@ void ICCompareStub::GenerateGeneric(MacroAssembler* masm) {
// Inline comparison of ASCII strings.
if (cc == equal) {
StringCompareStub::GenerateFlatAsciiStringEquals(masm,
edx,
eax,
ecx,
ebx);
StringHelper::GenerateFlatAsciiStringEquals(masm, edx, eax, ecx, ebx);
} else {
StringCompareStub::GenerateCompareFlatAsciiStrings(masm,
edx,
eax,
ecx,
ebx,
edi);
StringHelper::GenerateCompareFlatAsciiStrings(masm, edx, eax, ecx, ebx,
edi);
}
#ifdef DEBUG
__ Abort(kUnexpectedFallThroughFromStringComparison);
......@@ -2871,11 +2863,10 @@ void SubStringStub::Generate(MacroAssembler* masm) {
}
void StringCompareStub::GenerateFlatAsciiStringEquals(MacroAssembler* masm,
Register left,
Register right,
Register scratch1,
Register scratch2) {
void StringHelper::GenerateFlatAsciiStringEquals(MacroAssembler* masm,
Register left, Register right,
Register scratch1,
Register scratch2) {
Register length = scratch1;
// Compare lengths.
......@@ -2907,12 +2898,9 @@ void StringCompareStub::GenerateFlatAsciiStringEquals(MacroAssembler* masm,
}
void StringCompareStub::GenerateCompareFlatAsciiStrings(MacroAssembler* masm,
Register left,
Register right,
Register scratch1,
Register scratch2,
Register scratch3) {
void StringHelper::GenerateCompareFlatAsciiStrings(
MacroAssembler* masm, Register left, Register right, Register scratch1,
Register scratch2, Register scratch3) {
Counters* counters = masm->isolate()->counters();
__ IncrementCounter(counters->string_compare_native(), 1);
......@@ -2973,13 +2961,9 @@ void StringCompareStub::GenerateCompareFlatAsciiStrings(MacroAssembler* masm,
}
void StringCompareStub::GenerateAsciiCharsCompareLoop(
MacroAssembler* masm,
Register left,
Register right,
Register length,
Register scratch,
Label* chars_not_equal,
void StringHelper::GenerateAsciiCharsCompareLoop(
MacroAssembler* masm, Register left, Register right, Register length,
Register scratch, Label* chars_not_equal,
Label::Distance chars_not_equal_near) {
// Change index to run from -length to -1 by adding length to string
// start. This means that loop ends when index reaches zero, which
......@@ -3033,7 +3017,7 @@ void StringCompareStub::Generate(MacroAssembler* masm) {
__ pop(ecx);
__ add(esp, Immediate(2 * kPointerSize));
__ push(ecx);
GenerateCompareFlatAsciiStrings(masm, edx, eax, ecx, ebx, edi);
StringHelper::GenerateCompareFlatAsciiStrings(masm, edx, eax, ecx, ebx, edi);
// Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater)
// tagged as a small integer.
......@@ -3306,11 +3290,10 @@ void ICCompareStub::GenerateStrings(MacroAssembler* masm) {
// Compare flat ASCII strings. Returns when done.
if (equality) {
StringCompareStub::GenerateFlatAsciiStringEquals(
masm, left, right, tmp1, tmp2);
StringHelper::GenerateFlatAsciiStringEquals(masm, left, right, tmp1, tmp2);
} else {
StringCompareStub::GenerateCompareFlatAsciiStrings(
masm, left, right, tmp1, tmp2, tmp3);
StringHelper::GenerateCompareFlatAsciiStrings(masm, left, right, tmp1, tmp2,
tmp3);
}
// Handle more complex cases in runtime.
......
......@@ -16,22 +16,6 @@ void ArrayNativeCode(MacroAssembler* masm,
Label* call_generic_code);
class StoreBufferOverflowStub : public PlatformCodeStub {
public:
explicit StoreBufferOverflowStub(Isolate* isolate)
: PlatformCodeStub(isolate) { }
void Generate(MacroAssembler* masm);
static void GenerateFixedRegStubsAheadOfTime(Isolate* isolate);
virtual bool SometimesSetsUpAFrame() { return false; }
private:
Major MajorKey() const { return StoreBufferOverflow; }
uint32_t MinorKey() const { return 0; }
};
class StringHelper : public AllStatic {
public:
// Generate code for copying characters using the rep movs instruction.
......@@ -49,45 +33,24 @@ class StringHelper : public AllStatic {
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);
};
class SubStringStub: public PlatformCodeStub {
public:
explicit SubStringStub(Isolate* isolate) : PlatformCodeStub(isolate) {}
private:
Major MajorKey() const { return SubString; }
uint32_t MinorKey() const { return 0; }
void Generate(MacroAssembler* masm);
};
class StringCompareStub: public PlatformCodeStub {
public:
explicit StringCompareStub(Isolate* isolate) : PlatformCodeStub(isolate) { }
// Compares two flat ASCII strings and returns result in eax.
static void GenerateCompareFlatAsciiStrings(MacroAssembler* masm,
Register left,
Register right,
Register left, Register right,
Register scratch1,
Register scratch2,
Register scratch3);
// Compares two flat ASCII strings for equality and returns result
// in eax.
// Compares two flat ASCII strings for equality and returns result in eax.
static void GenerateFlatAsciiStringEquals(MacroAssembler* masm,
Register left,
Register right,
......@@ -95,10 +58,6 @@ class StringCompareStub: public PlatformCodeStub {
Register scratch2);
private:
virtual Major MajorKey() const { return StringCompare; }
virtual uint32_t MinorKey() const { return 0; }
virtual void Generate(MacroAssembler* masm);
static void GenerateAsciiCharsCompareLoop(
MacroAssembler* masm,
Register left,
......@@ -107,6 +66,8 @@ class StringCompareStub: public PlatformCodeStub {
Register scratch,
Label* chars_not_equal,
Label::Distance chars_not_equal_near = Label::kFar);
DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper);
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment