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_X64 | 5 #if V8_TARGET_ARCH_X64 |
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 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 | 444 |
445 // HOLECHECK: guards "A[i] double hole?" | 445 // HOLECHECK: guards "A[i] double hole?" |
446 // We have to see if the double version of the hole is present. If so | 446 // We have to see if the double version of the hole is present. If so |
447 // go to the runtime. | 447 // go to the runtime. |
448 uint32_t offset = FixedDoubleArray::kHeaderSize + sizeof(kHoleNanLower32); | 448 uint32_t offset = FixedDoubleArray::kHeaderSize + sizeof(kHoleNanLower32); |
449 __ cmpl(FieldOperand(rbx, key, times_8, offset), Immediate(kHoleNanUpper32)); | 449 __ cmpl(FieldOperand(rbx, key, times_8, offset), Immediate(kHoleNanUpper32)); |
450 __ j(not_equal, &fast_double_without_map_check); | 450 __ j(not_equal, &fast_double_without_map_check); |
451 __ JumpIfDictionaryInPrototypeChain(receiver, rdi, kScratchRegister, slow); | 451 __ JumpIfDictionaryInPrototypeChain(receiver, rdi, kScratchRegister, slow); |
452 | 452 |
453 __ bind(&fast_double_without_map_check); | 453 __ bind(&fast_double_without_map_check); |
454 __ StoreNumberToDoubleElements(value, rbx, key, xmm0, | 454 __ StoreNumberToDoubleElements(value, rbx, key, kScratchDoubleReg, |
455 &transition_double_elements); | 455 &transition_double_elements); |
456 if (increment_length == kIncrementLength) { | 456 if (increment_length == kIncrementLength) { |
457 // Add 1 to receiver->length. | 457 // Add 1 to receiver->length. |
458 __ leal(rdi, Operand(key, 1)); | 458 __ leal(rdi, Operand(key, 1)); |
459 __ Integer32ToSmiField(FieldOperand(receiver, JSArray::kLengthOffset), rdi); | 459 __ Integer32ToSmiField(FieldOperand(receiver, JSArray::kLengthOffset), rdi); |
460 } | 460 } |
461 __ ret(0); | 461 __ ret(0); |
462 | 462 |
463 __ bind(&transition_smi_elements); | 463 __ bind(&transition_smi_elements); |
464 __ movp(rbx, FieldOperand(receiver, HeapObject::kMapOffset)); | 464 __ movp(rbx, FieldOperand(receiver, HeapObject::kMapOffset)); |
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 Condition cc = | 846 Condition cc = |
847 (check == ENABLE_INLINED_SMI_CHECK) | 847 (check == ENABLE_INLINED_SMI_CHECK) |
848 ? (*jmp_address == Assembler::kJncShortOpcode ? not_zero : zero) | 848 ? (*jmp_address == Assembler::kJncShortOpcode ? not_zero : zero) |
849 : (*jmp_address == Assembler::kJnzShortOpcode ? not_carry : carry); | 849 : (*jmp_address == Assembler::kJnzShortOpcode ? not_carry : carry); |
850 *jmp_address = static_cast<byte>(Assembler::kJccShortPrefix | cc); | 850 *jmp_address = static_cast<byte>(Assembler::kJccShortPrefix | cc); |
851 } | 851 } |
852 } // namespace internal | 852 } // namespace internal |
853 } // namespace v8 | 853 } // namespace v8 |
854 | 854 |
855 #endif // V8_TARGET_ARCH_X64 | 855 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |