OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. |
6 #if defined(TARGET_ARCH_X64) | 6 #if defined(TARGET_ARCH_X64) |
7 | 7 |
8 #include "vm/intrinsifier.h" | 8 #include "vm/intrinsifier.h" |
9 | 9 |
10 #include "vm/assembler.h" | 10 #include "vm/assembler.h" |
(...skipping 1709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1720 } | 1720 } |
1721 | 1721 |
1722 | 1722 |
1723 // Allocates one-byte string of length 'end - start'. The content is not | 1723 // Allocates one-byte string of length 'end - start'. The content is not |
1724 // initialized. 'length-reg' contains tagged length. | 1724 // initialized. 'length-reg' contains tagged length. |
1725 // Returns new string as tagged pointer in RAX. | 1725 // Returns new string as tagged pointer in RAX. |
1726 static void TryAllocateOnebyteString(Assembler* assembler, | 1726 static void TryAllocateOnebyteString(Assembler* assembler, |
1727 Label* ok, | 1727 Label* ok, |
1728 Label* failure, | 1728 Label* failure, |
1729 Register length_reg) { | 1729 Register length_reg) { |
| 1730 __ MaybeTraceAllocation(kOneByteStringCid, failure, false); |
1730 if (length_reg != RDI) { | 1731 if (length_reg != RDI) { |
1731 __ movq(RDI, length_reg); | 1732 __ movq(RDI, length_reg); |
1732 } | 1733 } |
1733 Label pop_and_fail; | 1734 Label pop_and_fail; |
1734 __ pushq(RDI); // Preserve length. | 1735 __ pushq(RDI); // Preserve length. |
1735 __ SmiUntag(RDI); | 1736 __ SmiUntag(RDI); |
1736 const intptr_t fixed_size = sizeof(RawString) + kObjectAlignment - 1; | 1737 const intptr_t fixed_size = sizeof(RawString) + kObjectAlignment - 1; |
1737 __ leaq(RDI, Address(RDI, TIMES_1, fixed_size)); // RDI is a Smi. | 1738 __ leaq(RDI, Address(RDI, TIMES_1, fixed_size)); // RDI is a Smi. |
1738 __ andq(RDI, Immediate(-kObjectAlignment)); | 1739 __ andq(RDI, Immediate(-kObjectAlignment)); |
1739 | 1740 |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2016 // Set return value to Isolate::current_tag_. | 2017 // Set return value to Isolate::current_tag_. |
2017 __ movq(RAX, Address(RBX, Isolate::current_tag_offset())); | 2018 __ movq(RAX, Address(RBX, Isolate::current_tag_offset())); |
2018 __ ret(); | 2019 __ ret(); |
2019 } | 2020 } |
2020 | 2021 |
2021 #undef __ | 2022 #undef __ |
2022 | 2023 |
2023 } // namespace dart | 2024 } // namespace dart |
2024 | 2025 |
2025 #endif // defined TARGET_ARCH_X64 | 2026 #endif // defined TARGET_ARCH_X64 |
OLD | NEW |