1391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//===-- llvm/MC/MCInstBuilder.h - Simplify creation of MCInsts --*- C++ -*-===// 2391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// 3391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// The LLVM Compiler Infrastructure 4391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// 5391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// This file is distributed under the University of Illinois Open Source 6391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// License. See LICENSE.TXT for details. 7391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// 8391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//===----------------------------------------------------------------------===// 9391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// 10391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// This file contains the MCInstBuilder class for convenient creation of 11391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// MCInsts. 12391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// 13391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//===----------------------------------------------------------------------===// 14391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 15391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer#ifndef LLVM_MC_MCINSTBUILDER_H 16391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer#define LLVM_MC_MCINSTBUILDER_H 17391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 18391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer#include "llvm/MC/MCInst.h" 19391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 20391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramernamespace llvm { 21391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 22391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramerclass MCInstBuilder { 23391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer MCInst Inst; 24391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 25391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramerpublic: 26391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer /// \brief Create a new MCInstBuilder for an MCInst with a specific opcode. 27391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer MCInstBuilder(unsigned Opcode) { 28391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer Inst.setOpcode(Opcode); 29391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer } 30391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 31391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer /// \brief Add a new register operand. 32391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer MCInstBuilder &addReg(unsigned Reg) { 33391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer Inst.addOperand(MCOperand::CreateReg(Reg)); 34391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer return *this; 35391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer } 36391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 37391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer /// \brief Add a new integer immediate operand. 38391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer MCInstBuilder &addImm(int64_t Val) { 39391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer Inst.addOperand(MCOperand::CreateImm(Val)); 40391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer return *this; 41391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer } 42391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 43391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer /// \brief Add a new floating point immediate operand. 44391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer MCInstBuilder &addFPImm(double Val) { 45391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer Inst.addOperand(MCOperand::CreateFPImm(Val)); 46391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer return *this; 47391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer } 48391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 49391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer /// \brief Add a new MCExpr operand. 50391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer MCInstBuilder &addExpr(const MCExpr *Val) { 51391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer Inst.addOperand(MCOperand::CreateExpr(Val)); 52391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer return *this; 53391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer } 54391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 55391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer /// \brief Add a new MCInst operand. 56391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer MCInstBuilder &addInst(const MCInst *Val) { 57391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer Inst.addOperand(MCOperand::CreateInst(Val)); 58391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer return *this; 59391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer } 60391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 61ed9e442cf098663ce213cb16778b44be466b441fBenjamin Kramer operator MCInst&() { 62ed9e442cf098663ce213cb16778b44be466b441fBenjamin Kramer return Inst; 63391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer } 64391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer}; 65391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 66391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer} // end namespace llvm 67391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer 68391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer#endif 69