*/
#ifdef ARM_ACLE_CRC_HASH
-# include <arm_acle.h>
-# ifdef ZLIB_COMPAT
-# include <zconf.h>
-# else
-# include <zconf-ng.h>
-# endif
-# ifdef __linux__
-# include <stddef.h>
-# endif
+#ifndef _MSC_VER
+# include <arm_acle.h>
+#endif
+#include "../../zbuild.h"
+#include "../../zutil.h"
uint32_t crc32_acle(uint32_t crc, const unsigned char *buf, uint64_t len) {
register uint32_t c;
buf4 = (const uint32_t *) buf;
}
-# if defined(__aarch64__)
+#if defined(__aarch64__)
if ((len > sizeof(uint32_t)) && ((ptrdiff_t)buf & sizeof(uint32_t))) {
c = __crc32w(c, *buf4++);
len -= sizeof(uint32_t);
const uint64_t *buf8 = (const uint64_t *) buf4;
-# ifdef UNROLL_MORE
+#ifdef UNROLL_MORE
while (len >= 4 * sizeof(uint64_t)) {
c = __crc32d(c, *buf8++);
c = __crc32d(c, *buf8++);
c = __crc32d(c, *buf8++);
len -= 4 * sizeof(uint64_t);
}
-# endif
+#endif
while (len >= sizeof(uint64_t)) {
c = __crc32d(c, *buf8++);
}
buf = (const unsigned char *) buf2;
-# else /* __aarch64__ */
+#else /* __aarch64__ */
# ifdef UNROLL_MORE
while (len >= 8 * sizeof(uint32_t)) {
} else {
buf = (const unsigned char *) buf4;
}
-# endif /* __aarch64__ */
+#endif /* __aarch64__ */
if (len) {
c = __crc32b(c, *buf);
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#ifndef MEMCHUNK_NEON_H_
-#define MEMCHUNK_NEON_H_
-
#ifdef ARM_NEON_MEMCHUNK
-#include "zbuild.h"
-#include "zutil.h"
-
-#include <arm_neon.h>
+#ifdef _M_ARM64
+# include <arm64_neon.h>
+#else
+# include <arm_neon.h>
+#endif
+#include "../../zbuild.h"
+#include "../../zutil.h"
typedef uint8x16_t memchunk_t;
}
static inline void storechunk(uint8_t *out, memchunk_t *chunk) {
+#ifdef _MSC_VER
+ /* Cast to memchunk_t pointer to avoid compiler error on MSVC ARM */
+ memchunk_t *target = (memchunk_t *)chunk;
+ memcpy(target, &chunk, sizeof(chunk));
+#else
memcpy(out, chunk, sizeof(memchunk_t));
+#endif
}
#include "memchunk_tpl.h"
#endif
-#endif
/* memchunk.c -- inline functions to copy small data chunks.
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#ifndef MEMCHUNK_H_
-#define MEMCHUNK_H_
#include "zbuild.h"
#include "zutil.h"
#define CHUNKMEMSET_SAFE chunkmemset_safe_c
#include "memchunk_tpl.h"
-
-#endif