Index: src/crankshaft/ia32/lithium-codegen-ia32.cc |
diff --git a/src/crankshaft/ia32/lithium-codegen-ia32.cc b/src/crankshaft/ia32/lithium-codegen-ia32.cc |
index f292b949daf4f8f00383d2daa052bf5bbda2c73b..2ba7b3fa0ac913d8d8b80c8f84858deddbd22a61 100644 |
--- a/src/crankshaft/ia32/lithium-codegen-ia32.cc |
+++ b/src/crankshaft/ia32/lithium-codegen-ia32.cc |
@@ -2168,9 +2168,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())); |
} |