summaryrefslogtreecommitdiffstats
path: root/disassembler/disassembler_x86.h
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2014-12-12 18:44:19 -0800
committerAndreas Gampe <agampe@google.com>2014-12-15 08:15:57 -0800
commite5eb7060dbacfd7c768692a8fcc4a6017d0bd1cc (patch)
tree059f7f8b927e4e5fdbef2ed1f78c2a31c36699ab /disassembler/disassembler_x86.h
parentd1512fed4e43bba77fb21fd1b6322c22ef7c5881 (diff)
downloadandroid_art-e5eb7060dbacfd7c768692a8fcc4a6017d0bd1cc.tar.gz
android_art-e5eb7060dbacfd7c768692a8fcc4a6017d0bd1cc.tar.bz2
android_art-e5eb7060dbacfd7c768692a8fcc4a6017d0bd1cc.zip
ART: Break up x86 disassembler main function
The function leads to large stack frames with Clang. Break out some parts and use four char* variables for opcode. Bug: 18733806 Change-Id: I8bf6da6c763175d7081c4231fa5d3b6809316220
Diffstat (limited to 'disassembler/disassembler_x86.h')
-rw-r--r--disassembler/disassembler_x86.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/disassembler/disassembler_x86.h b/disassembler/disassembler_x86.h
index f448662f66..71c3e4161c 100644
--- a/disassembler/disassembler_x86.h
+++ b/disassembler/disassembler_x86.h
@@ -22,6 +22,8 @@
namespace art {
namespace x86 {
+enum RegFile { GPR, MMX, SSE };
+
class DisassemblerX86 FINAL : public Disassembler {
public:
DisassemblerX86(DisassemblerOptions* options, bool supports_rex)
@@ -33,6 +35,11 @@ class DisassemblerX86 FINAL : public Disassembler {
private:
size_t DumpInstruction(std::ostream& os, const uint8_t* instr);
+ std::string DumpAddress(uint8_t mod, uint8_t rm, uint8_t rex64, uint8_t rex_w, bool no_ops,
+ bool byte_operand, bool byte_second_operand, uint8_t* prefix, bool load,
+ RegFile src_reg_file, RegFile dst_reg_file, const uint8_t** instr,
+ uint32_t* address_bits);
+
const bool supports_rex_;
DISALLOW_COPY_AND_ASSIGN(DisassemblerX86);