From 35d0e8793737201d9e24f8944f0ead5636a695f4 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 23 Jun 2009 18:58:00 +0000 Subject: [PATCH] add a simple MCImm class. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73984 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCImm.h | 55 ++++++++++++++++++++++++++++++++++++++++ include/llvm/MC/MCInst.h | 6 +++-- 2 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 include/llvm/MC/MCImm.h diff --git a/include/llvm/MC/MCImm.h b/include/llvm/MC/MCImm.h new file mode 100644 index 00000000000..5b1efd88206 --- /dev/null +++ b/include/llvm/MC/MCImm.h @@ -0,0 +1,55 @@ +//===-- llvm/MC/MCImm.h - MCImm class ---------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file contains the declaration of the MCInst and MCOperand classes, which +// is the basic representation used to represent low-level machine code +// instructions. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_MC_MCIMM_H +#define LLVM_MC_MCIMM_H + +namespace llvm { +class MCSymbol; + +/// MCImm - This represents an "assembler immediate". In its most general form, +/// this can hold "SymbolA - SymbolB + imm64". Not all targets supports +/// relocations of this general form, but we need to represent this anyway. +class MCImm { + MCSymbol *SymA, *SymB; + int64_t Cst; +public: + + int64_t getCst() const { return Cst; } + MCSymbol *getSymA() const { return SymA; } + MCSymbol *getSymB() const { return SymB; } + + + static MCImm get(MCSymbol *SymA, MCSymbol *SymB = 0, int64_t Val = 0) { + MCImm R; + R.Cst = Val; + R.SymA = SymA; + R.SymB = SymB; + return R; + } + + static MCImm get(int64_t Val) { + MCImm R; + R.Cst = Val; + R.SymA = 0; + R.SymB = 0; + return R; + } + +}; + +} // end namespace llvm + +#endif diff --git a/include/llvm/MC/MCInst.h b/include/llvm/MC/MCInst.h index 11b5c797e27..457c2ae2ee6 100644 --- a/include/llvm/MC/MCInst.h +++ b/include/llvm/MC/MCInst.h @@ -13,10 +13,10 @@ // //===----------------------------------------------------------------------===// - #ifndef LLVM_MC_MCINST_H #define LLVM_MC_MCINST_H +#include "llvm/MC/MCImm.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/DebugLoc.h" @@ -30,13 +30,15 @@ class MCOperand { kInvalid, ///< Uninitialized. kRegister, ///< Register operand. kImmediate, ///< Immediate operand. - kMBBLabel ///< Basic block label. + kMBBLabel, ///< Basic block label. + kMCImm }; unsigned char Kind; union { unsigned RegVal; int64_t ImmVal; + MCImm MCImmVal; struct { unsigned FunctionNo; unsigned BlockNo; -- 2.34.1