//===-- scudo_crc32.cpp -----------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// CRC32 function leveraging hardware specific instructions. This has to be
/// kept separated to restrict the use of compiler specific flags to this file.
///
//===----------------------------------------------------------------------===//

// Hardware CRC32 is supported at compilation via the following:
// - for i386 & x86_64: -msse4.2
// - for ARM & AArch64: -march=armv8-a+crc or -mcrc
// An additional check must be performed at runtime as well to make sure the
// emitted instructions are valid on the target host.
#include "scudo_crc32.h"
#include "scudo_utils.h"

#if defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)
# ifdef __SSE4_2__
#  include <smmintrin.h>
#  define CRC32_INTRINSIC FIRST_32_SECOND_64(_mm_crc32_u32, _mm_crc32_u64)
# endif
# ifdef __ARM_FEATURE_CRC32
#  include <arm_acle.h>
#  define CRC32_INTRINSIC FIRST_32_SECOND_64(__crc32cw, __crc32cd)
# endif
#endif  // defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)

namespace __scudo {

#if defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)
INLINE u32 computeHardwareCRC32(u32 Crc, uptr Data) {
  return CRC32_INTRINSIC(Crc, Data);
}

u32 computeCRC32(u32 Crc, uptr Data, u8 HashType) {
  if (HashType == CRC32Hardware) {
    return computeHardwareCRC32(Crc, Data);
  }
  return computeSoftwareCRC32(Crc, Data);
}
#else
u32 computeCRC32(u32 Crc, uptr Data, u8 HashType) {
  return computeSoftwareCRC32(Crc, Data);
}
#endif  // defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)

}  // namespace __scudo
