diff options
Diffstat (limited to 'vm/compiler/codegen/arm/ArchUtility.cpp')
| -rw-r--r-- | vm/compiler/codegen/arm/ArchUtility.cpp | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/vm/compiler/codegen/arm/ArchUtility.cpp b/vm/compiler/codegen/arm/ArchUtility.cpp index 9f87b7ff4..db1281ff1 100644 --- a/vm/compiler/codegen/arm/ArchUtility.cpp +++ b/vm/compiler/codegen/arm/ArchUtility.cpp @@ -144,11 +144,14 @@ static void buildInsnString(const char *fmt, ArmLIR *lir, char* buf, operand = expandImmediate(operand); sprintf(tbuf,"%d [%#x]", operand, operand); break; + case 'q': + sprintf(tbuf,"q%d",(operand - 128 - FP_REG_OFFSET) >> 2); + break; case 's': sprintf(tbuf,"s%d",operand & FP_REG_MASK); break; case 'S': - sprintf(tbuf,"d%d",(operand & FP_REG_MASK) >> 1); + sprintf(tbuf,"d%d",(operand - FP_DOUBLE - FP_REG_OFFSET) >> 1); break; case 'h': sprintf(tbuf,"%04x", operand); @@ -189,6 +192,15 @@ static void buildInsnString(const char *fmt, ArmLIR *lir, char* buf, case kArmCondMi: strcpy(tbuf, "mi"); break; + case kArmCondPl: + strcpy(tbuf, "pl"); + break; + case kArmCondHi: + strcpy(tbuf, "hi"); + break; + case kArmCondLs: + strcpy(tbuf, "ls"); + break; default: strcpy(tbuf, ""); break; @@ -291,12 +303,26 @@ void dvmDumpResourceMask(LIR *lir, u8 mask, const char *prefix) #define DUMP_RESOURCE_MASK(X) #define DUMP_SSA_REP(X) +/* + * Decodes generic ARM opcodes + */ +static void printDefaultInstr(ArmLIR *lir, unsigned char *baseAddr) +{ + char buf[256]; + char opName[256]; + int offset = lir->generic.offset; + + buildInsnString(getEncoding(lir->opcode)->name, lir, opName, baseAddr, 256); + buildInsnString(getEncoding(lir->opcode)->fmt, lir, buf, baseAddr, 256); + ALOGD("%p (%04x): %-12s%s%s", + baseAddr + offset, offset, opName, buf, + lir->flags.isNop ? "(nop)" : ""); +} + /* Pretty-print a LIR instruction */ void dvmDumpLIRInsn(LIR *arg, unsigned char *baseAddr) { ArmLIR *lir = (ArmLIR *) arg; - char buf[256]; - char opName[256]; int offset = lir->generic.offset; int dest = lir->operands[0]; const bool dumpNop = false; @@ -358,6 +384,10 @@ void dvmDumpLIRInsn(LIR *arg, unsigned char *baseAddr) ALOGD("-------- reconstruct dalvik PC : 0x%04x @ +0x%04x", dest, lir->operands[1]); break; + case kArmPseudoPCReconstructionCellExtended: + ALOGD("-------- reconstruct dalvik PC : 0x%04x @ +0x%04x (extended)\n", dest, + lir->operands[1]); + break; case kArmPseudoPCReconstructionBlockLabel: /* Do nothing */ break; @@ -372,13 +402,7 @@ void dvmDumpLIRInsn(LIR *arg, unsigned char *baseAddr) if (lir->flags.isNop && !dumpNop) { break; } - buildInsnString(EncodingMap[lir->opcode].name, lir, opName, - baseAddr, 256); - buildInsnString(EncodingMap[lir->opcode].fmt, lir, buf, baseAddr, - 256); - ALOGD("%p (%04x): %-8s%s%s", - baseAddr + offset, offset, opName, buf, - lir->flags.isNop ? "(nop)" : ""); + printDefaultInstr(lir, baseAddr); break; } |
