| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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 #include "src/ic/keyed-store-generic.h" | 5 #include "src/ic/keyed-store-generic.h" |
| 6 | 6 |
| 7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
| 8 #include "src/code-stub-assembler.h" | 8 #include "src/code-stub-assembler.h" |
| 9 #include "src/contexts.h" | 9 #include "src/contexts.h" |
| 10 #include "src/ic/accessor-assembler-impl.h" | 10 #include "src/ic/accessor-assembler-impl.h" |
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 Bind(&found_hole); | 355 Bind(&found_hole); |
| 356 } | 356 } |
| 357 BranchIfPrototypesHaveNonFastElements(receiver_map, slow, | 357 BranchIfPrototypesHaveNonFastElements(receiver_map, slow, |
| 358 &hole_check_passed); | 358 &hole_check_passed); |
| 359 Bind(&hole_check_passed); | 359 Bind(&hole_check_passed); |
| 360 } | 360 } |
| 361 | 361 |
| 362 // Try to store the value as a double. | 362 // Try to store the value as a double. |
| 363 { | 363 { |
| 364 Label non_number_value(this); | 364 Label non_number_value(this); |
| 365 Node* double_value = PrepareValueForWrite(value, Representation::Double(), | 365 Node* double_value = TryTaggedToFloat64(value, &non_number_value); |
| 366 &non_number_value); | 366 |
| 367 // Make sure we do not store signalling NaNs into double arrays. | 367 // Make sure we do not store signalling NaNs into double arrays. |
| 368 double_value = Float64SilenceNaN(double_value); | 368 double_value = Float64SilenceNaN(double_value); |
| 369 // If we're about to introduce holes, ensure holey elements. | 369 // If we're about to introduce holes, ensure holey elements. |
| 370 if (update_length == kBumpLengthWithGap) { | 370 if (update_length == kBumpLengthWithGap) { |
| 371 TryChangeToHoleyMap(receiver, receiver_map, elements_kind, context, | 371 TryChangeToHoleyMap(receiver, receiver_map, elements_kind, context, |
| 372 FAST_DOUBLE_ELEMENTS, slow); | 372 FAST_DOUBLE_ELEMENTS, slow); |
| 373 } | 373 } |
| 374 StoreNoWriteBarrier(MachineRepresentation::kFloat64, elements, offset, | 374 StoreNoWriteBarrier(MachineRepresentation::kFloat64, elements, offset, |
| 375 double_value); | 375 double_value); |
| 376 MaybeUpdateLengthAndReturn(receiver, intptr_index, value, update_length); | 376 MaybeUpdateLengthAndReturn(receiver, intptr_index, value, update_length); |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 778 Bind(&slow); | 778 Bind(&slow); |
| 779 { | 779 { |
| 780 Comment("KeyedStoreGeneric_slow"); | 780 Comment("KeyedStoreGeneric_slow"); |
| 781 TailCallRuntime(Runtime::kSetProperty, context, receiver, name, value, | 781 TailCallRuntime(Runtime::kSetProperty, context, receiver, name, value, |
| 782 SmiConstant(language_mode)); | 782 SmiConstant(language_mode)); |
| 783 } | 783 } |
| 784 } | 784 } |
| 785 | 785 |
| 786 } // namespace internal | 786 } // namespace internal |
| 787 } // namespace v8 | 787 } // namespace v8 |
| OLD | NEW |