Line data Source code
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 : /// Create a new MCInstBuilder for an MCInst with a specific opcode.
27 25394 : MCInstBuilder(unsigned Opcode) {
28 : Inst.setOpcode(Opcode);
29 : }
30 :
31 : /// Add a new register operand.
32 : MCInstBuilder &addReg(unsigned Reg) {
33 22794 : Inst.addOperand(MCOperand::createReg(Reg));
34 : return *this;
35 : }
36 :
37 : /// Add a new integer immediate operand.
38 : MCInstBuilder &addImm(int64_t Val) {
39 4865 : Inst.addOperand(MCOperand::createImm(Val));
40 : return *this;
41 : }
42 :
43 : /// Add a new floating point immediate operand.
44 : MCInstBuilder &addFPImm(double Val) {
45 1 : Inst.addOperand(MCOperand::createFPImm(Val));
46 : return *this;
47 : }
48 :
49 : /// Add a new MCExpr operand.
50 : MCInstBuilder &addExpr(const MCExpr *Val) {
51 9709 : Inst.addOperand(MCOperand::createExpr(Val));
52 : return *this;
53 : }
54 :
55 : /// Add a new MCInst operand.
56 : MCInstBuilder &addInst(const MCInst *Val) {
57 : Inst.addOperand(MCOperand::createInst(Val));
58 : return *this;
59 : }
60 :
61 : /// 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
|