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" | 5 #include "vm/globals.h" |
6 #if defined(TARGET_ARCH_MIPS) | 6 #if defined(TARGET_ARCH_MIPS) |
7 | 7 |
8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
9 #include "vm/code_generator.h" | 9 #include "vm/code_generator.h" |
10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
(...skipping 2170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2181 __ CallRuntime(kBigintCompareRuntimeEntry, 2); | 2181 __ CallRuntime(kBigintCompareRuntimeEntry, 2); |
2182 __ TraceSimMsg("IdenticalWithNumberCheckStub return"); | 2182 __ TraceSimMsg("IdenticalWithNumberCheckStub return"); |
2183 // Result in V0, 0 means equal. | 2183 // Result in V0, 0 means equal. |
2184 __ LeaveStubFrame(); | 2184 __ LeaveStubFrame(); |
2185 __ b(&done); | 2185 __ b(&done); |
2186 __ delay_slot()->mov(CMPRES1, V0); | 2186 __ delay_slot()->mov(CMPRES1, V0); |
2187 | 2187 |
2188 __ Bind(&reference_compare); | 2188 __ Bind(&reference_compare); |
2189 __ subu(CMPRES1, left, right); | 2189 __ subu(CMPRES1, left, right); |
2190 __ Bind(&done); | 2190 __ Bind(&done); |
2191 // A branch or test after this comparison will check CMPRES1 == CMPRES2. | 2191 // A branch or test after this comparison will check CMPRES1 == ZR. |
2192 __ mov(CMPRES2, ZR); | |
2193 } | 2192 } |
2194 | 2193 |
2195 | 2194 |
2196 // Called only from unoptimized code. All relevant registers have been saved. | 2195 // Called only from unoptimized code. All relevant registers have been saved. |
2197 // RA: return address. | 2196 // RA: return address. |
2198 // SP + 4: left operand. | 2197 // SP + 4: left operand. |
2199 // SP + 0: right operand. | 2198 // SP + 0: right operand. |
2200 // Returns: CMPRES1 is zero if equal, non-zero otherwise. | 2199 // Returns: CMPRES1 is zero if equal, non-zero otherwise. |
2201 void StubCode::GenerateUnoptimizedIdenticalWithNumberCheckStub( | 2200 void StubCode::GenerateUnoptimizedIdenticalWithNumberCheckStub( |
2202 Assembler* assembler) { | 2201 Assembler* assembler) { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2241 const Register right = T0; | 2240 const Register right = T0; |
2242 __ lw(left, Address(SP, 1 * kWordSize)); | 2241 __ lw(left, Address(SP, 1 * kWordSize)); |
2243 __ lw(right, Address(SP, 0 * kWordSize)); | 2242 __ lw(right, Address(SP, 0 * kWordSize)); |
2244 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp1, temp2); | 2243 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp1, temp2); |
2245 __ Ret(); | 2244 __ Ret(); |
2246 } | 2245 } |
2247 | 2246 |
2248 } // namespace dart | 2247 } // namespace dart |
2249 | 2248 |
2250 #endif // defined TARGET_ARCH_MIPS | 2249 #endif // defined TARGET_ARCH_MIPS |
OLD | NEW |