blob: 4363697d3e37e9bff93d9f9420a163a5a9a3c49c [file] [log] [blame]
Evan Cheng10043e22007-01-19 07:51:42 +00001//===-- ARMSubtarget.cpp - ARM Subtarget Information ------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
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.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the ARM specific subclass of TargetSubtarget.
11//
12//===----------------------------------------------------------------------===//
13
14#include "ARMSubtarget.h"
15#include "ARMGenSubtarget.inc"
16#include "llvm/Module.h"
17#include "llvm/Support/CommandLine.h"
18using namespace llvm;
19
20// FIXME: this is temporary.
21static cl::opt<bool> Thumb("enable-thumb",
22 cl::desc("Switch to thumb mode in ARM backend"));
23
24ARMSubtarget::ARMSubtarget(const Module &M, const std::string &FS)
Evan Cheng181fe362007-01-19 19:22:40 +000025 : ARMArchVersion(V4T)
26 , HasVFP2(false)
27 , UseThumbBacktraces(false)
28 , IsR9Reserved(false)
Lauro Ramos Venancio048e16ff2007-02-13 19:52:28 +000029 , stackAlignment(4)
30 , TargetType(isELF) // Default to ELF unless otherwise specified.
31 , TargetABI(ARM_ABI_APCS) {
Evan Cheng10043e22007-01-19 07:51:42 +000032
33 // Determine default and user specified characteristics
34 std::string CPU = "generic";
35
36 // Parse features string.
37 ParseSubtargetFeatures(FS, CPU);
38
39 IsThumb = Thumb;
40
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) {
Evan Cheng181fe362007-01-19 19:22:40 +000045 if (TT.find("-darwin") != std::string::npos)
46 TargetType = isDarwin;
Evan Cheng10043e22007-01-19 07:51:42 +000047 } else if (TT.empty()) {
48#if defined(__APPLE__)
Evan Cheng181fe362007-01-19 19:22:40 +000049 TargetType = isDarwin;
Evan Cheng10043e22007-01-19 07:51:42 +000050#endif
51 }
52
Lauro Ramos Venancio048e16ff2007-02-13 19:52:28 +000053 if (TT.find("eabi") != std::string::npos)
54 TargetABI = ARM_ABI_AAPCS;
55
56 if (isAAPCS_ABI())
57 stackAlignment = 8;
58
Evan Cheng181fe362007-01-19 19:22:40 +000059 if (isTargetDarwin()) {
Evan Cheng10043e22007-01-19 07:51:42 +000060 UseThumbBacktraces = true;
61 IsR9Reserved = true;
Lauro Ramos Venancio048e16ff2007-02-13 19:52:28 +000062 }
Evan Cheng10043e22007-01-19 07:51:42 +000063}