Teach clang about the armv4/armv4t distinction
When choosing a default CPU, clang used to pick ARM7TDMI (which has Thumb) even when the more restrictive armv4 triple was specified. This should fix that. Patch by Jeroen Hofstee. llvm-svn: 183905
This commit is contained in:
parent
54e9bd2239
commit
92509c1c0c
|
@ -177,7 +177,8 @@ static const char *getARMTargetCPU(const ArgList &Args,
|
|||
.Cases("armv2", "armv2a","arm2")
|
||||
.Case("armv3", "arm6")
|
||||
.Case("armv3m", "arm7m")
|
||||
.Cases("armv4", "armv4t", "arm7tdmi")
|
||||
.Case("armv4", "strongarm")
|
||||
.Case("armv4t", "arm7tdmi")
|
||||
.Cases("armv5", "armv5t", "arm10tdmi")
|
||||
.Cases("armv5e", "armv5te", "arm1026ejs")
|
||||
.Case("armv5tej", "arm926ej-s")
|
||||
|
@ -196,7 +197,8 @@ static const char *getARMTargetCPU(const ArgList &Args,
|
|||
.Case("ep9312", "ep9312")
|
||||
.Case("iwmmxt", "iwmmxt")
|
||||
.Case("xscale", "xscale")
|
||||
// If all else failed, return the most base CPU LLVM supports.
|
||||
// If all else failed, return the most base CPU with thumb interworking
|
||||
// supported by LLVM.
|
||||
.Default("arm7tdmi");
|
||||
}
|
||||
|
||||
|
@ -207,6 +209,7 @@ static const char *getARMTargetCPU(const ArgList &Args,
|
|||
// FIXME: tblgen this, or kill it!
|
||||
static const char *getLLVMArchSuffixForARM(StringRef CPU) {
|
||||
return llvm::StringSwitch<const char *>(CPU)
|
||||
.Case("strongarm", "v4")
|
||||
.Cases("arm7tdmi", "arm7tdmi-s", "arm710t", "v4t")
|
||||
.Cases("arm720t", "arm9", "arm9tdmi", "v4t")
|
||||
.Cases("arm920", "arm920t", "arm922t", "v4t")
|
||||
|
|
|
@ -446,6 +446,7 @@ void Clang::AddPreprocessingOptions(Compilation &C,
|
|||
// FIXME: tblgen this, or kill it!
|
||||
static const char *getLLVMArchSuffixForARM(StringRef CPU) {
|
||||
return llvm::StringSwitch<const char *>(CPU)
|
||||
.Case("strongarm", "v4")
|
||||
.Cases("arm7tdmi", "arm7tdmi-s", "arm710t", "v4t")
|
||||
.Cases("arm720t", "arm9", "arm9tdmi", "v4t")
|
||||
.Cases("arm920", "arm920t", "arm922t", "v4t")
|
||||
|
@ -510,7 +511,8 @@ static std::string getARMTargetCPU(const ArgList &Args,
|
|||
.Cases("armv2", "armv2a","arm2")
|
||||
.Case("armv3", "arm6")
|
||||
.Case("armv3m", "arm7m")
|
||||
.Cases("armv4", "armv4t", "arm7tdmi")
|
||||
.Case("armv4", "strongarm")
|
||||
.Case("armv4t", "arm7tdmi")
|
||||
.Cases("armv5", "armv5t", "arm10tdmi")
|
||||
.Cases("armv5e", "armv5te", "arm1022e")
|
||||
.Case("armv5tej", "arm926ej-s")
|
||||
|
@ -528,7 +530,8 @@ static std::string getARMTargetCPU(const ArgList &Args,
|
|||
.Case("ep9312", "ep9312")
|
||||
.Case("iwmmxt", "iwmmxt")
|
||||
.Case("xscale", "xscale")
|
||||
// If all else failed, return the most base CPU LLVM supports.
|
||||
// If all else failed, return the most base CPU with thumb interworking
|
||||
// supported by LLVM.
|
||||
.Default("arm7tdmi");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue