CXX_FAST_TLS calling convention: Add support for ARM on Darwin.
[oota-llvm.git] / lib / Target / ARM / ARMBaseRegisterInfo.cpp
index adc6b6b1894af8f3959353b065cc77583b14fb0c..595975de9054eccd10eca68c636a05a6ac506ad9 100644 (file)
@@ -87,6 +87,8 @@ ARMBaseRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
     }
   }
 
+  if (STI.isTargetDarwin() && F->getCallingConv() == CallingConv::CXX_FAST_TLS)
+    return CSR_iOS_CXX_TLS_SaveList;
   return RegList;
 }
 
@@ -97,6 +99,8 @@ ARMBaseRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
   if (CC == CallingConv::GHC)
     // This is academic becase all GHC calls are (supposed to be) tail calls
     return CSR_NoRegs_RegMask;
+  if (STI.isTargetDarwin() && CC == CallingConv::CXX_FAST_TLS)
+    return CSR_iOS_CXX_TLS_RegMask;
   return STI.isTargetDarwin() ? CSR_iOS_RegMask : CSR_AAPCS_RegMask;
 }