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

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

Issue 2859203002: [string] Move String.p.toLowerCase to CSA (Closed)
Patch Set: Address comments Created 3 years, 7 months 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
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 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 413
414 // Load the hash field of a name as an uint32 value. 414 // Load the hash field of a name as an uint32 value.
415 Node* LoadNameHashField(Node* name); 415 Node* LoadNameHashField(Node* name);
416 // Load the hash value of a name as an uint32 value. 416 // Load the hash value of a name as an uint32 value.
417 // If {if_hash_not_computed} label is specified then it also checks if 417 // If {if_hash_not_computed} label is specified then it also checks if
418 // hash is actually computed. 418 // hash is actually computed.
419 Node* LoadNameHash(Node* name, Label* if_hash_not_computed = nullptr); 419 Node* LoadNameHash(Node* name, Label* if_hash_not_computed = nullptr);
420 420
421 // Load length field of a String object. 421 // Load length field of a String object.
422 Node* LoadStringLength(Node* object); 422 Node* LoadStringLength(Node* object);
423 // Loads a pointer to the sequential String char array.
424 Node* PointerToSeqStringData(Node* seq_string);
423 // Load value field of a JSValue object. 425 // Load value field of a JSValue object.
424 Node* LoadJSValueValue(Node* object); 426 Node* LoadJSValueValue(Node* object);
425 // Load value field of a WeakCell object. 427 // Load value field of a WeakCell object.
426 Node* LoadWeakCellValueUnchecked(Node* weak_cell); 428 Node* LoadWeakCellValueUnchecked(Node* weak_cell);
427 Node* LoadWeakCellValue(Node* weak_cell, Label* if_cleared = nullptr); 429 Node* LoadWeakCellValue(Node* weak_cell, Label* if_cleared = nullptr);
428 430
429 // Load an array element from a FixedArray. 431 // Load an array element from a FixedArray.
430 Node* LoadFixedArrayElement(Node* object, Node* index, 432 Node* LoadFixedArrayElement(Node* object, Node* index,
431 int additional_offset = 0, 433 int additional_offset = 0,
432 ParameterMode parameter_mode = INTPTR_PARAMETERS); 434 ParameterMode parameter_mode = INTPTR_PARAMETERS);
(...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after
1522 Node* argc_; 1524 Node* argc_;
1523 Node* arguments_; 1525 Node* arguments_;
1524 Node* fp_; 1526 Node* fp_;
1525 }; 1527 };
1526 1528
1527 class ToDirectStringAssembler : public CodeStubAssembler { 1529 class ToDirectStringAssembler : public CodeStubAssembler {
1528 private: 1530 private:
1529 enum StringPointerKind { PTR_TO_DATA, PTR_TO_STRING }; 1531 enum StringPointerKind { PTR_TO_DATA, PTR_TO_STRING };
1530 1532
1531 public: 1533 public:
1532 explicit ToDirectStringAssembler(compiler::CodeAssemblerState* state, 1534 enum Flag {
1533 Node* string); 1535 kDontUnpackSlicedStrings = 1 << 0,
1536 };
1537 typedef base::Flags<Flag> Flags;
1538
1539 ToDirectStringAssembler(compiler::CodeAssemblerState* state, Node* string,
1540 Flags flags = Flags());
1534 1541
1535 // Converts flat cons, thin, and sliced strings and returns the direct 1542 // Converts flat cons, thin, and sliced strings and returns the direct
1536 // string. The result can be either a sequential or external string. 1543 // string. The result can be either a sequential or external string.
1544 // Jumps to if_bailout if the string if the string is indirect and cannot
1545 // be unpacked.
1537 Node* TryToDirect(Label* if_bailout); 1546 Node* TryToDirect(Label* if_bailout);
1538 1547
1539 // Returns a pointer to the beginning of the string data. 1548 // Returns a pointer to the beginning of the string data.
1549 // Jumps to if_bailout if the external string cannot be unpacked.
1540 Node* PointerToData(Label* if_bailout) { 1550 Node* PointerToData(Label* if_bailout) {
1541 return TryToSequential(PTR_TO_DATA, if_bailout); 1551 return TryToSequential(PTR_TO_DATA, if_bailout);
1542 } 1552 }
1543 1553
1544 // Returns a pointer that, offset-wise, looks like a String. 1554 // Returns a pointer that, offset-wise, looks like a String.
1555 // Jumps to if_bailout if the external string cannot be unpacked.
1545 Node* PointerToString(Label* if_bailout) { 1556 Node* PointerToString(Label* if_bailout) {
1546 return TryToSequential(PTR_TO_STRING, if_bailout); 1557 return TryToSequential(PTR_TO_STRING, if_bailout);
1547 } 1558 }
1548 1559
1549 Node* string() { return var_string_.value(); } 1560 Node* string() { return var_string_.value(); }
1550 Node* instance_type() { return var_instance_type_.value(); } 1561 Node* instance_type() { return var_instance_type_.value(); }
1551 Node* offset() { return var_offset_.value(); } 1562 Node* offset() { return var_offset_.value(); }
1552 Node* is_external() { return var_is_external_.value(); } 1563 Node* is_external() { return var_is_external_.value(); }
1553 1564
1554 private: 1565 private:
1555 Node* TryToSequential(StringPointerKind ptr_kind, Label* if_bailout); 1566 Node* TryToSequential(StringPointerKind ptr_kind, Label* if_bailout);
1556 1567
1557 Variable var_string_; 1568 Variable var_string_;
1558 Variable var_instance_type_; 1569 Variable var_instance_type_;
1559 Variable var_offset_; 1570 Variable var_offset_;
1560 Variable var_is_external_; 1571 Variable var_is_external_;
1572
1573 const Flags flags_;
1561 }; 1574 };
1562 1575
1563 #ifdef DEBUG 1576 #ifdef DEBUG
1564 #define CSA_ASSERT(csa, x) \ 1577 #define CSA_ASSERT(csa, x) \
1565 (csa)->Assert([&] { return (x); }, #x, __FILE__, __LINE__) 1578 (csa)->Assert([&] { return (x); }, #x, __FILE__, __LINE__)
1566 #define CSA_ASSERT_JS_ARGC_OP(csa, Op, op, expected) \ 1579 #define CSA_ASSERT_JS_ARGC_OP(csa, Op, op, expected) \
1567 (csa)->Assert( \ 1580 (csa)->Assert( \
1568 [&] { \ 1581 [&] { \
1569 compiler::Node* const argc = \ 1582 compiler::Node* const argc = \
1570 (csa)->Parameter(Descriptor::kActualArgumentsCount); \ 1583 (csa)->Parameter(Descriptor::kActualArgumentsCount); \
(...skipping 22 matching lines...) Expand all
1593 } 1606 }
1594 #else 1607 #else
1595 #define CSA_SLOW_ASSERT(csa, x) ((void)0) 1608 #define CSA_SLOW_ASSERT(csa, x) ((void)0)
1596 #endif 1609 #endif
1597 1610
1598 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); 1611 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags);
1599 1612
1600 } // namespace internal 1613 } // namespace internal
1601 } // namespace v8 1614 } // namespace v8
1602 #endif // V8_CODE_STUB_ASSEMBLER_H_ 1615 #endif // V8_CODE_STUB_ASSEMBLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698