/// Set the CPU string. Replaces previous setting. Setting to "" clears CPU.
void setCPU(const std::string &String);
+ /// Get the CPU string.
+ const std::string &getCPU() const { return Features[0]; }
+
/// Setting CPU string only if no string is set.
void setCPUIfNone(const std::string &String);
#ifndef LLVM_TARGET_TARGETSUBTARGET_H
#define LLVM_TARGET_TARGETSUBTARGET_H
+#include <string>
+
namespace llvm {
//===----------------------------------------------------------------------===//
class TargetSubtarget {
TargetSubtarget(const TargetSubtarget&); // DO NOT IMPLEMENT
void operator=(const TargetSubtarget&); // DO NOT IMPLEMENT
+ std::string CPU; // CPU name.
protected: // Can only create subclasses...
TargetSubtarget();
public:
virtual ~TargetSubtarget();
+ void setCPU(const std::string &C) { CPU = C; }
+ const std::string &getCPU() const { return CPU; }
};
} // End llvm namespace
bool DarwinAsmPrinter::doInitialization(Module &M) {
- if (Subtarget.isGigaProcessor())
+ const std::string &CPU = Subtarget.getCPU();
+
+ if (CPU != "generic")
+ O << "\t.machine ppc" << CPU << "\n";
+ else if (Subtarget.isGigaProcessor())
O << "\t.machine ppc970\n";
+ else if (Subtarget.isPPC64())
+ O << "\t.machine ppc64\n";
+ else if (Subtarget.hasAltivec())
+ O << "\t.machine ppc7400\n";
+ else
+ O << "\t.machine ppc\n";
+
AsmPrinter::doInitialization(M);
// Darwin wants symbols to be quoted if they have complex names.
" const std::string &CPU) {\n"
" SubtargetFeatures Features(FS);\n"
" Features.setCPUIfNone(CPU);\n"
+ " setCPU(Features.getCPU());\n"
" uint32_t Bits = Features.getBits(SubTypeKV, SubTypeKVSize,\n"
" FeatureKV, FeatureKVSize);\n";