Skip to main content

RmwOp

Enum RmwOp 

Source
pub enum RmwOp {
    Add,
    Sub,
    Mul,
    And,
    Or,
    Xor,
    AddF,
    SubF,
    MulF,
}
Expand description

The operation of a fused read-modify-write MicroOp::ArrRMW: buf[idx-1] = buf[idx-1] <op> operand. The INT ops (Add/Sub/Mul wrap as the kernel’s i64 arithmetic; And/Or/Xor bitwise) treat the element and operand as raw i64; the FLOAT ops (AddF/SubF/MulF) reinterpret both as f64 (the nbody velocity/position-update idiom). Sub/SubF are the only non-commutative members — the peephole fuses them only when the loaded element is the LEFT operand.

Variants§

§

Add

Wrapping addition.

§

Sub

Wrapping subtraction (buf[i] - operand).

§

Mul

Wrapping multiplication.

§

And

Bitwise AND.

§

Or

Bitwise OR.

§

Xor

Bitwise XOR.

§

AddF

IEEE addition (operands reinterpreted as f64).

§

SubF

IEEE subtraction (buf[i] - operand, as f64).

§

MulF

IEEE multiplication (as f64).

Implementations§

Source§

impl RmwOp

Source

pub fn is_float(self) -> bool

Whether the op reinterprets its operands as f64.

Source

pub fn eval(self, a: i64, b: i64) -> i64

Apply over the raw i64 bits of the element and operand — the bit-exact spec every stencil must match. Float ops reinterpret the bits as f64, compute, and re-encode (copy-and-patch never reassociates, so ordering is exact).

Trait Implementations§

Source§

impl Clone for RmwOp

Source§

fn clone(&self) -> RmwOp

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for RmwOp

Source§

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

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

impl PartialEq for RmwOp

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · 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 RmwOp

Source§

impl Eq for RmwOp

Source§

impl StructuralPartialEq for RmwOp

Auto Trait Implementations§

§

impl Freeze for RmwOp

§

impl RefUnwindSafe for RmwOp

§

impl Send for RmwOp

§

impl Sync for RmwOp

§

impl Unpin for RmwOp

§

impl UnsafeUnpin for RmwOp

§

impl UnwindSafe for RmwOp

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
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> 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.