4#include "native/config.h"
11#if NATIVE_HOST_X86 || defined(NATIVE_DOXYGEN)
12namespace native::detail::x86_vpclmul {
17 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::pclmul) &&
18 Arch.has(x86_feature::avx) && Imm8 <= 255)
20 __m128i vpclmulqdq(__m128i a, __m128i b) noexcept {
21 return _mm_clmulepi64_si128(a, b, Imm8);
25 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::vpclmulqdq) &&
26 Arch.has(x86_feature::avx) && Imm8 <= 255)
28 __m256i vpclmulqdq(__m256i a, __m256i b) noexcept {
29 return _mm256_clmulepi64_epi128(a, b, Imm8);
33 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::vpclmulqdq) &&
34 Arch.has(x86_feature::avx512f) && Imm8 <= 255)
36 __m512i vpclmulqdq(__m512i a, __m512i b) noexcept {
37 return _mm512_clmulepi64_epi128(a, b, Imm8);
41 template<isa<x86> Arch,
unsigned Imm8,
class A,
class B>
42 void vpclmulqdq(A, B) =
delete;
Compiler attributes for host code, with shader-safe shared modifiers.
#define native_inline
inline [[always_inline]]
#define native_nodiscard
C++17 [[nodiscard]].
#define native_const
[[const]] is not const
#define native_target(x)
this indicates a required feature set for the current multiversioned function.