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

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

Issue 365983002: Make isolate specific stub code accessors instance methods instead (Closed) Base URL: http://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 782 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 793
794 794
795 void NativeCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 795 void NativeCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
796 ASSERT(locs()->temp(0).reg() == EAX); 796 ASSERT(locs()->temp(0).reg() == EAX);
797 ASSERT(locs()->temp(1).reg() == ECX); 797 ASSERT(locs()->temp(1).reg() == ECX);
798 ASSERT(locs()->temp(2).reg() == EDX); 798 ASSERT(locs()->temp(2).reg() == EDX);
799 Register result = locs()->out(0).reg(); 799 Register result = locs()->out(0).reg();
800 const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function()); 800 const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function());
801 const bool is_leaf_call = 801 const bool is_leaf_call =
802 (argc_tag & NativeArguments::AutoSetupScopeMask()) == 0; 802 (argc_tag & NativeArguments::AutoSetupScopeMask()) == 0;
803 StubCode* stub_code = compiler->isolate()->stub_code();
803 804
804 // Push the result place holder initialized to NULL. 805 // Push the result place holder initialized to NULL.
805 __ PushObject(Object::ZoneHandle()); 806 __ PushObject(Object::ZoneHandle());
806 // Pass a pointer to the first argument in EAX. 807 // Pass a pointer to the first argument in EAX.
807 if (!function().HasOptionalParameters()) { 808 if (!function().HasOptionalParameters()) {
808 __ leal(EAX, Address(EBP, (kParamEndSlotFromFp + 809 __ leal(EAX, Address(EBP, (kParamEndSlotFromFp +
809 function().NumParameters()) * kWordSize)); 810 function().NumParameters()) * kWordSize));
810 } else { 811 } else {
811 __ leal(EAX, Address(EBP, kFirstLocalSlotFromFp * kWordSize)); 812 __ leal(EAX, Address(EBP, kFirstLocalSlotFromFp * kWordSize));
812 } 813 }
813 __ movl(ECX, Immediate(reinterpret_cast<uword>(native_c_function()))); 814 __ movl(ECX, Immediate(reinterpret_cast<uword>(native_c_function())));
814 __ movl(EDX, Immediate(argc_tag)); 815 __ movl(EDX, Immediate(argc_tag));
815 const ExternalLabel* stub_entry = (is_bootstrap_native() || is_leaf_call) ? 816 const ExternalLabel* stub_entry = (is_bootstrap_native() || is_leaf_call) ?
816 &StubCode::CallBootstrapCFunctionLabel() : 817 &stub_code->CallBootstrapCFunctionLabel() :
817 &StubCode::CallNativeCFunctionLabel(); 818 &stub_code->CallNativeCFunctionLabel();
818 compiler->GenerateCall(token_pos(), 819 compiler->GenerateCall(token_pos(),
819 stub_entry, 820 stub_entry,
820 PcDescriptors::kOther, 821 PcDescriptors::kOther,
821 locs()); 822 locs());
822 __ popl(result); 823 __ popl(result);
823 } 824 }
824 825
825 826
826 static bool CanBeImmediateIndex(Value* value, intptr_t cid) { 827 static bool CanBeImmediateIndex(Value* value, intptr_t cid) {
827 ConstantInstr* constant = value->definition()->AsConstant(); 828 ConstantInstr* constant = value->definition()->AsConstant();
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after
1702 1703
1703 class StoreInstanceFieldSlowPath : public SlowPathCode { 1704 class StoreInstanceFieldSlowPath : public SlowPathCode {
1704 public: 1705 public:
1705 StoreInstanceFieldSlowPath(StoreInstanceFieldInstr* instruction, 1706 StoreInstanceFieldSlowPath(StoreInstanceFieldInstr* instruction,
1706 const Class& cls) 1707 const Class& cls)
1707 : instruction_(instruction), cls_(cls) { } 1708 : instruction_(instruction), cls_(cls) { }
1708 1709
1709 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 1710 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
1710 __ Comment("StoreInstanceFieldSlowPath"); 1711 __ Comment("StoreInstanceFieldSlowPath");
1711 __ Bind(entry_label()); 1712 __ Bind(entry_label());
1713 Isolate* isolate = compiler->isolate();
1712 const Code& stub = 1714 const Code& stub =
1713 Code::Handle(StubCode::GetAllocationStubForClass(cls_)); 1715 Code::Handle(isolate,
1716 isolate->stub_code()->GetAllocationStubForClass(cls_));
1714 const ExternalLabel label(stub.EntryPoint()); 1717 const ExternalLabel label(stub.EntryPoint());
1715 1718
1716 LocationSummary* locs = instruction_->locs(); 1719 LocationSummary* locs = instruction_->locs();
1717 locs->live_registers()->Remove(locs->out(0)); 1720 locs->live_registers()->Remove(locs->out(0));
1718 compiler->SaveLiveRegisters(locs); 1721 compiler->SaveLiveRegisters(locs);
1719 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 1722 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
1720 &label, 1723 &label,
1721 PcDescriptors::kOther, 1724 PcDescriptors::kOther,
1722 locs); 1725 locs);
1723 __ MoveRegister(locs->temp(0).reg(), EAX); 1726 __ MoveRegister(locs->temp(0).reg(), EAX);
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
2176 2, 2179 2,
2177 locs()); 2180 locs());
2178 __ Drop(2); 2181 __ Drop(2);
2179 __ popl(kResultReg); 2182 __ popl(kResultReg);
2180 __ Bind(&done); 2183 __ Bind(&done);
2181 return; 2184 return;
2182 } 2185 }
2183 } 2186 }
2184 2187
2185 __ Bind(&slow_path); 2188 __ Bind(&slow_path);
2189 StubCode* stub_code = compiler->isolate()->stub_code();
2186 compiler->GenerateCall(token_pos(), 2190 compiler->GenerateCall(token_pos(),
2187 &StubCode::AllocateArrayLabel(), 2191 &stub_code->AllocateArrayLabel(),
2188 PcDescriptors::kOther, 2192 PcDescriptors::kOther,
2189 locs()); 2193 locs());
2190 __ Bind(&done); 2194 __ Bind(&done);
2191 ASSERT(locs()->out(0).reg() == kResultReg); 2195 ASSERT(locs()->out(0).reg() == kResultReg);
2192 } 2196 }
2193 2197
2194 2198
2195 class BoxDoubleSlowPath : public SlowPathCode { 2199 class BoxDoubleSlowPath : public SlowPathCode {
2196 public: 2200 public:
2197 explicit BoxDoubleSlowPath(Instruction* instruction) 2201 explicit BoxDoubleSlowPath(Instruction* instruction)
2198 : instruction_(instruction) { } 2202 : instruction_(instruction) { }
2199 2203
2200 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 2204 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
2201 __ Comment("BoxDoubleSlowPath"); 2205 __ Comment("BoxDoubleSlowPath");
2202 __ Bind(entry_label()); 2206 __ Bind(entry_label());
2207 Isolate* isolate = compiler->isolate();
2208 StubCode* stub_code = isolate->stub_code();
2203 const Class& double_class = compiler->double_class(); 2209 const Class& double_class = compiler->double_class();
2204 const Code& stub = 2210 const Code& stub =
2205 Code::Handle(StubCode::GetAllocationStubForClass(double_class)); 2211 Code::Handle(isolate,
2212 stub_code->GetAllocationStubForClass(double_class));
2206 const ExternalLabel label(stub.EntryPoint()); 2213 const ExternalLabel label(stub.EntryPoint());
2207 2214
2208 LocationSummary* locs = instruction_->locs(); 2215 LocationSummary* locs = instruction_->locs();
2209 locs->live_registers()->Remove(locs->out(0)); 2216 locs->live_registers()->Remove(locs->out(0));
2210 2217
2211 compiler->SaveLiveRegisters(locs); 2218 compiler->SaveLiveRegisters(locs);
2212 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 2219 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
2213 &label, 2220 &label,
2214 PcDescriptors::kOther, 2221 PcDescriptors::kOther,
2215 locs); 2222 locs);
2216 __ MoveRegister(locs->out(0).reg(), EAX); 2223 __ MoveRegister(locs->out(0).reg(), EAX);
2217 compiler->RestoreLiveRegisters(locs); 2224 compiler->RestoreLiveRegisters(locs);
2218 2225
2219 __ jmp(exit_label()); 2226 __ jmp(exit_label());
2220 } 2227 }
2221 2228
2222 private: 2229 private:
2223 Instruction* instruction_; 2230 Instruction* instruction_;
2224 }; 2231 };
2225 2232
2226 2233
2227 class BoxFloat32x4SlowPath : public SlowPathCode { 2234 class BoxFloat32x4SlowPath : public SlowPathCode {
2228 public: 2235 public:
2229 explicit BoxFloat32x4SlowPath(Instruction* instruction) 2236 explicit BoxFloat32x4SlowPath(Instruction* instruction)
2230 : instruction_(instruction) { } 2237 : instruction_(instruction) { }
2231 2238
2232 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 2239 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
2233 __ Comment("BoxFloat32x4SlowPath"); 2240 __ Comment("BoxFloat32x4SlowPath");
2234 __ Bind(entry_label()); 2241 __ Bind(entry_label());
2242 Isolate* isolate = compiler->isolate();
2243 StubCode* stub_code = isolate->stub_code();
2235 const Class& float32x4_class = compiler->float32x4_class(); 2244 const Class& float32x4_class = compiler->float32x4_class();
2236 const Code& stub = 2245 const Code& stub =
2237 Code::Handle(StubCode::GetAllocationStubForClass(float32x4_class)); 2246 Code::Handle(isolate,
2247 stub_code->GetAllocationStubForClass(float32x4_class));
2238 const ExternalLabel label(stub.EntryPoint()); 2248 const ExternalLabel label(stub.EntryPoint());
2239 2249
2240 LocationSummary* locs = instruction_->locs(); 2250 LocationSummary* locs = instruction_->locs();
2241 locs->live_registers()->Remove(locs->out(0)); 2251 locs->live_registers()->Remove(locs->out(0));
2242 2252
2243 compiler->SaveLiveRegisters(locs); 2253 compiler->SaveLiveRegisters(locs);
2244 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 2254 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
2245 &label, 2255 &label,
2246 PcDescriptors::kOther, 2256 PcDescriptors::kOther,
2247 locs); 2257 locs);
2248 __ MoveRegister(locs->out(0).reg(), EAX); 2258 __ MoveRegister(locs->out(0).reg(), EAX);
2249 compiler->RestoreLiveRegisters(locs); 2259 compiler->RestoreLiveRegisters(locs);
2250 2260
2251 __ jmp(exit_label()); 2261 __ jmp(exit_label());
2252 } 2262 }
2253 2263
2254 private: 2264 private:
2255 Instruction* instruction_; 2265 Instruction* instruction_;
2256 }; 2266 };
2257 2267
2258 2268
2259 class BoxFloat64x2SlowPath : public SlowPathCode { 2269 class BoxFloat64x2SlowPath : public SlowPathCode {
2260 public: 2270 public:
2261 explicit BoxFloat64x2SlowPath(Instruction* instruction) 2271 explicit BoxFloat64x2SlowPath(Instruction* instruction)
2262 : instruction_(instruction) { } 2272 : instruction_(instruction) { }
2263 2273
2264 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 2274 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
2265 __ Comment("BoxFloat64x2SlowPath"); 2275 __ Comment("BoxFloat64x2SlowPath");
2266 __ Bind(entry_label()); 2276 __ Bind(entry_label());
2277 Isolate* isolate = compiler->isolate();
2278 StubCode* stub_code = isolate->stub_code();
2267 const Class& float64x2_class = compiler->float64x2_class(); 2279 const Class& float64x2_class = compiler->float64x2_class();
2268 const Code& stub = 2280 const Code& stub =
2269 Code::Handle(StubCode::GetAllocationStubForClass(float64x2_class)); 2281 Code::Handle(isolate,
2282 stub_code->GetAllocationStubForClass(float64x2_class));
2270 const ExternalLabel label(stub.EntryPoint()); 2283 const ExternalLabel label(stub.EntryPoint());
2271 2284
2272 LocationSummary* locs = instruction_->locs(); 2285 LocationSummary* locs = instruction_->locs();
2273 locs->live_registers()->Remove(locs->out(0)); 2286 locs->live_registers()->Remove(locs->out(0));
2274 2287
2275 compiler->SaveLiveRegisters(locs); 2288 compiler->SaveLiveRegisters(locs);
2276 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 2289 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
2277 &label, 2290 &label,
2278 PcDescriptors::kOther, 2291 PcDescriptors::kOther,
2279 locs); 2292 locs);
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
2571 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 2584 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
2572 __ Comment("AllocateContextSlowPath"); 2585 __ Comment("AllocateContextSlowPath");
2573 __ Bind(entry_label()); 2586 __ Bind(entry_label());
2574 2587
2575 LocationSummary* locs = instruction_->locs(); 2588 LocationSummary* locs = instruction_->locs();
2576 locs->live_registers()->Remove(locs->out(0)); 2589 locs->live_registers()->Remove(locs->out(0));
2577 2590
2578 compiler->SaveLiveRegisters(locs); 2591 compiler->SaveLiveRegisters(locs);
2579 2592
2580 __ movl(EDX, Immediate(instruction_->num_context_variables())); 2593 __ movl(EDX, Immediate(instruction_->num_context_variables()));
2581 const ExternalLabel label(StubCode::AllocateContextEntryPoint()); 2594 StubCode* stub_code = compiler->isolate()->stub_code();
2595 const ExternalLabel label(stub_code->AllocateContextEntryPoint());
2582 compiler->GenerateCall(instruction_->token_pos(), 2596 compiler->GenerateCall(instruction_->token_pos(),
2583 &label, 2597 &label,
2584 PcDescriptors::kOther, 2598 PcDescriptors::kOther,
2585 locs); 2599 locs);
2586 ASSERT(instruction_->locs()->out(0).reg() == EAX); 2600 ASSERT(instruction_->locs()->out(0).reg() == EAX);
2587 compiler->RestoreLiveRegisters(instruction_->locs()); 2601 compiler->RestoreLiveRegisters(instruction_->locs());
2588 __ jmp(exit_label()); 2602 __ jmp(exit_label());
2589 } 2603 }
2590 2604
2591 private: 2605 private:
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
2661 } 2675 }
2662 // EAX: new object. 2676 // EAX: new object.
2663 __ Bind(slow_path->exit_label()); 2677 __ Bind(slow_path->exit_label());
2664 return; 2678 return;
2665 } 2679 }
2666 2680
2667 ASSERT(locs()->temp(0).reg() == EDX); 2681 ASSERT(locs()->temp(0).reg() == EDX);
2668 ASSERT(locs()->out(0).reg() == EAX); 2682 ASSERT(locs()->out(0).reg() == EAX);
2669 2683
2670 __ movl(EDX, Immediate(num_context_variables())); 2684 __ movl(EDX, Immediate(num_context_variables()));
2671 const ExternalLabel label(StubCode::AllocateContextEntryPoint()); 2685 StubCode* stub_code = compiler->isolate()->stub_code();
2686 const ExternalLabel label(stub_code->AllocateContextEntryPoint());
2672 compiler->GenerateCall(token_pos(), 2687 compiler->GenerateCall(token_pos(),
2673 &label, 2688 &label,
2674 PcDescriptors::kOther, 2689 PcDescriptors::kOther,
2675 locs()); 2690 locs());
2676 } 2691 }
2677 2692
2678 2693
2679 LocationSummary* CloneContextInstr::MakeLocationSummary(Isolate* isolate, 2694 LocationSummary* CloneContextInstr::MakeLocationSummary(Isolate* isolate,
2680 bool opt) const { 2695 bool opt) const {
2681 const intptr_t kNumInputs = 1; 2696 const intptr_t kNumInputs = 1;
(...skipping 918 matching lines...) Expand 10 before | Expand all | Expand 10 after
3600 3615
3601 3616
3602 class BoxInt32x4SlowPath : public SlowPathCode { 3617 class BoxInt32x4SlowPath : public SlowPathCode {
3603 public: 3618 public:
3604 explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction) 3619 explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction)
3605 : instruction_(instruction) { } 3620 : instruction_(instruction) { }
3606 3621
3607 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 3622 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
3608 __ Comment("BoxInt32x4SlowPath"); 3623 __ Comment("BoxInt32x4SlowPath");
3609 __ Bind(entry_label()); 3624 __ Bind(entry_label());
3625 Isolate* isolate = compiler->isolate();
3626 StubCode* stub_code = isolate->stub_code();
3610 const Class& int32x4_class = compiler->int32x4_class(); 3627 const Class& int32x4_class = compiler->int32x4_class();
3611 const Code& stub = 3628 const Code& stub =
3612 Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class)); 3629 Code::Handle(isolate,
3630 stub_code->GetAllocationStubForClass(int32x4_class));
3613 const ExternalLabel label(stub.EntryPoint()); 3631 const ExternalLabel label(stub.EntryPoint());
3614 3632
3615 LocationSummary* locs = instruction_->locs(); 3633 LocationSummary* locs = instruction_->locs();
3616 locs->live_registers()->Remove(locs->out(0)); 3634 locs->live_registers()->Remove(locs->out(0));
3617 3635
3618 compiler->SaveLiveRegisters(locs); 3636 compiler->SaveLiveRegisters(locs);
3619 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 3637 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
3620 &label, 3638 &label,
3621 PcDescriptors::kOther, 3639 PcDescriptors::kOther,
3622 locs); 3640 locs);
(...skipping 2058 matching lines...) Expand 10 before | Expand all | Expand 10 after
5681 5699
5682 5700
5683 class BoxIntegerSlowPath : public SlowPathCode { 5701 class BoxIntegerSlowPath : public SlowPathCode {
5684 public: 5702 public:
5685 explicit BoxIntegerSlowPath(BoxIntegerInstr* instruction) 5703 explicit BoxIntegerSlowPath(BoxIntegerInstr* instruction)
5686 : instruction_(instruction) { } 5704 : instruction_(instruction) { }
5687 5705
5688 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 5706 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
5689 __ Comment("BoxIntegerSlowPath"); 5707 __ Comment("BoxIntegerSlowPath");
5690 __ Bind(entry_label()); 5708 __ Bind(entry_label());
5709 Isolate* isolate = compiler->isolate();
5710 StubCode* stub_code = isolate->stub_code();
5691 const Class& mint_class = 5711 const Class& mint_class =
5692 Class::ZoneHandle(Isolate::Current()->object_store()->mint_class()); 5712 Class::ZoneHandle(isolate, isolate->object_store()->mint_class());
5693 const Code& stub = 5713 const Code& stub =
5694 Code::Handle(StubCode::GetAllocationStubForClass(mint_class)); 5714 Code::Handle(isolate, stub_code->GetAllocationStubForClass(mint_class));
5695 const ExternalLabel label(stub.EntryPoint()); 5715 const ExternalLabel label(stub.EntryPoint());
5696 5716
5697 LocationSummary* locs = instruction_->locs(); 5717 LocationSummary* locs = instruction_->locs();
5698 locs->live_registers()->Remove(locs->out(0)); 5718 locs->live_registers()->Remove(locs->out(0));
5699 5719
5700 compiler->SaveLiveRegisters(locs); 5720 compiler->SaveLiveRegisters(locs);
5701 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. 5721 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position.
5702 &label, 5722 &label,
5703 PcDescriptors::kOther, 5723 PcDescriptors::kOther,
5704 locs); 5724 locs);
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
6308 } 6328 }
6309 6329
6310 6330
6311 LocationSummary* AllocateObjectInstr::MakeLocationSummary(Isolate* isolate, 6331 LocationSummary* AllocateObjectInstr::MakeLocationSummary(Isolate* isolate,
6312 bool opt) const { 6332 bool opt) const {
6313 return MakeCallSummary(); 6333 return MakeCallSummary();
6314 } 6334 }
6315 6335
6316 6336
6317 void AllocateObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 6337 void AllocateObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
6318 const Code& stub = Code::Handle(StubCode::GetAllocationStubForClass(cls())); 6338 Isolate* isolate = compiler->isolate();
6339 StubCode* stub_code = isolate->stub_code();
6340 const Code& stub = Code::Handle(isolate,
6341 stub_code->GetAllocationStubForClass(cls()));
6319 const ExternalLabel label(stub.EntryPoint()); 6342 const ExternalLabel label(stub.EntryPoint());
6320 compiler->GenerateCall(token_pos(), 6343 compiler->GenerateCall(token_pos(),
6321 &label, 6344 &label,
6322 PcDescriptors::kOther, 6345 PcDescriptors::kOther,
6323 locs()); 6346 locs());
6324 __ Drop(ArgumentCount()); // Discard arguments. 6347 __ Drop(ArgumentCount()); // Discard arguments.
6325 } 6348 }
6326 6349
6327 6350
6328 void DebugStepCheckInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 6351 void DebugStepCheckInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
6329 ASSERT(!compiler->is_optimizing()); 6352 ASSERT(!compiler->is_optimizing());
6330 const ExternalLabel label(StubCode::DebugStepCheckEntryPoint()); 6353 StubCode* stub_code = compiler->isolate()->stub_code();
6354 const ExternalLabel label(stub_code->DebugStepCheckEntryPoint());
6331 __ movl(EDX, Immediate(0)); 6355 __ movl(EDX, Immediate(0));
6332 __ movl(ECX, Immediate(0)); 6356 __ movl(ECX, Immediate(0));
6333 compiler->GenerateCall(token_pos(), &label, stub_kind_, locs()); 6357 compiler->GenerateCall(token_pos(), &label, stub_kind_, locs());
6334 #if defined(DEBUG) 6358 #if defined(DEBUG)
6335 __ movl(EDX, Immediate(kInvalidObjectPointer)); 6359 __ movl(EDX, Immediate(kInvalidObjectPointer));
6336 __ movl(EDX, Immediate(kInvalidObjectPointer)); 6360 __ movl(EDX, Immediate(kInvalidObjectPointer));
6337 #endif 6361 #endif
6338 } 6362 }
6339 6363
6340 } // namespace dart 6364 } // namespace dart
6341 6365
6342 #undef __ 6366 #undef __
6343 6367
6344 #endif // defined TARGET_ARCH_IA32 6368 #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