ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

intrin.h
Go to the documentation of this file.
00001 #ifndef KJK_INTRIN_H_
00002 #define KJK_INTRIN_H_
00003 
00004 #ifdef __cplusplus
00005 extern "C" {
00006 #endif
00007 
00008 /*** Stack frame juggling ***/
00009 void * _ReturnAddress(void);
00010 #pragma intrinsic(_ReturnAddress)
00011 void * _AddressOfReturnAddress(void);
00012 #pragma intrinsic(_AddressOfReturnAddress)
00013 unsigned int __getcallerseflags(void);
00014 #pragma intrinsic(__getcallerseflags)
00015 
00016 /*** Memory barriers ***/
00017 void _ReadWriteBarrier(void);
00018 #pragma intrinsic(_ReadWriteBarrier)
00019 void _ReadBarrier(void);
00020 #pragma intrinsic(_ReadBarrier)
00021 void _WriteBarrier(void);
00022 #pragma intrinsic(_WriteBarrier)
00023 void _mm_mfence(void);
00024 #pragma intrinsic(_mm_mfence)
00025 void _mm_lfence(void);
00026 #pragma intrinsic(_mm_lfence)
00027 void _mm_sfence(void);
00028 #pragma intrinsic(_mm_sfence)
00029 #ifdef _M_AMD64
00030 void __faststorefence(void);
00031 #pragma intrinsic(__faststorefence)
00032 #endif
00033 
00034 /*** Atomic operations ***/
00035 long _InterlockedCompareExchange(volatile long * Destination, long Exchange, long Comperand);
00036 #pragma intrinsic(_InterlockedCompareExchange)
00037 long _InterlockedExchange(volatile long * Target, long Value);
00038 #pragma intrinsic(_InterlockedExchange)
00039 long _InterlockedExchangeAdd(volatile long * Addend, long Value);
00040 #pragma intrinsic(_InterlockedExchangeAdd)
00041 char _InterlockedAnd8(volatile char * value, char mask);
00042 #pragma intrinsic(_InterlockedAnd8)
00043 short _InterlockedAnd16(volatile short * value, short mask);
00044 #pragma intrinsic(_InterlockedAnd16)
00045 long _InterlockedAnd(volatile long * value, long mask);
00046 #pragma intrinsic(_InterlockedAnd)
00047 char _InterlockedOr8(volatile char * value, char mask);
00048 #pragma intrinsic(_InterlockedOr8)
00049 short _InterlockedOr16(volatile short * value, short mask);
00050 #pragma intrinsic(_InterlockedOr16)
00051 long _InterlockedOr(volatile long * value, long mask);
00052 #pragma intrinsic(_InterlockedOr)
00053 char _InterlockedXor8(volatile char * value, char mask);
00054 #pragma intrinsic(_InterlockedXor8)
00055 short _InterlockedXor16(volatile short * value, short mask);
00056 #pragma intrinsic(_InterlockedXor16)
00057 long _InterlockedXor(volatile long * value, long mask);
00058 #pragma intrinsic(_InterlockedXor)
00059 long _InterlockedDecrement(volatile long * lpAddend);
00060 #pragma intrinsic(_InterlockedDecrement)
00061 long _InterlockedIncrement(volatile long * lpAddend);
00062 #pragma intrinsic(_InterlockedIncrement)
00063 short _InterlockedDecrement16(volatile short * lpAddend);
00064 #pragma intrinsic(_InterlockedDecrement16)
00065 short _InterlockedIncrement16(volatile short * lpAddend);
00066 #pragma intrinsic(_InterlockedIncrement16)
00067 unsigned char _interlockedbittestandreset(volatile long * a, long b);
00068 #pragma intrinsic(_interlockedbittestandreset)
00069 unsigned char _interlockedbittestandset(volatile long * a, long b);
00070 #pragma intrinsic(_interlockedbittestandset)
00071 
00072 #if defined(_M_IX86)
00073 long _InterlockedAddLargeStatistic(volatile __int64 * Addend, long Value);
00074 #pragma intrinsic(_InterlockedAddLargeStatistic)
00075 #elif defined(_M_AMD64)
00076 __int64 _InterlockedExchange64(volatile __int64 * Target, __int64 Value);
00077 #pragma intrinsic(_InterlockedExchange64)
00078 __int64 _InterlockedExchangeAdd64(volatile __int64 * Addend, __int64 Value);
00079 #pragma intrinsic(_InterlockedExchangeAdd64)
00080 void * _InterlockedCompareExchangePointer(void * volatile * Destination, void * Exchange, void * Comperand);
00081 #pragma intrinsic(_InterlockedCompareExchangePointer)
00082 void * _InterlockedExchangePointer(void * volatile * Target, void * Value);
00083 #pragma intrinsic(_InterlockedExchangePointer)
00084 __int64 _InterlockedAnd64(volatile __int64 * value, __int64 mask);
00085 #pragma intrinsic(_InterlockedAnd64)
00086 __int64 _InterlockedOr64(volatile __int64 * value, __int64 mask);
00087 #pragma intrinsic(_InterlockedOr64)
00088 __int64 _InterlockedCompareExchange64(volatile __int64 * Destination, __int64 Exchange, __int64 Comperand);
00089 #pragma intrinsic(_InterlockedCompareExchange64)
00090 __int64 _InterlockedDecrement64(volatile __int64 * lpAddend);
00091 #pragma intrinsic(_InterlockedDecrement64)
00092 __int64 _InterlockedIncrement64(volatile __int64 * lpAddend);
00093 #pragma intrinsic(_InterlockedIncrement64)
00094 unsigned char _interlockedbittestandreset64(volatile __int64 * a, __int64 b);
00095 #pragma intrinsic(_interlockedbittestandreset64)
00096 unsigned char _interlockedbittestandset64(volatile __int64 * a, __int64 b);
00097 #pragma intrinsic(_interlockedbittestandset64)
00098 #endif
00099 
00100 /*** String operations ***/
00101 void __stosb(unsigned char * Dest, unsigned char Data, size_t Count);
00102 #pragma intrinsic(__stosb)
00103 void __stosw(unsigned short * Dest, unsigned short Data, size_t Count);
00104 #pragma intrinsic(__stosw)
00105 void __stosd(unsigned long * Dest, unsigned long Data, size_t Count);
00106 #pragma intrinsic(__stosd)
00107 void __movsb(unsigned char * Destination, unsigned char const * Source, size_t Count);
00108 #pragma intrinsic(__movsb)
00109 void __movsw(unsigned short * Destination, unsigned short const * Source, size_t Count);
00110 #pragma intrinsic(__movsw)
00111 void __movsd(unsigned long * Destination, unsigned long const * Source, size_t Count);
00112 #pragma intrinsic(__movsd)
00113 #ifdef _M_AMD64
00114 void __movsq(unsigned __int64 * Destination, unsigned __int64 const * Source, size_t Count);
00115 #pragma intrinsic(__movsq)
00116 #endif
00117 
00118 #if defined(_M_AMD64)
00119 /*** GS segment addressing ***/
00120 void __writegsbyte(unsigned long Offset, unsigned char Data);
00121 #pragma intrinsic(__writegsbyte)
00122 void __writegsword(unsigned long Offset, unsigned short Data);
00123 #pragma intrinsic(__writegsword)
00124 void __writegsdword(unsigned long Offset, unsigned long Data);
00125 #pragma intrinsic(__writegsdword)
00126 void __writegsqword(unsigned long Offset, unsigned __int64 Data);
00127 #pragma intrinsic(__writegsqword)
00128 unsigned char __readgsbyte(unsigned long Offset);
00129 #pragma intrinsic(__readgsbyte)
00130 unsigned short __readgsword(unsigned long Offset);
00131 #pragma intrinsic(__readgsword)
00132 unsigned long __readgsdword(unsigned long Offset);
00133 #pragma intrinsic(__readgsdword)
00134 unsigned __int64 __readgsqword(unsigned long Offset);
00135 #pragma intrinsic(__readgsqword)
00136 void __incgsbyte(unsigned long Offset);
00137 #pragma intrinsic(__incgsbyte)
00138 void __incgsword(unsigned long Offset);
00139 #pragma intrinsic(__incgsword)
00140 void __incgsdword(unsigned long Offset);
00141 #pragma intrinsic(__incgsdword)
00142 void __addgsbyte(unsigned long Offset, unsigned char Data);
00143 #pragma intrinsic(__addgsbyte)
00144 void __addgsword(unsigned long Offset, unsigned short Data);
00145 #pragma intrinsic(__addgsword)
00146 void __addgsdword(unsigned long Offset, unsigned int Data);
00147 #pragma intrinsic(__addgsdword)
00148 void __addgsqword(unsigned long Offset, unsigned __int64 Data);
00149 #pragma intrinsic(__addgsqword)
00150 #endif
00151 
00152 #if defined(_M_IX86)
00153 /*** FS segment addressing ***/
00154 void __writefsbyte(unsigned long Offset, unsigned char Data);
00155 #pragma intrinsic(__writefsbyte)
00156 void __writefsword(unsigned long Offset, unsigned short Data);
00157 #pragma intrinsic(__writefsword)
00158 void __writefsdword(unsigned long Offset, unsigned long Data);
00159 #pragma intrinsic(__writefsdword)
00160 unsigned char __readfsbyte(unsigned long Offset);
00161 #pragma intrinsic(__readfsbyte)
00162 unsigned short __readfsword(unsigned long Offset);
00163 #pragma intrinsic(__readfsword)
00164 unsigned long __readfsdword(unsigned long Offset);
00165 #pragma intrinsic(__readfsdword)
00166 void __incfsbyte(unsigned long Offset);
00167 #pragma intrinsic(__incfsbyte)
00168 void __incfsword(unsigned long Offset);
00169 #pragma intrinsic(__incfsword)
00170 void __incfsdword(unsigned long Offset);
00171 #pragma intrinsic(__incfsdword)
00172 void __addfsbyte(unsigned long Offset, unsigned char Data);
00173 #pragma intrinsic(__addfsbyte)
00174 void __addfsword(unsigned long Offset, unsigned short Data);
00175 #pragma intrinsic(__addfsword)
00176 void __addfsdword(unsigned long Offset, unsigned int Data);
00177 #pragma intrinsic(__addfsdword)
00178 #endif
00179 
00180 
00181 /*** Bit manipulation ***/
00182 unsigned char _BitScanForward(unsigned long * Index, unsigned long Mask);
00183 #pragma intrinsic(_BitScanForward)
00184 unsigned char _BitScanReverse(unsigned long * Index, unsigned long Mask);
00185 #pragma intrinsic(_BitScanReverse)
00186 unsigned char _bittest(const long * a, long b);
00187 #pragma intrinsic(_bittest)
00188 unsigned char _bittestandcomplement(long * a, long b);
00189 #pragma intrinsic(_bittestandcomplement)
00190 unsigned char _bittestandreset(long * a, long b);
00191 #pragma intrinsic(_bittestandreset)
00192 unsigned char _bittestandset(long * a, long b);
00193 #pragma intrinsic(_bittestandset)
00194 unsigned char _rotl8(unsigned char value, unsigned char shift);
00195 #pragma intrinsic(_rotl8)
00196 unsigned short _rotl16(unsigned short value, unsigned char shift);
00197 #pragma intrinsic(_rotl16)
00198 unsigned int _rotl(unsigned int value, int shift);
00199 #pragma intrinsic(_rotl)
00200 unsigned int _rotr(unsigned int value, int shift);
00201 #pragma intrinsic(_rotr)
00202 unsigned char _rotr8(unsigned char value, unsigned char shift);
00203 #pragma intrinsic(_rotr8)
00204 unsigned short _rotr16(unsigned short value, unsigned char shift);
00205 #pragma intrinsic(_rotr16)
00206 unsigned __int64 __ll_lshift(unsigned __int64 Mask, int Bit);
00207 #pragma intrinsic(__ll_lshift)
00208 __int64 __ll_rshift(__int64 Mask, int Bit);
00209 #pragma intrinsic(__ll_rshift)
00210 unsigned __int64 __ull_rshift(unsigned __int64 Mask, int Bit);
00211 #pragma intrinsic(__ull_rshift)
00212 unsigned short _byteswap_ushort(unsigned short value);
00213 #pragma intrinsic(_byteswap_ushort)
00214 unsigned long _byteswap_ulong(unsigned long value);
00215 #pragma intrinsic(_byteswap_ulong)
00216 unsigned __int64 _byteswap_uint64(unsigned __int64 value);
00217 #pragma intrinsic(_byteswap_uint64)
00218 #ifdef _M_AMD64
00219 unsigned char _bittest64(__int64 const *a, __int64 b);
00220 #pragma intrinsic(_bittest64)
00221 #endif
00222 
00223 /*** 64-bit math ***/
00224 __int64 __emul(int a, int b);
00225 #pragma intrinsic(__emul)
00226 unsigned __int64 __emulu(unsigned int a, unsigned int b);
00227 #pragma intrinsic(__emulu)
00228 #ifdef _M_AMD64
00229 unsigned __int64 __umulh(unsigned __int64 a, unsigned __int64 b);
00230 #pragma intrinsic(__umulh)
00231 #endif
00232 
00233 /*** Port I/O ***/
00234 unsigned char __inbyte(unsigned short Port);
00235 #pragma intrinsic(__inbyte)
00236 unsigned short __inword(unsigned short Port);
00237 #pragma intrinsic(__inword)
00238 unsigned long __indword(unsigned short Port);
00239 #pragma intrinsic(__indword)
00240 void __inbytestring(unsigned short Port, unsigned char * Buffer, unsigned long Count);
00241 #pragma intrinsic(__inbytestring)
00242 void __inwordstring(unsigned short Port, unsigned short * Buffer, unsigned long Count);
00243 #pragma intrinsic(__inwordstring)
00244 void __indwordstring(unsigned short Port, unsigned long * Buffer, unsigned long Count);
00245 #pragma intrinsic(__indwordstring)
00246 void __outbyte(unsigned short Port, unsigned char Data);
00247 #pragma intrinsic(__outbyte)
00248 void __outword(unsigned short Port, unsigned short Data);
00249 #pragma intrinsic(__outword)
00250 void __outdword(unsigned short Port, unsigned long Data);
00251 #pragma intrinsic(__outdword)
00252 void __outbytestring(unsigned short Port, unsigned char * Buffer, unsigned long Count);
00253 #pragma intrinsic(__outbytestring)
00254 void __outwordstring(unsigned short Port, unsigned short * Buffer, unsigned long Count);
00255 #pragma intrinsic(__outwordstring)
00256 void __outdwordstring(unsigned short Port, unsigned long * Buffer, unsigned long Count);
00257 #pragma intrinsic(__outdwordstring)
00258 
00259 /*** System information ***/
00260 void __cpuid(int CPUInfo[], int InfoType);
00261 #pragma intrinsic(__cpuid)
00262 unsigned __int64 __rdtsc(void);
00263 #pragma intrinsic(__rdtsc)
00264 void __writeeflags(uintptr_t Value);
00265 #pragma intrinsic(__writeeflags)
00266 uintptr_t __readeflags(void);
00267 #pragma intrinsic(__readeflags)
00268 
00269 /*** Interrupts ***/
00270 void __debugbreak(void);
00271 #pragma intrinsic(__debugbreak)
00272 void __int2c(void);
00273 #pragma intrinsic(__int2c)
00274 void _disable(void);
00275 #pragma intrinsic(_disable)
00276 void _enable(void);
00277 #pragma intrinsic(_enable)
00278 void __halt(void);
00279 #pragma intrinsic(__halt)
00280 
00281 /*** Protected memory management ***/
00282 void __writecr0(unsigned __int64 Data);
00283 #pragma intrinsic(__writecr0)
00284 void __writecr3(unsigned __int64 Data);
00285 #pragma intrinsic(__writecr3)
00286 void __writecr4(unsigned __int64 Data);
00287 #pragma intrinsic(__writecr4)
00288 
00289 #ifdef _M_AMD64
00290 void __writecr8(unsigned __int64 Data);
00291 #pragma intrinsic(__writecr8)
00292 unsigned __int64 __readcr0(void);
00293 #pragma intrinsic(__readcr0)
00294 unsigned __int64 __readcr2(void);
00295 #pragma intrinsic(__readcr2)
00296 unsigned __int64 __readcr3(void);
00297 #pragma intrinsic(__readcr3)
00298 unsigned __int64 __readcr4(void);
00299 #pragma intrinsic(__readcr4)
00300 unsigned __int64 __readcr8(void);
00301 #pragma intrinsic(__readcr8)
00302 unsigned __int64 __readdr(unsigned int reg);
00303 #pragma intrinsic(__readdr)
00304 void __writedr(unsigned reg, unsigned __int64 value);
00305 #pragma intrinsic(__writedr)
00306 #else
00307 unsigned long __readcr0(void);
00308 unsigned long __readcr2(void);
00309 unsigned long __readcr3(void);
00310 //unsigned long __readcr4(void);
00311 //#pragma intrinsic(__readcr4)
00312 // HACK: MSVC is broken
00313 unsigned long  ___readcr4(void);
00314 #define __readcr4 ___readcr4
00315 
00316 unsigned int __readdr(unsigned int reg);
00317 void __writedr(unsigned reg, unsigned int value);
00318 #endif
00319 
00320 void __invlpg(void * Address);
00321 #pragma intrinsic(__invlpg)
00322 
00323 #ifdef _M_IX86
00324 // This intrinsic is broken and generates wrong opcodes,
00325 // when optimization is enabled!
00326 #pragma warning(push)
00327 #pragma warning(disable:4711)
00328 void  __forceinline __invlpg_fixed(void * Address)
00329 {
00330     _ReadWriteBarrier();
00331    __asm
00332    {
00333        mov eax, Address
00334        invlpg [eax]
00335    }
00336     _ReadWriteBarrier();
00337 }
00338 #pragma warning(pop)
00339 #define __invlpg __invlpg_fixed
00340 #endif
00341 
00342 /*** System operations ***/
00343 unsigned __int64 __readmsr(int reg);
00344 #pragma intrinsic(__readmsr)
00345 void __writemsr(unsigned long Register, unsigned __int64 Value);
00346 #pragma intrinsic(__writemsr)
00347 unsigned __int64 __readpmc(int counter);
00348 #pragma intrinsic(__readpmc)
00349 unsigned long __segmentlimit(unsigned long a);
00350 #pragma intrinsic(__segmentlimit)
00351 void __wbinvd(void);
00352 #pragma intrinsic(__wbinvd)
00353 void __lidt(void *Source);
00354 #pragma intrinsic(__lidt)
00355 void __sidt(void *Destination);
00356 #pragma intrinsic(__sidt)
00357 void _mm_pause(void);
00358 #pragma intrinsic(_mm_pause)
00359 
00360 #ifdef __cplusplus
00361 }
00362 #endif
00363 
00364 #endif /* KJK_INTRIN_H_ */
00365 
00366 /* EOF */

Generated on Sat May 26 2012 04:28:28 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.