diff options
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/ARM/ARM.td | 3 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMInstrInfo.td | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMSubtarget.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMSubtarget.h | 6 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86.td | 3 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.td | 8 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86Subtarget.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86Subtarget.h | 8 | 
10 files changed, 55 insertions, 3 deletions
| diff --git a/llvm/lib/Target/ARM/ARM.td b/llvm/lib/Target/ARM/ARM.td index ade06880d39..baf051cc23b 100644 --- a/llvm/lib/Target/ARM/ARM.td +++ b/llvm/lib/Target/ARM/ARM.td @@ -23,6 +23,9 @@ include "llvm/Target/Target.td"  def ModeThumb  : SubtargetFeature<"thumb-mode", "InThumbMode", "true",                                    "Thumb mode">; +def ModeNaCl   : SubtargetFeature<"nacl-mode", "InNaClMode", "true", +                                  "Native client mode">; +  //===----------------------------------------------------------------------===//  // ARM Subtarget features.  // diff --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td index 26f1fe1f74d..00a945e8cfb 100644 --- a/llvm/lib/Target/ARM/ARMInstrInfo.td +++ b/llvm/lib/Target/ARM/ARMInstrInfo.td @@ -209,6 +209,8 @@ def IsARM            : Predicate<"!Subtarget->isThumb()">,                                   AssemblerPredicate<"!ModeThumb">;  def IsDarwin         : Predicate<"Subtarget->isTargetDarwin()">;  def IsNotDarwin      : Predicate<"!Subtarget->isTargetDarwin()">; +def IsNaCl           : Predicate<"Subtarget->isTargetNaCl()">, +                                 AssemblerPredicate<"ModeNaCl">;  // FIXME: Eventually this will be just "hasV6T2Ops".  def UseMovt          : Predicate<"Subtarget->useMovt()">; diff --git a/llvm/lib/Target/ARM/ARMSubtarget.cpp b/llvm/lib/Target/ARM/ARMSubtarget.cpp index 1cab9e44ce7..f01d1d41cfd 100644 --- a/llvm/lib/Target/ARM/ARMSubtarget.cpp +++ b/llvm/lib/Target/ARM/ARMSubtarget.cpp @@ -53,6 +53,7 @@ ARMSubtarget::ARMSubtarget(const std::string &TT, const std::string &CPU,    , HasVMLxForwarding(false)    , SlowFPBrcc(false)    , InThumbMode(false) +  , InNaClMode(false)    , HasThumb2(false)    , NoARM(false)    , PostRAScheduler(false) diff --git a/llvm/lib/Target/ARM/ARMSubtarget.h b/llvm/lib/Target/ARM/ARMSubtarget.h index c6508723a57..76a502caa9a 100644 --- a/llvm/lib/Target/ARM/ARMSubtarget.h +++ b/llvm/lib/Target/ARM/ARMSubtarget.h @@ -70,6 +70,9 @@ protected:    /// InThumbMode - True if compiling for Thumb, false for ARM.    bool InThumbMode; +  /// InNaClMode - True if targeting Native Client +  bool InNaClMode; +    /// HasThumb2 - True if Thumb2 instructions are supported.    bool HasThumb2; @@ -209,6 +212,9 @@ protected:    const Triple &getTargetTriple() const { return TargetTriple; }    bool isTargetDarwin() const { return TargetTriple.isOSDarwin(); } +  bool isTargetNaCl() const { +    return TargetTriple.getOS() == Triple::NativeClient; +  }    bool isTargetELF() const { return !isTargetDarwin(); }    bool isAPCS_ABI() const { return TargetABI == ARM_ABI_APCS; } diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp index d5728721ffd..1c7e75ec488 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp @@ -86,6 +86,14 @@ std::string ARM_MC::ParseARMTriple(StringRef TT) {        ARMArchFeature += ",+thumb-mode";    } +  Triple TheTriple(TT); +  if (TheTriple.getOS() == Triple::NativeClient) { +    if (ARMArchFeature.empty()) +      ARMArchFeature = "+nacl-mode"; +    else +      ARMArchFeature += ",+nacl-mode"; +  } +    return ARMArchFeature;  } diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp index 2440281c0ad..06d8a920e3d 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp @@ -40,9 +40,16 @@ using namespace llvm;  std::string X86_MC::ParseX86Triple(StringRef TT) {    Triple TheTriple(TT); +  std::string FS;    if (TheTriple.getArch() == Triple::x86_64) -    return "+64bit-mode"; -  return "-64bit-mode"; +    FS = "+64bit-mode"; +  else +    FS = "-64bit-mode"; +  if (TheTriple.getOS() == Triple::NativeClient) +    FS += ",+nacl-mode"; +  else +    FS += ",-nacl-mode"; +  return FS;  }  /// GetCpuIDAndInfo - Execute the specified cpuid and return the 4 values in the diff --git a/llvm/lib/Target/X86/X86.td b/llvm/lib/Target/X86/X86.td index e3454b716ad..345cecf5d42 100644 --- a/llvm/lib/Target/X86/X86.td +++ b/llvm/lib/Target/X86/X86.td @@ -23,6 +23,9 @@ include "llvm/Target/Target.td"  def Mode64Bit : SubtargetFeature<"64bit-mode", "In64BitMode", "true",                                    "64-bit mode (x86_64)">; +def ModeNaCl  : SubtargetFeature<"nacl-mode", "InNaClMode", "true", +                                 "Native Client mode">; +  //===----------------------------------------------------------------------===//  // X86 Subtarget features.  //===----------------------------------------------------------------------===// diff --git a/llvm/lib/Target/X86/X86InstrInfo.td b/llvm/lib/Target/X86/X86InstrInfo.td index 903d1b2d6ec..1af78713ab7 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.td +++ b/llvm/lib/Target/X86/X86InstrInfo.td @@ -482,6 +482,14 @@ def In64BitMode  : Predicate<"Subtarget->is64Bit()">,                               AssemblerPredicate<"Mode64Bit">;  def IsWin64      : Predicate<"Subtarget->isTargetWin64()">;  def NotWin64     : Predicate<"!Subtarget->isTargetWin64()">; +def IsNaCl       : Predicate<"Subtarget->isTargetNaCl()">, +                             AssemblerPredicate<"ModeNaCl">; +def IsNaCl32     : Predicate<"Subtarget->isTargetNaCl32()">, +                             AssemblerPredicate<"ModeNaCl,!Mode64Bit">; +def IsNaCl64     : Predicate<"Subtarget->isTargetNaCl64()">, +                             AssemblerPredicate<"ModeNaCl,Mode64Bit">; +def NotNaCl      : Predicate<"!Subtarget->isTargetNaCl()">, +                             AssemblerPredicate<"!ModeNaCl">;  def SmallCode    : Predicate<"TM.getCodeModel() == CodeModel::Small">;  def KernelCode   : Predicate<"TM.getCodeModel() == CodeModel::Kernel">;  def FarData      : Predicate<"TM.getCodeModel() != CodeModel::Small &&" diff --git a/llvm/lib/Target/X86/X86Subtarget.cpp b/llvm/lib/Target/X86/X86Subtarget.cpp index be77d879ea0..32493ded99d 100644 --- a/llvm/lib/Target/X86/X86Subtarget.cpp +++ b/llvm/lib/Target/X86/X86Subtarget.cpp @@ -260,7 +260,8 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,    // FIXME: this is a known good value for Yonah. How about others?    , MaxInlineSizeThreshold(128)    , TargetTriple(TT) -  , In64BitMode(is64Bit) { +  , In64BitMode(is64Bit) +  , InNaClMode(false) {    // Determine default and user specified characteristics    if (!FS.empty() || !CPU.empty()) {      std::string CPUName = CPU; @@ -306,6 +307,11 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,    if (In64BitMode)      ToggleFeature(X86::Mode64Bit); +  if (isTargetNaCl()) { +    InNaClMode = true; +    ToggleFeature(X86::ModeNaCl); +  } +    if (HasAVX)      X86SSELevel = NoMMXSSE; diff --git a/llvm/lib/Target/X86/X86Subtarget.h b/llvm/lib/Target/X86/X86Subtarget.h index c3a6d0f711d..843a3b7660b 100644 --- a/llvm/lib/Target/X86/X86Subtarget.h +++ b/llvm/lib/Target/X86/X86Subtarget.h @@ -119,6 +119,9 @@ private:    /// In64BitMode - True if compiling for 64-bit, false for 32-bit.    bool In64BitMode; +  /// InNaClMode - True if compiling for Native Client target. +  bool InNaClMode; +  public:    /// This constructor initializes the data members to match that @@ -190,6 +193,11 @@ public:      return !isTargetDarwin() && !isTargetWindows() && !isTargetCygMing();    }    bool isTargetLinux() const { return TargetTriple.getOS() == Triple::Linux; } +  bool isTargetNaCl() const { +    return TargetTriple.getOS() == Triple::NativeClient; +  } +  bool isTargetNaCl32() const { return isTargetNaCl() && !is64Bit(); } +  bool isTargetNaCl64() const { return isTargetNaCl() && is64Bit(); }    bool isTargetWindows() const { return TargetTriple.getOS() == Triple::Win32; }    bool isTargetMingw() const { return TargetTriple.getOS() == Triple::MinGW32; } | 

