diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-01-26 09:53:06 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-01-26 09:53:06 +0000 |
commit | 54c13da29c64548e17b01f81f4c77d5eb4c9bf59 (patch) | |
tree | e86870deaa8da838c2ffccc33c241cee27942dec /llvm/lib/Target/X86/X86Subtarget.cpp | |
parent | 0ebb0b1c5c32dcf8a754d46695db2b6013115578 (diff) | |
download | bcm5719-llvm-54c13da29c64548e17b01f81f4c77d5eb4c9bf59.tar.gz bcm5719-llvm-54c13da29c64548e17b01f81f4c77d5eb4c9bf59.zip |
Added preliminary x86 subtarget support.
llvm-svn: 25645
Diffstat (limited to 'llvm/lib/Target/X86/X86Subtarget.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86Subtarget.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86Subtarget.cpp b/llvm/lib/Target/X86/X86Subtarget.cpp index 80f12b008cc..e523f1448e0 100644 --- a/llvm/lib/Target/X86/X86Subtarget.cpp +++ b/llvm/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; |