Chromium Code Reviews| Index: src/arm/disasm-arm.cc |
| =================================================================== |
| --- src/arm/disasm-arm.cc (revision 4311) |
| +++ src/arm/disasm-arm.cc (working copy) |
| @@ -100,6 +100,7 @@ |
| void PrintSRegister(int reg); |
| void PrintDRegister(int reg); |
| int FormatVFPRegister(Instr* instr, const char* format); |
| + void PrintMovwMovt(Instr* instr); |
| int FormatVFPinstruction(Instr* instr, const char* format); |
| void PrintCondition(Instr* instr); |
| void PrintShiftRm(Instr* instr); |
| @@ -374,6 +375,23 @@ |
| } |
| +// Print the movw or movt instruction. |
| +void Decoder::PrintMovwMovt(Instr* instr) { |
| + int imm = instr->ImmedMovwMovtField(); |
| + int rd = instr->RdField(); |
| + PrintRegister(rd); |
| + if (instr->Bit(22) == 1) { |
| + // movt instruction. |
| + out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_, |
| + ", #%d0000", imm); |
|
Erik Corry
2010/05/03 10:06:28
This line has wrong alignment.
|
| + } else { |
| + // movw instruction |
| + out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_, |
| + ", #%d", imm); |
| + } |
| +} |
| + |
| + |
| // FormatOption takes a formatting string and interprets it based on |
| // the current instructions. The format string points to the first |
| // character of the option string (the option escape has already been |
| @@ -415,6 +433,11 @@ |
| return 1; |
| } |
| case 'm': { |
| + if ((format[1] == 't') || (format[1] == 'w')) { |
| + // 't and 'w: movt/movw instructions |
| + PrintMovwMovt(instr); |
| + return 2; |
| + } |
| if (format[1] == 'e') { // 'memop: load/store instructions |
| ASSERT(STRING_STARTS_WITH(format, "memop")); |
| if (instr->HasL()) { |
| @@ -688,7 +711,7 @@ |
| if (instr->HasS()) { |
| Format(instr, "tst'cond 'rn, 'shift_op"); |
| } else { |
| - Unknown(instr); // not used by V8 |
| + Format(instr, "movw'cond 'mw"); |
| } |
| break; |
| } |
| @@ -714,7 +737,7 @@ |
| if (instr->HasS()) { |
| Format(instr, "cmp'cond 'rn, 'shift_op"); |
| } else { |
| - Unknown(instr); // not used by V8 |
| + Format(instr, "movt'cond 'mt"); |
| } |
| break; |
| } |