util: Don't use x86 asm on x86_64.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 25 Mar 2009 20:58:38 +0000 (20:58 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Wed, 25 Mar 2009 21:01:49 +0000 (21:01 +0000)
src/gallium/auxiliary/util/u_debug.c
src/gallium/auxiliary/util/u_debug.h
src/gallium/auxiliary/util/u_debug_stack.c
src/gallium/auxiliary/util/u_math.h

index 0af69d8c8f04f4a56b20eca95e822133ca87c156..1b984425b598072f4994a9197d75fe3d51d058c1 100644 (file)
@@ -169,18 +169,18 @@ void debug_print_blob( const char *name,
 #endif
 
 
-void _debug_break(void) 
+#ifndef debug_break
+void debug_break(void) 
 {
-#if defined(PIPE_ARCH_X86) && defined(PIPE_CC_GCC)
-   __asm("int3");
-#elif defined(PIPE_ARCH_X86) && defined(PIPE_CC_MSVC)
-   _asm {int 3};
+#if defined(PIPE_SUBSYSTEM_WINDOWS_USER)
+   DebugBreak();
 #elif defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY)
    EngDebugBreak();
 #else
    abort();
 #endif
 }
+#endif
 
 
 #ifdef PIPE_SUBSYSTEM_WINDOWS_DISPLAY
index 33e7cb3419ecd23349a662c2fdc6dfded962ef18..5e88f3ebb1af386f10cb29d7d98ebdaab0995f93 100644 (file)
@@ -125,19 +125,16 @@ void debug_print_format(const char *msg, unsigned fmt );
 #endif
 
 
-void _debug_break(void);
-
-
 /**
  * Hard-coded breakpoint.
  */
 #ifdef DEBUG
 #if defined(PIPE_ARCH_X86) && defined(PIPE_CC_GCC)
 #define debug_break() __asm("int3")
-#elif defined(PIPE_ARCH_X86) && defined(PIPE_CC_MSVC)
-#define debug_break()  do { _asm {int 3} } while(0)
+#elif defined(PIPE_CC_MSVC)
+#define debug_break()  __debugbreak()
 #else
-#define debug_break() _debug_break()
+void debug_break(void);
 #endif
 #else /* !DEBUG */
 #define debug_break() ((void)0)
index 76068a65091744f747c083b81d291dfdd2e6a0f9..e5d61907c0e10ce813ef92da29cdc5f368cfbf65 100644 (file)
@@ -49,7 +49,7 @@ debug_backtrace_capture(struct debug_stack_frame *backtrace,
 
 #if defined(PIPE_CC_GCC)
    frame_pointer = ((const void **)__builtin_frame_address(1));
-#elif defined(PIPE_CC_MSVC)
+#elif defined(PIPE_CC_MSVC) && defined(PIPE_ARCH_X86)
    __asm {
       mov frame_pointer, ebp
    }
index 1ecde7a9125cc3bde03bcdde144d2d1ef7fe8dd8..9268a9bb7eea3eafda57130f44181742ebe6d99d 100644 (file)
@@ -319,11 +319,21 @@ util_iround(float f)
 
 
 
-#if defined(PIPE_CC_MSVC) && defined(PIPE_ARCH_X86)
 /**
  * Find first bit set in word.  Least significant bit is 1.
  * Return 0 if no bits set.
  */
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+static INLINE
+unsigned long ffs( unsigned long u )
+{
+   unsigned long i;
+   if(_BitScanForward(&i, u))
+      return i + 1;
+   else
+      return 0;
+}
+#elif defined(PIPE_CC_MSVC) && defined(PIPE_ARCH_X86)
 static INLINE
 unsigned ffs( unsigned u )
 {
@@ -339,9 +349,7 @@ unsigned ffs( unsigned u )
 
    return i;
 }
-#endif
-
-#ifdef __MINGW32__
+#elif defined(__MINGW32__)
 #define ffs __builtin_ffs
 #endif