From: Chris Lattner Date: Mon, 21 Nov 2005 22:31:58 +0000 (+0000) Subject: Make the X86 subtarget compute the basic target type: ELF, Cygwin, Darwin, X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e5600e5509be43097e5f3b7e0f5d33305dc77630;p=oota-llvm.git Make the X86 subtarget compute the basic target type: ELF, Cygwin, Darwin, or native Win32 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24476 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp index 7a4a178a5bd..b05e674ff0a 100644 --- a/lib/Target/X86/X86Subtarget.cpp +++ b/lib/Target/X86/X86Subtarget.cpp @@ -21,37 +21,42 @@ X86Subtarget::X86Subtarget(const Module &M, const std::string &FS) asmLeadingUnderscore(false), asmAlignmentIsInBytes(false), asmPrintDotLocalConstants(false), asmPrintDotLCommConstants(false), asmPrintConstantAlignment(false) { - // Declare a boolean for each major platform. - bool forCygwin = false; - bool forDarwin = false; - bool forWindows = false; - + + // Default to ELF unless otherwise specified. + TargetType = isELF; + // Set the boolean corresponding to the current target triple, or the default // if one cannot be determined, to true. const std::string& TT = M.getTargetTriple(); if (TT.length() > 5) { - forCygwin = TT.find("cygwin") != std::string::npos || - TT.find("mingw") != std::string::npos; - forDarwin = TT.find("darwin") != std::string::npos; - forWindows = TT.find("win32") != std::string::npos; + if (TT.find("cygwin") != std::string::npos || + TT.find("mingw") != std::string::npos) + TargetType = isCygwin; + else if (TT.find("darwin") != std::string::npos) + TargetType = isDarwin; + else if (TT.find("win32") != std::string::npos) + TargetType = isWindows; } else if (TT.empty()) { #if defined(__CYGWIN__) || defined(__MINGW32__) - forCygwin = true; + TargetType = isCygwin; #elif defined(__APPLE__) - forDarwin = true; + TargetType = isDarwin; #elif defined(_WIN32) - forWindows = true; + TargetType = isWindows; #endif } - if (forCygwin) { + switch (TargetType) { + case isCygwin: asmLeadingUnderscore = true; - } else if (forDarwin) { + break; + case isDarwin: stackAlignment = 16; indirectExternAndWeakGlobals = true; asmDarwinLinkerStubs = true; asmLeadingUnderscore = true; asmPrintDotLCommConstants = true; - } else if (forWindows) { + break; + default: break; } } diff --git a/lib/Target/X86/X86Subtarget.h b/lib/Target/X86/X86Subtarget.h index adbc7cba2f0..dba2bc6b76e 100644 --- a/lib/Target/X86/X86Subtarget.h +++ b/lib/Target/X86/X86Subtarget.h @@ -38,6 +38,10 @@ protected: bool asmPrintDotLCommConstants; bool asmPrintConstantAlignment; public: + enum { + isELF, isCygwin, isDarwin, isWindows + } TargetType; + /// This constructor initializes the data members to match that /// of the specified module. ///