[x265] [PATCH] Fix compilation errors on MAC Apple silicon

Aruna Matheswaran aruna at multicorewareinc.com
Wed Aug 11 09:35:46 UTC 2021


Pushed to master.

On Wed, Aug 11, 2021 at 2:08 PM Kalaiyarasi Saravanan <
kalaiyarasi at multicorewareinc.com> wrote:

> From 47f2a32447172d033b7ebf9d7641ddbff47b758c Mon Sep 17 00:00:00 2001
> From: lwWang <liwei at multicorewareinc.com>
> Date: Wed, 11 Aug 2021 10:50:43 +0800
> Subject: [PATCH] fix the compiling errors on MAC
>
> ---
>  source/CMakeLists.txt              |  7 +++-
>  source/cmake/FindNeon.cmake        | 17 ++++++--
>  source/common/aarch64/asm.S        | 28 ++++++++++++-
>  source/common/aarch64/ipfilter8.S  | 66 ++++++++++++++++--------------
>  source/common/aarch64/mc-a.S       |  4 ++
>  source/common/aarch64/pixel-util.S |  4 ++
>  source/common/aarch64/sad-a.S      | 20 +++++----
>  source/test/testharness.h          |  2 +-
>  8 files changed, 100 insertions(+), 48 deletions(-)
>
> diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
> index b4e57b592..f2fd51137 100755
> --- a/source/CMakeLists.txt
> +++ b/source/CMakeLists.txt
> @@ -40,7 +40,7 @@ SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake"
> "${CMAKE_MODULE_PATH}")
>  # System architecture detection
>  string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" SYSPROC)
>  set(X86_ALIASES x86 i386 i686 x86_64 amd64)
> -set(ARM_ALIASES armv6l armv7l aarch64)
> +set(ARM_ALIASES armv6l armv7l aarch64 arm64)
>  list(FIND X86_ALIASES "${SYSPROC}" X86MATCH)
>  list(FIND ARM_ALIASES "${SYSPROC}" ARMMATCH)
>  set(POWER_ALIASES ppc64 ppc64le)
> @@ -248,7 +248,10 @@ if(GCC)
>      elseif(ARM)
>          if(ARM64)
>              set(ARM_ARGS -fPIC)
> -            add_definitions(-DHAVE_NEON)
> +            find_package(Neon)
> +            if(CPU_HAS_NEON)
> +                add_definitions(-DHAVE_NEON)
> +            endif()
>          else()
>              find_package(Neon)
>              if(CPU_HAS_NEON)
> diff --git a/source/cmake/FindNeon.cmake b/source/cmake/FindNeon.cmake
> index 0062449c3..2b8751248 100644
> --- a/source/cmake/FindNeon.cmake
> +++ b/source/cmake/FindNeon.cmake
> @@ -1,10 +1,19 @@
>  include(FindPackageHandleStandardArgs)
>
>  # Check the version of neon supported by the ARM CPU
> -execute_process(COMMAND cat /proc/cpuinfo | grep Features | grep neon
> -                OUTPUT_VARIABLE neon_version
> -                ERROR_QUIET
> -                OUTPUT_STRIP_TRAILING_WHITESPACE)
> +if(APPLE)
> +    execute_process(COMMAND sysctl -a
> +                    COMMAND grep "hw.optional.neon: 1"
> +                    OUTPUT_VARIABLE neon_version
> +                    ERROR_QUIET
> +                    OUTPUT_STRIP_TRAILING_WHITESPACE)
> +else()
> +    execute_process(COMMAND cat /proc/cpuinfo | grep Features | grep neon
> +                    OUTPUT_VARIABLE neon_version
> +                    ERROR_QUIET
> +                    OUTPUT_STRIP_TRAILING_WHITESPACE)
> +endif()
> +
>  if(neon_version)
>      set(CPU_HAS_NEON 1)
>  endif()
> diff --git a/source/common/aarch64/asm.S b/source/common/aarch64/asm.S
> index 5f020a11a..527f819ed 100644
> --- a/source/common/aarch64/asm.S
> +++ b/source/common/aarch64/asm.S
> @@ -23,32 +23,56 @@
>
>  .arch           armv8-a
>
> +#ifdef __APPLE__
> +#define PREFIX 1
> +#endif
> +
>  #ifdef PREFIX
>  #define EXTERN_ASM _
> +#define HAVE_AS_FUNC 0
>  #else
>  #define EXTERN_ASM
> +#define HAVE_AS_FUNC 1
>  #endif
>
>  #ifdef __ELF__
>  #define ELF
>  #else
> +#ifdef PREFIX
> +#define ELF #
> +#else
>  #define ELF @
>  #endif
> -
> -#define HAVE_AS_FUNC 1
> +#endif
>
>  #if HAVE_AS_FUNC
>  #define FUNC
>  #else
> +#ifdef PREFIX
> +#define FUNC #
> +#else
>  #define FUNC @
>  #endif
> +#endif
> +
> +#ifdef __APPLE__
> +.macro endfunc
> +ELF .size \name, . - \name
> +FUNC .endfunc
> +.endm
> +#endif
>
>  .macro function name, export=1
> +#ifdef __APPLE__
> +    .global \name
> +    endfunc
> +#else
>      .macro endfunc
>  ELF     .size   \name, . - \name
>  FUNC    .endfunc
>          .purgem endfunc
>      .endm
> +#endif
>          .align  2
>  .if \export == 1
>          .global EXTERN_ASM\name
> diff --git a/source/common/aarch64/ipfilter8.S
> b/source/common/aarch64/ipfilter8.S
> index 908c7db46..685f839b8 100644
> --- a/source/common/aarch64/ipfilter8.S
> +++ b/source/common/aarch64/ipfilter8.S
> @@ -23,7 +23,11 @@
>
>  #include "asm.S"
>
> +#ifdef __APPLE__
> +.section __RODATA, __rodata
> +#else
>  .section .rodata
> +#endif
>
>  .align 4
>
> @@ -197,10 +201,10 @@
>      b.eq            15f
>      b               7f
>  14:
> -    HPS_FILTER_4 \a \b \filterhps
> +    HPS_FILTER_4 \a, \b, \filterhps
>      b               10f
>  15:
> -    HPS_FILTER_12 \a \b \filterhps
> +    HPS_FILTER_12 \a, \b, \filterhps
>      b               10f
>  7:
>      cmp             w5, #0
> @@ -371,44 +375,44 @@ function x265_interp_8tap_horiz_ps_\w\()x\h\()_neon
>      cmp             w4, #3
>      b.eq            3f
>  0:
> -    HPS_FILTER  \w \h qpel_filter_0_32b
> +    HPS_FILTER  \w, \h, qpel_filter_0_32b
>      b               5f
>  1:
> -    HPS_FILTER  \w \h qpel_filter_1_32b
> +    HPS_FILTER  \w, \h, qpel_filter_1_32b
>      b               5f
>  2:
> -    HPS_FILTER  \w \h qpel_filter_2_32b
> +    HPS_FILTER  \w, \h, qpel_filter_2_32b
>      b               5f
>  3:
> -    HPS_FILTER  \w \h qpel_filter_3_32b
> +    HPS_FILTER  \w, \h, qpel_filter_3_32b
>      b               5f
>  5:
>      ret
>  endfunc
>  .endm
>
> -LUMA_HPS    4 4
> -LUMA_HPS    4 8
> -LUMA_HPS    4 16
> -LUMA_HPS    8 4
> -LUMA_HPS    8 8
> -LUMA_HPS    8 16
> -LUMA_HPS    8 32
> -LUMA_HPS    12 16
> -LUMA_HPS    16 4
> -LUMA_HPS    16 8
> -LUMA_HPS    16 12
> -LUMA_HPS    16 16
> -LUMA_HPS    16 32
> -LUMA_HPS    16 64
> -LUMA_HPS    24 32
> -LUMA_HPS    32 8
> -LUMA_HPS    32 16
> -LUMA_HPS    32 24
> -LUMA_HPS    32 32
> -LUMA_HPS    32 64
> -LUMA_HPS    48 64
> -LUMA_HPS    64 16
> -LUMA_HPS    64 32
> -LUMA_HPS    64 48
> -LUMA_HPS    64 64
> +LUMA_HPS    4,4
> +LUMA_HPS    4,8
> +LUMA_HPS    4,16
> +LUMA_HPS    8,4
> +LUMA_HPS    8,8
> +LUMA_HPS    8,16
> +LUMA_HPS    8,32
> +LUMA_HPS    12,16
> +LUMA_HPS    16,4
> +LUMA_HPS    16,8
> +LUMA_HPS    16,12
> +LUMA_HPS    16,16
> +LUMA_HPS    16,32
> +LUMA_HPS    16,64
> +LUMA_HPS    24,32
> +LUMA_HPS    32,8
> +LUMA_HPS    32,16
> +LUMA_HPS    32,24
> +LUMA_HPS    32,32
> +LUMA_HPS    32,64
> +LUMA_HPS    48,64
> +LUMA_HPS    64,16
> +LUMA_HPS    64,32
> +LUMA_HPS    64,48
> +LUMA_HPS    64,64
> diff --git a/source/common/aarch64/mc-a.S b/source/common/aarch64/mc-a.S
> index cbaf9b501..339b53ae4 100644
> --- a/source/common/aarch64/mc-a.S
> +++ b/source/common/aarch64/mc-a.S
> @@ -23,7 +23,11 @@
>
>  #include "asm.S"
>
> +#ifdef __APPLE__
> +.section __RODATA,__rodata
> +#else
>  .section .rodata
> +#endif
>
>  .align 4
>
> diff --git a/source/common/aarch64/pixel-util.S
> b/source/common/aarch64/pixel-util.S
> index a085ebdfa..13c85ad8f 100644
> --- a/source/common/aarch64/pixel-util.S
> +++ b/source/common/aarch64/pixel-util.S
> @@ -24,7 +24,11 @@
>
>  #include "asm.S"
>
> +#ifdef __APPLE__
> +.section __RODATA,__rodata
> +#else
>  .section .rodata
> +#endif
>
>  .align 4
>
> diff --git a/source/common/aarch64/sad-a.S b/source/common/aarch64/sad-a.S
> index c27cce5ce..04269d381 100644
> --- a/source/common/aarch64/sad-a.S
> +++ b/source/common/aarch64/sad-a.S
> @@ -23,7 +23,11 @@
>
>  #include "asm.S"
>
> +#ifdef __APPLE__
> +.section __RODATA,__rodata
> +#else
>  .section .rodata
> +#endif
>
>  .align 4
>
> @@ -94,12 +98,12 @@ function x265_sad_x\x\()_8x\h\()_neon
>  endfunc
>  .endm
>
> -SAD_X_8xN 3 4
> -SAD_X_8xN 3 8
> -SAD_X_8xN 3 16
> -SAD_X_8xN 3 32
> +SAD_X_8xN 3,4
> +SAD_X_8xN 3,8
> +SAD_X_8xN 3,16
> +SAD_X_8xN 3,32
>
> -SAD_X_8xN 4 4
> -SAD_X_8xN 4 8
> -SAD_X_8xN 4 16
> -SAD_X_8xN 4 32
> +SAD_X_8xN 4,4
> +SAD_X_8xN 4,8
> +SAD_X_8xN 4,16
> +SAD_X_8xN 4,32
> diff --git a/source/test/testharness.h b/source/test/testharness.h
> index 6e680953f..088343b51 100644
> --- a/source/test/testharness.h
> +++ b/source/test/testharness.h
> @@ -73,7 +73,7 @@ protected:
>  #include <x86intrin.h>
>  #elif ( !defined(__APPLE__) && defined (__GNUC__) &&
> defined(__ARM_NEON__))
>  #include <arm_neon.h>
> -#elif defined(__GNUC__) && (!defined(__clang__) || __clang_major__ < 4)
> +#else
>  /* fallback for older GCC/MinGW */
>  static inline uint32_t __rdtsc(void)
>  {
> --
> 2.22.0.windows.1
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>


-- 
Regards,
*Aruna Matheswaran,*
Video Codec Engineer,
Media & AI analytics BU,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20210811/24198b54/attachment.html>


More information about the x265-devel mailing list