native 0.0.1
Vectors, masks and wide register packs for C++26
Loading...
Searching...
No Matches
native.x86.lzcnt.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/lzcnt.h"
6#include "native/targets.h"
7export module native.x86.lzcnt;
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::lzcnt))
13 constexpr std::uint16_t lzcnt(std::uint16_t value) noexcept;
14
15 template<isa<x86> Arch = NATIVE_BASELINE> requires(!Arch.has(x86_feature::lzcnt))
16 consteval std::uint16_t lzcnt(std::uint16_t value) noexcept;
17
18 template<isa<x86> Arch = NATIVE_BASELINE> requires(Arch.has(x86_feature::lzcnt))
19 constexpr std::uint32_t lzcnt(std::uint32_t value) noexcept;
20
21 template<isa<x86> Arch = NATIVE_BASELINE> requires(!Arch.has(x86_feature::lzcnt))
22 consteval std::uint32_t lzcnt(std::uint32_t value) noexcept;
23
24 template<isa<x86> Arch = NATIVE_BASELINE> requires(Arch.has(x86_feature::lzcnt))
25 constexpr std::uint64_t lzcnt(std::uint64_t value) noexcept;
26
27 template<isa<x86> Arch = NATIVE_BASELINE> requires(!Arch.has(x86_feature::lzcnt))
28 consteval std::uint64_t lzcnt(std::uint64_t value) noexcept;
29
30}
31#endif
32
33export namespace native {
36
39 using ::native::lzcnt;
41}
constexpr std::uint16_t lzcnt(std::uint16_t value) noexcept
Definition lzcnt.h:24
Architecture-tagged vectors, register packs and supporting value types. Native arithmetic follows its...