diff options
author | Fangrui Song <maskray@google.com> | 2020-01-11 15:06:02 -0800 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2020-01-11 15:43:26 -0800 |
commit | 1e8ce7492e91aa6db269334d12187c7ae854dccb (patch) | |
tree | ac03314f1d730c66584f5ab7a783c5fd685259f5 /llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp | |
parent | 6fdd6a7b3f696972edc244488f59532d05136a27 (diff) | |
download | bcm5719-llvm-1e8ce7492e91aa6db269334d12187c7ae854dccb.tar.gz bcm5719-llvm-1e8ce7492e91aa6db269334d12187c7ae854dccb.zip |
[X86][Disassembler] Optimize argument passing and immediate reading
Diffstat (limited to 'llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp')
-rw-r--r-- | llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp index be03dd77745..4e929d586d8 100644 --- a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp +++ b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp @@ -177,33 +177,35 @@ MCDisassembler::DecodeStatus X86GenericDisassembler::getInstruction( raw_ostream &CStream) const { CommentStream = &CStream; - InternalInstruction InternalInstr; + InternalInstruction Insn; + memset(&Insn, 0, sizeof(InternalInstruction)); + Insn.bytes = Bytes; + Insn.startLocation = Address; + Insn.readerCursor = Address; + Insn.mode = fMode; - std::pair<ArrayRef<uint8_t>, uint64_t> R(Bytes, Address); - - int Ret = decodeInstruction(&InternalInstr, &R, (const void *)MII.get(), - Address, fMode); + int Ret = decodeInstruction(&Insn, MII.get()); if (Ret) { - Size = InternalInstr.readerCursor - Address; + Size = Insn.readerCursor - Address; return Fail; } else { - Size = InternalInstr.length; - bool Ret = translateInstruction(Instr, InternalInstr, this); + Size = Insn.length; + bool Ret = translateInstruction(Instr, Insn, this); if (!Ret) { unsigned Flags = X86::IP_NO_PREFIX; - if (InternalInstr.hasAdSize) + if (Insn.hasAdSize) Flags |= X86::IP_HAS_AD_SIZE; - if (!InternalInstr.mandatoryPrefix) { - if (InternalInstr.hasOpSize) + if (!Insn.mandatoryPrefix) { + if (Insn.hasOpSize) Flags |= X86::IP_HAS_OP_SIZE; - if (InternalInstr.repeatPrefix == 0xf2) + if (Insn.repeatPrefix == 0xf2) Flags |= X86::IP_HAS_REPEAT_NE; - else if (InternalInstr.repeatPrefix == 0xf3 && + else if (Insn.repeatPrefix == 0xf3 && // It should not be 'pause' f3 90 - InternalInstr.opcode != 0x90) + Insn.opcode != 0x90) Flags |= X86::IP_HAS_REPEAT; - if (InternalInstr.hasLockPrefix) + if (Insn.hasLockPrefix) Flags |= X86::IP_HAS_LOCK; } Instr.setFlags(Flags); |