| 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 |