OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 "v8.h" | 5 #include "v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 |
8 | 8 |
9 #include "bootstrapper.h" | 9 #include "bootstrapper.h" |
10 #include "code-stubs.h" | 10 #include "code-stubs.h" |
(...skipping 2703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2714 // Replace subject with first string. | 2714 // Replace subject with first string. |
2715 __ Ldr(subject, FieldMemOperand(subject, ConsString::kFirstOffset)); | 2715 __ Ldr(subject, FieldMemOperand(subject, ConsString::kFirstOffset)); |
2716 | 2716 |
2717 // (4) Is subject external? If yes, go to (7). | 2717 // (4) Is subject external? If yes, go to (7). |
2718 __ Bind(&check_underlying); | 2718 __ Bind(&check_underlying); |
2719 // Reload the string type. | 2719 // Reload the string type. |
2720 __ Ldr(x10, FieldMemOperand(subject, HeapObject::kMapOffset)); | 2720 __ Ldr(x10, FieldMemOperand(subject, HeapObject::kMapOffset)); |
2721 __ Ldrb(string_type, FieldMemOperand(x10, Map::kInstanceTypeOffset)); | 2721 __ Ldrb(string_type, FieldMemOperand(x10, Map::kInstanceTypeOffset)); |
2722 STATIC_ASSERT(kSeqStringTag == 0); | 2722 STATIC_ASSERT(kSeqStringTag == 0); |
2723 // The underlying external string is never a short external string. | 2723 // The underlying external string is never a short external string. |
2724 STATIC_CHECK(ExternalString::kMaxShortLength < ConsString::kMinLength); | 2724 STATIC_ASSERT(ExternalString::kMaxShortLength < ConsString::kMinLength); |
2725 STATIC_CHECK(ExternalString::kMaxShortLength < SlicedString::kMinLength); | 2725 STATIC_ASSERT(ExternalString::kMaxShortLength < SlicedString::kMinLength); |
2726 __ TestAndBranchIfAnySet(string_type.X(), | 2726 __ TestAndBranchIfAnySet(string_type.X(), |
2727 kStringRepresentationMask, | 2727 kStringRepresentationMask, |
2728 &external_string); // Go to (7). | 2728 &external_string); // Go to (7). |
2729 | 2729 |
2730 // (5) Sequential string. Load regexp code according to encoding. | 2730 // (5) Sequential string. Load regexp code according to encoding. |
2731 __ Bind(&seq_string); | 2731 __ Bind(&seq_string); |
2732 | 2732 |
2733 // Check that the third argument is a positive smi less than the subject | 2733 // Check that the third argument is a positive smi less than the subject |
2734 // string length. A negative value will be greater (unsigned comparison). | 2734 // string length. A negative value will be greater (unsigned comparison). |
2735 ASSERT(jssp.Is(__ StackPointer())); | 2735 ASSERT(jssp.Is(__ StackPointer())); |
(...skipping 2829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5565 MemOperand(fp, 6 * kPointerSize), | 5565 MemOperand(fp, 6 * kPointerSize), |
5566 NULL); | 5566 NULL); |
5567 } | 5567 } |
5568 | 5568 |
5569 | 5569 |
5570 #undef __ | 5570 #undef __ |
5571 | 5571 |
5572 } } // namespace v8::internal | 5572 } } // namespace v8::internal |
5573 | 5573 |
5574 #endif // V8_TARGET_ARCH_ARM64 | 5574 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |