[ros-dev] [ros-diffs] [dgorbachev] 26482: Use allocation function instead of hack, save 12 bytes.
Thomas Weidenmueller
w3seek at reactos.com
Tue Apr 24 05:24:23 CEST 2007
This change is *wrong*. It won't guarantee the correct alignment!!!
- Thomas
dgorbachev at svn.reactos.org wrote:
> Author: dgorbachev
> Date: Tue Apr 24 02:06:34 2007
> New Revision: 26482
>
> URL: http://svn.reactos.org/svn/reactos?rev=26482&view=rev
> Log:
> Use allocation function instead of hack, save 12 bytes.
>
> Modified:
> trunk/reactos/ntoskrnl/include/internal/ex.h
>
> Modified: trunk/reactos/ntoskrnl/include/internal/ex.h
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/ex.h?rev=26482&r1=26481&r2=26482&view=diff
> ==============================================================================
> --- trunk/reactos/ntoskrnl/include/internal/ex.h (original)
> +++ trunk/reactos/ntoskrnl/include/internal/ex.h Tue Apr 24 02:06:34 2007
> @@ -102,22 +102,13 @@
> #define MAX_HIGH_INDEX (MID_LEVEL_ENTRIES * MID_LEVEL_ENTRIES * LOW_LEVEL_ENTRIES)
>
> //
> -// Detect GCC 4.1.2+
> +// Detect GCC
> //
> -#if 1 // (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40102
> -
> -//
> -// Broken GCC with Alignment Bug. We'll do alignment ourselves at higher cost.
> -//
> -#define DEFINE_WAIT_BLOCK(x) \
> - struct _AlignHack \
> - { \
> - UCHAR Hack[15]; \
> - EX_PUSH_LOCK_WAIT_BLOCK UnalignedBlock; \
> - } WaitBlockBuffer; \
> - PEX_PUSH_LOCK_WAIT_BLOCK x = (PEX_PUSH_LOCK_WAIT_BLOCK) \
> - ((ULONG_PTR)&WaitBlockBuffer.UnalignedBlock &~ 0xF);
> -
> +#ifdef __GNUC__
> +
> +#define DEFINE_WAIT_BLOCK(x) \
> + PEX_PUSH_LOCK_WAIT_BLOCK x = __builtin_alloca(sizeof(EX_PUSH_LOCK_WAIT_BLOCK));
> +
> #else
>
> //
> @@ -125,8 +116,8 @@
> // local variable (the actual pointer) away, so we don't take any perf hit
> // by doing this.
> //
> -#define DEFINE_WAIT_BLOCK(x) \
> - EX_PUSH_LOCK_WAIT_BLOCK WaitBlockBuffer; \
> +#define DEFINE_WAIT_BLOCK(x) \
> + EX_PUSH_LOCK_WAIT_BLOCK WaitBlockBuffer; \
> PEX_PUSH_LOCK_WAIT_BLOCK x = &WaitBlockBuffer;
>
> #endif
> @@ -725,7 +716,7 @@
> if (InterlockedBitTestAndSet((PLONG)PushLock, EX_PUSH_LOCK_LOCK_V))
> {
> /* Someone changed it, use the slow path */
> - DbgPrint("%s - Contention!\n", __FUNCTION__);
> + // DbgPrint("%s - Contention!\n", __FUNCTION__);
> ExfAcquirePushLockExclusive(PushLock);
> }
>
> @@ -763,7 +754,7 @@
> if (ExpChangePushlock(PushLock, NewValue.Ptr, 0))
> {
> /* Someone changed it, use the slow path */
> - DbgPrint("%s - Contention!\n", __FUNCTION__);
> + // DbgPrint("%s - Contention!\n", __FUNCTION__);
> ExfAcquirePushLockShared(PushLock);
> }
>
> @@ -977,7 +968,7 @@
> OldValue.Ptr))
> {
> /* We have waiters, use the long path */
> - DbgPrint("%s - Contention!\n", __FUNCTION__);
> + // DbgPrint("%s - Contention!\n", __FUNCTION__);
> ExfReleasePushLock(PushLock);
> }
> }
>
>
>
More information about the Ros-dev
mailing list