-
Notifications
You must be signed in to change notification settings - Fork 67
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e14c814
commit 260575a
Showing
6 changed files
with
132 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Submodule aws-checksums
updated
26 files
+105 −15 | .github/workflows/ci.yml | |
+4 −6 | .github/workflows/clang-format.yml | |
+60 −49 | CMakeLists.txt | |
+29 −0 | bin/benchmark/CMakeLists.txt | |
+133 −0 | bin/benchmark/main.c | |
+4 −0 | builder.json | |
+47 −0 | format-check.py | |
+0 −24 | format-check.sh | |
+42 −3 | include/aws/checksums/crc.h | |
+51 −0 | include/aws/checksums/private/crc64_priv.h | |
+28 −11 | include/aws/checksums/private/crc_priv.h | |
+24 −0 | include/aws/checksums/private/crc_util.h | |
+4 −4 | source/arm/crc32c_arm.c | |
+208 −0 | source/arm/crc64_arm.c | |
+35 −9 | source/crc.c | |
+131 −0 | source/crc64.c | |
+579 −0 | source/crc64_sw.c | |
+0 −18 | source/generic/crc32c_null.c | |
+3 −14 | source/intel/asm/crc32c_sse42_asm.c | |
+245 −0 | source/intel/intrin/crc32c_sse42_avx512.c | |
+130 −0 | source/intel/intrin/crc64nvme_avx512.c | |
+147 −0 | source/intel/intrin/crc64nvme_clmul.c | |
+0 −77 | source/intel/visualc/visualc_crc32c_sse42.c | |
+3 −0 | tests/CMakeLists.txt | |
+144 −0 | tests/crc64_test.c | |
+129 −43 | tests/crc_test.c |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#pragma once | ||
/** | ||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
* SPDX-License-Identifier: Apache-2.0. | ||
*/ | ||
#include <aws/crt/Exports.h> | ||
#include <aws/crt/Types.h> | ||
|
||
namespace Aws | ||
{ | ||
namespace Crt | ||
{ | ||
namespace Checksum | ||
{ | ||
/** | ||
* The entry point function to perform a CRC32 (Ethernet, gzip) computation. | ||
* Selects a suitable implementation based on hardware capabilities. | ||
* Pass previousCRC32 if updating a running checksum. | ||
*/ | ||
uint32_t AWS_CRT_CPP_API ComputeCRC32(ByteCursor input, uint32_t previousCRC32 = 0) noexcept; | ||
|
||
/** | ||
* The entry point function to perform a Castagnoli CRC32c (iSCSI) computation. | ||
* Selects a suitable implementation based on hardware capabilities. | ||
* Pass previousCRC32C if updating a running checksum. | ||
*/ | ||
uint32_t AWS_CRT_CPP_API ComputeCRC32C(ByteCursor input, uint32_t previousCRC32C = 0) noexcept; | ||
|
||
/** | ||
* The entry point function to perform a CRC64-NVME (a.k.a. CRC64-Rocksoft) computation. | ||
* Selects a suitable implementation based on hardware capabilities. | ||
* Pass previousCRC64NVME if updating a running checksum. | ||
* There are many variants of CRC64 algorithms. This CRC64 variant is bit-reflected (based on | ||
* the non bit-reflected polynomial 0xad93d23594c93659) and inverts the CRC input and output bits. | ||
*/ | ||
uint64_t AWS_CRT_CPP_API ComputeCRC64NVME(ByteCursor input, uint64_t previousCRC64NVME = 0) noexcept; | ||
} // namespace Checksum | ||
} // namespace Crt | ||
} // namespace Aws |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/** | ||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
* SPDX-License-Identifier: Apache-2.0. | ||
*/ | ||
#include <aws/crt/checksum/CRC.h> | ||
|
||
#include <aws/checksums/crc.h> | ||
|
||
namespace Aws | ||
{ | ||
namespace Crt | ||
{ | ||
namespace Checksum | ||
{ | ||
uint32_t ComputeCRC32(ByteCursor input, uint32_t previousCRC32) noexcept | ||
{ | ||
return aws_checksums_crc32_ex(input.ptr, input.len, previousCRC32); | ||
} | ||
|
||
uint32_t ComputeCRC32C(ByteCursor input, uint32_t previousCRC32C) noexcept | ||
{ | ||
return aws_checksums_crc32c_ex(input.ptr, input.len, previousCRC32C); | ||
} | ||
|
||
uint64_t ComputeCRC64NVME(ByteCursor input, uint64_t previousCRC64NVME) noexcept | ||
{ | ||
return aws_checksums_crc64nvme_ex(input.ptr, input.len, previousCRC64NVME); | ||
} | ||
|
||
} // namespace Checksum | ||
} // namespace Crt | ||
} // namespace Aws |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/** | ||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
* SPDX-License-Identifier: Apache-2.0. | ||
*/ | ||
#include <aws/crt/Api.h> | ||
#include <aws/crt/checksum/CRC.h> | ||
#include <aws/testing/aws_test_harness.h> | ||
|
||
static int s_TestCRC32Piping(struct aws_allocator *allocator, void *) | ||
{ | ||
Aws::Crt::ApiHandle apiHandle(allocator); | ||
uint8_t data[32] = {0}; | ||
|
||
Aws::Crt::ByteCursor dataCur = aws_byte_cursor_from_array(data, sizeof(data)); | ||
|
||
ASSERT_UINT_EQUALS(0x190A55AD, Aws::Crt::Checksum::ComputeCRC32(dataCur)); | ||
|
||
return AWS_OP_SUCCESS; | ||
} | ||
AWS_TEST_CASE(CRC32Piping, s_TestCRC32Piping) | ||
|
||
static int s_TestCRC32CPiping(struct aws_allocator *allocator, void *) | ||
{ | ||
Aws::Crt::ApiHandle apiHandle(allocator); | ||
uint8_t data[32] = {0}; | ||
|
||
Aws::Crt::ByteCursor dataCur = aws_byte_cursor_from_array(data, sizeof(data)); | ||
|
||
ASSERT_UINT_EQUALS(0x8A9136AA, Aws::Crt::Checksum::ComputeCRC32C(dataCur)); | ||
|
||
return AWS_OP_SUCCESS; | ||
} | ||
AWS_TEST_CASE(CRC32CPiping, s_TestCRC32CPiping) | ||
|
||
static int s_TestCRC64NVMEPiping(struct aws_allocator *allocator, void *) | ||
{ | ||
Aws::Crt::ApiHandle apiHandle(allocator); | ||
uint8_t data[32] = {0}; | ||
|
||
Aws::Crt::ByteCursor dataCur = aws_byte_cursor_from_array(data, sizeof(data)); | ||
|
||
ASSERT_UINT_EQUALS(0xCF3473434D4ECF3B, Aws::Crt::Checksum::ComputeCRC64NVME(dataCur)); | ||
|
||
return AWS_OP_SUCCESS; | ||
} | ||
AWS_TEST_CASE(CRC64NVMEPiping, s_TestCRC64NVMEPiping) |