| 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 | 10 |
| (...skipping 1018 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1029 case 7: | 1029 case 7: |
| 1030 Format(instr, "bic'sfs 'rd, 'rn, 'shift_op"); | 1030 Format(instr, "bic'sfs 'rd, 'rn, 'shift_op"); |
| 1031 break; | 1031 break; |
| 1032 default: | 1032 default: |
| 1033 UNREACHABLE(); | 1033 UNREACHABLE(); |
| 1034 break; | 1034 break; |
| 1035 } | 1035 } |
| 1036 } | 1036 } |
| 1037 | 1037 |
| 1038 | 1038 |
| 1039 void ARM64Decoder::DecodeMiscDP1Source(Instr* instr) { |
| 1040 if (instr->Bit(29) != 0) { |
| 1041 Unknown(instr); |
| 1042 } |
| 1043 |
| 1044 const int op = instr->Bits(10, 10); |
| 1045 switch (op) { |
| 1046 case 4: |
| 1047 Format(instr, "clz'sf 'rd, 'rn"); |
| 1048 break; |
| 1049 default: |
| 1050 Unknown(instr); |
| 1051 break; |
| 1052 } |
| 1053 } |
| 1054 |
| 1055 |
| 1039 void ARM64Decoder::DecodeMiscDP2Source(Instr* instr) { | 1056 void ARM64Decoder::DecodeMiscDP2Source(Instr* instr) { |
| 1040 if (instr->Bit(29) != 0) { | 1057 if (instr->Bit(29) != 0) { |
| 1041 Unknown(instr); | 1058 Unknown(instr); |
| 1042 } | 1059 } |
| 1043 | 1060 |
| 1044 const int op = instr->Bits(10, 5); | 1061 const int op = instr->Bits(10, 5); |
| 1045 switch (op) { | 1062 switch (op) { |
| 1046 case 2: | 1063 case 2: |
| 1047 Format(instr, "udiv'sf 'rd, 'rn, 'rm"); | 1064 Format(instr, "udiv'sf 'rd, 'rn, 'rm"); |
| 1048 break; | 1065 break; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1104 } | 1121 } |
| 1105 | 1122 |
| 1106 | 1123 |
| 1107 void ARM64Decoder::DecodeDPRegister(Instr* instr) { | 1124 void ARM64Decoder::DecodeDPRegister(Instr* instr) { |
| 1108 if (instr->IsAddSubShiftExtOp()) { | 1125 if (instr->IsAddSubShiftExtOp()) { |
| 1109 DecodeAddSubShiftExt(instr); | 1126 DecodeAddSubShiftExt(instr); |
| 1110 } else if (instr->IsAddSubWithCarryOp()) { | 1127 } else if (instr->IsAddSubWithCarryOp()) { |
| 1111 DecodeAddSubWithCarry(instr); | 1128 DecodeAddSubWithCarry(instr); |
| 1112 } else if (instr->IsLogicalShiftOp()) { | 1129 } else if (instr->IsLogicalShiftOp()) { |
| 1113 DecodeLogicalShift(instr); | 1130 DecodeLogicalShift(instr); |
| 1131 } else if (instr->IsMiscDP1SourceOp()) { |
| 1132 DecodeMiscDP1Source(instr); |
| 1114 } else if (instr->IsMiscDP2SourceOp()) { | 1133 } else if (instr->IsMiscDP2SourceOp()) { |
| 1115 DecodeMiscDP2Source(instr); | 1134 DecodeMiscDP2Source(instr); |
| 1116 } else if (instr->IsMiscDP3SourceOp()) { | 1135 } else if (instr->IsMiscDP3SourceOp()) { |
| 1117 DecodeMiscDP3Source(instr); | 1136 DecodeMiscDP3Source(instr); |
| 1118 } else if (instr->IsConditionalSelectOp()) { | 1137 } else if (instr->IsConditionalSelectOp()) { |
| 1119 DecodeConditionalSelect(instr); | 1138 DecodeConditionalSelect(instr); |
| 1120 } else { | 1139 } else { |
| 1121 Unknown(instr); | 1140 Unknown(instr); |
| 1122 } | 1141 } |
| 1123 } | 1142 } |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1442 int32_t instruction_bits = Instr::At(pc)->InstructionBits(); | 1461 int32_t instruction_bits = Instr::At(pc)->InstructionBits(); |
| 1443 OS::SNPrint(hex_buffer, hex_size, "%08x", instruction_bits); | 1462 OS::SNPrint(hex_buffer, hex_size, "%08x", instruction_bits); |
| 1444 if (out_instr_size) { | 1463 if (out_instr_size) { |
| 1445 *out_instr_size = Instr::kInstrSize; | 1464 *out_instr_size = Instr::kInstrSize; |
| 1446 } | 1465 } |
| 1447 } | 1466 } |
| 1448 | 1467 |
| 1449 } // namespace dart | 1468 } // namespace dart |
| 1450 | 1469 |
| 1451 #endif // defined TARGET_ARCH_ARM | 1470 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |