From 5adf5a6d0bbfa36d4a757f211ae6b4a5c9e51dac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Sv=C3=A4rd?= Date: Wed, 9 Feb 2022 16:42:10 +0100 Subject: Break out the Crc class to its own library Change-Id: Iefa21223b9157e25e11f88873541b39292d12872 --- lib/CMakeLists.txt | 7 ++++-- lib/crc/CMakeLists.txt | 20 +++++++++++++++++ lib/crc/include/crc.hpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 lib/crc/CMakeLists.txt create mode 100644 lib/crc/include/crc.hpp (limited to 'lib') 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 +#include + +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(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 -- cgit v1.2.1