1391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//===-- llvm/MC/MCInstBuilder.h - Simplify creation of MCInsts --*- C++ -*-===//
2391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//
3391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//                     The LLVM Compiler Infrastructure
4391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//
5391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// This file is distributed under the University of Illinois Open Source
6391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// License. See LICENSE.TXT for details.
7391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//
8391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//===----------------------------------------------------------------------===//
9391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//
10391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// This file contains the MCInstBuilder class for convenient creation of
11391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer// MCInsts.
12391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//
13391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer//===----------------------------------------------------------------------===//
14391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
15391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer#ifndef LLVM_MC_MCINSTBUILDER_H
16391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer#define LLVM_MC_MCINSTBUILDER_H
17391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
18391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer#include "llvm/MC/MCInst.h"
19391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
20391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramernamespace llvm {
21391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
22391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramerclass MCInstBuilder {
23391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  MCInst Inst;
24391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
25391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramerpublic:
26391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  /// \brief Create a new MCInstBuilder for an MCInst with a specific opcode.
27391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  MCInstBuilder(unsigned Opcode) {
28391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    Inst.setOpcode(Opcode);
29391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  }
30391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
31391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  /// \brief Add a new register operand.
32391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  MCInstBuilder &addReg(unsigned Reg) {
33391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    Inst.addOperand(MCOperand::CreateReg(Reg));
34391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    return *this;
35391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  }
36391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
37391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  /// \brief Add a new integer immediate operand.
38391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  MCInstBuilder &addImm(int64_t Val) {
39391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    Inst.addOperand(MCOperand::CreateImm(Val));
40391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    return *this;
41391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  }
42391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
43391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  /// \brief Add a new floating point immediate operand.
44391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  MCInstBuilder &addFPImm(double Val) {
45391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    Inst.addOperand(MCOperand::CreateFPImm(Val));
46391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    return *this;
47391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  }
48391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
49391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  /// \brief Add a new MCExpr operand.
50391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  MCInstBuilder &addExpr(const MCExpr *Val) {
51391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    Inst.addOperand(MCOperand::CreateExpr(Val));
52391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    return *this;
53391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  }
54391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
55391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  /// \brief Add a new MCInst operand.
56391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  MCInstBuilder &addInst(const MCInst *Val) {
57391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    Inst.addOperand(MCOperand::CreateInst(Val));
58391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer    return *this;
59391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  }
60391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
61ed9e442cf098663ce213cb16778b44be466b441fBenjamin Kramer  operator MCInst&() {
62ed9e442cf098663ce213cb16778b44be466b441fBenjamin Kramer    return Inst;
63391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer  }
64391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer};
65391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
66391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer} // end namespace llvm
67391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer
68391271f3bbcec02e0da26d7c246bfabff5cb4ddfBenjamin Kramer#endif
69