aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/X86/X86Subtarget.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-01-26 09:53:06 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-01-26 09:53:06 +0000
commit97c7fc351e4dd73041bc7e47c8a144216a50a648 (patch)
tree058b2afbf458a63613f4a14107368640b541e0d0 /lib/Target/X86/X86Subtarget.cpp
parentb0636041c88d9e7d63bb8840df7eb18b96175f58 (diff)
downloadexternal_llvm-97c7fc351e4dd73041bc7e47c8a144216a50a648.zip
external_llvm-97c7fc351e4dd73041bc7e47c8a144216a50a648.tar.gz
external_llvm-97c7fc351e4dd73041bc7e47c8a144216a50a648.tar.bz2
Added preliminary x86 subtarget support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25645 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86Subtarget.cpp')
-rw-r--r--lib/Target/X86/X86Subtarget.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp
index 80f12b0..e523f14 100644
--- a/lib/Target/X86/X86Subtarget.cpp
+++ b/lib/Target/X86/X86Subtarget.cpp
@@ -13,11 +13,64 @@
#include "X86Subtarget.h"
#include "llvm/Module.h"
+#include "X86GenSubtarget.inc"
using namespace llvm;
+#if defined(__APPLE__)
+#include <mach/mach.h>
+#include <mach/mach_host.h>
+#include <mach/host_info.h>
+#include <mach/machine.h>
+
+/// GetCurrentX86CPU - Returns the current CPUs features.
+static const char *GetCurrentX86CPU() {
+ host_basic_info_data_t hostInfo;
+ mach_msg_type_number_t infoCount;
+
+ infoCount = HOST_BASIC_INFO_COUNT;
+ host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostInfo,
+ &infoCount);
+
+ if (hostInfo.cpu_type != CPU_TYPE_I386) return "generic";
+
+ switch(hostInfo.cpu_subtype) {
+ case CPU_SUBTYPE_386: return "i386";
+ case CPU_SUBTYPE_486:
+ case CPU_SUBTYPE_486SX: return "i486";
+ case CPU_SUBTYPE_PENT: return "pentium";
+ case CPU_SUBTYPE_PENTPRO: return "pentiumpro";
+ case CPU_SUBTYPE_PENTII_M3: return "pentium2";
+ case CPU_SUBTYPE_PENTII_M5: return "pentium2";
+ case CPU_SUBTYPE_CELERON:
+ case CPU_SUBTYPE_CELERON_MOBILE: return "celeron";
+ case CPU_SUBTYPE_PENTIUM_3: return "pentium3";
+ case CPU_SUBTYPE_PENTIUM_3_M: return "pentium3m";
+ case CPU_SUBTYPE_PENTIUM_3_XEON: return "pentium3"; // FIXME: not sure.
+ case CPU_SUBTYPE_PENTIUM_M: return "pentium-m";
+ case CPU_SUBTYPE_PENTIUM_4: return "pentium4";
+ case CPU_SUBTYPE_PENTIUM_4_M: return "pentium4m";
+ // FIXME: prescott, yonah? Check CPU_THREADTYPE_INTEL_HTT?
+ case CPU_SUBTYPE_XEON:
+ case CPU_SUBTYPE_XEON_MP: return "nocona";
+ default: ;
+ }
+
+ return "generic";
+}
+#endif
+
X86Subtarget::X86Subtarget(const Module &M, const std::string &FS)
: stackAlignment(8), indirectExternAndWeakGlobals(false) {
+ // Determine default and user specified characteristics
+ std::string CPU = "generic";
+#if defined(__APPLE__)
+ CPU = GetCurrentX86CPU();
+#endif
+
+ // Parse features string.
+ ParseSubtargetFeatures(FS, CPU);
+
// Default to ELF unless otherwise specified.
TargetType = isELF;