1 //===-- ARMSubtarget.cpp - ARM Subtarget Information ------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file was developed by Evan Cheng and is distributed under the
6 // University of Illinois Open Source License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the ARM specific subclass of TargetSubtarget.
12 //===----------------------------------------------------------------------===//
14 #include "ARMSubtarget.h"
15 #include "ARMGenSubtarget.inc"
16 #include "llvm/Module.h"
17 #include "llvm/Support/CommandLine.h"
20 // FIXME: this is temporary.
21 static cl::opt<bool> Thumb("enable-thumb",
22 cl::desc("Switch to thumb mode in ARM backend"));
24 ARMSubtarget::ARMSubtarget(const Module &M, const std::string &FS)
27 , UseThumbBacktraces(false)
30 , TargetType(isELF) // Default to ELF unless otherwise specified.
31 , TargetABI(ARM_ABI_APCS) {
33 // Determine default and user specified characteristics
34 std::string CPU = "generic";
36 // Parse features string.
37 ParseSubtargetFeatures(FS, CPU);
41 // Set the boolean corresponding to the current target triple, or the default
42 // if one cannot be determined, to true.
43 const std::string& TT = M.getTargetTriple();
44 if (TT.length() > 5) {
45 if (TT.find("-darwin") != std::string::npos)
46 TargetType = isDarwin;
47 } else if (TT.empty()) {
48 #if defined(__APPLE__)
49 TargetType = isDarwin;
53 if (TT.find("eabi") != std::string::npos)
54 TargetABI = ARM_ABI_AAPCS;
59 if (isTargetDarwin()) {
60 UseThumbBacktraces = true;