| 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_MIPS. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_MIPS. |
| 6 #if defined(TARGET_ARCH_MIPS) | 6 #if defined(TARGET_ARCH_MIPS) |
| 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 2143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2154 void Intrinsifier::OneByteString_equality(Assembler* assembler) { | 2154 void Intrinsifier::OneByteString_equality(Assembler* assembler) { |
| 2155 StringEquality(assembler, kOneByteStringCid); | 2155 StringEquality(assembler, kOneByteStringCid); |
| 2156 } | 2156 } |
| 2157 | 2157 |
| 2158 | 2158 |
| 2159 void Intrinsifier::TwoByteString_equality(Assembler* assembler) { | 2159 void Intrinsifier::TwoByteString_equality(Assembler* assembler) { |
| 2160 StringEquality(assembler, kTwoByteStringCid); | 2160 StringEquality(assembler, kTwoByteStringCid); |
| 2161 } | 2161 } |
| 2162 | 2162 |
| 2163 | 2163 |
| 2164 void Intrinsifier::JSRegExp_ExecuteMatch(Assembler* assembler) { | 2164 void Intrinsifier::RegExp_ExecuteMatch(Assembler* assembler) { |
| 2165 if (FLAG_interpret_irregexp) return; | 2165 if (FLAG_interpret_irregexp) return; |
| 2166 | 2166 |
| 2167 static const intptr_t kRegExpParamOffset = 2 * kWordSize; | 2167 static const intptr_t kRegExpParamOffset = 2 * kWordSize; |
| 2168 static const intptr_t kStringParamOffset = 1 * kWordSize; | 2168 static const intptr_t kStringParamOffset = 1 * kWordSize; |
| 2169 // start_index smi is located at 0. | 2169 // start_index smi is located at 0. |
| 2170 | 2170 |
| 2171 // Incoming registers: | 2171 // Incoming registers: |
| 2172 // T0: Function. (Will be reloaded with the specialized matcher function.) | 2172 // T0: Function. (Will be reloaded with the specialized matcher function.) |
| 2173 // S4: Arguments descriptor. (Will be preserved.) | 2173 // S4: Arguments descriptor. (Will be preserved.) |
| 2174 // S5: Unknown. (Must be GC safe on tail call.) | 2174 // S5: Unknown. (Must be GC safe on tail call.) |
| 2175 | 2175 |
| 2176 // Load the specialized function pointer into T0. Leverage the fact the | 2176 // Load the specialized function pointer into T0. Leverage the fact the |
| 2177 // string CIDs as well as stored function pointers are in sequence. | 2177 // string CIDs as well as stored function pointers are in sequence. |
| 2178 __ lw(T1, Address(SP, kRegExpParamOffset)); | 2178 __ lw(T1, Address(SP, kRegExpParamOffset)); |
| 2179 __ lw(T3, Address(SP, kStringParamOffset)); | 2179 __ lw(T3, Address(SP, kStringParamOffset)); |
| 2180 __ LoadClassId(T2, T3); | 2180 __ LoadClassId(T2, T3); |
| 2181 __ AddImmediate(T2, -kOneByteStringCid); | 2181 __ AddImmediate(T2, -kOneByteStringCid); |
| 2182 __ sll(T2, T2, kWordSizeLog2); | 2182 __ sll(T2, T2, kWordSizeLog2); |
| 2183 __ addu(T2, T2, T1); | 2183 __ addu(T2, T2, T1); |
| 2184 __ lw(T0, FieldAddress(T2, JSRegExp::function_offset(kOneByteStringCid))); | 2184 __ lw(T0, FieldAddress(T2, RegExp::function_offset(kOneByteStringCid))); |
| 2185 | 2185 |
| 2186 // Registers are now set up for the lazy compile stub. It expects the function | 2186 // Registers are now set up for the lazy compile stub. It expects the function |
| 2187 // in T0, the argument descriptor in S4, and IC-Data in S5. | 2187 // in T0, the argument descriptor in S4, and IC-Data in S5. |
| 2188 __ mov(S5, ZR); | 2188 __ mov(S5, ZR); |
| 2189 | 2189 |
| 2190 // Tail-call the function. | 2190 // Tail-call the function. |
| 2191 __ lw(CODE_REG, FieldAddress(T0, Function::code_offset())); | 2191 __ lw(CODE_REG, FieldAddress(T0, Function::code_offset())); |
| 2192 __ lw(T3, FieldAddress(T0, Function::entry_point_offset())); | 2192 __ lw(T3, FieldAddress(T0, Function::entry_point_offset())); |
| 2193 __ jr(T3); | 2193 __ jr(T3); |
| 2194 } | 2194 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 2222 | 2222 |
| 2223 void Intrinsifier::Profiler_getCurrentTag(Assembler* assembler) { | 2223 void Intrinsifier::Profiler_getCurrentTag(Assembler* assembler) { |
| 2224 __ LoadIsolate(V0); | 2224 __ LoadIsolate(V0); |
| 2225 __ Ret(); | 2225 __ Ret(); |
| 2226 __ delay_slot()->lw(V0, Address(V0, Isolate::current_tag_offset())); | 2226 __ delay_slot()->lw(V0, Address(V0, Isolate::current_tag_offset())); |
| 2227 } | 2227 } |
| 2228 | 2228 |
| 2229 } // namespace dart | 2229 } // namespace dart |
| 2230 | 2230 |
| 2231 #endif // defined TARGET_ARCH_MIPS | 2231 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |