MCInstBuilder.h revision ed9e442cf098663ce213cb16778b44be466b441f
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
20namespace llvm {
21
22class MCInstBuilder {
23  MCInst Inst;
24
25public:
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