| 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/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 1254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1265 intptr_t token_pos, | 1265 intptr_t token_pos, |
| 1266 LocationSummary* locs) { | 1266 LocationSummary* locs) { |
| 1267 ASSERT(Array::Handle(ic_data.arguments_descriptor()).Length() > 0); | 1267 ASSERT(Array::Handle(ic_data.arguments_descriptor()).Length() > 0); |
| 1268 __ LoadObject(R5, ic_data); | 1268 __ LoadObject(R5, ic_data); |
| 1269 GenerateDartCall(deopt_id, | 1269 GenerateDartCall(deopt_id, |
| 1270 token_pos, | 1270 token_pos, |
| 1271 target_label, | 1271 target_label, |
| 1272 RawPcDescriptors::kIcCall, | 1272 RawPcDescriptors::kIcCall, |
| 1273 locs); | 1273 locs); |
| 1274 __ Drop(argument_count); | 1274 __ Drop(argument_count); |
| 1275 #if defined(DEBUG) | |
| 1276 __ LoadImmediate(R4, kInvalidObjectPointer); | |
| 1277 #endif | |
| 1278 } | 1275 } |
| 1279 | 1276 |
| 1280 | 1277 |
| 1281 void FlowGraphCompiler::EmitMegamorphicInstanceCall( | 1278 void FlowGraphCompiler::EmitMegamorphicInstanceCall( |
| 1282 const ICData& ic_data, | 1279 const ICData& ic_data, |
| 1283 intptr_t argument_count, | 1280 intptr_t argument_count, |
| 1284 intptr_t deopt_id, | 1281 intptr_t deopt_id, |
| 1285 intptr_t token_pos, | 1282 intptr_t token_pos, |
| 1286 LocationSummary* locs) { | 1283 LocationSummary* locs) { |
| 1287 MegamorphicCacheTable* table = Isolate::Current()->megamorphic_cache_table(); | 1284 MegamorphicCacheTable* table = Isolate::Current()->megamorphic_cache_table(); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1350 const uword label_address = | 1347 const uword label_address = |
| 1351 stub_code->UnoptimizedStaticCallEntryPoint(ic_data.NumArgsTested()); | 1348 stub_code->UnoptimizedStaticCallEntryPoint(ic_data.NumArgsTested()); |
| 1352 ExternalLabel target_label(label_address); | 1349 ExternalLabel target_label(label_address); |
| 1353 __ LoadObject(R5, ic_data); | 1350 __ LoadObject(R5, ic_data); |
| 1354 GenerateDartCall(deopt_id, | 1351 GenerateDartCall(deopt_id, |
| 1355 token_pos, | 1352 token_pos, |
| 1356 &target_label, | 1353 &target_label, |
| 1357 RawPcDescriptors::kUnoptStaticCall, | 1354 RawPcDescriptors::kUnoptStaticCall, |
| 1358 locs); | 1355 locs); |
| 1359 __ Drop(argument_count); | 1356 __ Drop(argument_count); |
| 1360 #if defined(DEBUG) | |
| 1361 __ LoadImmediate(R4, kInvalidObjectPointer); | |
| 1362 __ LoadImmediate(R5, kInvalidObjectPointer); | |
| 1363 #endif | |
| 1364 } | 1357 } |
| 1365 | 1358 |
| 1366 | 1359 |
| 1367 void FlowGraphCompiler::EmitOptimizedStaticCall( | 1360 void FlowGraphCompiler::EmitOptimizedStaticCall( |
| 1368 const Function& function, | 1361 const Function& function, |
| 1369 const Array& arguments_descriptor, | 1362 const Array& arguments_descriptor, |
| 1370 intptr_t argument_count, | 1363 intptr_t argument_count, |
| 1371 intptr_t deopt_id, | 1364 intptr_t deopt_id, |
| 1372 intptr_t token_pos, | 1365 intptr_t token_pos, |
| 1373 LocationSummary* locs) { | 1366 LocationSummary* locs) { |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1430 &stub_code->OptimizedIdenticalWithNumberCheckLabel()); | 1423 &stub_code->OptimizedIdenticalWithNumberCheckLabel()); |
| 1431 } else { | 1424 } else { |
| 1432 __ BranchLinkPatchable( | 1425 __ BranchLinkPatchable( |
| 1433 &stub_code->UnoptimizedIdenticalWithNumberCheckLabel()); | 1426 &stub_code->UnoptimizedIdenticalWithNumberCheckLabel()); |
| 1434 } | 1427 } |
| 1435 if (token_pos != Scanner::kNoSourcePos) { | 1428 if (token_pos != Scanner::kNoSourcePos) { |
| 1436 AddCurrentDescriptor(RawPcDescriptors::kRuntimeCall, | 1429 AddCurrentDescriptor(RawPcDescriptors::kRuntimeCall, |
| 1437 Isolate::kNoDeoptId, | 1430 Isolate::kNoDeoptId, |
| 1438 token_pos); | 1431 token_pos); |
| 1439 } | 1432 } |
| 1440 #if defined(DEBUG) | |
| 1441 if (!is_optimizing()) { | |
| 1442 // Do this *after* adding the pc descriptor! | |
| 1443 __ LoadImmediate(R4, kInvalidObjectPointer); | |
| 1444 __ LoadImmediate(R5, kInvalidObjectPointer); | |
| 1445 } | |
| 1446 #endif | |
| 1447 // Stub returns result in flags (result of a cmp, we need Z computed). | 1433 // Stub returns result in flags (result of a cmp, we need Z computed). |
| 1448 __ Pop(right); | 1434 __ Pop(right); |
| 1449 __ Pop(left); | 1435 __ Pop(left); |
| 1450 } else { | 1436 } else { |
| 1451 __ cmp(left, Operand(right)); | 1437 __ cmp(left, Operand(right)); |
| 1452 } | 1438 } |
| 1453 return EQ; | 1439 return EQ; |
| 1454 } | 1440 } |
| 1455 | 1441 |
| 1456 | 1442 |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1889 DRegister dreg = EvenDRegisterOf(reg); | 1875 DRegister dreg = EvenDRegisterOf(reg); |
| 1890 __ vldrd(dreg, Address(SP, kDoubleSize, Address::PostIndex)); | 1876 __ vldrd(dreg, Address(SP, kDoubleSize, Address::PostIndex)); |
| 1891 } | 1877 } |
| 1892 | 1878 |
| 1893 | 1879 |
| 1894 #undef __ | 1880 #undef __ |
| 1895 | 1881 |
| 1896 } // namespace dart | 1882 } // namespace dart |
| 1897 | 1883 |
| 1898 #endif // defined TARGET_ARCH_ARM | 1884 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |