Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/code-stub-assembler.h

Issue 2461363002: [stubs]: Support 1->2 byte copies in CopyStringCharacters (Closed)
Patch Set: Review feedback Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/code-stub-assembler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef V8_CODE_STUB_ASSEMBLER_H_ 5 #ifndef V8_CODE_STUB_ASSEMBLER_H_
6 #define V8_CODE_STUB_ASSEMBLER_H_ 6 #define V8_CODE_STUB_ASSEMBLER_H_
7 7
8 #include <functional> 8 #include <functional>
9 9
10 #include "src/compiler/code-assembler.h" 10 #include "src/compiler/code-assembler.h"
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 // |capacity| size respecting both array's elements kinds. 511 // |capacity| size respecting both array's elements kinds.
512 void CopyFixedArrayElements( 512 void CopyFixedArrayElements(
513 ElementsKind from_kind, compiler::Node* from_array, ElementsKind to_kind, 513 ElementsKind from_kind, compiler::Node* from_array, ElementsKind to_kind,
514 compiler::Node* to_array, compiler::Node* element_count, 514 compiler::Node* to_array, compiler::Node* element_count,
515 compiler::Node* capacity, 515 compiler::Node* capacity,
516 WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER, 516 WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER,
517 ParameterMode mode = INTEGER_PARAMETERS); 517 ParameterMode mode = INTEGER_PARAMETERS);
518 518
519 // Copies |character_count| elements from |from_string| to |to_string| 519 // Copies |character_count| elements from |from_string| to |to_string|
520 // starting at the |from_index|'th character. |from_string| and |to_string| 520 // starting at the |from_index|'th character. |from_string| and |to_string|
521 // must be either both one-byte strings or both two-byte strings. 521 // can either be one-byte strings or two-byte strings, although if
522 // |from_string| is two-byte, then |to_string| must be two-byte.
522 // |from_index|, |to_index| and |character_count| must be either Smis or 523 // |from_index|, |to_index| and |character_count| must be either Smis or
523 // intptr_ts depending on |mode| s.t. 0 <= |from_index| <= |from_index| + 524 // intptr_ts depending on |mode| s.t. 0 <= |from_index| <= |from_index| +
524 // |character_count| <= from_string.length and 0 <= |to_index| <= |to_index| + 525 // |character_count| <= from_string.length and 0 <= |to_index| <= |to_index| +
525 // |character_count| <= to_string.length. 526 // |character_count| <= to_string.length.
526 void CopyStringCharacters(compiler::Node* from_string, 527 void CopyStringCharacters(compiler::Node* from_string,
527 compiler::Node* to_string, 528 compiler::Node* to_string,
528 compiler::Node* from_index, 529 compiler::Node* from_index,
529 compiler::Node* to_index, 530 compiler::Node* to_index,
530 compiler::Node* character_count, 531 compiler::Node* character_count,
531 String::Encoding encoding, ParameterMode mode); 532 String::Encoding from_encoding,
533 String::Encoding to_encoding, ParameterMode mode);
532 534
533 // Loads an element from |array| of |from_kind| elements by given |offset| 535 // Loads an element from |array| of |from_kind| elements by given |offset|
534 // (NOTE: not index!), does a hole check if |if_hole| is provided and 536 // (NOTE: not index!), does a hole check if |if_hole| is provided and
535 // converts the value so that it becomes ready for storing to array of 537 // converts the value so that it becomes ready for storing to array of
536 // |to_kind| elements. 538 // |to_kind| elements.
537 compiler::Node* LoadElementAndPrepareForStore(compiler::Node* array, 539 compiler::Node* LoadElementAndPrepareForStore(compiler::Node* array,
538 compiler::Node* offset, 540 compiler::Node* offset,
539 ElementsKind from_kind, 541 ElementsKind from_kind,
540 ElementsKind to_kind, 542 ElementsKind to_kind,
541 Label* if_hole); 543 Label* if_hole);
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 compiler::Node* feedback_vector, compiler::Node* slot, 1018 compiler::Node* feedback_vector, compiler::Node* slot,
1017 compiler::Node* value); 1019 compiler::Node* value);
1018 1020
1019 // Create a new AllocationSite and install it into a feedback vector. 1021 // Create a new AllocationSite and install it into a feedback vector.
1020 compiler::Node* CreateAllocationSiteInFeedbackVector( 1022 compiler::Node* CreateAllocationSiteInFeedbackVector(
1021 compiler::Node* feedback_vector, compiler::Node* slot); 1023 compiler::Node* feedback_vector, compiler::Node* slot);
1022 1024
1023 enum class IndexAdvanceMode { kPre, kPost }; 1025 enum class IndexAdvanceMode { kPre, kPost };
1024 1026
1025 void BuildFastLoop( 1027 void BuildFastLoop(
1028 const VariableList& var_list, MachineRepresentation index_rep,
1029 compiler::Node* start_index, compiler::Node* end_index,
1030 std::function<void(CodeStubAssembler* assembler, compiler::Node* index)>
1031 body,
1032 int increment, IndexAdvanceMode mode = IndexAdvanceMode::kPre);
1033
1034 void BuildFastLoop(
1026 MachineRepresentation index_rep, compiler::Node* start_index, 1035 MachineRepresentation index_rep, compiler::Node* start_index,
1027 compiler::Node* end_index, 1036 compiler::Node* end_index,
1028 std::function<void(CodeStubAssembler* assembler, compiler::Node* index)> 1037 std::function<void(CodeStubAssembler* assembler, compiler::Node* index)>
1029 body, 1038 body,
1030 int increment, IndexAdvanceMode mode = IndexAdvanceMode::kPre); 1039 int increment, IndexAdvanceMode mode = IndexAdvanceMode::kPre) {
1040 BuildFastLoop(VariableList(0, zone()), index_rep, start_index, end_index,
1041 body, increment, mode);
1042 }
1031 1043
1032 enum class ForEachDirection { kForward, kReverse }; 1044 enum class ForEachDirection { kForward, kReverse };
1033 1045
1034 void BuildFastFixedArrayForEach( 1046 void BuildFastFixedArrayForEach(
1035 compiler::Node* fixed_array, ElementsKind kind, 1047 compiler::Node* fixed_array, ElementsKind kind,
1036 compiler::Node* first_element_inclusive, 1048 compiler::Node* first_element_inclusive,
1037 compiler::Node* last_element_exclusive, 1049 compiler::Node* last_element_exclusive,
1038 std::function<void(CodeStubAssembler* assembler, 1050 std::function<void(CodeStubAssembler* assembler,
1039 compiler::Node* fixed_array, compiler::Node* offset)> 1051 compiler::Node* fixed_array, compiler::Node* offset)>
1040 body, 1052 body,
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 } 1216 }
1205 #else 1217 #else
1206 #define CSA_SLOW_ASSERT(x) 1218 #define CSA_SLOW_ASSERT(x)
1207 #endif 1219 #endif
1208 1220
1209 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); 1221 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags);
1210 1222
1211 } // namespace internal 1223 } // namespace internal
1212 } // namespace v8 1224 } // namespace v8
1213 #endif // V8_CODE_STUB_ASSEMBLER_H_ 1225 #endif // V8_CODE_STUB_ASSEMBLER_H_
OLDNEW
« no previous file with comments | « no previous file | src/code-stub-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698