| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 8748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8759 // Use a fresh temporary to load the elements without destroying | 8759 // Use a fresh temporary to load the elements without destroying |
| 8760 // the receiver which is needed for the deferred slow case. | 8760 // the receiver which is needed for the deferred slow case. |
| 8761 Result elements = allocator()->Allocate(); | 8761 Result elements = allocator()->Allocate(); |
| 8762 ASSERT(elements.is_valid()); | 8762 ASSERT(elements.is_valid()); |
| 8763 | 8763 |
| 8764 Result key = frame_->Pop(); | 8764 Result key = frame_->Pop(); |
| 8765 Result receiver = frame_->Pop(); | 8765 Result receiver = frame_->Pop(); |
| 8766 key.ToRegister(); | 8766 key.ToRegister(); |
| 8767 receiver.ToRegister(); | 8767 receiver.ToRegister(); |
| 8768 | 8768 |
| 8769 // If key and receiver are shared registers on the frame, their values will |
| 8770 // be automatically saved and restored when going to deferred code. |
| 8771 // The result is in elements, which is guaranteed non-shared. |
| 8769 DeferredReferenceGetKeyedValue* deferred = | 8772 DeferredReferenceGetKeyedValue* deferred = |
| 8770 new DeferredReferenceGetKeyedValue(elements.reg(), | 8773 new DeferredReferenceGetKeyedValue(elements.reg(), |
| 8771 receiver.reg(), | 8774 receiver.reg(), |
| 8772 key.reg()); | 8775 key.reg()); |
| 8773 | 8776 |
| 8774 __ test(receiver.reg(), Immediate(kSmiTagMask)); | 8777 __ test(receiver.reg(), Immediate(kSmiTagMask)); |
| 8775 deferred->Branch(zero); | 8778 deferred->Branch(zero); |
| 8776 | 8779 |
| 8777 // Check that the receiver has the expected map. | 8780 // Check that the receiver has the expected map. |
| 8778 // Initially, use an invalid map. The map is patched in the IC | 8781 // Initially, use an invalid map. The map is patched in the IC |
| (...skipping 4710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13489 // tagged as a small integer. | 13492 // tagged as a small integer. |
| 13490 __ bind(&runtime); | 13493 __ bind(&runtime); |
| 13491 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); | 13494 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); |
| 13492 } | 13495 } |
| 13493 | 13496 |
| 13494 #undef __ | 13497 #undef __ |
| 13495 | 13498 |
| 13496 } } // namespace v8::internal | 13499 } } // namespace v8::internal |
| 13497 | 13500 |
| 13498 #endif // V8_TARGET_ARCH_IA32 | 13501 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |