c5acb26eecac3e2a63d2e8870e868eca17626e89
[oota-llvm.git] / include / llvm / MC / MCInstBuilder.h
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