OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 4425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4436 } | 4436 } |
4437 | 4437 |
4438 | 4438 |
4439 static void CheckInputType(MacroAssembler* masm, | 4439 static void CheckInputType(MacroAssembler* masm, |
4440 Register input, | 4440 Register input, |
4441 CompareIC::State expected, | 4441 CompareIC::State expected, |
4442 Label* fail) { | 4442 Label* fail) { |
4443 Label ok; | 4443 Label ok; |
4444 if (expected == CompareIC::SMI) { | 4444 if (expected == CompareIC::SMI) { |
4445 __ JumpIfNotSmi(input, fail); | 4445 __ JumpIfNotSmi(input, fail); |
4446 } else if (expected == CompareIC::HEAP_NUMBER) { | 4446 } else if (expected == CompareIC::NUMBER) { |
4447 __ JumpIfSmi(input, &ok); | 4447 __ JumpIfSmi(input, &ok); |
4448 __ cmp(FieldOperand(input, HeapObject::kMapOffset), | 4448 __ cmp(FieldOperand(input, HeapObject::kMapOffset), |
4449 Immediate(masm->isolate()->factory()->heap_number_map())); | 4449 Immediate(masm->isolate()->factory()->heap_number_map())); |
4450 __ j(not_equal, fail); | 4450 __ j(not_equal, fail); |
4451 } | 4451 } |
4452 // We could be strict about symbol/string here, but as long as | 4452 // We could be strict about symbol/string here, but as long as |
4453 // hydrogen doesn't care, the stub doesn't have to care either. | 4453 // hydrogen doesn't care, the stub doesn't have to care either. |
4454 __ bind(&ok); | 4454 __ bind(&ok); |
4455 } | 4455 } |
4456 | 4456 |
(...skipping 2292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6749 __ bind(&done); | 6749 __ bind(&done); |
6750 __ mov(eax, edx); | 6750 __ mov(eax, edx); |
6751 } | 6751 } |
6752 __ ret(0); | 6752 __ ret(0); |
6753 | 6753 |
6754 __ bind(&miss); | 6754 __ bind(&miss); |
6755 GenerateMiss(masm); | 6755 GenerateMiss(masm); |
6756 } | 6756 } |
6757 | 6757 |
6758 | 6758 |
6759 void ICCompareStub::GenerateHeapNumbers(MacroAssembler* masm) { | 6759 void ICCompareStub::GenerateNumbers(MacroAssembler* masm) { |
6760 ASSERT(state_ == CompareIC::HEAP_NUMBER); | 6760 ASSERT(state_ == CompareIC::NUMBER); |
6761 | 6761 |
6762 Label generic_stub; | 6762 Label generic_stub; |
6763 Label unordered, maybe_undefined1, maybe_undefined2; | 6763 Label unordered, maybe_undefined1, maybe_undefined2; |
6764 Label miss; | 6764 Label miss; |
6765 | 6765 |
6766 if (left_ == CompareIC::SMI) { | 6766 if (left_ == CompareIC::SMI) { |
6767 __ JumpIfNotSmi(edx, &miss); | 6767 __ JumpIfNotSmi(edx, &miss); |
6768 } | 6768 } |
6769 if (right_ == CompareIC::SMI) { | 6769 if (right_ == CompareIC::SMI) { |
6770 __ JumpIfNotSmi(eax, &miss); | 6770 __ JumpIfNotSmi(eax, &miss); |
(...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7696 // Restore ecx. | 7696 // Restore ecx. |
7697 __ pop(ecx); | 7697 __ pop(ecx); |
7698 __ ret(0); | 7698 __ ret(0); |
7699 } | 7699 } |
7700 | 7700 |
7701 #undef __ | 7701 #undef __ |
7702 | 7702 |
7703 } } // namespace v8::internal | 7703 } } // namespace v8::internal |
7704 | 7704 |
7705 #endif // V8_TARGET_ARCH_IA32 | 7705 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |