X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FPowerPC%2FPPC.h;h=9103e12325056540007878438d6d38ba830dd3f6;hb=aa0cfea9a439cb8de1ff288bd6db9b4a86c4da7b;hp=2f2b990f1e53a5a1287b816ba47463bf12d5a9dd;hpb=5dfe3a9c3bd9091f9adecc909665d52bdd4edd8c;p=oota-llvm.git diff --git a/lib/Target/PowerPC/PPC.h b/lib/Target/PowerPC/PPC.h index 2f2b990f1e5..9103e123250 100644 --- a/lib/Target/PowerPC/PPC.h +++ b/lib/Target/PowerPC/PPC.h @@ -1,10 +1,10 @@ -//===-- PowerPC.h - Top-level interface for PowerPC representation -*- C++ -*-// -// +//===-- PPC.h - Top-level interface for PowerPC Target ----------*- C++ -*-===// +// // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// //===----------------------------------------------------------------------===// // // This file contains the entry points for global functions defined in the LLVM @@ -12,29 +12,69 @@ // //===----------------------------------------------------------------------===// -#ifndef TARGET_POWERPC_H -#define TARGET_POWERPC_H +#ifndef LLVM_TARGET_POWERPC_H +#define LLVM_TARGET_POWERPC_H -#include +#include "MCTargetDesc/PPCBaseInfo.h" +#include "MCTargetDesc/PPCMCTargetDesc.h" +#include + +// GCC #defines PPC on Linux but we use it as our namespace name +#undef PPC namespace llvm { + class PPCTargetMachine; + class FunctionPass; + class JITCodeEmitter; + class MachineInstr; + class AsmPrinter; + class MCInst; -class FunctionPass; -class TargetMachine; + FunctionPass *createPPCCTRLoops(); + FunctionPass *createPPCBranchSelectionPass(); + FunctionPass *createPPCISelDag(PPCTargetMachine &TM); + FunctionPass *createPPCJITCodeEmitterPass(PPCTargetMachine &TM, + JITCodeEmitter &MCE); + void LowerPPCMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI, + AsmPrinter &AP, bool isDarwin); + + namespace PPCII { + + /// Target Operand Flag enum. + enum TOF { + //===------------------------------------------------------------------===// + // PPC Specific MachineOperand flags. + MO_NO_FLAG, + + /// MO_DARWIN_STUB - On a symbol operand "FOO", this indicates that the + /// reference is actually to the "FOO$stub" symbol. This is used for calls + /// and jumps to external functions on Tiger and earlier. + MO_DARWIN_STUB = 1, + + /// MO_PIC_FLAG - If this bit is set, the symbol reference is relative to + /// the function's picbase, e.g. lo16(symbol-picbase). + MO_PIC_FLAG = 4, -// Here is where you would define factory methods for powerpc-specific -// passes. For example: -FunctionPass *createPPCSimpleInstructionSelector (TargetMachine &TM); -FunctionPass *createPPCCodePrinterPass(std::ostream &OS, TargetMachine &TM); -} // end namespace llvm; + /// MO_NLP_FLAG - If this bit is set, the symbol reference is actually to + /// the non_lazy_ptr for the global, e.g. lo16(symbol$non_lazy_ptr-picbase). + MO_NLP_FLAG = 8, + + /// MO_NLP_HIDDEN_FLAG - If this bit is set, the symbol reference is to a + /// symbol with hidden visibility. This causes a different kind of + /// non-lazy-pointer to be generated. + MO_NLP_HIDDEN_FLAG = 16, -// Defines symbolic names for PowerPC registers. This defines a mapping from -// register name to register number. -// -#include "PowerPCGenRegisterNames.inc" + /// The next are not flags but distinct values. + MO_ACCESS_MASK = 224, -// Defines symbolic names for the PowerPC instructions. -// -#include "PowerPCGenInstrNames.inc" + /// MO_LO16, MO_HA16 - lo16(symbol) and ha16(symbol) + MO_LO16 = 32, MO_HA16 = 64, + + MO_TPREL16_HA = 96, + MO_TPREL16_LO = 128 + }; + } // end namespace PPCII + +} // end namespace llvm; #endif