| OLD | NEW |
| 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/disassembler.h" | 5 #include "vm/disassembler.h" |
| 6 | 6 |
| 7 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM64. | 7 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM64. |
| 8 #if defined(TARGET_ARCH_ARM64) | 8 #if defined(TARGET_ARCH_ARM64) |
| 9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
| 10 #include "vm/instructions.h" | 10 #include "vm/instructions.h" |
| (...skipping 1301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1312 // Double. | 1312 // Double. |
| 1313 Format(instr, "fmovd 'vd, 'immd"); | 1313 Format(instr, "fmovd 'vd, 'immd"); |
| 1314 } else { | 1314 } else { |
| 1315 // Single. | 1315 // Single. |
| 1316 Unknown(instr); | 1316 Unknown(instr); |
| 1317 } | 1317 } |
| 1318 } | 1318 } |
| 1319 | 1319 |
| 1320 | 1320 |
| 1321 void ARM64Decoder::DecodeFPIntCvt(Instr* instr) { | 1321 void ARM64Decoder::DecodeFPIntCvt(Instr* instr) { |
| 1322 if ((instr->Bit(29) != 0) || (instr->Bits(22, 2) != 1)) { | 1322 if ((instr->Bit(29) != 0)) { |
| 1323 Unknown(instr); | 1323 Unknown(instr); |
| 1324 return; | 1324 return; |
| 1325 } | 1325 } |
| 1326 if (instr->Bits(16, 5) == 2) { | 1326 |
| 1327 Format(instr, "scvtfd'sf 'vd, 'rn"); | 1327 if ((instr->SFField() == 0) && (instr->Bits(22, 2) == 0)) { |
| 1328 } else if (instr->Bits(16, 5) == 6) { | 1328 if (instr->Bits(16, 5) == 6) { |
| 1329 Format(instr, "fmovrd'sf 'rd, 'vn"); | 1329 Format(instr, "fmovrs'sf 'rd, 'vn"); |
| 1330 } else if (instr->Bits(16, 5) == 7) { | 1330 } else if (instr->Bits(16, 5) == 7) { |
| 1331 Format(instr, "fmovdr'sf 'vd, 'rn"); | 1331 Format(instr, "fmovsr'sf 'vd, 'rn"); |
| 1332 } else if (instr->Bits(16, 5) == 24) { | 1332 } else { |
| 1333 Format(instr, "fcvtzds'sf 'rd, 'vn"); | 1333 Unknown(instr); |
| 1334 } |
| 1335 } else if (instr->Bits(22, 2) == 1) { |
| 1336 if (instr->Bits(16, 5) == 2) { |
| 1337 Format(instr, "scvtfd'sf 'vd, 'rn"); |
| 1338 } else if (instr->Bits(16, 5) == 6) { |
| 1339 Format(instr, "fmovrd'sf 'rd, 'vn"); |
| 1340 } else if (instr->Bits(16, 5) == 7) { |
| 1341 Format(instr, "fmovdr'sf 'vd, 'rn"); |
| 1342 } else if (instr->Bits(16, 5) == 24) { |
| 1343 Format(instr, "fcvtzds'sf 'rd, 'vn"); |
| 1344 } else { |
| 1345 Unknown(instr); |
| 1346 } |
| 1334 } else { | 1347 } else { |
| 1335 Unknown(instr); | 1348 Unknown(instr); |
| 1336 } | 1349 } |
| 1337 } | 1350 } |
| 1338 | 1351 |
| 1339 | 1352 |
| 1340 void ARM64Decoder::DecodeFPOneSource(Instr* instr) { | 1353 void ARM64Decoder::DecodeFPOneSource(Instr* instr) { |
| 1341 const int opc = instr->Bits(15, 6); | 1354 const int opc = instr->Bits(15, 6); |
| 1342 | 1355 |
| 1343 if ((opc != 5) && (instr->Bit(22) != 1)) { | 1356 if ((opc != 5) && (instr->Bit(22) != 1)) { |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1485 *object = NULL; | 1498 *object = NULL; |
| 1486 } | 1499 } |
| 1487 } | 1500 } |
| 1488 } | 1501 } |
| 1489 | 1502 |
| 1490 #endif // !PRODUCT | 1503 #endif // !PRODUCT |
| 1491 | 1504 |
| 1492 } // namespace dart | 1505 } // namespace dart |
| 1493 | 1506 |
| 1494 #endif // defined TARGET_ARCH_ARM | 1507 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |