Add new -d option to tblgen. It writes a make(1)-style dependency file.
[oota-llvm.git] / include / llvm / Support / Win64EH.h
index f989364e06fb796041b9e4f63777e07eb0a3bc52..8d74e10be0031490deced960d75ee5950c6c9aa5 100644 (file)
@@ -16,6 +16,8 @@
 #ifndef LLVM_SUPPORT_WIN64EH_H
 #define LLVM_SUPPORT_WIN64EH_H
 
+#include "llvm/Support/DataTypes.h"
+
 namespace llvm {
 namespace Win64EH {
 
@@ -28,7 +30,7 @@ enum UnwindOpcodes {
   UOP_SetFPReg,
   UOP_SaveNonVol,
   UOP_SaveNonVolBig,
-  UOP_SaveXMM128,
+  UOP_SaveXMM128 = 8,
   UOP_SaveXMM128Big,
   UOP_PushMachFrame
 };
@@ -40,7 +42,7 @@ union UnwindCode {
     uint8_t codeOffset;
     uint8_t unwindOp:4,
             opInfo:4;
-  };
+  } u;
   uint16_t frameOffset;
 };
 
@@ -56,6 +58,13 @@ enum {
   UNW_ChainInfo = 0x04
 };
 
+/// RuntimeFunction - An entry in the table of functions with unwind info.
+struct RuntimeFunction {
+  uint64_t startAddress;
+  uint64_t endAddress;
+  uint64_t unwindInfoOffset;
+};
+
 /// UnwindInfo - An entry in the exception table.
 struct UnwindInfo {
   uint8_t version:3,
@@ -65,30 +74,25 @@ struct UnwindInfo {
   uint8_t frameRegister:4,
           frameOffset:4;
   UnwindCode unwindCodes[1];
+
+  void *getLanguageSpecificData() {
+    return reinterpret_cast<void *>(&unwindCodes[(numCodes+1) & ~1]);
+  }
+  uint64_t getLanguageSpecificHandlerOffset() {
+    return *reinterpret_cast<uint64_t *>(getLanguageSpecificData());
+  }
+  void setLanguageSpecificHandlerOffset(uint64_t offset) {
+    *reinterpret_cast<uint64_t *>(getLanguageSpecificData()) = offset;
+  }
+  RuntimeFunction *getChainedFunctionEntry() {
+    return reinterpret_cast<RuntimeFunction *>(getLanguageSpecificData());
+  }
+  void *getExceptionData() {
+    return reinterpret_cast<void *>(reinterpret_cast<uint64_t *>(
+                                                  getLanguageSpecificData())+1);
+  }
 };
 
-inline UnwindCode &getUnwindCodeEntry(UnwindInfo &info, uint32_t index) {
-  return info.unwindCodes[index];
-}
-inline void *getLanguageSpecificData(UnwindInfo &info) {
-  return reinterpret_cast<void *>(&getUnwindCodeEntry(info,info.numCodes+1)&~1);
-}
-inline uint64_t getLanguageSpecificHandlerOffset(UnwindInfo &info) {
-  return *reinterpret_cast<uint64_t *>(getLangaugeSpecificData(info));
-}
-inline void setLanguageSpecificHandlerOffset(UnwindInfo &info, uint64_t offset){
-  *reinterpret_cast<uint64_t *>(getLanguageSpecificData(info)) = offset;
-}
-inline uint64_t getChainedFunctionEntryOffset(UnwindInfo &info) {
-  return *reinterpret_cast<uint64_t *>(getLanguageSpecificData(info));
-}
-inline void setChainedFunctionEntryOffset(UnwindInfo &info, uint64_t offset) {
-  *reinterpret_cast<uint64_t *>(getLanguageSpecificData(info)) = offset;
-}
-inline void *getExceptionData(UnwindInfo &info) {
-  return reinterpret_cast<void *>(reinterpret_cast<uint64_t *>(
-                                              getLanguageSpecificData(info))+1);
-}
 
 } // End of namespace Win64EH
 } // End of namespace llvm