141ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer//===-- MCInstrAnalysis.cpp - InstrDesc target hooks ------------*- C++ -*-===//
241ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer//
341ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer//                     The LLVM Compiler Infrastructure
441ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer//
541ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer// This file is distributed under the University of Illinois Open Source
641ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer// License. See LICENSE.TXT for details.
741ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer//
841ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer//===----------------------------------------------------------------------===//
941ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer
1041ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer#include "llvm/MC/MCInstrAnalysis.h"
1141ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramerusing namespace llvm;
1241ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer
1341ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Krameruint64_t MCInstrAnalysis::evaluateBranch(const MCInst &Inst, uint64_t Addr,
1441ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer                                         uint64_t Size) const {
15a182be9b6cab86b3d52371efea1681161820cf1cBenjamin Kramer  if (Inst.getNumOperands() == 0 ||
16a182be9b6cab86b3d52371efea1681161820cf1cBenjamin Kramer      Info->get(Inst.getOpcode()).OpInfo[0].OperandType != MCOI::OPERAND_PCREL)
1741ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer    return -1ULL;
1841ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer
1941ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer  int64_t Imm = Inst.getOperand(0).getImm();
2041ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer  return Addr+Size+Imm;
2141ab14b725c8f2bb3e54553d0d7d96ff184786b1Benjamin Kramer}
22