gallivm: Centralize initialization. Fix stack alignment issues on Windows.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 3 Mar 2010 12:00:08 +0000 (12:00 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Wed, 3 Mar 2010 12:02:26 +0000 (12:02 +0000)
src/gallium/auxiliary/gallivm/lp_bld_init.cpp
src/gallium/auxiliary/gallivm/lp_bld_init.h

index 6b559db159e5beb9634dae50b985db19ac35e3f8..067397a520b1c517a2d792f63b996b0b0de645b4 100644 (file)
  **************************************************************************/
 
 
+#include <llvm/Config/config.h>
+#include <llvm/Target/TargetSelect.h>
+#include <llvm/Target/TargetOptions.h>
+
 #include "pipe/p_config.h"
 
 #include "lp_bld_init.h"
 
 
-#ifndef LLVM_NATIVE_ARCH
-
-namespace llvm {
-   extern void LinkInJIT();
-}
+extern "C" void LLVMLinkInJIT();
 
 
-void
-LLVMLinkInJIT(void)
+extern "C" void
+lp_build_init(void)
 {
-   llvm::LinkInJIT();
-}
-
-
-extern "C" int X86TargetMachineModule;
-
-
-int
-LLVMInitializeNativeTarget(void)
-{
-#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
-   X86TargetMachineModule = 1;
+#if defined(PIPE_OS_WINDOWS) && defined(PIPE_ARCH_X86)
+   /*
+    * This is mis-detected on some hardware / software combinations.
+    */
+   llvm::StackAlignment = 4;
+   llvm::RealignStack = true;
 #endif
-   return 0;
-}
 
+   /* Same as LLVMInitializeNativeTarget(); */
+   llvm::InitializeNativeTarget();
 
-#endif
+   LLVMLinkInJIT();
+}
 
 
 /* 
@@ -69,7 +64,6 @@ LLVMInitializeNativeTarget(void)
  */
 #if defined(_MSC_VER) && defined(_DEBUG)
 #include <crtdefs.h>
-extern "C" {
-   _CRTIMP void __cdecl _invalid_parameter_noinfo(void) {}
-}
+extern "C" _CRTIMP void __cdecl
+_invalid_parameter_noinfo(void) {}
 #endif
index 6a8ab8e5db9f96bd87811a2ec2698776bca1b45b..07f50d1c43391e2f8040d46b16eba7eb7885deaf 100644 (file)
 #define LP_BLD_INIT_H
 
 
-#include "llvm/Config/config.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 
-#ifndef LLVM_NATIVE_ARCH
-
 void
-LLVMLinkInJIT(void);
-
-int
-LLVMInitializeNativeTarget(void);
-
-#endif /* !LLVM_NATIVE_ARCH */
+lp_build_init(void);
 
 
 #ifdef __cplusplus