diff options
Diffstat (limited to 'clang-r353983/include/llvm/MC/MCInstBuilder.h')
| -rw-r--r-- | clang-r353983/include/llvm/MC/MCInstBuilder.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/clang-r353983/include/llvm/MC/MCInstBuilder.h b/clang-r353983/include/llvm/MC/MCInstBuilder.h new file mode 100644 index 00000000..0c8e01fd --- /dev/null +++ b/clang-r353983/include/llvm/MC/MCInstBuilder.h @@ -0,0 +1,73 @@ +//===-- llvm/MC/MCInstBuilder.h - Simplify creation of MCInsts --*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file contains the MCInstBuilder class for convenient creation of +// MCInsts. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_MC_MCINSTBUILDER_H +#define LLVM_MC_MCINSTBUILDER_H + +#include "llvm/MC/MCInst.h" + +namespace llvm { + +class MCInstBuilder { + MCInst Inst; + +public: + /// Create a new MCInstBuilder for an MCInst with a specific opcode. + MCInstBuilder(unsigned Opcode) { + Inst.setOpcode(Opcode); + } + + /// Add a new register operand. + MCInstBuilder &addReg(unsigned Reg) { + Inst.addOperand(MCOperand::createReg(Reg)); + return *this; + } + + /// Add a new integer immediate operand. + MCInstBuilder &addImm(int64_t Val) { + Inst.addOperand(MCOperand::createImm(Val)); + return *this; + } + + /// Add a new floating point immediate operand. + MCInstBuilder &addFPImm(double Val) { + Inst.addOperand(MCOperand::createFPImm(Val)); + return *this; + } + + /// Add a new MCExpr operand. + MCInstBuilder &addExpr(const MCExpr *Val) { + Inst.addOperand(MCOperand::createExpr(Val)); + return *this; + } + + /// Add a new MCInst operand. + MCInstBuilder &addInst(const MCInst *Val) { + Inst.addOperand(MCOperand::createInst(Val)); + return *this; + } + + /// Add an operand. + MCInstBuilder &addOperand(const MCOperand &Op) { + Inst.addOperand(Op); + return *this; + } + + operator MCInst&() { + return Inst; + } +}; + +} // end namespace llvm + +#endif |
