1//===-- llvm/MC/MCInstBuilder.h - Simplify creation of MCInsts --*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file contains the MCInstBuilder class for convenient creation of 10// MCInsts. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_MC_MCINSTBUILDER_H 15#define LLVM_MC_MCINSTBUILDER_H 16 17#include "llvm/MC/MCInst.h" 18 19namespace llvm { 20 21class MCInstBuilder { 22 MCInst Inst; 23 24public: 25 /// Create a new MCInstBuilder for an MCInst with a specific opcode. 26 MCInstBuilder(unsigned Opcode) { 27 Inst.setOpcode(Opcode); 28 } 29 30 /// Add a new register operand. 31 MCInstBuilder &addReg(unsigned Reg) { 32 Inst.addOperand(MCOperand::createReg(Reg)); 33 return *this; 34 } 35 36 /// Add a new integer immediate operand. 37 MCInstBuilder &addImm(int64_t Val) { 38 Inst.addOperand(MCOperand::createImm(Val)); 39 return *this; 40 } 41 42 /// Add a new floating point immediate operand. 43 MCInstBuilder &addFPImm(double Val) { 44 Inst.addOperand(MCOperand::createFPImm(Val)); 45 return *this; 46 } 47 48 /// Add a new MCExpr operand. 49 MCInstBuilder &addExpr(const MCExpr *Val) { 50 Inst.addOperand(MCOperand::createExpr(Val)); 51 return *this; 52 } 53 54 /// Add a new MCInst operand. 55 MCInstBuilder &addInst(const MCInst *Val) { 56 Inst.addOperand(MCOperand::createInst(Val)); 57 return *this; 58 } 59 60 /// Add an operand. 61 MCInstBuilder &addOperand(const MCOperand &Op) { 62 Inst.addOperand(Op); 63 return *this; 64 } 65 66 operator MCInst&() { 67 return Inst; 68 } 69}; 70 71} // end namespace llvm 72 73#endif 74