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   operator MCInst&() {
     62     return Inst;
     63   }
     64 };
     65 
     66 } // end namespace llvm
     67 
     68 #endif
     69