#[cfg(all(target_arch = "arm", target_feature = "v7", target_feature = "neon"))]
use core::{
arch::{
arm::{
uint8x8_t, uint8x16_t,
uint16x4_t, uint16x8_t,
uint32x2_t, uint32x4_t,
uint64x1_t, uint64x2_t,
vdup_n_u8, vdupq_n_u8,
vdup_n_u16, vdupq_n_u16,
vdup_n_u32, vdupq_n_u32,
vdup_n_u64, vdupq_n_u64,
vext_u8, vextq_u8,
vext_u16, vextq_u16,
vext_u32, vextq_u32,
vext_u64, vextq_u64
}
}
};
#[cfg(all(target_arch = "aarch64", target_feature = "neon"))]
use core::{
arch::{
aarch64::{
uint8x8_t, uint8x16_t,
uint16x4_t, uint16x8_t,
uint32x2_t, uint32x4_t,
uint64x1_t, uint64x2_t,
vdup_n_u8, vdupq_n_u8,
vdup_n_u16, vdupq_n_u16,
vdup_n_u32, vdupq_n_u32,
vdup_n_u64, vdupq_n_u64,
vext_u8, vextq_u8,
vext_u16, vextq_u16,
vext_u32, vextq_u32,
vext_u64, vextq_u64
}
}
};
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn alvext_u8<const N: i32>(vector: uint8x8_t, addition: uint8x8_t) -> uint8x8_t {
return match N {
0x00 => vector,
0x01 => vext_u8::<0x01>(vector, addition),
0x02 => vext_u8::<0x02>(vector, addition),
0x03 => vext_u8::<0x03>(vector, addition),
0x04 => vext_u8::<0x04>(vector, addition),
0x05 => vext_u8::<0x05>(vector, addition),
0x06 => vext_u8::<0x06>(vector, addition),
0x07 => vext_u8::<0x07>(vector, addition),
0x08 => addition,
0x09 => vext_u8::<0x01>(addition, vdup_n_u8(0)),
0x0A => vext_u8::<0x02>(addition, vdup_n_u8(0)),
0x0B => vext_u8::<0x03>(addition, vdup_n_u8(0)),
0x0C => vext_u8::<0x04>(addition, vdup_n_u8(0)),
0x0D => vext_u8::<0x05>(addition, vdup_n_u8(0)),
0x0E => vext_u8::<0x06>(addition, vdup_n_u8(0)),
0x0F => vext_u8::<0x07>(addition, vdup_n_u8(0)),
_ => vdup_n_u8(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn arvext_u8<const N: i32>(vector: uint8x8_t, addition: uint8x8_t) -> uint8x8_t {
return match N {
0x00 => vector,
0x01 => vext_u8::<0x07>(addition, vector),
0x02 => vext_u8::<0x06>(addition, vector),
0x03 => vext_u8::<0x05>(addition, vector),
0x04 => vext_u8::<0x04>(addition, vector),
0x05 => vext_u8::<0x03>(addition, vector),
0x06 => vext_u8::<0x02>(addition, vector),
0x07 => vext_u8::<0x01>(addition, vector),
0x08 => addition,
0x09 => vext_u8::<0x07>(vdup_n_u8(0), addition),
0x0A => vext_u8::<0x06>(vdup_n_u8(0), addition),
0x0B => vext_u8::<0x05>(vdup_n_u8(0), addition),
0x0C => vext_u8::<0x04>(vdup_n_u8(0), addition),
0x0D => vext_u8::<0x03>(vdup_n_u8(0), addition),
0x0E => vext_u8::<0x02>(vdup_n_u8(0), addition),
0x0F => vext_u8::<0x01>(vdup_n_u8(0), addition),
_ => vdup_n_u8(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn alvextq_u8<const N: i32>(vector: uint8x16_t, addition: uint8x16_t) -> uint8x16_t {
return match N {
0x00 => vector,
0x01 => vextq_u8::<0x01>(vector, addition),
0x02 => vextq_u8::<0x02>(vector, addition),
0x03 => vextq_u8::<0x03>(vector, addition),
0x04 => vextq_u8::<0x04>(vector, addition),
0x05 => vextq_u8::<0x05>(vector, addition),
0x06 => vextq_u8::<0x06>(vector, addition),
0x07 => vextq_u8::<0x07>(vector, addition),
0x08 => vextq_u8::<0x08>(vector, addition),
0x09 => vextq_u8::<0x09>(vector, addition),
0x0A => vextq_u8::<0x0A>(vector, addition),
0x0B => vextq_u8::<0x0B>(vector, addition),
0x0C => vextq_u8::<0x0C>(vector, addition),
0x0D => vextq_u8::<0x0D>(vector, addition),
0x0E => vextq_u8::<0x0E>(vector, addition),
0x0F => vextq_u8::<0x0F>(vector, addition),
0x10 => addition,
0x11 => vextq_u8::<0x01>(addition, vdupq_n_u8(0)),
0x12 => vextq_u8::<0x02>(addition, vdupq_n_u8(0)),
0x13 => vextq_u8::<0x03>(addition, vdupq_n_u8(0)),
0x14 => vextq_u8::<0x04>(addition, vdupq_n_u8(0)),
0x15 => vextq_u8::<0x05>(addition, vdupq_n_u8(0)),
0x16 => vextq_u8::<0x06>(addition, vdupq_n_u8(0)),
0x17 => vextq_u8::<0x07>(addition, vdupq_n_u8(0)),
0x18 => vextq_u8::<0x08>(addition, vdupq_n_u8(0)),
0x19 => vextq_u8::<0x09>(addition, vdupq_n_u8(0)),
0x1A => vextq_u8::<0x0A>(addition, vdupq_n_u8(0)),
0x1B => vextq_u8::<0x0B>(addition, vdupq_n_u8(0)),
0x1C => vextq_u8::<0x0C>(addition, vdupq_n_u8(0)),
0x1D => vextq_u8::<0x0D>(addition, vdupq_n_u8(0)),
0x1E => vextq_u8::<0x0E>(addition, vdupq_n_u8(0)),
0x1F => vextq_u8::<0x0F>(addition, vdupq_n_u8(0)),
_ => vdupq_n_u8(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn arvextq_u8<const N: i32>(vector: uint8x16_t, addition: uint8x16_t) -> uint8x16_t {
return match N {
0x00 => vector,
0x01 => vextq_u8::<0x0F>(addition, vector),
0x02 => vextq_u8::<0x0E>(addition, vector),
0x03 => vextq_u8::<0x0D>(addition, vector),
0x04 => vextq_u8::<0x0C>(addition, vector),
0x05 => vextq_u8::<0x0B>(addition, vector),
0x06 => vextq_u8::<0x0A>(addition, vector),
0x07 => vextq_u8::<0x09>(addition, vector),
0x08 => vextq_u8::<0x08>(addition, vector),
0x09 => vextq_u8::<0x07>(addition, vector),
0x0A => vextq_u8::<0x06>(addition, vector),
0x0B => vextq_u8::<0x05>(addition, vector),
0x0C => vextq_u8::<0x04>(addition, vector),
0x0D => vextq_u8::<0x03>(addition, vector),
0x0E => vextq_u8::<0x02>(addition, vector),
0x0F => vextq_u8::<0x01>(addition, vector),
0x10 => addition,
0x11 => vextq_u8::<0x0F>(vdupq_n_u8(0), addition),
0x12 => vextq_u8::<0x0E>(vdupq_n_u8(0), addition),
0x13 => vextq_u8::<0x0D>(vdupq_n_u8(0), addition),
0x14 => vextq_u8::<0x0C>(vdupq_n_u8(0), addition),
0x15 => vextq_u8::<0x0B>(vdupq_n_u8(0), addition),
0x16 => vextq_u8::<0x0A>(vdupq_n_u8(0), addition),
0x17 => vextq_u8::<0x09>(vdupq_n_u8(0), addition),
0x18 => vextq_u8::<0x08>(vdupq_n_u8(0), addition),
0x19 => vextq_u8::<0x07>(vdupq_n_u8(0), addition),
0x1A => vextq_u8::<0x06>(vdupq_n_u8(0), addition),
0x1B => vextq_u8::<0x05>(vdupq_n_u8(0), addition),
0x1C => vextq_u8::<0x04>(vdupq_n_u8(0), addition),
0x1D => vextq_u8::<0x03>(vdupq_n_u8(0), addition),
0x1E => vextq_u8::<0x02>(vdupq_n_u8(0), addition),
0x1F => vextq_u8::<0x01>(vdupq_n_u8(0), addition),
_ => vdupq_n_u8(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn alvext_u16<const N: i32>(vector: uint16x4_t, addition: uint16x4_t) -> uint16x4_t {
return match N {
0x00 => vector,
0x01 => vext_u16::<0x01>(vector, addition),
0x02 => vext_u16::<0x02>(vector, addition),
0x03 => vext_u16::<0x03>(vector, addition),
0x04 => addition,
0x05 => vext_u16::<0x01>(addition, vdup_n_u16(0)),
0x06 => vext_u16::<0x02>(addition, vdup_n_u16(0)),
0x07 => vext_u16::<0x03>(addition, vdup_n_u16(0)),
_ => vdup_n_u16(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn arvext_u16<const N: i32>(vector: uint16x4_t, addition: uint16x4_t) -> uint16x4_t {
return match N {
0x00 => vector,
0x01 => vext_u16::<0x03>(addition, vector),
0x02 => vext_u16::<0x02>(addition, vector),
0x03 => vext_u16::<0x01>(addition, vector),
0x04 => addition,
0x05 => vext_u16::<0x03>(vdup_n_u16(0), addition),
0x06 => vext_u16::<0x02>(vdup_n_u16(0), addition),
0x07 => vext_u16::<0x01>(vdup_n_u16(0), addition),
_ => vdup_n_u16(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn alvextq_u16<const N: i32>(vector: uint16x8_t, addition: uint16x8_t) -> uint16x8_t {
return match N {
0x00 => vector,
0x01 => vextq_u16::<0x01>(vector, addition),
0x02 => vextq_u16::<0x02>(vector, addition),
0x03 => vextq_u16::<0x03>(vector, addition),
0x04 => vextq_u16::<0x04>(vector, addition),
0x05 => vextq_u16::<0x05>(vector, addition),
0x06 => vextq_u16::<0x06>(vector, addition),
0x07 => vextq_u16::<0x07>(vector, addition),
0x08 => addition,
0x09 => vextq_u16::<0x01>(addition, vdupq_n_u16(0)),
0x0A => vextq_u16::<0x02>(addition, vdupq_n_u16(0)),
0x0B => vextq_u16::<0x03>(addition, vdupq_n_u16(0)),
0x0C => vextq_u16::<0x04>(addition, vdupq_n_u16(0)),
0x0D => vextq_u16::<0x05>(addition, vdupq_n_u16(0)),
0x0E => vextq_u16::<0x06>(addition, vdupq_n_u16(0)),
0x0F => vextq_u16::<0x07>(addition, vdupq_n_u16(0)),
_ => vdupq_n_u16(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn arvextq_u16<const N: i32>(vector: uint16x8_t, addition: uint16x8_t) -> uint16x8_t {
return match N {
0x00 => vector,
0x01 => vextq_u16::<0x07>(addition, vector),
0x02 => vextq_u16::<0x06>(addition, vector),
0x03 => vextq_u16::<0x05>(addition, vector),
0x04 => vextq_u16::<0x04>(addition, vector),
0x05 => vextq_u16::<0x03>(addition, vector),
0x06 => vextq_u16::<0x02>(addition, vector),
0x07 => vextq_u16::<0x01>(addition, vector),
0x08 => addition,
0x09 => vextq_u16::<0x07>(vdupq_n_u16(0), addition),
0x0A => vextq_u16::<0x06>(vdupq_n_u16(0), addition),
0x0B => vextq_u16::<0x05>(vdupq_n_u16(0), addition),
0x0C => vextq_u16::<0x04>(vdupq_n_u16(0), addition),
0x0D => vextq_u16::<0x03>(vdupq_n_u16(0), addition),
0x0E => vextq_u16::<0x02>(vdupq_n_u16(0), addition),
0x0F => vextq_u16::<0x01>(vdupq_n_u16(0), addition),
_ => vdupq_n_u16(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn alvext_u32<const N: i32>(vector: uint32x2_t, addition: uint32x2_t) -> uint32x2_t {
return match N {
0x00 => vector,
0x01 => vext_u32::<0x01>(vector, addition),
0x02 => addition,
0x03 => vext_u32::<0x01>(addition, vdup_n_u32(0)),
_ => vdup_n_u32(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn arvext_u32<const N: i32>(vector: uint32x2_t, addition: uint32x2_t) -> uint32x2_t {
return match N {
0x00 => vector,
0x01 => vext_u32::<0x01>(addition, vector),
0x02 => addition,
0x03 => vext_u32::<0x01>(vdup_n_u32(0), addition),
_ => vdup_n_u32(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn alvextq_u32<const N: i32>(vector: uint32x4_t, addition: uint32x4_t) -> uint32x4_t {
return match N {
0x00 => vector,
0x01 => vextq_u32::<0x01>(vector, addition),
0x02 => vextq_u32::<0x02>(vector, addition),
0x03 => vextq_u32::<0x03>(vector, addition),
0x04 => addition,
0x05 => vextq_u32::<0x01>(addition, vdupq_n_u32(0)),
0x06 => vextq_u32::<0x02>(addition, vdupq_n_u32(0)),
0x07 => vextq_u32::<0x03>(addition, vdupq_n_u32(0)),
_ => vdupq_n_u32(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn arvextq_u32<const N: i32>(vector: uint32x4_t, addition: uint32x4_t) -> uint32x4_t {
return match N {
0x00 => vector,
0x01 => vextq_u32::<0x03>(addition, vector),
0x02 => vextq_u32::<0x02>(addition, vector),
0x03 => vextq_u32::<0x01>(addition, vector),
0x04 => addition,
0x05 => vextq_u32::<0x03>(vdupq_n_u32(0), addition),
0x06 => vextq_u32::<0x02>(vdupq_n_u32(0), addition),
0x07 => vextq_u32::<0x01>(vdupq_n_u32(0), addition),
_ => vdupq_n_u32(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn alvext_u64<const N: i32>(vector: uint64x1_t, addition: uint64x1_t) -> uint64x1_t {
return match N {
0x00 => vector,
0x01 => addition,
_ => vdup_n_u64(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn arvext_u64<const N: i32>(vector: uint64x1_t, addition: uint64x1_t) -> uint64x1_t {
return match N {
0x00 => vector,
0x01 => addition,
_ => vdup_n_u64(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn alvextq_u64<const N: i32>(vector: uint64x2_t, addition: uint64x2_t) -> uint64x2_t {
return match N {
0x00 => vector,
0x01 => vextq_u64::<0x01>(vector, addition),
0x02 => addition,
0x03 => vextq_u64::<0x01>(addition, vdupq_n_u64(0)),
_ => vdupq_n_u64(0),
};
}
#[cfg(all(any(all(target_arch = "arm", target_feature = "v7"), target_arch = "aarch64"), target_feature = "neon"))]
#[inline]
pub unsafe fn arvextq_u64<const N: i32>(vector: uint64x2_t, addition: uint64x2_t) -> uint64x2_t {
return match N {
0x00 => vector,
0x01 => vextq_u64::<0x01>(addition, vector),
0x02 => addition,
0x03 => vextq_u64::<0x01>(vdupq_n_u64(0), addition),
_ => vdupq_n_u64(0),
};
}