Skip to main content

Module arith

Module arith 

Source
Expand description

Compositional arithmetic helpers (saturating, wrapping, clamp/lerp/etc.). Compositional arithmetic helpers built from core primitive semantics.

Every op in this module is a pure composition of vyre core IR primitives (arithmetic + compare + select). Conform-proven byte-identical against the CPU reference.

Functionsยง

abs_diff_i8
Absolute difference between two i8 values, returned as u8.
abs_diff_i16
Absolute difference between two i16 values, returned as u16.
abs_diff_i32
Absolute difference between two i32 values, returned as u32.
abs_diff_i64
Absolute difference between two i64 values, returned as u64.
abs_diff_u8
Absolute difference between two u8 values.
abs_diff_u16
Absolute difference between two u16 values.
abs_diff_u32
Absolute difference between two u32 values.
abs_diff_u64
Absolute difference between two u64 values.
clamp_i8
Clamp x to the inclusive range [lo, hi] for i8.
clamp_i16
Clamp x to the inclusive range [lo, hi] for i16.
clamp_i32
Clamp x to the inclusive range [lo, hi] for i32.
clamp_i64
Clamp x to the inclusive range [lo, hi] for i64.
clamp_u8
Clamp x to the inclusive range [lo, hi] for u8.
clamp_u16
Clamp x to the inclusive range [lo, hi] for u16.
clamp_u32
Clamp x to the inclusive range [lo, hi] for u32.
clamp_u64
Clamp x to the inclusive range [lo, hi] for u64.
div_ceil_u32
Ceiling division for unsigned u32.
div_ceil_u64
Ceiling division for unsigned u64.
div_floor_u32
Floor division for unsigned u32.
div_floor_u64
Floor division for unsigned u64.
div_round_u8
Round-to-nearest-half-up division for u8.
div_round_u16
Round-to-nearest-half-up division for u16.
div_round_u32
Round-to-nearest-half-up division for u32.
div_round_u64
Round-to-nearest-half-up division for u64.
lerp_f32
crate::arith::clamp_u32 / their own bound.
lerp_f64
Linear interpolation for f64.
max_i8
Maximum of two i8 values.
max_i16
Maximum of two i16 values.
max_i32
Maximum of two i32 values.
max_i64
Maximum of two i64 values.
max_u8
Maximum of two u8 values.
max_u16
Maximum of two u16 values.
max_u32
Maximum of two u32 values.
max_u64
Maximum of two u64 values.
midpoint_i8
Overflow-safe midpoint for i8 (rounds toward negative infinity).
midpoint_i16
Overflow-safe midpoint for i16.
midpoint_i32
Overflow-safe midpoint for i32.
midpoint_i64
Overflow-safe midpoint for i64.
midpoint_u8
Overflow-safe midpoint for u8.
midpoint_u16
Overflow-safe midpoint for u16.
midpoint_u32
Overflow-safe midpoint for u32: a/2 + b/2 + (a & b & 1).
midpoint_u64
Overflow-safe midpoint for u64.
min_i8
min_i16
Minimum of two i16 values.
min_i32
Minimum of two i32 values.
min_i64
Minimum of two i64 values.
min_u8
Minimum of two u8 values.
min_u16
Minimum of two u16 values.
min_u32
Minimum of two u32 values.
min_u64
Minimum of two u64 values.
saturating_add_i8
Saturating addition for i8.
saturating_add_i16
Saturating addition for i16.
saturating_add_i32
Saturating addition for i32.
saturating_add_i64
Saturating addition for i64.
saturating_add_u8
Saturating addition for u8.
saturating_add_u16
Saturating addition for u16.
saturating_add_u32
Saturating addition for u32.
saturating_add_u64
Saturating addition for u64.
saturating_mul_i8
Saturating multiplication for i8.
saturating_mul_i16
Saturating multiplication for i16.
saturating_mul_i32
Saturating multiplication for i32.
saturating_mul_i64
Saturating multiplication for i64.
saturating_mul_u8
Saturating multiplication for u8.
saturating_mul_u16
Saturating multiplication for u16.
saturating_mul_u32
Saturating multiplication for u32.
saturating_mul_u64
Saturating multiplication for u64.
saturating_sub_i8
Saturating subtraction for i8.
saturating_sub_i16
Saturating subtraction for i16.
saturating_sub_i32
Saturating subtraction for i32.
saturating_sub_i64
Saturating subtraction for i64.
saturating_sub_u8
Saturating subtraction for u8.
saturating_sub_u16
Saturating subtraction for u16.
saturating_sub_u32
Saturating subtraction for u32.
saturating_sub_u64
Saturating subtraction for u64.
wrapping_add_i8
Wrapping addition for i8.
wrapping_add_i16
Wrapping addition for i16.
wrapping_add_i32
Wrapping addition for i32.
wrapping_add_i64
Wrapping addition for i64.
wrapping_add_u8
Wrapping addition for u8 (mod 2^8).
wrapping_add_u16
Wrapping addition for u16 (mod 2^16).
wrapping_add_u32
Wrapping addition for u32 (mod 2^32).
wrapping_add_u64
Wrapping addition for u64 (mod 2^64).
wrapping_mul_i8
Wrapping multiplication for i8.
wrapping_mul_i16
Wrapping multiplication for i16.
wrapping_mul_i32
Wrapping multiplication for i32.
wrapping_mul_i64
Wrapping multiplication for i64.
wrapping_mul_u8
Wrapping multiplication for u8.
wrapping_mul_u16
Wrapping multiplication for u16.
wrapping_mul_u32
Wrapping multiplication for u32.
wrapping_mul_u64
Wrapping multiplication for u64.
wrapping_sub_i8
Wrapping subtraction for i8.
wrapping_sub_i16
Wrapping subtraction for i16.
wrapping_sub_i32
Wrapping subtraction for i32.
wrapping_sub_i64
Wrapping subtraction for i64.
wrapping_sub_u8
Wrapping subtraction for u8.
wrapping_sub_u16
Wrapping subtraction for u16.
wrapping_sub_u32
Wrapping subtraction for u32.
wrapping_sub_u64
Wrapping subtraction for u64.