Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/lib/crc/arm64/crc64.h
170891 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* CRC64 using ARM64 PMULL instructions
4
*/
5
6
#include <linux/cpufeature.h>
7
#include <asm/simd.h>
8
#include <linux/minmax.h>
9
#include <linux/sizes.h>
10
11
u64 crc64_nvme_arm64_c(u64 crc, const u8 *p, size_t len);
12
13
#define crc64_be_arch crc64_be_generic
14
15
static inline u64 crc64_nvme_arch(u64 crc, const u8 *p, size_t len)
16
{
17
if (len >= 128 && cpu_have_named_feature(PMULL) &&
18
likely(may_use_simd())) {
19
size_t chunk = len & ~15;
20
21
scoped_ksimd()
22
crc = crc64_nvme_arm64_c(crc, p, chunk);
23
24
p += chunk;
25
len &= 15;
26
}
27
return crc64_nvme_generic(crc, p, len);
28
}
29
30