From 38ceccb5796cd34b430eb978a6cec56427aad0a2 Mon Sep 17 00:00:00 2001 From: Fabrice Fontaine Date: Sat, 7 Dec 2019 20:39:30 +0100 Subject: [PATCH] package/xxhash: bump to version 0.7.2 - Remove patch (already in version) - Update hash of LICENSE file and remove xxhsum.c from XXHASH_LICENSE_FILES as LICENSE contains both licenses (BSD-2-Clause and GPL-2.0+) since https://github.com/Cyan4973/xxHash/commit/330444389b5091db1fae1cc58c890b9f99b8b35d - Update XXHASH_LICENSE to specify that BSD-2-Clause is for the library and GPL-2.0+ for xxhsum CLI Signed-off-by: Fabrice Fontaine Signed-off-by: Peter Korsgaard --- ...SX-POWER8-support-and-disable-POWER7.patch | 233 ------------------ package/xxhash/xxhash.hash | 5 +- package/xxhash/xxhash.mk | 6 +- 3 files changed, 5 insertions(+), 239 deletions(-) delete mode 100644 package/xxhash/0001-PPC64-Fix-VSX-POWER8-support-and-disable-POWER7.patch diff --git a/package/xxhash/0001-PPC64-Fix-VSX-POWER8-support-and-disable-POWER7.patch b/package/xxhash/0001-PPC64-Fix-VSX-POWER8-support-and-disable-POWER7.patch deleted file mode 100644 index 11cb3414ed..0000000000 --- a/package/xxhash/0001-PPC64-Fix-VSX-POWER8-support-and-disable-POWER7.patch +++ /dev/null @@ -1,233 +0,0 @@ -From 512b8836658450e73ab9bd876f9500032e25b634 Mon Sep 17 00:00:00 2001 -From: "easyaspi314 (Devin)" -Date: Tue, 20 Aug 2019 21:06:11 -0400 -Subject: [PATCH] [PPC64] Fix VSX, POWER8 support, and disable POWER7. - -The VSX codepath is now working on POWER8 and is fully enabled. - -The little endian code has been verified on POWER8E, although -a big endian machine was not available. - -This uses vpermxor from POWER8 to shuffle on big endian. - -There are a few other fixes as well to unify endian memes. -[Retrieved from: -https://github.com/Cyan4973/xxHash/commit/512b8836658450e73ab9bd876f9500032e25b634] -Signed-off-by: Fabrice Fontaine ---- - xxh3.h | 115 ++++++++++++++++++++++++++++++++++++++++++++----------- - xxhsum.c | 6 ++- - 2 files changed, 96 insertions(+), 25 deletions(-) - -diff --git a/xxh3.h b/xxh3.h -index 77dc955..d5fede8 100644 ---- a/xxh3.h -+++ b/xxh3.h -@@ -91,7 +91,7 @@ - && (defined(__ARM_NEON__) || defined(__ARM_NEON)) \ - && defined(__LITTLE_ENDIAN__) /* ARM big endian is a thing */ - # define XXH_VECTOR XXH_NEON --# elif defined(__PPC64__) && defined(__VSX__) && defined(__GNUC__) -+# elif defined(__PPC64__) && defined(__POWER8_VECTOR__) && defined(__GNUC__) - # define XXH_VECTOR XXH_VSX - # else - # define XXH_VECTOR XXH_SCALAR -@@ -122,24 +122,85 @@ - # define XXH_mult32to64(x, y) ((U64)((x) & 0xFFFFFFFF) * (U64)((y) & 0xFFFFFFFF)) - #endif - --/* VSX stuff */ -+/* VSX stuff. It's a lot because VSX support is mediocre across compilers and -+ * there is a lot of mischief with endianness. */ - #if XXH_VECTOR == XXH_VSX - # include - # undef vector - typedef __vector unsigned long long U64x2; -+typedef __vector unsigned char U8x16; - typedef __vector unsigned U32x4; -+ -+#ifndef XXH_VSX_BE -+# ifdef __BIG_ENDIAN__ -+# define XXH_VSX_BE 1 -+# elif defined(__VEC_ELEMENT_REG_ORDER__) && __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__ -+# warning "-maltivec=be is not recommended. Please use native endianness." -+# define XXH_VSX_BE 1 -+# else -+# define XXH_VSX_BE 0 -+# endif -+#endif -+ -+/* We need some helpers for big endian mode. */ -+#if XXH_VSX_BE -+/* A wrapper for POWER9's vec_revb. */ -+# ifdef __POWER9_VECTOR__ -+# define XXH_vec_revb vec_revb -+# else -+XXH_FORCE_INLINE U64x2 XXH_vec_revb(U64x2 val) -+{ -+ U8x16 const vByteSwap = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, -+ 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08 }; -+ return vec_perm(val, val, vByteSwap); -+} -+# endif -+ -+/* Power8 Crypto gives us vpermxor which is very handy for -+ * PPC64EB. -+ * -+ * U8x16 vpermxor(U8x16 a, U8x16 b, U8x16 mask) -+ * { -+ * U8x16 ret; -+ * for (int i = 0; i < 16; i++) { -+ * ret[i] = a[mask[i] & 0xF] ^ b[mask[i] >> 4]; -+ * } -+ * return ret; -+ * } -+ * -+ * Because both of the main loops load the key, swap, and xor it with data, -+ * we can combine the key swap into this instruction. -+ */ -+# ifdef vec_permxor -+# define XXH_vec_permxor vec_permxor -+# else -+# define XXH_vec_permxor __builtin_crypto_vpermxor -+# endif -+#endif -+/* -+ * Because we reinterpret the multiply, there are endian memes: vec_mulo actually becomes -+ * vec_mule. -+ * -+ * Additionally, the intrinsic wasn't added until GCC 8, despite existing for a while. -+ * Clang has an easy way to control this, we can just use the builtin which doesn't swap. -+ * GCC needs inline assembly. */ -+#if __has_builtin(__builtin_altivec_vmuleuw) -+# define XXH_vec_mulo __builtin_altivec_vmulouw -+# define XXH_vec_mule __builtin_altivec_vmuleuw -+#else - /* Adapted from https://github.com/google/highwayhash/blob/master/highwayhash/hh_vsx.h. */ --XXH_FORCE_INLINE U64x2 XXH_vsxMultOdd(U32x4 a, U32x4 b) { -+XXH_FORCE_INLINE U64x2 XXH_vec_mulo(U32x4 a, U32x4 b) { - U64x2 result; - __asm__("vmulouw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b)); - return result; - } --XXH_FORCE_INLINE U64x2 XXH_vsxMultEven(U32x4 a, U32x4 b) { -+XXH_FORCE_INLINE U64x2 XXH_vec_mule(U32x4 a, U32x4 b) { - U64x2 result; - __asm__("vmuleuw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b)); - return result; - } - #endif -+#endif - - - /* ========================================== -@@ -558,38 +619,41 @@ XXH3_accumulate_512( void* XXH_RESTRICT acc, - } - } - --#elif (XXH_VECTOR == XXH_VSX) && 0 /* <=========================== DISABLED : MUST BE VALIDATED */ -- /* note : vsx code path currently not tested in CI (limitation of cross-compiler and/or emulator) -- * for vsx code path to be shipped and supported, it is critical to create a CI test for it */ -+#elif (XXH_VECTOR == XXH_VSX) - U64x2* const xacc = (U64x2*) acc; /* presumed aligned */ - U64x2 const* const xdata = (U64x2 const*) data; /* no alignment restriction */ - U64x2 const* const xkey = (U64x2 const*) key; /* no alignment restriction */ - U64x2 const v32 = { 32, 32 }; -- -+#if XXH_VSX_BE -+ U8x16 const vXorSwap = { 0x07, 0x16, 0x25, 0x34, 0x43, 0x52, 0x61, 0x70, -+ 0x8F, 0x9E, 0xAD, 0xBC, 0xCB, 0xDA, 0xE9, 0xF8 }; -+#endif - size_t i; - for (i = 0; i < STRIPE_LEN / sizeof(U64x2); i++) { - /* data_vec = xdata[i]; */ - /* key_vec = xkey[i]; */ --#ifdef __BIG_ENDIAN__ -+#if XXH_VSX_BE - /* byteswap */ -- U64x2 const data_vec = vec_revb(vec_vsx_ld(0, xdata + i)); /* note : vec_revb is power9+ */ -- U64x2 const key_vec = vec_revb(vec_vsx_ld(0, xkey + i)); /* note : vec_revb is power9+ */ -+ U64x2 const data_vec = XXH_vec_revb(vec_vsx_ld(0, xdata + i)); -+ U64x2 const key_raw = vec_vsx_ld(0, xkey + i); -+ /* See comment above. data_key = data_vec ^ swap(xkey[i]); */ -+ U64x2 const data_key = (U64x2)XXH_vec_permxor((U8x16)data_vec, (U8x16)key_raw, vXorSwap); - #else - U64x2 const data_vec = vec_vsx_ld(0, xdata + i); - U64x2 const key_vec = vec_vsx_ld(0, xkey + i); --#endif - U64x2 const data_key = data_vec ^ key_vec; -+#endif - /* shuffled = (data_key << 32) | (data_key >> 32); */ - U32x4 const shuffled = (U32x4)vec_rl(data_key, v32); - /* product = ((U64x2)data_key & 0xFFFFFFFF) * ((U64x2)shuffled & 0xFFFFFFFF); */ -- U64x2 const product = XXH_vsxMultOdd((U32x4)data_key, shuffled); -- -+ U64x2 const product = XXH_vec_mulo((U32x4)data_key, shuffled); - xacc[i] += product; - - if (accWidth == XXH3_acc_64bits) { - xacc[i] += data_vec; - } else { /* XXH3_acc_128bits */ -- U64x2 const data_swapped = vec_permi(data_vec, data_vec, 2); /* <===== untested !!! */ -+ /* swap high and low halves */ -+ U64x2 const data_swapped = vec_xxpermdi(data_vec, data_vec, 2); - xacc[i] += data_swapped; - } - } -@@ -716,26 +780,31 @@ XXH3_scrambleAcc(void* XXH_RESTRICT acc, const void* XXH_RESTRICT key) - U64x2 const v47 = { 47, 47 }; - U32x4 const prime = { PRIME32_1, PRIME32_1, PRIME32_1, PRIME32_1 }; - size_t i; -- -+#if XXH_VSX_BE -+ /* endian swap */ -+ U8x16 const vXorSwap = { 0x07, 0x16, 0x25, 0x34, 0x43, 0x52, 0x61, 0x70, -+ 0x8F, 0x9E, 0xAD, 0xBC, 0xCB, 0xDA, 0xE9, 0xF8 }; -+#endif - for (i = 0; i < STRIPE_LEN / sizeof(U64x2); i++) { - U64x2 const acc_vec = xacc[i]; - U64x2 const data_vec = acc_vec ^ (acc_vec >> v47); - /* key_vec = xkey[i]; */ --#ifdef __BIG_ENDIAN__ -- /* swap 32-bit words */ -- U64x2 const key_vec = vec_rl(vec_vsx_ld(0, xkey + i), v32); -+#if XXH_VSX_BE -+ /* swap bytes words */ -+ U64x2 const key_raw = vec_vsx_ld(0, xkey + i); -+ U64x2 const data_key = (U64x2)XXH_vec_permxor((U8x16)data_vec, (U8x16)key_raw, vXorSwap); - #else - U64x2 const key_vec = vec_vsx_ld(0, xkey + i); --#endif - U64x2 const data_key = data_vec ^ key_vec; -+#endif - - /* data_key *= PRIME32_1 */ - - /* prod_lo = ((U64x2)data_key & 0xFFFFFFFF) * ((U64x2)prime & 0xFFFFFFFF); */ -- U64x2 const prod_lo = XXH_vsxMultOdd((U32x4)data_key, prime); -+ U64x2 const prod_even = XXH_vec_mule((U32x4)data_key, prime); - /* prod_hi = ((U64x2)data_key >> 32) * ((U64x2)prime >> 32); */ -- U64x2 const prod_hi = XXH_vsxMultEven((U32x4)data_key, prime); -- xacc[i] = prod_lo + (prod_hi << v32); -+ U64x2 const prod_odd = XXH_vec_mulo((U32x4)data_key, prime); -+ xacc[i] = prod_odd + (prod_even << v32); - } - - #else /* scalar variant of Scrambler - universal */ -diff --git a/xxhsum.c b/xxhsum.c -index 19685aa..c979966 100644 ---- a/xxhsum.c -+++ b/xxhsum.c -@@ -224,8 +224,10 @@ static unsigned BMK_isLittleEndian(void) - # define ARCH "arm" - # endif - #elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) --# if defined(__GNUC__) && defined(__VSX__) --# define ARCH "ppc64 + VSX" -+# if defined(__GNUC__) && defined(__POWER9_VECTOR__) -+# define ARCH "ppc64 + POWER9 vector" -+# elif defined(__GNUC__) && defined(__POWER8_VECTOR__) -+# define ARCH "ppc64 + POWER8 vector" - # else - # define ARCH "ppc64" - # endif diff --git a/package/xxhash/xxhash.hash b/package/xxhash/xxhash.hash index c36156b11e..097694364b 100644 --- a/package/xxhash/xxhash.hash +++ b/package/xxhash/xxhash.hash @@ -1,4 +1,3 @@ # locally computed -sha256 afa29766cfc0448ff4a1fd9f2c47e02c48d50be5b79749925d15d545008c3f81 xxhash-0.7.1.tar.gz -sha256 86ec6953794503942b70fcd4f35b565d44f63f703b7037ce44dad965c4aaae91 LICENSE -sha256 fd824b4aeb8dfe48a89d43bb844e4c1a9b3140e884e0fe47fb7534505d113afe xxhsum.c +sha256 7e93d28e81c3e95ff07674a400001d0cdf23b7842d49b211e5582d00d8e3ac3e xxhash-0.7.2.tar.gz +sha256 94df5da58df6c83bcc2fc0c84aaad71a0b0fe94625060d6cac000121dda37730 LICENSE diff --git a/package/xxhash/xxhash.mk b/package/xxhash/xxhash.mk index 289fb4f506..bd51c9bd1b 100644 --- a/package/xxhash/xxhash.mk +++ b/package/xxhash/xxhash.mk @@ -4,10 +4,10 @@ # ################################################################################ -XXHASH_VERSION = 0.7.1 +XXHASH_VERSION = 0.7.2 XXHASH_SITE = $(call github,Cyan4973,xxHash,v$(XXHASH_VERSION)) -XXHASH_LICENSE = BSD-2-Clause, GPL-2.0+ -XXHASH_LICENSE_FILES = LICENSE xxhsum.c +XXHASH_LICENSE = BSD-2-Clause (library), GPL-2.0+ (xxhsum) +XXHASH_LICENSE_FILES = LICENSE define XXHASH_BUILD_CMDS $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) xxhsum -- 2.30.2