diff options
| author | Xin Qi <xqi@codeaurora.org> | 2011-11-27 23:27:29 -0800 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2013-10-31 19:37:29 -0600 |
| commit | 337a595d746d34ade52e3aba2c739455dfd3cf57 (patch) | |
| tree | 9e7c1286bc68b26dd445603118132e359ec28e58 /vm/compiler/codegen/arm/ArchUtility.cpp | |
| parent | 6e21232cf2bca0e73bd418413564cb140ab9ccbd (diff) | |
dalvik: dalvik device extension pack.
Add support for customer device extension
Change-Id: I0402a630ba212d1c5e81cda110f61210f7b60384
(cherry picked from commit 11499df326462bfe25890a35c6abbf019ff7784e)
(cherry picked from commit e03b8f8da9cf4eef64cedf39ce9ca90d26ce5124)
(cherry picked from commit fb360be406f35b9591f12c61936657f03cc5880f)
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; } |
