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