Skip to main content

Op

pub enum Op {
Show 17 variants Dot { a: VReg, b: VReg, d: SReg, }, Sum { a: VReg, d: SReg, }, Max { a: VReg, d: SReg, }, Vec { op: Bin, a: VReg, b: VReg, d: VReg, }, VecScalar { op: Bin, a: VReg, s: SReg, d: VReg, }, Map { f: Func, a: VReg, d: VReg, }, Scalar { op: Bin, a: SReg, b: SReg, d: SReg, }, ScalarMap { f: Func, a: SReg, d: SReg, }, Const { value: f32, d: SReg, }, Hadamard { a: VReg, d: VReg, }, Rotate { a: VReg, cos: VReg, sin: VReg, d: VReg, neox: bool, }, ArgMax { a: VReg, d: SReg, }, AbsMax { a: VReg, d: SReg, }, Codes { a: VReg, s: SReg, d: VReg, }, Scale { a: VReg, n: i8, d: VReg, }, MulAdd { a: VReg, b: VReg, c: VReg, d: VReg, }, MulAddScalar { a: VReg, b: VReg, s: SReg, d: VReg, },
}
Expand description

One instruction.

Variants§

§

Dot

s[d] = Σ v[a]_i·v[b]_i, lanes then the tree.

Fields

§

Sum

s[d] = Σ v[a]_i, lanes then the tree.

Fields

§

Max

s[d] = max_i v[a]_i (super::numerics::fmax).

Fields

§

Vec

v[d]_i = v[a]_i ∘ v[b]_i.

Fields

§op: Bin
§

VecScalar

v[d]_i = v[a]_i ∘ s[s].

Fields

§op: Bin
§

Map

v[d]_i = f(v[a]_i).

Fields

§

Scalar

s[d] = s[a] ∘ s[b].

Fields

§op: Bin
§

ScalarMap

s[d] = f(s[a]).

Fields

§

Const

s[d] = value.

Fields

§value: f32
§

Hadamard

v[d] = v[a] rotated by the Walsh–Hadamard transform, unnormalized.

Fields

§

Rotate

v[d] = v[a] with its first 2·len(v[cos]) elements turned in pairs by the rotary table v[cos], v[sin] (super::numerics::rope): pair i is (i, i + len) under NEOX, (2i, 2i + 1) otherwise.

Fields

§cos: VReg
§sin: VReg
§neox: bool
§

ArgMax

s[d] = the index of v[a]’s largest element, the first of equals, as an f32 (super::numerics::argmax).

Fields

§

AbsMax

s[d] = the largest magnitude in v[a] (super::numerics::absmax).

Fields

§

Codes

v[d]_i = the int8 code of v[a]_i under the inverse scale s[s], as an f32 (super::numerics::int8_codes).

Fields

§

Scale

v[d]_i = v[a]_i·2^n (super::numerics::ldexp): exact while normal, infinite past the top, a zero of its sign below the normals — not a product, which rounds a value just below the normals up into them.

Fields

§n: i8
§

MulAdd

v[d]_i = v[c]_i + v[a]_i·v[b]_i: the product rounded, then the sum — a Mul then an Add, in one pass.

Fields

§

MulAddScalar

v[d]_i = v[a]_i·v[b]_i + s[s]: the product rounded, then the sum.

Fields

Implementations§

Source§

impl Op

Source

pub fn reads(self) -> (Vec<VReg>, Vec<SReg>)

The vector and scalar registers the instruction reads.

Source

pub fn writes_scalar(self) -> Option<SReg>

The scalar register the instruction writes, if it writes one.

Source

pub fn writes(self) -> Option<VReg>

The vector register the instruction writes, if it writes one.

Trait Implementations§

Source§

impl Clone for Op

Source§

fn clone(&self) -> Op

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Op

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Op

Source§

fn eq(&self, other: &Op) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Op

Source§

impl StructuralPartialEq for Op

Auto Trait Implementations§

§

impl Freeze for Op

§

impl RefUnwindSafe for Op

§

impl Send for Op

§

impl Sync for Op

§

impl Unpin for Op

§

impl UnsafeUnpin for Op

§

impl UnwindSafe for Op

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,