diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/MC/MCInstrAnalysis.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/MC/MCInstrAnalysis.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/MC/MCInstrAnalysis.cpp b/contrib/llvm-project/llvm/lib/MC/MCInstrAnalysis.cpp new file mode 100644 index 000000000000..eca87f940bf5 --- /dev/null +++ b/contrib/llvm-project/llvm/lib/MC/MCInstrAnalysis.cpp @@ -0,0 +1,35 @@ +//===- MCInstrAnalysis.cpp - InstrDesc target hooks -----------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "llvm/MC/MCInstrAnalysis.h" + +#include "llvm/ADT/APInt.h" +#include "llvm/MC/MCInst.h" +#include "llvm/MC/MCInstrDesc.h" +#include "llvm/MC/MCInstrInfo.h" +#include <cstdint> + +using namespace llvm; + +bool MCInstrAnalysis::clearsSuperRegisters(const MCRegisterInfo &MRI, + const MCInst &Inst, + APInt &Writes) const { + Writes.clearAllBits(); + return false; +} + +bool MCInstrAnalysis::evaluateBranch(const MCInst &Inst, uint64_t Addr, + uint64_t Size, uint64_t &Target) const { + if (Inst.getNumOperands() == 0 || + Info->get(Inst.getOpcode()).OpInfo[0].OperandType != MCOI::OPERAND_PCREL) + return false; + + int64_t Imm = Inst.getOperand(0).getImm(); + Target = Addr+Size+Imm; + return true; +} |