lib/crc/crc64-neon.c
Source file repositories/reference/linux-study-clean/lib/crc/crc64-neon.c
File Facts
- System
- Linux kernel
- Corpus path
lib/crc/crc64-neon.c- Extension
.c- Size
- 1199 bytes
- Lines
- 48
- Domain
- Kernel Services
- Bucket
- lib
- Inferred role
- Kernel Services: implementation source
- Status
- source implementation candidate
Why This File Exists
Shared kernel service surface used by multiple subsystems, including helpers, cryptography, virtualization support, and async I/O infrastructure.
- Shared kernel service surface used by multiple subsystems, including helpers, cryptography, virtualization support, and async I/O infrastructure.
Dependency Surface
linux/types.hasm/neon-intrinsics.hcrc64-neon.h
Detected Declarations
function crc64_nvme_neon
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-only
/*
* Accelerated CRC64 (NVMe) using ARM NEON C intrinsics
*/
#include <linux/types.h>
#include <asm/neon-intrinsics.h>
#include "crc64-neon.h"
u64 crc64_nvme_neon(u64 crc, const u8 *p, size_t len);
/* x^191 mod G, x^127 mod G */
static const u64 fold_consts_val[2] = { 0xeadc41fd2ba3d420ULL,
0x21e9761e252621acULL };
/* floor(x^127 / G), (G - x^64) / x */
static const u64 bconsts_val[2] = { 0x27ecfa329aef9f77ULL,
0x34d926535897936aULL };
u64 crc64_nvme_neon(u64 crc, const u8 *p, size_t len)
{
uint64x2_t fold_consts = vld1q_u64(fold_consts_val);
uint64x2_t v0 = { crc, 0 };
uint64x2_t zero = { };
for (;;) {
v0 ^= vreinterpretq_u64_u8(vld1q_u8(p));
p += 16;
len -= 16;
if (len < 16)
break;
v0 = pmull64(fold_consts, v0) ^ pmull64_high(fold_consts, v0);
}
/* Multiply the 128-bit value by x^64 and reduce it back to 128 bits. */
v0 = vextq_u64(v0, zero, 1) ^ pmull64_hi_lo(fold_consts, v0);
/* Final Barrett reduction */
uint64x2_t bconsts = vld1q_u64(bconsts_val);
uint64x2_t final = pmull64(bconsts, v0);
v0 ^= vextq_u64(zero, final, 1) ^ pmull64_hi_lo(bconsts, final);
return vgetq_lane_u64(v0, 1);
}
Annotation
- Immediate include surface: `linux/types.h`, `asm/neon-intrinsics.h`, `crc64-neon.h`.
- Detected declarations: `function crc64_nvme_neon`.
- Atlas domain: Kernel Services / lib.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.