4#include "native/isa_import.h"
5#include "native/x86/bmi1.h"
6#include "native/targets.h"
11extern "C++" namespace native {
12 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
13 constexpr std::uint32_t
andn(std::uint32_t first, std::uint32_t second)
noexcept;
15 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
16 consteval std::uint32_t
andn(std::uint32_t first, std::uint32_t second)
noexcept;
18 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
19 constexpr std::uint64_t
andn(std::uint64_t first, std::uint64_t second)
noexcept;
21 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
22 consteval std::uint64_t
andn(std::uint64_t first, std::uint64_t second)
noexcept;
24 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
25 constexpr std::uint32_t
bextr(std::uint32_t value, std::uint32_t control)
noexcept;
27 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
28 consteval std::uint32_t
bextr(std::uint32_t value, std::uint32_t control)
noexcept;
30 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
31 constexpr std::uint64_t
bextr(std::uint64_t value, std::uint32_t control)
noexcept;
33 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
34 consteval std::uint64_t
bextr(std::uint64_t value, std::uint32_t control)
noexcept;
36 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
37 constexpr std::uint32_t
bextr(std::uint32_t value,
unsigned start,
unsigned length)
noexcept;
39 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
40 consteval std::uint32_t
bextr(std::uint32_t value,
unsigned start,
unsigned length)
noexcept;
42 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
43 constexpr std::uint64_t
bextr(std::uint64_t value,
unsigned start,
unsigned length)
noexcept;
45 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
46 consteval std::uint64_t
bextr(std::uint64_t value,
unsigned start,
unsigned length)
noexcept;
48 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
49 constexpr std::uint32_t
blsi(std::uint32_t value)
noexcept;
51 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
52 consteval std::uint32_t
blsi(std::uint32_t value)
noexcept;
54 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
55 constexpr std::uint64_t
blsi(std::uint64_t value)
noexcept;
57 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
58 consteval std::uint64_t
blsi(std::uint64_t value)
noexcept;
60 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
61 constexpr std::uint32_t
blsmsk(std::uint32_t value)
noexcept;
63 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
64 consteval std::uint32_t
blsmsk(std::uint32_t value)
noexcept;
66 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
67 constexpr std::uint64_t
blsmsk(std::uint64_t value)
noexcept;
69 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
70 consteval std::uint64_t
blsmsk(std::uint64_t value)
noexcept;
72 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
73 constexpr std::uint32_t
blsr(std::uint32_t value)
noexcept;
75 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
76 consteval std::uint32_t
blsr(std::uint32_t value)
noexcept;
78 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
79 constexpr std::uint64_t
blsr(std::uint64_t value)
noexcept;
81 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
82 consteval std::uint64_t
blsr(std::uint64_t value)
noexcept;
84 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
85 constexpr std::uint16_t
tzcnt(std::uint16_t value)
noexcept;
87 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
88 consteval std::uint16_t
tzcnt(std::uint16_t value)
noexcept;
90 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
91 constexpr std::uint32_t
tzcnt(std::uint32_t value)
noexcept;
93 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
94 consteval std::uint32_t
tzcnt(std::uint32_t value)
noexcept;
96 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(Arch.has(x86_feature::bmi1))
97 constexpr std::uint64_t
tzcnt(std::uint64_t value)
noexcept;
99 template<isa<x86> Arch = NATIVE_BA
SELINE>
requires(!Arch.has(x86_feature::bmi1))
100 consteval std::uint64_t
tzcnt(std::uint64_t value)
noexcept;
constexpr std::uint32_t andn(std::uint32_t first, std::uint32_t second) noexcept
ANDN: complement the first operand, then AND with the second.
constexpr std::uint32_t bextr(std::uint32_t value, std::uint32_t control) noexcept
constexpr std::uint16_t tzcnt(std::uint16_t value) noexcept
TZCNT: count low zero bits; zero returns the operand width, including 16-bit operands.
constexpr std::uint32_t blsmsk(std::uint32_t value) noexcept
BLSMSK: set every bit through the lowest set bit; zero produces all ones.
constexpr std::uint32_t blsr(std::uint32_t value) noexcept
BLSR: clear the lowest set bit; zero remains zero.
constexpr std::uint32_t blsi(std::uint32_t value) noexcept
BLSI: retain only the lowest set bit; zero remains zero.
Architecture-tagged vectors, register packs and supporting value types. Native arithmetic follows its...