diff --git a/sys/contrib/openzfs/module/Makefile.bsd b/sys/contrib/openzfs/module/Makefile.bsd --- a/sys/contrib/openzfs/module/Makefile.bsd +++ b/sys/contrib/openzfs/module/Makefile.bsd @@ -47,6 +47,11 @@ -DHAVE_AVX -DHAVE_AVX2 -DHAVE_AVX512F -DHAVE_AVX512VL .endif +.if ${MACHINE_ARCH} == "aarch64" +# Use the aarch64 implementation based on the SSE2 and SSE4_1 intel code +CFLAGS+= -DHAVE_SSE2 -DHAVE_SSE4_1 +.endif + .if defined(WITH_DEBUG) && ${WITH_DEBUG} == "true" CFLAGS+= -DZFS_DEBUG -g .if defined(WITH_INVARIANTS) && ${WITH_INVARIANTS} == "true" diff --git a/sys/contrib/openzfs/module/icp/algs/blake3/blake3_impl.h b/sys/contrib/openzfs/module/icp/algs/blake3/blake3_impl.h --- a/sys/contrib/openzfs/module/icp/algs/blake3/blake3_impl.h +++ b/sys/contrib/openzfs/module/icp/algs/blake3/blake3_impl.h @@ -70,13 +70,13 @@ extern const blake3_ops_t blake3_generic_impl; -#if defined(__aarch64__) || \ +#if (defined(__aarch64__) && defined(HAVE_SSE2)) || \ (defined(__x86_64) && defined(HAVE_SSE2)) || \ (defined(__PPC64__) && defined(__LITTLE_ENDIAN__)) extern const blake3_ops_t blake3_sse2_impl; #endif -#if defined(__aarch64__) || \ +#if (defined(__aarch64__) && defined(HAVE_SSE4_1) || \ (defined(__x86_64) && defined(HAVE_SSE4_1)) || \ (defined(__PPC64__) && defined(__LITTLE_ENDIAN__)) extern const blake3_ops_t blake3_sse41_impl; diff --git a/sys/contrib/openzfs/module/icp/algs/blake3/blake3_impl.c b/sys/contrib/openzfs/module/icp/algs/blake3/blake3_impl.c --- a/sys/contrib/openzfs/module/icp/algs/blake3/blake3_impl.c +++ b/sys/contrib/openzfs/module/icp/algs/blake3/blake3_impl.c @@ -30,12 +30,12 @@ static const blake3_ops_t *const blake3_impls[] = { &blake3_generic_impl, -#if defined(__aarch64__) || \ +#if (defined(__aarch64__) && defined(HAVE_SSE2)) || \ (defined(__x86_64) && defined(HAVE_SSE2)) || \ (defined(__PPC64__) && defined(__LITTLE_ENDIAN__)) &blake3_sse2_impl, #endif -#if defined(__aarch64__) || \ +#if (defined(__aarch64__) && defined(HAVE_SSE4_1)) || \ (defined(__x86_64) && defined(HAVE_SSE4_1)) || \ (defined(__PPC64__) && defined(__LITTLE_ENDIAN__)) &blake3_sse41_impl, diff --git a/sys/contrib/openzfs/module/icp/algs/blake3/blake3_x86-64.c b/sys/contrib/openzfs/module/icp/algs/blake3/blake3_x86-64.c --- a/sys/contrib/openzfs/module/icp/algs/blake3/blake3_x86-64.c +++ b/sys/contrib/openzfs/module/icp/algs/blake3/blake3_x86-64.c @@ -25,7 +25,7 @@ #include "blake3_impl.h" -#if defined(__aarch64__) || \ +#if (defined(__aarch64__) && defined(HAVE_SSE2)) || \ (defined(__x86_64) && defined(HAVE_SSE2)) || \ (defined(__PPC64__) && defined(__LITTLE_ENDIAN__)) @@ -91,7 +91,7 @@ }; #endif -#if defined(__aarch64__) || \ +#if (defined(__aarch64__) && defined(HAVE_SSE2)) || \ (defined(__x86_64) && defined(HAVE_SSE2)) || \ (defined(__PPC64__) && defined(__LITTLE_ENDIAN__)) diff --git a/sys/modules/zfs/Makefile b/sys/modules/zfs/Makefile --- a/sys/modules/zfs/Makefile +++ b/sys/modules/zfs/Makefile @@ -41,6 +41,11 @@ -DHAVE_AVX -DHAVE_AVX2 -DHAVE_AVX512F -DHAVE_AVX512VL -DHAVE_AVX512BW .endif +.if ${MACHINE_ARCH} == "aarch64" +# Use the aarch64 implementation based on the SSE2 and SSE4_1 intel code +CFLAGS+= -DHAVE_SSE2 -DHAVE_SSE4_1 +.endif + .if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "powerpc" || \ ${MACHINE_ARCH} == "powerpcspe" || ${MACHINE_ARCH} == "arm" CFLAGS+= -DBITS_PER_LONG=32