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 19 namespace llvm { 20 21 class MCInstBuilder { 22 MCInst Inst; 23 24 public: 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 single floating point immediate operand. 43 MCInstBuilder &addSFPImm(uint32_t Val) { 44 Inst.addOperand(MCOperand::createSFPImm(Val)); 45 return *this; 46 } 47 48 /// Add a new floating point immediate operand. 49 MCInstBuilder &addDFPImm(uint64_t Val) { 50 Inst.addOperand(MCOperand::createDFPImm(Val)); 51 return *this; 52 } 53 54 /// Add a new MCExpr operand. 55 MCInstBuilder &addExpr(const MCExpr *Val) { 56 Inst.addOperand(MCOperand::createExpr(Val)); 57 return *this; 58 } 59 60 /// Add a new MCInst operand. 61 MCInstBuilder &addInst(const MCInst *Val) { 62 Inst.addOperand(MCOperand::createInst(Val)); 63 return *this; 64 } 65 66 /// Add an operand. 67 MCInstBuilder &addOperand(const MCOperand &Op) { 68 Inst.addOperand(Op); 69 return *this; 70 } 71 72 operator MCInst&() { 73 return Inst; 74 } 75 }; 76 77 } // end namespace llvm 78 79 #endif 80