| 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 2177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2188 __ CallRuntime(kBigintCompareRuntimeEntry, 2); | 2188 __ CallRuntime(kBigintCompareRuntimeEntry, 2); |
| 2189 __ TraceSimMsg("IdenticalWithNumberCheckStub return"); | 2189 __ TraceSimMsg("IdenticalWithNumberCheckStub return"); |
| 2190 // Result in V0, 0 means equal. | 2190 // Result in V0, 0 means equal. |
| 2191 __ LeaveStubFrame(); | 2191 __ LeaveStubFrame(); |
| 2192 __ b(&done); | 2192 __ b(&done); |
| 2193 __ delay_slot()->mov(CMPRES1, V0); | 2193 __ delay_slot()->mov(CMPRES1, V0); |
| 2194 | 2194 |
| 2195 __ Bind(&reference_compare); | 2195 __ Bind(&reference_compare); |
| 2196 __ subu(CMPRES1, left, right); | 2196 __ subu(CMPRES1, left, right); |
| 2197 __ Bind(&done); | 2197 __ Bind(&done); |
| 2198 // A branch or test after this comparison will check CMPRES1 == CMPRES2. | 2198 // A branch or test after this comparison will check CMPRES1 == ZR. |
| 2199 __ mov(CMPRES2, ZR); | |
| 2200 } | 2199 } |
| 2201 | 2200 |
| 2202 | 2201 |
| 2203 // Called only from unoptimized code. All relevant registers have been saved. | 2202 // Called only from unoptimized code. All relevant registers have been saved. |
| 2204 // RA: return address. | 2203 // RA: return address. |
| 2205 // SP + 4: left operand. | 2204 // SP + 4: left operand. |
| 2206 // SP + 0: right operand. | 2205 // SP + 0: right operand. |
| 2207 // Returns: CMPRES1 is zero if equal, non-zero otherwise. | 2206 // Returns: CMPRES1 is zero if equal, non-zero otherwise. |
| 2208 void StubCode::GenerateUnoptimizedIdenticalWithNumberCheckStub( | 2207 void StubCode::GenerateUnoptimizedIdenticalWithNumberCheckStub( |
| 2209 Assembler* assembler) { | 2208 Assembler* assembler) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2248 const Register right = T0; | 2247 const Register right = T0; |
| 2249 __ lw(left, Address(SP, 1 * kWordSize)); | 2248 __ lw(left, Address(SP, 1 * kWordSize)); |
| 2250 __ lw(right, Address(SP, 0 * kWordSize)); | 2249 __ lw(right, Address(SP, 0 * kWordSize)); |
| 2251 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp1, temp2); | 2250 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp1, temp2); |
| 2252 __ Ret(); | 2251 __ Ret(); |
| 2253 } | 2252 } |
| 2254 | 2253 |
| 2255 } // namespace dart | 2254 } // namespace dart |
| 2256 | 2255 |
| 2257 #endif // defined TARGET_ARCH_MIPS | 2256 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |