Index: runtime/vm/intermediate_language_ia32.cc |
=================================================================== |
--- runtime/vm/intermediate_language_ia32.cc (revision 16802) |
+++ runtime/vm/intermediate_language_ia32.cc (working copy) |
@@ -31,6 +31,33 @@ |
} |
+LocationSummary* PushArgumentInstr::MakeLocationSummary() const { |
+ const intptr_t kNumInputs = 1; |
+ const intptr_t kNumTemps= 0; |
+ LocationSummary* locs = |
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
+ locs->set_in(0, Location::AnyOrConstant(value())); |
+ return locs; |
+} |
+ |
+ |
+void PushArgumentInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
+ // In SSA mode, we need an explicit push. Nothing to do in non-SSA mode |
+ // where PushArgument is handled by BindInstr::EmitNativeCode. |
+ if (compiler->is_optimizing()) { |
+ Location value = locs()->in(0); |
+ if (value.IsRegister()) { |
+ __ pushl(value.reg()); |
+ } else if (value.IsConstant()) { |
+ __ PushObject(value.constant()); |
+ } else { |
+ ASSERT(value.IsStackSlot()); |
+ __ pushl(value.ToStackSlotAddress()); |
+ } |
+ } |
+} |
+ |
+ |
LocationSummary* ReturnInstr::MakeLocationSummary() const { |
const intptr_t kNumInputs = 1; |
const intptr_t kNumTemps = 1; |