summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2020-01-11 15:06:02 -0800
committerFangrui Song <maskray@google.com>2020-01-11 15:43:26 -0800
commit1e8ce7492e91aa6db269334d12187c7ae854dccb (patch)
treeac03314f1d730c66584f5ab7a783c5fd685259f5 /llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
parent6fdd6a7b3f696972edc244488f59532d05136a27 (diff)
downloadbcm5719-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.cpp32
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);
OpenPOWER on IntegriCloud