Chromium Code Reviews| Index: runtime/vm/intermediate_language_arm64.cc |
| =================================================================== |
| --- runtime/vm/intermediate_language_arm64.cc (revision 35440) |
| +++ runtime/vm/intermediate_language_arm64.cc (working copy) |
| @@ -1345,13 +1345,17 @@ |
| LocationSummary* ThrowInstr::MakeLocationSummary(bool opt) const { |
| - UNIMPLEMENTED(); |
| - return NULL; |
| + return new LocationSummary(0, 0, LocationSummary::kCall); |
| } |
| void ThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| - UNIMPLEMENTED(); |
| + compiler->GenerateRuntimeCall(token_pos(), |
| + deopt_id(), |
| + kThrowRuntimeEntry, |
| + 1, |
| + locs()); |
| + __ hlt(0); |
| } |
| @@ -1550,24 +1554,36 @@ |
| LocationSummary* BooleanNegateInstr::MakeLocationSummary(bool opt) const { |
| - UNIMPLEMENTED(); |
| - return NULL; |
| + return LocationSummary::Make(1, |
| + Location::RequiresRegister(), |
| + LocationSummary::kNoCall); |
| } |
| void BooleanNegateInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| - UNIMPLEMENTED(); |
| + Register value = locs()->in(0).reg(); |
| + Register result = locs()->out(0).reg(); |
| + |
| + __ LoadObject(result, Bool::True(), PP); |
| + __ LoadObject(TMP, Bool::False(), PP); |
| + __ CompareRegisters(result, value); |
| + __ csel(result, TMP, result, EQ); |
|
regis
2014/04/25 21:17:51
Is csel really better than a branch? true and fals
zra
2014/04/25 21:28:28
Loading true and false are one instruction each fr
|
| } |
| LocationSummary* AllocateObjectInstr::MakeLocationSummary(bool opt) const { |
| - UNIMPLEMENTED(); |
| - return NULL; |
| + return MakeCallSummary(); |
| } |
| void AllocateObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| - UNIMPLEMENTED(); |
| + const Code& stub = Code::Handle(StubCode::GetAllocationStubForClass(cls())); |
| + const ExternalLabel label(cls().ToCString(), stub.EntryPoint()); |
| + compiler->GenerateCall(token_pos(), |
| + &label, |
| + PcDescriptors::kOther, |
| + locs()); |
| + __ Drop(ArgumentCount()); // Discard arguments. |
| } |
| } // namespace dart |