Chromium Code Reviews| Index: src/arm/disasm-arm.cc |
| =================================================================== |
| --- src/arm/disasm-arm.cc (revision 4358) |
| +++ src/arm/disasm-arm.cc (working copy) |
| @@ -449,6 +449,14 @@ |
| out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_, |
| "%d", instr->ShiftAmountField()); |
| return 8; |
| + } else if (format[3] == '0') { |
| + // 'off0to3and8to19 16-bit immediate encoded in bits 19-8 and 3-0. |
| + ASSERT(STRING_STARTS_WITH(format, "off0to3and8to19")); |
| + out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_, |
| + "%d", |
| + (instr->Bits(19, 8) << 4) + |
| + instr->Bits(3, 0)); |
| + return 15; |
| } |
| // 'off8: 8-bit offset for extra load and store instructions |
| ASSERT(STRING_STARTS_WITH(format, "off8")); |
| @@ -650,6 +658,34 @@ |
| } |
| return; |
| } |
| + } else if ((type == 0) && instr->IsMiscType0()) { |
|
Erik Corry
2010/04/08 12:56:30
This is a little strange to me, but if it matches
Søren Thygesen Gjesse
2010/04/08 13:29:06
Section A5.2 in ARM® Architecture Reference Manual
|
| + if (instr->Bits(22, 21) == 1) { |
| + switch (instr->Bits(7, 4)) { |
| + case BX: |
| + Format(instr, "bx'cond 'rm"); |
| + break; |
| + case BLX: |
| + Format(instr, "blx'cond 'rm"); |
| + break; |
| + case BKPT: |
| + Format(instr, "bkpt 'off0to3and8to19"); |
| + break; |
| + default: |
| + Unknown(instr); // not used by V8 |
| + break; |
| + } |
| + } else if (instr->Bits(22, 21) == 3) { |
| + switch (instr->Bits(7, 4)) { |
| + case CLZ: |
| + Format(instr, "clz'cond 'rd, 'rm"); |
| + break; |
| + default: |
| + Unknown(instr); // not used by V8 |
| + break; |
| + } |
| + } else { |
| + Unknown(instr); // not used by V8 |
| + } |
| } else { |
| switch (instr->OpcodeField()) { |
| case AND: { |
| @@ -696,17 +732,7 @@ |
| if (instr->HasS()) { |
| Format(instr, "teq'cond 'rn, 'shift_op"); |
| } else { |
| - switch (instr->Bits(7, 4)) { |
| - case BX: |
| - Format(instr, "bx'cond 'rm"); |
| - break; |
| - case BLX: |
| - Format(instr, "blx'cond 'rm"); |
| - break; |
| - default: |
| - Unknown(instr); // not used by V8 |
| - break; |
| - } |
| + Unknown(instr); // not used by V8 |
|
Erik Corry
2010/04/08 12:56:30
UNREACHABLE(); // Handled by IsMiscType0 code abo
Søren Thygesen Gjesse
2010/04/08 13:29:06
Done.
|
| } |
| break; |
| } |
| @@ -722,14 +748,7 @@ |
| if (instr->HasS()) { |
| Format(instr, "cmn'cond 'rn, 'shift_op"); |
| } else { |
| - switch (instr->Bits(7, 4)) { |
| - case CLZ: |
| - Format(instr, "clz'cond 'rd, 'rm"); |
| - break; |
| - default: |
| - Unknown(instr); // not used by V8 |
| - break; |
| - } |
| + Unknown(instr); // not used by V8 |
|
Erik Corry
2010/04/08 12:56:30
And here.
Søren Thygesen Gjesse
2010/04/08 13:29:06
Done.
|
| } |
| break; |
| } |