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 |