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 |