diff options
Diffstat (limited to 'disassembler')
| -rw-r--r-- | disassembler/Android.mk | 2 | ||||
| -rw-r--r-- | disassembler/disassembler_mips.cc | 1 | ||||
| -rw-r--r-- | disassembler/disassembler_mips64.cc | 12 | ||||
| -rw-r--r-- | disassembler/disassembler_x86.cc | 18 |
4 files changed, 24 insertions, 9 deletions
diff --git a/disassembler/Android.mk b/disassembler/Android.mk index c9aa8c8f11..1cfd45acdc 100644 --- a/disassembler/Android.mk +++ b/disassembler/Android.mk @@ -81,6 +81,8 @@ define build-libart-disassembler endif LOCAL_C_INCLUDES += $(ART_C_INCLUDES) art/runtime + LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH) + LOCAL_MULTILIB := both LOCAL_ADDITIONAL_DEPENDENCIES := art/build/Android.common_build.mk LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk diff --git a/disassembler/disassembler_mips.cc b/disassembler/disassembler_mips.cc index b27b555265..e2b7341c9a 100644 --- a/disassembler/disassembler_mips.cc +++ b/disassembler/disassembler_mips.cc @@ -228,7 +228,6 @@ size_t DisassemblerMips::Dump(std::ostream& os, const uint8_t* instr_ptr) { } continue; // No ", ". } - break; case 'I': // Upper 16-bit immediate. args << reinterpret_cast<void*>((instruction & 0xffff) << 16); break; diff --git a/disassembler/disassembler_mips64.cc b/disassembler/disassembler_mips64.cc index 7b289d0cf3..f1c7d8e0df 100644 --- a/disassembler/disassembler_mips64.cc +++ b/disassembler/disassembler_mips64.cc @@ -185,7 +185,7 @@ static uint32_t ReadU32(const uint8_t* ptr) { return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); } -static void DumpMips64(std::ostream& os, const uint8_t* instr_ptr) { +size_t DisassemblerMips64::Dump(std::ostream& os, const uint8_t* instr_ptr) { uint32_t instruction = ReadU32(instr_ptr); uint32_t rs = (instruction >> 21) & 0x1f; // I-type, R-type. @@ -233,7 +233,6 @@ static void DumpMips64(std::ostream& os, const uint8_t* instr_ptr) { } continue; // No ", ". } - break; case 'I': // Upper 16-bit immediate. args << reinterpret_cast<void*>((instruction & 0xffff) << 16); break; @@ -273,19 +272,16 @@ static void DumpMips64(std::ostream& os, const uint8_t* instr_ptr) { } } - os << StringPrintf("%p: %08x\t%-7s ", instr_ptr, instruction, opcode.c_str()) + os << FormatInstructionPointer(instr_ptr) + << StringPrintf(": %08x\t%-7s ", instruction, opcode.c_str()) << args.str() << '\n'; -} - -size_t DisassemblerMips64::Dump(std::ostream& os, const uint8_t* begin) { - DumpMips64(os, begin); return 4; } void DisassemblerMips64::Dump(std::ostream& os, const uint8_t* begin, const uint8_t* end) { for (const uint8_t* cur = begin; cur < end; cur += 4) { - DumpMips64(os, cur); + Dump(os, cur); } } diff --git a/disassembler/disassembler_x86.cc b/disassembler/disassembler_x86.cc index 203488d2fb..a1834e1e9a 100644 --- a/disassembler/disassembler_x86.cc +++ b/disassembler/disassembler_x86.cc @@ -561,6 +561,24 @@ DISASSEMBLER_ENTRY(cmp, instr++; if (prefix[2] == 0x66) { switch (*instr) { + case 0x0A: + opcode1 = "roundss"; + prefix[2] = 0; + has_modrm = true; + store = true; + src_reg_file = SSE; + dst_reg_file = SSE; + immediate_bytes = 1; + break; + case 0x0B: + opcode1 = "roundsd"; + prefix[2] = 0; + has_modrm = true; + store = true; + src_reg_file = SSE; + dst_reg_file = SSE; + immediate_bytes = 1; + break; case 0x14: opcode1 = "pextrb"; prefix[2] = 0; |