| 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_XXX. | 5 #include "vm/globals.h"  // Needed here to get TARGET_ARCH_XXX. | 
| 6 | 6 | 
| 7 #include "vm/flow_graph_compiler.h" | 7 #include "vm/flow_graph_compiler.h" | 
| 8 | 8 | 
| 9 #include "vm/cha.h" | 9 #include "vm/cha.h" | 
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" | 
| (...skipping 1271 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1282 } | 1282 } | 
| 1283 | 1283 | 
| 1284 | 1284 | 
| 1285 ParallelMoveResolver::ScratchRegisterScope::~ScratchRegisterScope() { | 1285 ParallelMoveResolver::ScratchRegisterScope::~ScratchRegisterScope() { | 
| 1286   if (spilled_) { | 1286   if (spilled_) { | 
| 1287     resolver_->RestoreScratch(reg_); | 1287     resolver_->RestoreScratch(reg_); | 
| 1288   } | 1288   } | 
| 1289 } | 1289 } | 
| 1290 | 1290 | 
| 1291 | 1291 | 
| 1292 intptr_t FlowGraphCompiler::ElementSizeFor(intptr_t cid) { |  | 
| 1293   if (RawObject::IsExternalTypedDataClassId(cid)) { |  | 
| 1294     return ExternalTypedData::ElementSizeInBytes(cid); |  | 
| 1295   } else if (RawObject::IsTypedDataClassId(cid)) { |  | 
| 1296     return TypedData::ElementSizeInBytes(cid); |  | 
| 1297   } |  | 
| 1298   switch (cid) { |  | 
| 1299     case kArrayCid: |  | 
| 1300     case kImmutableArrayCid: |  | 
| 1301       return Array::kBytesPerElement; |  | 
| 1302     case kOneByteStringCid: |  | 
| 1303       return OneByteString::kBytesPerElement; |  | 
| 1304     case kTwoByteStringCid: |  | 
| 1305       return TwoByteString::kBytesPerElement; |  | 
| 1306     default: |  | 
| 1307       UNIMPLEMENTED(); |  | 
| 1308       return 0; |  | 
| 1309   } |  | 
| 1310 } |  | 
| 1311 |  | 
| 1312 |  | 
| 1313 intptr_t FlowGraphCompiler::DataOffsetFor(intptr_t cid) { |  | 
| 1314   if (RawObject::IsExternalTypedDataClassId(cid)) { |  | 
| 1315     // Elements start at offset 0 of the external data. |  | 
| 1316     return 0; |  | 
| 1317   } |  | 
| 1318   if (RawObject::IsTypedDataClassId(cid)) { |  | 
| 1319     return TypedData::data_offset(); |  | 
| 1320   } |  | 
| 1321   switch (cid) { |  | 
| 1322     case kArrayCid: |  | 
| 1323     case kImmutableArrayCid: |  | 
| 1324       return Array::data_offset(); |  | 
| 1325     case kOneByteStringCid: |  | 
| 1326       return OneByteString::data_offset(); |  | 
| 1327     case kTwoByteStringCid: |  | 
| 1328       return TwoByteString::data_offset(); |  | 
| 1329     default: |  | 
| 1330       UNIMPLEMENTED(); |  | 
| 1331       return Array::data_offset(); |  | 
| 1332   } |  | 
| 1333 } |  | 
| 1334 |  | 
| 1335 |  | 
| 1336 static int HighestCountFirst(const CidTarget* a, const CidTarget* b) { | 1292 static int HighestCountFirst(const CidTarget* a, const CidTarget* b) { | 
| 1337   // Negative if 'a' should sort before 'b'. | 1293   // Negative if 'a' should sort before 'b'. | 
| 1338   return b->count - a->count; | 1294   return b->count - a->count; | 
| 1339 } | 1295 } | 
| 1340 | 1296 | 
| 1341 | 1297 | 
| 1342 // Returns 'sorted' array in decreasing count order. | 1298 // Returns 'sorted' array in decreasing count order. | 
| 1343 // The expected number of elements to sort is less than 10. | 1299 // The expected number of elements to sort is less than 10. | 
| 1344 void FlowGraphCompiler::SortICDataByCount(const ICData& ic_data, | 1300 void FlowGraphCompiler::SortICDataByCount(const ICData& ic_data, | 
| 1345                                           GrowableArray<CidTarget>* sorted) { | 1301                                           GrowableArray<CidTarget>* sorted) { | 
| 1346   ASSERT(ic_data.NumArgsTested() == 1); | 1302   ASSERT(ic_data.NumArgsTested() == 1); | 
| 1347   const intptr_t len = ic_data.NumberOfChecks(); | 1303   const intptr_t len = ic_data.NumberOfChecks(); | 
| 1348   sorted->Clear(); | 1304   sorted->Clear(); | 
| 1349 | 1305 | 
| 1350   for (int i = 0; i < len; i++) { | 1306   for (int i = 0; i < len; i++) { | 
| 1351     sorted->Add(CidTarget(ic_data.GetReceiverClassIdAt(i), | 1307     sorted->Add(CidTarget(ic_data.GetReceiverClassIdAt(i), | 
| 1352                           &Function::ZoneHandle(ic_data.GetTargetAt(i)), | 1308                           &Function::ZoneHandle(ic_data.GetTargetAt(i)), | 
| 1353                           ic_data.GetCountAt(i))); | 1309                           ic_data.GetCountAt(i))); | 
| 1354   } | 1310   } | 
| 1355   sorted->Sort(HighestCountFirst); | 1311   sorted->Sort(HighestCountFirst); | 
| 1356 } | 1312 } | 
| 1357 | 1313 | 
| 1358 }  // namespace dart | 1314 }  // namespace dart | 
| OLD | NEW | 
|---|