aboutsummaryrefslogtreecommitdiff
path: root/c
AgeCommit message (Collapse)Author
2021-02-28rename the "context string" to the "purpose string"purpose_stringJack O'Connor
Apart from being pretty ambiguous in general, the term "context string" has the specific problem that it isn't clear whether it should be describing the input or the output. In fact, it's quite important that it describes the output, because the whole point is to domain-separate different outputs that derive from the *same* input. To make that clearer, rename the "context string" to the "purpose string" in documentation.
2021-02-26Another movd/movq inconsistency.Samuel Neves
- Visual Studio <= 2015 does not support AVX-512 either way; - Visual Studio 2017 does not tolerate vmovd with 64-bit operands; - Visual Studio 2019 does not care.
2021-02-18clarify C build instructions a bitJack O'Connor
2021-02-15delete an unused constantJack O'Connor
Fixes https://github.com/BLAKE3-team/BLAKE3/issues/152.
2021-02-15clang-format a few filesJack O'Connor
Some of the SIMD code is still unformatted, so for now I'm only touching the files that just have a couple small changes.
2021-02-06revert unwanted changesSamuel Neves
2021-02-06More movd/movq discrepancies. Fixes #149. (#150)Samuel Neves
This should be irrelevant, but some toolchains will not accept movd with 64-bit arguments.
2021-02-05replace the 'Differences' section with 'Multithreading'Jack O'Connor
2021-01-13Replace movq by movd on MSVC assembly targets (#143)Samuel Neves
2020-10-29add blake3_version(void) / BLAKE3_VERSION_STRINGHans Henrik Bergan
related discussion here: https://github.com/BLAKE3-team/BLAKE3/issues/130
2020-10-20include example.cJack O'Connor
2020-10-20Merge pull request #128 from divinity76/features-unused-fixJack O'Connor
fix disabled-optimization -Wall -Werror
2020-10-20readme tweaksJack O'Connor
2020-10-20fix disabled-optimization -Wall -WerrorHans Henrik Bergan
patch by Samuel Neves ( https://github.com/sneves ) if you tried to compile blake3_dispatch.c with -Wall -Werror -DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512 something like this would happen: hans@xDevAd:~/projects/BLAKE3/c$ gcc -O0 -o example example.c blake3.c blake3_dispatch.c blake3_portable.c blake3_sse2_x86-64_unix.S blake3_sse41_x86-64_unix.S blake3_avx2_x86-64_unix.S blake3_avx512_x86-64_unix.S -DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512 -Wall -Wextra -Wpedantic -Werror blake3_dispatch.c: In function ‘blake3_compress_in_place’: blake3_dispatch.c:139:26: error: unused variable ‘features’ [-Werror=unused-variable] 139 | const enum cpu_feature features = get_cpu_features(); | ^~~~~~~~ blake3_dispatch.c: In function ‘blake3_compress_xof’: blake3_dispatch.c:167:26: error: unused variable ‘features’ [-Werror=unused-variable] 167 | const enum cpu_feature features = get_cpu_features(); | ^~~~~~~~ blake3_dispatch.c: In function ‘blake3_hash_many’: blake3_dispatch.c:195:26: error: unused variable ‘features’ [-Werror=unused-variable] 195 | const enum cpu_feature features = get_cpu_features(); | ^~~~~~~~ blake3_dispatch.c: In function ‘blake3_simd_degree’: blake3_dispatch.c:244:26: error: unused variable ‘features’ [-Werror=unused-variable] 244 | const enum cpu_feature features = get_cpu_features(); | ^~~~~~~~ cc1: all warnings being treated as errors
2020-09-29add cross_test.sh for the C bindingsJack O'Connor
This will let us add big endian testing to CI for our C code. (We were already doing it for our Rust code.) This is adapted from test_vectors/cross_test.sh. It works around the limitation that the `cross` tool can't reach parent directories. It's an unfortunate hack, but at least it's only for testing. It might've been less hacky to use symlinks for this somehow, but I worry that would break things on Windows, and I don't want to have to add workarounds for my workarounds.
2020-09-29fix a couple of big-endianness mistakes in blake3.cJack O'Connor
Kudos to @pascal-cuoq and @jakub-zwolakowski from TrustInSoft for catching these bugs. Original report: https://github.com/BLAKE3-team/BLAKE3/pull/118
2020-09-29fix the short_test_cases loop in the C bindings testsJack O'Connor
2020-09-29update the blake3_c_rust_bindings test cases alsoJack O'Connor
2020-09-10add some horizontal rules to the C readmeJack O'Connor
2020-09-10add a test for blake3_hasher_init_derive_key_rawJack O'Connor
2020-09-10C readme editsJack O'Connor
2020-09-10Merge pull request #114 from k0001/no-cstrJack O'Connor
C: Add blake3_hasher_init_derive_key_len
2020-09-01C: rename blake3_hasher_init_derive_key_raw and documentationRenzo Carbonara
2020-08-31add sse2 tests and benchmarksSamuel Neves
2020-08-31remove avoidable spillSamuel Neves
2020-08-31Merge pull request #110 from mkrupcale/sse2Samuel Neves
Add SSE2 implementations
2020-08-31C: asm: simplify pblendw emulationMatthew Krupcale
Use statically calculated ~mask. This reduces the number of moves and registers necessary at the expense of an extra memory load. This is probably a good trade-off since we are not bound by memory uops in this loop.
2020-08-31C: asm: simplify pinsrd emulationMatthew Krupcale
Use punpckl{,q}dq instead of pinsrw.
2020-08-30C: asm: remove blendvps usage altogetherMatthew Krupcale
This simplifies the operation by removing the need to use blendvps at all.
2020-08-30C: Add blake3_hasher_init_derive_key_lenRenzo Carbonara
blake3_hasher_init_derive_key_len is an alternative version of blake3_hasher_init_derive_key which takes the context and its length as separate parameters, and not together as a C string. The motivation for this addition is making it easier for bindings to this C library to call this function without having to first copy over the context bytes just to add one 0x00 byte at the end. Notice that contrary to blake3_hasher_init_derive_key, blake3_hasher_init_derive_key_len allows the inclusion of a 0x00 byte in the context. Given the rules about context string selection, this byte is unlikely to be used as part of a context string. But if for some reason it is ever given, it will be included in the context string and processed like any other non-alphanumeric byte would. For compatibility with blake3_hasher_init_derive_key, bindings should still check for the absence of 0x00 bytes.
2020-08-26wording tweak in the C readmeJack O'Connor
2020-08-25Write _mm_blend_epi16 emulation without multiplicationMatthew Krupcale
Use _mm_and_si128 and _mm_cmpeq_epi16 rather than expensive multiplication _mm_mullo_epi16 with _mm_srai_epi16 that compiler may not be able to optimize.
2020-08-24Fix Windows MSVC undefined symbol errorsMatthew Krupcale
MSVC returns "error A2006:undefined symbol : FFFFFFFFH", so use 0FFFFFFFFH instead. Also use 0 prefix for 0H to align things.
2020-08-24Put PBLENDW masks in the RDATA sectionMatthew Krupcale
Previously, these masks were undefined because they were outside of the RDATA section.
2020-08-24Fix Windows MSVC undefined symbol errorsMatthew Krupcale
MSVC returns "error A2006:undefined symbol : B1H", so use 0B1H instead.
2020-08-24C: asm: emulate pshufb ROT8 using SSE2 instructionsMatthew Krupcale
Use a simple shift for the rotation. * c/blake3_sse2_x86-64_unix.S: emulate pshufb using SSE2 instructions for x86_64 unix * c/blake3_sse2_x86-64_windows_gnu.S: Likewise for x86_64 Windows GNU. * c/blake3_sse2_x86-64_windows_msvc.asm: Likewise for x86_64 Windows MSVC.
2020-08-24C: asm: emulate pshufb ROT16 using SSE2 instructionsMatthew Krupcale
Use two 16-bit shuffles: one for the low 64-bits and one for the high 64-bits. * c/blake3_sse2_x86-64_unix.S: emulate pshufb using SSE2 instructions for x86_64 unix * c/blake3_sse2_x86-64_windows_gnu.S: Likewise for x86_64 Windows GNU. * c/blake3_sse2_x86-64_windows_msvc.asm: Likewise for x86_64 Windows MSVC.
2020-08-24C: asm: emulate pinsrd using SSE2 instructionsMatthew Krupcale
Use two pinsrw and a 16-bit shift to insert the 32-bit integer at the desired location. * c/blake3_sse2_x86-64_unix.S: emulate pinsrd using SSE2 instructions for x86_64 unix * c/blake3_sse2_x86-64_windows_gnu.S: Likewise for x86_64 Windows GNU. * c/blake3_sse2_x86-64_windows_msvc.asm: Likewise for x86_64 Windows MSVC.
2020-08-24C: asm: emulate blendvps using SSE2 instructionsMatthew Krupcale
Blend according to (mask & b) | ((~mask) & a). * c/blake3_sse2_x86-64_unix.S: emulate blendvps using SSE2 instructions for x86_64 unix * c/blake3_sse2_x86-64_windows_gnu.S: Likewise for x86_64 Windows GNU. * c/blake3_sse2_x86-64_windows_msvc.asm: Likewise for x86_64 Windows MSVC.
2020-08-24C: asm: emulate pblendw using SSE2 instructionsMatthew Krupcale
Use a constant mask to blend according to (mask & b) | ((~mask) & a). * c/blake3_sse2_x86-64_unix.S: emulate pblendw using SSE2 instructions for x86_64 unix * c/blake3_sse2_x86-64_windows_gnu.S: Likewise for x86_64 Windows GNU. * c/blake3_sse2_x86-64_windows_msvc.asm: Likewise for x86_64 Windows MSVC.
2020-08-24SSE2 intrinsic: emulate _mm_shuffle_epi8 SSSE3 intrinsic rot8 with SSE2 ↵Matthew Krupcale
intrinsics Use a simple shift version for the 8-bit rotation. * c/blake3_sse2.c: emulate _mm_shuffle_epi8 rot8 using SSE2 intrinsics
2020-08-24SSE2 intrinsic: emulate _mm_shuffle_epi8 SSSE3 intrinsic rot16 with SSE2 ↵Matthew Krupcale
intrinsics Use two 16-bit shuffles: one for the low 64-bits and one for the high 64-bits. * c/blake3_sse2.c: emulate _mm_shuffle_epi8 rot16 using SSE2 intrinsics
2020-08-24SSE2 intrinsic: emulate _mm_blend_epi16 SSE4.1 intrinsic with SSE2 intrinsicsMatthew Krupcale
Use a constant mask to blend according to (mask & b) | ((~mask) & a). * src/rust_sse2.rs: emulate _mm_blend_epi16 using SSE2 intrinsics * c/blake3_sse2.c: Likewise.
2020-08-24Start SSE2 implementation based on SSE4.1 versionMatthew Krupcale
Wire up basic functions and features for SSE2 support using the SSE4.1 version as a basis without implementing the SSE2 instructions yet. * Cargo.toml: add no_sse2 feature * benches/bench.rs: wire SSE2 benchmarks * build.rs: add SSE2 rust intrinsics and assembly builds * c/Makefile.testing: add SSE2 C and assembly targets * c/README.md: add SSE2 to C build instructions * c/blake3_c_rust_bindings/build.rs: add SSE2 C rust binding builds * c/blake3_c_rust_bindings/src/lib.rs: add SSE2 C rust bindings * c/blake3_dispatch.c: add SSE2 C dispatch * c/blake3_impl.h: add SSE2 C function prototypes * c/blake3_sse2.c: add SSE2 C intrinsic file starting with SSE4.1 version * c/blake3_sse2_x86-64_{unix.S,windows_gnu.S,windows_msvc.asm}: add SSE2 assembly files starting with SSE4.1 version * src/ffi_sse2.rs: add rust implementation using SSE2 C rust bindings * src/lib.rs: add SSE2 rust intrinsics and SSE2 C rust binding rust SSE2 module configurations * src/platform.rs: add SSE2 rust platform detection and dispatch * src/rust_sse2.rs: add SSE2 rust intrinsic file starting with SSE4.1 version * tools/instruction_set_support/src/main.rs: add SSE2 feature detection
2020-08-23Fix #109Samuel Neves
The default executable stack setting on Linux can be fixed in two different ways: - By adding the `.section .note.GNU-stack,"",%progbits` special incantation - By passing the `--noexecstack` flag to the assembler This patch implements both, but only one of them is strictly necessary. I've also added some additional hardening flags to the Makefile. May not be portable.
2020-07-30support compilers without __has_includecetSamuel Neves
2020-07-20clarify multithreading support in the C readmeJack O'Connor
Fixes https://github.com/BLAKE3-team/BLAKE3/issues/99.
2020-07-20rename the C Makefile to Makefile.testingJack O'Connor
2020-06-29stop being a jerk and add the context string to test_vectors.jsonJack O'Connor
2020-06-27Merge pull request #96 from BLAKE3-team/cetSamuel Neves
Assembly: enable CET