aboutsummaryrefslogtreecommitdiff
path: root/c
AgeCommit message (Collapse)Author
2024-09-04wip asm v2refreshSamuel Neves
2024-09-02wip asm refreshSamuel Neves
2024-08-19version 1.5.41.5.4Jack O'Connor
Changes since 1.5.3: - Initial implementation of SIMD acceleration for the XOF (i.e. blake3::Hasher::finalize_xof). This brings long output performance into line with long input performance. Currently AVX-512-only and Unix-only. - Add build support for "gnullvm" targets (Clang on Windows). - The "zeroize" feature no longer depends on proc-macros and syn.
2024-08-19defined(__unix__) -> !defined(_WIN32)Jack O'Connor
2024-08-18delete portable::xof_many and blake3_xof_many_portableJack O'Connor
2024-08-18make xof_many fall back to compress_xof instead of portable codeJack O'Connor
2024-08-18test that xof_many doesn't write more blocks than requestedJack O'Connor
2024-08-15mark blake3_xof_many_avx512 Unix-only in Rust and CJack O'Connor
2024-08-15fix a warning in the blake3_c_rust_bindings testsJack O'Connor
2024-08-15integrate xof_many with the Rust implementation and with Rust and C testsJack O'Connor
2024-08-15add an intrinsics implementation of blake3_xof_many_avx512Jack O'Connor
2024-08-15integrate with c codeSamuel Neves
2024-08-15initial blake3_xof_many_avx512Samuel Neves
2024-07-14version 1.5.31.5.3Jack O'Connor
Changes since 1.5.2: - Revert the serialization change. It was intended to be backwards compatible, but that didn't hold for non-self-describing serialization formats like bincode. See #414.
2024-07-12version 1.5.21.5.2Jack O'Connor
Changes since 1.5.1: - `build.rs` sets `cc::Build::emit_rerun_if_env_changed(false)` to prevent some unnecessary rebuilds, particularly when the `PATH` changes on Windows. See #324. - Serializing a `Hash` produces a bytestring instead of an array in formats that support bytestrings (like CBOR). Deserialization is backwards-compatible with the array format. - Cleanup and edge case fixes in the C and CMake builds.
2024-07-09build(CMake): Add basic CMake presets for MSVCHenrik S. Gaßmann
2024-07-09build(CMake): Fix SIMD type detectionHenrik S. Gaßmann
Refs: #402
2024-07-09build(CMake): Add CLI overrides for SIMD detectionHenrik S. Gaßmann
Refs: #402
2024-07-03chore: fix some commentswangcundashang
Signed-off-by: wangcundashang <[email protected]>
2024-06-11Remove some dead storesTom Stellard
These were caught by the clang static analyzer.
2024-04-07fix Windows ARM64 build and detect ARM64EC as ARM64Javier Blazquez
2024-03-12version 1.5.11.5.1Jack O'Connor
Changes since 1.5.0: - The Rust crate is now compatible with Miri. - ~1% performance improvement on Arm NEON contributed by @divinity76 (#384). - Various fixes and improvements in the CMake build. - The MSRV of b3sum is now 1.74.1. (The MSRV of the library crate is unchanged, 1.66.1.)
2024-03-12optimize neon loadu_128/storeu_128 (#384)divinity76
vld1q_u8 and vst1q_u8 has no alignment requirements. This improves performance on Oracle Cloud's VM.Standard.A1.Flex by 1.15% on a 16*1024 input, from 13920 nanoseconds down to 13800 nanoseconds (approx)
2024-02-04comment cleanupJack O'Connor
2024-02-04silenc gcc Werror=logical-opdivinity76
``` /home/travis/build/php/php-src/ext/hash/blake3/upstream_blake3/c/blake3.c: In function ‘compress_subtree_to_parent_node’: /home/travis/build/php/php-src/ext/hash/blake3/upstream_blake3/c/blake3.c:354:22: error: logical ‘and’ of mutually exclusive tests is always false [-Werror=logical-op] 354 | while (num_cvs > 2 && num_cvs <= MAX_SIMD_DEGREE_OR_2) { | ^~ cc1: all warnings being treated as errors make: *** [Makefile:1910: ext/hash/blake3/upstream_blake3/c/blake3.lo] Error 1 ``` Fixes https://github.com/BLAKE3-team/BLAKE3/issues/379. Closes https://github.com/BLAKE3-team/BLAKE3/pull/380.
2023-12-02build(CMake): Require C99 modeHenrik S. Gaßmann
Specify language requirement as a [compile-feature] and force compiler extensions off ensuring portability problems are detected early on. Note that we do not use the `C_STANDARD` property, because it doesn't propagate to dependent targets and would prohibit users from compiling their code base with consistent flags / language configuations if they were to target a newer C standard. Similarly we do not configure `C_STANDARD_REQUIRED` as [compile-features] do not interact with it--they are enforced regardless. [compile-feature]: https://cmake.org/cmake/help/latest/manual/cmake-compile-features.7.html#compile-feature-requirements
2023-11-05Fix CMake target include directories if library is used with ↵Viacheslav H
add_subdirectory or FetchContent
2023-11-05Fix Windows build with clang-clRui Ueyama
clang-cl is LLVM's MSVC-compatible compiler frontend for Windows ABI. If clang-cl is in use, `CMAKE_C_COMPILER_ID` is `Clang` even though it doesn't take Unix-like command line options but MSVC-like options. `if(MSVC)` is the correct predicate to check if we should pass MSVC-ish command line options.
2023-10-31style: Remove trailing whitespace in CMakeLists.txtHenrik Gaßmann
2023-10-31build(CMake): Provide NEON cflags for ARMv8 32bitHenrik Gaßmann
ARMv8 CPUs are guaranteed to support NEON instructions. However, for 32bit ARMv8 triplets GCC needs to explicitly be configured to enable NEON intrinsics.
2023-10-02build(CMake): Apply PP definitions to all sourcesHenrik Gaßmann
2023-09-20version 1.5.01.5.0Jack O'Connor
Changes since 1.4.1: - The Rust crate's Hasher type has gained new helper methods for common forms of IO: update_reader, update_mmap, and update_mmap_rayon. The latter matches the default behavior of b3sum. The mmap methods are gated by the new "mmap" Cargo feature. - Most of the Rust crate's public types now implement the Zeroize trait. This is gated by the new "zeroize" Cargo feature. - The Rust crate's Hash types now implements the serde Serialize and Deserialize traits. This is gated by the new "serde" Cargo feature. - The C library now uses atomics to cache detected CPU features under most compilers other than MSVC. Previously this was a non-atomic write, which was probably "benign" but made TSan unhappy. - NEON support is now disabled by default on big-endian AArch64. Previously this was a build error if the caller didn't explicitly disable it.
2023-09-19c/blake3_impl.h: don't try to do NEON on big-endian aarch64.Havard Eidnes
...because this would otherwise hit #error "This implementation only supports little-endian ARM." in c/blake3_neon.c.
2023-09-10fix a build break in the blake3_c testsJack O'Connor
2023-09-10update dev-dependenciesJack O'Connor
2023-07-21blake3_dispatch: Fix race condition initializing g_cpu_features.Javier Blazquez
If multiple threads try to compute a hash simultaneously before the library has been used for the first time, the logic in get_cpu_features that detects CPU features will write to g_cpu_features without synchronization, which is a race condition and flagged by ThreadSanitizer. This change marks g_cpu_features as an atomic variable to address the race condition.
2023-07-06version 1.4.11.4.1Jack O'Connor
Changes since 1.4.0: - Improved performance in the ARM NEON implementation for both C and Rust callers. This affects AArch64 targets by default and ARMv7 targets that explicitly enable (and support) NEON. The size of the improvement depends on the microarchitecture, but I've benchmarked ~1.3x on a Cortex-A53 and ~1.2x on an Apple M1. Contributed by @sdlyyxy in #319. - The MSRV is now 1.66.1 for both the `blake3` crate and `b3sum`.
2023-07-05retain the old NEON rotations in inline commentsJack O'Connor
2023-07-05NEON rot7/rot12 use shl+srisdlyyxy
2023-07-05NEON: only use __builtin_shufflevector on clangsdlyyxy
2023-07-05Improve NEON rot16/rot8sdlyyxy
2023-06-27Fix typo exendable -> extendable1f604
2023-06-17build(CMake): Rework NEON detectionHenrik S. Gaßmann
Given the myriad of `-mfpu` options for ARM [1], the inability to portably query for CPU support, and the lack of standardized ISA names we have no other choice, but to opt out of automatically supplying NEON compile flags. Instead we simply add the NEON optimized source file if we detect an ISA with guaranteed NEON support (>= ARMv8) or the user explicitly requests it (in which case he is expected to provide the compile flags with `CMAKE_C_FLAGS` or `BLAKE3_CFLAGS_NEON` either through a toolchain file or commandline parameters). [1]: https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
2023-06-17correct the VERSION in CMakeLists.txtJack O'Connor
2023-06-17build(CMake): Fix pkg-config directory specificationHenrik S. Gaßmann
- Properly add the install prefix to the libdir and includedir. - Define the prefix once. - Quote paths which may contain whitespace.
2023-06-08version 1.4.01.4.0Jack O'Connor
Changes since 1.3.3: - The C implementation provides a `CMakeLists.txt` for callers who build with CMake. The CMake build is not yet stable, and callers should expect breaking changes in patch version updates. The "by hand" build will always continue to be supported and documented. - `b3sum` supports the `--seek` flag, to set the starting position in the output stream. - `b3sum --check` prints a summary of errors to stderr. - `Hash::as_bytes` is const. - `Hash` supports `from_bytes`, which is const.
2023-05-24build(cmake): Print the active SIMD configurationHenrik S. Gaßmann
2023-05-24build(cmake): Properly configure dispatcher for no SIMDHenrik S. Gaßmann
If no SIMD support could be configured we need to inform `blake3_dispatch.c` about it.
2023-05-24build(cmake): Correctly detect x86 and arm64 WindowsHenrik S. Gaßmann
The ISA names communicated by `CMAKE_SYSTEM_PROCESSOR` aren't as much standardized as one would wish they were. Factor the different names into lists allowing for simpler checks and future updates. Add hidden options for enabling SIMD support in case ISA detection fails. These should only be used to temporarily workarounds until the ISA name lists has been updated/fixed.
2023-05-23Update c/CMakeLists.txtJack O'Connor
Co-authored-by: Henrik Gaßmann <[email protected]>