cl::desc("Switch to thumb mode in ARM backend"));
ARMSubtarget::ARMSubtarget(const Module &M, const std::string &FS)
- : ARMArchVersion(V4T), HasVFP2(false), IsDarwin(false),
- UseThumbBacktraces(false), IsR9Reserved(false), stackAlignment(8) {
+ : ARMArchVersion(V4T)
+ , HasVFP2(false)
+ , UseThumbBacktraces(false)
+ , IsR9Reserved(false)
+ , stackAlignment(8)
+ , TargetType(isELF) { // Default to ELF unless otherwise specified.
// Determine default and user specified characteristics
std::string CPU = "generic";
// if one cannot be determined, to true.
const std::string& TT = M.getTargetTriple();
if (TT.length() > 5) {
- IsDarwin = TT.find("-darwin") != std::string::npos;
+ if (TT.find("-darwin") != std::string::npos)
+ TargetType = isDarwin;
} else if (TT.empty()) {
#if defined(__APPLE__)
- IsDarwin = true;
+ TargetType = isDarwin;
#endif
}
- if (IsDarwin) {
+ if (isTargetDarwin()) {
UseThumbBacktraces = true;
IsR9Reserved = true;
stackAlignment = 4;
/// IsThumb - True if we are in thumb mode, false if in ARM mode.
bool IsThumb;
- bool IsDarwin;
-
/// UseThumbBacktraces - True if we use thumb style backtraces.
bool UseThumbBacktraces;
unsigned stackAlignment;
public:
+ enum {
+ isELF, isDarwin
+ } TargetType;
+
/// This constructor initializes the data members to match that
/// of the specified module.
///
bool hasVFP2() const { return HasVFP2; }
- bool isDarwin() const { return IsDarwin; }
+ bool isTargetDarwin() const { return TargetType == isDarwin; }
+ bool isTargetELF() const { return TargetType == isELF; }
+
bool isThumb() const { return IsThumb; }
bool useThumbBacktraces() const { return UseThumbBacktraces; }