summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/disassembler.cpp9
-rw-r--r--arch/powerpc/disassembler.h2
2 files changed, 7 insertions, 4 deletions
diff --git a/arch/powerpc/disassembler.cpp b/arch/powerpc/disassembler.cpp
index df444fe8..0b513d70 100644
--- a/arch/powerpc/disassembler.cpp
+++ b/arch/powerpc/disassembler.cpp
@@ -139,7 +139,7 @@ bool PushOperandTokens(string& result, const Operand* op)
return true;
}
-int disassemble(uint8_t *data, uint32_t addr, string& result)
+int disassemble(uint8_t *data, uint32_t addr, string& result, uint32_t decodeFlags)
{
int rc = -1;
@@ -148,7 +148,10 @@ int disassemble(uint8_t *data, uint32_t addr, string& result)
Instruction instruction;
const char* mnemonic = NULL;
size_t len = 4;
- uint32_t decodeFlags = DECODE_FLAGS_PPC64;
+ if (decodeFlags == 0)
+ // TODO: There are no QPX instructions currently supported by the decoder, so leave that disabled for now.
+ // decodeFlags = DECODE_FLAGS_PPC64 | DECODE_FLAGS_ALTIVEC | DECODE_FLAGS_VSX | DECODE_FLAGS_QPX | DECODE_FLAGS_PS;
+ decodeFlags = DECODE_FLAGS_PPC64 | DECODE_FLAGS_ALTIVEC | DECODE_FLAGS_VSX | DECODE_FLAGS_PS;
//MYLOG("%s()\n", __func__);
size_t instructionLength = GetInstructionLength(data, len, decodeFlags);
@@ -159,7 +162,7 @@ int disassemble(uint8_t *data, uint32_t addr, string& result)
}
len = instructionLength;
- if (!FillInstruction(&instruction, data, instructionLength, addr))
+ if (!FillInstruction(&instruction, data, instructionLength, addr, 0, decodeFlags))
{
MYLOG("ERROR: FillInstruction()\n");
return -1;
diff --git a/arch/powerpc/disassembler.h b/arch/powerpc/disassembler.h
index bb764433..14db652f 100644
--- a/arch/powerpc/disassembler.h
+++ b/arch/powerpc/disassembler.h
@@ -2,4 +2,4 @@
#include <string>
using namespace std;
-int disassemble(uint8_t *data, uint32_t addr, string& result);
+int disassemble(uint8_t *data, uint32_t addr, string& result, uint32_t decodeFlags = 0);