xref: /aosp_15_r20/external/llvm/lib/MC/MCInstrAnalysis.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- MCInstrAnalysis.cpp - InstrDesc target hooks ------------*- C++ -*-===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker 
10*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCInstrAnalysis.h"
11*9880d681SAndroid Build Coastguard Worker using namespace llvm;
12*9880d681SAndroid Build Coastguard Worker 
evaluateBranch(const MCInst & Inst,uint64_t Addr,uint64_t Size,uint64_t & Target) const13*9880d681SAndroid Build Coastguard Worker bool MCInstrAnalysis::evaluateBranch(const MCInst &Inst, uint64_t Addr,
14*9880d681SAndroid Build Coastguard Worker                                      uint64_t Size, uint64_t &Target) const {
15*9880d681SAndroid Build Coastguard Worker   if (Inst.getNumOperands() == 0 ||
16*9880d681SAndroid Build Coastguard Worker       Info->get(Inst.getOpcode()).OpInfo[0].OperandType != MCOI::OPERAND_PCREL)
17*9880d681SAndroid Build Coastguard Worker     return false;
18*9880d681SAndroid Build Coastguard Worker 
19*9880d681SAndroid Build Coastguard Worker   int64_t Imm = Inst.getOperand(0).getImm();
20*9880d681SAndroid Build Coastguard Worker   Target = Addr+Size+Imm;
21*9880d681SAndroid Build Coastguard Worker   return true;
22*9880d681SAndroid Build Coastguard Worker }
23