native 0.0.1
Vectors, masks and wide register packs for C++26
Loading...
Searching...
No Matches
native.arm.crc.ccm
1// SPDX-License-Identifier: BSD-2-Clause OR Apache-2.0
2module;
3#include "native/isa_import.h"
4#include "native/arm/crc.h"
5#include "native/targets.h"
6export module native.arm.crc;
7export import native.arm.features;
8// Only the owning module adds defaults. Standalone headers stay independent
9// of translation-unit baseline flags, and retain their explicit ISA arguments.
11#if NATIVE_HOST_NEON || defined(NATIVE_DOXYGEN)
12extern "C++" namespace native {
13 template<isa<arm> Arch=NATIVE_BASELINE> requires(Arch.has(arm_feature::crc))
14 constexpr std::uint32_t crc32(std::uint32_t accumulator, std::uint8_t value) noexcept;
15
16 template<isa<arm> Arch=NATIVE_BASELINE> requires(!Arch.has(arm_feature::crc))
17 consteval std::uint32_t crc32(std::uint32_t accumulator, std::uint8_t value) noexcept;
18
19 template<isa<arm> Arch=NATIVE_BASELINE> requires(Arch.has(arm_feature::crc))
20 constexpr std::uint32_t crc32(std::uint32_t accumulator, std::uint16_t value) noexcept;
21
22 template<isa<arm> Arch=NATIVE_BASELINE> requires(!Arch.has(arm_feature::crc))
23 consteval std::uint32_t crc32(std::uint32_t accumulator, std::uint16_t value) noexcept;
24
25 template<isa<arm> Arch=NATIVE_BASELINE> requires(Arch.has(arm_feature::crc))
26 constexpr std::uint32_t crc32(std::uint32_t accumulator, std::uint32_t value) noexcept;
27
28 template<isa<arm> Arch=NATIVE_BASELINE> requires(!Arch.has(arm_feature::crc))
29 consteval std::uint32_t crc32(std::uint32_t accumulator, std::uint32_t value) noexcept;
30
31 template<isa<arm> Arch=NATIVE_BASELINE> requires(Arch.has(arm_feature::crc))
32 constexpr std::uint32_t crc32(std::uint32_t accumulator, std::uint64_t value) noexcept;
33
34 template<isa<arm> Arch=NATIVE_BASELINE> requires(!Arch.has(arm_feature::crc))
35 consteval std::uint32_t crc32(std::uint32_t accumulator, std::uint64_t value) noexcept;
36
37 template<isa<arm> Arch=NATIVE_BASELINE, class A, class B>
38 void crc32(A, B);
39
40 template<isa<arm> Arch=NATIVE_BASELINE> requires(Arch.has(arm_feature::crc))
41 constexpr std::uint32_t crc32c(std::uint32_t accumulator, std::uint8_t value) noexcept;
42
43 template<isa<arm> Arch=NATIVE_BASELINE> requires(!Arch.has(arm_feature::crc))
44 consteval std::uint32_t crc32c(std::uint32_t accumulator, std::uint8_t value) noexcept;
45
46 template<isa<arm> Arch=NATIVE_BASELINE> requires(Arch.has(arm_feature::crc))
47 constexpr std::uint32_t crc32c(std::uint32_t accumulator, std::uint16_t value) noexcept;
48
49 template<isa<arm> Arch=NATIVE_BASELINE> requires(!Arch.has(arm_feature::crc))
50 consteval std::uint32_t crc32c(std::uint32_t accumulator, std::uint16_t value) noexcept;
51
52 template<isa<arm> Arch=NATIVE_BASELINE> requires(Arch.has(arm_feature::crc))
53 constexpr std::uint32_t crc32c(std::uint32_t accumulator, std::uint32_t value) noexcept;
54
55 template<isa<arm> Arch=NATIVE_BASELINE> requires(!Arch.has(arm_feature::crc))
56 consteval std::uint32_t crc32c(std::uint32_t accumulator, std::uint32_t value) noexcept;
57
58 template<isa<arm> Arch=NATIVE_BASELINE> requires(Arch.has(arm_feature::crc))
59 constexpr std::uint32_t crc32c(std::uint32_t accumulator, std::uint64_t value) noexcept;
60
61 template<isa<arm> Arch=NATIVE_BASELINE> requires(!Arch.has(arm_feature::crc))
62 consteval std::uint32_t crc32c(std::uint32_t accumulator, std::uint64_t value) noexcept;
63
64 template<isa<arm> Arch=NATIVE_BASELINE, class A, class B>
65 void crc32c(A, B);
66
67}
68#endif
70
71export namespace native {
74 using ::native::crc32;
75 using ::native::crc32c;
77}
constexpr std::uint32_t crc32(std::uint32_t accumulator, std::uint8_t value) noexcept
Update the CRC32 accumulator with exactly 8 input bits.
Definition crc.h:28
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...