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

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

Issue 375693004: Don't assign safepoint at the definition to the definition's live-range. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/intermediate_language_arm64.cc ('k') | runtime/vm/intermediate_language_mips.cc » ('j') | 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_IA32. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32.
6 #if defined(TARGET_ARCH_IA32) 6 #if defined(TARGET_ARCH_IA32)
7 7
8 #include "vm/intermediate_language.h" 8 #include "vm/intermediate_language.h"
9 9
10 #include "vm/dart_entry.h" 10 #include "vm/dart_entry.h"
(...skipping 1696 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 : instruction_(instruction), cls_(cls) { } 1707 : instruction_(instruction), cls_(cls) { }
1708 1708
1709 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 1709 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
1710 __ Comment("StoreInstanceFieldSlowPath"); 1710 __ Comment("StoreInstanceFieldSlowPath");
1711 __ Bind(entry_label()); 1711 __ Bind(entry_label());
1712 const Code& stub = 1712 const Code& stub =
1713 Code::Handle(StubCode::GetAllocationStubForClass(cls_)); 1713 Code::Handle(StubCode::GetAllocationStubForClass(cls_));
1714 const ExternalLabel label(stub.EntryPoint()); 1714 const ExternalLabel label(stub.EntryPoint());
1715 1715
1716 LocationSummary* locs = instruction_->locs(); 1716 LocationSummary* locs = instruction_->locs();
1717 locs->live_registers()->Remove(locs->out(0)); 1717 locs->live_registers()->Remove(locs->temp(0));
1718
1718 compiler->SaveLiveRegisters(locs); 1719 compiler->SaveLiveRegisters(locs);
1719 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 1720 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
1720 &label, 1721 &label,
1721 RawPcDescriptors::kOther, 1722 RawPcDescriptors::kOther,
1722 locs); 1723 locs);
1723 __ MoveRegister(locs->temp(0).reg(), EAX); 1724 __ MoveRegister(locs->temp(0).reg(), EAX);
1724 compiler->RestoreLiveRegisters(locs); 1725 compiler->RestoreLiveRegisters(locs);
1725 __ jmp(exit_label()); 1726 __ jmp(exit_label());
1726 } 1727 }
1727 1728
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
2199 2200
2200 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 2201 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
2201 __ Comment("BoxDoubleSlowPath"); 2202 __ Comment("BoxDoubleSlowPath");
2202 __ Bind(entry_label()); 2203 __ Bind(entry_label());
2203 const Class& double_class = compiler->double_class(); 2204 const Class& double_class = compiler->double_class();
2204 const Code& stub = 2205 const Code& stub =
2205 Code::Handle(StubCode::GetAllocationStubForClass(double_class)); 2206 Code::Handle(StubCode::GetAllocationStubForClass(double_class));
2206 const ExternalLabel label(stub.EntryPoint()); 2207 const ExternalLabel label(stub.EntryPoint());
2207 2208
2208 LocationSummary* locs = instruction_->locs(); 2209 LocationSummary* locs = instruction_->locs();
2209 locs->live_registers()->Remove(locs->out(0)); 2210 ASSERT(!locs->live_registers()->Contains(locs->out(0)));
2210
2211 compiler->SaveLiveRegisters(locs); 2211 compiler->SaveLiveRegisters(locs);
2212 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 2212 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
2213 &label, 2213 &label,
2214 RawPcDescriptors::kOther, 2214 RawPcDescriptors::kOther,
2215 locs); 2215 locs);
2216 __ MoveRegister(locs->out(0).reg(), EAX); 2216 __ MoveRegister(locs->out(0).reg(), EAX);
2217 compiler->RestoreLiveRegisters(locs); 2217 compiler->RestoreLiveRegisters(locs);
2218 2218
2219 __ jmp(exit_label()); 2219 __ jmp(exit_label());
2220 } 2220 }
(...skipping 10 matching lines...) Expand all
2231 2231
2232 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 2232 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
2233 __ Comment("BoxFloat32x4SlowPath"); 2233 __ Comment("BoxFloat32x4SlowPath");
2234 __ Bind(entry_label()); 2234 __ Bind(entry_label());
2235 const Class& float32x4_class = compiler->float32x4_class(); 2235 const Class& float32x4_class = compiler->float32x4_class();
2236 const Code& stub = 2236 const Code& stub =
2237 Code::Handle(StubCode::GetAllocationStubForClass(float32x4_class)); 2237 Code::Handle(StubCode::GetAllocationStubForClass(float32x4_class));
2238 const ExternalLabel label(stub.EntryPoint()); 2238 const ExternalLabel label(stub.EntryPoint());
2239 2239
2240 LocationSummary* locs = instruction_->locs(); 2240 LocationSummary* locs = instruction_->locs();
2241 locs->live_registers()->Remove(locs->out(0)); 2241 ASSERT(!locs->live_registers()->Contains(locs->out(0)));
2242 2242
2243 compiler->SaveLiveRegisters(locs); 2243 compiler->SaveLiveRegisters(locs);
2244 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 2244 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
2245 &label, 2245 &label,
2246 RawPcDescriptors::kOther, 2246 RawPcDescriptors::kOther,
2247 locs); 2247 locs);
2248 __ MoveRegister(locs->out(0).reg(), EAX); 2248 __ MoveRegister(locs->out(0).reg(), EAX);
2249 compiler->RestoreLiveRegisters(locs); 2249 compiler->RestoreLiveRegisters(locs);
2250 2250
2251 __ jmp(exit_label()); 2251 __ jmp(exit_label());
(...skipping 11 matching lines...) Expand all
2263 2263
2264 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 2264 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
2265 __ Comment("BoxFloat64x2SlowPath"); 2265 __ Comment("BoxFloat64x2SlowPath");
2266 __ Bind(entry_label()); 2266 __ Bind(entry_label());
2267 const Class& float64x2_class = compiler->float64x2_class(); 2267 const Class& float64x2_class = compiler->float64x2_class();
2268 const Code& stub = 2268 const Code& stub =
2269 Code::Handle(StubCode::GetAllocationStubForClass(float64x2_class)); 2269 Code::Handle(StubCode::GetAllocationStubForClass(float64x2_class));
2270 const ExternalLabel label(stub.EntryPoint()); 2270 const ExternalLabel label(stub.EntryPoint());
2271 2271
2272 LocationSummary* locs = instruction_->locs(); 2272 LocationSummary* locs = instruction_->locs();
2273 locs->live_registers()->Remove(locs->out(0)); 2273 ASSERT(!locs->live_registers()->Contains(locs->out(0)));
2274 2274
2275 compiler->SaveLiveRegisters(locs); 2275 compiler->SaveLiveRegisters(locs);
2276 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 2276 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
2277 &label, 2277 &label,
2278 RawPcDescriptors::kOther, 2278 RawPcDescriptors::kOther,
2279 locs); 2279 locs);
2280 __ MoveRegister(locs->out(0).reg(), EAX); 2280 __ MoveRegister(locs->out(0).reg(), EAX);
2281 compiler->RestoreLiveRegisters(locs); 2281 compiler->RestoreLiveRegisters(locs);
2282 2282
2283 __ jmp(exit_label()); 2283 __ jmp(exit_label());
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
2566 class AllocateContextSlowPath : public SlowPathCode { 2566 class AllocateContextSlowPath : public SlowPathCode {
2567 public: 2567 public:
2568 explicit AllocateContextSlowPath(AllocateContextInstr* instruction) 2568 explicit AllocateContextSlowPath(AllocateContextInstr* instruction)
2569 : instruction_(instruction) { } 2569 : instruction_(instruction) { }
2570 2570
2571 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 2571 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
2572 __ Comment("AllocateContextSlowPath"); 2572 __ Comment("AllocateContextSlowPath");
2573 __ Bind(entry_label()); 2573 __ Bind(entry_label());
2574 2574
2575 LocationSummary* locs = instruction_->locs(); 2575 LocationSummary* locs = instruction_->locs();
2576 locs->live_registers()->Remove(locs->out(0)); 2576 ASSERT(!locs->live_registers()->Contains(locs->out(0)));
2577 2577
2578 compiler->SaveLiveRegisters(locs); 2578 compiler->SaveLiveRegisters(locs);
2579 2579
2580 __ movl(EDX, Immediate(instruction_->num_context_variables())); 2580 __ movl(EDX, Immediate(instruction_->num_context_variables()));
2581 const ExternalLabel label(StubCode::AllocateContextEntryPoint()); 2581 const ExternalLabel label(StubCode::AllocateContextEntryPoint());
2582 compiler->GenerateCall(instruction_->token_pos(), 2582 compiler->GenerateCall(instruction_->token_pos(),
2583 &label, 2583 &label,
2584 RawPcDescriptors::kOther, 2584 RawPcDescriptors::kOther,
2585 locs); 2585 locs);
2586 ASSERT(instruction_->locs()->out(0).reg() == EAX); 2586 ASSERT(instruction_->locs()->out(0).reg() == EAX);
(...skipping 1019 matching lines...) Expand 10 before | Expand all | Expand 10 after
3606 3606
3607 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 3607 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
3608 __ Comment("BoxInt32x4SlowPath"); 3608 __ Comment("BoxInt32x4SlowPath");
3609 __ Bind(entry_label()); 3609 __ Bind(entry_label());
3610 const Class& int32x4_class = compiler->int32x4_class(); 3610 const Class& int32x4_class = compiler->int32x4_class();
3611 const Code& stub = 3611 const Code& stub =
3612 Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class)); 3612 Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class));
3613 const ExternalLabel label(stub.EntryPoint()); 3613 const ExternalLabel label(stub.EntryPoint());
3614 3614
3615 LocationSummary* locs = instruction_->locs(); 3615 LocationSummary* locs = instruction_->locs();
3616 locs->live_registers()->Remove(locs->out(0)); 3616 ASSERT(!locs->live_registers()->Contains(locs->out(0)));
3617 3617
3618 compiler->SaveLiveRegisters(locs); 3618 compiler->SaveLiveRegisters(locs);
3619 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 3619 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
3620 &label, 3620 &label,
3621 RawPcDescriptors::kOther, 3621 RawPcDescriptors::kOther,
3622 locs); 3622 locs);
3623 __ MoveRegister(locs->out(0).reg(), EAX); 3623 __ MoveRegister(locs->out(0).reg(), EAX);
3624 compiler->RestoreLiveRegisters(locs); 3624 compiler->RestoreLiveRegisters(locs);
3625 3625
3626 __ jmp(exit_label()); 3626 __ jmp(exit_label());
(...skipping 2061 matching lines...) Expand 10 before | Expand all | Expand 10 after
5688 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 5688 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
5689 __ Comment("BoxIntegerSlowPath"); 5689 __ Comment("BoxIntegerSlowPath");
5690 __ Bind(entry_label()); 5690 __ Bind(entry_label());
5691 const Class& mint_class = 5691 const Class& mint_class =
5692 Class::ZoneHandle(Isolate::Current()->object_store()->mint_class()); 5692 Class::ZoneHandle(Isolate::Current()->object_store()->mint_class());
5693 const Code& stub = 5693 const Code& stub =
5694 Code::Handle(StubCode::GetAllocationStubForClass(mint_class)); 5694 Code::Handle(StubCode::GetAllocationStubForClass(mint_class));
5695 const ExternalLabel label(stub.EntryPoint()); 5695 const ExternalLabel label(stub.EntryPoint());
5696 5696
5697 LocationSummary* locs = instruction_->locs(); 5697 LocationSummary* locs = instruction_->locs();
5698 locs->live_registers()->Remove(locs->out(0)); 5698 ASSERT(!locs->live_registers()->Contains(locs->out(0)));
5699 5699
5700 compiler->SaveLiveRegisters(locs); 5700 compiler->SaveLiveRegisters(locs);
5701 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 5701 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
5702 &label, 5702 &label,
5703 RawPcDescriptors::kOther, 5703 RawPcDescriptors::kOther,
5704 locs); 5704 locs);
5705 __ MoveRegister(locs->out(0).reg(), EAX); 5705 __ MoveRegister(locs->out(0).reg(), EAX);
5706 compiler->RestoreLiveRegisters(locs); 5706 compiler->RestoreLiveRegisters(locs);
5707 5707
5708 __ jmp(exit_label()); 5708 __ jmp(exit_label());
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after
6335 __ movl(EDX, Immediate(kInvalidObjectPointer)); 6335 __ movl(EDX, Immediate(kInvalidObjectPointer));
6336 __ movl(EDX, Immediate(kInvalidObjectPointer)); 6336 __ movl(EDX, Immediate(kInvalidObjectPointer));
6337 #endif 6337 #endif
6338 } 6338 }
6339 6339
6340 } // namespace dart 6340 } // namespace dart
6341 6341
6342 #undef __ 6342 #undef __
6343 6343
6344 #endif // defined TARGET_ARCH_IA32 6344 #endif // defined TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_arm64.cc ('k') | runtime/vm/intermediate_language_mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698