| OLD | NEW | 
|     1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file |     1 // Copyright (c) 2014, 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_ARM64. |     5 #include "vm/globals.h"  // Needed here to get TARGET_ARCH_ARM64. | 
|     6 #if defined(TARGET_ARCH_ARM64) |     6 #if defined(TARGET_ARCH_ARM64) | 
|     7  |     7  | 
|     8 #include "vm/intrinsifier.h" |     8 #include "vm/intrinsifier.h" | 
|     9  |     9  | 
|    10 #include "vm/assembler.h" |    10 #include "vm/assembler.h" | 
|    11 #include "vm/dart_entry.h" |    11 #include "vm/dart_entry.h" | 
|    12 #include "vm/flow_graph_compiler.h" |    12 #include "vm/flow_graph_compiler.h" | 
|    13 #include "vm/object.h" |    13 #include "vm/object.h" | 
|    14 #include "vm/object_store.h" |    14 #include "vm/object_store.h" | 
|    15 #include "vm/regexp_assembler.h" |    15 #include "vm/regexp_assembler.h" | 
|    16 #include "vm/symbols.h" |    16 #include "vm/symbols.h" | 
|    17  |    17  | 
|    18 namespace dart { |    18 namespace dart { | 
|    19  |    19  | 
 |    20 DECLARE_FLAG(bool, interpret_irregexp); | 
 |    21  | 
|    20 // When entering intrinsics code: |    22 // When entering intrinsics code: | 
|    21 // R5: IC Data |    23 // R5: IC Data | 
|    22 // R4: Arguments descriptor |    24 // R4: Arguments descriptor | 
|    23 // LR: Return address |    25 // LR: Return address | 
|    24 // The R5, R4 registers can be destroyed only if there is no slow-path, i.e. |    26 // The R5, R4 registers can be destroyed only if there is no slow-path, i.e. | 
|    25 // if the intrinsified method always executes a return. |    27 // if the intrinsified method always executes a return. | 
|    26 // The FP register should not be modified, because it is used by the profiler. |    28 // The FP register should not be modified, because it is used by the profiler. | 
|    27  |    29  | 
|    28 #define __ assembler-> |    30 #define __ assembler-> | 
|    29  |    31  | 
| (...skipping 2030 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2060   StringEquality(assembler, kOneByteStringCid); |  2062   StringEquality(assembler, kOneByteStringCid); | 
|  2061 } |  2063 } | 
|  2062  |  2064  | 
|  2063  |  2065  | 
|  2064 void Intrinsifier::TwoByteString_equality(Assembler* assembler) { |  2066 void Intrinsifier::TwoByteString_equality(Assembler* assembler) { | 
|  2065   StringEquality(assembler, kTwoByteStringCid); |  2067   StringEquality(assembler, kTwoByteStringCid); | 
|  2066 } |  2068 } | 
|  2067  |  2069  | 
|  2068  |  2070  | 
|  2069 void Intrinsifier::JSRegExp_ExecuteMatch(Assembler* assembler) { |  2071 void Intrinsifier::JSRegExp_ExecuteMatch(Assembler* assembler) { | 
 |  2072   if (FLAG_interpret_irregexp) return; | 
 |  2073  | 
|  2070   static const intptr_t kRegExpParamOffset = 2 * kWordSize; |  2074   static const intptr_t kRegExpParamOffset = 2 * kWordSize; | 
|  2071   static const intptr_t kStringParamOffset = 1 * kWordSize; |  2075   static const intptr_t kStringParamOffset = 1 * kWordSize; | 
|  2072   // start_index smi is located at offset 0. |  2076   // start_index smi is located at offset 0. | 
|  2073  |  2077  | 
|  2074   // Incoming registers: |  2078   // Incoming registers: | 
|  2075   // R0: Function. (Will be reloaded with the specialized matcher function.) |  2079   // R0: Function. (Will be reloaded with the specialized matcher function.) | 
|  2076   // R4: Arguments descriptor. (Will be preserved.) |  2080   // R4: Arguments descriptor. (Will be preserved.) | 
|  2077   // R5: Unknown. (Must be GC safe on tail call.) |  2081   // R5: Unknown. (Must be GC safe on tail call.) | 
|  2078  |  2082  | 
|  2079   // Load the specialized function pointer into R0. Leverage the fact the |  2083   // Load the specialized function pointer into R0. Leverage the fact the | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2133   Isolate* isolate = Isolate::Current(); |  2137   Isolate* isolate = Isolate::Current(); | 
|  2134   __ LoadImmediate(R1, reinterpret_cast<uword>(isolate), kNoPP); |  2138   __ LoadImmediate(R1, reinterpret_cast<uword>(isolate), kNoPP); | 
|  2135   // Set return value to Isolate::current_tag_. |  2139   // Set return value to Isolate::current_tag_. | 
|  2136   __ ldr(R0, Address(R1, Isolate::current_tag_offset())); |  2140   __ ldr(R0, Address(R1, Isolate::current_tag_offset())); | 
|  2137   __ ret(); |  2141   __ ret(); | 
|  2138 } |  2142 } | 
|  2139  |  2143  | 
|  2140 }  // namespace dart |  2144 }  // namespace dart | 
|  2141  |  2145  | 
|  2142 #endif  // defined TARGET_ARCH_ARM64 |  2146 #endif  // defined TARGET_ARCH_ARM64 | 
| OLD | NEW |