//! Assignment operators use super::*; use core::ops::{AddAssign, MulAssign}; // commutative binary op-assignment use core::ops::{BitAndAssign, BitOrAssign, BitXorAssign}; // commutative bit binary op-assignment use core::ops::{DivAssign, RemAssign, SubAssign}; // non-commutative binary op-assignment use core::ops::{ShlAssign, ShrAssign}; // non-commutative bit binary op-assignment // Arithmetic macro_rules! assign_ops { ($(impl $assignTrait:ident for Simd where Self: $trait:ident, { fn $assign_call:ident(rhs: U) { $call:ident } })*) => { $(impl $assignTrait for Simd where Self: $trait, T: SimdElement, LaneCount: SupportedLaneCount, { #[inline] fn $assign_call(&mut self, rhs: U) { *self = self.$call(rhs); } })* } } assign_ops! { // Arithmetic impl AddAssign for Simd where Self: Add, { fn add_assign(rhs: U) { add } } impl MulAssign for Simd where Self: Mul, { fn mul_assign(rhs: U) { mul } } impl SubAssign for Simd where Self: Sub, { fn sub_assign(rhs: U) { sub } } impl DivAssign for Simd where Self: Div, { fn div_assign(rhs: U) { div } } impl RemAssign for Simd where Self: Rem, { fn rem_assign(rhs: U) { rem } } // Bitops impl BitAndAssign for Simd where Self: BitAnd, { fn bitand_assign(rhs: U) { bitand } } impl BitOrAssign for Simd where Self: BitOr, { fn bitor_assign(rhs: U) { bitor } } impl BitXorAssign for Simd where Self: BitXor, { fn bitxor_assign(rhs: U) { bitxor } } impl ShlAssign for Simd where Self: Shl, { fn shl_assign(rhs: U) { shl } } impl ShrAssign for Simd where Self: Shr, { fn shr_assign(rhs: U) { shr } } }