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

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

Issue 339183010: Specialize breakpoint stubs by set of live registers of the stubs they are intercepting. (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
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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_ARM64. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM64.
6 #if defined(TARGET_ARCH_ARM64) 6 #if defined(TARGET_ARCH_ARM64)
7 7
8 #include "vm/flow_graph_compiler.h" 8 #include "vm/flow_graph_compiler.h"
9 9
10 #include "vm/ast_printer.h" 10 #include "vm/ast_printer.h"
(...skipping 1197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1208 } 1208 }
1209 1209
1210 1210
1211 void FlowGraphCompiler::EmitInstanceCall(ExternalLabel* target_label, 1211 void FlowGraphCompiler::EmitInstanceCall(ExternalLabel* target_label,
1212 const ICData& ic_data, 1212 const ICData& ic_data,
1213 intptr_t argument_count, 1213 intptr_t argument_count,
1214 intptr_t deopt_id, 1214 intptr_t deopt_id,
1215 intptr_t token_pos, 1215 intptr_t token_pos,
1216 LocationSummary* locs) { 1216 LocationSummary* locs) {
1217 ASSERT(Array::Handle(ic_data.arguments_descriptor()).Length() > 0); 1217 ASSERT(Array::Handle(ic_data.arguments_descriptor()).Length() > 0);
1218 __ LoadImmediate(R4, 0, kNoPP);
1219 __ LoadObject(R5, ic_data, PP); 1218 __ LoadObject(R5, ic_data, PP);
1220 GenerateDartCall(deopt_id, 1219 GenerateDartCall(deopt_id,
1221 token_pos, 1220 token_pos,
1222 target_label, 1221 target_label,
1223 PcDescriptors::kIcCall, 1222 PcDescriptors::kIcCall,
1224 locs); 1223 locs);
1225 __ Drop(argument_count); 1224 __ Drop(argument_count);
1226 #if defined(DEBUG) 1225 #if defined(DEBUG)
1227 __ LoadImmediate(R4, kInvalidObjectPointer, kNoPP); 1226 __ LoadImmediate(R4, kInvalidObjectPointer, kNoPP);
1228 #endif 1227 #endif
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1298 const ICData& ic_data) { 1297 const ICData& ic_data) {
1299 uword label_address = 0; 1298 uword label_address = 0;
1300 if (ic_data.NumArgsTested() == 0) { 1299 if (ic_data.NumArgsTested() == 0) {
1301 label_address = StubCode::ZeroArgsUnoptimizedStaticCallEntryPoint(); 1300 label_address = StubCode::ZeroArgsUnoptimizedStaticCallEntryPoint();
1302 } else if (ic_data.NumArgsTested() == 2) { 1301 } else if (ic_data.NumArgsTested() == 2) {
1303 label_address = StubCode::TwoArgsUnoptimizedStaticCallEntryPoint(); 1302 label_address = StubCode::TwoArgsUnoptimizedStaticCallEntryPoint();
1304 } else { 1303 } else {
1305 UNIMPLEMENTED(); 1304 UNIMPLEMENTED();
1306 } 1305 }
1307 ExternalLabel target_label(label_address); 1306 ExternalLabel target_label(label_address);
1308 __ LoadImmediate(R4, 0, kNoPP);
1309 __ LoadObject(R5, ic_data, PP); 1307 __ LoadObject(R5, ic_data, PP);
1310 GenerateDartCall(deopt_id, 1308 GenerateDartCall(deopt_id,
1311 token_pos, 1309 token_pos,
1312 &target_label, 1310 &target_label,
1313 PcDescriptors::kUnoptStaticCall, 1311 PcDescriptors::kUnoptStaticCall,
1314 locs); 1312 locs);
1315 #if defined(DEBUG) 1313 #if defined(DEBUG)
1316 __ LoadImmediate(R5, kInvalidObjectPointer, kNoPP); 1314 __ LoadImmediate(R5, kInvalidObjectPointer, kNoPP);
1317 #endif 1315 #endif
1318 __ Drop(argument_count); 1316 __ Drop(argument_count);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 Register right, 1370 Register right,
1373 bool needs_number_check, 1371 bool needs_number_check,
1374 intptr_t token_pos) { 1372 intptr_t token_pos) {
1375 if (needs_number_check) { 1373 if (needs_number_check) {
1376 __ Push(left); 1374 __ Push(left);
1377 __ Push(right); 1375 __ Push(right);
1378 if (is_optimizing()) { 1376 if (is_optimizing()) {
1379 __ BranchLinkPatchable( 1377 __ BranchLinkPatchable(
1380 &StubCode::OptimizedIdenticalWithNumberCheckLabel()); 1378 &StubCode::OptimizedIdenticalWithNumberCheckLabel());
1381 } else { 1379 } else {
1382 __ LoadImmediate(R4, 0, kNoPP);
1383 __ LoadImmediate(R5, 0, kNoPP);
1384 __ BranchLinkPatchable( 1380 __ BranchLinkPatchable(
1385 &StubCode::UnoptimizedIdenticalWithNumberCheckLabel()); 1381 &StubCode::UnoptimizedIdenticalWithNumberCheckLabel());
1386 } 1382 }
1387 if (token_pos != Scanner::kNoSourcePos) { 1383 if (token_pos != Scanner::kNoSourcePos) {
1388 AddCurrentDescriptor(PcDescriptors::kRuntimeCall, 1384 AddCurrentDescriptor(PcDescriptors::kRuntimeCall,
1389 Isolate::kNoDeoptId, 1385 Isolate::kNoDeoptId,
1390 token_pos); 1386 token_pos);
1391 } 1387 }
1392 #if defined(DEBUG) 1388 #if defined(DEBUG)
1393 if (!is_optimizing()) { 1389 if (!is_optimizing()) {
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
1726 void ParallelMoveResolver::RestoreFpuScratch(FpuRegister reg) { 1722 void ParallelMoveResolver::RestoreFpuScratch(FpuRegister reg) {
1727 UNIMPLEMENTED(); 1723 UNIMPLEMENTED();
1728 } 1724 }
1729 1725
1730 1726
1731 #undef __ 1727 #undef __
1732 1728
1733 } // namespace dart 1729 } // namespace dart
1734 1730
1735 #endif // defined TARGET_ARCH_ARM64 1731 #endif // defined TARGET_ARCH_ARM64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698