digest-xxhash 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/ext/digest/xxhash/xxhash.h +135 -38
- data/lib/digest/xxhash/version.rb +1 -1
- data/rakelib/alt-install-task.rake +1 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 919358191e0f1f26b79b95bc7253d80ec46b26aabcaa729c0b82fd69d7ffd2ff
|
4
|
+
data.tar.gz: 5111f27d4afb62092f5643e7f85fa07e6b46a20863f7682c2993902fd22b31a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ddde4f920bd2ea2a62f131650bf58b884c5006568887ca6c5c35c38ca1a73c4bd566198a7366c72e0576d02f850728715f47623afa2052b54636734462f0c32
|
7
|
+
data.tar.gz: 3fd5a9ce98fba62c9e8c246a64fd64c49b7692cf4c7056b7ff9894cf21015acce1723a792d5cef4f09da2b6e5bbea24a77f4c8cd6b0bf486db19587c40077e5e
|
data/LICENSE
CHANGED
data/ext/digest/xxhash/xxhash.h
CHANGED
@@ -547,6 +547,7 @@ typedef uint32_t XXH32_hash_t;
|
|
547
547
|
*/
|
548
548
|
XXH_PUBLIC_API XXH_PUREF XXH32_hash_t XXH32 (const void* input, size_t length, XXH32_hash_t seed);
|
549
549
|
|
550
|
+
#ifndef XXH_NO_STREAM
|
550
551
|
/*!
|
551
552
|
* Streaming functions generate the xxHash value from an incremental input.
|
552
553
|
* This method is slower than single-call functions, due to state management.
|
@@ -655,6 +656,7 @@ XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void*
|
|
655
656
|
* @return The calculated xxHash32 value from that state.
|
656
657
|
*/
|
657
658
|
XXH_PUBLIC_API XXH_PUREF XXH32_hash_t XXH32_digest (const XXH32_state_t* statePtr);
|
659
|
+
#endif /* !XXH_NO_STREAM */
|
658
660
|
|
659
661
|
/******* Canonical representation *******/
|
660
662
|
|
@@ -814,6 +816,7 @@ typedef uint64_t XXH64_hash_t;
|
|
814
816
|
XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH64(const void* input, size_t length, XXH64_hash_t seed);
|
815
817
|
|
816
818
|
/******* Streaming *******/
|
819
|
+
#ifndef XXH_NO_STREAM
|
817
820
|
/*!
|
818
821
|
* @brief The opaque state struct for the XXH64 streaming API.
|
819
822
|
*
|
@@ -827,7 +830,7 @@ XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_
|
|
827
830
|
XXH_PUBLIC_API XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, XXH64_hash_t seed);
|
828
831
|
XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length);
|
829
832
|
XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH64_digest (const XXH64_state_t* statePtr);
|
830
|
-
|
833
|
+
#endif /* !XXH_NO_STREAM */
|
831
834
|
/******* Canonical representation *******/
|
832
835
|
typedef struct { unsigned char digest[sizeof(XXH64_hash_t)]; } XXH64_canonical_t;
|
833
836
|
XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash);
|
@@ -949,6 +952,7 @@ XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH3_64bits_withSecret(const void* data, s
|
|
949
952
|
|
950
953
|
|
951
954
|
/******* Streaming *******/
|
955
|
+
#ifndef XXH_NO_STREAM
|
952
956
|
/*
|
953
957
|
* Streaming requires state maintenance.
|
954
958
|
* This operation costs memory and CPU.
|
@@ -991,6 +995,7 @@ XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr
|
|
991
995
|
|
992
996
|
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update (XXH3_state_t* statePtr, const void* input, size_t length);
|
993
997
|
XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* statePtr);
|
998
|
+
#endif /* !XXH_NO_STREAM */
|
994
999
|
|
995
1000
|
/* note : canonical representation of XXH3 is the same as XXH64
|
996
1001
|
* since they both produce XXH64_hash_t values */
|
@@ -1035,6 +1040,7 @@ XXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits_withSeed(const void* data, s
|
|
1035
1040
|
XXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize);
|
1036
1041
|
|
1037
1042
|
/******* Streaming *******/
|
1043
|
+
#ifndef XXH_NO_STREAM
|
1038
1044
|
/*
|
1039
1045
|
* Streaming requires state maintenance.
|
1040
1046
|
* This operation costs memory and CPU.
|
@@ -1053,6 +1059,7 @@ XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t* statePt
|
|
1053
1059
|
|
1054
1060
|
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update (XXH3_state_t* statePtr, const void* input, size_t length);
|
1055
1061
|
XXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* statePtr);
|
1062
|
+
#endif /* !XXH_NO_STREAM */
|
1056
1063
|
|
1057
1064
|
/* Following helper functions make it possible to compare XXH128_hast_t values.
|
1058
1065
|
* Since XXH128_hash_t is a structure, this capability is not offered by the language.
|
@@ -1398,6 +1405,7 @@ XXH_PUBLIC_API XXH_PUREF XXH128_hash_t
|
|
1398
1405
|
XXH3_128bits_withSecretandSeed(const void* input, size_t length,
|
1399
1406
|
const void* secret, size_t secretSize,
|
1400
1407
|
XXH64_hash_t seed64);
|
1408
|
+
#ifndef XXH_NO_STREAM
|
1401
1409
|
/*! @copydoc XXH3_64bits_withSecretandSeed() */
|
1402
1410
|
XXH_PUBLIC_API XXH_errorcode
|
1403
1411
|
XXH3_64bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
|
@@ -1408,7 +1416,7 @@ XXH_PUBLIC_API XXH_errorcode
|
|
1408
1416
|
XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
|
1409
1417
|
const void* secret, size_t secretSize,
|
1410
1418
|
XXH64_hash_t seed64);
|
1411
|
-
|
1419
|
+
#endif /* !XXH_NO_STREAM */
|
1412
1420
|
|
1413
1421
|
#endif /* !XXH_NO_XXH3 */
|
1414
1422
|
#endif /* XXH_NO_LONG_LONG */
|
@@ -1520,6 +1528,34 @@ XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
|
|
1520
1528
|
*/
|
1521
1529
|
# define XXH_FORCE_MEMORY_ACCESS 0
|
1522
1530
|
|
1531
|
+
/*!
|
1532
|
+
* @def XXH_SIZE_OPT
|
1533
|
+
* @brief Controls how much xxHash optimizes for size.
|
1534
|
+
*
|
1535
|
+
* xxHash, when compiled, tends to result in a rather large binary size. This
|
1536
|
+
* is mostly due to heavy usage to forced inlining and constant folding of the
|
1537
|
+
* @ref XXH3_family to increase performance.
|
1538
|
+
*
|
1539
|
+
* However, some developers prefer size over speed. This option can
|
1540
|
+
* significantly reduce the size of the generated code. When using the `-Os`
|
1541
|
+
* or `-Oz` options on GCC or Clang, this is defined to 1 by default,
|
1542
|
+
* otherwise it is defined to 0.
|
1543
|
+
*
|
1544
|
+
* Most of these size optimizations can be controlled manually.
|
1545
|
+
*
|
1546
|
+
* This is a number from 0-2.
|
1547
|
+
* - `XXH_SIZE_OPT` == 0: Default. xxHash makes no size optimizations. Speed
|
1548
|
+
* comes first.
|
1549
|
+
* - `XXH_SIZE_OPT` == 1: Default for `-Os` and `-Oz`. xxHash is more
|
1550
|
+
* conservative and disables hacks that increase code size. It implies the
|
1551
|
+
* options @ref XXH_NO_INLINE_HINTS == 1, @ref XXH_FORCE_ALIGN_CHECK == 0,
|
1552
|
+
* and @ref XXH3_NEON_LANES == 8 if they are not already defined.
|
1553
|
+
* - `XXH_SIZE_OPT` == 2: xxHash tries to make itself as small as possible.
|
1554
|
+
* Performance may cry. For example, the single shot functions just use the
|
1555
|
+
* streaming API.
|
1556
|
+
*/
|
1557
|
+
# define XXH_SIZE_OPT 0
|
1558
|
+
|
1523
1559
|
/*!
|
1524
1560
|
* @def XXH_FORCE_ALIGN_CHECK
|
1525
1561
|
* @brief If defined to non-zero, adds a special path for aligned inputs (XXH32()
|
@@ -1541,9 +1577,11 @@ XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
|
|
1541
1577
|
*
|
1542
1578
|
* In these cases, the alignment check can be removed by setting this macro to 0.
|
1543
1579
|
* Then the code will always use unaligned memory access.
|
1544
|
-
* Align check is automatically disabled on x86, x64
|
1580
|
+
* Align check is automatically disabled on x86, x64, ARM64, and some ARM chips
|
1545
1581
|
* which are platforms known to offer good unaligned memory accesses performance.
|
1546
1582
|
*
|
1583
|
+
* It is also disabled by default when @ref XXH_SIZE_OPT >= 1.
|
1584
|
+
*
|
1547
1585
|
* This option does not affect XXH3 (only XXH32 and XXH64).
|
1548
1586
|
*/
|
1549
1587
|
# define XXH_FORCE_ALIGN_CHECK 0
|
@@ -1565,8 +1603,8 @@ XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
|
|
1565
1603
|
* XXH_NO_INLINE_HINTS marks all internal functions as static, giving the
|
1566
1604
|
* compiler full control on whether to inline or not.
|
1567
1605
|
*
|
1568
|
-
* When not optimizing (-O0),
|
1569
|
-
*
|
1606
|
+
* When not optimizing (-O0), using `-fno-inline` with GCC or Clang, or if
|
1607
|
+
* @ref XXH_SIZE_OPT >= 1, this will automatically be defined.
|
1570
1608
|
*/
|
1571
1609
|
# define XXH_NO_INLINE_HINTS 0
|
1572
1610
|
|
@@ -1591,6 +1629,17 @@ XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
|
|
1591
1629
|
*/
|
1592
1630
|
# define XXH_OLD_NAMES
|
1593
1631
|
# undef XXH_OLD_NAMES /* don't actually use, it is ugly. */
|
1632
|
+
|
1633
|
+
/*!
|
1634
|
+
* @def XXH_NO_STREAM
|
1635
|
+
* @brief Disables the streaming API.
|
1636
|
+
*
|
1637
|
+
* When xxHash is not inlined and the streaming functions are not used, disabling
|
1638
|
+
* the streaming functions can improve code size significantly, especially with
|
1639
|
+
* the @ref XXH3_family which tends to make constant folded copies of itself.
|
1640
|
+
*/
|
1641
|
+
# define XXH_NO_STREAM
|
1642
|
+
# undef XXH_NO_STREAM /* don't actually */
|
1594
1643
|
#endif /* XXH_DOXYGEN */
|
1595
1644
|
/*!
|
1596
1645
|
* @}
|
@@ -1605,9 +1654,19 @@ XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
|
|
1605
1654
|
# endif
|
1606
1655
|
#endif
|
1607
1656
|
|
1657
|
+
#ifndef XXH_SIZE_OPT
|
1658
|
+
/* default to 1 for -Os or -Oz */
|
1659
|
+
# if (defined(__GNUC__) || defined(__clang__)) && defined(__OPTIMIZE_SIZE__)
|
1660
|
+
# define XXH_SIZE_OPT 1
|
1661
|
+
# else
|
1662
|
+
# define XXH_SIZE_OPT 0
|
1663
|
+
# endif
|
1664
|
+
#endif
|
1665
|
+
|
1608
1666
|
#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */
|
1609
|
-
/* don't check on x86, aarch64, or arm when unaligned access is available */
|
1610
|
-
# if
|
1667
|
+
/* don't check on sizeopt, x86, aarch64, or arm when unaligned access is available */
|
1668
|
+
# if XXH_SIZE_OPT >= 1 || \
|
1669
|
+
defined(__i386) || defined(__x86_64__) || defined(__aarch64__) || defined(__ARM_FEATURE_UNALIGNED) \
|
1611
1670
|
|| defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64) || defined(_M_ARM) /* visual */
|
1612
1671
|
# define XXH_FORCE_ALIGN_CHECK 0
|
1613
1672
|
# else
|
@@ -1616,8 +1675,7 @@ XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
|
|
1616
1675
|
#endif
|
1617
1676
|
|
1618
1677
|
#ifndef XXH_NO_INLINE_HINTS
|
1619
|
-
# if defined(
|
1620
|
-
|| defined(__NO_INLINE__) /* -O0, -fno-inline */
|
1678
|
+
# if XXH_SIZE_OPT >= 1 || defined(__NO_INLINE__) /* -O0, -fno-inline */
|
1621
1679
|
# define XXH_NO_INLINE_HINTS 1
|
1622
1680
|
# else
|
1623
1681
|
# define XXH_NO_INLINE_HINTS 0
|
@@ -1638,7 +1696,9 @@ XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
|
|
1638
1696
|
/* *************************************
|
1639
1697
|
* Includes & Memory related functions
|
1640
1698
|
***************************************/
|
1641
|
-
#if defined(
|
1699
|
+
#if defined(XXH_NO_STREAM)
|
1700
|
+
/* nothing */
|
1701
|
+
#elif defined(XXH_NO_STDLIB)
|
1642
1702
|
|
1643
1703
|
/* When requesting to disable any mention of stdlib,
|
1644
1704
|
* the library loses the ability to invoked malloc / free.
|
@@ -2322,7 +2382,7 @@ XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment
|
|
2322
2382
|
/*! @ingroup XXH32_family */
|
2323
2383
|
XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t len, XXH32_hash_t seed)
|
2324
2384
|
{
|
2325
|
-
#if
|
2385
|
+
#if !defined(XXH_NO_STREAM) && XXH_SIZE_OPT >= 2
|
2326
2386
|
/* Simple version, good for code maintenance, but unfortunately slow for small inputs */
|
2327
2387
|
XXH32_state_t state;
|
2328
2388
|
XXH32_reset(&state, seed);
|
@@ -2341,6 +2401,7 @@ XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t len, XXH32_hash_t s
|
|
2341
2401
|
|
2342
2402
|
|
2343
2403
|
/******* Hash streaming *******/
|
2404
|
+
#ifndef XXH_NO_STREAM
|
2344
2405
|
/*! @ingroup XXH32_family */
|
2345
2406
|
XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void)
|
2346
2407
|
{
|
@@ -2445,7 +2506,7 @@ XXH_PUBLIC_API XXH32_hash_t XXH32_digest(const XXH32_state_t* state)
|
|
2445
2506
|
|
2446
2507
|
return XXH32_finalize(h32, (const xxh_u8*)state->mem32, state->memsize, XXH_aligned);
|
2447
2508
|
}
|
2448
|
-
|
2509
|
+
#endif /* !XXH_NO_STREAM */
|
2449
2510
|
|
2450
2511
|
/******* Canonical representation *******/
|
2451
2512
|
|
@@ -2764,7 +2825,7 @@ XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment
|
|
2764
2825
|
/*! @ingroup XXH64_family */
|
2765
2826
|
XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t len, XXH64_hash_t seed)
|
2766
2827
|
{
|
2767
|
-
#if
|
2828
|
+
#if !defined(XXH_NO_STREAM) && XXH_SIZE_OPT >= 2
|
2768
2829
|
/* Simple version, good for code maintenance, but unfortunately slow for small inputs */
|
2769
2830
|
XXH64_state_t state;
|
2770
2831
|
XXH64_reset(&state, seed);
|
@@ -2782,7 +2843,7 @@ XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t len, XXH64_hash_t s
|
|
2782
2843
|
}
|
2783
2844
|
|
2784
2845
|
/******* Hash Streaming *******/
|
2785
|
-
|
2846
|
+
#ifndef XXH_NO_STREAM
|
2786
2847
|
/*! @ingroup XXH64_family*/
|
2787
2848
|
XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void)
|
2788
2849
|
{
|
@@ -2884,7 +2945,7 @@ XXH_PUBLIC_API XXH64_hash_t XXH64_digest(const XXH64_state_t* state)
|
|
2884
2945
|
|
2885
2946
|
return XXH64_finalize(h64, (const xxh_u8*)state->mem64, (size_t)state->total_len, XXH_aligned);
|
2886
2947
|
}
|
2887
|
-
|
2948
|
+
#endif /* !XXH_NO_STREAM */
|
2888
2949
|
|
2889
2950
|
/******* Canonical representation *******/
|
2890
2951
|
|
@@ -3163,7 +3224,7 @@ enum XXH_VECTOR_TYPE /* fake enum */ {
|
|
3163
3224
|
*/
|
3164
3225
|
#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \
|
3165
3226
|
&& defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
|
3166
|
-
&& defined(__OPTIMIZE__) &&
|
3227
|
+
&& defined(__OPTIMIZE__) && XXH_SIZE_OPT <= 0 /* respect -O0 and -Os */
|
3167
3228
|
# pragma GCC push_options
|
3168
3229
|
# pragma GCC optimize("-O2")
|
3169
3230
|
#endif
|
@@ -3333,7 +3394,7 @@ XXH_FORCE_INLINE uint64x2_t XXH_vld1q_u64(void const* ptr)
|
|
3333
3394
|
*/
|
3334
3395
|
# ifndef XXH3_NEON_LANES
|
3335
3396
|
# if (defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) \
|
3336
|
-
&&
|
3397
|
+
&& XXH_SIZE_OPT <= 0
|
3337
3398
|
# define XXH3_NEON_LANES 6
|
3338
3399
|
# else
|
3339
3400
|
# define XXH3_NEON_LANES XXH_ACC_NB
|
@@ -3350,23 +3411,33 @@ XXH_FORCE_INLINE uint64x2_t XXH_vld1q_u64(void const* ptr)
|
|
3350
3411
|
* inconsistent intrinsics, spotty coverage, and multiple endiannesses.
|
3351
3412
|
*/
|
3352
3413
|
#if XXH_VECTOR == XXH_VSX
|
3414
|
+
/* Annoyingly, these headers _may_ define three macros: `bool`, `vector`,
|
3415
|
+
* and `pixel`. This is a problem for obvious reasons.
|
3416
|
+
*
|
3417
|
+
* These keywords are unnecessary; the spec literally says they are
|
3418
|
+
* equivalent to `__bool`, `__vector`, and `__pixel` and may be undef'd
|
3419
|
+
* after including the header.
|
3420
|
+
*
|
3421
|
+
* We use pragma push_macro/pop_macro to keep the namespace clean. */
|
3422
|
+
# pragma push_macro("bool")
|
3423
|
+
# pragma push_macro("vector")
|
3424
|
+
# pragma push_macro("pixel")
|
3425
|
+
/* silence potential macro redefined warnings */
|
3426
|
+
# undef bool
|
3427
|
+
# undef vector
|
3428
|
+
# undef pixel
|
3429
|
+
|
3353
3430
|
# if defined(__s390x__)
|
3354
3431
|
# include <s390intrin.h>
|
3355
3432
|
# else
|
3356
|
-
/* gcc's altivec.h can have the unwanted consequence to unconditionally
|
3357
|
-
* #define bool, vector, and pixel keywords,
|
3358
|
-
* with bad consequences for programs already using these keywords for other purposes.
|
3359
|
-
* The paragraph defining these macros is skipped when __APPLE_ALTIVEC__ is defined.
|
3360
|
-
* __APPLE_ALTIVEC__ is _generally_ defined automatically by the compiler,
|
3361
|
-
* but it seems that, in some cases, it isn't.
|
3362
|
-
* Force the build macro to be defined, so that keywords are not altered.
|
3363
|
-
*/
|
3364
|
-
# if defined(__GNUC__) && !defined(__APPLE_ALTIVEC__)
|
3365
|
-
# define __APPLE_ALTIVEC__
|
3366
|
-
# endif
|
3367
3433
|
# include <altivec.h>
|
3368
3434
|
# endif
|
3369
3435
|
|
3436
|
+
/* Restore the original macro values, if applicable. */
|
3437
|
+
# pragma pop_macro("pixel")
|
3438
|
+
# pragma pop_macro("vector")
|
3439
|
+
# pragma pop_macro("bool")
|
3440
|
+
|
3370
3441
|
typedef __vector unsigned long long xxh_u64x2;
|
3371
3442
|
typedef __vector unsigned char xxh_u8x16;
|
3372
3443
|
typedef __vector unsigned xxh_u32x4;
|
@@ -3450,7 +3521,9 @@ XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mule(xxh_u32x4 a, xxh_u32x4 b)
|
|
3450
3521
|
#if defined(XXH_NO_PREFETCH)
|
3451
3522
|
# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */
|
3452
3523
|
#else
|
3453
|
-
# if
|
3524
|
+
# if XXH_SIZE_OPT >= 1
|
3525
|
+
# define XXH_PREFETCH(ptr) (void)(ptr)
|
3526
|
+
# elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) /* _mm_prefetch() not defined outside of x86/x64 */
|
3454
3527
|
# include <mmintrin.h> /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */
|
3455
3528
|
# define XXH_PREFETCH(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0)
|
3456
3529
|
# elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) )
|
@@ -3879,6 +3952,14 @@ XXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len,
|
|
3879
3952
|
XXH_ASSERT(16 < len && len <= 128);
|
3880
3953
|
|
3881
3954
|
{ xxh_u64 acc = len * XXH_PRIME64_1;
|
3955
|
+
#if XXH_SIZE_OPT >= 1
|
3956
|
+
/* Smaller and cleaner, but slightly slower. */
|
3957
|
+
size_t i = (len - 1) / 32;
|
3958
|
+
do {
|
3959
|
+
acc += XXH3_mix16B(input+16 * i, secret+32*i, seed);
|
3960
|
+
acc += XXH3_mix16B(input+len-16*(i+1), secret+32*i+16, seed);
|
3961
|
+
} while (i-- != 0);
|
3962
|
+
#else
|
3882
3963
|
if (len > 32) {
|
3883
3964
|
if (len > 64) {
|
3884
3965
|
if (len > 96) {
|
@@ -3893,7 +3974,7 @@ XXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len,
|
|
3893
3974
|
}
|
3894
3975
|
acc += XXH3_mix16B(input+0, secret+0, seed);
|
3895
3976
|
acc += XXH3_mix16B(input+len-16, secret+16, seed);
|
3896
|
-
|
3977
|
+
#endif
|
3897
3978
|
return XXH3_avalanche(acc);
|
3898
3979
|
}
|
3899
3980
|
}
|
@@ -4566,7 +4647,7 @@ XXH3_accumulate_512_scalar(void* XXH_RESTRICT acc,
|
|
4566
4647
|
#if defined(__GNUC__) && !defined(__clang__) \
|
4567
4648
|
&& (defined(__arm__) || defined(__thumb2__)) \
|
4568
4649
|
&& defined(__ARM_FEATURE_UNALIGNED) /* no unaligned access just wastes bytes */ \
|
4569
|
-
&&
|
4650
|
+
&& XXH_SIZE_OPT <= 0
|
4570
4651
|
# pragma GCC unroll 8
|
4571
4652
|
#endif
|
4572
4653
|
for (i=0; i < XXH_ACC_NB; i++) {
|
@@ -4725,7 +4806,10 @@ typedef void (*XXH3_f_initCustomSecret)(void* XXH_RESTRICT, xxh_u64);
|
|
4725
4806
|
|
4726
4807
|
#endif
|
4727
4808
|
|
4728
|
-
|
4809
|
+
#if XXH_SIZE_OPT >= 1 /* don't do SIMD for initialization */
|
4810
|
+
# undef XXH3_initCustomSecret
|
4811
|
+
# define XXH3_initCustomSecret XXH3_initCustomSecret_scalar
|
4812
|
+
#endif
|
4729
4813
|
|
4730
4814
|
#ifndef XXH_PREFETCH_DIST
|
4731
4815
|
# ifdef __clang__
|
@@ -4895,10 +4979,12 @@ XXH3_hashLong_64b_withSeed_internal(const void* input, size_t len,
|
|
4895
4979
|
XXH3_f_scrambleAcc f_scramble,
|
4896
4980
|
XXH3_f_initCustomSecret f_initSec)
|
4897
4981
|
{
|
4982
|
+
#if XXH_SIZE_OPT <= 0
|
4898
4983
|
if (seed == 0)
|
4899
4984
|
return XXH3_hashLong_64b_internal(input, len,
|
4900
4985
|
XXH3_kSecret, sizeof(XXH3_kSecret),
|
4901
4986
|
f_acc512, f_scramble);
|
4987
|
+
#endif
|
4902
4988
|
{ XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
|
4903
4989
|
f_initSec(secret, seed);
|
4904
4990
|
return XXH3_hashLong_64b_internal(input, len, secret, sizeof(secret),
|
@@ -4977,7 +5063,7 @@ XXH3_64bits_withSecretandSeed(const void* input, size_t length, const void* secr
|
|
4977
5063
|
|
4978
5064
|
|
4979
5065
|
/* === XXH3 streaming === */
|
4980
|
-
|
5066
|
+
#ifndef XXH_NO_STREAM
|
4981
5067
|
/*
|
4982
5068
|
* Malloc's a pointer that is always aligned to align.
|
4983
5069
|
*
|
@@ -5165,7 +5251,7 @@ XXH3_consumeStripes(xxh_u64* XXH_RESTRICT acc,
|
|
5165
5251
|
}
|
5166
5252
|
|
5167
5253
|
#ifndef XXH3_STREAM_USE_STACK
|
5168
|
-
#
|
5254
|
+
# if XXH_SIZE_OPT <= 0 && !defined(__clang__) /* clang doesn't need additional stack space */
|
5169
5255
|
# define XXH3_STREAM_USE_STACK 1
|
5170
5256
|
# endif
|
5171
5257
|
#endif
|
@@ -5347,7 +5433,7 @@ XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* state)
|
|
5347
5433
|
return XXH3_64bits_withSecret(state->buffer, (size_t)(state->totalLen),
|
5348
5434
|
secret, state->secretLimit + XXH_STRIPE_LEN);
|
5349
5435
|
}
|
5350
|
-
|
5436
|
+
#endif /* !XXH_NO_STREAM */
|
5351
5437
|
|
5352
5438
|
|
5353
5439
|
/* ==========================================
|
@@ -5540,6 +5626,16 @@ XXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
|
|
5540
5626
|
{ XXH128_hash_t acc;
|
5541
5627
|
acc.low64 = len * XXH_PRIME64_1;
|
5542
5628
|
acc.high64 = 0;
|
5629
|
+
|
5630
|
+
#if XXH_SIZE_OPT >= 1
|
5631
|
+
{
|
5632
|
+
/* Smaller, but slightly slower. */
|
5633
|
+
size_t i = (len - 1) / 32;
|
5634
|
+
do {
|
5635
|
+
acc = XXH128_mix32B(acc, input+16*i, input+len-16*(i+1), secret+32*i, seed);
|
5636
|
+
} while (i-- != 0);
|
5637
|
+
}
|
5638
|
+
#else
|
5543
5639
|
if (len > 32) {
|
5544
5640
|
if (len > 64) {
|
5545
5641
|
if (len > 96) {
|
@@ -5550,6 +5646,7 @@ XXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
|
|
5550
5646
|
acc = XXH128_mix32B(acc, input+16, input+len-32, secret+32, seed);
|
5551
5647
|
}
|
5552
5648
|
acc = XXH128_mix32B(acc, input, input+len-16, secret, seed);
|
5649
|
+
#endif
|
5553
5650
|
{ XXH128_hash_t h128;
|
5554
5651
|
h128.low64 = acc.low64 + acc.high64;
|
5555
5652
|
h128.high64 = (acc.low64 * XXH_PRIME64_1)
|
@@ -5764,7 +5861,7 @@ XXH128(const void* input, size_t len, XXH64_hash_t seed)
|
|
5764
5861
|
|
5765
5862
|
|
5766
5863
|
/* === XXH3 128-bit streaming === */
|
5767
|
-
|
5864
|
+
#ifndef XXH_NO_STREAM
|
5768
5865
|
/*
|
5769
5866
|
* All initialization and update functions are identical to 64-bit streaming variant.
|
5770
5867
|
* The only difference is the finalization routine.
|
@@ -5831,7 +5928,7 @@ XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* state)
|
|
5831
5928
|
return XXH3_128bits_withSecret(state->buffer, (size_t)(state->totalLen),
|
5832
5929
|
secret, state->secretLimit + XXH_STRIPE_LEN);
|
5833
5930
|
}
|
5834
|
-
|
5931
|
+
#endif /* !XXH_NO_STREAM */
|
5835
5932
|
/* 128-bit utility functions */
|
5836
5933
|
|
5837
5934
|
#include <string.h> /* memcmp, memcpy */
|
@@ -5958,7 +6055,7 @@ XXH3_generateSecret_fromSeed(void* secretBuffer, XXH64_hash_t seed)
|
|
5958
6055
|
/* Pop our optimization override from above */
|
5959
6056
|
#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \
|
5960
6057
|
&& defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
|
5961
|
-
&& defined(__OPTIMIZE__) &&
|
6058
|
+
&& defined(__OPTIMIZE__) && XXH_SIZE_OPT <= 0 /* respect -O0 and -Os */
|
5962
6059
|
# pragma GCC pop_options
|
5963
6060
|
#endif
|
5964
6061
|
|
@@ -35,8 +35,7 @@ class AltInstallTask < Rake::TaskLib
|
|
35
35
|
|
36
36
|
def define
|
37
37
|
[:install, :"install:local"].each do |name|
|
38
|
-
|
39
|
-
task(name => :build){ |task| execute_task(task) }
|
38
|
+
task(name).clear.enhance([:build]){ |task| execute_task(task) }
|
40
39
|
.singleton_class.prepend(TaskComment)
|
41
40
|
end
|
42
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: digest-xxhash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- konsolebox
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|