native 0.0.1
Vectors, masks and wide register packs for C++26
Loading...
Searching...
No Matches
common.h File Reference

Declares SIMD element types and pointer access policies. More...

#include "native/attributes.h"
#include "native/isa.h"
#include "native/mask_traits.h"
#include "native/value_traits.h"
#include <array>
#include <span>
#include <concepts>
#include <utility>
#include <cstddef>
#include <cstdint>
#include <type_traits>
#include <limits>
Include dependency graph for common.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  native::compaction_result< V >
struct  native::imm_t< K >
struct  native::mask_lane< U >
struct  native::mask_traits< simd< T, N, Arch > >
struct  native::mask_traits< predicate< N, Arch > >
struct  native::mask_traits< mask_lane< U > >
struct  native::simd_memory< Alignment, Access >

Namespaces

namespace  native
 Architecture-tagged vectors, register packs and supporting value types. Native arithmetic follows its architecture tag and instruction-set preconditions. Common utilities do not select or admit a runtime CPU profile.

Enumerations

enum class  native::simd_access

Functions

template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator+ (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator- (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator* (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator/ (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator% (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator& (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator| (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator^ (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator<< (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator>> (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator== (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator!= (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator< (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator<= (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator> (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator>= (simd< T, N, A >, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator+= (simd< T, N, A > &, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator-= (simd< T, N, A > &, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator*= (simd< T, N, A > &, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator/= (simd< T, N, A > &, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator%= (simd< T, N, A > &, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator&= (simd< T, N, A > &, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator|= (simd< T, N, A > &, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator^= (simd< T, N, A > &, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator<<= (simd< T, N, A > &, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.
template<class T, class U, std::size_t N, std::size_t M, isa<> A, isa<> B>
requires (A!=B || (N!=M && (N==2 || N==3 || M==2 || M==3)))
void native::operator>>= (simd< T, N, A > &, simd< U, M, B >)=delete
 Reject mixed architectures and mismatched short-vector widths before native conversions can participate.

Variables

template<std::size_t K>
constexpr imm_t< K > native::imm {}

Detailed Description

Declares SIMD element types and pointer access policies.

SPDX-FileType: SOURCE
SPDX-FileCopyrightText: 2026 Edward Kmett <ekmett@gmail.com>
SPDX-License-Identifier: BSD-2-Clause OR Apache-2.0
Author
Edward Kmett ekmett@gmail.com

Definition in file common.h.