OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #if V8_TARGET_ARCH_IA32 | 5 #if V8_TARGET_ARCH_IA32 |
6 | 6 |
7 #include "src/codegen.h" | 7 #include "src/codegen.h" |
8 #include "src/ic/ic.h" | 8 #include "src/ic/ic.h" |
9 #include "src/ic/ic-compiler.h" | 9 #include "src/ic/ic-compiler.h" |
10 #include "src/ic/stub-cache.h" | 10 #include "src/ic/stub-cache.h" |
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 Label array, extra, check_if_double_array, maybe_name_key, miss; | 512 Label array, extra, check_if_double_array, maybe_name_key, miss; |
513 Register receiver = StoreDescriptor::ReceiverRegister(); | 513 Register receiver = StoreDescriptor::ReceiverRegister(); |
514 Register key = StoreDescriptor::NameRegister(); | 514 Register key = StoreDescriptor::NameRegister(); |
515 DCHECK(receiver.is(edx)); | 515 DCHECK(receiver.is(edx)); |
516 DCHECK(key.is(ecx)); | 516 DCHECK(key.is(ecx)); |
517 | 517 |
518 // Check that the object isn't a smi. | 518 // Check that the object isn't a smi. |
519 __ JumpIfSmi(receiver, &slow); | 519 __ JumpIfSmi(receiver, &slow); |
520 // Get the map from the receiver. | 520 // Get the map from the receiver. |
521 __ mov(edi, FieldOperand(receiver, HeapObject::kMapOffset)); | 521 __ mov(edi, FieldOperand(receiver, HeapObject::kMapOffset)); |
522 // Check that the receiver does not require access checks and is not observed. | 522 // Check that the receiver does not require access checks. |
523 // The generic stub does not perform map checks or handle observed objects. | 523 // The generic stub does not perform map checks. |
524 __ test_b(FieldOperand(edi, Map::kBitFieldOffset), | 524 __ test_b(FieldOperand(edi, Map::kBitFieldOffset), |
525 Immediate(1 << Map::kIsAccessCheckNeeded | 1 << Map::kIsObserved)); | 525 Immediate(1 << Map::kIsAccessCheckNeeded)); |
526 __ j(not_zero, &slow); | 526 __ j(not_zero, &slow); |
527 // Check that the key is a smi. | 527 // Check that the key is a smi. |
528 __ JumpIfNotSmi(key, &maybe_name_key); | 528 __ JumpIfNotSmi(key, &maybe_name_key); |
529 __ CmpInstanceType(edi, JS_ARRAY_TYPE); | 529 __ CmpInstanceType(edi, JS_ARRAY_TYPE); |
530 __ j(equal, &array); | 530 __ j(equal, &array); |
531 // Check that the object is some kind of JS object EXCEPT JS Value type. In | 531 // Check that the object is some kind of JS object EXCEPT JS Value type. In |
532 // the case that the object is a value-wrapper object, we enter the runtime | 532 // the case that the object is a value-wrapper object, we enter the runtime |
533 // system to make sure that indexing into string objects works as intended. | 533 // system to make sure that indexing into string objects works as intended. |
534 STATIC_ASSERT(JS_VALUE_TYPE < JS_OBJECT_TYPE); | 534 STATIC_ASSERT(JS_VALUE_TYPE < JS_OBJECT_TYPE); |
535 __ CmpInstanceType(edi, JS_OBJECT_TYPE); | 535 __ CmpInstanceType(edi, JS_OBJECT_TYPE); |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 Condition cc = | 852 Condition cc = |
853 (check == ENABLE_INLINED_SMI_CHECK) | 853 (check == ENABLE_INLINED_SMI_CHECK) |
854 ? (*jmp_address == Assembler::kJncShortOpcode ? not_zero : zero) | 854 ? (*jmp_address == Assembler::kJncShortOpcode ? not_zero : zero) |
855 : (*jmp_address == Assembler::kJnzShortOpcode ? not_carry : carry); | 855 : (*jmp_address == Assembler::kJnzShortOpcode ? not_carry : carry); |
856 *jmp_address = static_cast<byte>(Assembler::kJccShortPrefix | cc); | 856 *jmp_address = static_cast<byte>(Assembler::kJccShortPrefix | cc); |
857 } | 857 } |
858 } // namespace internal | 858 } // namespace internal |
859 } // namespace v8 | 859 } // namespace v8 |
860 | 860 |
861 #endif // V8_TARGET_ARCH_IA32 | 861 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |