//
// The LLVM Compiler Infrastructure
//
-// This file was developed by Nate Begeman 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.
//
//===----------------------------------------------------------------------===//
//
#include <string>
+// GCC #defines PPC on Linux but we use it as our namespace name
+#undef PPC
+
namespace llvm {
+
+namespace PPC {
+ // -m directive values.
+ enum {
+ DIR_32,
+ DIR_601,
+ DIR_602,
+ DIR_603,
+ DIR_7400,
+ DIR_750,
+ DIR_970,
+ DIR_64
+ };
+}
+
class Module;
class GlobalValue;
class TargetMachine;
class PPCSubtarget : public TargetSubtarget {
+public:
+ enum AsmWriterFlavorTy {
+ OldMnemonic, NewMnemonic, Unset
+ };
protected:
const TargetMachine &TM;
/// Selected instruction itineraries (one entry per itinerary class.)
InstrItineraryData InstrItins;
+
+ /// Which cpu directive was used.
+ unsigned DarwinDirective;
+
+ /// AsmFlavor - Which PPC asm dialect to use.
+ AsmWriterFlavorTy AsmFlavor;
/// Used by the ISel to turn in optimizations for POWER4-derived architectures
bool IsGigaProcessor;
/// function for this subtarget.
unsigned getStackAlignment() const { return StackAlignment; }
+ /// getDarwinDirective - Returns the -m directive specified for the cpu.
+ ///
+ unsigned getDarwinDirective() const { return DarwinDirective; }
+
/// getInstrItins - Return the instruction itineraies based on subtarget
/// selection.
const InstrItineraryData &getInstrItineraryData() const { return InstrItins; }
/// getTargetDataString - Return the pointer size and type alignment
/// properties of this subtarget.
const char *getTargetDataString() const {
- return isPPC64() ? "E-p:64:64-d:32-l:32" : "E-p:32:32-d:32-l:32";
+ return isPPC64() ? "E-p:64:64-f64:32:64-i64:32:64-f128:64:128"
+ : "E-p:32:32-f64:32:64-i64:32:64-f128:64:128";
}
/// isPPC64 - Return true if we are generating code for 64-bit pointer mode.
bool hasSTFIWX() const { return HasSTFIWX; }
bool hasAltivec() const { return HasAltivec; }
bool isGigaProcessor() const { return IsGigaProcessor; }
-
+
bool isDarwin() const { return IsDarwin; }
+
+ bool isMachoABI() const { return IsDarwin || IsPPC64; }
+ bool isELF32_ABI() const { return !IsDarwin && !IsPPC64; }
+
+ unsigned getAsmFlavor() const {
+ return AsmFlavor != Unset ? unsigned(AsmFlavor) : 0;
+ }
};
} // End llvm namespace