| OLD | NEW |
| 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_ARM. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. |
| 6 #if defined(TARGET_ARCH_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
| 7 | 7 |
| 8 #include "vm/intermediate_language.h" | 8 #include "vm/intermediate_language.h" |
| 9 | 9 |
| 10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 921 } else { | 921 } else { |
| 922 __ AddImmediate(R2, FP, kFirstLocalSlotFromFp * kWordSize); | 922 __ AddImmediate(R2, FP, kFirstLocalSlotFromFp * kWordSize); |
| 923 } | 923 } |
| 924 // Compute the effective address. When running under the simulator, | 924 // Compute the effective address. When running under the simulator, |
| 925 // this is a redirection address that forces the simulator to call | 925 // this is a redirection address that forces the simulator to call |
| 926 // into the runtime system. | 926 // into the runtime system. |
| 927 uword entry = reinterpret_cast<uword>(native_c_function()); | 927 uword entry = reinterpret_cast<uword>(native_c_function()); |
| 928 const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function()); | 928 const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function()); |
| 929 const bool is_leaf_call = | 929 const bool is_leaf_call = |
| 930 (argc_tag & NativeArguments::AutoSetupScopeMask()) == 0; | 930 (argc_tag & NativeArguments::AutoSetupScopeMask()) == 0; |
| 931 StubCode* stub_code = compiler->isolate()->stub_code(); |
| 931 const ExternalLabel* stub_entry; | 932 const ExternalLabel* stub_entry; |
| 932 if (is_bootstrap_native() || is_leaf_call) { | 933 if (is_bootstrap_native() || is_leaf_call) { |
| 933 stub_entry = &StubCode::CallBootstrapCFunctionLabel(); | 934 stub_entry = &stub_code->CallBootstrapCFunctionLabel(); |
| 934 #if defined(USING_SIMULATOR) | 935 #if defined(USING_SIMULATOR) |
| 935 entry = Simulator::RedirectExternalReference( | 936 entry = Simulator::RedirectExternalReference( |
| 936 entry, Simulator::kBootstrapNativeCall, function().NumParameters()); | 937 entry, Simulator::kBootstrapNativeCall, function().NumParameters()); |
| 937 #endif | 938 #endif |
| 938 } else { | 939 } else { |
| 939 // In the case of non bootstrap native methods the CallNativeCFunction | 940 // In the case of non bootstrap native methods the CallNativeCFunction |
| 940 // stub generates the redirection address when running under the simulator | 941 // stub generates the redirection address when running under the simulator |
| 941 // and hence we do not change 'entry' here. | 942 // and hence we do not change 'entry' here. |
| 942 stub_entry = &StubCode::CallNativeCFunctionLabel(); | 943 stub_entry = &stub_code->CallNativeCFunctionLabel(); |
| 943 #if defined(USING_SIMULATOR) | 944 #if defined(USING_SIMULATOR) |
| 944 if (!function().IsNativeAutoSetupScope()) { | 945 if (!function().IsNativeAutoSetupScope()) { |
| 945 entry = Simulator::RedirectExternalReference( | 946 entry = Simulator::RedirectExternalReference( |
| 946 entry, Simulator::kBootstrapNativeCall, function().NumParameters()); | 947 entry, Simulator::kBootstrapNativeCall, function().NumParameters()); |
| 947 } | 948 } |
| 948 #endif | 949 #endif |
| 949 } | 950 } |
| 950 __ LoadImmediate(R5, entry); | 951 __ LoadImmediate(R5, entry); |
| 951 __ LoadImmediate(R1, argc_tag); | 952 __ LoadImmediate(R1, argc_tag); |
| 952 compiler->GenerateCall(token_pos(), | 953 compiler->GenerateCall(token_pos(), |
| (...skipping 958 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1911 } | 1912 } |
| 1912 | 1913 |
| 1913 | 1914 |
| 1914 class StoreInstanceFieldSlowPath : public SlowPathCode { | 1915 class StoreInstanceFieldSlowPath : public SlowPathCode { |
| 1915 public: | 1916 public: |
| 1916 StoreInstanceFieldSlowPath(StoreInstanceFieldInstr* instruction, | 1917 StoreInstanceFieldSlowPath(StoreInstanceFieldInstr* instruction, |
| 1917 const Class& cls) | 1918 const Class& cls) |
| 1918 : instruction_(instruction), cls_(cls) { } | 1919 : instruction_(instruction), cls_(cls) { } |
| 1919 | 1920 |
| 1920 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { | 1921 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { |
| 1922 Isolate* isolate = compiler->isolate(); |
| 1923 StubCode* stub_code = isolate->stub_code(); |
| 1924 |
| 1921 __ Comment("StoreInstanceFieldSlowPath"); | 1925 __ Comment("StoreInstanceFieldSlowPath"); |
| 1922 __ Bind(entry_label()); | 1926 __ Bind(entry_label()); |
| 1923 | 1927 |
| 1924 const Code& stub = | 1928 const Code& stub = |
| 1925 Code::Handle(StubCode::GetAllocationStubForClass(cls_)); | 1929 Code::Handle(isolate, stub_code->GetAllocationStubForClass(cls_)); |
| 1926 const ExternalLabel label(stub.EntryPoint()); | 1930 const ExternalLabel label(stub.EntryPoint()); |
| 1927 | 1931 |
| 1928 LocationSummary* locs = instruction_->locs(); | 1932 LocationSummary* locs = instruction_->locs(); |
| 1929 locs->live_registers()->Remove(locs->out(0)); | 1933 locs->live_registers()->Remove(locs->out(0)); |
| 1930 | 1934 |
| 1931 compiler->SaveLiveRegisters(locs); | 1935 compiler->SaveLiveRegisters(locs); |
| 1932 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. | 1936 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. |
| 1933 &label, | 1937 &label, |
| 1934 PcDescriptors::kOther, | 1938 PcDescriptors::kOther, |
| 1935 locs); | 1939 locs); |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2371 kAllocateArrayRuntimeEntry, | 2375 kAllocateArrayRuntimeEntry, |
| 2372 2, | 2376 2, |
| 2373 locs()); | 2377 locs()); |
| 2374 __ Drop(2); | 2378 __ Drop(2); |
| 2375 __ Pop(kResultReg); | 2379 __ Pop(kResultReg); |
| 2376 __ Bind(&done); | 2380 __ Bind(&done); |
| 2377 return; | 2381 return; |
| 2378 } | 2382 } |
| 2379 } | 2383 } |
| 2380 | 2384 |
| 2385 StubCode* stub_code = compiler->isolate()->stub_code(); |
| 2381 compiler->GenerateCall(token_pos(), | 2386 compiler->GenerateCall(token_pos(), |
| 2382 &StubCode::AllocateArrayLabel(), | 2387 &stub_code->AllocateArrayLabel(), |
| 2383 PcDescriptors::kOther, | 2388 PcDescriptors::kOther, |
| 2384 locs()); | 2389 locs()); |
| 2385 ASSERT(locs()->out(0).reg() == kResultReg); | 2390 ASSERT(locs()->out(0).reg() == kResultReg); |
| 2386 } | 2391 } |
| 2387 | 2392 |
| 2388 | 2393 |
| 2389 class BoxDoubleSlowPath : public SlowPathCode { | 2394 class BoxDoubleSlowPath : public SlowPathCode { |
| 2390 public: | 2395 public: |
| 2391 explicit BoxDoubleSlowPath(Instruction* instruction) | 2396 explicit BoxDoubleSlowPath(Instruction* instruction) |
| 2392 : instruction_(instruction) { } | 2397 : instruction_(instruction) { } |
| 2393 | 2398 |
| 2394 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { | 2399 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2395 __ Comment("BoxDoubleSlowPath"); | 2400 __ Comment("BoxDoubleSlowPath"); |
| 2396 __ Bind(entry_label()); | 2401 __ Bind(entry_label()); |
| 2402 Isolate* isolate = compiler->isolate(); |
| 2403 StubCode* stub_code = isolate->stub_code(); |
| 2397 const Class& double_class = compiler->double_class(); | 2404 const Class& double_class = compiler->double_class(); |
| 2398 const Code& stub = | 2405 const Code& stub = |
| 2399 Code::Handle(StubCode::GetAllocationStubForClass(double_class)); | 2406 Code::Handle(isolate, |
| 2407 stub_code->GetAllocationStubForClass(double_class)); |
| 2400 const ExternalLabel label(stub.EntryPoint()); | 2408 const ExternalLabel label(stub.EntryPoint()); |
| 2401 | 2409 |
| 2402 LocationSummary* locs = instruction_->locs(); | 2410 LocationSummary* locs = instruction_->locs(); |
| 2403 locs->live_registers()->Remove(locs->out(0)); | 2411 locs->live_registers()->Remove(locs->out(0)); |
| 2404 | 2412 |
| 2405 compiler->SaveLiveRegisters(locs); | 2413 compiler->SaveLiveRegisters(locs); |
| 2406 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. | 2414 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. |
| 2407 &label, | 2415 &label, |
| 2408 PcDescriptors::kOther, | 2416 PcDescriptors::kOther, |
| 2409 locs); | 2417 locs); |
| 2410 __ MoveRegister(locs->out(0).reg(), R0); | 2418 __ MoveRegister(locs->out(0).reg(), R0); |
| 2411 compiler->RestoreLiveRegisters(locs); | 2419 compiler->RestoreLiveRegisters(locs); |
| 2412 | 2420 |
| 2413 __ b(exit_label()); | 2421 __ b(exit_label()); |
| 2414 } | 2422 } |
| 2415 | 2423 |
| 2416 private: | 2424 private: |
| 2417 Instruction* instruction_; | 2425 Instruction* instruction_; |
| 2418 }; | 2426 }; |
| 2419 | 2427 |
| 2420 | 2428 |
| 2421 class BoxFloat32x4SlowPath : public SlowPathCode { | 2429 class BoxFloat32x4SlowPath : public SlowPathCode { |
| 2422 public: | 2430 public: |
| 2423 explicit BoxFloat32x4SlowPath(Instruction* instruction) | 2431 explicit BoxFloat32x4SlowPath(Instruction* instruction) |
| 2424 : instruction_(instruction) { } | 2432 : instruction_(instruction) { } |
| 2425 | 2433 |
| 2426 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { | 2434 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2427 __ Comment("BoxFloat32x4SlowPath"); | 2435 __ Comment("BoxFloat32x4SlowPath"); |
| 2428 __ Bind(entry_label()); | 2436 __ Bind(entry_label()); |
| 2437 Isolate* isolate = compiler->isolate(); |
| 2438 StubCode* stub_code = isolate->stub_code(); |
| 2429 const Class& float32x4_class = compiler->float32x4_class(); | 2439 const Class& float32x4_class = compiler->float32x4_class(); |
| 2430 const Code& stub = | 2440 const Code& stub = |
| 2431 Code::Handle(StubCode::GetAllocationStubForClass(float32x4_class)); | 2441 Code::Handle(isolate, |
| 2442 stub_code->GetAllocationStubForClass(float32x4_class)); |
| 2432 const ExternalLabel label(stub.EntryPoint()); | 2443 const ExternalLabel label(stub.EntryPoint()); |
| 2433 | 2444 |
| 2434 LocationSummary* locs = instruction_->locs(); | 2445 LocationSummary* locs = instruction_->locs(); |
| 2435 locs->live_registers()->Remove(locs->out(0)); | 2446 locs->live_registers()->Remove(locs->out(0)); |
| 2436 | 2447 |
| 2437 compiler->SaveLiveRegisters(locs); | 2448 compiler->SaveLiveRegisters(locs); |
| 2438 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. | 2449 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. |
| 2439 &label, | 2450 &label, |
| 2440 PcDescriptors::kOther, | 2451 PcDescriptors::kOther, |
| 2441 locs); | 2452 locs); |
| 2442 __ mov(locs->out(0).reg(), Operand(R0)); | 2453 __ mov(locs->out(0).reg(), Operand(R0)); |
| 2443 compiler->RestoreLiveRegisters(locs); | 2454 compiler->RestoreLiveRegisters(locs); |
| 2444 | 2455 |
| 2445 __ b(exit_label()); | 2456 __ b(exit_label()); |
| 2446 } | 2457 } |
| 2447 | 2458 |
| 2448 private: | 2459 private: |
| 2449 Instruction* instruction_; | 2460 Instruction* instruction_; |
| 2450 }; | 2461 }; |
| 2451 | 2462 |
| 2452 | 2463 |
| 2453 class BoxFloat64x2SlowPath : public SlowPathCode { | 2464 class BoxFloat64x2SlowPath : public SlowPathCode { |
| 2454 public: | 2465 public: |
| 2455 explicit BoxFloat64x2SlowPath(Instruction* instruction) | 2466 explicit BoxFloat64x2SlowPath(Instruction* instruction) |
| 2456 : instruction_(instruction) { } | 2467 : instruction_(instruction) { } |
| 2457 | 2468 |
| 2458 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { | 2469 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2459 __ Comment("BoxFloat64x2SlowPath"); | 2470 __ Comment("BoxFloat64x2SlowPath"); |
| 2460 __ Bind(entry_label()); | 2471 __ Bind(entry_label()); |
| 2472 Isolate* isolate = compiler->isolate(); |
| 2473 StubCode* stub_code = isolate->stub_code(); |
| 2461 const Class& float64x2_class = compiler->float64x2_class(); | 2474 const Class& float64x2_class = compiler->float64x2_class(); |
| 2462 const Code& stub = | 2475 const Code& stub = |
| 2463 Code::Handle(StubCode::GetAllocationStubForClass(float64x2_class)); | 2476 Code::Handle(isolate, |
| 2477 stub_code->GetAllocationStubForClass(float64x2_class)); |
| 2464 const ExternalLabel label(stub.EntryPoint()); | 2478 const ExternalLabel label(stub.EntryPoint()); |
| 2465 | 2479 |
| 2466 LocationSummary* locs = instruction_->locs(); | 2480 LocationSummary* locs = instruction_->locs(); |
| 2467 locs->live_registers()->Remove(locs->out(0)); | 2481 locs->live_registers()->Remove(locs->out(0)); |
| 2468 | 2482 |
| 2469 compiler->SaveLiveRegisters(locs); | 2483 compiler->SaveLiveRegisters(locs); |
| 2470 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. | 2484 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. |
| 2471 &label, | 2485 &label, |
| 2472 PcDescriptors::kOther, | 2486 PcDescriptors::kOther, |
| 2473 locs); | 2487 locs); |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2744 locs->set_out(0, Location::RegisterLocation(R0)); | 2758 locs->set_out(0, Location::RegisterLocation(R0)); |
| 2745 return locs; | 2759 return locs; |
| 2746 } | 2760 } |
| 2747 | 2761 |
| 2748 | 2762 |
| 2749 void AllocateContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2763 void AllocateContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2750 ASSERT(locs()->temp(0).reg() == R1); | 2764 ASSERT(locs()->temp(0).reg() == R1); |
| 2751 ASSERT(locs()->out(0).reg() == R0); | 2765 ASSERT(locs()->out(0).reg() == R0); |
| 2752 | 2766 |
| 2753 __ LoadImmediate(R1, num_context_variables()); | 2767 __ LoadImmediate(R1, num_context_variables()); |
| 2754 const ExternalLabel label(StubCode::AllocateContextEntryPoint()); | 2768 StubCode* stub_code = compiler->isolate()->stub_code(); |
| 2769 const ExternalLabel label(stub_code->AllocateContextEntryPoint()); |
| 2755 compiler->GenerateCall(token_pos(), | 2770 compiler->GenerateCall(token_pos(), |
| 2756 &label, | 2771 &label, |
| 2757 PcDescriptors::kOther, | 2772 PcDescriptors::kOther, |
| 2758 locs()); | 2773 locs()); |
| 2759 } | 2774 } |
| 2760 | 2775 |
| 2761 | 2776 |
| 2762 LocationSummary* CloneContextInstr::MakeLocationSummary(Isolate* isolate, | 2777 LocationSummary* CloneContextInstr::MakeLocationSummary(Isolate* isolate, |
| 2763 bool opt) const { | 2778 bool opt) const { |
| 2764 const intptr_t kNumInputs = 1; | 2779 const intptr_t kNumInputs = 1; |
| (...skipping 922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3687 | 3702 |
| 3688 | 3703 |
| 3689 class BoxInt32x4SlowPath : public SlowPathCode { | 3704 class BoxInt32x4SlowPath : public SlowPathCode { |
| 3690 public: | 3705 public: |
| 3691 explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction) | 3706 explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction) |
| 3692 : instruction_(instruction) { } | 3707 : instruction_(instruction) { } |
| 3693 | 3708 |
| 3694 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { | 3709 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3695 __ Comment("BoxInt32x4SlowPath"); | 3710 __ Comment("BoxInt32x4SlowPath"); |
| 3696 __ Bind(entry_label()); | 3711 __ Bind(entry_label()); |
| 3712 Isolate* isolate = compiler->isolate(); |
| 3713 StubCode* stub_code = isolate->stub_code(); |
| 3697 const Class& int32x4_class = compiler->int32x4_class(); | 3714 const Class& int32x4_class = compiler->int32x4_class(); |
| 3698 const Code& stub = | 3715 const Code& stub = |
| 3699 Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class)); | 3716 Code::Handle(isolate, |
| 3717 stub_code->GetAllocationStubForClass(int32x4_class)); |
| 3700 const ExternalLabel label(stub.EntryPoint()); | 3718 const ExternalLabel label(stub.EntryPoint()); |
| 3701 | 3719 |
| 3702 LocationSummary* locs = instruction_->locs(); | 3720 LocationSummary* locs = instruction_->locs(); |
| 3703 locs->live_registers()->Remove(locs->out(0)); | 3721 locs->live_registers()->Remove(locs->out(0)); |
| 3704 | 3722 |
| 3705 compiler->SaveLiveRegisters(locs); | 3723 compiler->SaveLiveRegisters(locs); |
| 3706 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. | 3724 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. |
| 3707 &label, | 3725 &label, |
| 3708 PcDescriptors::kOther, | 3726 PcDescriptors::kOther, |
| 3709 locs); | 3727 locs); |
| (...skipping 2196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5906 | 5924 |
| 5907 | 5925 |
| 5908 class BoxIntegerSlowPath : public SlowPathCode { | 5926 class BoxIntegerSlowPath : public SlowPathCode { |
| 5909 public: | 5927 public: |
| 5910 explicit BoxIntegerSlowPath(BoxIntegerInstr* instruction) | 5928 explicit BoxIntegerSlowPath(BoxIntegerInstr* instruction) |
| 5911 : instruction_(instruction) { } | 5929 : instruction_(instruction) { } |
| 5912 | 5930 |
| 5913 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { | 5931 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { |
| 5914 __ Comment("BoxIntegerSlowPath"); | 5932 __ Comment("BoxIntegerSlowPath"); |
| 5915 __ Bind(entry_label()); | 5933 __ Bind(entry_label()); |
| 5934 Isolate* isolate = compiler->isolate(); |
| 5935 StubCode* stub_code = isolate->stub_code(); |
| 5916 const Class& mint_class = | 5936 const Class& mint_class = |
| 5917 Class::ZoneHandle(Isolate::Current()->object_store()->mint_class()); | 5937 Class::ZoneHandle(isolate->object_store()->mint_class()); |
| 5918 const Code& stub = | 5938 const Code& stub = |
| 5919 Code::Handle(StubCode::GetAllocationStubForClass(mint_class)); | 5939 Code::Handle(isolate, stub_code->GetAllocationStubForClass(mint_class)); |
| 5920 const ExternalLabel label(stub.EntryPoint()); | 5940 const ExternalLabel label(stub.EntryPoint()); |
| 5921 | 5941 |
| 5922 LocationSummary* locs = instruction_->locs(); | 5942 LocationSummary* locs = instruction_->locs(); |
| 5923 locs->live_registers()->Remove(locs->out(0)); | 5943 locs->live_registers()->Remove(locs->out(0)); |
| 5924 | 5944 |
| 5925 compiler->SaveLiveRegisters(locs); | 5945 compiler->SaveLiveRegisters(locs); |
| 5926 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. | 5946 compiler->GenerateCall(Scanner::kNoSourcePos, // No token position. |
| 5927 &label, | 5947 &label, |
| 5928 PcDescriptors::kOther, | 5948 PcDescriptors::kOther, |
| 5929 locs); | 5949 locs); |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6410 } | 6430 } |
| 6411 | 6431 |
| 6412 | 6432 |
| 6413 LocationSummary* AllocateObjectInstr::MakeLocationSummary(Isolate* isolate, | 6433 LocationSummary* AllocateObjectInstr::MakeLocationSummary(Isolate* isolate, |
| 6414 bool opt) const { | 6434 bool opt) const { |
| 6415 return MakeCallSummary(); | 6435 return MakeCallSummary(); |
| 6416 } | 6436 } |
| 6417 | 6437 |
| 6418 | 6438 |
| 6419 void AllocateObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 6439 void AllocateObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 6420 const Code& stub = Code::Handle(StubCode::GetAllocationStubForClass(cls())); | 6440 Isolate* isolate = compiler->isolate(); |
| 6441 StubCode* stub_code = isolate->stub_code(); |
| 6442 const Code& stub = Code::Handle(isolate, |
| 6443 stub_code->GetAllocationStubForClass(cls())); |
| 6421 const ExternalLabel label(stub.EntryPoint()); | 6444 const ExternalLabel label(stub.EntryPoint()); |
| 6422 compiler->GenerateCall(token_pos(), | 6445 compiler->GenerateCall(token_pos(), |
| 6423 &label, | 6446 &label, |
| 6424 PcDescriptors::kOther, | 6447 PcDescriptors::kOther, |
| 6425 locs()); | 6448 locs()); |
| 6426 __ Drop(ArgumentCount()); // Discard arguments. | 6449 __ Drop(ArgumentCount()); // Discard arguments. |
| 6427 } | 6450 } |
| 6428 | 6451 |
| 6429 | 6452 |
| 6430 void DebugStepCheckInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 6453 void DebugStepCheckInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 6431 ASSERT(!compiler->is_optimizing()); | 6454 ASSERT(!compiler->is_optimizing()); |
| 6432 const ExternalLabel label(StubCode::DebugStepCheckEntryPoint()); | 6455 StubCode* stub_code = compiler->isolate()->stub_code(); |
| 6456 const ExternalLabel label(stub_code->DebugStepCheckEntryPoint()); |
| 6433 __ LoadImmediate(R4, 0); | 6457 __ LoadImmediate(R4, 0); |
| 6434 __ LoadImmediate(R5, 0); | 6458 __ LoadImmediate(R5, 0); |
| 6435 compiler->GenerateCall(token_pos(), &label, stub_kind_, locs()); | 6459 compiler->GenerateCall(token_pos(), &label, stub_kind_, locs()); |
| 6436 #if defined(DEBUG) | 6460 #if defined(DEBUG) |
| 6437 __ LoadImmediate(R4, kInvalidObjectPointer); | 6461 __ LoadImmediate(R4, kInvalidObjectPointer); |
| 6438 __ LoadImmediate(R5, kInvalidObjectPointer); | 6462 __ LoadImmediate(R5, kInvalidObjectPointer); |
| 6439 #endif | 6463 #endif |
| 6440 } | 6464 } |
| 6441 | 6465 |
| 6442 } // namespace dart | 6466 } // namespace dart |
| 6443 | 6467 |
| 6444 #endif // defined TARGET_ARCH_ARM | 6468 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |