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 |