| 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_X64. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. |
| 6 #if defined(TARGET_ARCH_X64) | 6 #if defined(TARGET_ARCH_X64) |
| 7 | 7 |
| 8 #include "vm/intermediate_language.h" | 8 #include "vm/intermediate_language.h" |
| 9 | 9 |
| 10 #include "lib/error.h" | 10 #include "lib/error.h" |
| (...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 __ jmp(&equality_done); | 556 __ jmp(&equality_done); |
| 557 } | 557 } |
| 558 } else { | 558 } else { |
| 559 // Call stub, load IC data in register. The stub will update ICData if | 559 // Call stub, load IC data in register. The stub will update ICData if |
| 560 // necessary. | 560 // necessary. |
| 561 Register ic_data_reg = locs->temp(0).reg(); | 561 Register ic_data_reg = locs->temp(0).reg(); |
| 562 ASSERT(ic_data_reg == RBX); // Stub depends on it. | 562 ASSERT(ic_data_reg == RBX); // Stub depends on it. |
| 563 __ LoadObject(ic_data_reg, equality_ic_data); | 563 __ LoadObject(ic_data_reg, equality_ic_data); |
| 564 compiler->GenerateCall(token_pos, | 564 compiler->GenerateCall(token_pos, |
| 565 &StubCode::EqualityWithNullArgLabel(), | 565 &StubCode::EqualityWithNullArgLabel(), |
| 566 PcDescriptors::kEqualNull, | 566 PcDescriptors::kRuntimeCall, |
| 567 locs); | 567 locs); |
| 568 __ Drop(2); | 568 __ Drop(2); |
| 569 } | 569 } |
| 570 __ Bind(&check_ne); | 570 __ Bind(&check_ne); |
| 571 if (kind == Token::kNE) { | 571 if (kind == Token::kNE) { |
| 572 Label true_label, done; | 572 Label true_label, done; |
| 573 // Negate the condition: true label returns false and vice versa. | 573 // Negate the condition: true label returns false and vice versa. |
| 574 __ CompareObject(RAX, Bool::True()); | 574 __ CompareObject(RAX, Bool::True()); |
| 575 __ j(EQUAL, &true_label, Assembler::kNearJump); | 575 __ j(EQUAL, &true_label, Assembler::kNearJump); |
| 576 __ LoadObject(RAX, Bool::True()); | 576 __ LoadObject(RAX, Bool::True()); |
| (...skipping 3752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4329 PcDescriptors::kOther, | 4329 PcDescriptors::kOther, |
| 4330 locs()); | 4330 locs()); |
| 4331 __ Drop(2); // Discard type arguments and receiver. | 4331 __ Drop(2); // Discard type arguments and receiver. |
| 4332 } | 4332 } |
| 4333 | 4333 |
| 4334 } // namespace dart | 4334 } // namespace dart |
| 4335 | 4335 |
| 4336 #undef __ | 4336 #undef __ |
| 4337 | 4337 |
| 4338 #endif // defined TARGET_ARCH_X64 | 4338 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |