Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: runtime/vm/intermediate_language_x64.cc

Issue 2949513002: Revert "Reduce copying, redundancy & repetition for codegen of comparison instructions" (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/intermediate_language_mips.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 158
159 159
160 void IfThenElseInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 160 void IfThenElseInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
161 ASSERT(locs()->out(0).reg() == RDX); 161 ASSERT(locs()->out(0).reg() == RDX);
162 162
163 // Clear upper part of the out register. We are going to use setcc on it 163 // Clear upper part of the out register. We are going to use setcc on it
164 // which is a byte move. 164 // which is a byte move.
165 __ xorq(RDX, RDX); 165 __ xorq(RDX, RDX);
166 166
167 // Emit comparison code. This must not overwrite the result register. 167 // Emit comparison code. This must not overwrite the result register.
168 // IfThenElseInstr::Supports() should prevent EmitComparisonCode from using
169 // the labels or returning an invalid condition.
170 BranchLabels labels = {NULL, NULL, NULL}; 168 BranchLabels labels = {NULL, NULL, NULL};
171 Condition true_condition = comparison()->EmitComparisonCode(compiler, labels); 169 Condition true_condition = comparison()->EmitComparisonCode(compiler, labels);
172 ASSERT(true_condition != INVALID_CONDITION);
173 170
174 const bool is_power_of_two_kind = IsPowerOfTwoKind(if_true_, if_false_); 171 const bool is_power_of_two_kind = IsPowerOfTwoKind(if_true_, if_false_);
175 172
176 intptr_t true_value = if_true_; 173 intptr_t true_value = if_true_;
177 intptr_t false_value = if_false_; 174 intptr_t false_value = if_false_;
178 175
179 if (is_power_of_two_kind) { 176 if (is_power_of_two_kind) {
180 if (true_value == 0) { 177 if (true_value == 0) {
181 // We need to have zero in RDX on true_condition. 178 // We need to have zero in RDX on true_condition.
182 true_condition = NegateCondition(true_condition); 179 true_condition = NegateCondition(true_condition);
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 BranchLabels labels) { 566 BranchLabels labels) {
570 if ((operation_cid() == kSmiCid) || (operation_cid() == kMintCid)) { 567 if ((operation_cid() == kSmiCid) || (operation_cid() == kMintCid)) {
571 return EmitInt64ComparisonOp(compiler, *locs(), kind()); 568 return EmitInt64ComparisonOp(compiler, *locs(), kind());
572 } else { 569 } else {
573 ASSERT(operation_cid() == kDoubleCid); 570 ASSERT(operation_cid() == kDoubleCid);
574 return EmitDoubleComparisonOp(compiler, *locs(), kind(), labels); 571 return EmitDoubleComparisonOp(compiler, *locs(), kind(), labels);
575 } 572 }
576 } 573 }
577 574
578 575
579 void ComparisonInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 576 void EqualityCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
577 ASSERT((kind() == Token::kEQ) || (kind() == Token::kNE));
578
580 Label is_true, is_false; 579 Label is_true, is_false;
581 BranchLabels labels = {&is_true, &is_false, &is_false}; 580 BranchLabels labels = {&is_true, &is_false, &is_false};
582 Condition true_condition = EmitComparisonCode(compiler, labels); 581 Condition true_condition = EmitComparisonCode(compiler, labels);
583 if (true_condition != INVALID_CONDITION) { 582 EmitBranchOnCondition(compiler, true_condition, labels);
584 EmitBranchOnCondition(compiler, true_condition, labels);
585 }
586 583
587 Register result = locs()->out(0).reg(); 584 Register result = locs()->out(0).reg();
588 Label done; 585 Label done;
589 __ Bind(&is_false); 586 __ Bind(&is_false);
590 __ LoadObject(result, Bool::False()); 587 __ LoadObject(result, Bool::False());
591 __ jmp(&done); 588 __ jmp(&done);
592 __ Bind(&is_true); 589 __ Bind(&is_true);
593 __ LoadObject(result, Bool::True()); 590 __ LoadObject(result, Bool::True());
594 __ Bind(&done); 591 __ Bind(&done);
595 } 592 }
596 593
597 594
598 void ComparisonInstr::EmitBranchCode(FlowGraphCompiler* compiler, 595 void EqualityCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler,
599 BranchInstr* branch) { 596 BranchInstr* branch) {
597 ASSERT((kind() == Token::kNE) || (kind() == Token::kEQ));
598
600 BranchLabels labels = compiler->CreateBranchLabels(branch); 599 BranchLabels labels = compiler->CreateBranchLabels(branch);
601 Condition true_condition = EmitComparisonCode(compiler, labels); 600 Condition true_condition = EmitComparisonCode(compiler, labels);
602 if (true_condition != INVALID_CONDITION) { 601 EmitBranchOnCondition(compiler, true_condition, labels);
603 EmitBranchOnCondition(compiler, true_condition, labels);
604 }
605 } 602 }
606 603
607 604
608 LocationSummary* TestSmiInstr::MakeLocationSummary(Zone* zone, bool opt) const { 605 LocationSummary* TestSmiInstr::MakeLocationSummary(Zone* zone, bool opt) const {
609 const intptr_t kNumInputs = 2; 606 const intptr_t kNumInputs = 2;
610 const intptr_t kNumTemps = 0; 607 const intptr_t kNumTemps = 0;
611 LocationSummary* locs = new (zone) 608 LocationSummary* locs = new (zone)
612 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall); 609 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
613 locs->set_in(0, Location::RequiresRegister()); 610 locs->set_in(0, Location::RequiresRegister());
614 // Only one input can be a constant operand. The case of two constant 611 // Only one input can be a constant operand. The case of two constant
(...skipping 12 matching lines...) Expand all
627 const int64_t imm = reinterpret_cast<int64_t>(right.constant().raw()); 624 const int64_t imm = reinterpret_cast<int64_t>(right.constant().raw());
628 __ TestImmediate(left_reg, Immediate(imm)); 625 __ TestImmediate(left_reg, Immediate(imm));
629 } else { 626 } else {
630 __ testq(left_reg, right.reg()); 627 __ testq(left_reg, right.reg());
631 } 628 }
632 Condition true_condition = (kind() == Token::kNE) ? NOT_ZERO : ZERO; 629 Condition true_condition = (kind() == Token::kNE) ? NOT_ZERO : ZERO;
633 return true_condition; 630 return true_condition;
634 } 631 }
635 632
636 633
634 void TestSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
635 // Never emitted outside of the BranchInstr.
636 UNREACHABLE();
637 }
638
639
640 void TestSmiInstr::EmitBranchCode(FlowGraphCompiler* compiler,
641 BranchInstr* branch) {
642 BranchLabels labels = compiler->CreateBranchLabels(branch);
643 Condition true_condition = EmitComparisonCode(compiler, labels);
644 EmitBranchOnCondition(compiler, true_condition, labels);
645 }
646
647
637 LocationSummary* TestCidsInstr::MakeLocationSummary(Zone* zone, 648 LocationSummary* TestCidsInstr::MakeLocationSummary(Zone* zone,
638 bool opt) const { 649 bool opt) const {
639 const intptr_t kNumInputs = 1; 650 const intptr_t kNumInputs = 1;
640 const intptr_t kNumTemps = 1; 651 const intptr_t kNumTemps = 1;
641 LocationSummary* locs = new (zone) 652 LocationSummary* locs = new (zone)
642 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall); 653 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
643 locs->set_in(0, Location::RequiresRegister()); 654 locs->set_in(0, Location::RequiresRegister());
644 locs->set_temp(0, Location::RequiresRegister()); 655 locs->set_temp(0, Location::RequiresRegister());
645 locs->set_out(0, Location::RequiresRegister()); 656 locs->set_out(0, Location::RequiresRegister());
646 return locs; 657 return locs;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 // If the cid is not in the list, jump to the opposite label from the cids 689 // If the cid is not in the list, jump to the opposite label from the cids
679 // that are in the list. These must be all the same (see asserts in the 690 // that are in the list. These must be all the same (see asserts in the
680 // constructor). 691 // constructor).
681 Label* target = result ? labels.false_label : labels.true_label; 692 Label* target = result ? labels.false_label : labels.true_label;
682 if (target != labels.fall_through) { 693 if (target != labels.fall_through) {
683 __ jmp(target); 694 __ jmp(target);
684 } 695 }
685 } else { 696 } else {
686 __ jmp(deopt); 697 __ jmp(deopt);
687 } 698 }
688 // Dummy result as this method already did the jump, there's no need 699 // Dummy result as the last instruction is a jump, any conditional
689 // for the caller to branch on a condition. 700 // branch using the result will therefore be skipped.
690 return INVALID_CONDITION; 701 return ZERO;
691 } 702 }
692 703
693 704
705 void TestCidsInstr::EmitBranchCode(FlowGraphCompiler* compiler,
706 BranchInstr* branch) {
707 BranchLabels labels = compiler->CreateBranchLabels(branch);
708 EmitComparisonCode(compiler, labels);
709 }
710
711
712 void TestCidsInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
713 Register result_reg = locs()->out(0).reg();
714 Label is_true, is_false, done;
715 BranchLabels labels = {&is_true, &is_false, &is_false};
716 EmitComparisonCode(compiler, labels);
717 __ Bind(&is_false);
718 __ LoadObject(result_reg, Bool::False());
719 __ jmp(&done, Assembler::kNearJump);
720 __ Bind(&is_true);
721 __ LoadObject(result_reg, Bool::True());
722 __ Bind(&done);
723 }
724
725
694 LocationSummary* RelationalOpInstr::MakeLocationSummary(Zone* zone, 726 LocationSummary* RelationalOpInstr::MakeLocationSummary(Zone* zone,
695 bool opt) const { 727 bool opt) const {
696 const intptr_t kNumInputs = 2; 728 const intptr_t kNumInputs = 2;
697 const intptr_t kNumTemps = 0; 729 const intptr_t kNumTemps = 0;
698 if (operation_cid() == kDoubleCid) { 730 if (operation_cid() == kDoubleCid) {
699 LocationSummary* summary = new (zone) 731 LocationSummary* summary = new (zone)
700 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall); 732 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
701 summary->set_in(0, Location::RequiresFpuRegister()); 733 summary->set_in(0, Location::RequiresFpuRegister());
702 summary->set_in(1, Location::RequiresFpuRegister()); 734 summary->set_in(1, Location::RequiresFpuRegister());
703 summary->set_out(0, Location::RequiresRegister()); 735 summary->set_out(0, Location::RequiresRegister());
(...skipping 24 matching lines...) Expand all
728 BranchLabels labels) { 760 BranchLabels labels) {
729 if ((operation_cid() == kSmiCid) || (operation_cid() == kMintCid)) { 761 if ((operation_cid() == kSmiCid) || (operation_cid() == kMintCid)) {
730 return EmitInt64ComparisonOp(compiler, *locs(), kind()); 762 return EmitInt64ComparisonOp(compiler, *locs(), kind());
731 } else { 763 } else {
732 ASSERT(operation_cid() == kDoubleCid); 764 ASSERT(operation_cid() == kDoubleCid);
733 return EmitDoubleComparisonOp(compiler, *locs(), kind(), labels); 765 return EmitDoubleComparisonOp(compiler, *locs(), kind(), labels);
734 } 766 }
735 } 767 }
736 768
737 769
770 void RelationalOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
771 Label is_true, is_false;
772 BranchLabels labels = {&is_true, &is_false, &is_false};
773 Condition true_condition = EmitComparisonCode(compiler, labels);
774 EmitBranchOnCondition(compiler, true_condition, labels);
775
776 Register result = locs()->out(0).reg();
777 Label done;
778 __ Bind(&is_false);
779 __ LoadObject(result, Bool::False());
780 __ jmp(&done);
781 __ Bind(&is_true);
782 __ LoadObject(result, Bool::True());
783 __ Bind(&done);
784 }
785
786
787 void RelationalOpInstr::EmitBranchCode(FlowGraphCompiler* compiler,
788 BranchInstr* branch) {
789 BranchLabels labels = compiler->CreateBranchLabels(branch);
790 Condition true_condition = EmitComparisonCode(compiler, labels);
791 EmitBranchOnCondition(compiler, true_condition, labels);
792 }
793
794
738 LocationSummary* NativeCallInstr::MakeLocationSummary(Zone* zone, 795 LocationSummary* NativeCallInstr::MakeLocationSummary(Zone* zone,
739 bool opt) const { 796 bool opt) const {
740 return MakeCallSummary(zone); 797 return MakeCallSummary(zone);
741 } 798 }
742 799
743 800
744 void NativeCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 801 void NativeCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
745 SetupNative(); 802 SetupNative();
746 Register result = locs()->out(0).reg(); 803 Register result = locs()->out(0).reg();
747 const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function()); 804 const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function());
(...skipping 2297 matching lines...) Expand 10 before | Expand all | Expand 10 after
3045 3102
3046 void CheckedSmiComparisonInstr::EmitBranchCode(FlowGraphCompiler* compiler, 3103 void CheckedSmiComparisonInstr::EmitBranchCode(FlowGraphCompiler* compiler,
3047 BranchInstr* branch) { 3104 BranchInstr* branch) {
3048 BranchLabels labels = compiler->CreateBranchLabels(branch); 3105 BranchLabels labels = compiler->CreateBranchLabels(branch);
3049 CheckedSmiComparisonSlowPath* slow_path = new CheckedSmiComparisonSlowPath( 3106 CheckedSmiComparisonSlowPath* slow_path = new CheckedSmiComparisonSlowPath(
3050 this, compiler->CurrentTryIndex(), labels, 3107 this, compiler->CurrentTryIndex(), labels,
3051 /* merged = */ true); 3108 /* merged = */ true);
3052 compiler->AddSlowPathCode(slow_path); 3109 compiler->AddSlowPathCode(slow_path);
3053 EMIT_SMI_CHECK; 3110 EMIT_SMI_CHECK;
3054 Condition true_condition = EmitComparisonCode(compiler, labels); 3111 Condition true_condition = EmitComparisonCode(compiler, labels);
3055 ASSERT(true_condition != INVALID_CONDITION);
3056 EmitBranchOnCondition(compiler, true_condition, labels); 3112 EmitBranchOnCondition(compiler, true_condition, labels);
3057 __ Bind(slow_path->exit_label()); 3113 __ Bind(slow_path->exit_label());
3058 } 3114 }
3059 3115
3060 3116
3061 void CheckedSmiComparisonInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 3117 void CheckedSmiComparisonInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
3062 Label true_label, false_label, done; 3118 Label true_label, false_label, done;
3063 BranchLabels labels = {&true_label, &false_label, &false_label}; 3119 BranchLabels labels = {&true_label, &false_label, &false_label};
3064 CheckedSmiComparisonSlowPath* slow_path = new CheckedSmiComparisonSlowPath( 3120 CheckedSmiComparisonSlowPath* slow_path = new CheckedSmiComparisonSlowPath(
3065 this, compiler->CurrentTryIndex(), labels, 3121 this, compiler->CurrentTryIndex(), labels,
3066 /* merged = */ false); 3122 /* merged = */ false);
3067 compiler->AddSlowPathCode(slow_path); 3123 compiler->AddSlowPathCode(slow_path);
3068 EMIT_SMI_CHECK; 3124 EMIT_SMI_CHECK;
3069 Condition true_condition = EmitComparisonCode(compiler, labels); 3125 Condition true_condition = EmitComparisonCode(compiler, labels);
3070 ASSERT(true_condition != INVALID_CONDITION);
3071 EmitBranchOnCondition(compiler, true_condition, labels); 3126 EmitBranchOnCondition(compiler, true_condition, labels);
3072 Register result = locs()->out(0).reg(); 3127 Register result = locs()->out(0).reg();
3073 __ Bind(&false_label); 3128 __ Bind(&false_label);
3074 __ LoadObject(result, Bool::False()); 3129 __ LoadObject(result, Bool::False());
3075 __ jmp(&done); 3130 __ jmp(&done);
3076 __ Bind(&true_label); 3131 __ Bind(&true_label);
3077 __ LoadObject(result, Bool::True()); 3132 __ LoadObject(result, Bool::True());
3078 __ Bind(&done); 3133 __ Bind(&done);
3079 __ Bind(slow_path->exit_label()); 3134 __ Bind(slow_path->exit_label());
3080 } 3135 }
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after
3889 __ AddImmediate(RSP, Immediate(kDoubleSize)); 3944 __ AddImmediate(RSP, Immediate(kDoubleSize));
3890 // Mask off the sign. 3945 // Mask off the sign.
3891 __ AndImmediate(temp, Immediate(0x7FFFFFFFFFFFFFFFLL)); 3946 __ AndImmediate(temp, Immediate(0x7FFFFFFFFFFFFFFFLL));
3892 // Compare with +infinity. 3947 // Compare with +infinity.
3893 __ CompareImmediate(temp, Immediate(0x7FF0000000000000LL)); 3948 __ CompareImmediate(temp, Immediate(0x7FF0000000000000LL));
3894 return is_negated ? NOT_EQUAL : EQUAL; 3949 return is_negated ? NOT_EQUAL : EQUAL;
3895 } 3950 }
3896 } 3951 }
3897 3952
3898 3953
3954 void DoubleTestOpInstr::EmitBranchCode(FlowGraphCompiler* compiler,
3955 BranchInstr* branch) {
3956 ASSERT(compiler->is_optimizing());
3957 BranchLabels labels = compiler->CreateBranchLabels(branch);
3958 Condition true_condition = EmitComparisonCode(compiler, labels);
3959 EmitBranchOnCondition(compiler, true_condition, labels);
3960 }
3961
3962
3963 void DoubleTestOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
3964 Label is_true, is_false;
3965 BranchLabels labels = {&is_true, &is_false, &is_false};
3966 Condition true_condition = EmitComparisonCode(compiler, labels);
3967 EmitBranchOnCondition(compiler, true_condition, labels);
3968
3969 Register result = locs()->out(0).reg();
3970 Label done;
3971 __ Bind(&is_false);
3972 __ LoadObject(result, Bool::False());
3973 __ jmp(&done);
3974 __ Bind(&is_true);
3975 __ LoadObject(result, Bool::True());
3976 __ Bind(&done);
3977 }
3978
3979
3899 LocationSummary* BinaryFloat32x4OpInstr::MakeLocationSummary(Zone* zone, 3980 LocationSummary* BinaryFloat32x4OpInstr::MakeLocationSummary(Zone* zone,
3900 bool opt) const { 3981 bool opt) const {
3901 const intptr_t kNumInputs = 2; 3982 const intptr_t kNumInputs = 2;
3902 const intptr_t kNumTemps = 0; 3983 const intptr_t kNumTemps = 0;
3903 LocationSummary* summary = new (zone) 3984 LocationSummary* summary = new (zone)
3904 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall); 3985 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
3905 summary->set_in(0, Location::RequiresFpuRegister()); 3986 summary->set_in(0, Location::RequiresFpuRegister());
3906 summary->set_in(1, Location::RequiresFpuRegister()); 3987 summary->set_in(1, Location::RequiresFpuRegister());
3907 summary->set_out(0, Location::SameAsFirstInput()); 3988 summary->set_out(0, Location::SameAsFirstInput());
3908 return summary; 3989 return summary;
(...skipping 2641 matching lines...) Expand 10 before | Expand all | Expand 10 after
6550 left.reg(), right.reg(), needs_number_check(), token_pos(), deopt_id_); 6631 left.reg(), right.reg(), needs_number_check(), token_pos(), deopt_id_);
6551 } 6632 }
6552 if (kind() != Token::kEQ_STRICT) { 6633 if (kind() != Token::kEQ_STRICT) {
6553 ASSERT(kind() == Token::kNE_STRICT); 6634 ASSERT(kind() == Token::kNE_STRICT);
6554 true_condition = NegateCondition(true_condition); 6635 true_condition = NegateCondition(true_condition);
6555 } 6636 }
6556 return true_condition; 6637 return true_condition;
6557 } 6638 }
6558 6639
6559 6640
6641 void StrictCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
6642 ASSERT(kind() == Token::kEQ_STRICT || kind() == Token::kNE_STRICT);
6643
6644 Label is_true, is_false;
6645 BranchLabels labels = {&is_true, &is_false, &is_false};
6646
6647 Condition true_condition = EmitComparisonCode(compiler, labels);
6648 EmitBranchOnCondition(compiler, true_condition, labels);
6649
6650 Register result = locs()->out(0).reg();
6651 Label done;
6652 __ Bind(&is_false);
6653 __ LoadObject(result, Bool::False());
6654 __ jmp(&done);
6655 __ Bind(&is_true);
6656 __ LoadObject(result, Bool::True());
6657 __ Bind(&done);
6658 }
6659
6660
6661 void StrictCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler,
6662 BranchInstr* branch) {
6663 ASSERT(kind() == Token::kEQ_STRICT || kind() == Token::kNE_STRICT);
6664
6665 BranchLabels labels = compiler->CreateBranchLabels(branch);
6666 Condition true_condition = EmitComparisonCode(compiler, labels);
6667 EmitBranchOnCondition(compiler, true_condition, labels);
6668 }
6669
6670
6560 LocationSummary* ClosureCallInstr::MakeLocationSummary(Zone* zone, 6671 LocationSummary* ClosureCallInstr::MakeLocationSummary(Zone* zone,
6561 bool opt) const { 6672 bool opt) const {
6562 const intptr_t kNumInputs = 1; 6673 const intptr_t kNumInputs = 1;
6563 const intptr_t kNumTemps = 0; 6674 const intptr_t kNumTemps = 0;
6564 LocationSummary* summary = new (zone) 6675 LocationSummary* summary = new (zone)
6565 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall); 6676 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
6566 summary->set_in(0, Location::RegisterLocation(RAX)); // Function. 6677 summary->set_in(0, Location::RegisterLocation(RAX)); // Function.
6567 summary->set_out(0, Location::RegisterLocation(RAX)); 6678 summary->set_out(0, Location::RegisterLocation(RAX));
6568 return summary; 6679 return summary;
6569 } 6680 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
6670 __ Drop(1); 6781 __ Drop(1);
6671 __ popq(result); 6782 __ popq(result);
6672 } 6783 }
6673 6784
6674 6785
6675 } // namespace dart 6786 } // namespace dart
6676 6787
6677 #undef __ 6788 #undef __
6678 6789
6679 #endif // defined TARGET_ARCH_X64 6790 #endif // defined TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_mips.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698