diff options
author | Jonny Svärd <jonny.svaerd@arm.com> | 2022-02-09 16:42:10 +0100 |
---|---|---|
committer | Kristofer Jonsson <kristofer.jonsson@arm.com> | 2022-02-10 10:18:42 +0000 |
commit | 5adf5a6d0bbfa36d4a757f211ae6b4a5c9e51dac (patch) | |
tree | 5bdbeabba5eac6c13a4d1bf9f592520623092927 /lib | |
parent | 165f00a87716ef7fd8527134a61b7aa61adfe7a7 (diff) | |
download | ethos-u-core-software-5adf5a6d0bbfa36d4a757f211ae6b4a5c9e51dac.tar.gz |
Break out the Crc class to its own library
Change-Id: Iefa21223b9157e25e11f88873541b39292d12872
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CMakeLists.txt | 7 | ||||
-rw-r--r-- | lib/crc/CMakeLists.txt | 20 | ||||
-rw-r--r-- | lib/crc/include/crc.hpp | 59 |
3 files changed, 84 insertions, 2 deletions
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 7e47499..06e660b 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021 Arm Limited. All rights reserved. +# Copyright (c) 2021-2022 Arm Limited. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # @@ -26,4 +26,7 @@ add_subdirectory(arm_profiler) add_subdirectory(ethosu_monitor) # Build ethosu_logging -add_subdirectory(ethosu_log)
\ No newline at end of file +add_subdirectory(ethosu_log) + +# Build crc lib +add_subdirectory(crc) diff --git a/lib/crc/CMakeLists.txt b/lib/crc/CMakeLists.txt new file mode 100644 index 0000000..2ee993d --- /dev/null +++ b/lib/crc/CMakeLists.txt @@ -0,0 +1,20 @@ +# +# Copyright (c) 2022 Arm Limited. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the License); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +add_library(ethosu_crc INTERFACE) +target_include_directories(ethosu_crc INTERFACE include) diff --git a/lib/crc/include/crc.hpp b/lib/crc/include/crc.hpp new file mode 100644 index 0000000..ecc5ace --- /dev/null +++ b/lib/crc/include/crc.hpp @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <cstddef> +#include <inttypes.h> + +namespace { + +class Crc { +public: + constexpr Crc() : table() { + uint32_t poly = 0xedb88320; + + for (uint32_t i = 0; i < 256; i++) { + uint32_t crc = i; + + for (int j = 0; j < 8; j++) { + if (crc & 1) { + crc = poly ^ (crc >> 1); + } else { + crc >>= 1; + } + } + + table[i] = crc; + } + } + + uint32_t crc32(const void *data, const size_t length, uint32_t init = 0) const { + uint32_t crc = init ^ 0xffffffff; + + const uint8_t *v = static_cast<const uint8_t *>(data); + + for (size_t i = 0; i < length; i++) { + crc = table[(crc ^ v[i]) & 0xff] ^ (crc >> 8); + } + + return crc ^ 0xffffffff; + } + +private: + uint32_t table[256]; +}; +} // namespace |