Index: vm/intermediate_language_x64.cc |
=================================================================== |
--- vm/intermediate_language_x64.cc (revision 10446) |
+++ vm/intermediate_language_x64.cc (working copy) |
@@ -2005,7 +2005,13 @@ |
// Otherwise polymorphic dispatch. |
} |
// Call. |
- return Computation::MakeCallSummary(); |
+ const intptr_t kNumInputs = 2; |
+ const intptr_t kNumTemps = 0; |
+ LocationSummary* locs = |
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kCall); |
+ locs->set_in(0, Location::RegisterLocation(RAX)); |
+ locs->set_in(1, Location::RegisterLocation(RCX)); |
srdjan
2012/08/09 19:56:49
ditto
|
+ return locs; |
} |
@@ -2038,6 +2044,10 @@ |
} |
// Otherwise polymorphic dispatch? |
} |
+ Register left = locs()->in(0).reg(); |
+ Register right = locs()->in(1).reg(); |
+ __ pushq(left); |
+ __ pushq(right); |
// Not equal is always split into '==' and negate, |
Condition branch_condition = (kind() == Token::kNE) ? NOT_EQUAL : EQUAL; |
Token::Kind call_kind = (kind() == Token::kNE) ? Token::kEQ : kind(); |
@@ -2056,8 +2066,7 @@ |
kNumArguments, |
Array::ZoneHandle(), // No optional arguments. |
kNumArgsChecked); |
- ASSERT(locs()->out().reg() == RAX); |
- __ CompareObject(locs()->out().reg(), compiler->bool_true()); |
+ __ CompareObject(RAX, compiler->bool_true()); |
EmitBranchOnCondition(compiler, branch_condition); |
} |