[INTRIN_ARM]
authorAmine Khaldi <amine.khaldi@reactos.org>
Fri, 14 May 2010 11:45:14 +0000 (11:45 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Fri, 14 May 2010 11:45:14 +0000 (11:45 +0000)
- Implement __yield and __break arm intrinsics.
[DDK]
- Relax INTERLOCKED_RESULT conditional definition.
[PSDK]
- Fix some nasty structure misalignments.
- Fix YieldProcessor definition for ARM.
[ARMDDK]
- Add several missing definitions.

svn path=/branches/header-work/; revision=47196

include/crt/mingw32/intrin_arm.h
include/ddk/ntddk.h
include/psdk/winnt.h
include/reactos/arm/armddk.h

index 00803a4..12ced3e 100644 (file)
 #define _ReturnAddress() (__builtin_return_address(0))
 #define _ReadWriteBarrier() __sync_synchronize()
 
+__INTRIN_INLINE void __yield(void) { __asm__ __volatile__("yield"); }
+
+__INTRIN_INLINE void __break(unsigned int value) { __asm__ __volatile__("bkpt %0": : "M" (value)); }
+
 __INTRIN_INLINE unsigned short _byteswap_ushort(unsigned short value)
 {
        return (value >> 8) || (value << 8);
index 109774b..29f5d67 100644 (file)
@@ -3289,13 +3289,11 @@ ExFreeToZone(
 #define RESULT_POSITIVE 2
 #endif
 
-#if defined(_X86_) || defined(_IA64_) || defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
 typedef enum _INTERLOCKED_RESULT {
   ResultNegative = RESULT_NEGATIVE,
   ResultZero = RESULT_ZERO,
   ResultPositive = RESULT_POSITIVE
 } INTERLOCKED_RESULT;
-#endif
 
 #ifdef _X86_
 
index ef2037d..4c75666 100644 (file)
@@ -3760,6 +3760,7 @@ typedef struct _IMAGE_SECTION_HEADER {
 } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
 
 #include <pshpack2.h>
+
 typedef struct _IMAGE_SYMBOL {
        union {
                BYTE ShortName[8];
@@ -3818,6 +3819,17 @@ typedef union _IMAGE_AUX_SYMBOL {
        } Section;
 } IMAGE_AUX_SYMBOL,*PIMAGE_AUX_SYMBOL;
 
+typedef struct _IMAGE_RELOCATION {
+       _ANONYMOUS_UNION union {
+               DWORD VirtualAddress;
+               DWORD RelocCount;
+       } DUMMYUNIONNAME;
+       DWORD SymbolTableIndex;
+       WORD Type;
+} IMAGE_RELOCATION,*PIMAGE_RELOCATION;
+
+#include <poppack.h>
+
 #ifndef __IMAGE_COR20_HEADER_DEFINED__
 #define __IMAGE_COR20_HEADER_DEFINED__
 
@@ -3885,16 +3897,6 @@ typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
        DWORD RvaToLastByteOfData;
 } IMAGE_COFF_SYMBOLS_HEADER,*PIMAGE_COFF_SYMBOLS_HEADER;
 
-typedef struct _IMAGE_RELOCATION {
-       _ANONYMOUS_UNION union {
-               DWORD VirtualAddress;
-               DWORD RelocCount;
-       } DUMMYUNIONNAME;
-       DWORD SymbolTableIndex;
-       WORD Type;
-} IMAGE_RELOCATION,*PIMAGE_RELOCATION;
-#include <poppack.h>
-
 typedef struct _IMAGE_BASE_RELOCATION {
        DWORD VirtualAddress;
        DWORD SizeOfBlock;
@@ -5081,7 +5083,7 @@ MemoryBarrier(VOID)
 #elif defined(_M_MIPS)
 #define YieldProcessor() __asm__ __volatile__("nop");
 #elif defined(_M_ARM)
-#define YieldProcessor()
+#define YieldProcessor __yield
 #else
 #error Unknown architecture
 #endif
index 80f49db..ad235b0 100644 (file)
@@ -189,6 +189,36 @@ struct _KTHREAD*
 NTAPI
 KeGetCurrentThread(VOID);
 
+extern volatile struct _KSYSTEM_TIME KeTickCount;
+
+#ifndef YieldProcessor
+#define YieldProcessor __yield
+#endif
+
+#define ASSERT_BREAKPOINT BREAKPOINT_COMMAND_STRING + 1
+
+#define DbgRaiseAssertionFailure() __break(ASSERT_BREAKPOINT)
+
+#define PCR_MINOR_VERSION 1
+#define PCR_MAJOR_VERSION 1
+
+#define RESULT_ZERO     0
+#define RESULT_NEGATIVE 1
+#define RESULT_POSITIVE 2
+
+DECLSPEC_IMPORT
+VOID
+__fastcall
+KfReleaseSpinLock(
+  IN OUT ULONG_PTR* SpinLock,
+  IN KIRQL NewIrql);
+
+DECLSPEC_IMPORT
+KIRQL
+__fastcall
+KfAcquireSpinLock(
+  IN OUT ULONG_PTR* SpinLock);
+
 #ifndef _WINNT_H
 //
 // IRQL Support on ARM is similar to MIPS/ALPHA