native 0.0.1
Vectors, masks and wide register packs for C++26
Loading...
Searching...
No Matches
native.x86.crc32c.ccm
1// SPDX-FileCopyrightText: 2026 Edward Kmett <ekmett@gmail.com>
2// SPDX-License-Identifier: BSD-2-Clause OR Apache-2.0
3module;
4#include "native/isa_import.h"
5#include "native/x86/crc32c.h"
6#include "native/targets.h"
7export module native.x86.crc32c;
8export import native.x86.features;
9// Defaults use the owning module provider's baseline.
10#if NATIVE_HOST_X86
11extern "C++" namespace native {
12 template<isa<x86> Arch = NATIVE_BASELINE> requires(Arch.has(x86_feature::crc32))
13 constexpr std::uint32_t crc32c(std::uint32_t accumulator, std::uint8_t value) noexcept;
14
15 template<isa<x86> Arch = NATIVE_BASELINE> requires(!Arch.has(x86_feature::crc32))
16 consteval std::uint32_t crc32c(std::uint32_t accumulator, std::uint8_t value) noexcept;
17
18 template<isa<x86> Arch = NATIVE_BASELINE> requires(Arch.has(x86_feature::crc32))
19 constexpr std::uint32_t crc32c(std::uint32_t accumulator, std::uint16_t value) noexcept;
20
21 template<isa<x86> Arch = NATIVE_BASELINE> requires(!Arch.has(x86_feature::crc32))
22 consteval std::uint32_t crc32c(std::uint32_t accumulator, std::uint16_t value) noexcept;
23
24 template<isa<x86> Arch = NATIVE_BASELINE> requires(Arch.has(x86_feature::crc32))
25 constexpr std::uint32_t crc32c(std::uint32_t accumulator, std::uint32_t value) noexcept;
26
27 template<isa<x86> Arch = NATIVE_BASELINE> requires(!Arch.has(x86_feature::crc32))
28 consteval std::uint32_t crc32c(std::uint32_t accumulator, std::uint32_t value) noexcept;
29
30#if defined(__x86_64__) || defined(_M_X64)
31 template<isa<x86> Arch = NATIVE_BASELINE> requires(Arch.has(x86_feature::crc32))
32 constexpr std::uint32_t crc32c(std::uint32_t accumulator, std::uint64_t value) noexcept;
33
34 template<isa<x86> Arch = NATIVE_BASELINE> requires(!Arch.has(x86_feature::crc32))
35 consteval std::uint32_t crc32c(std::uint32_t accumulator, std::uint64_t value) noexcept;
36
37#endif
38}
39#endif
40
41export namespace native {
45 using ::native::crc32c;
47}
constexpr std::uint32_t crc32c(std::uint32_t accumulator, std::uint8_t value) noexcept
Update a 32-bit CRC32C accumulator with exactly eight bits.
Definition crc32c.h:27
Architecture-tagged vectors, register packs and supporting value types. Native arithmetic follows its...