diff --git a/src/google/protobuf/parse_context.h b/src/google/protobuf/parse_context.h index df12ee1ab..3eb2e56c7 100644 --- a/src/google/protobuf/parse_context.h +++ b/src/google/protobuf/parse_context.h @@ -653,7 +653,7 @@ inline const char* VarintParseSlow(const char* p, uint32_t res, uint64_t* out) { return tmp.first; } -#ifdef __aarch64__ +#if defined(__aarch64__) && !defined(_MSC_VER) // Generally, speaking, the ARM-optimized Varint decode algorithm is to extract // and concatenate all potentially valid data bits, compute the actual length // of the Varint, and mask off the data bits which are not actually part of the @@ -883,7 +883,7 @@ static const char* VarintParseSlowArm(const char* p, uint64_t* out, template PROTOBUF_NODISCARD const char* VarintParse(const char* p, T* out) { -#if defined(__aarch64__) && defined(PROTOBUF_LITTLE_ENDIAN) +#if defined(__aarch64__) && defined(PROTOBUF_LITTLE_ENDIAN) && !defined(_MSC_VER) // This optimization is not supported in big endian mode uint64_t first8; std::memcpy(&first8, p, sizeof(first8));