summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/crc32.C67
-rw-r--r--src/lib/makefile2
2 files changed, 68 insertions, 1 deletions
diff --git a/src/lib/crc32.C b/src/lib/crc32.C
new file mode 100644
index 000000000..0c06c62c5
--- /dev/null
+++ b/src/lib/crc32.C
@@ -0,0 +1,67 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/lib/crc32.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#include <stdint.h>
+#include <util/crc32.H>
+
+namespace Util
+{
+ static const uint64_t CRC32_POLY = 0x104C11DB7ull;
+
+ uint32_t crc32_calc(const void* ptr, size_t size)
+ {
+ const uint8_t* _ptr = (const uint8_t*)ptr;
+ uint64_t crc = 0;
+ while(size)
+ {
+ uint64_t data = 0;
+ for (int i = 0; i < 4; ++i)
+ {
+ data <<= 8;
+ if (size)
+ {
+ data |= *(_ptr++);
+ --size;
+ }
+ }
+
+ crc <<= 32;
+ crc ^= (data << 32);
+
+
+ int idx = 0;
+ do
+ {
+ idx = __builtin_clzl(crc);
+ if (idx < 32)
+ {
+ crc ^= (CRC32_POLY << (31 - idx));
+ }
+
+ } while (idx < 32);
+ }
+
+ return crc;
+ }
+
+};
+
diff --git a/src/lib/makefile b/src/lib/makefile
index e8b648c6c..42571c341 100644
--- a/src/lib/makefile
+++ b/src/lib/makefile
@@ -25,7 +25,7 @@ ROOTPATH = ../..
OBJS = string.o string_ext.o stdlib.o ctype.o assert.o stdio.o math.o sprintf.o
OBJS += syscall_stub.o syscall_task.o syscall_msg.o
OBJS += syscall_mmio.o syscall_time.o sync.o syscall_misc.o
-OBJS += syscall_mm.o splaytree.o cxxtest_data.o
+OBJS += syscall_mm.o splaytree.o cxxtest_data.o crc32.o
ifdef HOSTBOOT_MEMORY_LEAKS
COMMONFLAGS += -DHOSTBOOT_MEMORY_LEAKS=1
OpenPOWER on IntegriCloud