Commit d61b8cee authored by mbrandy's avatar mbrandy Committed by Commit bot

PPC: [compiler] Introduce StringEqualStub and StringNotEqualStub.

Port 2689548e

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.

R=bmeurer@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=

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

Cr-Commit-Position: refs/heads/master@{#34462}
parent 18b9c1ce
......@@ -2424,9 +2424,15 @@ void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) {
DCHECK(ToRegister(instr->left()).is(r4));
DCHECK(ToRegister(instr->right()).is(r3));
Handle<Code> code = CodeFactory::StringCompare(isolate()).code();
CallCode(code, RelocInfo::CODE_TARGET, instr);
__ cmpi(r3, Operand::Zero());
if (Token::IsOrderedRelationalCompareOp(instr->op())) {
Handle<Code> code = CodeFactory::StringCompare(isolate()).code();
CallCode(code, RelocInfo::CODE_TARGET, instr);
__ cmpi(r3, Operand::Zero());
} else {
Handle<Code> code = CodeFactory::StringEqual(isolate()).code();
CallCode(code, RelocInfo::CODE_TARGET, instr);
__ CompareRoot(r3, 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