pub enum OpCode {
}Expand description
A single instruction in the band-math VM.
The VM is a pure stack machine: operands are pushed onto the stack and operations pop their arguments and push one result.
Variants§
LoadConst(u16)
Push constants[idx] onto the stack.
LoadBand(u16)
Push bands[idx - 1][pixel_idx] (1-based band index).
LoadCacheSlot(u16)
Push the pre-computed CSE cache value at cache[idx].
StoreCacheSlot(u16)
Pop the top of the stack and store it in cache[idx].
Add
Floating-point addition.
Sub
Floating-point subtraction.
Mul
Floating-point multiplication.
Div
Floating-point division (returns NaN on divide-by-zero).
Pow
Power: lhs.powf(rhs).
Neg
Arithmetic negation.
Abs
Absolute value.
Sqrt
Square root.
Log
Log base 10 (log10).
Ln
Natural logarithm (ln).
Exp
Exponential (e^x).
Sin
Sine.
Cos
Cosine.
Tan
Tangent.
Floor
Floor (round towards negative infinity).
Ceil
Ceiling (round towards positive infinity).
Round
Round to nearest integer.
Min
Pop b, pop a, push min(a, b).
Max
Pop b, pop a, push max(a, b).
Clamp
Pop max_v, pop min_v, pop val; push val.clamp(min_v, max_v).
Gt
lhs > rhs → 1.0 else 0.0
Lt
lhs < rhs → 1.0 else 0.0
Gte
lhs >= rhs → 1.0 else 0.0
Lte
lhs <= rhs → 1.0 else 0.0
Eq
|lhs - rhs| < ε → 1.0 else 0.0
Ne
|lhs - rhs| >= ε → 1.0 else 0.0
And
Both operands non-zero → 1.0 else 0.0
Or
At least one operand non-zero → 1.0 else 0.0
Cond
Pop else_val (top), pop then_val, pop cond. Push then_val if cond != 0.0, else else_val.
Trait Implementations§
impl StructuralPartialEq for OpCode
Auto Trait Implementations§
impl Freeze for OpCode
impl RefUnwindSafe for OpCode
impl Send for OpCode
impl Sync for OpCode
impl Unpin for OpCode
impl UnsafeUnpin for OpCode
impl UnwindSafe for OpCode
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more