From 5f6e05062637a5daf9efce301e690b54e83e8561 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 22 Jan 2011 19:17:10 +0000 Subject: [PATCH] - _mingw.h: Don't define USE_MINGW_SETJMP_TWO_ARGS for MSVC - _mingw.h: Fix definition of _CRT_ALIGN for MSVC - intrin.h: _InterlockedAddLargeStatistic is not an intrinsic on MSVC for x64 - intrin.h: Fix return type of _InterlockedOr64 - wdm.h: Fix warnings in KfRaiseIrql and RtlExtendedMagicDivide inline implementations - winnt.h: Simplify definition of GetCurrentFiber svn path=/branches/cmake-bringup/; revision=50470 --- include/crt/_mingw.h | 2 +- include/crt/crtdefs.h | 6 +++++ include/crt/msc/intrin.h | 13 ++++++----- include/ddk/wdm.h | 4 ++-- include/psdk/winnt.h | 50 ++++++++-------------------------------- include/xdk/amd64/ke.h | 2 +- include/xdk/rtlfuncs.h | 2 +- 7 files changed, 27 insertions(+), 52 deletions(-) diff --git a/include/crt/_mingw.h b/include/crt/_mingw.h index b35b6af7203..d952d1dfcde 100644 --- a/include/crt/_mingw.h +++ b/include/crt/_mingw.h @@ -187,7 +187,7 @@ allow GCC to optimize away some EH unwind code, at least in DW2 case. */ #endif #endif -#ifdef _WIN64 +#if defined(_WIN64) && !defined(_MSC_VER) #undef USE_MINGW_SETJMP_TWO_ARGS #define USE_MINGW_SETJMP_TWO_ARGS #endif diff --git a/include/crt/crtdefs.h b/include/crt/crtdefs.h index 96a534b81fc..832769e12d4 100644 --- a/include/crt/crtdefs.h +++ b/include/crt/crtdefs.h @@ -133,8 +133,14 @@ #endif #ifndef _CRT_ALIGN +#if defined (__midl) || defined(__WIDL__) +#define _CRT_ALIGN(x) +#elif defined(_MSC_VER) +#define _CRT_ALIGN(x) __declspec(align(x)) +#else #define _CRT_ALIGN(x) __attribute__ ((aligned(x))) #endif +#endif #ifndef _CRTNOALIAS #define _CRTNOALIAS diff --git a/include/crt/msc/intrin.h b/include/crt/msc/intrin.h index bd903e3f99a..ed53695d093 100644 --- a/include/crt/msc/intrin.h +++ b/include/crt/msc/intrin.h @@ -45,8 +45,6 @@ short _InterlockedXor16(volatile short * const value, const short mask); #pragma intrinsic(_InterlockedXor16) long _InterlockedXor(volatile long * const value, const long mask); #pragma intrinsic(_InterlockedXor) -long _InterlockedAddLargeStatistic(volatile __int64 * const Addend, const long Value); -#pragma intrinsic(_InterlockedAddLargeStatistic) long _InterlockedDecrement(volatile long * const lpAddend); #pragma intrinsic(_InterlockedDecrement) long _InterlockedIncrement(volatile long * const lpAddend); @@ -60,7 +58,10 @@ unsigned char _interlockedbittestandreset(volatile long * a, const long b); unsigned char _interlockedbittestandset(volatile long * a, const long b); #pragma intrinsic(_interlockedbittestandset) -#if defined(_M_AMD64) +#if defined(_M_IX86) +long _InterlockedAddLargeStatistic(volatile __int64 * const Addend, const long Value); +#pragma intrinsic(_InterlockedAddLargeStatistic) +#elif defined(_M_AMD64) __int64 _InterlockedExchange64(volatile __int64 * const Target, const __int64 Value); #pragma intrinsic(_InterlockedExchange64) __int64 _InterlockedExchangeAdd64(volatile __int64 * const Addend, const __int64 Value); @@ -71,7 +72,7 @@ void * _InterlockedExchangePointer(void * volatile * const Target, void * const #pragma intrinsic(_InterlockedExchangePointer) __int64 _InterlockedAnd64(volatile __int64 * const value, const __int64 mask); #pragma intrinsic(_InterlockedAnd64) -long _InterlockedOr64(volatile __int64 * const value, const __int64 mask); +__int64 _InterlockedOr64(volatile __int64 * const value, const __int64 mask); #pragma intrinsic(_InterlockedOr64) __int64 _InterlockedCompareExchange64(volatile __int64 * const Destination, const __int64 Exchange, const __int64 Comperand); #pragma intrinsic(_InterlockedCompareExchange64) @@ -133,7 +134,7 @@ void __addgsqword(const unsigned long Offset, const unsigned __int64 Data); #pragma intrinsic(__addgsqword) #endif -//#if defined(_M_IX86) +#if defined(_M_IX86) /*** FS segment addressing ***/ void __writefsbyte(const unsigned long Offset, const unsigned char Data); #pragma intrinsic(__writefsbyte) @@ -159,7 +160,7 @@ void __addfsword(const unsigned long Offset, const unsigned short Data); #pragma intrinsic(__addfsword) void __addfsdword(const unsigned long Offset, const unsigned int Data); #pragma intrinsic(__addfsdword) -//#endif +#endif /*** Bit manipulation ***/ diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index 05f57a0d23f..8da3a5ab485 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -7897,7 +7897,7 @@ KfRaiseIrql(IN KIRQL NewIrql) { KIRQL OldIrql; - OldIrql = __readcr8(); + OldIrql = (KIRQL)__readcr8(); //ASSERT(OldIrql <= NewIrql); __writecr8(NewIrql); return OldIrql; @@ -9309,7 +9309,7 @@ RtlExtendedMagicDivide( ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart, MagicDivisor.QuadPart); ret64 >>= ShiftCount; - ret.QuadPart = Pos ? ret64 : -ret64; + ret.QuadPart = Pos ? ret64 : -(LONG64)ret64; return ret; } #endif diff --git a/include/psdk/winnt.h b/include/psdk/winnt.h index 72bfc27afcf..8dfdfbfabb4 100644 --- a/include/psdk/winnt.h +++ b/include/psdk/winnt.h @@ -1361,7 +1361,7 @@ typedef enum { #define SEC_RESERVE 0x04000000 #define SEC_COMMIT 0x08000000 #define SEC_NOCACHE 0x10000000 -#define SEC_WRITECOMBINE 0x40000000 +#define SEC_WRITECOMBINE 0x40000000 #define SEC_LARGE_PAGES 0x80000000 #define SECTION_EXTEND_SIZE 16 #define SECTION_MAP_READ 4 @@ -5097,18 +5097,12 @@ typedef struct _OBJECT_TYPE_LIST { GUID *ObjectType; } OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST; -#if defined(__GNUC__) - #if defined(_M_IX86) -static __inline__ PVOID GetCurrentFiber(void) +FORCEINLINE PVOID GetCurrentFiber(VOID) { - void* ret; - __asm__ __volatile__ ( - "movl %%fs:0x10,%0" - : "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */ - ); - return ret; + return (PVOID)(ULONG_PTR)__readfsdword(0x10); } + #elif defined (_M_AMD64) FORCEINLINE PVOID GetCurrentFiber(VOID) { @@ -5118,10 +5112,11 @@ FORCEINLINE PVOID GetCurrentFiber(VOID) return (PVOID)__readgsqword(FIELD_OFFSET(NT_TIB, FiberData)); #endif } + #elif defined (_M_ARM) PVOID WINAPI GetCurrentFiber(VOID); -#else -#if defined(_M_PPC) + +#elif defined(_M_PPC) static __inline__ __attribute__((always_inline)) unsigned long __readfsdword_winnt(const unsigned long Offset) { unsigned long result; @@ -5133,42 +5128,15 @@ static __inline__ __attribute__((always_inline)) unsigned long __readfsdword_win return result; } -#else -#error Unknown architecture -#endif static __inline__ PVOID GetCurrentFiber(void) { return __readfsdword_winnt(0x10); } +#else +#error Unknown architecture #endif -#elif defined(__WATCOMC__) -extern PVOID GetCurrentFiber(void); -#pragma aux GetCurrentFiber = \ - "mov eax, dword ptr fs:0x10" \ - value [eax] \ - modify [eax]; - -#elif defined(_MSC_VER) - -#if (_MSC_FULL_VER >= 13012035) - -__inline PVOID GetCurrentFiber(void) { return (PVOID)(ULONG_PTR)__readfsdword(0x10); } - -#else - -static __inline PVOID GetCurrentFiber(void) -{ - PVOID p; - __asm mov eax, fs:[10h] - __asm mov [p], eax - return p; -} - -#endif /* _MSC_FULL_VER */ - -#endif /* __GNUC__/__WATCOMC__/_MSC_VER */ #include "inline_ntcurrentteb.h" diff --git a/include/xdk/amd64/ke.h b/include/xdk/amd64/ke.h index 833aca8bee0..f63add4d7b6 100644 --- a/include/xdk/amd64/ke.h +++ b/include/xdk/amd64/ke.h @@ -67,7 +67,7 @@ KfRaiseIrql(IN KIRQL NewIrql) { KIRQL OldIrql; - OldIrql = __readcr8(); + OldIrql = (KIRQL)__readcr8(); //ASSERT(OldIrql <= NewIrql); __writecr8(NewIrql); return OldIrql; diff --git a/include/xdk/rtlfuncs.h b/include/xdk/rtlfuncs.h index d0657f6dd41..7b91b19ac73 100644 --- a/include/xdk/rtlfuncs.h +++ b/include/xdk/rtlfuncs.h @@ -2630,7 +2630,7 @@ RtlExtendedMagicDivide( ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart, MagicDivisor.QuadPart); ret64 >>= ShiftCount; - ret.QuadPart = Pos ? ret64 : -ret64; + ret.QuadPart = Pos ? ret64 : -(LONG64)ret64; return ret; } #endif