X87: [compiler] Introduce StringEqualStub and StringNotEqualStub.
port 2689548e38
(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}
This commit is contained in:
parent
1736ad786f
commit
1a73d99e92
@ -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()));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user