redstone-ml 0.0.0

High-performance Machine Learning, Auto-Differentiation and Tensor Algebra crate for Rust
Documentation
use crate::flat_index_generator::FlatIndexGenerator;
use crate::ndarray::collapse_contiguous::collapse_to_uniform_stride;
use crate::{define_binary_op_trait, simd_binary_op_specializations};
use paste::paste;
use std::ops::Div;
use std::ptr::addr_of;


define_binary_op_trait!(BinaryOpDiv, Div, div, /);

impl BinaryOpDiv for f32 {
    #[cfg(all(apple_vdsp, not(neon_simd)))]
    unsafe fn div_stride_n_0(lhs: *const Self, lhs_stride: usize,
                             rhs: *const Self, dst: *mut Self, count: usize) {
        use crate::acceleration::vdsp::vDSP_vsdiv;
        vDSP_vsdiv(lhs, lhs_stride as isize, rhs, dst, 1, count);
    }

    simd_binary_op_specializations!(div);

    #[cfg(all(apple_vdsp, not(neon_simd)))]
    unsafe fn div_stride_n_n(lhs: *const Self, lhs_stride: usize,
                             rhs: *const Self, rhs_stride: usize,
                             dst: *mut Self, count: usize) {
        use crate::acceleration::vdsp::vDSP_vdiv;
        vDSP_vdiv(rhs, rhs_stride as isize, lhs, lhs_stride as isize, dst, 1, count);
    }
}

impl BinaryOpDiv for f64 {
    #[cfg(all(apple_vdsp, not(neon_simd)))]
    unsafe fn div_stride_n_0(lhs: *const Self, lhs_stride: usize,
                             rhs: *const Self, dst: *mut Self, count: usize) {
        use crate::acceleration::vdsp::vDSP_vsdivD;
        vDSP_vsdivD(lhs, lhs_stride as isize, rhs, dst, 1, count);
    }

    simd_binary_op_specializations!(div);

    #[cfg(all(apple_vdsp, not(neon_simd)))]
    unsafe fn div_stride_n_n(lhs: *const Self, lhs_stride: usize,
                             rhs: *const Self, rhs_stride: usize,
                             dst: *mut Self, count: usize) {
        use crate::acceleration::vdsp::vDSP_vdivD;
        vDSP_vdivD(rhs, rhs_stride as isize, lhs, lhs_stride as isize, dst, 1, count);
    }
}