在 2018/9/9 4:24, Martin Storsjö 写道:
> This fixes building for armv7 with -fms-extensions enabled.
>
> Signed-off-by: Martin Storsjö
> ---
> The last ifdef/pragma looks misplaced, but it's just how git chooses
> the make the diff.
> ---
> mingw-w64-headers/include/winbase.h | 25 +
> 1 file changed, 25 insertions(+)
>
This looks good to me, too.
> diff --git a/mingw-w64-headers/include/winbase.h
> b/mingw-w64-headers/include/winbase.h
> index b2d4769..2b47378 100644
> --- a/mingw-w64-headers/include/winbase.h
> +++ b/mingw-w64-headers/include/winbase.h
> @@ -969,6 +969,15 @@ extern "C" {
> LONG64 InterlockedCompareExchange64 (LONG64 volatile *Destination, LONG64
> ExChange, LONG64 Comperand);
> #else
> #if !defined (__WIDL__) && defined (__MINGW_INTRIN_INLINE)
> +
> +/* Clang has support for some MSVC builtins if building with -fms-extensions,
> + * GCC doesn't. */
> +#pragma push_macro("__has_builtin")
> +#ifndef __has_builtin
> + #define __has_builtin(x) 0
> +#endif
> +
> +#if !__has_builtin(_InterlockedAnd64)
> FORCEINLINE LONGLONG InterlockedAnd64 (LONGLONG volatile *Destination,
> LONGLONG Value) {
> LONGLONG Old;
>
> @@ -977,7 +986,9 @@ extern "C" {
> } while (InterlockedCompareExchange64 (Destination, Old , Old) !=
> Old);
> return Old;
> }
> +#endif
>
> +#if !__has_builtin(_InterlockedOr64)
> FORCEINLINE LONGLONG InterlockedOr64 (LONGLONG volatile *Destination,
> LONGLONG Value) {
> LONGLONG Old;
>
> @@ -986,7 +997,9 @@ extern "C" {
> } while (InterlockedCompareExchange64 (Destination, Old | Value, Old)
> != Old);
> return Old;
> }
> +#endif
>
> +#if !__has_builtin(_InterlockedXor64)
> FORCEINLINE LONGLONG InterlockedXor64 (LONGLONG volatile *Destination,
> LONGLONG Value) {
> LONGLONG Old;
>
> @@ -995,7 +1008,9 @@ extern "C" {
> } while (InterlockedCompareExchange64 (Destination, Old ^ Value, Old)
> != Old);
> return Old;
> }
> +#endif
>
> +#if !__has_builtin(_InterlockedIncrement64)
> FORCEINLINE LONGLONG InterlockedIncrement64 (LONGLONG volatile *Addend) {
> LONGLONG Old;
>
> @@ -1004,7 +1019,9 @@ extern "C" {
> } while (InterlockedCompareExchange64 (Addend, Old + 1, Old) != Old);
> return Old + 1;
> }
> +#endif
>
> +#if !__has_builtin(_InterlockedDecrement64)
> FORCEINLINE LONGLONG InterlockedDecrement64 (LONGLONG volatile *Addend) {
> LONGLONG Old;
>
> @@ -1013,7 +1030,9 @@ extern "C" {
> } while (InterlockedCompareExchange64 (Addend, Old - 1, Old) != Old);
> return Old - 1;
> }
> +#endif
>
> +#if !__has_builtin(_InterlockedExchange64)
> FORCEINLINE LONGLONG InterlockedExchange64 (LONGLONG volatile *Target,
> LONGLONG Value) {
> LONGLONG Old;
>
> @@ -1022,7 +1041,9 @@ extern "C" {
> } while (InterlockedCompareExchange64 (Target, Value, Old) != Old);
> return Old;
> }
> +#endif
>
> +#if !__has_builtin(_InterlockedExchangeAdd64)
> FORCEINLINE LONGLONG InterlockedExchangeAdd64 (LONGLONG volatile *Addend,
> LONGLONG Value) {
> LONGLONG Old;
>
> @@ -1033,6 +1054,10 @@ extern "C" {
> }
> #endif
>
> +#pragma pop_macro("__has_builtin")
> +
> +#endif
> +
> #ifdef __cplusplus
> FORCEINLINE PVOID __cdecl __InlineInterlockedCompareExchangePointer
> (PVOID volatile *Destination, PVOID ExChange, PVOID Comperand) {
> return ((PVOID) (LONG_PTR)InterlockedCompareExchange ((LONG volatile
> *)Destination,(LONG) (LONG_PTR)ExChange,(LONG) (LONG_PTR)Comperand));
>
--
Best regards,
LH_Mouse
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public