Let relational comparison operators quickly compare a string with itself.
Review URL: http://codereview.chromium.org/2802028 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5000 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
5a54b7030d
commit
94ae008739
src
@ -11689,15 +11689,15 @@ void CompareStub::Generate(MacroAssembler* masm) {
|
||||
Label heap_number;
|
||||
__ cmp(FieldOperand(edx, HeapObject::kMapOffset),
|
||||
Immediate(Factory::heap_number_map()));
|
||||
if (cc_ == equal) {
|
||||
__ j(equal, &heap_number);
|
||||
// Identical objects are equal for operators ==, !=, and ===.
|
||||
__ Set(eax, Immediate(Smi::FromInt(EQUAL)));
|
||||
__ ret(0);
|
||||
} else {
|
||||
// Identical objects must call ToPrimitive for <, <=, >, and >=.
|
||||
__ j(not_equal, ¬_identical);
|
||||
__ j(equal, &heap_number);
|
||||
if (cc_ != equal) {
|
||||
// Call runtime on identical JSObjects. Otherwise return equal.
|
||||
__ CmpObjectType(eax, FIRST_JS_OBJECT_TYPE, ecx);
|
||||
__ j(above_equal, ¬_identical);
|
||||
}
|
||||
__ Set(eax, Immediate(Smi::FromInt(EQUAL)));
|
||||
__ ret(0);
|
||||
|
||||
__ bind(&heap_number);
|
||||
// It is a heap number, so return non-equal if it's NaN and equal if
|
||||
// it's not NaN.
|
||||
|
@ -9077,14 +9077,14 @@ void CompareStub::Generate(MacroAssembler* masm) {
|
||||
// If it's not a heap number, then return equal for (in)equality operator.
|
||||
__ Cmp(FieldOperand(rdx, HeapObject::kMapOffset),
|
||||
Factory::heap_number_map());
|
||||
if (cc_ == equal) {
|
||||
__ j(equal, &heap_number);
|
||||
__ Set(rax, EQUAL);
|
||||
__ ret(0);
|
||||
} else {
|
||||
// Identical objects must still be converted to primitive for < and >.
|
||||
__ j(not_equal, ¬_identical);
|
||||
__ j(equal, &heap_number);
|
||||
if (cc_ != equal) {
|
||||
// Call runtime on identical JSObjects. Otherwise return equal.
|
||||
__ CmpObjectType(rax, FIRST_JS_OBJECT_TYPE, rcx);
|
||||
__ j(above_equal, ¬_identical);
|
||||
}
|
||||
__ Set(rax, EQUAL);
|
||||
__ ret(0);
|
||||
|
||||
__ bind(&heap_number);
|
||||
// It is a heap number, so return equal if it's not NaN.
|
||||
|
Loading…
Reference in New Issue
Block a user