#![allow(unsafe_code)]
pub(crate) mod gf16;
pub(crate) mod gf8;
pub mod proven;
use core::arch::wasm32::*;
use crate::kernel::scalar;
pub(crate) fn xor_simd128(dst: &mut [u8], src: &[u8]) {
assert_eq!(dst.len(), src.len());
unsafe { xor_impl(dst, src) }
}
#[target_feature(enable = "simd128")]
unsafe fn xor_impl(dst: &mut [u8], src: &[u8]) {
let len = dst.len() & !15;
let (dst_ptr, src_ptr) = (dst.as_mut_ptr(), src.as_ptr());
let mut offset = 0;
while offset < len {
unsafe {
let d = v128_load(dst_ptr.add(offset).cast());
let s = v128_load(src_ptr.add(offset).cast());
v128_store(dst_ptr.add(offset).cast(), v128_xor(d, s));
}
offset += 16;
}
scalar::xor(&mut dst[len..], &src[len..]);
}