Re: [PATCH] Add native windows on arm64 support - Mailing list pgsql-hackers

From Andres Freund
Subject Re: [PATCH] Add native windows on arm64 support
Date
Msg-id 20221205181449.47mhosidtmotemdl@awork3.anarazel.de
Whole thread Raw
In response to Re: [PATCH] Add native windows on arm64 support  (Michael Paquier <michael@paquier.xyz>)
Responses Re: [PATCH] Add native windows on arm64 support
Re: [PATCH] Add native windows on arm64 support
List pgsql-hackers
Hi,

On 2022-12-05 14:12:41 +0900, Michael Paquier wrote:
> With meson gaining in maturity, perhaps that's not the most urgent
> thing as we will likely remove src/tools/msvc/ soon but I'd rather do
> that right anyway as much as I can to avoid an incorrect state in the
> tree at any time in its history.

I'd actually argue that we should just not add win32 support to
src/tools/msvc/.


> --- a/src/include/storage/s_lock.h
> +++ b/src/include/storage/s_lock.h
> @@ -708,13 +708,21 @@ typedef LONG slock_t;
>  #define SPIN_DELAY() spin_delay()
>  
>  /* If using Visual C++ on Win64, inline assembly is unavailable.
> - * Use a _mm_pause intrinsic instead of rep nop.
> + * Use _mm_pause (x64) or __isb (arm64) intrinsic instead of rep nop.
>   */
>  #if defined(_WIN64)
>  static __forceinline void
>  spin_delay(void)
>  {
> +#ifdef _M_ARM64
> +    /*
> +     * See spin_delay aarch64 inline assembly definition above for details
> +     * ref: https://learn.microsoft.com/en-us/cpp/intrinsics/arm64-intrinsics#BarrierRestrictions
> +    */
> +    __isb(_ARM64_BARRIER_SY);
> +#else
>      _mm_pause();
> +#endif
>  }
>  #else
>  static __forceinline void

This looks somewhat wrong to me. We end up with some ifdefs on the function
defintion level, and some others inside the function body. I think it should
be either or.



> diff --git a/meson.build b/meson.build
> index 725e10d815..e354ad7650 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1944,7 +1944,13 @@ int main(void)
>  
>  elif host_cpu == 'arm' or host_cpu == 'aarch64'
>  
> -  prog = '''
> +  if cc.get_id() == 'msvc'
> +    cdata.set('USE_ARMV8_CRC32C', false)
> +    cdata.set('USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK', 1)
> +    have_optimized_crc = true
> +  else
> +
> +    prog = '''
>  #include <arm_acle.h>
>  
>  int main(void)

Why does this need to be hardcoded? The compiler probe should just work for
msvc.


> @@ -1960,18 +1966,19 @@ int main(void)
>  }
>  '''
>  
> -  if cc.links(prog, name: '__crc32cb, __crc32ch, __crc32cw, and __crc32cd without -march=armv8-a+crc',
> -      args: test_c_args)
> -    # Use ARM CRC Extension unconditionally
> -    cdata.set('USE_ARMV8_CRC32C', 1)
> -    have_optimized_crc = true
> -  elif cc.links(prog, name: '__crc32cb, __crc32ch, __crc32cw, and __crc32cd with -march=armv8-a+crc',
> -      args: test_c_args + ['-march=armv8-a+crc'])
> -    # Use ARM CRC Extension, with runtime check
> -    cflags_crc += '-march=armv8-a+crc'
> -    cdata.set('USE_ARMV8_CRC32C', false)
> -    cdata.set('USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK', 1)
> -    have_optimized_crc = true
> +    if cc.links(prog, name: '__crc32cb, __crc32ch, __crc32cw, and __crc32cd without -march=armv8-a+crc',
> +        args: test_c_args)
> +      # Use ARM CRC Extension unconditionally
> +      cdata.set('USE_ARMV8_CRC32C', 1)
> +      have_optimized_crc = true
> +    elif cc.links(prog, name: '__crc32cb, __crc32ch, __crc32cw, and __crc32cd with -march=armv8-a+crc',
> +        args: test_c_args + ['-march=armv8-a+crc'])
> +      # Use ARM CRC Extension, with runtime check
> +      cflags_crc += '-march=armv8-a+crc'
> +      cdata.set('USE_ARMV8_CRC32C', false)
> +      cdata.set('USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK', 1)
> +      have_optimized_crc = true
> +    endif
>    endif
>  endif

And then this reindent wouldn't be needed.

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: Using WaitEventSet in the postmaster
Next
From: Jonathan Lemig
Date:
Subject: Re: Request to modify view_table_usage to include materialized views