Chromium Code Reviews| Index: vm/intermediate_language_ia32.cc |
| =================================================================== |
| --- vm/intermediate_language_ia32.cc (revision 10446) |
| +++ vm/intermediate_language_ia32.cc (working copy) |
| @@ -1999,7 +1999,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(EAX)); |
| + locs->set_in(1, Location::RegisterLocation(ECX)); |
|
srdjan
2012/08/09 19:56:49
Why do you require EAX, ECX to hold inputs?
|
| + return locs; |
| } |
| @@ -2032,6 +2038,10 @@ |
| } |
| // Otherwise polymorphic dispatch? |
| } |
| + Register left = locs()->in(0).reg(); |
| + Register right = locs()->in(1).reg(); |
| + __ pushl(left); |
| + __ pushl(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(); |
| @@ -2050,8 +2060,7 @@ |
| kNumArguments, |
| Array::ZoneHandle(), // No optional arguments. |
| kNumArgsChecked); |
| - ASSERT(locs()->out().reg() == EAX); |
| - __ CompareObject(locs()->out().reg(), compiler->bool_true()); |
| + __ CompareObject(EAX, compiler->bool_true()); |
| EmitBranchOnCondition(compiler, branch_condition); |
| } |