| 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_X64) | 6 #if defined(TARGET_ARCH_X64) |
| 7 | 7 |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
| (...skipping 2013 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2024 RawBigint* left, | 2024 RawBigint* left, |
| 2025 RawBigint* right); | 2025 RawBigint* right); |
| 2026 | 2026 |
| 2027 | 2027 |
| 2028 // Does identical check (object references are equal or not equal) with special | 2028 // Does identical check (object references are equal or not equal) with special |
| 2029 // checks for boxed numbers. | 2029 // checks for boxed numbers. |
| 2030 // Left and right are pushed on stack. | 2030 // Left and right are pushed on stack. |
| 2031 // Return ZF set. | 2031 // Return ZF set. |
| 2032 // Note: A Mint cannot contain a value that would fit in Smi, a Bigint | 2032 // Note: A Mint cannot contain a value that would fit in Smi, a Bigint |
| 2033 // cannot contain a value that fits in Mint or Smi. | 2033 // cannot contain a value that fits in Mint or Smi. |
| 2034 void StubCode::GenerateIdenticalWithNumberCheckStub(Assembler* assembler, | 2034 static void GenerateIdenticalWithNumberCheckStub(Assembler* assembler, |
| 2035 const Register left, | 2035 const Register left, |
| 2036 const Register right, | 2036 const Register right) { |
| 2037 const Register unused1, | |
| 2038 const Register unused2) { | |
| 2039 Label reference_compare, done, check_mint, check_bigint; | 2037 Label reference_compare, done, check_mint, check_bigint; |
| 2040 // If any of the arguments is Smi do reference compare. | 2038 // If any of the arguments is Smi do reference compare. |
| 2041 __ testq(left, Immediate(kSmiTagMask)); | 2039 __ testq(left, Immediate(kSmiTagMask)); |
| 2042 __ j(ZERO, &reference_compare); | 2040 __ j(ZERO, &reference_compare); |
| 2043 __ testq(right, Immediate(kSmiTagMask)); | 2041 __ testq(right, Immediate(kSmiTagMask)); |
| 2044 __ j(ZERO, &reference_compare); | 2042 __ j(ZERO, &reference_compare); |
| 2045 | 2043 |
| 2046 // Value compare for two doubles. | 2044 // Value compare for two doubles. |
| 2047 __ CompareClassId(left, kDoubleCid); | 2045 __ CompareClassId(left, kDoubleCid); |
| 2048 __ j(NOT_EQUAL, &check_mint, Assembler::kNearJump); | 2046 __ j(NOT_EQUAL, &check_mint, Assembler::kNearJump); |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2184 // Result: | 2182 // Result: |
| 2185 // RCX: entry point. | 2183 // RCX: entry point. |
| 2186 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) { | 2184 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) { |
| 2187 EmitMegamorphicLookup(assembler, RDI, RBX, RCX); | 2185 EmitMegamorphicLookup(assembler, RDI, RBX, RCX); |
| 2188 __ ret(); | 2186 __ ret(); |
| 2189 } | 2187 } |
| 2190 | 2188 |
| 2191 } // namespace dart | 2189 } // namespace dart |
| 2192 | 2190 |
| 2193 #endif // defined TARGET_ARCH_X64 | 2191 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |