Chris Lattner | 1911fd4 | 2006-09-04 04:14:57 +0000 | [diff] [blame] | 1 | //===-- PPC.h - Top-level interface for PowerPC Target ----------*- C++ -*-===// |
Misha Brukman | b5f662f | 2005-04-21 23:30:14 +0000 | [diff] [blame] | 2 | // |
Misha Brukman | 5dfe3a9 | 2004-06-21 16:55:25 +0000 | [diff] [blame] | 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
Chris Lattner | 4ee451d | 2007-12-29 20:36:04 +0000 | [diff] [blame] | 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
Misha Brukman | b5f662f | 2005-04-21 23:30:14 +0000 | [diff] [blame] | 7 | // |
Misha Brukman | 5dfe3a9 | 2004-06-21 16:55:25 +0000 | [diff] [blame] | 8 | //===----------------------------------------------------------------------===// |
| 9 | // |
| 10 | // This file contains the entry points for global functions defined in the LLVM |
| 11 | // PowerPC back-end. |
| 12 | // |
| 13 | //===----------------------------------------------------------------------===// |
| 14 | |
Chris Lattner | 1911fd4 | 2006-09-04 04:14:57 +0000 | [diff] [blame] | 15 | #ifndef LLVM_TARGET_POWERPC_H |
| 16 | #define LLVM_TARGET_POWERPC_H |
Misha Brukman | 5dfe3a9 | 2004-06-21 16:55:25 +0000 | [diff] [blame] | 17 | |
Evan Cheng | 966aeb5 | 2011-07-25 19:53:23 +0000 | [diff] [blame] | 18 | #include "MCTargetDesc/PPCBaseInfo.h" |
Evan Cheng | c60f9b7 | 2011-07-14 20:59:42 +0000 | [diff] [blame] | 19 | #include "MCTargetDesc/PPCMCTargetDesc.h" |
Chris Lattner | b46443a | 2010-11-15 08:49:58 +0000 | [diff] [blame] | 20 | #include <string> |
| 21 | |
Chris Lattner | af53a87 | 2006-11-04 05:27:39 +0000 | [diff] [blame] | 22 | // GCC #defines PPC on Linux but we use it as our namespace name |
| 23 | #undef PPC |
| 24 | |
Misha Brukman | 5dfe3a9 | 2004-06-21 16:55:25 +0000 | [diff] [blame] | 25 | namespace llvm { |
Chris Lattner | af53a87 | 2006-11-04 05:27:39 +0000 | [diff] [blame] | 26 | class PPCTargetMachine; |
Chris Lattner | af53a87 | 2006-11-04 05:27:39 +0000 | [diff] [blame] | 27 | class FunctionPass; |
Chris Lattner | 8d63ba8 | 2010-11-14 21:09:28 +0000 | [diff] [blame] | 28 | class JITCodeEmitter; |
Chris Lattner | a7217c8 | 2010-11-14 21:12:33 +0000 | [diff] [blame] | 29 | class MachineInstr; |
Chris Lattner | a7217c8 | 2010-11-14 21:12:33 +0000 | [diff] [blame] | 30 | class AsmPrinter; |
Chris Lattner | 5ffe38e | 2010-11-15 04:16:32 +0000 | [diff] [blame] | 31 | class MCInst; |
Craig Topper | 79aa341 | 2012-03-17 18:46:09 +0000 | [diff] [blame] | 32 | |
Hal Finkel | 99f823f | 2012-06-08 15:38:21 +0000 | [diff] [blame] | 33 | FunctionPass *createPPCCTRLoops(); |
Chris Lattner | 6d2ff12 | 2010-11-15 03:13:19 +0000 | [diff] [blame] | 34 | FunctionPass *createPPCBranchSelectionPass(); |
| 35 | FunctionPass *createPPCISelDag(PPCTargetMachine &TM); |
| 36 | FunctionPass *createPPCJITCodeEmitterPass(PPCTargetMachine &TM, |
| 37 | JITCodeEmitter &MCE); |
Chris Lattner | 6d2ff12 | 2010-11-15 03:13:19 +0000 | [diff] [blame] | 38 | void LowerPPCMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI, |
Roman Divacky | a100074 | 2011-06-09 20:25:38 +0000 | [diff] [blame] | 39 | AsmPrinter &AP, bool isDarwin); |
Chris Lattner | 6d2ff12 | 2010-11-15 03:13:19 +0000 | [diff] [blame] | 40 | |
Chris Lattner | b908258 | 2010-11-14 23:42:06 +0000 | [diff] [blame] | 41 | namespace PPCII { |
| 42 | |
| 43 | /// Target Operand Flag enum. |
| 44 | enum TOF { |
| 45 | //===------------------------------------------------------------------===// |
| 46 | // PPC Specific MachineOperand flags. |
| 47 | MO_NO_FLAG, |
| 48 | |
| 49 | /// MO_DARWIN_STUB - On a symbol operand "FOO", this indicates that the |
| 50 | /// reference is actually to the "FOO$stub" symbol. This is used for calls |
| 51 | /// and jumps to external functions on Tiger and earlier. |
Chris Lattner | 6d2ff12 | 2010-11-15 03:13:19 +0000 | [diff] [blame] | 52 | MO_DARWIN_STUB = 1, |
Chris Lattner | b908258 | 2010-11-14 23:42:06 +0000 | [diff] [blame] | 53 | |
Chris Lattner | 6d2ff12 | 2010-11-15 03:13:19 +0000 | [diff] [blame] | 54 | /// MO_PIC_FLAG - If this bit is set, the symbol reference is relative to |
| 55 | /// the function's picbase, e.g. lo16(symbol-picbase). |
Roman Divacky | fd42ed6 | 2012-06-04 17:36:38 +0000 | [diff] [blame] | 56 | MO_PIC_FLAG = 4, |
Chris Lattner | 6d2ff12 | 2010-11-15 03:13:19 +0000 | [diff] [blame] | 57 | |
| 58 | /// MO_NLP_FLAG - If this bit is set, the symbol reference is actually to |
| 59 | /// the non_lazy_ptr for the global, e.g. lo16(symbol$non_lazy_ptr-picbase). |
Roman Divacky | fd42ed6 | 2012-06-04 17:36:38 +0000 | [diff] [blame] | 60 | MO_NLP_FLAG = 8, |
Chris Lattner | 1e61e69 | 2010-11-15 02:46:57 +0000 | [diff] [blame] | 61 | |
Chris Lattner | 6d2ff12 | 2010-11-15 03:13:19 +0000 | [diff] [blame] | 62 | /// MO_NLP_HIDDEN_FLAG - If this bit is set, the symbol reference is to a |
| 63 | /// symbol with hidden visibility. This causes a different kind of |
| 64 | /// non-lazy-pointer to be generated. |
Roman Divacky | fd42ed6 | 2012-06-04 17:36:38 +0000 | [diff] [blame] | 65 | MO_NLP_HIDDEN_FLAG = 16, |
| 66 | |
| 67 | /// The next are not flags but distinct values. |
| 68 | MO_ACCESS_MASK = 224, |
| 69 | |
| 70 | /// MO_LO16, MO_HA16 - lo16(symbol) and ha16(symbol) |
| 71 | MO_LO16 = 32, MO_HA16 = 64, |
| 72 | |
| 73 | MO_TPREL16_HA = 96, |
| 74 | MO_TPREL16_LO = 128 |
Chris Lattner | b908258 | 2010-11-14 23:42:06 +0000 | [diff] [blame] | 75 | }; |
| 76 | } // end namespace PPCII |
| 77 | |
Misha Brukman | 5dfe3a9 | 2004-06-21 16:55:25 +0000 | [diff] [blame] | 78 | } // end namespace llvm; |
| 79 | |
Misha Brukman | 5dfe3a9 | 2004-06-21 16:55:25 +0000 | [diff] [blame] | 80 | #endif |