Author: hyperion Date: Tue Jun 16 04:24:26 2009 New Revision: 41421
URL: http://svn.reactos.org/svn/reactos?rev=41421&view=rev Log: modified dll/win32/srclient/srclient_main.c What the hell, Arch Blackmann? <windef.h>, <winbase.h> and <winnls.h> are not meant to be included directly. Include <windows.h> instead
modified drivers/video/font/ftfd/rosglue.c Move standard C includes before Windows includes, so the required types are defined beforehand
modified include/crt/_mingw.h Re-add Visual C++ support va_list is not a built-in type, it does not belong in _mingw.h Do not include intrin.h (screw you, Arch) Removed definition of _USE_32BIT_TIME_T ("ROS HACK!")
modified include/crt/conio.h modified include/crt/stdio.h modified include/crt/wchar.h Pull in va_list from stdarg.h
modified include/crt/mingw32/intrin.h modified include/crt/mingw32/intrin_arm.h modified include/crt/mingw32/intrin_x86.h intrin.h defines size_t and uintptr_t The _real_, ultimate magic incantation for inline functions is extern __inline__ __attribute__((__always_inline__,__gnu_inline__)) Fix __addfsbyte, __addfsword
added include/crt/msc added include/crt/msc/intrin.h Ported our intrin.h to Visual C++
modified ReactOS-arm.rbuild modified ReactOS-i386.rbuild ROS HACK!s belong in the project definition
modified ReactOS-generic.rbuild Compiler-specific include directories
Added: trunk/reactos/include/crt/msc/ (with props) trunk/reactos/include/crt/msc/intrin.h (with props) Modified: trunk/reactos/ReactOS-arm.rbuild trunk/reactos/ReactOS-generic.rbuild trunk/reactos/ReactOS-i386.rbuild trunk/reactos/dll/win32/srclient/srclient_main.c trunk/reactos/drivers/video/font/ftfd/rosglue.c trunk/reactos/include/crt/_mingw.h trunk/reactos/include/crt/conio.h trunk/reactos/include/crt/mingw32/intrin.h trunk/reactos/include/crt/mingw32/intrin_arm.h trunk/reactos/include/crt/mingw32/intrin_x86.h trunk/reactos/include/crt/stdio.h trunk/reactos/include/crt/wchar.h
Modified: trunk/reactos/ReactOS-arm.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ReactOS-arm.rbuild?rev=4142... ============================================================================== --- trunk/reactos/ReactOS-arm.rbuild [iso-8859-1] (original) +++ trunk/reactos/ReactOS-arm.rbuild [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -23,7 +23,7 @@ <define name="KDBG">1</define> <property name="DBG_OR_KDBG" value="true" /> </if> - + <include>.</include> <include>include</include> <include root="intermediate">include</include> @@ -71,11 +71,11 @@ <compilerflag>-fno-strict-aliasing</compilerflag> <linkerflag>--strip-debug</linkerflag> <linkerflag>-static</linkerflag> - + <directory name="media"> <directory name="nls"> <xi:include href="media/nls/nls.rbuild" /> - </directory> + </directory> </directory> <directory name="lib"> <directory name="drivers"> @@ -180,13 +180,15 @@ <directory name="dll"> <directory name="ntdll"> <xi:include href="dll/ntdll/ntdll.rbuild" /> - </directory> + </directory> </directory> <directory name="base"> <directory name="system"> <directory name="smss"> <xi:include href="base/system/smss/smss.rbuild" /> - </directory> - </directory> + </directory> + </directory> </directory> + + <define name="_USE_32BIT_TIME_T" /> </project>
Modified: trunk/reactos/ReactOS-generic.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ReactOS-generic.rbuild?rev=... ============================================================================== --- trunk/reactos/ReactOS-generic.rbuild [iso-8859-1] (original) +++ trunk/reactos/ReactOS-generic.rbuild [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -67,7 +67,8 @@ <include>include/dxsdk</include> <include root="intermediate">include/dxsdk</include> <include>include/crt</include> - <include>include/crt/mingw32</include> + <include compilerset="gcc">include/crt/mingw32</include> + <include compilerset="msc">include/crt/msc</include> <include>include/ddk</include> <include>include/GL</include> <include>include/ndk</include>
Modified: trunk/reactos/ReactOS-i386.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ReactOS-i386.rbuild?rev=414... ============================================================================== --- trunk/reactos/ReactOS-i386.rbuild [iso-8859-1] (original) +++ trunk/reactos/ReactOS-i386.rbuild [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -79,4 +79,5 @@ <linkerflag>-disable-stdcall-fixup</linkerflag> </group>
+ <define name="_USE_32BIT_TIME_T" /> </project>
Modified: trunk/reactos/dll/win32/srclient/srclient_main.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/srclient/srclient... ============================================================================== --- trunk/reactos/dll/win32/srclient/srclient_main.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/srclient/srclient_main.c [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -16,9 +16,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include <windef.h> -#include <winbase.h> -#include <winnls.h> +#include <windows.h> #include <srrestoreptapi.h>
#define NDEBUG
Modified: trunk/reactos/drivers/video/font/ftfd/rosglue.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/video/font/ftfd/ros... ============================================================================== --- trunk/reactos/drivers/video/font/ftfd/rosglue.c [iso-8859-1] (original) +++ trunk/reactos/drivers/video/font/ftfd/rosglue.c [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -8,11 +8,11 @@ * NOTES: */
+#include <stdarg.h> +#include <stdio.h> #include <windef.h> #include <wingdi.h> #include <winddi.h> -#include <stdarg.h> -#include <stdio.h>
#define NDEBUG #include <debug.h>
Modified: trunk/reactos/include/crt/_mingw.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/crt/_mingw.h?rev=41... ============================================================================== --- trunk/reactos/include/crt/_mingw.h [iso-8859-1] (original) +++ trunk/reactos/include/crt/_mingw.h [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -8,13 +8,6 @@ #define _INC_MINGW
#define _INTEGRAL_MAX_BITS 64 - -// ROS HACK! -#ifndef _WIN64 - #ifndef _USE_32BIT_TIME_T - #define _USE_32BIT_TIME_T - #endif -#endif
#ifndef MINGW64 #define MINGW64 @@ -48,15 +41,19 @@ #define __MINGW_GNUC_PREREQ(major, minor) 0 #endif
-#if !defined (_MSC_VER) -#define __MINGW_MSC_PREREQ(major, minor) 0 +#if defined (_MSC_VER) +#define __MINGW_MSC_PREREQ(major, minor) ((major * 100 + minor * 10) >= _MSC_VER) +#else +#define __MINGW_MSC_PREREQ(major, minor) 0 #endif
#define USE___UUIDOF 0
#ifdef __cplusplus # define __CRT_INLINE inline -#else +#elif defined(_MSC_VER) +# define __CRT_INLINE __inline +#elif defined(__GNUC__) # if ( __MINGW_GNUC_PREREQ(4, 3) && __STDC_VERSION__ >= 199901L) # define __CRT_INLINE extern inline __attribute__((__always_inline__,__gnu_inline__)) # else @@ -79,8 +76,10 @@ #else # ifdef __GNUC__ # define __unaligned __attribute((packed)) +# elif defined(_MSC_VER) && !defined(_M_IA64) && !defined(_M_AMD64) +# define __unaligned # else -# define __UNUSED_PARAM(x) x +# define __unaligned # endif #endif
@@ -98,6 +97,9 @@ #if __MINGW_GNUC_PREREQ (3, 0) #define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__)) #define __MINGW_ATTRIB_PURE __attribute__ ((__pure__)) +#elif __MINGW_MSC_PREREQ(14, 0) +#define __MINGW_ATTRIB_MALLOC __declspec(noalias) __declspec(restrict) +#define __MINGW_ATTRIB_PURE #else #define __MINGW_ATTRIB_MALLOC #define __MINGW_ATTRIB_PURE @@ -119,7 +121,7 @@ #else #define __MINGW_ATTRIB_DEPRECATED #endif - + #if __MINGW_GNUC_PREREQ (3, 3) #define __MINGW_NOTHROW __attribute__ ((__nothrow__)) #elif __MINGW_MSC_PREREQ(12, 0) && defined (__cplusplus) @@ -172,33 +174,11 @@ #define USE_MINGW_SETJMP_TWO_ARGS #endif
-#ifdef __cplusplus -extern "C" { -#endif - -#ifndef __GNUC_VA_LIST -#define __GNUC_VA_LIST - typedef __builtin_va_list __gnuc_va_list; -#endif - -#ifndef _VA_LIST_DEFINED -#define _VA_LIST_DEFINED - typedef __gnuc_va_list va_list; -#endif - /* Diable deprecation for now! */ #define _CRT_SECURE_NO_DEPRECATE #define _CRT_SECURE_NO_DEPRECATE_CORE #ifdef __WINESRC__ #define _CRT_NONSTDC_NO_DEPRECATE -#endif - -#if (defined(_MSC_VER) && __STDC__)// || !defined(__WINESRC__) -#define NO_OLDNAMES -#endif - -#ifdef __cplusplus -} #endif
#define __crt_typefix(ctype) @@ -207,26 +187,5 @@ #define _CRT_UNUSED(x) (void)x #endif
-/* These are here for intrin.h */ -#ifndef _SIZE_T_DEFINED -#define _SIZE_T_DEFINED -#ifdef _WIN64 - typedef unsigned __int64 size_t; -#else - typedef unsigned int size_t; -#endif -#endif - -#ifndef _UINTPTR_T_DEFINED -#define _UINTPTR_T_DEFINED -#ifdef _WIN64 - typedef unsigned __int64 uintptr_t; -#else - typedef unsigned int uintptr_t; -#endif -#endif - -#include <mingw32/intrin.h> - #endif /* !_INC_MINGW */
Modified: trunk/reactos/include/crt/conio.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/crt/conio.h?rev=414... ============================================================================== --- trunk/reactos/include/crt/conio.h [iso-8859-1] (original) +++ trunk/reactos/include/crt/conio.h [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -7,6 +7,9 @@ #define _INC_CONIO
#include <crtdefs.h> + +#define __need___va_list +#include <stdarg.h>
#ifdef __cplusplus extern "C" {
Modified: trunk/reactos/include/crt/mingw32/intrin.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/crt/mingw32/intrin.... ============================================================================== --- trunk/reactos/include/crt/mingw32/intrin.h [iso-8859-1] (original) +++ trunk/reactos/include/crt/mingw32/intrin.h [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -30,8 +30,24 @@
#ifndef RC_INVOKED
-#ifndef __GNUC__ -#error Unsupported compiler +#define __INTRIN_INLINE extern __inline__ __attribute__((__always_inline__,__gnu_inline__)) + +#ifndef _SIZE_T_DEFINED +#define _SIZE_T_DEFINED +#ifdef _WIN64 + typedef unsigned __int64 size_t; +#else + typedef unsigned int size_t; +#endif +#endif + +#ifndef _UINTPTR_T_DEFINED +#define _UINTPTR_T_DEFINED +#ifdef _WIN64 + typedef unsigned __int64 uintptr_t; +#else + typedef unsigned int uintptr_t; +#endif #endif
/*
Modified: trunk/reactos/include/crt/mingw32/intrin_arm.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/crt/mingw32/intrin_... ============================================================================== --- trunk/reactos/include/crt/mingw32/intrin_arm.h [iso-8859-1] (original) +++ trunk/reactos/include/crt/mingw32/intrin_arm.h [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -34,10 +34,10 @@
#define _ReadWriteBarrier() __sync_synchronize()
-static __inline__ __attribute__((always_inline)) long _InterlockedCompareExchange(volatile long * const dest, const long exch, const long comp) +__INTRIN_INLINE long _InterlockedCompareExchange(volatile long * const dest, const long exch, const long comp) { long a, b; - + __asm__ __volatile__ ( "0:\n\t" "ldr %1, [%2]\n\t" "cmp %1, %4\n\t" @@ -50,11 +50,11 @@ : "=&r" (a), "=&r" (b) : "r" (dest), "r" (exch), "r" (comp) : "cc", "memory"); - + return a; }
-static __inline__ __attribute__((always_inline)) long long _InterlockedCompareExchange64(volatile long long * const dest, const long long exch, const long long comp) +__INTRIN_INLINE long long _InterlockedCompareExchange64(volatile long long * const dest, const long long exch, const long long comp) { // // FIXME @@ -65,16 +65,16 @@ return result; }
-static __inline__ __attribute__((always_inline)) void * _InterlockedCompareExchangePointer(void * volatile * const Destination, void * const Exchange, void * const Comperand) +__INTRIN_INLINE void * _InterlockedCompareExchangePointer(void * volatile * const Destination, void * const Exchange, void * const Comperand) { return (void*)_InterlockedCompareExchange((volatile long* const)Destination, (const long)Exchange, (const long)Comperand); }
-static __inline__ __attribute__((always_inline)) long _InterlockedExchangeAdd(volatile long * const dest, const long add) +__INTRIN_INLINE long _InterlockedExchangeAdd(volatile long * const dest, const long add) { long a, b, c; - + __asm__ __volatile__ ( "0:\n\t" "ldr %0, [%3]\n\t" "add %1, %0, %4\n\t" @@ -85,201 +85,201 @@ : "=&r" (a), "=&r" (b), "=&r" (c) : "r" (dest), "r" (add) : "cc", "memory"); - + return a; }
-static __inline__ __attribute__((always_inline)) long _InterlockedExchange(volatile long * const dest, const long exch) +__INTRIN_INLINE long _InterlockedExchange(volatile long * const dest, const long exch) { long a; - + __asm__ __volatile__ ( "swp %0, %2, [%1]" : "=&r" (a) : "r" (dest), "r" (exch)); - + return a; }
-static __inline__ __attribute__((always_inline)) void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value) +__INTRIN_INLINE void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value) { return _InterlockedExchange(Target, Value); }
-static __inline__ __attribute__((always_inline)) char _InterlockedAnd8(volatile char * const value, const char mask) +__INTRIN_INLINE char _InterlockedAnd8(volatile char * const value, const char mask) { char x; char y; - - y = *value; - + + y = *value; + do { x = y; y = _InterlockedCompareExchange8(value, x & mask, x); } while(y != x); - - return y; -} - -static __inline__ __attribute__((always_inline)) short _InterlockedAnd16(volatile short * const value, const short mask) + + return y; +} + +__INTRIN_INLINE short _InterlockedAnd16(volatile short * const value, const short mask) { short x; short y; - - y = *value; - + + y = *value; + do { x = y; y = _InterlockedCompareExchange16(value, x & mask, x); } while(y != x); - - return y; -} - -static __inline__ __attribute__((always_inline)) long _InterlockedAnd(volatile long * const value, const long mask) + + return y; +} + +__INTRIN_INLINE long _InterlockedAnd(volatile long * const value, const long mask) { long x; long y; - - y = *value; - + + y = *value; + do { x = y; y = _InterlockedCompareExchange(value, x & mask, x); } while(y != x); - - return y; -} - -static __inline__ __attribute__((always_inline)) char _InterlockedOr8(volatile char * const value, const char mask) + + return y; +} + +__INTRIN_INLINE char _InterlockedOr8(volatile char * const value, const char mask) { char x; char y; - - y = *value; - + + y = *value; + do { x = y; y = _InterlockedCompareExchange8(value, x | mask, x); } while(y != x); - - return y; -} - -static __inline__ __attribute__((always_inline)) short _InterlockedOr16(volatile short * const value, const short mask) + + return y; +} + +__INTRIN_INLINE short _InterlockedOr16(volatile short * const value, const short mask) { short x; short y; - - y = *value; - + + y = *value; + do { x = y; y = _InterlockedCompareExchange16(value, x | mask, x); } while(y != x); - - return y; -} - -static __inline__ __attribute__((always_inline)) long _InterlockedOr(volatile long * const value, const long mask) + + return y; +} + +__INTRIN_INLINE long _InterlockedOr(volatile long * const value, const long mask) { long x; long y; - - y = *value; - + + y = *value; + do { x = y; y = _InterlockedCompareExchange(value, x | mask, x); } while(y != x); - - return y; -} - -static __inline__ __attribute__((always_inline)) char _InterlockedXor8(volatile char * const value, const char mask) + + return y; +} + +__INTRIN_INLINE char _InterlockedXor8(volatile char * const value, const char mask) { char x; char y; - - y = *value; - + + y = *value; + do { x = y; y = _InterlockedCompareExchange8(value, x ^ mask, x); } while(y != x); - - return y; -} - -static __inline__ __attribute__((always_inline)) short _InterlockedXor16(volatile short * const value, const short mask) + + return y; +} + +__INTRIN_INLINE short _InterlockedXor16(volatile short * const value, const short mask) { short x; short y; - - y = *value; - + + y = *value; + do { x = y; y = _InterlockedCompareExchange16(value, x ^ mask, x); } while(y != x); - - return y; -} - -static __inline__ __attribute__((always_inline)) long _InterlockedXor(volatile long * const value, const long mask) + + return y; +} + +__INTRIN_INLINE long _InterlockedXor(volatile long * const value, const long mask) { long x; long y; - - y = *value; - + + y = *value; + do { x = y; y = _InterlockedCompareExchange(value, x ^ mask, x); } while(y != x); - - return y; -} - -static __inline__ __attribute__((always_inline)) long _InterlockedDecrement(volatile long * const lpAddend) + + return y; +} + +__INTRIN_INLINE long _InterlockedDecrement(volatile long * const lpAddend) { return _InterlockedExchangeAdd(lpAddend, -1) - 1; }
-static __inline__ __attribute__((always_inline)) long _InterlockedIncrement(volatile long * const lpAddend) +__INTRIN_INLINE long _InterlockedIncrement(volatile long * const lpAddend) { return _InterlockedExchangeAdd(lpAddend, 1) + 1; }
-static __inline__ __attribute__((always_inline)) long _InterlockedDecrement16(volatile short * const lpAddend) +__INTRIN_INLINE long _InterlockedDecrement16(volatile short * const lpAddend) { return _InterlockedExchangeAdd16(lpAddend, -1) - 1; }
-static __inline__ __attribute__((always_inline)) long _InterlockedIncrement16(volatile short * const lpAddend) +__INTRIN_INLINE long _InterlockedIncrement16(volatile short * const lpAddend) { return _InterlockedExchangeAdd16(lpAddend, 1) + 1; }
-static __inline__ __attribute__((always_inline)) void _disable(void) +__INTRIN_INLINE void _disable(void) { __asm__ __volatile__ ( @@ -289,7 +289,7 @@ ); }
-static __inline__ __attribute__((always_inline)) void _enable(void) +__INTRIN_INLINE void _enable(void) { __asm__ __volatile__ ( @@ -300,7 +300,7 @@ }
#ifndef __MSVCRT__ -static __inline__ __attribute__((always_inline)) unsigned long _rotl(const unsigned long value, const unsigned char shift) +__INTRIN_INLINE unsigned long _rotl(const unsigned long value, const unsigned char shift) { return (((value) << ((int)(shift))) | ((value) >> (32 - (int)(shift)))); }
Modified: trunk/reactos/include/crt/mingw32/intrin_x86.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/crt/mingw32/intrin_... ============================================================================== --- trunk/reactos/include/crt/mingw32/intrin_x86.h [iso-8859-1] (original) +++ trunk/reactos/include/crt/mingw32/intrin_x86.h [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -80,7 +80,7 @@ #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100 #define _ReadWriteBarrier() __sync_synchronize() #else -static void __inline__ __attribute__((always_inline)) _MemoryBarrier(void) +__INTRIN_INLINE void _MemoryBarrier(void) { __asm__ __volatile__("" : : : "memory"); } @@ -93,27 +93,27 @@
#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100
-static __inline__ __attribute__((always_inline)) char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand) +__INTRIN_INLINE char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand) { return __sync_val_compare_and_swap(Destination, Comperand, Exchange); }
-static __inline__ __attribute__((always_inline)) short _InterlockedCompareExchange16(volatile short * const Destination, const short Exchange, const short Comperand) +__INTRIN_INLINE short _InterlockedCompareExchange16(volatile short * const Destination, const short Exchange, const short Comperand) { return __sync_val_compare_and_swap(Destination, Comperand, Exchange); }
-static __inline__ __attribute__((always_inline)) long _InterlockedCompareExchange(volatile long * const Destination, const long Exchange, const long Comperand) +__INTRIN_INLINE long _InterlockedCompareExchange(volatile long * const Destination, const long Exchange, const long Comperand) { return __sync_val_compare_and_swap(Destination, Comperand, Exchange); }
-static __inline__ __attribute__((always_inline)) void * _InterlockedCompareExchangePointer(void * volatile * const Destination, void * const Exchange, void * const Comperand) +__INTRIN_INLINE void * _InterlockedCompareExchangePointer(void * volatile * const Destination, void * const Exchange, void * const Comperand) { return __sync_val_compare_and_swap(Destination, Comperand, Exchange); }
-static __inline__ __attribute__((always_inline)) long _InterlockedExchange(volatile long * const Target, const long Value) +__INTRIN_INLINE long _InterlockedExchange(volatile long * const Target, const long Value) { /* NOTE: __sync_lock_test_and_set would be an acquire barrier, so we force a full barrier */ __sync_synchronize(); @@ -121,7 +121,7 @@ }
#if defined(_M_AMD64) -static __inline__ __attribute__((always_inline)) long long _InterlockedExchange64(volatile long long * const Target, const long long Value) +__INTRIN_INLINE long long _InterlockedExchange64(volatile long long * const Target, const long long Value) { /* NOTE: __sync_lock_test_and_set would be an acquire barrier, so we force a full barrier */ __sync_synchronize(); @@ -129,148 +129,148 @@ } #endif
-static __inline__ __attribute__((always_inline)) void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value) +__INTRIN_INLINE void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value) { /* NOTE: ditto */ __sync_synchronize(); return __sync_lock_test_and_set(Target, Value); }
-static __inline__ __attribute__((always_inline)) long _InterlockedExchangeAdd16(volatile short * const Addend, const short Value) +__INTRIN_INLINE long _InterlockedExchangeAdd16(volatile short * const Addend, const short Value) { return __sync_fetch_and_add(Addend, Value); }
-static __inline__ __attribute__((always_inline)) long _InterlockedExchangeAdd(volatile long * const Addend, const long Value) +__INTRIN_INLINE long _InterlockedExchangeAdd(volatile long * const Addend, const long Value) { return __sync_fetch_and_add(Addend, Value); }
#if defined(_M_AMD64) -static __inline__ __attribute__((always_inline)) long long _InterlockedExchangeAdd64(volatile long long * const Addend, const long long Value) +__INTRIN_INLINE long long _InterlockedExchangeAdd64(volatile long long * const Addend, const long long Value) { return __sync_fetch_and_add(Addend, Value); } #endif
-static __inline__ __attribute__((always_inline)) char _InterlockedAnd8(volatile char * const value, const char mask) +__INTRIN_INLINE char _InterlockedAnd8(volatile char * const value, const char mask) { return __sync_fetch_and_and(value, mask); }
-static __inline__ __attribute__((always_inline)) short _InterlockedAnd16(volatile short * const value, const short mask) +__INTRIN_INLINE short _InterlockedAnd16(volatile short * const value, const short mask) { return __sync_fetch_and_and(value, mask); }
-static __inline__ __attribute__((always_inline)) long _InterlockedAnd(volatile long * const value, const long mask) +__INTRIN_INLINE long _InterlockedAnd(volatile long * const value, const long mask) { return __sync_fetch_and_and(value, mask); }
#if defined(_M_AMD64) -static __inline__ __attribute__((always_inline)) long _InterlockedAnd64(volatile long long * const value, const long long mask) +__INTRIN_INLINE long _InterlockedAnd64(volatile long long * const value, const long long mask) { return __sync_fetch_and_and(value, mask); } #endif
-static __inline__ __attribute__((always_inline)) char _InterlockedOr8(volatile char * const value, const char mask) +__INTRIN_INLINE char _InterlockedOr8(volatile char * const value, const char mask) { return __sync_fetch_and_or(value, mask); }
-static __inline__ __attribute__((always_inline)) short _InterlockedOr16(volatile short * const value, const short mask) +__INTRIN_INLINE short _InterlockedOr16(volatile short * const value, const short mask) { return __sync_fetch_and_or(value, mask); }
-static __inline__ __attribute__((always_inline)) long _InterlockedOr(volatile long * const value, const long mask) +__INTRIN_INLINE long _InterlockedOr(volatile long * const value, const long mask) { return __sync_fetch_and_or(value, mask); }
#if defined(_M_AMD64) -static __inline__ __attribute__((always_inline)) long _InterlockedOr64(volatile long long * const value, const long long mask) +__INTRIN_INLINE long _InterlockedOr64(volatile long long * const value, const long long mask) { return __sync_fetch_and_or(value, mask); } #endif
-static __inline__ __attribute__((always_inline)) char _InterlockedXor8(volatile char * const value, const char mask) +__INTRIN_INLINE char _InterlockedXor8(volatile char * const value, const char mask) { return __sync_fetch_and_xor(value, mask); }
-static __inline__ __attribute__((always_inline)) short _InterlockedXor16(volatile short * const value, const short mask) +__INTRIN_INLINE short _InterlockedXor16(volatile short * const value, const short mask) { return __sync_fetch_and_xor(value, mask); }
-static __inline__ __attribute__((always_inline)) long _InterlockedXor(volatile long * const value, const long mask) +__INTRIN_INLINE long _InterlockedXor(volatile long * const value, const long mask) { return __sync_fetch_and_xor(value, mask); }
#else
-static __inline__ __attribute__((always_inline)) char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand) +__INTRIN_INLINE char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand) { char retval = Comperand; __asm__("lock; cmpxchgb %b[Exchange], %[Destination]" : [retval] "+a" (retval) : [Destination] "m" (*Destination), [Exchange] "q" (Exchange) : "memory"); return retval; }
-static __inline__ __attribute__((always_inline)) short _InterlockedCompareExchange16(volatile short * const Destination, const short Exchange, const short Comperand) +__INTRIN_INLINE short _InterlockedCompareExchange16(volatile short * const Destination, const short Exchange, const short Comperand) { short retval = Comperand; __asm__("lock; cmpxchgw %w[Exchange], %[Destination]" : [retval] "+a" (retval) : [Destination] "m" (*Destination), [Exchange] "q" (Exchange): "memory"); return retval; }
-static __inline__ __attribute__((always_inline)) long _InterlockedCompareExchange(volatile long * const Destination, const long Exchange, const long Comperand) +__INTRIN_INLINE long _InterlockedCompareExchange(volatile long * const Destination, const long Exchange, const long Comperand) { long retval = Comperand; __asm__("lock; cmpxchgl %k[Exchange], %[Destination]" : [retval] "+a" (retval) : [Destination] "m" (*Destination), [Exchange] "q" (Exchange): "memory"); return retval; }
-static __inline__ __attribute__((always_inline)) void * _InterlockedCompareExchangePointer(void * volatile * const Destination, void * const Exchange, void * const Comperand) +__INTRIN_INLINE void * _InterlockedCompareExchangePointer(void * volatile * const Destination, void * const Exchange, void * const Comperand) { void * retval = (void *)Comperand; __asm__("lock; cmpxchgl %k[Exchange], %[Destination]" : [retval] "=a" (retval) : "[retval]" (retval), [Destination] "m" (*Destination), [Exchange] "q" (Exchange) : "memory"); return retval; }
-static __inline__ __attribute__((always_inline)) long _InterlockedExchange(volatile long * const Target, const long Value) +__INTRIN_INLINE long _InterlockedExchange(volatile long * const Target, const long Value) { long retval = Value; __asm__("xchgl %[retval], %[Target]" : [retval] "+r" (retval) : [Target] "m" (*Target) : "memory"); return retval; }
-static __inline__ __attribute__((always_inline)) void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value) +__INTRIN_INLINE void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value) { void * retval = Value; __asm__("xchgl %[retval], %[Target]" : [retval] "+r" (retval) : [Target] "m" (*Target) : "memory"); return retval; }
-static __inline__ __attribute__((always_inline)) long _InterlockedExchangeAdd16(volatile short * const Addend, const short Value) +__INTRIN_INLINE long _InterlockedExchangeAdd16(volatile short * const Addend, const short Value) { long retval = Value; __asm__("lock; xaddw %[retval], %[Addend]" : [retval] "+r" (retval) : [Addend] "m" (*Addend) : "memory"); return retval; }
-static __inline__ __attribute__((always_inline)) long _InterlockedExchangeAdd(volatile long * const Addend, const long Value) +__INTRIN_INLINE long _InterlockedExchangeAdd(volatile long * const Addend, const long Value) { long retval = Value; __asm__("lock; xaddl %[retval], %[Addend]" : [retval] "+r" (retval) : [Addend] "m" (*Addend) : "memory"); return retval; }
-static __inline__ __attribute__((always_inline)) char _InterlockedAnd8(volatile char * const value, const char mask) +__INTRIN_INLINE char _InterlockedAnd8(volatile char * const value, const char mask) { char x; char y; @@ -287,7 +287,7 @@ return y; }
-static __inline__ __attribute__((always_inline)) short _InterlockedAnd16(volatile short * const value, const short mask) +__INTRIN_INLINE short _InterlockedAnd16(volatile short * const value, const short mask) { short x; short y; @@ -304,7 +304,7 @@ return y; }
-static __inline__ __attribute__((always_inline)) long _InterlockedAnd(volatile long * const value, const long mask) +__INTRIN_INLINE long _InterlockedAnd(volatile long * const value, const long mask) { long x; long y; @@ -321,7 +321,7 @@ return y; }
-static __inline__ __attribute__((always_inline)) char _InterlockedOr8(volatile char * const value, const char mask) +__INTRIN_INLINE char _InterlockedOr8(volatile char * const value, const char mask) { char x; char y; @@ -338,7 +338,7 @@ return y; }
-static __inline__ __attribute__((always_inline)) short _InterlockedOr16(volatile short * const value, const short mask) +__INTRIN_INLINE short _InterlockedOr16(volatile short * const value, const short mask) { short x; short y; @@ -355,7 +355,7 @@ return y; }
-static __inline__ __attribute__((always_inline)) long _InterlockedOr(volatile long * const value, const long mask) +__INTRIN_INLINE long _InterlockedOr(volatile long * const value, const long mask) { long x; long y; @@ -372,7 +372,7 @@ return y; }
-static __inline__ __attribute__((always_inline)) char _InterlockedXor8(volatile char * const value, const char mask) +__INTRIN_INLINE char _InterlockedXor8(volatile char * const value, const char mask) { char x; char y; @@ -389,7 +389,7 @@ return y; }
-static __inline__ __attribute__((always_inline)) short _InterlockedXor16(volatile short * const value, const short mask) +__INTRIN_INLINE short _InterlockedXor16(volatile short * const value, const short mask) { short x; short y; @@ -406,7 +406,7 @@ return y; }
-static __inline__ __attribute__((always_inline)) long _InterlockedXor(volatile long * const value, const long mask) +__INTRIN_INLINE long _InterlockedXor(volatile long * const value, const long mask) { long x; long y; @@ -427,14 +427,14 @@
#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100 && defined(__x86_64__)
-static __inline__ __attribute__((always_inline)) long long _InterlockedCompareExchange64(volatile long long * const Destination, const long long Exchange, const long long Comperand) +__INTRIN_INLINE long long _InterlockedCompareExchange64(volatile long long * const Destination, const long long Exchange, const long long Comperand) { return __sync_val_compare_and_swap(Destination, Comperand, Exchange); }
#else
-static __inline__ __attribute__((always_inline)) long long _InterlockedCompareExchange64(volatile long long * const Destination, const long long Exchange, const long long Comperand) +__INTRIN_INLINE long long _InterlockedCompareExchange64(volatile long long * const Destination, const long long Exchange, const long long Comperand) { long long retval = Comperand;
@@ -453,7 +453,7 @@
#endif
-static __inline__ __attribute__((always_inline)) long _InterlockedAddLargeStatistic(volatile long long * const Addend, const long Value) +__INTRIN_INLINE long _InterlockedAddLargeStatistic(volatile long long * const Addend, const long Value) { __asm__ ( @@ -469,39 +469,39 @@ return Value; }
-static __inline__ __attribute__((always_inline)) long _InterlockedDecrement(volatile long * const lpAddend) +__INTRIN_INLINE long _InterlockedDecrement(volatile long * const lpAddend) { return _InterlockedExchangeAdd(lpAddend, -1) - 1; }
-static __inline__ __attribute__((always_inline)) long _InterlockedIncrement(volatile long * const lpAddend) +__INTRIN_INLINE long _InterlockedIncrement(volatile long * const lpAddend) { return _InterlockedExchangeAdd(lpAddend, 1) + 1; }
-static __inline__ __attribute__((always_inline)) long _InterlockedDecrement16(volatile short * const lpAddend) +__INTRIN_INLINE long _InterlockedDecrement16(volatile short * const lpAddend) { return _InterlockedExchangeAdd16(lpAddend, -1) - 1; }
-static __inline__ __attribute__((always_inline)) long _InterlockedIncrement16(volatile short * const lpAddend) +__INTRIN_INLINE long _InterlockedIncrement16(volatile short * const lpAddend) { return _InterlockedExchangeAdd16(lpAddend, 1) + 1; }
#if defined(_M_AMD64) -static __inline__ __attribute__((always_inline)) long long _InterlockedDecrement64(volatile long long * const lpAddend) +__INTRIN_INLINE long long _InterlockedDecrement64(volatile long long * const lpAddend) { return _InterlockedExchangeAdd64(lpAddend, -1) - 1; }
-static __inline__ __attribute__((always_inline)) long long _InterlockedIncrement64(volatile long long * const lpAddend) +__INTRIN_INLINE long long _InterlockedIncrement64(volatile long long * const lpAddend) { return _InterlockedExchangeAdd64(lpAddend, 1) + 1; } #endif
-static __inline__ __attribute__((always_inline)) unsigned char _interlockedbittestandreset(volatile long * a, const long b) +__INTRIN_INLINE unsigned char _interlockedbittestandreset(volatile long * a, const long b) { unsigned char retval; __asm__("lock; btrl %[b], %[a]; setb %b[retval]" : [retval] "=q" (retval), [a] "+m" (*a) : [b] "Ir" (b) : "memory"); @@ -509,7 +509,7 @@ }
#if defined(_M_AMD64) -static __inline__ __attribute__((always_inline)) unsigned char _interlockedbittestandreset64(volatile long long * a, const long long b) +__INTRIN_INLINE unsigned char _interlockedbittestandreset64(volatile long long * a, const long long b) { unsigned char retval; __asm__("lock; btrq %[b], %[a]; setb %b[retval]" : [retval] "=r" (retval), [a] "+m" (*a) : [b] "Ir" (b) : "memory"); @@ -517,7 +517,7 @@ } #endif
-static __inline__ __attribute__((always_inline)) unsigned char _interlockedbittestandset(volatile long * a, const long b) +__INTRIN_INLINE unsigned char _interlockedbittestandset(volatile long * a, const long b) { unsigned char retval; __asm__("lock; btsl %[b], %[a]; setc %b[retval]" : [retval] "=q" (retval), [a] "+m" (*a) : [b] "Ir" (b) : "memory"); @@ -525,7 +525,7 @@ }
#if defined(_M_AMD64) -static __inline__ __attribute__((always_inline)) unsigned char _interlockedbittestandset64(volatile long long * a, const long long b) +__INTRIN_INLINE unsigned char _interlockedbittestandset64(volatile long long * a, const long long b) { unsigned char retval; __asm__("lock; btsq %[b], %[a]; setc %b[retval]" : [retval] "=r" (retval), [a] "+m" (*a) : [b] "Ir" (b) : "memory"); @@ -535,7 +535,7 @@
/*** String operations ***/ /* NOTE: we don't set a memory clobber in the __stosX functions because Visual C++ doesn't */ -static __inline__ __attribute__((always_inline)) void __stosb(unsigned char * Dest, const unsigned char Data, size_t Count) +__INTRIN_INLINE void __stosb(unsigned char * Dest, const unsigned char Data, size_t Count) { __asm__ __volatile__ ( @@ -545,7 +545,7 @@ ); }
-static __inline__ __attribute__((always_inline)) void __stosw(unsigned short * Dest, const unsigned short Data, size_t Count) +__INTRIN_INLINE void __stosw(unsigned short * Dest, const unsigned short Data, size_t Count) { __asm__ __volatile__ ( @@ -555,7 +555,7 @@ ); }
-static __inline__ __attribute__((always_inline)) void __stosd(unsigned long * Dest, const unsigned long Data, size_t Count) +__INTRIN_INLINE void __stosd(unsigned long * Dest, const unsigned long Data, size_t Count) { __asm__ __volatile__ ( @@ -565,7 +565,7 @@ ); }
-static __inline__ __attribute__((always_inline)) void __movsb(unsigned char * Destination, const unsigned char * Source, size_t Count) +__INTRIN_INLINE void __movsb(unsigned char * Destination, const unsigned char * Source, size_t Count) { __asm__ __volatile__ ( @@ -575,7 +575,7 @@ ); }
-static __inline__ __attribute__((always_inline)) void __movsw(unsigned short * Destination, const unsigned short * Source, size_t Count) +__INTRIN_INLINE void __movsw(unsigned short * Destination, const unsigned short * Source, size_t Count) { __asm__ __volatile__ ( @@ -585,7 +585,7 @@ ); }
-static __inline__ __attribute__((always_inline)) void __movsd(unsigned long * Destination, const unsigned long * Source, size_t Count) +__INTRIN_INLINE void __movsd(unsigned long * Destination, const unsigned long * Source, size_t Count) { __asm__ __volatile__ ( @@ -598,160 +598,160 @@ #if defined(_M_AMD64) /*** GS segment addressing ***/
-static __inline__ __attribute__((always_inline)) void __writegsbyte(const unsigned long Offset, const unsigned char Data) +__INTRIN_INLINE void __writegsbyte(const unsigned long Offset, const unsigned char Data) { __asm__ __volatile__("movb %b[Data], %%gs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __writegsword(const unsigned long Offset, const unsigned short Data) +__INTRIN_INLINE void __writegsword(const unsigned long Offset, const unsigned short Data) { __asm__ __volatile__("movw %w[Data], %%gs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __writegsdword(const unsigned long Offset, const unsigned long Data) +__INTRIN_INLINE void __writegsdword(const unsigned long Offset, const unsigned long Data) { __asm__ __volatile__("movl %k[Data], %%gs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __writegsqword(const unsigned long Offset, const unsigned __int64 Data) +__INTRIN_INLINE void __writegsqword(const unsigned long Offset, const unsigned __int64 Data) { __asm__ __volatile__("movq %q[Data], %%gs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) unsigned char __readgsbyte(const unsigned long Offset) +__INTRIN_INLINE unsigned char __readgsbyte(const unsigned long Offset) { unsigned char value; __asm__ __volatile__("movb %%gs:%a[Offset], %b[value]" : [value] "=q" (value) : [Offset] "irm" (Offset)); return value; }
-static __inline__ __attribute__((always_inline)) unsigned short __readgsword(const unsigned long Offset) +__INTRIN_INLINE unsigned short __readgsword(const unsigned long Offset) { unsigned short value; __asm__ __volatile__("movw %%gs:%a[Offset], %w[value]" : [value] "=q" (value) : [Offset] "irm" (Offset)); return value; }
-static __inline__ __attribute__((always_inline)) unsigned long __readgsdword(const unsigned long Offset) +__INTRIN_INLINE unsigned long __readgsdword(const unsigned long Offset) { unsigned long value; __asm__ __volatile__("movl %%gs:%a[Offset], %k[value]" : [value] "=q" (value) : [Offset] "irm" (Offset)); return value; }
-static __inline__ __attribute__((always_inline)) unsigned __int64 __readgsqword(const unsigned long Offset) +__INTRIN_INLINE unsigned __int64 __readgsqword(const unsigned long Offset) { unsigned __int64 value; __asm__ __volatile__("movq %%gs:%a[Offset], %q[value]" : [value] "=q" (value) : [Offset] "irm" (Offset)); return value; }
-static __inline__ __attribute__((always_inline)) void __incgsbyte(const unsigned long Offset) +__INTRIN_INLINE void __incgsbyte(const unsigned long Offset) { __asm__ __volatile__("incb %%gs:%a[Offset]" : : [Offset] "ir" (Offset) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __incgsword(const unsigned long Offset) +__INTRIN_INLINE void __incgsword(const unsigned long Offset) { __asm__ __volatile__("incw %%gs:%a[Offset]" : : [Offset] "ir" (Offset) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __incgsdword(const unsigned long Offset) +__INTRIN_INLINE void __incgsdword(const unsigned long Offset) { __asm__ __volatile__("incl %%gs:%a[Offset]" : : [Offset] "ir" (Offset) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __addgsbyte(const unsigned long Offset, const unsigned char Data) +__INTRIN_INLINE void __addgsbyte(const unsigned long Offset, const unsigned char Data) { __asm__ __volatile__("addb %b[Data], %%gs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __addgsword(const unsigned long Offset, const unsigned short Data) +__INTRIN_INLINE void __addgsword(const unsigned long Offset, const unsigned short Data) { __asm__ __volatile__("addw %w[Data], %%gs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __addgsdword(const unsigned long Offset, const unsigned int Data) +__INTRIN_INLINE void __addgsdword(const unsigned long Offset, const unsigned int Data) { __asm__ __volatile__("addl %k[Data], %%gs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __addgsqword(const unsigned long Offset, const unsigned __int64 Data) +__INTRIN_INLINE void __addgsqword(const unsigned long Offset, const unsigned __int64 Data) { __asm__ __volatile__("addq %k[Data], %%gs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
#else /*** FS segment addressing ***/ -static __inline__ __attribute__((always_inline)) void __writefsbyte(const unsigned long Offset, const unsigned char Data) +__INTRIN_INLINE void __writefsbyte(const unsigned long Offset, const unsigned char Data) { __asm__ __volatile__("movb %b[Data], %%fs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __writefsword(const unsigned long Offset, const unsigned short Data) +__INTRIN_INLINE void __writefsword(const unsigned long Offset, const unsigned short Data) { __asm__ __volatile__("movw %w[Data], %%fs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __writefsdword(const unsigned long Offset, const unsigned long Data) +__INTRIN_INLINE void __writefsdword(const unsigned long Offset, const unsigned long Data) { __asm__ __volatile__("movl %k[Data], %%fs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) unsigned char __readfsbyte(const unsigned long Offset) +__INTRIN_INLINE unsigned char __readfsbyte(const unsigned long Offset) { unsigned char value; __asm__ __volatile__("movb %%fs:%a[Offset], %b[value]" : [value] "=q" (value) : [Offset] "irm" (Offset) : "memory"); return value; }
-static __inline__ __attribute__((always_inline)) unsigned short __readfsword(const unsigned long Offset) +__INTRIN_INLINE unsigned short __readfsword(const unsigned long Offset) { unsigned short value; - __asm__ __volatile__("movw %%fs:%a[Offset], %w[value]" : [value] "=q" (value) : [Offset] "irm" (Offset)); + __asm__ __volatile__("movw %%fs:%a[Offset], %w[value]" : [value] "=q" (value) : [Offset] "irm" (Offset) : "memory"); return value; }
-static __inline__ __attribute__((always_inline)) unsigned long __readfsdword(const unsigned long Offset) +__INTRIN_INLINE unsigned long __readfsdword(const unsigned long Offset) { unsigned long value; - __asm__ __volatile__("movl %%fs:%a[Offset], %k[value]" : [value] "=q" (value) : [Offset] "irm" (Offset)); + __asm__ __volatile__("movl %%fs:%a[Offset], %k[value]" : [value] "=q" (value) : [Offset] "irm" (Offset) : "memory"); return value; }
-static __inline__ __attribute__((always_inline)) void __incfsbyte(const unsigned long Offset) +__INTRIN_INLINE void __incfsbyte(const unsigned long Offset) { __asm__ __volatile__("incb %%fs:%a[Offset]" : : [Offset] "ir" (Offset) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __incfsword(const unsigned long Offset) +__INTRIN_INLINE void __incfsword(const unsigned long Offset) { __asm__ __volatile__("incw %%fs:%a[Offset]" : : [Offset] "ir" (Offset) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __incfsdword(const unsigned long Offset) +__INTRIN_INLINE void __incfsdword(const unsigned long Offset) { __asm__ __volatile__("incl %%fs:%a[Offset]" : : [Offset] "ir" (Offset) : "memory"); }
/* NOTE: the bizarre implementation of __addfsxxx mimics the broken Visual C++ behavior */ -static __inline__ __attribute__((always_inline)) void __addfsbyte(const unsigned long Offset, const unsigned char Data) +__INTRIN_INLINE void __addfsbyte(const unsigned long Offset, const unsigned char Data) { if(!__builtin_constant_p(Offset)) - __asm__ __volatile__("addb %k[Offset], %%fs:%a[Offset]" : : [Offset] "r" (Offset) : "memory"); + __asm__ __volatile__("addb %b[Offset], %%fs:%a[Offset]" : : [Offset] "r" (Offset) : "memory"); else __asm__ __volatile__("addb %b[Data], %%fs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __addfsword(const unsigned long Offset, const unsigned short Data) +__INTRIN_INLINE void __addfsword(const unsigned long Offset, const unsigned short Data) { if(!__builtin_constant_p(Offset)) - __asm__ __volatile__("addw %k[Offset], %%fs:%a[Offset]" : : [Offset] "r" (Offset) : "memory"); + __asm__ __volatile__("addw %w[Offset], %%fs:%a[Offset]" : : [Offset] "r" (Offset) : "memory"); else __asm__ __volatile__("addw %w[Data], %%fs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __addfsdword(const unsigned long Offset, const unsigned int Data) +__INTRIN_INLINE void __addfsdword(const unsigned long Offset, const unsigned int Data) { if(!__builtin_constant_p(Offset)) __asm__ __volatile__("addl %k[Offset], %%fs:%a[Offset]" : : [Offset] "r" (Offset) : "memory"); @@ -762,20 +762,20 @@
/*** Bit manipulation ***/ -static __inline__ __attribute__((always_inline)) unsigned char _BitScanForward(unsigned long * const Index, const unsigned long Mask) +__INTRIN_INLINE unsigned char _BitScanForward(unsigned long * const Index, const unsigned long Mask) { __asm__("bsfl %[Mask], %[Index]" : [Index] "=r" (*Index) : [Mask] "mr" (Mask)); return Mask ? 1 : 0; }
-static __inline__ __attribute__((always_inline)) unsigned char _BitScanReverse(unsigned long * const Index, const unsigned long Mask) +__INTRIN_INLINE unsigned char _BitScanReverse(unsigned long * const Index, const unsigned long Mask) { __asm__("bsrl %[Mask], %[Index]" : [Index] "=r" (*Index) : [Mask] "mr" (Mask)); return Mask ? 1 : 0; }
/* NOTE: again, the bizarre implementation follows Visual C++ */ -static __inline__ __attribute__((always_inline)) unsigned char _bittest(const long * const a, const long b) +__INTRIN_INLINE unsigned char _bittest(const long * const a, const long b) { unsigned char retval;
@@ -787,7 +787,7 @@ return retval; }
-static __inline__ __attribute__((always_inline)) unsigned char _bittestandcomplement(long * const a, const long b) +__INTRIN_INLINE unsigned char _bittestandcomplement(long * const a, const long b) { unsigned char retval;
@@ -799,7 +799,7 @@ return retval; }
-static __inline__ __attribute__((always_inline)) unsigned char _bittestandreset(long * const a, const long b) +__INTRIN_INLINE unsigned char _bittestandreset(long * const a, const long b) { unsigned char retval;
@@ -811,7 +811,7 @@ return retval; }
-static __inline__ __attribute__((always_inline)) unsigned char _bittestandset(long * const a, const long b) +__INTRIN_INLINE unsigned char _bittestandset(long * const a, const long b) { unsigned char retval;
@@ -823,14 +823,14 @@ return retval; }
-static __inline__ __attribute__((always_inline)) unsigned char _rotl8(unsigned char value, unsigned char shift) +__INTRIN_INLINE unsigned char _rotl8(unsigned char value, unsigned char shift) { unsigned char retval; __asm__("rolb %b[shift], %b[retval]" : [retval] "=rm" (retval) : "[retval]" (value), [shift] "Nc" (shift)); return retval; }
-static __inline__ __attribute__((always_inline)) unsigned short _rotl16(unsigned short value, unsigned char shift) +__INTRIN_INLINE unsigned short _rotl16(unsigned short value, unsigned char shift) { unsigned short retval; __asm__("rolw %b[shift], %w[retval]" : [retval] "=rm" (retval) : "[retval]" (value), [shift] "Nc" (shift)); @@ -838,14 +838,14 @@ }
#ifndef __MSVCRT__ -static __inline__ __attribute__((always_inline)) unsigned int _rotl(unsigned int value, int shift) +__INTRIN_INLINE unsigned int _rotl(unsigned int value, int shift) { unsigned long retval; __asm__("roll %b[shift], %k[retval]" : [retval] "=rm" (retval) : "[retval]" (value), [shift] "Nc" (shift)); return retval; }
-static __inline__ __attribute__((always_inline)) unsigned int _rotr(unsigned int value, int shift) +__INTRIN_INLINE unsigned int _rotr(unsigned int value, int shift) { unsigned long retval; __asm__("rorl %b[shift], %k[retval]" : [retval] "=rm" (retval) : "[retval]" (value), [shift] "Nc" (shift)); @@ -853,14 +853,14 @@ } #endif
-static __inline__ __attribute__((always_inline)) unsigned char _rotr8(unsigned char value, unsigned char shift) +__INTRIN_INLINE unsigned char _rotr8(unsigned char value, unsigned char shift) { unsigned char retval; __asm__("rorb %b[shift], %b[retval]" : [retval] "=rm" (retval) : "[retval]" (value), [shift] "Nc" (shift)); return retval; }
-static __inline__ __attribute__((always_inline)) unsigned short _rotr16(unsigned short value, unsigned char shift) +__INTRIN_INLINE unsigned short _rotr16(unsigned short value, unsigned char shift) { unsigned short retval; __asm__("rorw %b[shift], %w[retval]" : [retval] "=rm" (retval) : "[retval]" (value), [shift] "Nc" (shift)); @@ -874,7 +874,7 @@ just confuses it. Also we declare Bit as an int and then truncate it to match Visual C++ behavior */ -static __inline__ __attribute__((always_inline)) unsigned long long __ll_lshift(const unsigned long long Mask, const int Bit) +__INTRIN_INLINE unsigned long long __ll_lshift(const unsigned long long Mask, const int Bit) { unsigned long long retval = Mask;
@@ -888,7 +888,7 @@ return retval; }
-static __inline__ __attribute__((always_inline)) long long __ll_rshift(const long long Mask, const int Bit) +__INTRIN_INLINE long long __ll_rshift(const long long Mask, const int Bit) { unsigned long long retval = Mask;
@@ -902,7 +902,7 @@ return retval; }
-static __inline__ __attribute__((always_inline)) unsigned long long __ull_rshift(const unsigned long long Mask, int Bit) +__INTRIN_INLINE unsigned long long __ull_rshift(const unsigned long long Mask, int Bit) { unsigned long long retval = Mask;
@@ -916,14 +916,14 @@ return retval; }
-static __inline__ __attribute__((always_inline)) unsigned short _byteswap_ushort(unsigned short value) +__INTRIN_INLINE unsigned short _byteswap_ushort(unsigned short value) { unsigned short retval; __asm__("rorw $8, %w[retval]" : [retval] "=rm" (retval) : "[retval]" (value)); return retval; }
-static __inline__ __attribute__((always_inline)) unsigned long _byteswap_ulong(unsigned long value) +__INTRIN_INLINE unsigned long _byteswap_ulong(unsigned long value) { unsigned long retval; __asm__("bswapl %[retval]" : [retval] "=rm" (retval) : "[retval]" (value)); @@ -931,14 +931,14 @@ }
#ifdef _M_AMD64 -static __inline__ __attribute__((always_inline)) unsigned __int64 _byteswap_uint64(unsigned __int64 value) +__INTRIN_INLINE unsigned __int64 _byteswap_uint64(unsigned __int64 value) { unsigned __int64 retval; __asm__("bswapq %[retval]" : [retval] "=rm" (retval) : "[retval]" (value)); return retval; } #else -static __inline__ __attribute__((always_inline)) unsigned __int64 _byteswap_uint64(unsigned __int64 value) +__INTRIN_INLINE unsigned __int64 _byteswap_uint64(unsigned __int64 value) { union { __int64 int64part; @@ -956,14 +956,14 @@ #endif
/*** 64-bit math ***/ -static __inline__ __attribute__((always_inline)) long long __emul(const int a, const int b) +__INTRIN_INLINE long long __emul(const int a, const int b) { long long retval; __asm__("imull %[b]" : "=A" (retval) : [a] "a" (a), [b] "rm" (b)); return retval; }
-static __inline__ __attribute__((always_inline)) unsigned long long __emulu(const unsigned int a, const unsigned int b) +__INTRIN_INLINE unsigned long long __emulu(const unsigned int a, const unsigned int b) { unsigned long long retval; __asm__("mull %[b]" : "=A" (retval) : [a] "a" (a), [b] "rm" (b)); @@ -972,28 +972,28 @@
/*** Port I/O ***/ -static __inline__ __attribute__((always_inline)) unsigned char __inbyte(const unsigned short Port) +__INTRIN_INLINE unsigned char __inbyte(const unsigned short Port) { unsigned char byte; __asm__ __volatile__("inb %w[Port], %b[byte]" : [byte] "=a" (byte) : [Port] "Nd" (Port)); return byte; }
-static __inline__ __attribute__((always_inline)) unsigned short __inword(const unsigned short Port) +__INTRIN_INLINE unsigned short __inword(const unsigned short Port) { unsigned short word; __asm__ __volatile__("inw %w[Port], %w[word]" : [word] "=a" (word) : [Port] "Nd" (Port)); return word; }
-static __inline__ __attribute__((always_inline)) unsigned long __indword(const unsigned short Port) +__INTRIN_INLINE unsigned long __indword(const unsigned short Port) { unsigned long dword; __asm__ __volatile__("inl %w[Port], %k[dword]" : [dword] "=a" (dword) : [Port] "Nd" (Port)); return dword; }
-static __inline__ __attribute__((always_inline)) void __inbytestring(unsigned short Port, unsigned char * Buffer, unsigned long Count) +__INTRIN_INLINE void __inbytestring(unsigned short Port, unsigned char * Buffer, unsigned long Count) { __asm__ __volatile__ ( @@ -1004,7 +1004,7 @@ ); }
-static __inline__ __attribute__((always_inline)) void __inwordstring(unsigned short Port, unsigned short * Buffer, unsigned long Count) +__INTRIN_INLINE void __inwordstring(unsigned short Port, unsigned short * Buffer, unsigned long Count) { __asm__ __volatile__ ( @@ -1015,7 +1015,7 @@ ); }
-static __inline__ __attribute__((always_inline)) void __indwordstring(unsigned short Port, unsigned long * Buffer, unsigned long Count) +__INTRIN_INLINE void __indwordstring(unsigned short Port, unsigned long * Buffer, unsigned long Count) { __asm__ __volatile__ ( @@ -1026,44 +1026,44 @@ ); }
-static __inline__ __attribute__((always_inline)) void __outbyte(unsigned short const Port, const unsigned char Data) +__INTRIN_INLINE void __outbyte(unsigned short const Port, const unsigned char Data) { __asm__ __volatile__("outb %b[Data], %w[Port]" : : [Port] "Nd" (Port), [Data] "a" (Data)); }
-static __inline__ __attribute__((always_inline)) void __outword(unsigned short const Port, const unsigned short Data) +__INTRIN_INLINE void __outword(unsigned short const Port, const unsigned short Data) { __asm__ __volatile__("outw %w[Data], %w[Port]" : : [Port] "Nd" (Port), [Data] "a" (Data)); }
-static __inline__ __attribute__((always_inline)) void __outdword(unsigned short const Port, const unsigned long Data) +__INTRIN_INLINE void __outdword(unsigned short const Port, const unsigned long Data) { __asm__ __volatile__("outl %k[Data], %w[Port]" : : [Port] "Nd" (Port), [Data] "a" (Data)); }
-static __inline__ __attribute__((always_inline)) void __outbytestring(unsigned short const Port, const unsigned char * const Buffer, const unsigned long Count) +__INTRIN_INLINE void __outbytestring(unsigned short const Port, const unsigned char * const Buffer, const unsigned long Count) { __asm__ __volatile__("rep; outsb" : : [Port] "d" (Port), [Buffer] "S" (Buffer), "c" (Count)); }
-static __inline__ __attribute__((always_inline)) void __outwordstring(unsigned short const Port, const unsigned short * const Buffer, const unsigned long Count) +__INTRIN_INLINE void __outwordstring(unsigned short const Port, const unsigned short * const Buffer, const unsigned long Count) { __asm__ __volatile__("rep; outsw" : : [Port] "d" (Port), [Buffer] "S" (Buffer), "c" (Count)); }
-static __inline__ __attribute__((always_inline)) void __outdwordstring(unsigned short const Port, const unsigned long * const Buffer, const unsigned long Count) +__INTRIN_INLINE void __outdwordstring(unsigned short const Port, const unsigned long * const Buffer, const unsigned long Count) { __asm__ __volatile__("rep; outsl" : : [Port] "d" (Port), [Buffer] "S" (Buffer), "c" (Count)); }
/*** System information ***/ -static __inline__ __attribute__((always_inline)) void __cpuid(int CPUInfo[], const int InfoType) +__INTRIN_INLINE void __cpuid(int CPUInfo[], const int InfoType) { __asm__ __volatile__("cpuid" : "=a" (CPUInfo[0]), "=b" (CPUInfo[1]), "=c" (CPUInfo[2]), "=d" (CPUInfo[3]) : "a" (InfoType)); }
-static __inline__ __attribute__((always_inline)) unsigned long long __rdtsc(void) +__INTRIN_INLINE unsigned long long __rdtsc(void) { #ifdef _M_AMD64 unsigned long long low, high; @@ -1076,12 +1076,12 @@ #endif }
-static __inline__ __attribute__((always_inline)) void __writeeflags(uintptr_t Value) +__INTRIN_INLINE void __writeeflags(uintptr_t Value) { __asm__ __volatile__("push %0\n popf" : : "rim"(Value)); }
-static __inline__ __attribute__((always_inline)) uintptr_t __readeflags(void) +__INTRIN_INLINE uintptr_t __readeflags(void) { uintptr_t retval; __asm__ __volatile__("pushf\n pop %0" : "=rm"(retval)); @@ -1089,22 +1089,22 @@ }
/*** Interrupts ***/ -static __inline__ __attribute__((always_inline)) void __debugbreak(void) +__INTRIN_INLINE void __debugbreak(void) { __asm__("int $3"); }
-static __inline__ __attribute__((always_inline)) void __int2c(void) +__INTRIN_INLINE void __int2c(void) { __asm__("int $0x2c"); }
-static __inline__ __attribute__((always_inline)) void _disable(void) +__INTRIN_INLINE void _disable(void) { __asm__("cli"); }
-static __inline__ __attribute__((always_inline)) void _enable(void) +__INTRIN_INLINE void _enable(void) { __asm__("sti"); } @@ -1112,50 +1112,50 @@
/*** Protected memory management ***/
-static __inline__ __attribute__((always_inline)) void __writecr0(const unsigned __int64 Data) +__INTRIN_INLINE void __writecr0(const unsigned __int64 Data) { __asm__("mov %[Data], %%cr0" : : [Data] "q" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __writecr3(const unsigned __int64 Data) +__INTRIN_INLINE void __writecr3(const unsigned __int64 Data) { __asm__("mov %[Data], %%cr3" : : [Data] "q" (Data) : "memory"); }
-static __inline__ __attribute__((always_inline)) void __writecr4(const unsigned __int64 Data) +__INTRIN_INLINE void __writecr4(const unsigned __int64 Data) { __asm__("mov %[Data], %%cr4" : : [Data] "q" (Data) : "memory"); }
#ifdef _M_AMD64 -static __inline__ __attribute__((always_inline)) void __writecr8(const unsigned __int64 Data) +__INTRIN_INLINE void __writecr8(const unsigned __int64 Data) { __asm__("mov %[Data], %%cr8" : : [Data] "q" (Data) : "memory"); } #endif
-static __inline__ __attribute__((always_inline)) unsigned __int64 __readcr0(void) +__INTRIN_INLINE unsigned __int64 __readcr0(void) { unsigned __int64 value; __asm__ __volatile__("mov %%cr0, %[value]" : [value] "=q" (value)); return value; }
-static __inline__ __attribute__((always_inline)) unsigned __int64 __readcr2(void) +__INTRIN_INLINE unsigned __int64 __readcr2(void) { unsigned __int64 value; __asm__ __volatile__("mov %%cr2, %[value]" : [value] "=q" (value)); return value; }
-static __inline__ __attribute__((always_inline)) unsigned __int64 __readcr3(void) +__INTRIN_INLINE unsigned __int64 __readcr3(void) { unsigned __int64 value; __asm__ __volatile__("mov %%cr3, %[value]" : [value] "=q" (value)); return value; }
-static __inline__ __attribute__((always_inline)) unsigned __int64 __readcr4(void) +__INTRIN_INLINE unsigned __int64 __readcr4(void) { unsigned __int64 value; __asm__ __volatile__("mov %%cr4, %[value]" : [value] "=q" (value)); @@ -1163,7 +1163,7 @@ }
#ifdef _M_AMD64 -static __inline__ __attribute__((always_inline)) unsigned __int64 __readcr8(void) +__INTRIN_INLINE unsigned __int64 __readcr8(void) { unsigned __int64 value; __asm__ __volatile__("movq %%cr8, %q[value]" : [value] "=q" (value)); @@ -1172,7 +1172,7 @@ #endif
#ifdef _M_AMD64 -static __inline__ __attribute__((always_inline)) unsigned __int64 __readdr(unsigned int reg) +__INTRIN_INLINE unsigned __int64 __readdr(unsigned int reg) { unsigned __int64 value; switch (reg) @@ -1205,7 +1205,7 @@ return value; }
-static __inline__ __attribute__((always_inline)) void __writedr(unsigned reg, unsigned __int64 value) +__INTRIN_INLINE void __writedr(unsigned reg, unsigned __int64 value) { switch (reg) { @@ -1237,14 +1237,14 @@ } #endif
-static __inline__ __attribute__((always_inline)) void __invlpg(void * const Address) +__INTRIN_INLINE void __invlpg(void * const Address) { __asm__("invlpg %[Address]" : : [Address] "m" (*((unsigned char *)(Address)))); }
/*** System operations ***/ -static __inline__ __attribute__((always_inline)) unsigned long long __readmsr(const int reg) +__INTRIN_INLINE unsigned long long __readmsr(const int reg) { #ifdef _M_AMD64 unsigned long low, high; @@ -1257,7 +1257,7 @@ #endif }
-static __inline__ __attribute__((always_inline)) void __writemsr(const unsigned long Register, const unsigned long long Value) +__INTRIN_INLINE void __writemsr(const unsigned long Register, const unsigned long long Value) { #ifdef _M_AMD64 __asm__ __volatile__("wrmsr" : : "a" (Value), "d" (Value >> 32), "c" (Register)); @@ -1266,7 +1266,7 @@ #endif }
-static __inline__ __attribute__((always_inline)) unsigned long long __readpmc(const int counter) +__INTRIN_INLINE unsigned long long __readpmc(const int counter) { unsigned long long retval; __asm__ __volatile__("rdpmc" : "=A" (retval) : "c" (counter)); @@ -1274,29 +1274,29 @@ }
/* NOTE: an immediate value for 'a' will raise an ICE in Visual C++ */ -static __inline__ __attribute__((always_inline)) unsigned long __segmentlimit(const unsigned long a) +__INTRIN_INLINE unsigned long __segmentlimit(const unsigned long a) { unsigned long retval; __asm__ __volatile__("lsl %[a], %[retval]" : [retval] "=r" (retval) : [a] "rm" (a)); return retval; }
-static __inline__ __attribute__((always_inline)) void __wbinvd(void) +__INTRIN_INLINE void __wbinvd(void) { __asm__ __volatile__("wbinvd"); }
-static __inline__ __attribute__((always_inline)) void __lidt(void *Source) +__INTRIN_INLINE void __lidt(void *Source) { __asm__ __volatile__("lidt %0" : : "m"(*(short*)Source)); }
-static __inline__ __attribute__((always_inline)) void __sidt(void *Destination) +__INTRIN_INLINE void __sidt(void *Destination) { __asm__ __volatile__("sidt %0" : : "m"(*(short*)Destination) : "memory"); }
-static __inline__ __attribute__((always_inline)) void _mm_pause(void) +__INTRIN_INLINE void _mm_pause(void) { __asm__ __volatile__("pause"); }
Propchange: trunk/reactos/include/crt/msc/ ------------------------------------------------------------------------------ --- bugtraq:logregex (added) +++ bugtraq:logregex Tue Jun 16 04:24:26 2009 @@ -1,0 +1,2 @@ +([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))? +(\d+)
Propchange: trunk/reactos/include/crt/msc/ ------------------------------------------------------------------------------ bugtraq:message = See issue #%BUGID% for more details.
Propchange: trunk/reactos/include/crt/msc/ ------------------------------------------------------------------------------ bugtraq:url = http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/reactos/include/crt/msc/ ------------------------------------------------------------------------------ tsvn:logminsize = 10
Added: trunk/reactos/include/crt/msc/intrin.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/crt/msc/intrin.h?re... ============================================================================== --- trunk/reactos/include/crt/msc/intrin.h (added) +++ trunk/reactos/include/crt/msc/intrin.h [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -1,0 +1,188 @@ +#ifndef KJK_INTRIN_H_ +#define KJK_INTRIN_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/*** Stack frame juggling ***/ +void * _ReturnAddress(void); +void * _AddressOfReturnAddress(void); +unsigned int __getcallerseflags(void); + +/*** Atomic operations ***/ +void _ReadWriteBarrier(void); +void _ReadBarrier(void); +void _WriteBarrier(void); + +char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand); +short _InterlockedCompareExchange16(volatile short * const Destination, const short Exchange, const short Comperand); +long _InterlockedCompareExchange(volatile long * const Destination, const long Exchange, const long Comperand); +void * _InterlockedCompareExchangePointer(void * volatile * const Destination, void * const Exchange, void * const Comperand); +long _InterlockedExchange(volatile long * const Target, const long Value); +void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value); +long _InterlockedExchangeAdd16(volatile short * const Addend, const short Value); +long _InterlockedExchangeAdd(volatile long * const Addend, const long Value); +char _InterlockedAnd8(volatile char * const value, const char mask); +short _InterlockedAnd16(volatile short * const value, const short mask); +long _InterlockedAnd(volatile long * const value, const long mask); +char _InterlockedOr8(volatile char * const value, const char mask); +short _InterlockedOr16(volatile short * const value, const short mask); +long _InterlockedOr(volatile long * const value, const long mask); +char _InterlockedXor8(volatile char * const value, const char mask); +short _InterlockedXor16(volatile short * const value, const short mask); +long _InterlockedXor(volatile long * const value, const long mask); +long _InterlockedAddLargeStatistic(volatile __int64 * const Addend, const long Value); +long _InterlockedDecrement(volatile long * const lpAddend); +long _InterlockedIncrement(volatile long * const lpAddend); +long _InterlockedDecrement16(volatile short * const lpAddend); +long _InterlockedIncrement16(volatile short * const lpAddend); +unsigned char _interlockedbittestandreset(volatile long * a, const long b); +unsigned char _interlockedbittestandset(volatile long * a, const long b); + +#if defined(_M_AMD64) +__int64 _InterlockedExchange64(volatile __int64 * const Target, const __int64 Value); +__int64 _InterlockedExchangeAdd64(volatile __int64 * const Addend, const __int64 Value); +long _InterlockedAnd64(volatile __int64 * const value, const __int64 mask); +long _InterlockedOr64(volatile __int64 * const value, const __int64 mask); +__int64 _InterlockedCompareExchange64(volatile __int64 * const Destination, const __int64 Exchange, const __int64 Comperand); +__int64 _InterlockedDecrement64(volatile __int64 * const lpAddend); +__int64 _InterlockedIncrement64(volatile __int64 * const lpAddend); +unsigned char _interlockedbittestandreset64(volatile __int64 * a, const __int64 b); +unsigned char _interlockedbittestandset64(volatile __int64 * a, const __int64 b); +#endif + +/*** String operations ***/ +void __stosb(unsigned char * Dest, const unsigned char Data, size_t Count); +void __stosw(unsigned short * Dest, const unsigned short Data, size_t Count); +void __stosd(unsigned long * Dest, const unsigned long Data, size_t Count); +void __movsb(unsigned char * Destination, const unsigned char * Source, size_t Count); +void __movsw(unsigned short * Destination, const unsigned short * Source, size_t Count); +void __movsd(unsigned long * Destination, const unsigned long * Source, size_t Count); + +#if defined(_M_AMD64) +/*** GS segment addressing ***/ +void __writegsbyte(const unsigned long Offset, const unsigned char Data); +void __writegsword(const unsigned long Offset, const unsigned short Data); +void __writegsdword(const unsigned long Offset, const unsigned long Data); +void __writegsqword(const unsigned long Offset, const unsigned __int64 Data); +unsigned char __readgsbyte(const unsigned long Offset); +unsigned short __readgsword(const unsigned long Offset); +unsigned long __readgsdword(const unsigned long Offset); +unsigned __int64 __readgsqword(const unsigned long Offset); +void __incgsbyte(const unsigned long Offset); +void __incgsword(const unsigned long Offset); +void __incgsdword(const unsigned long Offset); +void __addgsbyte(const unsigned long Offset, const unsigned char Data); +void __addgsword(const unsigned long Offset, const unsigned short Data); +void __addgsdword(const unsigned long Offset, const unsigned int Data); +void __addgsqword(const unsigned long Offset, const unsigned __int64 Data); +#endif + +#if defined(_M_IX86) +/*** FS segment addressing ***/ +void __writefsbyte(const unsigned long Offset, const unsigned char Data); +void __writefsword(const unsigned long Offset, const unsigned short Data); +void __writefsdword(const unsigned long Offset, const unsigned long Data); +unsigned char __readfsbyte(const unsigned long Offset); +unsigned short __readfsword(const unsigned long Offset); +unsigned long __readfsdword(const unsigned long Offset); +void __incfsbyte(const unsigned long Offset); +void __incfsword(const unsigned long Offset); +void __incfsdword(const unsigned long Offset); +void __addfsbyte(const unsigned long Offset, const unsigned char Data); +void __addfsword(const unsigned long Offset, const unsigned short Data); +void __addfsdword(const unsigned long Offset, const unsigned int Data) +#endif + + +/*** Bit manipulation ***/ +unsigned char _BitScanForward(unsigned long * const Index, const unsigned long Mask); +unsigned char _BitScanReverse(unsigned long * const Index, const unsigned long Mask); +unsigned char _bittest(const long * const a, const long b); +unsigned char _bittestandcomplement(long * const a, const long b); +unsigned char _bittestandreset(long * const a, const long b); +unsigned char _bittestandset(long * const a, const long b); +unsigned char _rotl8(unsigned char value, unsigned char shift); +unsigned short _rotl16(unsigned short value, unsigned char shift); +unsigned int _rotl(unsigned int value, int shift); +unsigned int _rotr(unsigned int value, int shift); +unsigned char _rotr8(unsigned char value, unsigned char shift); +unsigned short _rotr16(unsigned short value, unsigned char shift); +unsigned __int64 __ll_lshift(const unsigned __int64 Mask, const int Bit); +__int64 __ll_rshift(const __int64 Mask, const int Bit); +unsigned __int64 __ull_rshift(const unsigned __int64 Mask, int Bit); +unsigned short _byteswap_ushort(unsigned short value); +unsigned long _byteswap_ulong(unsigned long value); +unsigned __int64 _byteswap_uint64(unsigned __int64 value); + +/*** 64-bit math ***/ +__int64 __emul(const int a, const int b); +unsigned __int64 __emulu(const unsigned int a, const unsigned int b); + +/*** Port I/O ***/ +unsigned char __inbyte(const unsigned short Port); +unsigned short __inword(const unsigned short Port); +unsigned long __indword(const unsigned short Port); +void __inbytestring(unsigned short Port, unsigned char * Buffer, unsigned long Count); +void __inwordstring(unsigned short Port, unsigned short * Buffer, unsigned long Count); +void __indwordstring(unsigned short Port, unsigned long * Buffer, unsigned long Count); +void __outbyte(unsigned short const Port, const unsigned char Data); +void __outword(unsigned short const Port, const unsigned short Data); +void __outdword(unsigned short const Port, const unsigned long Data); +void __outbytestring(unsigned short const Port, const unsigned char * const Buffer, const unsigned long Count); +void __outwordstring(unsigned short const Port, const unsigned short * const Buffer, const unsigned long Count); +void __outdwordstring(unsigned short const Port, const unsigned long * const Buffer, const unsigned long Count); + +/*** System information ***/ +void __cpuid(int CPUInfo[], const int InfoType); +unsigned __int64 __rdtsc(void); +void __writeeflags(uintptr_t Value); +uintptr_t __readeflags(void); + +/*** Interrupts ***/ +void __debugbreak(void); +void __int2c(void); +void _disable(void); +void _enable(void); + +/*** Protected memory management ***/ +void __writecr0(const unsigned __int64 Data); +void __writecr3(const unsigned __int64 Data); +void __writecr4(const unsigned __int64 Data); + +#ifdef _M_AMD64 +void __writecr8(const unsigned __int64 Data); +#endif + +unsigned __int64 __readcr0(void); +unsigned __int64 __readcr2(void); +unsigned __int64 __readcr3(void); +unsigned __int64 __readcr4(void); + +#ifdef _M_AMD64 +unsigned __int64 __readcr8(void); +#endif + +unsigned __int64 __readdr(unsigned int reg); +void __writedr(unsigned reg, unsigned __int64 value); + +void __invlpg(void * const Address); + +/*** System operations ***/ +unsigned __int64 __readmsr(const int reg); +void __writemsr(const unsigned long Register, const unsigned __int64 Value); +unsigned __int64 __readpmc(const int counter); +unsigned long __segmentlimit(const unsigned long a); +void __wbinvd(void); +void __lidt(void *Source); +void __sidt(void *Destination); +void _mm_pause(void); + +#ifdef __cplusplus +} +#endif + +#endif /* KJK_INTRIN_H_ */ + +/* EOF */
Propchange: trunk/reactos/include/crt/msc/intrin.h ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/reactos/include/crt/stdio.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/crt/stdio.h?rev=414... ============================================================================== --- trunk/reactos/include/crt/stdio.h [iso-8859-1] (original) +++ trunk/reactos/include/crt/stdio.h [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -7,6 +7,9 @@ #define _INC_STDIO
#include <crtdefs.h> + +#define __need___va_list +#include <stdarg.h>
#pragma pack(push,_CRT_PACKING)
Modified: trunk/reactos/include/crt/wchar.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/crt/wchar.h?rev=414... ============================================================================== --- trunk/reactos/include/crt/wchar.h [iso-8859-1] (original) +++ trunk/reactos/include/crt/wchar.h [iso-8859-1] Tue Jun 16 04:24:26 2009 @@ -7,6 +7,9 @@ #define _INC_WCHAR
#include <crtdefs.h> + +#define __need___va_list +#include <stdarg.h>
#pragma pack(push,_CRT_PACKING)