Commit 1a73d99e authored by zhengxing.li's avatar zhengxing.li Committed by Commit bot

X87: [compiler] Introduce StringEqualStub and StringNotEqualStub.

  port 2689548e (r34459)

  original commit message:
  These new stubs perform exactly the same job as the string equality case
  for the CompareIC, but are platform independent and usable outside of
  fullcodegen and Crankshaft. We use them in the StrictEqualStub and the
  StrictNotEqualStub instead of falling back to the runtime immediately
  for String comparisons, and we also use them in TurboFan to perform
  String equality or inequality comparisons.

  These stubs currently handle only internalized and one byte strings w/o
  going to C++, but it should be easy to add support for more string cases
  later, i.e. utilizing already flattened cons strings or comparing two
  byte strings as well.

BUG=

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

Cr-Commit-Position: refs/heads/master@{#34479}
parent 1736ad78
......@@ -2452,9 +2452,15 @@ void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) {
DCHECK(ToRegister(instr->left()).is(edx));
DCHECK(ToRegister(instr->right()).is(eax));
Handle<Code> code = CodeFactory::StringCompare(isolate()).code();
CallCode(code, RelocInfo::CODE_TARGET, instr);
__ test(eax, eax);
if (Token::IsOrderedRelationalCompareOp(instr->op())) {
Handle<Code> code = CodeFactory::StringCompare(isolate()).code();
CallCode(code, RelocInfo::CODE_TARGET, instr);
__ test(eax, eax);
} else {
Handle<Code> code = CodeFactory::StringEqual(isolate()).code();
CallCode(code, RelocInfo::CODE_TARGET, instr);
__ CompareRoot(eax, Heap::kTrueValueRootIndex);
}
EmitBranch(instr, ComputeCompareCondition(instr->op()));
}
......
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