diff options
author | Andreas Gampe <agampe@google.com> | 2014-12-12 18:44:19 -0800 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2014-12-15 08:15:57 -0800 |
commit | e5eb7060dbacfd7c768692a8fcc4a6017d0bd1cc (patch) | |
tree | 059f7f8b927e4e5fdbef2ed1f78c2a31c36699ab /disassembler/disassembler_x86.h | |
parent | d1512fed4e43bba77fb21fd1b6322c22ef7c5881 (diff) | |
download | android_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.h | 7 |
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); |