//! Streaming SVE / SME context lifecycle.
//!
//! Constructing a [`Stream`] enters streaming mode (SMSTART) and enables
//! the ZA matrix accumulator. Dropping the [`Stream`] leaves streaming
//! mode (SMSTOP). The type is `!Send + !Sync` because PSTATE.SM and
//! PSTATE.ZA are per-thread.
//!
//! While a `Stream` is live, the SVE register file Z0โZ31 and predicate
//! registers P0โP15 become addressable, with the streaming vector length
//! (SVL) reported by [`Stream::svl_bytes`].
//!
//! `Stream` and [`crate::matrix::Matrix`] (AMX) share the same physical
//! coprocessor block. Holding both live on the same thread is not
//! undefined behaviour but interleaves writes to a single hardware state
//! and gives nonsense results. Callers should hold exactly one of the
//! two per thread at any time.
use crate::;
use PhantomData;
/// A live streaming-mode context.
///
/// Construction calls `SMSTART` (both SM and ZA bits) and zeroes ZA.
/// Drop calls `SMSTOP` (both bits).
// ---------------------------------------------------------------------------
// Tests
// ---------------------------------------------------------------------------
Homonyms
cyb/evy/forks/naga/src/back/hlsl/mod.rs
struct Baz { m: mat3x2, } struct Baz { float2 m_0; float2 m_1; float2 m_2; }; float3x2 GetMatmOnBaz(Baz obj) { return float3x2(obj.m_0, obj.m_1, obj.m_2); }