EDDisassembler.h revision b950585cc5a0d665e9accfe5ce490cd269756f2e
1847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner//===-- EDDisassembler.h - LLVM Enhanced Disassembler -----------*- C++ -*-===// 2ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// 3ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// The LLVM Compiler Infrastructure 4ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// 5ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// This file is distributed under the University of Illinois Open Source 6ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// License. See LICENSE.TXT for details. 7ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// 8ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan//===----------------------------------------------------------------------===// 9ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// 10ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// This file defines the interface for the Enhanced Disassembly library's 11ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// disassembler class. The disassembler is responsible for vending individual 12ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// instructions according to a given architecture and disassembly syntax. 13ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan// 14ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan//===----------------------------------------------------------------------===// 15ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 16847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner#ifndef LLVM_EDDISASSEMBLER_H 17847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner#define LLVM_EDDISASSEMBLER_H 18ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 19a4f15d66ab219dcf969412496381dce5f4fc16a2Chris Lattner#include "EDInfo.h" 20ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 21ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan#include "llvm/ADT/OwningPtr.h" 22ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan#include "llvm/ADT/Triple.h" 23ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan#include "llvm/Support/raw_ostream.h" 241f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "llvm/Support/Mutex.h" 25ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 26ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan#include <map> 27ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan#include <set> 28ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan#include <vector> 29ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 30ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanannamespace llvm { 31ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass AsmLexer; 320e6a052331f674dd70e28af41f654a7874405eabEvan Chengclass AsmParser; 33ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass AsmToken; 34ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass MCContext; 35ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass MCAsmInfo; 36ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass MCAsmLexer; 37ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass MCDisassembler; 38ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass MCInstPrinter; 39ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass MCInst; 40ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass MCParsedAsmOperand; 410e6a052331f674dd70e28af41f654a7874405eabEvan Chengclass MCRegisterInfo; 42ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass MCStreamer; 43ebdeeab812beec0385b445f3d4c41a114e0d972fEvan Chengclass MCSubtargetInfo; 4494b9550a32d189704a8eae55505edf62662c0534Evan Chengclass MCTargetAsmLexer; 4594b9550a32d189704a8eae55505edf62662c0534Evan Chengclass MCTargetAsmParser; 46ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanantemplate <typename T> class SmallVectorImpl; 47ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass SourceMgr; 48ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananclass Target; 499899f70a7406d632c82849978bf6981f1ee4ccb5Sean Callanan 509899f70a7406d632c82849978bf6981f1ee4ccb5Sean Callananstruct EDInstInfo; 51847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattnerstruct EDInst; 52847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattnerstruct EDOperand; 53847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattnerstruct EDToken; 54847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner 55847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattnertypedef int (*EDByteReaderCallback)(uint8_t *byte, uint64_t address, void *arg); 56ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 57ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan/// EDDisassembler - Encapsulates a disassembler for a single architecture and 58ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan/// disassembly syntax. Also manages the static disassembler registry. 59ee5dfd42f1361da9e44b768a12495be235d6043fSean Callananstruct EDDisassembler { 60847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner typedef enum { 61847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner /*! @constant kEDAssemblySyntaxX86Intel Intel syntax for i386 and x86_64. */ 62847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner kEDAssemblySyntaxX86Intel = 0, 63847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner /*! @constant kEDAssemblySyntaxX86ATT AT&T syntax for i386 and x86_64. */ 64847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner kEDAssemblySyntaxX86ATT = 1, 65847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner kEDAssemblySyntaxARMUAL = 2 66847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner } AssemblySyntax; 67847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner 68847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner 69ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan //////////////////// 70ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan // Static members // 71ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan //////////////////// 72ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 73ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// CPUKey - Encapsulates the descriptor of an architecture/disassembly-syntax 74ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// pair 75ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan struct CPUKey { 76ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The architecture type 77ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::Triple::ArchType Arch; 78ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 79ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The assembly syntax 80847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner AssemblySyntax Syntax; 81ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 82ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// operator== - Equality operator 83ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan bool operator==(const CPUKey &key) const { 84ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan return (Arch == key.Arch && 85ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan Syntax == key.Syntax); 86ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan } 87ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 88ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// operator< - Less-than operator 89ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan bool operator<(const CPUKey &key) const { 907a387e4d9de9ab8155836e65138621192ba8316aSean Callanan return ((Arch < key.Arch) || 917a387e4d9de9ab8155836e65138621192ba8316aSean Callanan ((Arch == key.Arch) && Syntax < (key.Syntax))); 92ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan } 93ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan }; 94ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 95ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan typedef std::map<CPUKey, EDDisassembler*> DisassemblerMap_t; 96ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 97ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// True if the disassembler registry has been initialized; false if not 98ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan static bool sInitialized; 99ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// A map from disassembler specifications to disassemblers. Populated 100ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// lazily. 101ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan static DisassemblerMap_t sDisassemblers; 102ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 103ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// getDisassembler - Returns the specified disassemble, or NULL on failure 104ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 105ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg arch - The desired architecture 106ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg syntax - The desired disassembly syntax 107ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan static EDDisassembler *getDisassembler(llvm::Triple::ArchType arch, 108847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner AssemblySyntax syntax); 109ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 110ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// getDisassembler - Returns the disassembler for a given combination of 111ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// CPU type, CPU subtype, and assembly syntax, or NULL on failure 112ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 113ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg str - The string representation of the architecture triple, e.g., 114ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// "x86_64-apple-darwin" 115ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg syntax - The disassembly syntax for the required disassembler 116ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan static EDDisassembler *getDisassembler(llvm::StringRef str, 117847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner AssemblySyntax syntax); 118ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 119ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// initialize - Initializes the disassembler registry and the LLVM backend 120ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan static void initialize(); 121ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 122ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan //////////////////////// 123ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan // Per-object members // 124ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan //////////////////////// 125ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 1268f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan /// True only if the object has been successfully initialized 127ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan bool Valid; 1288f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan /// True if the disassembler can provide semantic information 1298f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan bool HasSemantics; 130ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 1318f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan /// The stream to write errors to 1328f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan llvm::raw_ostream &ErrorStream; 133ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 134ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The architecture/syntax pair for the current architecture 135ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan CPUKey Key; 136ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The LLVM target corresponding to the disassembler 137ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan const llvm::Target *Tgt; 138ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The assembly information for the target architecture 139ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::OwningPtr<const llvm::MCAsmInfo> AsmInfo; 140b950585cc5a0d665e9accfe5ce490cd269756f2eJames Molloy /// The subtarget information for the target architecture 141b950585cc5a0d665e9accfe5ce490cd269756f2eJames Molloy llvm::OwningPtr<const llvm::MCSubtargetInfo> STI; 1420e6a052331f674dd70e28af41f654a7874405eabEvan Cheng // The register information for the target architecture. 1430e6a052331f674dd70e28af41f654a7874405eabEvan Cheng llvm::OwningPtr<const llvm::MCRegisterInfo> MRI; 144ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The disassembler for the target architecture 145ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::OwningPtr<const llvm::MCDisassembler> Disassembler; 146ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The output string for the instruction printer; must be guarded with 147ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// PrinterMutex 148ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::OwningPtr<std::string> InstString; 149ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The output stream for the disassembler; must be guarded with 150ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// PrinterMutex 151ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::OwningPtr<llvm::raw_string_ostream> InstStream; 152ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The instruction printer for the target architecture; must be guarded with 153ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// PrinterMutex when printing 154ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::OwningPtr<llvm::MCInstPrinter> InstPrinter; 155ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The mutex that guards the instruction printer's printing functions, which 156ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// use a shared stream 157ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::sys::Mutex PrinterMutex; 158ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The array of instruction information provided by the TableGen backend for 159ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// the target architecture 1609899f70a7406d632c82849978bf6981f1ee4ccb5Sean Callanan const llvm::EDInstInfo *InstInfos; 161ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The target-specific lexer for use in tokenizing strings, in 162ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// target-independent and target-specific portions 163ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::OwningPtr<llvm::AsmLexer> GenericAsmLexer; 16494b9550a32d189704a8eae55505edf62662c0534Evan Cheng llvm::OwningPtr<llvm::MCTargetAsmLexer> SpecificAsmLexer; 165ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The guard for the above 166ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::sys::Mutex ParserMutex; 167ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// The LLVM number used for the target disassembly syntax variant 168ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan int LLVMSyntaxVariant; 169ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 170ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan typedef std::vector<std::string> regvec_t; 171ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan typedef std::map<std::string, unsigned> regrmap_t; 172ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 173ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// A vector of registers for quick mapping from LLVM register IDs to names 174ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan regvec_t RegVec; 175ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// A map of registers for quick mapping from register names to LLVM IDs 176ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan regrmap_t RegRMap; 177ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 178ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// A set of register IDs for aliases of the stack pointer for the current 179ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// architecture 180ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan std::set<unsigned> stackPointers; 181ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// A set of register IDs for aliases of the program counter for the current 182ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// architecture 183ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan std::set<unsigned> programCounters; 184ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 185ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// Constructor - initializes a disassembler with all the necessary objects, 186ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// which come pre-allocated from the registry accessor function 187ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 188ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg key - the architecture and disassembly syntax for the 189ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// disassembler 190ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan EDDisassembler(CPUKey& key); 191ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 192ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// valid - reports whether there was a failure in the constructor. 193ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan bool valid() { 194ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan return Valid; 195ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan } 196ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 1978f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan /// hasSemantics - reports whether the disassembler can provide operands and 1988f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan /// tokens. 1998f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan bool hasSemantics() { 2008f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan return HasSemantics; 2018f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan } 2028f993b8c244bb5ec19d004a070eb9f32c5a29b1aSean Callanan 203ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan ~EDDisassembler(); 204ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 205ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// createInst - creates and returns an instruction given a callback and 206ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// memory address, or NULL on failure 207ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 208ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg byteReader - A callback function that provides machine code bytes 209ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg address - The address of the first byte of the instruction, 210ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// suitable for passing to byteReader 211ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg arg - An opaque argument for byteReader 212ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan EDInst *createInst(EDByteReaderCallback byteReader, 213ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan uint64_t address, 214ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan void *arg); 215ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 216ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// initMaps - initializes regVec and regRMap using the provided register 217ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// info 218ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 219ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg registerInfo - the register information to use as a source 2201b0fc9b4182d6bd0703cdfb3b0b91d1e093c946cEvan Cheng void initMaps(const llvm::MCRegisterInfo ®isterInfo); 221ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// nameWithRegisterID - Returns the name (owned by the EDDisassembler) of a 222ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// register for a given register ID, or NULL on failure 223ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 224ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg registerID - the ID of the register to be queried 225ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan const char *nameWithRegisterID(unsigned registerID) const; 226ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// registerIDWithName - Returns the ID of a register for a given register 227ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// name, or (unsigned)-1 on failure 228ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 229ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg name - The name of the register 230ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan unsigned registerIDWithName(const char *name) const; 231ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 232ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// registerIsStackPointer - reports whether a register ID is an alias for the 233ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// stack pointer register 234ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 235ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg registerID - The LLVM register ID 236ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan bool registerIsStackPointer(unsigned registerID); 237ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// registerIsStackPointer - reports whether a register ID is an alias for the 238ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// stack pointer register 239ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 240ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg registerID - The LLVM register ID 241ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan bool registerIsProgramCounter(unsigned registerID); 242ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 243ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// printInst - prints an MCInst to a string, returning 0 on success, or -1 244ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// otherwise 245ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 246ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg str - A reference to a string which is filled in with the string 247ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// representation of the instruction 248ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg inst - A reference to the MCInst to be printed 249ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan int printInst(std::string& str, 250ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::MCInst& inst); 251ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 252ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// parseInst - extracts operands and tokens from a string for use in 253ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// tokenizing the string. Returns 0 on success, or -1 otherwise. 254ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// 255ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg operands - A reference to a vector that will be filled in with the 256ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// parsed operands 257ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg tokens - A reference to a vector that will be filled in with the 258ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// tokens 259ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// @arg str - The string representation of the instruction 260ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan int parseInst(llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*> &operands, 261ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan llvm::SmallVectorImpl<llvm::AsmToken> &tokens, 262ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan const std::string &str); 263ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 264ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan /// llvmSyntaxVariant - returns the LLVM syntax variant for this disassembler 265ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan int llvmSyntaxVariant() const; 266ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan}; 267ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan 268847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner} // end namespace llvm 269847da55716e9c1d39c08ed052bc86d28796cb91fChris Lattner 270ee5dfd42f1361da9e44b768a12495be235d6043fSean Callanan#endif 271