2
0
mirror of https://github.com/boostorg/uuid.git synced 2026-01-19 04:42:16 +00:00
Commit Graph

726 Commits

Author SHA1 Message Date
Andrey Semashev
b135a5d816 Compile tests without running in CI if the CPU lacks required features.
This allows for testing that the ISA-specific code at least compiles,
even if running the tests isn't possible.

The support is only added to b2, CMake still always compiles and runs
the tests to keep using boost_test_jamfile for easier maintenance. In
the future, similar support can be added to CMake as well.
2026-01-10 12:15:59 +03:00
Andrey Semashev
ba77fe2781 Added SSE2 and SSSE3 SIMD implementations of from_chars.
This adds SSE2 and SSSE3 code paths to from_chars_x86.hpp. The performance
effect on Intel Golden Cove (Core i7-12700K), gcc 13.3, in millions of
successful from_chars() calls per second:

Char     | Generic | SSE2            | SSSE3           | SSE4.1          | AVX2            | AVX512v1
=========+=========+=================+=================+=================+=================+================
char     |  40.475 | 327.791 (8.10x) | 465.857 (11.5x) | 555.346 (13.7x) | 504.648 (12.5x) | 539.700 (13.3x)
char16_t |  38.757 | 292.048 (7.54x) | 401.117 (10.3x) | 478.574 (12.3x) | 426.188 (11.0x) | 416.205 (10.7x)
char32_t |  50.200 | 150.900 (3.01x) | 204.588 (4.08x) | 389.882 (7.77x) | 359.591 (7.16x) | 349.663 (6.97x)

In addition, the workarounds to avoid (v)pblendvb instructions have been
extended to Intel Haswell and Broadwell, as these microarchitectures have
poor performance with these instructions (including the SSE4.1 pblendvb).

Two new experimental control macros added: BOOST_UUID_FROM_CHARS_X86_SLOW_PBLENDVB
and BOOST_UUID_FROM_CHARS_X86_USE_PBLENDVB. The former indicates that
(v)pblendvb instructions are slow and should be avoided on the target
microarchitectures. The latter indicates that (v)pblendvb should be used
by the implementation. The latter macro is derived from the former and
takes precedence. As before, these macros can be used for experimenting
and fine tuning performance for specific target CPUs. By default,
BOOST_UUID_FROM_CHARS_X86_SLOW_PBLENDVB is defined for Haswell/Broadwell
or if AVX is detected.

Lastly, made selection between blend-based and shuffle-based character
code conversion in various places unified, controlled by a single
internal macro BOOST_UUID_DETAIL_FROM_CHARS_X86_USE_BLENDS.
2026-01-10 12:15:59 +03:00
Andrey Semashev
97dc5c35ba Added SSE2 SIMD implementation of to_chars.
This adds SSE2 code paths to to_chars_x86.hpp. The performance effect on
Intel Golden Cove (Core i7-12700K), gcc 13.3, in millions of to_chars() calls
per second with a 16-byte aligned output buffer:

Char     | Generic | SSE2            | SSE4.1           | AVX2             | AVX10.1
=========+=========+=================+==================+==================+=================
char     | 202.314 | 564.857 (2.79x) | 1194.772 (5.91x) | 1192.094 (5.89x) | 1191.838 (5.89x)
char16_t | 188.532 | 457.281 (2.43x) |  795.798 (4.22x) |  935.016 (4.96x) |  938.368 (4.98x)
char32_t | 193.151 | 345.612 (1.79x) |  489.620 (2.53x) |  688.829 (3.57x) |  689.617 (3.57x)

Here, Generic column was generated with BOOST_UUID_NO_SIMD defined and
SSE2 with -march=x86-64. SSE2 support can be useful in cases when users
need to be compatible with the base x86-64 ISA.
2026-01-10 12:15:59 +03:00
Andrey Semashev
d53a476a77 Silence -Wstrict-aliasing warning in simd_vector.hpp. 2026-01-10 12:15:59 +03:00
Andrey Semashev
39946fb660 Fix -Wconversion warning in from_chars_x86.hpp. 2026-01-10 12:15:59 +03:00
Peter Dimov
2b229f7449 Update documentation 2026-01-10 02:41:29 +02:00
Peter Dimov
8febad40ed Make string_generator support string-like types like uuid_from_string does 2026-01-09 21:44:26 +02:00
Peter Dimov
190ee28b1d Update documentation 2026-01-09 16:22:07 +02:00
Peter Dimov
0af8de5509 Update documentation 2026-01-09 16:15:39 +02:00
Peter Dimov
11b392d9ff Merge pull request #189 from Lastique/feature/remove_unneeded_includes
Remove unnecessary includes and warning suppression in uuid_io.hpp
2026-01-09 16:14:23 +02:00
Andrey Semashev
22e7ba81a9 Removed unnecessary includes and warning suppression in uuid_io.hpp. 2026-01-09 14:35:03 +03:00
Peter Dimov
095a47fe04 Change the type of pos to std::ptrdiff_t to avoid casts 2026-01-08 22:57:00 +02:00
Peter Dimov
517bfe6972 Include BoostTestJamfile in test/CMakeLists.txt 2026-01-08 18:58:47 +02:00
Peter Dimov
ea77c34803 Make uuid_from_string constexpr 2026-01-08 18:52:56 +02:00
Peter Dimov
d9d396a666 Add test_uuid_from_string_cx.cpp 2026-01-08 18:52:29 +02:00
Peter Dimov
6d5420b09b Add boost_test_jamfile to CMakeLists.txt 2026-01-08 18:40:18 +02:00
Peter Dimov
29c5f57c95 Define BOOST_UUID_REPORT_IMPLEMENTATION in test .cpp files instead of Jamfile 2026-01-08 18:19:15 +02:00
Peter Dimov
d493f92dcd Add uuid_from_string 2026-01-08 16:59:10 +02:00
Peter Dimov
c9f5a8f028 Merge pull request #188 from Lastique/feature/fix_conversion_warning
Fix `-Wsign-conversion` warning with gcc 13.3
2026-01-07 20:49:44 +02:00
Andrey Semashev
663ffa1287 Make cast formatting consistent with the rest of the file. 2026-01-07 20:13:18 +03:00
Andrey Semashev
286b66b385 Fix -Wsign-conversion warning with gcc 13.3. 2026-01-07 20:08:43 +03:00
Peter Dimov
347258c6c8 When BOOST_UUID_NO_SIMD is defined, undef all other SIMD macros, because otherwise the configuration becomes inconsistent 2026-01-06 16:32:16 +02:00
Peter Dimov
e567490082 Fix BOOST_UUID_REPORT_IMPLEMENTATION messages 2026-01-06 16:26:35 +02:00
Peter Dimov
974f7f7387 Add a job with /arch:SSE4.2 that defines BOOST_UUID_USE_SSE41 to ci.yml 2026-01-06 15:48:08 +02:00
Peter Dimov
029527c109 Disable -Wconversion for GCC 5 in test_hash_value.cpp 2026-01-05 20:27:38 +02:00
Peter Dimov
bb5f471431 Switch ARM64 and S390x jobs to 22.04 2026-01-05 19:02:03 +02:00
Peter Dimov
22660ac3ca Cosmetic fixes to configuration.adoc 2026-01-05 18:53:49 +02:00
Peter Dimov
c7caa5b94e Update revision history 2026-01-05 18:52:42 +02:00
Peter Dimov
2b387b4638 Avoid -Wsign-conversion warnings in from_chars_x86.hpp 2026-01-05 17:56:10 +02:00
Peter Dimov
f852d61bee Avoid -Wsign-conversion warnings in to_chars_x86.hpp 2026-01-05 17:44:32 +02:00
Peter Dimov
2b5d078c00 Disable -Wshadow in test_bench_random.cpp for GCC 4.x because of Boost.Timer 2026-01-05 16:54:55 +02:00
Peter Dimov
0b86240e0d Avoid -Wconversion warning in time_generator_v6.hpp under GCC 5 and below 2026-01-05 16:54:55 +02:00
Peter Dimov
eabd000a54 Avoid -Wconversion, -Wsign-conversion warnings in detail/basic_name_generator.hpp under GCC 9 and below 2026-01-05 16:54:55 +02:00
Peter Dimov
520b3632f3 Avoid -Wsign-conversion warning in detail/basic_name_generator.hpp when wchar_t is int32_t 2026-01-05 16:54:55 +02:00
Peter Dimov
da2cb7cc02 Avoid -Wshadow warning in test_tagging.cpp 2026-01-05 16:54:55 +02:00
Peter Dimov
09a6a81b6b Avoid -Wconversion warning in detail/md5.hpp 2026-01-05 16:54:55 +02:00
Peter Dimov
7340079ffd Avoid -Wsign-conversion warnings in test_time_generator_v7_2.cpp 2026-01-05 16:54:54 +02:00
Peter Dimov
b92abf895f Avoid -Wsign-conversion warnings in test_to_chars.cpp 2026-01-05 16:54:54 +02:00
Peter Dimov
40b12ae256 Disable -Wsign-conversion in test_random_generator.cpp 2026-01-05 16:54:54 +02:00
Peter Dimov
2ce9519afc Avoid -Wsign-conversion warning in detail/sha1.hpp 2026-01-05 16:54:54 +02:00
Peter Dimov
fd167bba0d Avoid -Wsign-conversion warning in time_generator_v1.hpp 2026-01-05 16:54:54 +02:00
Peter Dimov
a835ddff90 Avoid -Wsign-conversion warning in time_generator_v7.hpp 2026-01-05 16:54:54 +02:00
Peter Dimov
91ffab27d2 Enable stricter warnings (matching Unordered) in test/Jamfile.v2 2026-01-05 16:54:54 +02:00
Peter Dimov
db92124922 Reorder includes 2026-01-05 16:02:11 +02:00
Peter Dimov
0038762216 Merge pull request #186 from Lastique/feature/from_chars_simd
Add SIMD implementation of `from_chars`
2026-01-05 15:53:07 +02:00
Andrey Semashev
0e23b235fc Use load/store helpers from endian.hpp in to/from_chars_x86.hpp.
The load/store helpers use memcpy internally, which is a more correct
way to load and store integers from/to unaligned memory and with
potential type punning. In particular, it should silence UBSAN errors
about unaligned memory accesses in SIMD algorithms.
2026-01-05 14:13:10 +03:00
Andrey Semashev
3698f8df2c Added a missing include. 2026-01-05 14:13:10 +03:00
Andrey Semashev
9dde4978fd Use memcpy/memset/memcmp functions from cstring.hpp in endian.hpp.
This benefits integer reads/writes from using compiler intrinsics,
when possible.
2026-01-05 14:13:10 +03:00
Andrey Semashev
d358c39a67 Use __builtin_memcpy/memcmp in cstring.hpp.
The builtins are sometimes more strongly optimized than the libc function
calls. They also don't need the <cstring> include.

Added unqualified memcpy function that simply calls either the builtin or
the libc function. This function is intended to be a drop-in replacement
for the libc memcpy calls, where constexpr friendliness is not important.
It is still marked as constexpr to allow mentioning them in other constexpr
functions. To avoid early checks whether its body can be evaluated in the
context of a constant expression, it is defined as a dummy template.

Marked all functions as noexcept.
2026-01-05 14:13:10 +03:00
Andrey Semashev
02574368fc Added GitHub Actions job on Rocketlake ISA. 2026-01-05 14:13:10 +03:00